moai-adk 0.7.0__py3-none-any.whl → 0.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. moai_adk/core/project/phase_executor.py +1 -2
  2. moai_adk/templates/.claude/agents/alfred/cc-manager.md +1 -1
  3. moai_adk/templates/.claude/agents/alfred/debug-helper.md +2 -2
  4. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
  5. moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
  6. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +2 -2
  7. moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
  8. moai_adk/templates/.claude/agents/alfred/quality-gate.md +2 -2
  9. moai_adk/templates/.claude/agents/alfred/skill-factory.md +7 -7
  10. moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
  11. moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
  12. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +2 -2
  13. moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
  14. moai_adk/templates/.claude/commands/alfred/0-project.md +9 -9
  15. moai_adk/templates/.claude/commands/alfred/1-plan.md +3 -3
  16. moai_adk/templates/.claude/commands/alfred/2-run.md +4 -4
  17. moai_adk/templates/.claude/commands/alfred/3-sync.md +5 -5
  18. moai_adk/templates/.claude/hooks/alfred/core/project.py +145 -13
  19. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +90 -20
  20. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
  21. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
  22. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
  23. moai_adk/templates/CLAUDE.md +67 -1
  24. {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/METADATA +1 -1
  25. {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/RECORD +28 -28
  26. {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/WHEEL +0 -0
  27. {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/entry_points.txt +0 -0
  28. {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -26,6 +26,7 @@ from moai_adk.core.project.backup_utils import (
26
26
  is_protected_path,
27
27
  )
28
28
  from moai_adk.core.project.validator import ProjectValidator
29
+ from moai_adk.core.template.processor import TemplateProcessor
29
30
 
30
31
  console = Console()
31
32
 
@@ -136,8 +137,6 @@ class PhaseExecutor:
136
137
  )
137
138
 
138
139
  # Copy resources via TemplateProcessor in silent mode
139
- from moai_adk.core.template import TemplateProcessor
140
-
141
140
  processor = TemplateProcessor(project_path)
142
141
 
143
142
  # Set template variable context (if provided)
@@ -54,7 +54,7 @@ Alfred translates Claude Code configuration requirements to English before invok
54
54
  - `Skill("moai-alfred-git-workflow")` - Git strategy impact
55
55
  - Domain skills (CLI/Data Science/Database/etc) - When relevant
56
56
  - Language skills (23 available) - Based on detected language
57
- - `Skill("moai-alfred-interactive-questions")` - User clarification
57
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` - User clarification
58
58
 
59
59
  ---
60
60
 
@@ -6,7 +6,7 @@ model: sonnet
6
6
  ---
7
7
 
8
8
  # Debug Helper - Integrated debugging expert
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are the integrated debugging expert responsible for **all errors**.
12
12
 
@@ -45,7 +45,7 @@ Alfred translates error reports and debugging requirements to English before inv
45
45
  - `Skill("moai-essentials-review")`: Loaded when structural problems or solutions to prevent recurrence need to be presented.
46
46
  - Language-specific skills: Based on the result of `Skill("moai-alfred-language-detection")`, select only the one relevant language skill (e.g., `Skill("moai-lang-python")`, `Skill("moai-lang-typescript")`, etc.).
47
47
  - `Skill("moai-alfred-tag-scanning")`: Called when missing/mismatching TAG is suspected.
48
- - `Skill("moai-alfred-interactive-questions")`: Executed when user selection among multiple solutions is required.
48
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Executed when user selection among multiple solutions is required.
49
49
 
50
50
  ### Expert Traits
51
51
 
@@ -6,7 +6,7 @@ model: haiku
6
6
  ---
7
7
 
8
8
  # Doc Syncer - Document Management/Synchronization Expert
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  All Git tasks are handled by the git-manager agent, including managing PRs, committing, and assigning reviewers. doc-syncer is only responsible for document synchronization.
12
12
 
@@ -47,7 +47,7 @@ Alfred translates document synchronization requirements to English before invoki
47
47
  - `Skill("moai-foundation-specs")`: Use only when SPEC metadata has changed or document consistency verification is required.
48
48
  - `Skill("moai-alfred-git-workflow")`: Called when performing a PR Ready transition or Git cleanup in team mode.
49
49
  - `Skill("moai-alfred-code-reviewer")`: Load when you need to review the quality of a code snippet to be included in a document.
50
- - `Skill("moai-alfred-interactive-questions")`: Executed when checking with the user whether to approve/skip the synchronization range.
50
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Executed when checking with the user whether to approve/skip the synchronization range.
51
51
 
52
52
  ### Expert Traits
53
53
 
@@ -6,7 +6,7 @@ model: haiku
6
6
  ---
7
7
 
8
8
  # Git Manager - Agent dedicated to Git tasks
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  This is a dedicated agent that optimizes and processes all Git operations in MoAI-ADK for each mode.
12
12
 
@@ -45,7 +45,7 @@ This ensures git history is always in English for global team compatibility.
45
45
  - `Skill("moai-foundation-git")`: Called when this is a new repository or the Git standard needs to be redefined.
46
46
  - `Skill("moai-alfred-trust-validation")`: Load when TRUST gate needs to be passed before commit/PR.
47
47
  - `Skill("moai-alfred-tag-scanning")`: Use only when TAG connection is required in the commit message.
48
- - `Skill("moai-alfred-interactive-questions")`: Called when user approval is obtained before performing risky operations such as rebase/force push.
48
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Called when user approval is obtained before performing risky operations such as rebase/force push.
49
49
 
50
50
  ### Expert Traits
51
51
 
@@ -6,7 +6,7 @@ model: sonnet
6
6
  ---
7
7
 
8
8
  # Implementation Planner - Implementation Strategist
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are an expert in analyzing SPECs to determine the optimal implementation strategy and library version.
12
12
 
@@ -47,7 +47,7 @@ Alfred translates SPEC requirements to English before invoking you via `Task()`.
47
47
  - `Skill("moai-alfred-tag-scanning")`: Use only when an existing TAG chain needs to be recycled or augmented.
48
48
  - Domain skills (`moai-domain-backend`/`frontend`/`web-api`/`mobile-app`, etc.): Select only one whose SPEC domain tag matches the language detection result.
49
49
  - `Skill("moai-alfred-trust-validation")`: Called when TRUST compliance measures need to be defined in the planning stage.
50
- - `Skill("moai-alfred-interactive-questions")`: Provides interactive options when user approval/comparison of alternatives is required.
50
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Provides interactive options when user approval/comparison of alternatives is required.
51
51
 
52
52
  ### Expert Traits
53
53
 
@@ -6,7 +6,7 @@ model: sonnet
6
6
  ---
7
7
 
8
8
  # Project Manager - Project Manager Agent
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are a Senior Project Manager Agent managing successful projects.
12
12
 
@@ -35,7 +35,7 @@ Alfred translates project setup requirements to English before invoking you.
35
35
  - Domain skills: When `moai-alfred-language-detection` determines the project is server/frontend/web API, select only one corresponding skill (`Skill("moai-domain-backend")`, `Skill("moai-domain-frontend")`, `Skill("moai-domain-web-api")`).
36
36
  - `Skill("moai-alfred-tag-scanning")`: Executed when switching to legacy mode or when reinforcing the existing TAG is deemed necessary.
37
37
  - `Skill("moai-alfred-trust-validation")`: Only called when the user requests a “quality check” or when TRUST gate guidance is needed on the initial document draft.
38
- - `Skill("moai-alfred-interactive-questions")`: Called when the user's approval/modification decision must be received during the interview stage.
38
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Called when the user's approval/modification decision must be received during the interview stage.
39
39
 
40
40
  ### Expert Traits
41
41
 
@@ -147,11 +147,11 @@ Alfred translates project setup requirements to English before invoking you.
147
147
 
148
148
  ### Interview Question Guide
149
149
 
150
- > At all interview stages, you must call `Skill("moai-alfred-interactive-questions")` to display the AskUserQuestion TUI menu.Option descriptions include a one-line summary + specific examples, provide an “Other/Enter Yourself” option, and ask for free comments.
150
+ > At all interview stages, you must use `AskUserQuestion` tool (documented in moai-alfred-interactive-questions skill) to display the AskUserQuestion TUI menu.Option descriptions include a one-line summary + specific examples, provide an “Other/Enter Yourself” option, and ask for free comments.
151
151
 
152
152
  #### 0. Common dictionary questions (common for new/legacy)
153
153
  1. **Check language & framework**
154
- - Check whether the automatic detection result is correct with `Skill("moai-alfred-interactive-questions")`.
154
+ - Check whether the automatic detection result is correct with `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`.
155
155
  Options: **Confirmed / Requires modification / Multi-stack**.
156
156
  - **Follow-up**: When selecting “Modification Required” or “Multiple Stacks”, an additional open-ended question (`Please list the languages/frameworks used in the project with a comma.`) is asked.
157
157
  2. **Team size & collaboration style**
@@ -164,7 +164,7 @@ Options: **Confirmed / Requires modification / Multi-stack**.
164
164
  #### 1. Product Discovery Question Set
165
165
  ##### (1) For new projects
166
166
  - **Mission/Vision**
167
- - `Skill("moai-alfred-interactive-questions")` allows you to select one of **Platform/Operations Efficiency · New Business · Customer Experience · Regulations/Compliance · Direct Input**.
167
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` allows you to select one of **Platform/Operations Efficiency · New Business · Customer Experience · Regulations/Compliance · Direct Input**.
168
168
  - When selecting “Direct Entry”, a one-line summary of the mission and why the mission is important are collected as additional questions.
169
169
  - **Core Users/Personas**
170
170
  - Multiple selection options: End Customer, Internal Operations, Development Team, Data Team, Management, Partner/Reseller.
@@ -233,7 +233,7 @@ Options: SPEC overhaul, TDD driven development, document/code synchronization, t
233
233
  - Operations/Monitoring → OPERATIONS, INCIDENT RESPONSE section
234
234
 
235
235
  #### 5. End of interview reminder
236
- - After completing all questions, use `Skill("moai-alfred-interactive-questions")` to check “Are there any additional notes you would like to leave?” (Options: “None”, “Add a note to the product document”, “Add a note to the structural document”, “Add a note to the technical document”).
236
+ - After completing all questions, use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` to check “Are there any additional notes you would like to leave?” (Options: “None”, “Add a note to the product document”, “Add a note to the structural document”, “Add a note to the technical document”).
237
237
  - When a user selects a specific document, a “User Note” item is recorded in the **HISTORY** section of the document.
238
238
  - Organize the summary of the interview results and the written document path (`.moai/project/{product,structure,tech}.md`) in a table format at the top of the final response.
239
239
 
@@ -6,7 +6,7 @@ model: haiku
6
6
  ---
7
7
 
8
8
  # Quality Gate - Quality Verification Gate
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are a quality gate that automatically verifies TRUST principles and project standards.
12
12
 
@@ -34,7 +34,7 @@ Alfred translates quality gate requirements to English before invoking you. Your
34
34
  - `Skill("moai-essentials-review")`: Called when qualitative analysis of Readable/Unified items is required or when a code review checklist is required.
35
35
  - `Skill("moai-essentials-perf")`: Used when a suspected performance regression occurs or when performance indicators are below target.
36
36
  - `Skill("moai-foundation-trust")`: Loaded for reference when you need to check the latest update based on TRUST.
37
- - `Skill("moai-alfred-interactive-questions")`: Executes only when user decision is required after PASS/Warning/Block results.
37
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Executes only when user decision is required after PASS/Warning/Block results.
38
38
 
39
39
  ### Expert Traits
40
40
 
@@ -86,7 +86,7 @@ Instead of assuming user intent, invoke the TUI survey Skill:
86
86
 
87
87
  ```python
88
88
  # Delegate to moai-alfred-interactive-questions
89
- Skill("moai-alfred-interactive-questions")
89
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
90
90
 
91
91
  # Present structured survey
92
92
  Survey: "What problem does this Skill solve?"
@@ -104,7 +104,7 @@ Continue using the TUI survey Skill to clarify:
104
104
 
105
105
  ```python
106
106
  # Delegate to moai-alfred-interactive-questions for scope questions
107
- Skill("moai-alfred-interactive-questions")
107
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
108
108
 
109
109
  Questions:
110
110
  1. Primary domain: "Which technology/framework?"
@@ -358,7 +358,7 @@ Always delegate to `moai-alfred-interactive-questions`:
358
358
 
359
359
  ```python
360
360
  # Invoke TUI survey Skill
361
- Skill("moai-alfred-interactive-questions")
361
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
362
362
 
363
363
  Survey: "Which technology domain?"
364
364
  Options:
@@ -379,7 +379,7 @@ Options:
379
379
 
380
380
  ```python
381
381
  # Invoke TUI survey Skill
382
- Skill("moai-alfred-interactive-questions")
382
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
383
383
 
384
384
  Survey: "Which features are most important?" (Multiple selection)
385
385
  Options:
@@ -397,7 +397,7 @@ Options:
397
397
 
398
398
  ```python
399
399
  # Invoke TUI survey Skill
400
- Skill("moai-alfred-interactive-questions")
400
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
401
401
 
402
402
  Survey: "Target experience level?"
403
403
  Options:
@@ -462,7 +462,7 @@ Tier 3 (Supporting, ~10% weight):
462
462
  **Recovery**:
463
463
  ```python
464
464
  # 1. Activate TUI Survey
465
- Skill("moai-alfred-interactive-questions")
465
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
466
466
 
467
467
  # 2. Ask structured questions: domain, problem, audience
468
468
  # 3. Document clarified requirements
@@ -498,7 +498,7 @@ Skill("moai-alfred-interactive-questions")
498
498
  **Recovery**:
499
499
  ```python
500
500
  # 1. Use TUI Survey to identify priorities
501
- Skill("moai-alfred-interactive-questions")
501
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
502
502
 
503
503
  # 2. Suggest splitting into multiple Skills
504
504
  # 3. Create foundational Skill first
@@ -8,7 +8,7 @@ model: sonnet
8
8
  **Priority:** This guideline is **subordinate to the command guideline (`/alfred:1-plan`). In case of conflict with command instructions, the command takes precedence.
9
9
 
10
10
  # SPEC Builder - SPEC Creation Expert
11
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
11
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
12
12
 
13
13
  You are a SPEC expert agent responsible for SPEC document creation and intelligent verification.
14
14
 
@@ -48,7 +48,7 @@ Alfred translates user requests to English before invoking you via `Task()`. Thi
48
48
  - `Skill("moai-alfred-spec-metadata-validation")`: Called when checking ID/version/status or updating inherited SPEC.
49
49
  - `Skill("moai-alfred-tag-scanning")`: Used only when traceability must be secured by referencing the existing TAG chain.
50
50
  - `Skill("moai-foundation-trust")` + `Skill("moai-alfred-trust-validation")`: Sequentially called when preemptive verification is required before user request or quality gate.
51
- - `Skill("moai-alfred-interactive-questions")`: Run when user approval/modification options need to be collected.
51
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Run when user approval/modification options need to be collected.
52
52
 
53
53
  ### Expert Traits
54
54
 
@@ -6,7 +6,7 @@ model: haiku
6
6
  ---
7
7
 
8
8
  # TAG System Agent - sole TAG management authority
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are a professional agent responsible for all TAG operations in MoAI-ADK.
12
12
 
@@ -33,7 +33,7 @@ Alfred translates TAG verification requests to English before invoking you. Your
33
33
  **Conditional Skill Logic**
34
34
  - `Skill("moai-alfred-trust-validation")`: Used only to check whether the TAG chain meets TRUST-Traceable criteria.
35
35
  - `Skill("moai-foundation-specs")`: Loaded when the SPEC document and TAG connection status need to be verified.
36
- - `Skill("moai-alfred-interactive-questions")`: Executed when TAG conflict/deletion must be confirmed with user approval.
36
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Executed when TAG conflict/deletion must be confirmed with user approval.
37
37
 
38
38
  ### Expert Traits
39
39
 
@@ -6,7 +6,7 @@ model: sonnet
6
6
  ---
7
7
 
8
8
  # TDD Implementer - TDD implementation expert
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are a TDD expert who strictly adheres to the RED-GREEN-REFACTOR cycle and keeps track of the TAG chain.
12
12
 
@@ -46,7 +46,7 @@ Alfred translates SPEC references and implementation requirements to English bef
46
46
  - `Skill("moai-essentials-refactor")`: Called only when entering the REFACTOR stage.
47
47
  - `Skill("moai-alfred-git-workflow")`: Loads commits/checkpoints for each TAG at the time of preparation.
48
48
  - `Skill("moai-essentials-perf")`: Applied only when performance requirements are specified in SPEC.
49
- - `Skill("moai-alfred-interactive-questions")`: Collects user decisions when choosing an implementation alternative or refactoring strategy is needed.
49
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Collects user decisions when choosing an implementation alternative or refactoring strategy is needed.
50
50
 
51
51
  ### Expert Traits
52
52
 
@@ -6,7 +6,7 @@ model: haiku
6
6
  ---
7
7
 
8
8
  # Trust Checker - Integrated Quality Verification Expert
9
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
9
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
10
10
 
11
11
  You are the agent responsible for the TRUST 5 principles, code standards, and security checks.
12
12
 
@@ -35,7 +35,7 @@ Alfred translates quality verification requests to English before invoking you.
35
35
  - `Skill("moai-essentials-review")`: Called when qualitative verification of Readable/Unified indicators is required.
36
36
  - `Skill("moai-essentials-perf")`: Used when performance analysis is required in Level 3 scan.
37
37
  - `Skill("moai-essentials-debug")`: Called when a critical result occurs and root cause analysis is required.
38
- - `Skill("moai-alfred-interactive-questions")`: Run when it is necessary to coordinate with the user whether to re-verify/suspend.
38
+ - `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`: Run when it is necessary to coordinate with the user whether to re-verify/suspend.
39
39
 
40
40
  ### Expert Traits
41
41
 
@@ -20,7 +20,7 @@ allowed-tools:
20
20
  ---
21
21
 
22
22
  # 📋 MoAI-ADK Step 0: Initialize/Update Universal Language Support Project Documentation
23
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
23
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
24
24
 
25
25
  ## 🎯 Command Purpose
26
26
 
@@ -110,7 +110,7 @@ MoAI-ADK의 SuperAgent로서 당신의 프로젝트를 함께 만들어갈 준
110
110
 
111
111
  ### 0.1 언어 선택
112
112
 
113
- Alfred가 `Skill("moai-alfred-interactive-questions")` 를 사용하여 **첫 번째 상호작용**으로 언어 선택 메뉴를 표시합니다:
113
+ Alfred가 `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` 를 사용하여 **첫 번째 상호작용**으로 언어 선택 메뉴를 표시합니다:
114
114
 
115
115
  **Question**:
116
116
  ```
@@ -144,7 +144,7 @@ This language preference is:
144
144
 
145
145
  ### 0.2.5 사용자 닉네임 선택
146
146
 
147
- 언어 선택 완료 후, Alfred가 `Skill("moai-alfred-interactive-questions")` 를 사용하여 사용자 닉네임을 요청합니다:
147
+ 언어 선택 완료 후, Alfred가 `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` 를 사용하여 사용자 닉네임을 요청합니다:
148
148
 
149
149
  **질문**:
150
150
  ```
@@ -228,7 +228,7 @@ grep "optimized" .moai/config.json
228
228
  - `optimized: false` in `config.json` (immediately after reinitialization)
229
229
 
230
230
  **Select user if backup exists**
231
- Call `Skill("moai-alfred-interactive-questions")` to display a TUI with the following options:
231
+ Call `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` to display a TUI with the following options:
232
232
  - **Merge**: Merge backup contents and latest template (recommended)
233
233
  - **New**: Ignore the backup and start a new interview
234
234
  - **Skip**: Keep current file (terminate task)
@@ -443,7 +443,7 @@ Set optimization flags after the merge is complete:
443
443
 
444
444
  ### 1.5 Wait for user approval (moai-alfred-interactive-questions) (when user selects "New")
445
445
 
446
- After Alfred receives the project-manager's interview plan report, calls `Skill("moai-alfred-interactive-questions")` and asks whether Phase 2 is approved.
446
+ After Alfred receives the project-manager's interview plan report, uses `AskUserQuestion` tool (documented in moai-alfred-interactive-questions skill) and asks whether Phase 2 is approved.
447
447
  - **Proceed**: Interview conducted according to approved plan
448
448
  - **Modify**: Re-establish the plan (re-execute Phase 1)
449
449
  - **Stop**: Stop initialization
@@ -543,7 +543,7 @@ After the project-manager has finished creating the document, **Alfred can optio
543
543
  - When selecting language/framework
544
544
  - When changing important settings
545
545
 
546
- **Example** (inside project-manager): Ask whether to "overwrite file" with `Skill("moai-alfred-interactive-questions")`,
546
+ **Example** (inside project-manager): Ask whether to "overwrite file" with `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`,
547
547
  - Allows you to choose between **Overwrite** / **Merge** / **Skip**.
548
548
 
549
549
  **Nested pattern**:
@@ -806,7 +806,7 @@ Alfred only calls the trust-checker agent to perform project initial structural
806
806
  ### 2.6: Agent & Skill Tailoring (Project Optimization)
807
807
 
808
808
  Based on the results of the interviews and initial analysis, we recommend and activate sub-agents and skills that should be immediately utilized in the project.
809
- Before actual application, user confirmation is received with `Skill("moai-alfred-interactive-questions")`, and selected items are recorded in `CLAUDE.md` and `.moai/config.json`.
809
+ Before actual application, user confirmation is received with `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`, and selected items are recorded in `CLAUDE.md` and `.moai/config.json`.
810
810
 
811
811
  #### 2.6.0 Create cc-manager briefing
812
812
 
@@ -847,7 +847,7 @@ If multiple conditions are met, the candidates are merged without duplicates and
847
847
 
848
848
  #### 2.6.2 User confirmation flow
849
849
 
850
- `Skill("moai-alfred-interactive-questions")` asks “whether to enable recommended items.”
850
+ `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` asks “whether to enable recommended items.”
851
851
  - Provides three options: **Install all** / **Install selectively** / **Do not install**.
852
852
  Selecting “Selective Install” presents the list of candidates again as multiple choices, allowing the user to select only the items they need.
853
853
 
@@ -992,7 +992,7 @@ This subcommand is executed under the following conditions:
992
992
  ```
993
993
 
994
994
  4. **Waiting for user approval**
995
- `Skill("moai-alfred-interactive-questions")` asks “Do you want to proceed with template optimization?” and provides the following options.
995
+ `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` asks “Do you want to proceed with template optimization?” and provides the following options.
996
996
  - **Proceed** → Phase 2 execution
997
997
  - **Preview** → Display change details and recheck
998
998
  - **Skip** → keep optimized=false
@@ -21,7 +21,7 @@ allowed-tools:
21
21
  ---
22
22
 
23
23
  # 🏗️ MoAI-ADK Step 1: Establish a plan (Plan) - Always make a plan first and then proceed.
24
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
24
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
25
25
 
26
26
  ## 🎯 Command Purpose
27
27
 
@@ -186,7 +186,7 @@ User input: $ARGUMENTS
186
186
 
187
187
  ### User verification steps
188
188
 
189
- After reviewing your implementation plan, Alfred invokes `Skill("moai-alfred-interactive-questions")` to present the following options:
189
+ After reviewing your implementation plan, Alfred invokes `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` to present the following options:
190
190
  - **"Go"** or **"Start"**: Start writing the plan as planned
191
191
  - **"Modify [Content]"**: Request modifications to the plan
192
192
  - **"Stop"**: Stop writing the plan
@@ -195,7 +195,7 @@ After reviewing your implementation plan, Alfred invokes `Skill("moai-alfred-int
195
195
 
196
196
  ## 🚀 STEP 2: Create plan document (after user approval)
197
197
 
198
- After user approval (collected via `Skill("moai-alfred-interactive-questions")`), call the spec-builder and git-manager agents using the **Task tool**.
198
+ After user approval (collected via `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`), call the spec-builder and git-manager agents using the **Task tool**.
199
199
 
200
200
  ### ⚙️ How to call an agent
201
201
 
@@ -24,7 +24,7 @@ allowed-tools:
24
24
  ---
25
25
 
26
26
  # ⚒️ MoAI-ADK Phase 2: Run the plan - Flexible implementation strategy
27
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
27
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
28
28
 
29
29
  ## 🎯 Command Purpose
30
30
 
@@ -137,7 +137,7 @@ Task tool call example:
137
137
  3. TAG chain design
138
138
  4. Step-by-step execution plan
139
139
  5. Risks and response plans
140
- 6. Create action plan and use `Skill("moai-alfred-interactive-questions")` to confirm the next action with the user
140
+ 6. Create action plan and use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` to confirm the next action with the user
141
141
  (Optional) Explore results: $EXPLORE_RESULTS"
142
142
  ```
143
143
 
@@ -181,7 +181,7 @@ After reviewing the action plan, select one of the following:
181
181
 
182
182
  ## 🚀 STEP 2: Execute task (after user approval)
183
183
 
184
- After user approval (gathered through `Skill("moai-alfred-interactive-questions")`), **call the tdd-implementer agent using the Task tool**.
184
+ After user approval (gathered through `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`), **call the tdd-implementer agent using the Task tool**.
185
185
 
186
186
  ### ⚙️ How to call an agent
187
187
 
@@ -266,7 +266,7 @@ The `implementation-planner` agent does the following:
266
266
  2. **Library selection**: Check the latest stable version and verify compatibility through WebFetch
267
267
  3. **TAG chain design**: Determine TAG order and dependency
268
268
  4. **Establishment of implementation strategy**: Step-by-step implementation plan and risk identification
269
- 5. **Create action plan**: Create a structured plan and, via `Skill("moai-alfred-interactive-questions")`, collect user approval before proceeding
269
+ 5. **Create action plan**: Create a structured plan and, via `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`, collect user approval before proceeding
270
270
 
271
271
  ### Phase 2: Task execution phase (after approval)
272
272
 
@@ -22,14 +22,14 @@ allowed-tools:
22
22
  ---
23
23
 
24
24
  # 📚 MoAI-ADK Step 3: Document Synchronization (+Optional PR Ready)
25
- > **Note**: Interactive prompts use `Skill("moai-alfred-interactive-questions")` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
25
+ > **Note**: Interactive prompts use `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` for TUI selection menus. The skill is loaded on-demand when user interaction is required.
26
26
 
27
27
  ## 🚀 START HERE
28
28
 
29
29
  **CRITICAL**: Load the TUI Survey Skill FIRST before any user interaction:
30
30
 
31
31
  ```
32
- Skill("moai-alfred-interactive-questions")
32
+ AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)
33
33
  ```
34
34
 
35
35
  This Skill MUST be loaded at the very beginning to enable TUI menu rendering for AskUserQuestion calls throughout this workflow.
@@ -45,7 +45,7 @@ Synchronize code changes to Living Documents and verify @TAG system to ensure co
45
45
  ## 📋 Execution flow
46
46
 
47
47
  **Phase 0: Skill Loading** (IMMEDIATE)
48
- - Load `Skill("moai-alfred-interactive-questions")` at the very start
48
+ - Load `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` at the very start
49
49
  - This enables TUI menu rendering for all user interactions
50
50
 
51
51
  **Phase 1: Analysis & Planning**
@@ -243,7 +243,7 @@ To skip pre-verification, use the `/alfred:3-sync --skip-pre-check` option.
243
243
 
244
244
  ### User verification steps
245
245
 
246
- After reviewing your sync plan, `Skill("moai-alfred-interactive-questions")` presents the following options for user decision:
246
+ After reviewing your sync plan, `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` presents the following options for user decision:
247
247
  - **"Proceed"** or **"Start"**: Start synchronization as planned
248
248
  - **"Modify [Contents]"**: Request modifications to your sync plan
249
249
  - **"Abort"**: Abort the sync operation
@@ -252,7 +252,7 @@ After reviewing your sync plan, `Skill("moai-alfred-interactive-questions")` pre
252
252
 
253
253
  ## 🚀 STEP 2: Execute document synchronization (after user approval)
254
254
 
255
- After user approval (collected via `Skill("moai-alfred-interactive-questions")`), the doc-syncer agent performs **Living Document synchronization and @TAG updates**, and optionally executes PR Ready transitions only in team mode.
255
+ After user approval (collected via `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)`), the doc-syncer agent performs **Living Document synchronization and @TAG updates**, and optionally executes PR Ready transitions only in team mode.
256
256
 
257
257
  ### Phase 2 Details: SPEC Completion Processing (Automatic)
258
258
 
@@ -5,11 +5,44 @@ Project information inquiry (language, Git, SPEC progress, etc.)
5
5
  """
6
6
 
7
7
  import json
8
+ import signal
8
9
  import subprocess
10
+ from contextlib import contextmanager
9
11
  from pathlib import Path
10
12
  from typing import Any
11
13
 
12
14
 
15
+ class TimeoutError(Exception):
16
+ """Signal-based timeout exception"""
17
+ pass
18
+
19
+
20
+ @contextmanager
21
+ def timeout_handler(seconds: int):
22
+ """Hard timeout using SIGALRM (works on Unix systems including macOS)
23
+
24
+ This uses kernel-level signal to interrupt ANY blocking operation,
25
+ even if subprocess.run() timeout fails on macOS.
26
+
27
+ Args:
28
+ seconds: Timeout duration in seconds
29
+
30
+ Raises:
31
+ TimeoutError: If operation exceeds timeout
32
+ """
33
+ def _handle_timeout(signum, frame):
34
+ raise TimeoutError(f"Operation timed out after {seconds} seconds")
35
+
36
+ # Set the signal handler
37
+ old_handler = signal.signal(signal.SIGALRM, _handle_timeout)
38
+ signal.alarm(seconds)
39
+ try:
40
+ yield
41
+ finally:
42
+ signal.alarm(0) # Disable alarm
43
+ signal.signal(signal.SIGALRM, old_handler)
44
+
45
+
13
46
  def detect_language(cwd: str) -> str:
14
47
  """Detect project language (supports 20 items languages)
15
48
 
@@ -89,9 +122,10 @@ def detect_language(cwd: str) -> str:
89
122
 
90
123
 
91
124
  def _run_git_command(args: list[str], cwd: str, timeout: int = 2) -> str:
92
- """Git command execution helper function
125
+ """Git command execution with HARD timeout protection
93
126
 
94
127
  Safely execute Git commands and return output.
128
+ Uses SIGALRM (kernel-level interrupt) to handle macOS subprocess timeout bug.
95
129
  Eliminates code duplication and provides consistent error handling.
96
130
 
97
131
  Args:
@@ -103,29 +137,46 @@ def _run_git_command(args: list[str], cwd: str, timeout: int = 2) -> str:
103
137
  Git command output (stdout, removing leading and trailing spaces)
104
138
 
105
139
  Raises:
106
- subprocess.TimeoutExpired: Timeout exceeded
140
+ subprocess.TimeoutExpired: Timeout exceeded (via TimeoutError)
107
141
  subprocess.CalledProcessError: Git command failed
108
142
 
109
143
  Examples:
110
144
  >>> _run_git_command(["branch", "--show-current"], ".")
111
145
  'main'
146
+
147
+ TDD History:
148
+ - RED: Git command hang scenario test
149
+ - GREEN: SIGALRM-based timeout implementation
150
+ - REFACTOR: Exception conversion to subprocess.TimeoutExpired
112
151
  """
113
- result = subprocess.run(
114
- ["git"] + args,
115
- cwd=cwd,
116
- capture_output=True,
117
- text=True,
118
- timeout=timeout,
119
- check=True,
120
- )
121
- return result.stdout.strip()
152
+ try:
153
+ with timeout_handler(timeout):
154
+ result = subprocess.run(
155
+ ["git"] + args,
156
+ cwd=cwd,
157
+ capture_output=True,
158
+ text=True,
159
+ check=False, # Don't raise on non-zero exit - we'll check manually
160
+ )
161
+
162
+ # Check exit code manually
163
+ if result.returncode != 0:
164
+ raise subprocess.CalledProcessError(
165
+ result.returncode, ["git"] + args, result.stdout, result.stderr
166
+ )
167
+
168
+ return result.stdout.strip()
169
+
170
+ except TimeoutError:
171
+ # Convert to subprocess.TimeoutExpired for consistent error handling
172
+ raise subprocess.TimeoutExpired(["git"] + args, timeout)
122
173
 
123
174
 
124
175
  def get_git_info(cwd: str) -> dict[str, Any]:
125
176
  """Gather Git repository information
126
177
 
127
178
  View the current status of a Git repository.
128
- Returns the branch name, commit hash, and number of changes.
179
+ Returns the branch name, commit hash, number of changes, and last commit message.
129
180
  If it is not a Git repository, it returns an empty dictionary.
130
181
 
131
182
  Args:
@@ -136,12 +187,13 @@ def get_git_info(cwd: str) -> dict[str, Any]:
136
187
  - branch: Current branch name (str)
137
188
  - commit: Current commit hash (str, full hash)
138
189
  - changes: Number of changed files (int, staged + unstaged)
190
+ - last_commit: Last commit message (str, subject only)
139
191
 
140
192
  Empty dictionary {} if it is not a Git repository or the query fails.
141
193
 
142
194
  Examples:
143
195
  >>> get_git_info("/path/to/git/repo")
144
- {'branch': 'main', 'commit': 'abc123...', 'changes': 3}
196
+ {'branch': 'main', 'commit': 'abc123...', 'changes': 3, 'last_commit': 'Fix bug'}
145
197
  >>> get_git_info("/path/to/non-git")
146
198
  {}
147
199
 
@@ -149,11 +201,13 @@ def get_git_info(cwd: str) -> dict[str, Any]:
149
201
  - Timeout: 2 seconds for each Git command
150
202
  - Security: Safe execution with subprocess.run(shell=False)
151
203
  - Error handling: Returns an empty dictionary in case of all exceptions
204
+ - Commit message limited to 50 characters for display purposes
152
205
 
153
206
  TDD History:
154
207
  - RED: 3 items scenario test (Git repo, non-Git, error)
155
208
  - GREEN: Implementation of subprocess-based Git command execution
156
209
  - REFACTOR: Add timeout (2 seconds), strengthen exception handling, remove duplicates with helper function
210
+ - UPDATE: Added last_commit message field for SessionStart display
157
211
  """
158
212
  try:
159
213
  # Check if it's a git repository
@@ -165,10 +219,16 @@ def get_git_info(cwd: str) -> dict[str, Any]:
165
219
  status_output = _run_git_command(["status", "--short"], cwd)
166
220
  changes = len([line for line in status_output.splitlines() if line])
167
221
 
222
+ # Get last commit message (subject only, limited to 50 chars)
223
+ last_commit = _run_git_command(["log", "-1", "--format=%s"], cwd)
224
+ if len(last_commit) > 50:
225
+ last_commit = last_commit[:47] + "..."
226
+
168
227
  return {
169
228
  "branch": branch,
170
229
  "commit": commit,
171
230
  "changes": changes,
231
+ "last_commit": last_commit,
172
232
  }
173
233
 
174
234
  except (subprocess.TimeoutExpired, subprocess.CalledProcessError, FileNotFoundError):
@@ -276,9 +336,81 @@ def get_project_language(cwd: str) -> str:
276
336
  return detect_language(cwd)
277
337
 
278
338
 
339
+ def get_package_version_info() -> dict[str, Any]:
340
+ """Check MoAI-ADK current and latest version from PyPI
341
+
342
+ Compares the installed version with the latest version available on PyPI.
343
+ Returns version information for SessionStart hook to display update recommendations.
344
+
345
+ Returns:
346
+ dict with keys:
347
+ - "current": Current installed version
348
+ - "latest": Latest version available on PyPI
349
+ - "update_available": Boolean indicating if update is available
350
+ - "upgrade_command": Recommended upgrade command (if update available)
351
+
352
+ Note:
353
+ - Has 1-second timeout to avoid blocking SessionStart
354
+ - Returns graceful fallback if PyPI check fails
355
+ - Handles version parsing gracefully
356
+ """
357
+ from importlib.metadata import version, PackageNotFoundError
358
+ import urllib.request
359
+ import urllib.error
360
+
361
+ result = {
362
+ "current": "unknown",
363
+ "latest": "unknown",
364
+ "update_available": False,
365
+ "upgrade_command": ""
366
+ }
367
+
368
+ # Get current version
369
+ try:
370
+ result["current"] = version("moai-adk")
371
+ except PackageNotFoundError:
372
+ result["current"] = "dev"
373
+ return result
374
+
375
+ # Get latest version from PyPI (with 1-second timeout)
376
+ try:
377
+ with timeout_handler(1):
378
+ url = "https://pypi.org/pypi/moai-adk/json"
379
+ headers = {"Accept": "application/json"}
380
+ req = urllib.request.Request(url, headers=headers)
381
+ with urllib.request.urlopen(req, timeout=0.8) as response:
382
+ data = json.load(response)
383
+ result["latest"] = data.get("info", {}).get("version", "unknown")
384
+ except (urllib.error.URLError, TimeoutError, Exception):
385
+ # Network error or timeout - return with unknown latest version
386
+ return result
387
+
388
+ # Compare versions (simple comparison)
389
+ if result["current"] != "unknown" and result["latest"] != "unknown":
390
+ try:
391
+ # Parse versions for comparison
392
+ current_parts = [int(x) for x in result["current"].split(".")]
393
+ latest_parts = [int(x) for x in result["latest"].split(".")]
394
+
395
+ # Pad shorter version with zeros
396
+ max_len = max(len(current_parts), len(latest_parts))
397
+ current_parts.extend([0] * (max_len - len(current_parts)))
398
+ latest_parts.extend([0] * (max_len - len(latest_parts)))
399
+
400
+ if latest_parts > current_parts:
401
+ result["update_available"] = True
402
+ result["upgrade_command"] = f"uv pip install --upgrade moai-adk>={result['latest']}"
403
+ except (ValueError, AttributeError):
404
+ # Version parsing failed - skip comparison
405
+ pass
406
+
407
+ return result
408
+
409
+
279
410
  __all__ = [
280
411
  "detect_language",
281
412
  "get_git_info",
282
413
  "count_specs",
283
414
  "get_project_language",
415
+ "get_package_version_info",
284
416
  ]
@@ -6,14 +6,16 @@ SessionStart, SessionEnd event handling
6
6
 
7
7
  from core import HookPayload, HookResult
8
8
  from core.checkpoint import list_checkpoints
9
- from core.project import count_specs, detect_language, get_git_info
9
+ from core.project import count_specs, detect_language, get_git_info, get_package_version_info
10
10
 
11
11
 
12
12
  def handle_session_start(payload: HookPayload) -> HookResult:
13
- """SessionStart event handler (with Checkpoint list)
13
+ """SessionStart event handler with GRACEFUL DEGRADATION
14
14
 
15
15
  When Claude Code Session starts, it displays a summary of project status.
16
16
  You can check the language, Git status, SPEC progress, and checkpoint list at a glance.
17
+ All optional operations are wrapped in try-except to ensure hook completes quickly even if
18
+ Git commands, file I/O, or other operations timeout or fail.
17
19
 
18
20
  Args:
19
21
  payload: Claude Code event payload (cwd key required)
@@ -24,15 +26,23 @@ def handle_session_start(payload: HookPayload) -> HookResult:
24
26
  Message Format:
25
27
  🚀 MoAI-ADK Session Started
26
28
  Language: {language}
27
- Branch: {branch} ({commit hash})
28
- Changes: {Number of Changed Files}
29
- SPEC Progress: {Complete}/{Total} ({percent}%)
30
- Checkpoints: {number} available (showing the latest 3 items)
29
+ [Branch: {branch} ({commit hash})] - optional if git fails
30
+ [Changes: {Number of Changed Files}] - optional if git fails
31
+ [SPEC Progress: {Complete}/{Total} ({percent}%)] - optional if specs fail
32
+ [Checkpoints: {number} available] - optional if checkpoint list fails
33
+
34
+ Graceful Degradation Strategy:
35
+ - CRITICAL: Language detection (must succeed - no try-except)
36
+ - OPTIONAL: Git info (skip if timeout/failure)
37
+ - OPTIONAL: SPEC progress (skip if timeout/failure)
38
+ - OPTIONAL: Checkpoint list (skip if timeout/failure)
39
+ - Always display SOMETHING to user, never return empty message
31
40
 
32
41
  Note:
33
42
  - Claude Code processes SessionStart in several stages (clear → compact)
34
43
  - Display message only at "compact" stage to prevent duplicate output
35
44
  - "clear" step returns minimal result (empty hookSpecificOutput)
45
+ - CRITICAL: All optional operations must complete within 2-3 seconds total
36
46
 
37
47
  TDD History:
38
48
  - RED: Session startup message format test
@@ -40,8 +50,10 @@ def handle_session_start(payload: HookPayload) -> HookResult:
40
50
  - REFACTOR: Improved message format, improved readability, added checkpoint list
41
51
  - FIX: Prevent duplicate output of clear step (only compact step is displayed)
42
52
  - UPDATE: Migrated to Claude Code standard Hook schema
53
+ - HOTFIX: Add graceful degradation for timeout scenarios (Issue #66)
43
54
 
44
55
  @TAG:CHECKPOINT-EVENT-001
56
+ @TAG:HOOKS-TIMEOUT-001
45
57
  """
46
58
  # Claude Code SessionStart runs in several stages (clear, compact, etc.)
47
59
  # Ignore the "clear" stage and output messages only at the "compact" stage
@@ -51,32 +63,90 @@ def handle_session_start(payload: HookPayload) -> HookResult:
51
63
  return HookResult(continue_execution=True)
52
64
 
53
65
  cwd = payload.get("cwd", ".")
66
+
67
+ # CRITICAL: Language detection - MUST succeed (no try-except)
54
68
  language = detect_language(cwd)
55
- git_info = get_git_info(cwd)
56
- specs = count_specs(cwd)
57
- checkpoints = list_checkpoints(cwd, max_count=10)
58
69
 
59
- branch = git_info.get("branch", "N/A")
60
- commit = git_info.get("commit", "N/A")[:7]
61
- changes = git_info.get("changes", 0)
62
- spec_progress = f"{specs['completed']}/{specs['total']}"
70
+ # OPTIONAL: Git info - skip if timeout/failure
71
+ git_info = {}
72
+ try:
73
+ git_info = get_git_info(cwd)
74
+ except Exception:
75
+ # Graceful degradation - continue without git info
76
+ pass
77
+
78
+ # OPTIONAL: SPEC progress - skip if timeout/failure
79
+ specs = {"completed": 0, "total": 0, "percentage": 0}
80
+ try:
81
+ specs = count_specs(cwd)
82
+ except Exception:
83
+ # Graceful degradation - continue without spec info
84
+ pass
85
+
86
+ # OPTIONAL: Checkpoint list - skip if timeout/failure
87
+ checkpoints = []
88
+ try:
89
+ checkpoints = list_checkpoints(cwd, max_count=10)
90
+ except Exception:
91
+ # Graceful degradation - continue without checkpoints
92
+ pass
93
+
94
+ # OPTIONAL: Package version info - skip if timeout/failure
95
+ version_info = {}
96
+ try:
97
+ version_info = get_package_version_info()
98
+ except Exception:
99
+ # Graceful degradation - continue without version info
100
+ pass
101
+
102
+ # Build message with available information
103
+ branch = git_info.get("branch", "N/A") if git_info else "N/A"
104
+ commit = git_info.get("commit", "N/A")[:7] if git_info else "N/A"
105
+ changes = git_info.get("changes", 0) if git_info else 0
106
+ spec_progress = f"{specs['completed']}/{specs['total']}" if specs["total"] > 0 else "0/0"
63
107
 
64
108
  # system_message: displayed directly to the user
65
109
  lines = [
66
110
  "🚀 MoAI-ADK Session Started",
67
- f" Language: {language}",
68
- f" Branch: {branch} ({commit})",
69
- f" Changes: {changes}",
70
- f" SPEC Progress: {spec_progress} ({specs['percentage']}%)",
111
+ "", # Blank line after title
71
112
  ]
72
113
 
114
+ # Add version info first (at the top, right after title)
115
+ if version_info and version_info.get("current") != "unknown":
116
+ version_line = f" 🗿 MoAI-ADK Ver: {version_info['current']}"
117
+ if version_info.get("update_available"):
118
+ version_line += f" → {version_info['latest']} available ✨"
119
+ lines.append(version_line)
120
+
121
+ # Add upgrade recommendation if update is available
122
+ if version_info.get("update_available") and version_info.get("upgrade_command"):
123
+ lines.append(f" ⬆️ Upgrade: {version_info['upgrade_command']}")
124
+
125
+ # Add language info
126
+ lines.append(f" 🐍 Language: {language}")
127
+
128
+ # Add Git info only if available (not degraded)
129
+ if git_info:
130
+ lines.append(f" 🌿 Branch: {branch} ({commit})")
131
+ lines.append(f" 📝 Changes: {changes}")
132
+
133
+ # Add last commit message if available
134
+ last_commit = git_info.get("last_commit", "")
135
+ if last_commit:
136
+ lines.append(f" 🔨 Last: {last_commit}")
137
+
73
138
  # Add Checkpoint list (show only the latest 3 items)
74
139
  if checkpoints:
75
- lines.append(f" Checkpoints: {len(checkpoints)} available")
140
+ lines.append(f" 🗂️ Checkpoints: {len(checkpoints)} available")
76
141
  for cp in reversed(checkpoints[-3:]): # Latest 3 items
77
142
  branch_short = cp["branch"].replace("before-", "")
78
- lines.append(f" - {branch_short}")
79
- lines.append(" Restore: /alfred:0-project restore")
143
+ lines.append(f" 📌 {branch_short}")
144
+ lines.append("") # Blank line before restore command
145
+ lines.append(" ↩️ Restore: /alfred:0-project restore")
146
+
147
+ # Add SPEC progress only if available (not degraded) - at the bottom
148
+ if specs["total"] > 0:
149
+ lines.append(f" 📋 SPEC Progress: {spec_progress} ({specs['percentage']}%)")
80
150
 
81
151
  system_message = "\n".join(lines)
82
152
 
@@ -8,7 +8,7 @@ description: "Agent-based coding mode that integrates hands-on development and c
8
8
  ---
9
9
 
10
10
  # Agentic Coding
11
- > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
11
+ > Interactive prompts rely on `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
12
12
 
13
13
  **Audience**: Professional developers, team leaders, architects
14
14
 
@@ -8,7 +8,7 @@ description: "Learning mode to easily learn MoAI-ADK concepts and workflow"
8
8
  ---
9
9
 
10
10
  # MoAI ADK Learning
11
- > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
11
+ > Interactive prompts rely on `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
12
12
 
13
13
  **Audience**: Developers new to MoAI-ADK
14
14
 
@@ -8,7 +8,7 @@ description: "Learning mode to easily learn new skills with Alfred"
8
8
  ---
9
9
 
10
10
  # Study with Alfred
11
- > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
11
+ > Interactive prompts rely on `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
12
12
 
13
13
  **Audience**: Developers looking to learn new technologies/languages/frameworks
14
14
 
@@ -6,7 +6,7 @@
6
6
  > **Project Owner**: {{PROJECT_OWNER}}
7
7
  > **Config**: `.moai/config.json`
8
8
  >
9
- > **Note**: `Skill("moai-alfred-interactive-questions")` provides TUI-based responses when user interaction is needed. The skill loads on-demand.
9
+ > **Note**: `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` provides TUI-based responses when user interaction is needed. The skill loads on-demand.
10
10
 
11
11
  ---
12
12
 
@@ -213,6 +213,72 @@ Combine layers when necessary: a command triggers sub-agents, sub-agents activat
213
213
 
214
214
  ---
215
215
 
216
+ ## ⚡ Alfred Command Completion Pattern
217
+
218
+ **CRITICAL RULE**: When any Alfred command (`/alfred:0-project`, `/alfred:1-plan`, `/alfred:2-run`, `/alfred:3-sync`) completes, **ALWAYS use `AskUserQuestion` tool** to ask the user what to do next.
219
+
220
+ ### Pattern for Each Command
221
+
222
+ #### `/alfred:0-project` Completion
223
+ ```
224
+ After project initialization completes:
225
+ ├─ Use AskUserQuestion to ask:
226
+ │ ├─ Option 1: Proceed to /alfred:1-plan (plan specifications)
227
+ │ ├─ Option 2: Start new session with /clear
228
+ │ └─ Option 3: Review project structure
229
+ └─ DO NOT suggest multiple next steps in prose - use AskUserQuestion only
230
+ ```
231
+
232
+ #### `/alfred:1-plan` Completion
233
+ ```
234
+ After planning completes:
235
+ ├─ Use AskUserQuestion to ask:
236
+ │ ├─ Option 1: Proceed to /alfred:2-run (implement SPEC)
237
+ │ ├─ Option 2: Revise SPEC before implementation
238
+ │ └─ Option 3: Start new session with /clear
239
+ └─ DO NOT suggest multiple next steps in prose - use AskUserQuestion only
240
+ ```
241
+
242
+ #### `/alfred:2-run` Completion
243
+ ```
244
+ After implementation completes:
245
+ ├─ Use AskUserQuestion to ask:
246
+ │ ├─ Option 1: Proceed to /alfred:3-sync (synchronize docs)
247
+ │ ├─ Option 2: Run additional tests/validation
248
+ │ └─ Option 3: Start new session with /clear
249
+ └─ DO NOT suggest multiple next steps in prose - use AskUserQuestion only
250
+ ```
251
+
252
+ #### `/alfred:3-sync` Completion
253
+ ```
254
+ After sync completes:
255
+ ├─ Use AskUserQuestion to ask:
256
+ │ ├─ Option 1: Return to /alfred:1-plan (next feature)
257
+ │ ├─ Option 2: Merge PR to main
258
+ │ └─ Option 3: Complete session
259
+ └─ DO NOT suggest multiple next steps in prose - use AskUserQuestion only
260
+ ```
261
+
262
+ ### Implementation Rules
263
+
264
+ 1. **Always use AskUserQuestion** - Never suggest next steps in prose (e.g., "You can now run `/alfred:1-plan`...")
265
+ 2. **Provide 3-4 clear options** - Not open-ended or free-form
266
+ 3. **Language**: Present options in user's `conversation_language` (Korean, Japanese, etc.)
267
+ 4. **Question format**: Use the `moai-alfred-interactive-questions` skill documentation as reference (don't invoke Skill())
268
+
269
+ ### Example (Correct Pattern)
270
+ ```markdown
271
+ # CORRECT ✅
272
+ After project setup, use AskUserQuestion tool to ask:
273
+ - "프로젝트 초기화가 완료되었습니다. 다음으로 뭘 하시겠습니까?"
274
+ - Options: 1) 스펙 작성 진행 2) 프로젝트 구조 검토 3) 새 세션 시작
275
+
276
+ # INCORRECT ❌
277
+ Your project is ready. You can now run `/alfred:1-plan` to start planning specs...
278
+ ```
279
+
280
+ ---
281
+
216
282
  ## Project Information
217
283
 
218
284
  - **Name**: MoAI-ADK
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: moai-adk
3
- Version: 0.7.0
3
+ Version: 0.8.0
4
4
  Summary: MoAI Agentic Development Kit - SPEC-First TDD with Alfred SuperAgent & Complete Skills v2.0
5
5
  Project-URL: Homepage, https://github.com/modu-ai/moai-adk
6
6
  Project-URL: Repository, https://github.com/modu-ai/moai-adk
@@ -27,7 +27,7 @@ moai_adk/core/project/backup_utils.py,sha256=-zEXIhGsM-MdX1voUIpKxLlR57Y-lqLEZSi
27
27
  moai_adk/core/project/checker.py,sha256=B94mGLHDZkjQnFDgV8sknJDms5oIiHeyKcgxWI87-f8,9523
28
28
  moai_adk/core/project/detector.py,sha256=ADVg36yvyqJEPQVNc_x9iInF9dzi7YZqqXfDq2XL17Q,4230
29
29
  moai_adk/core/project/initializer.py,sha256=yqxePuCO2ednzCOpDZLczyCP079J6Io4pvtynTp4J6w,6724
30
- moai_adk/core/project/phase_executor.py,sha256=MZXqzYZA4OrZT0xViplyOUVRchiSaEWeTEmyzkSHEQY,10997
30
+ moai_adk/core/project/phase_executor.py,sha256=xd7wREmZPjNDO-sHv5CDLjPS8NsmhvQ-qv2m9AVQ9QY,10998
31
31
  moai_adk/core/project/validator.py,sha256=gH9ywTMQTwqtqBVrMWj5_bPYFrVzjHuFoU4QdeVa1O4,5756
32
32
  moai_adk/core/quality/__init__.py,sha256=_uNsbThBLmVLWZCPmEgfFyQqJx3tdef9jhkP9QoHuJY,222
33
33
  moai_adk/core/quality/trust_checker.py,sha256=CN067AiublAH46IBAKEV_I-8Wc0bNaR2dMnMf9n5oBg,15198
@@ -40,25 +40,25 @@ moai_adk/core/template/languages.py,sha256=V0wLcxCIOve9Q_0_NhrHGQevSIN_MB612GwrO
40
40
  moai_adk/core/template/merger.py,sha256=ZV8_U1HZJ3bfAtgyNmSxgj8KdTMt4eUnUG6kVVRT7bE,6909
41
41
  moai_adk/core/template/processor.py,sha256=_nYHiuN9PGzC3iE4X5SpRMFW-OTkI2u1dOAjD98axAk,19190
42
42
  moai_adk/templates/.gitignore,sha256=6VNKResdDpyaii3cmJA4pOLwK2PhYARIWkUODYtKyxg,310
43
- moai_adk/templates/CLAUDE.md,sha256=F1KjJb2HPT887aW9HBGezm2lh0wfNZcN5GLOF2aTo_k,11318
43
+ moai_adk/templates/CLAUDE.md,sha256=SIuw1GLq5w6Mh1ejhnKQ8IlnJKjUs5FmSG8EkL4-N6w,13839
44
44
  moai_adk/templates/__init__.py,sha256=6MV1gCB7PLZMiL4gaD_dZSKxtcQyo45MMTuN8fVdchA,104
45
45
  moai_adk/templates/.claude/settings.json,sha256=SwjID_m0XWmHT12lqkhJXL1Sh30zAr9_tk4drQ9x9K8,3149
46
- moai_adk/templates/.claude/agents/alfred/cc-manager.md,sha256=63HRf8C7JNRApeOqGJi9Iwhcn5is9ImucsfRHhZ5zFU,8348
47
- moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=vI0RaXhmEqpIHBHc3KYhCQsbOhF1Xy2yCJOyxfOQ9wQ,7221
48
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=QUzfYwUnGm46ZgN067iS6yKayE3AAYM9QIcjAO8jv5A,8636
49
- moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=yen1XeZJXEAE7e8JkE5lxNoLAlbm-1iPTyQMbY8yH9c,14074
50
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=ZSR-OWii-5pH3qLjAid89OaC4JW2QnwZgN-s5vp32lA,11545
51
- moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=xEU4OnEKiysH08ZWvK9KqJheoFYZXlZ9UmDDs2B80O0,14908
52
- moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=iAx3O2wOWP-mpYFEumJpdLDavyqQ5Yk0ILbcvZtw98k,10711
53
- moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=PGnrkeT5630ELQ2vBwVGaJr3vzU6I-4LObiZrCCjGjw,26229
54
- moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=xYzdnYbmozvSfHrkQKSfIgmlXYFGJ-tpPtubIyY0AM4,12507
55
- moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=6n8n93kho3XTONZ4At7VwuZR4QjF1KmNoIN5u_CdNcE,9611
56
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=p9e2PLSH5uUP3fXjaGGMzdm6-QZqDoMSUsCDzUtYQYk,10217
57
- moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=TK3rVt0UqgoT8p6ubm3TesbhG6nokmV9FqR4DfC_VjU,13595
58
- moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=sXEiAJX0L220K93drjttQGWLVDtYHS1pTzQDNToVIo0,46399
59
- moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=xjPSZFVZ5FeLcC5nGfkLDc1xEeTzx4RwL5zHS2H1DSo,25170
60
- moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=xEteotB1u-j7HD0id1Sw4Uopdvv8XK51nnB4qjc3bM0,20820
61
- moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=EZtQpqPwzVaOvW21kx9VKi7RHMpe8PIA72iTU_sLfMQ,22992
46
+ moai_adk/templates/.claude/agents/alfred/cc-manager.md,sha256=ievRB2BMAXjQ6iepWTLTCIHR9Dc4_L-Ab-dqhKQDdxE,8382
47
+ moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=C6jF54jsbI1y4xmb6s-MWVpuYISaFDQzY88M_HJhurw,7289
48
+ moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=iFP09SKUEMfb4OdMT3gMBakwHf0UvIaBfQHhb0YzdWo,8704
49
+ moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=t3iDdVgs0TZUQRHQS_F9GtLcAvnXWihM7t2oy_BPJBQ,14142
50
+ moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=Xysj1KinbZt-PTw0Sx1bGFlTCxBuQGFfTCNLdatjb8E,11613
51
+ moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=N-CaSiWnCdaJXWM3tZegMg4ispm-ioHKnuzmUdwQ2YE,15111
52
+ moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=_OebbNOxpKmUAde1zmjjYL8UrniFnIp710xFd7EtuU0,10779
53
+ moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=EUXtroq8qN22vAqyMxHgGLx7TVOe_in3quEB6K1HmS8,26467
54
+ moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=xGUYsGXB40lBcvmlONIx3tK4iUOVNRFfPatCXNDJonE,12575
55
+ moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=_ydlDocuxal89jGwpGIfQLfEbcCUDNoj8CDyDONRRYg,9679
56
+ moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=qTDJotSnK1KSxe2j6Kpvx0qLYwmzu0e9lKHmD6PVwgc,10285
57
+ moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=Vc5ReZjdl1FAifg_9qKt2MYWAdMHmq2psda-kyVhtVI,13663
58
+ moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=Acx7045n1e6-GC1g6QDePVoI2tOGC_fZFvokgrvz_T8,46704
59
+ moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=wHROuePWaQwrbRm4SL4369vD7EpzKpVRvQBcWPcpUw0,25272
60
+ moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=KTUuQQPheLr0YY79asbK0oH9ajlp8vDsQC_2c8BvzWY,20956
61
+ moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=WNlBzf5I_mDbdWhcITYE7oiHziHD1UQOG-HD12sqSwQ,23162
62
62
  moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md,sha256=5dd6KRFQXzp0L8lAWKRN7Momgg_8XNV1QZ6VGs03_pc,9064
63
63
  moai_adk/templates/.claude/hooks/alfred/README.md,sha256=8JirNg3Jn2OUFmHySYBd8QxQgPkG7kcev86Zkf80asY,6852
64
64
  moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py,sha256=PjdyJluyoQgaIpq3n9K9r-a3VeLMH1eWcXaAA6ohvrw,7723
@@ -66,16 +66,16 @@ moai_adk/templates/.claude/hooks/alfred/test_hook_output.py,sha256=3pk-JBUPdSQZB
66
66
  moai_adk/templates/.claude/hooks/alfred/core/__init__.py,sha256=nx_02kZDVFlKOgxBfFz3nqVrxMkmrkE0x7crJhdjl5E,6377
67
67
  moai_adk/templates/.claude/hooks/alfred/core/checkpoint.py,sha256=dsvFDSXQNSQlaQLpvhqFbytGOrOivyovi43Y18EmNeI,8483
68
68
  moai_adk/templates/.claude/hooks/alfred/core/context.py,sha256=RQd6yk8OGT-twgYtUiNmJIL-UEt_h4oktxqiRP_wXAI,2103
69
- moai_adk/templates/.claude/hooks/alfred/core/project.py,sha256=XVm-Y5TVjBBznW8AkFhk_uVg-EF1lZ2wx59Rxt_LOBA,9125
69
+ moai_adk/templates/.claude/hooks/alfred/core/project.py,sha256=Jgm8BEJOtCywiO83k2rcoGtzFYPeTXHd5LcMsP2MVsI,14141
70
70
  moai_adk/templates/.claude/hooks/alfred/core/tags.py,sha256=XcYYCS1VmCejp7Ga9xZ3hDfrWWsKM-WyPD_N5gY1q1w,6359
71
71
  moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py,sha256=j5L7nayKt7tnFQOZuO5sWiie815vmbmYJOn2VRiidLY,569
72
72
  moai_adk/templates/.claude/hooks/alfred/handlers/notification.py,sha256=8TcEqGlz4EpLf2lpouaIuhVbpKOVeY31KPmIq2snt9U,662
73
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=jGmiDPY-unTlQlTWQVisr82Rxhbt1Rkhrun4bggTxQ4,3374
73
+ moai_adk/templates/.claude/hooks/alfred/handlers/session.py,sha256=gFrkTcBRQrDR0p5o79KvhN1LuGdmIVQyWg0fk1YD8l8,6397
74
74
  moai_adk/templates/.claude/hooks/alfred/handlers/tool.py,sha256=0bNtAf2M7nupTAkcrEiZMBCmD2f-dLjjZa5p1CWiNyM,3383
75
75
  moai_adk/templates/.claude/hooks/alfred/handlers/user.py,sha256=PyQI201oezWBzLrKo8ntWoRa9GDyVwLYktdu9vLT84s,1389
76
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md,sha256=JyhPcBT3jrdGtYpOE_qQ_B4dgzizMN53ZEqoKHw6GPU,19668
77
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=eBuM8tGVdKVXGecXA7WlmxWatTXWPF-dmpm-rZ4IEEw,17549
78
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=GItPQ1wndOh5kGf8g-tdhmxGcqj6wCCRDxI7urO0AAU,12598
76
+ moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md,sha256=xxqVTxNwBEQahaerqeFYDEAErPNLw_-W1orWXYLuwtU,19702
77
+ moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=Et9BlQkja_jOIVp7NLBVxCGU7H0H-qoEe_9LNaVis3k,17583
78
+ moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=XpIj9c4jqOOlZxn57Ujj8o7VIpAx_ftddwwd0fxIsio,12632
79
79
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md,sha256=7g_jQgyK-E_ogg4Hk1ueNdn9bRappOSYSNnjd4JMIK8,2406
80
80
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md,sha256=r5_lripZ45AeKpOcUSzmUl_DuioI18Xe84U05f1vDMI,403
81
81
  moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md,sha256=Xw_hzLdsfN3zo7BUk2A-rQGohSM5btw6mh12yz1MbPE,339
@@ -275,8 +275,8 @@ moai_adk/templates/.moai/project/tech.md,sha256=REecMv8wOvutt-pQZ5nlGk5YdReTan7A
275
275
  moai_adk/utils/__init__.py,sha256=VnVfQzzKHvKw4bNdEw5xdscnRQYFrnr-v_TOBr3naPs,225
276
276
  moai_adk/utils/banner.py,sha256=znppKd5yo-tTqgyhgPVJjstrTrfcy_v3X1_RFQxP4Fk,1878
277
277
  moai_adk/utils/logger.py,sha256=g-m07PGKjK2bKRIInfSn6m-024Bedai-pV_WjZKDeu8,5064
278
- moai_adk-0.7.0.dist-info/METADATA,sha256=lhC1D05uXdGGdJ8PLMERCaBkxt7mfW8IyzInxMD0KCE,71251
279
- moai_adk-0.7.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
280
- moai_adk-0.7.0.dist-info/entry_points.txt,sha256=P9no1794UipqH72LP-ltdyfVd_MeB1WKJY_6-JQgV3U,52
281
- moai_adk-0.7.0.dist-info/licenses/LICENSE,sha256=M1M2b07fWcSWRM6_P3wbZKndZvyfHyYk_Wu9bS8F7o8,1069
282
- moai_adk-0.7.0.dist-info/RECORD,,
278
+ moai_adk-0.8.0.dist-info/METADATA,sha256=rKLmKLvWkLBTzpf5UN8I0WHgWdYJF5Q-yEDmNZ6xkag,71251
279
+ moai_adk-0.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
280
+ moai_adk-0.8.0.dist-info/entry_points.txt,sha256=P9no1794UipqH72LP-ltdyfVd_MeB1WKJY_6-JQgV3U,52
281
+ moai_adk-0.8.0.dist-info/licenses/LICENSE,sha256=M1M2b07fWcSWRM6_P3wbZKndZvyfHyYk_Wu9bS8F7o8,1069
282
+ moai_adk-0.8.0.dist-info/RECORD,,