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.
- moai_adk/core/project/phase_executor.py +1 -2
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +1 -1
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +2 -2
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
- moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +2 -2
- moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +2 -2
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +7 -7
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +2 -2
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
- moai_adk/templates/.claude/commands/alfred/0-project.md +9 -9
- moai_adk/templates/.claude/commands/alfred/1-plan.md +3 -3
- moai_adk/templates/.claude/commands/alfred/2-run.md +4 -4
- moai_adk/templates/.claude/commands/alfred/3-sync.md +5 -5
- moai_adk/templates/.claude/hooks/alfred/core/project.py +145 -13
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +90 -20
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
- moai_adk/templates/CLAUDE.md +67 -1
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/METADATA +1 -1
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/RECORD +28 -28
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/WHEEL +0 -0
- {moai_adk-0.7.0.dist-info → moai_adk-0.8.0.dist-info}/entry_points.txt +0 -0
- {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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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 `
|
|
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
|
-
- `
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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
|
-
- `
|
|
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 `
|
|
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가 `
|
|
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가 `
|
|
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 `
|
|
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,
|
|
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 `
|
|
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 `
|
|
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
|
-
`
|
|
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
|
-
`
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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
|
-
|
|
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 `
|
|
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, `
|
|
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 `
|
|
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
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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"
|
|
79
|
-
lines.append("
|
|
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 `
|
|
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 `
|
|
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 `
|
|
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
|
|
moai_adk/templates/CLAUDE.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
> **Project Owner**: {{PROJECT_OWNER}}
|
|
7
7
|
> **Config**: `.moai/config.json`
|
|
8
8
|
>
|
|
9
|
-
> **Note**: `
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
47
|
-
moai_adk/templates/.claude/agents/alfred/debug-helper.md,sha256=
|
|
48
|
-
moai_adk/templates/.claude/agents/alfred/doc-syncer.md,sha256=
|
|
49
|
-
moai_adk/templates/.claude/agents/alfred/git-manager.md,sha256=
|
|
50
|
-
moai_adk/templates/.claude/agents/alfred/implementation-planner.md,sha256=
|
|
51
|
-
moai_adk/templates/.claude/agents/alfred/project-manager.md,sha256=
|
|
52
|
-
moai_adk/templates/.claude/agents/alfred/quality-gate.md,sha256=
|
|
53
|
-
moai_adk/templates/.claude/agents/alfred/skill-factory.md,sha256=
|
|
54
|
-
moai_adk/templates/.claude/agents/alfred/spec-builder.md,sha256=
|
|
55
|
-
moai_adk/templates/.claude/agents/alfred/tag-agent.md,sha256=
|
|
56
|
-
moai_adk/templates/.claude/agents/alfred/tdd-implementer.md,sha256=
|
|
57
|
-
moai_adk/templates/.claude/agents/alfred/trust-checker.md,sha256=
|
|
58
|
-
moai_adk/templates/.claude/commands/alfred/0-project.md,sha256=
|
|
59
|
-
moai_adk/templates/.claude/commands/alfred/1-plan.md,sha256=
|
|
60
|
-
moai_adk/templates/.claude/commands/alfred/2-run.md,sha256=
|
|
61
|
-
moai_adk/templates/.claude/commands/alfred/3-sync.md,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
77
|
-
moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md,sha256=
|
|
78
|
-
moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md,sha256=
|
|
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.
|
|
279
|
-
moai_adk-0.
|
|
280
|
-
moai_adk-0.
|
|
281
|
-
moai_adk-0.
|
|
282
|
-
moai_adk-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|