@howlil/ez-agents 3.1.0 → 3.4.1
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.
- package/README.md +295 -714
- package/bin/install.js +387 -62
- package/commands/ez/auth.md +87 -0
- package/commands/ez/join-discord.md +1 -1
- package/ez-agents/bin/ez-tools.cjs +120 -2
- package/ez-agents/bin/lib/assistant-adapter.cjs +62 -3
- package/ez-agents/bin/lib/audit-exec.cjs +20 -8
- package/ez-agents/bin/lib/auth.cjs +2 -1
- package/ez-agents/bin/lib/circuit-breaker.cjs +1 -1
- package/ez-agents/bin/lib/commands.cjs +42 -23
- package/ez-agents/bin/lib/config.cjs +18 -11
- package/ez-agents/bin/lib/core.cjs +42 -25
- package/ez-agents/bin/lib/file-lock.cjs +3 -3
- package/ez-agents/bin/lib/fs-utils.cjs +1 -1
- package/ez-agents/bin/lib/git-utils.cjs +1 -1
- package/ez-agents/bin/lib/health-check.cjs +2 -3
- package/ez-agents/bin/lib/index.cjs +1 -1
- package/ez-agents/bin/lib/init.cjs +70 -23
- package/ez-agents/bin/lib/logger.cjs +11 -4
- package/ez-agents/bin/lib/model-provider.cjs +124 -29
- package/ez-agents/bin/lib/phase.cjs +39 -22
- package/ez-agents/bin/lib/planning-write.cjs +107 -0
- package/ez-agents/bin/lib/retry.cjs +1 -1
- package/ez-agents/bin/lib/roadmap.cjs +3 -2
- package/ez-agents/bin/lib/safe-exec.cjs +1 -1
- package/ez-agents/bin/lib/safe-path.cjs +1 -1
- package/ez-agents/bin/lib/state.cjs +24 -9
- package/ez-agents/bin/lib/temp-file.cjs +1 -1
- package/ez-agents/bin/lib/template.cjs +2 -1
- package/ez-agents/bin/lib/test-file-lock.cjs +1 -1
- package/ez-agents/bin/lib/test-graceful.cjs +2 -2
- package/ez-agents/bin/lib/test-logger.cjs +2 -2
- package/ez-agents/bin/lib/test-temp-file.cjs +1 -1
- package/ez-agents/bin/lib/timeout-exec.cjs +4 -3
- package/ez-agents/bin/lib/verify.cjs +54 -25
- package/ez-agents/references/continuation-format.md +1 -1
- package/ez-agents/workflows/add-tests.md +2 -2
- package/ez-agents/workflows/add-todo.md +1 -1
- package/ez-agents/workflows/autonomous.md +15 -15
- package/ez-agents/workflows/diagnose-issues.md +1 -1
- package/ez-agents/workflows/discuss-phase.md +3 -3
- package/ez-agents/workflows/execute-phase.md +2 -2
- package/ez-agents/workflows/health.md +1 -1
- package/ez-agents/workflows/help.md +2 -2
- package/ez-agents/workflows/map-codebase.md +1 -1
- package/ez-agents/workflows/new-milestone.md +5 -5
- package/ez-agents/workflows/new-project.md +12 -10
- package/ez-agents/workflows/plan-phase.md +8 -8
- package/ez-agents/workflows/progress.md +1 -1
- package/ez-agents/workflows/set-profile.md +1 -1
- package/ez-agents/workflows/settings.md +9 -9
- package/ez-agents/workflows/stats.md +1 -1
- package/ez-agents/workflows/ui-phase.md +3 -3
- package/ez-agents/workflows/ui-review.md +2 -2
- package/ez-agents/workflows/update.md +1 -1
- package/ez-agents/workflows/validate-phase.md +3 -3
- package/ez-agents/workflows/verify-work.md +3 -3
- package/package.json +1 -1
- package/scripts/build-hooks.js +1 -1
- package/scripts/fix-qwen-installation.js +144 -0
- package/README.zh-CN.md +0 -702
|
@@ -104,7 +104,7 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-set workflow.research fal
|
|
|
104
104
|
|
|
105
105
|
```
|
|
106
106
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
107
|
-
|
|
107
|
+
EZ ► RESEARCHING
|
|
108
108
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
109
109
|
|
|
110
110
|
◆ Spawning 4 researchers in parallel...
|
|
@@ -177,7 +177,7 @@ Commit after writing.
|
|
|
177
177
|
Display key findings from SUMMARY.md:
|
|
178
178
|
```
|
|
179
179
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
180
|
-
|
|
180
|
+
EZ ► RESEARCH COMPLETE ✓
|
|
181
181
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
182
182
|
|
|
183
183
|
**Stack additions:** [from SUMMARY.md]
|
|
@@ -191,7 +191,7 @@ Display key findings from SUMMARY.md:
|
|
|
191
191
|
|
|
192
192
|
```
|
|
193
193
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
194
|
-
|
|
194
|
+
EZ ► DEFINING REQUIREMENTS
|
|
195
195
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
196
196
|
```
|
|
197
197
|
|
|
@@ -262,7 +262,7 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: define milestone v
|
|
|
262
262
|
|
|
263
263
|
```
|
|
264
264
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
265
|
-
|
|
265
|
+
EZ ► CREATING ROADMAP
|
|
266
266
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
267
267
|
|
|
268
268
|
◆ Spawning roadmapper...
|
|
@@ -339,7 +339,7 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: create milestone v
|
|
|
339
339
|
|
|
340
340
|
```
|
|
341
341
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
342
|
-
|
|
342
|
+
EZ ► MILESTONE INITIALIZED ✓
|
|
343
343
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
344
344
|
|
|
345
345
|
**Milestone v[X.Y]: [Name]**
|
|
@@ -209,7 +209,7 @@ Proceed to Step 4 (skip Steps 3 and 5).
|
|
|
209
209
|
|
|
210
210
|
```
|
|
211
211
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
212
|
-
|
|
212
|
+
EZ ► QUESTIONING
|
|
213
213
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
214
214
|
```
|
|
215
215
|
|
|
@@ -347,12 +347,14 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: initialize project
|
|
|
347
347
|
|
|
348
348
|
**If auto mode:** Skip — config was collected in Step 2a. Proceed to Step 5.5.
|
|
349
349
|
|
|
350
|
-
**Check for global defaults** at `~/.
|
|
350
|
+
**Check for global defaults** at `~/.ez/defaults.json` using direct path existence checks only.
|
|
351
|
+
Do **not** glob or recursively search home directories for this file.
|
|
352
|
+
If it exists, offer to use saved defaults:
|
|
351
353
|
|
|
352
354
|
```
|
|
353
355
|
AskUserQuestion([
|
|
354
356
|
{
|
|
355
|
-
question: "Use your saved default settings? (from ~/.
|
|
357
|
+
question: "Use your saved default settings? (from ~/.ez/defaults.json)",
|
|
356
358
|
header: "Defaults",
|
|
357
359
|
multiSelect: false,
|
|
358
360
|
options: [
|
|
@@ -363,9 +365,9 @@ AskUserQuestion([
|
|
|
363
365
|
])
|
|
364
366
|
```
|
|
365
367
|
|
|
366
|
-
If "Yes": read `~/.
|
|
368
|
+
If "Yes": read `~/.ez/defaults.json`, use those values for config.json, and skip directly to **Commit config.json** below.
|
|
367
369
|
|
|
368
|
-
If "No" or
|
|
370
|
+
If "No" or it doesn't exist: proceed with the questions below.
|
|
369
371
|
|
|
370
372
|
**Round 1 — Core workflow settings (4 questions):**
|
|
371
373
|
|
|
@@ -518,7 +520,7 @@ Use AskUserQuestion:
|
|
|
518
520
|
Display stage banner:
|
|
519
521
|
```
|
|
520
522
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
521
|
-
|
|
523
|
+
EZ ► RESEARCHING
|
|
522
524
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
523
525
|
|
|
524
526
|
Researching [domain] ecosystem...
|
|
@@ -726,7 +728,7 @@ Commit after writing.
|
|
|
726
728
|
Display research complete banner and key findings:
|
|
727
729
|
```
|
|
728
730
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
729
|
-
|
|
731
|
+
EZ ► RESEARCH COMPLETE ✓
|
|
730
732
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
731
733
|
|
|
732
734
|
## Key Findings
|
|
@@ -745,7 +747,7 @@ Files: `.planning/research/`
|
|
|
745
747
|
Display stage banner:
|
|
746
748
|
```
|
|
747
749
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
748
|
-
|
|
750
|
+
EZ ► DEFINING REQUIREMENTS
|
|
749
751
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
750
752
|
```
|
|
751
753
|
|
|
@@ -890,7 +892,7 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs: define v1 requirem
|
|
|
890
892
|
Display stage banner:
|
|
891
893
|
```
|
|
892
894
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
893
|
-
|
|
895
|
+
EZ ► CREATING ROADMAP
|
|
894
896
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
895
897
|
|
|
896
898
|
◆ Spawning roadmapper...
|
|
@@ -1021,7 +1023,7 @@ Present completion summary:
|
|
|
1021
1023
|
|
|
1022
1024
|
```
|
|
1023
1025
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1024
|
-
|
|
1026
|
+
EZ ► PROJECT INITIALIZED ✓
|
|
1025
1027
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1026
1028
|
|
|
1027
1029
|
**[Project Name]**
|
|
@@ -66,7 +66,7 @@ fi
|
|
|
66
66
|
2. Display banner:
|
|
67
67
|
```
|
|
68
68
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
69
|
-
|
|
69
|
+
EZ ► PRD EXPRESS PATH
|
|
70
70
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
71
71
|
|
|
72
72
|
Using PRD: {PRD_FILE}
|
|
@@ -183,7 +183,7 @@ If "Run discuss-phase first": Display `/ez:discuss-phase {X}` and exit workflow.
|
|
|
183
183
|
Display banner:
|
|
184
184
|
```
|
|
185
185
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
186
|
-
|
|
186
|
+
EZ ► RESEARCHING PHASE {X}
|
|
187
187
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
188
188
|
|
|
189
189
|
◆ Spawning researcher...
|
|
@@ -341,7 +341,7 @@ Proceed to Step 8 only if user selects 2 or 3.
|
|
|
341
341
|
Display banner:
|
|
342
342
|
```
|
|
343
343
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
344
|
-
|
|
344
|
+
EZ ► PLANNING PHASE {X}
|
|
345
345
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
346
346
|
|
|
347
347
|
◆ Spawning planner...
|
|
@@ -441,7 +441,7 @@ Task(
|
|
|
441
441
|
Display banner:
|
|
442
442
|
```
|
|
443
443
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
444
|
-
|
|
444
|
+
EZ ► VERIFYING PLANS
|
|
445
445
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
446
446
|
|
|
447
447
|
◆ Spawning plan checker...
|
|
@@ -561,7 +561,7 @@ Check for auto-advance trigger:
|
|
|
561
561
|
Display banner:
|
|
562
562
|
```
|
|
563
563
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
564
|
-
|
|
564
|
+
EZ ► AUTO-ADVANCING TO EXECUTE
|
|
565
565
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
566
566
|
|
|
567
567
|
Plans ready. Launching execute-phase...
|
|
@@ -569,7 +569,7 @@ Plans ready. Launching execute-phase...
|
|
|
569
569
|
|
|
570
570
|
Launch execute-phase using the Skill tool to avoid nested Task sessions (which cause runtime freezes due to deep agent nesting):
|
|
571
571
|
```
|
|
572
|
-
Skill(skill="
|
|
572
|
+
Skill(skill="ez:execute-phase", args="${PHASE} --auto --no-transition")
|
|
573
573
|
```
|
|
574
574
|
|
|
575
575
|
The `--no-transition` flag tells execute-phase to return status after verification instead of chaining further. This keeps the auto-advance chain flat — each phase runs at the same nesting level rather than spawning deeper Task agents.
|
|
@@ -578,7 +578,7 @@ The `--no-transition` flag tells execute-phase to return status after verificati
|
|
|
578
578
|
- **PHASE COMPLETE** → Display final summary:
|
|
579
579
|
```
|
|
580
580
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
581
|
-
|
|
581
|
+
EZ ► PHASE ${PHASE} COMPLETE ✓
|
|
582
582
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
583
583
|
|
|
584
584
|
Auto-advance pipeline finished.
|
|
@@ -602,7 +602,7 @@ Route to `<offer_next>` (existing behavior).
|
|
|
602
602
|
Output this markdown directly (not as a code block):
|
|
603
603
|
|
|
604
604
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
605
|
-
|
|
605
|
+
EZ ► PHASE {X} PLANNED ✓
|
|
606
606
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
607
607
|
|
|
608
608
|
**Phase {X}: {Name}** — {N} plan(s) in {M} wave(s)
|
|
@@ -378,5 +378,5 @@ Ready to plan the next milestone.
|
|
|
378
378
|
- [ ] What's next clearly explained
|
|
379
379
|
- [ ] Smart routing: /ez:execute-phase if plans exist, /ez:plan-phase if not
|
|
380
380
|
- [ ] User confirms before any action
|
|
381
|
-
- [ ] Seamless handoff to appropriate
|
|
381
|
+
- [ ] Seamless handoff to appropriate ez command
|
|
382
382
|
</success_criteria>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Switch the model profile used by
|
|
2
|
+
Switch the model profile used by EZ agents. Controls which Claude model each agent uses, balancing quality vs token spend.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Interactive configuration of
|
|
2
|
+
Interactive configuration of EZ workflow agents (research, plan_check, verifier) and model profile selection via multi-question prompt. Updates .planning/config.json with user preferences. Optionally saves settings as global defaults (`~/.ez/defaults.json`) for future projects.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
@@ -122,8 +122,8 @@ AskUserQuestion([
|
|
|
122
122
|
multiSelect: false,
|
|
123
123
|
options: [
|
|
124
124
|
{ label: "None (Recommended)", description: "Commit directly to current branch" },
|
|
125
|
-
{ label: "Per Phase", description: "Create branch for each phase (
|
|
126
|
-
{ label: "Per Milestone", description: "Create branch for entire milestone (
|
|
125
|
+
{ label: "Per Phase", description: "Create branch for each phase (ez/phase-{N}-{name})" },
|
|
126
|
+
{ label: "Per Milestone", description: "Create branch for entire milestone (ez/{version}-{name})" }
|
|
127
127
|
]
|
|
128
128
|
}
|
|
129
129
|
])
|
|
@@ -165,20 +165,20 @@ AskUserQuestion([
|
|
|
165
165
|
header: "Defaults",
|
|
166
166
|
multiSelect: false,
|
|
167
167
|
options: [
|
|
168
|
-
{ label: "Yes", description: "New projects start with these settings (saved to ~/.
|
|
168
|
+
{ label: "Yes", description: "New projects start with these settings (saved to ~/.ez/defaults.json)" },
|
|
169
169
|
{ label: "No", description: "Only apply to this project" }
|
|
170
170
|
]
|
|
171
171
|
}
|
|
172
172
|
])
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
If "Yes": write the same config object (minus project-specific fields like `brave_search`) to `~/.
|
|
175
|
+
If "Yes": write the same config object (minus project-specific fields like `brave_search`) to `~/.ez/defaults.json`:
|
|
176
176
|
|
|
177
177
|
```bash
|
|
178
|
-
mkdir -p ~/.
|
|
178
|
+
mkdir -p ~/.ez
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
Write `~/.
|
|
181
|
+
Write `~/.ez/defaults.json` with:
|
|
182
182
|
```json
|
|
183
183
|
{
|
|
184
184
|
"mode": <current>,
|
|
@@ -205,7 +205,7 @@ Display:
|
|
|
205
205
|
|
|
206
206
|
```
|
|
207
207
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
208
|
-
|
|
208
|
+
EZ ► SETTINGS UPDATED
|
|
209
209
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
210
210
|
|
|
211
211
|
| Setting | Value |
|
|
@@ -237,6 +237,6 @@ Quick commands:
|
|
|
237
237
|
- [ ] Current config read
|
|
238
238
|
- [ ] User presented with 9 settings (profile + 7 workflow toggles + git branching)
|
|
239
239
|
- [ ] Config updated with model_profile, workflow, and git sections
|
|
240
|
-
- [ ] User offered to save as global defaults (~/.
|
|
240
|
+
- [ ] User offered to save as global defaults (~/.ez/defaults.json)
|
|
241
241
|
- [ ] Changes confirmed to user
|
|
242
242
|
</success_criteria>
|
|
@@ -12,7 +12,7 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
12
12
|
Gather project statistics:
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
STATS=$(node "$
|
|
15
|
+
STATS=$(node "$EZ_TOOLS" stats json)
|
|
16
16
|
if [[ "$STATS" == @file:* ]]; then STATS=$(cat "${STATS#@file:}"); fi
|
|
17
17
|
```
|
|
18
18
|
|
|
@@ -92,7 +92,7 @@ If "Update": continue to step 5.
|
|
|
92
92
|
Display:
|
|
93
93
|
```
|
|
94
94
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
95
|
-
|
|
95
|
+
EZ ► UI DESIGN CONTRACT — PHASE {N}
|
|
96
96
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
97
|
|
|
98
98
|
◆ Spawning UI researcher...
|
|
@@ -152,7 +152,7 @@ Display blocker details and options. Exit workflow.
|
|
|
152
152
|
Display:
|
|
153
153
|
```
|
|
154
154
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
155
|
-
|
|
155
|
+
EZ ► VERIFYING UI-SPEC
|
|
156
156
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
157
157
|
|
|
158
158
|
◆ Spawning UI checker...
|
|
@@ -237,7 +237,7 @@ Use AskUserQuestion for the choice.
|
|
|
237
237
|
Display:
|
|
238
238
|
```
|
|
239
239
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
240
|
-
|
|
240
|
+
EZ ► UI-SPEC READY ✓
|
|
241
241
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
242
242
|
|
|
243
243
|
**Phase {N}: {Name}** — UI design contract approved
|
|
@@ -24,7 +24,7 @@ UI_AUDITOR_MODEL=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" resolve-model
|
|
|
24
24
|
Display banner:
|
|
25
25
|
```
|
|
26
26
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
27
|
-
|
|
27
|
+
EZ ► UI AUDIT — PHASE {N}: {name}
|
|
28
28
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
29
29
|
```
|
|
30
30
|
|
|
@@ -105,7 +105,7 @@ Display score summary:
|
|
|
105
105
|
|
|
106
106
|
```
|
|
107
107
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
108
|
-
|
|
108
|
+
EZ ► UI AUDIT COMPLETE ✓
|
|
109
109
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
110
|
|
|
111
111
|
**Phase {N}: {Name}** — Overall: {score}/24
|
|
@@ -24,7 +24,7 @@ NYQUIST_CFG=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config get workflo
|
|
|
24
24
|
|
|
25
25
|
If `NYQUIST_CFG` is `false`: exit with "Nyquist validation is disabled. Enable via /ez:settings."
|
|
26
26
|
|
|
27
|
-
Display banner: `
|
|
27
|
+
Display banner: `EZ > VALIDATE PHASE {N}: {name}`
|
|
28
28
|
|
|
29
29
|
## 1. Detect Input State
|
|
30
30
|
|
|
@@ -135,14 +135,14 @@ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs(phase-${PHASE}): ad
|
|
|
135
135
|
|
|
136
136
|
**Compliant:**
|
|
137
137
|
```
|
|
138
|
-
|
|
138
|
+
EZ > PHASE {N} IS NYQUIST-COMPLIANT
|
|
139
139
|
All requirements have automated verification.
|
|
140
140
|
▶ Next: /ez:audit-milestone
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
**Partial:**
|
|
144
144
|
```
|
|
145
|
-
|
|
145
|
+
EZ > PHASE {N} VALIDATED (PARTIAL)
|
|
146
146
|
{M} automated, {K} manual-only.
|
|
147
147
|
▶ Retry: /ez:validate-phase {N}
|
|
148
148
|
```
|
|
@@ -364,7 +364,7 @@ Diagnosis runs automatically - no user prompt. Parallel agents investigate simul
|
|
|
364
364
|
Display:
|
|
365
365
|
```
|
|
366
366
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
367
|
-
|
|
367
|
+
EZ ► PLANNING FIXES
|
|
368
368
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
369
369
|
|
|
370
370
|
◆ Spawning planner for gap closure...
|
|
@@ -410,7 +410,7 @@ On return:
|
|
|
410
410
|
Display:
|
|
411
411
|
```
|
|
412
412
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
413
|
-
|
|
413
|
+
EZ ► VERIFYING FIX PLANS
|
|
414
414
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
415
415
|
|
|
416
416
|
◆ Spawning plan checker...
|
|
@@ -508,7 +508,7 @@ Wait for user response.
|
|
|
508
508
|
|
|
509
509
|
```
|
|
510
510
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
511
|
-
|
|
511
|
+
EZ ► FIXES READY ✓
|
|
512
512
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
513
513
|
|
|
514
514
|
**Phase {X}: {Name}** — {N} gap(s) diagnosed, {M} fix plan(s) created
|
package/package.json
CHANGED
package/scripts/build-hooks.js
CHANGED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fix Qwen Code Installation
|
|
5
|
+
*
|
|
6
|
+
* This script fixes the Qwen Code installation by copying ez-agents commands
|
|
7
|
+
* to the correct ~/.qwen/commands/ez/ directory instead of ~/.qwen/skills/
|
|
8
|
+
*
|
|
9
|
+
* Usage: node fix-qwen-installation.js
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
const os = require('os');
|
|
15
|
+
|
|
16
|
+
const cyan = '\x1b[36m';
|
|
17
|
+
const green = '\x1b[32m';
|
|
18
|
+
const yellow = '\x1b[33m';
|
|
19
|
+
const red = '\x1b[31m';
|
|
20
|
+
const reset = '\x1b[0m';
|
|
21
|
+
|
|
22
|
+
console.log(`${cyan}Fixing Qwen Code Installation${reset}\n`);
|
|
23
|
+
|
|
24
|
+
// Get Qwen config directory
|
|
25
|
+
const qwenDir = process.env.QWEN_CONFIG_DIR
|
|
26
|
+
? path.resolve(process.env.QWEN_CONFIG_DIR)
|
|
27
|
+
: path.join(os.homedir(), '.qwen');
|
|
28
|
+
|
|
29
|
+
const skillsDir = path.join(qwenDir, 'skills');
|
|
30
|
+
const commandsDir = path.join(qwenDir, 'commands');
|
|
31
|
+
const ezCommandsDir = path.join(commandsDir, 'ez');
|
|
32
|
+
|
|
33
|
+
// Find ez-agents installation
|
|
34
|
+
let ezAgentsDir = null;
|
|
35
|
+
const possibleLocations = [
|
|
36
|
+
path.join(qwenDir, 'ez-agents'),
|
|
37
|
+
path.join(qwenDir, '.ez-agents'),
|
|
38
|
+
path.join(os.homedir(), '.ez-agents'),
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
for (const loc of possibleLocations) {
|
|
42
|
+
if (fs.existsSync(loc)) {
|
|
43
|
+
ezAgentsDir = loc;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!ezAgentsDir) {
|
|
49
|
+
console.log(`${yellow}Warning:${reset} ez-agents installation not found in common locations`);
|
|
50
|
+
console.log(`Looking for workflows in ${skillsDir}/ez-*/`);
|
|
51
|
+
|
|
52
|
+
// Try to find workflows from installed skills
|
|
53
|
+
if (!fs.existsSync(skillsDir)) {
|
|
54
|
+
console.log(`${red}Error:${reset} Neither ez-agents nor skills directory found`);
|
|
55
|
+
console.log(`Please run: ${cyan}ez-agents --qwen --global${reset}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
console.log(`Qwen config directory: ${cyan}${qwenDir}${reset}`);
|
|
61
|
+
console.log(`Current skills location: ${yellow}${skillsDir}${reset}`);
|
|
62
|
+
console.log(`Target commands location: ${green}${ezCommandsDir}${reset}\n`);
|
|
63
|
+
|
|
64
|
+
// Create commands/ez directory
|
|
65
|
+
console.log(`${cyan}Step 1: Creating commands directory${reset}`);
|
|
66
|
+
fs.mkdirSync(ezCommandsDir, { recursive: true });
|
|
67
|
+
console.log(`${green}✓${reset} Created ${ezCommandsDir}\n`);
|
|
68
|
+
|
|
69
|
+
// Copy workflow files from skills to commands
|
|
70
|
+
console.log(`${cyan}Step 2: Copying ez-agents commands${reset}`);
|
|
71
|
+
|
|
72
|
+
let sourceDir = null;
|
|
73
|
+
if (ezAgentsDir && fs.existsSync(path.join(ezAgentsDir, 'workflows'))) {
|
|
74
|
+
sourceDir = path.join(ezAgentsDir, 'workflows');
|
|
75
|
+
} else if (fs.existsSync(skillsDir)) {
|
|
76
|
+
// Check if skills are installed as ez-* directories
|
|
77
|
+
const skillDirs = fs.readdirSync(skillsDir, { withFileTypes: true })
|
|
78
|
+
.filter(d => d.isDirectory() && d.name.startsWith('ez-'))
|
|
79
|
+
.map(d => d.name);
|
|
80
|
+
|
|
81
|
+
if (skillDirs.length > 0) {
|
|
82
|
+
console.log(`${yellow}Note:${reset} Found skills in skills/ directory: ${skillDirs.join(', ')}`);
|
|
83
|
+
console.log(`${yellow}Note:${reset} Qwen Code uses commands/ directory instead\n`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (sourceDir && fs.existsSync(sourceDir)) {
|
|
88
|
+
const files = fs.readdirSync(sourceDir).filter(f => f.endsWith('.md'));
|
|
89
|
+
|
|
90
|
+
for (const file of files) {
|
|
91
|
+
const srcFile = path.join(sourceDir, file);
|
|
92
|
+
const destFile = path.join(ezCommandsDir, file);
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
let content = fs.readFileSync(srcFile, 'utf-8');
|
|
96
|
+
|
|
97
|
+
// Update any references from skills/ to commands/
|
|
98
|
+
content = content.replace(/~\/\.qwen\/skills\//g, '~/.qwen/commands/');
|
|
99
|
+
content = content.replace(/\.qwen\/skills\//g, '.qwen/commands/');
|
|
100
|
+
|
|
101
|
+
fs.writeFileSync(destFile, content, 'utf-8');
|
|
102
|
+
console.log(`${green}✓${reset} Copied ${file}`);
|
|
103
|
+
} catch (err) {
|
|
104
|
+
console.log(`${red}✗${reset} Failed to copy ${file}: ${err.message}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
console.log(`\n${green}✓${reset} Copied ${files.length} commands\n`);
|
|
109
|
+
} else {
|
|
110
|
+
console.log(`${yellow}Note:${reset} No workflows found to copy`);
|
|
111
|
+
console.log(`The commands will be available after running ${cyan}ez-agents --qwen --global${reset} again\n`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Verify installation
|
|
115
|
+
console.log(`${cyan}Step 3: Verifying installation${reset}`);
|
|
116
|
+
if (fs.existsSync(ezCommandsDir)) {
|
|
117
|
+
const commandFiles = fs.readdirSync(ezCommandsDir).filter(f => f.endsWith('.md'));
|
|
118
|
+
console.log(`${green}✓${reset} Found ${commandFiles.length} command files in ${ezCommandsDir}`);
|
|
119
|
+
|
|
120
|
+
if (commandFiles.length > 0) {
|
|
121
|
+
console.log(`\n${green}Success!${reset} EZ Agents commands are now available in Qwen Code\n`);
|
|
122
|
+
console.log(`Available commands:`);
|
|
123
|
+
|
|
124
|
+
// Show first 10 commands
|
|
125
|
+
const sampleCommands = commandFiles.slice(0, 10).map(f => f.replace('.md', ''));
|
|
126
|
+
sampleCommands.forEach(cmd => {
|
|
127
|
+
console.log(` ${cyan}/ez:${cmd}${reset}`);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
if (commandFiles.length > 10) {
|
|
131
|
+
console.log(` ... and ${commandFiles.length - 10} more`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
console.log(`\n${green}Usage:${reset}`);
|
|
135
|
+
console.log(` Open a project in Qwen Code and run:`);
|
|
136
|
+
console.log(` ${cyan}/ez:help${reset} - Show all available commands`);
|
|
137
|
+
console.log(` ${cyan}/ez:new-project${reset} - Initialize new project`);
|
|
138
|
+
console.log(` ${cyan}/ez:quick${reset} - Quick start\n`);
|
|
139
|
+
}
|
|
140
|
+
} else {
|
|
141
|
+
console.log(`${red}✗${reset} Commands directory not created`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
console.log(`${cyan}Note:${reset} You may need to restart Qwen Code for changes to take effect\n`);
|