@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.
Files changed (61) hide show
  1. package/README.md +295 -714
  2. package/bin/install.js +387 -62
  3. package/commands/ez/auth.md +87 -0
  4. package/commands/ez/join-discord.md +1 -1
  5. package/ez-agents/bin/ez-tools.cjs +120 -2
  6. package/ez-agents/bin/lib/assistant-adapter.cjs +62 -3
  7. package/ez-agents/bin/lib/audit-exec.cjs +20 -8
  8. package/ez-agents/bin/lib/auth.cjs +2 -1
  9. package/ez-agents/bin/lib/circuit-breaker.cjs +1 -1
  10. package/ez-agents/bin/lib/commands.cjs +42 -23
  11. package/ez-agents/bin/lib/config.cjs +18 -11
  12. package/ez-agents/bin/lib/core.cjs +42 -25
  13. package/ez-agents/bin/lib/file-lock.cjs +3 -3
  14. package/ez-agents/bin/lib/fs-utils.cjs +1 -1
  15. package/ez-agents/bin/lib/git-utils.cjs +1 -1
  16. package/ez-agents/bin/lib/health-check.cjs +2 -3
  17. package/ez-agents/bin/lib/index.cjs +1 -1
  18. package/ez-agents/bin/lib/init.cjs +70 -23
  19. package/ez-agents/bin/lib/logger.cjs +11 -4
  20. package/ez-agents/bin/lib/model-provider.cjs +124 -29
  21. package/ez-agents/bin/lib/phase.cjs +39 -22
  22. package/ez-agents/bin/lib/planning-write.cjs +107 -0
  23. package/ez-agents/bin/lib/retry.cjs +1 -1
  24. package/ez-agents/bin/lib/roadmap.cjs +3 -2
  25. package/ez-agents/bin/lib/safe-exec.cjs +1 -1
  26. package/ez-agents/bin/lib/safe-path.cjs +1 -1
  27. package/ez-agents/bin/lib/state.cjs +24 -9
  28. package/ez-agents/bin/lib/temp-file.cjs +1 -1
  29. package/ez-agents/bin/lib/template.cjs +2 -1
  30. package/ez-agents/bin/lib/test-file-lock.cjs +1 -1
  31. package/ez-agents/bin/lib/test-graceful.cjs +2 -2
  32. package/ez-agents/bin/lib/test-logger.cjs +2 -2
  33. package/ez-agents/bin/lib/test-temp-file.cjs +1 -1
  34. package/ez-agents/bin/lib/timeout-exec.cjs +4 -3
  35. package/ez-agents/bin/lib/verify.cjs +54 -25
  36. package/ez-agents/references/continuation-format.md +1 -1
  37. package/ez-agents/workflows/add-tests.md +2 -2
  38. package/ez-agents/workflows/add-todo.md +1 -1
  39. package/ez-agents/workflows/autonomous.md +15 -15
  40. package/ez-agents/workflows/diagnose-issues.md +1 -1
  41. package/ez-agents/workflows/discuss-phase.md +3 -3
  42. package/ez-agents/workflows/execute-phase.md +2 -2
  43. package/ez-agents/workflows/health.md +1 -1
  44. package/ez-agents/workflows/help.md +2 -2
  45. package/ez-agents/workflows/map-codebase.md +1 -1
  46. package/ez-agents/workflows/new-milestone.md +5 -5
  47. package/ez-agents/workflows/new-project.md +12 -10
  48. package/ez-agents/workflows/plan-phase.md +8 -8
  49. package/ez-agents/workflows/progress.md +1 -1
  50. package/ez-agents/workflows/set-profile.md +1 -1
  51. package/ez-agents/workflows/settings.md +9 -9
  52. package/ez-agents/workflows/stats.md +1 -1
  53. package/ez-agents/workflows/ui-phase.md +3 -3
  54. package/ez-agents/workflows/ui-review.md +2 -2
  55. package/ez-agents/workflows/update.md +1 -1
  56. package/ez-agents/workflows/validate-phase.md +3 -3
  57. package/ez-agents/workflows/verify-work.md +3 -3
  58. package/package.json +1 -1
  59. package/scripts/build-hooks.js +1 -1
  60. package/scripts/fix-qwen-installation.js +144 -0
  61. 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
- GSD ► RESEARCHING
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
- GSD ► RESEARCH COMPLETE ✓
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
- GSD ► DEFINING REQUIREMENTS
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
- GSD ► CREATING ROADMAP
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
- GSD ► MILESTONE INITIALIZED ✓
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
- GSD ► QUESTIONING
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 `~/.gsd/defaults.json`. If the file exists, offer to use saved defaults:
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 ~/.gsd/defaults.json)",
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 `~/.gsd/defaults.json`, use those values for config.json, and skip directly to **Commit config.json** below.
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 `~/.gsd/defaults.json` doesn't exist: proceed with the questions below.
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
- GSD ► RESEARCHING
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
- GSD ► RESEARCH COMPLETE ✓
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
- GSD ► DEFINING REQUIREMENTS
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
- GSD ► CREATING ROADMAP
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
- GSD ► PROJECT INITIALIZED ✓
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
- GSD ► PRD EXPRESS PATH
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
- GSD ► RESEARCHING PHASE {X}
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
- GSD ► PLANNING PHASE {X}
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
- GSD ► VERIFYING PLANS
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
- GSD ► AUTO-ADVANCING TO EXECUTE
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="gsd:execute-phase", args="${PHASE} --auto --no-transition")
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
- GSD ► PHASE ${PHASE} COMPLETE ✓
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
- GSD ► PHASE {X} PLANNED ✓
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 gsd command
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 GSD agents. Controls which Claude model each agent uses, balancing quality vs token spend.
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 GSD 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 (~/.gsd/defaults.json) for future projects.
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 (gsd/phase-{N}-{name})" },
126
- { label: "Per Milestone", description: "Create branch for entire milestone (gsd/{version}-{name})" }
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 ~/.gsd/defaults.json)" },
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 `~/.gsd/defaults.json`:
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 ~/.gsd
178
+ mkdir -p ~/.ez
179
179
  ```
180
180
 
181
- Write `~/.gsd/defaults.json` with:
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
- GSD ► SETTINGS UPDATED
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 (~/.gsd/defaults.json)
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 "$GSD_TOOLS" stats json)
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
- GSD ► UI DESIGN CONTRACT — PHASE {N}
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
- GSD ► VERIFYING UI-SPEC
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
- GSD ► UI-SPEC READY ✓
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
- GSD ► UI AUDIT — PHASE {N}: {name}
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
- GSD ► UI AUDIT COMPLETE ✓
108
+ EZ ► UI AUDIT COMPLETE ✓
109
109
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
110
110
 
111
111
  **Phase {N}: {Name}** — Overall: {score}/24
@@ -127,7 +127,7 @@ If multiple runtime installs are detected and the invoking runtime cannot be det
127
127
 
128
128
  **If VERSION file missing:**
129
129
  ```
130
- ## GSD Update
130
+ ## EZ Update
131
131
 
132
132
  **Installed version:** Unknown
133
133
 
@@ -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: `GSD > VALIDATE PHASE {N}: {name}`
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
- GSD > PHASE {N} IS NYQUIST-COMPLIANT
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
- GSD > PHASE {N} VALIDATED (PARTIAL)
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
- GSD ► PLANNING FIXES
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
- GSD ► VERIFYING FIX PLANS
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
- GSD ► FIXES READY ✓
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@howlil/ez-agents",
3
- "version": "3.1.0",
3
+ "version": "3.4.1",
4
4
  "description": "EZ Agents — Meta-prompting with multi-model support (Qwen, Kimi, OpenAI)",
5
5
  "bin": {
6
6
  "ez-agents": "bin/install.js",
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Copy GSD hooks to dist for installation.
3
+ * Copy EZ hooks to dist for installation.
4
4
  */
5
5
 
6
6
  const fs = require('fs');
@@ -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`);