@howlil/ez-agents 3.4.2 → 3.5.0

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 (74) hide show
  1. package/README.md +77 -2
  2. package/agents/ez-observer-agent.md +260 -0
  3. package/agents/ez-release-agent.md +333 -0
  4. package/agents/ez-requirements-agent.md +377 -0
  5. package/agents/ez-scrum-master-agent.md +242 -0
  6. package/agents/ez-tech-lead-agent.md +267 -0
  7. package/bin/install.js +3221 -3272
  8. package/commands/ez/arch-review.md +102 -0
  9. package/commands/ez/execute-phase.md +11 -0
  10. package/commands/ez/export-session.md +79 -0
  11. package/commands/ez/gather-requirements.md +117 -0
  12. package/commands/ez/git-workflow.md +72 -0
  13. package/commands/ez/hotfix.md +120 -0
  14. package/commands/ez/import-session.md +82 -0
  15. package/commands/ez/list-sessions.md +96 -0
  16. package/commands/ez/package-manager.md +316 -0
  17. package/commands/ez/plan-phase.md +9 -1
  18. package/commands/ez/preflight.md +79 -0
  19. package/commands/ez/progress.md +13 -1
  20. package/commands/ez/release.md +153 -0
  21. package/commands/ez/resume.md +107 -0
  22. package/commands/ez/standup.md +85 -0
  23. package/ez-agents/bin/ez-tools.cjs +1095 -716
  24. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  25. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  26. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  27. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  28. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  29. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  30. package/ez-agents/bin/lib/file-access.cjs +207 -0
  31. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  32. package/ez-agents/bin/lib/git-utils.cjs +321 -203
  33. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  34. package/ez-agents/bin/lib/index.cjs +46 -2
  35. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  36. package/ez-agents/bin/lib/logger.cjs +124 -154
  37. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  38. package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
  39. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  40. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  41. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  42. package/ez-agents/bin/lib/release-validator.cjs +614 -0
  43. package/ez-agents/bin/lib/safe-exec.cjs +128 -214
  44. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  45. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  46. package/ez-agents/bin/lib/session-export.cjs +251 -0
  47. package/ez-agents/bin/lib/session-import.cjs +262 -0
  48. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  49. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  50. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  51. package/ez-agents/references/metrics-schema.md +118 -0
  52. package/ez-agents/references/planning-config.md +140 -0
  53. package/ez-agents/references/tier-strategy.md +103 -0
  54. package/ez-agents/templates/bdd-feature.md +173 -0
  55. package/ez-agents/templates/discussion.md +68 -0
  56. package/ez-agents/templates/incident-runbook.md +205 -0
  57. package/ez-agents/templates/release-checklist.md +133 -0
  58. package/ez-agents/templates/rollback-plan.md +201 -0
  59. package/ez-agents/workflows/arch-review.md +54 -0
  60. package/ez-agents/workflows/autonomous.md +844 -743
  61. package/ez-agents/workflows/execute-phase.md +45 -0
  62. package/ez-agents/workflows/export-session.md +255 -0
  63. package/ez-agents/workflows/gather-requirements.md +206 -0
  64. package/ez-agents/workflows/help.md +92 -0
  65. package/ez-agents/workflows/hotfix.md +291 -0
  66. package/ez-agents/workflows/import-session.md +303 -0
  67. package/ez-agents/workflows/new-milestone.md +713 -384
  68. package/ez-agents/workflows/new-project.md +1107 -1113
  69. package/ez-agents/workflows/plan-phase.md +22 -0
  70. package/ez-agents/workflows/progress.md +15 -25
  71. package/ez-agents/workflows/release.md +253 -0
  72. package/ez-agents/workflows/resume-session.md +215 -0
  73. package/ez-agents/workflows/standup.md +64 -0
  74. package/package.json +9 -2
@@ -40,6 +40,28 @@ mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"
40
40
 
41
41
  **Existing artifacts from init:** `has_research`, `has_plans`, `plan_count`.
42
42
 
43
+ <auto_invoke>
44
+ Check for --no-auto in ARGUMENTS. If not present:
45
+
46
+ ```bash
47
+ SMART_ORCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get smart_orchestration.enabled 2>/dev/null || echo "true")
48
+ ```
49
+ If `SMART_ORCH` is `"false"` or `--no-auto` is in ARGUMENTS: skip, proceed to step 3.
50
+
51
+ **Conditional discuss-phase for sensitive areas:**
52
+ Read phase name and objective from the phase arguments and roadmap. Check if they contain any of these sensitive keywords (case-insensitive):
53
+ `auth`, `login`, `jwt`, `oauth`, `database`, `migration`, `schema`, `payment`, `billing`, `security`
54
+
55
+ If YES and no CONTEXT.md exists in the phase directory and `--skip-discussion` is NOT in ARGUMENTS:
56
+ → Display: `[auto] Sensitive area detected — running pre-flight discussion...`
57
+ → Invoke: Skill(ez:discuss-phase, args: phase_number + " --auto")
58
+ → Continue to step 3.
59
+
60
+ If NO match OR CONTEXT.md already exists OR `--skip-discussion` present: skip silently, proceed to step 3.
61
+
62
+ **Detection rule:** Only trigger if phase name or goal in ROADMAP.md contains one of the explicit keywords above. False-negative is safer than false-positive — when uncertain, skip.
63
+ </auto_invoke>
64
+
43
65
  ## 3. Validate Phase
44
66
 
45
67
  ```bash
@@ -8,6 +8,19 @@ Read all files referenced by the invoking prompt's execution_context before star
8
8
 
9
9
  <process>
10
10
 
11
+ <auto_invoke>
12
+ Check for --no-auto in ARGUMENTS. If not present, also check:
13
+ ```bash
14
+ SMART_ORCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get smart_orchestration.enabled 2>/dev/null || echo "true")
15
+ ```
16
+ If `SMART_ORCH` is not `"false"` and `--no-auto` is not in ARGUMENTS:
17
+ ```bash
18
+ HEALTH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" health --json 2>/dev/null)
19
+ ```
20
+ - If FAIL: display a warning in the output report but do NOT stop (progress continues)
21
+ - If PASS: silent (do not show to user)
22
+ </auto_invoke>
23
+
11
24
  <step name="init_context">
12
25
  **Load progress context (paths only):**
13
26
 
@@ -219,16 +232,10 @@ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
219
232
 
220
233
  **Phase {N}: {Name}** — {Goal from ROADMAP.md}
221
234
 
222
- `/ez:discuss-phase {phase}` — gather context and clarify approach
235
+ `/ez:discuss-phase {phase}`
223
236
 
224
237
  <sub>`/clear` first → fresh context window</sub>
225
238
 
226
- ---
227
-
228
- **Also available:**
229
- - `/ez:plan-phase {phase}` — skip discussion, plan directly
230
- - `/ez:list-phase-assumptions {phase}` — see Claude's assumptions
231
-
232
239
  ---
233
240
  ```
234
241
 
@@ -249,12 +256,6 @@ UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
249
256
 
250
257
  <sub>`/clear` first → fresh context window</sub>
251
258
 
252
- ---
253
-
254
- **Also available:**
255
- - `/ez:execute-phase {phase}` — execute phase plans
256
- - `/ez:verify-work {phase}` — run more UAT testing
257
-
258
259
  ---
259
260
  ```
260
261
 
@@ -292,16 +293,10 @@ Read ROADMAP.md to get the next phase's name and goal.
292
293
 
293
294
  **Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
294
295
 
295
- `/ez:discuss-phase {Z+1}` — gather context and clarify approach
296
+ `/ez:discuss-phase {Z+1}`
296
297
 
297
298
  <sub>`/clear` first → fresh context window</sub>
298
299
 
299
- ---
300
-
301
- **Also available:**
302
- - `/ez:plan-phase {Z+1}` — skip discussion, plan directly
303
- - `/ez:verify-work {Z}` — user acceptance test before continuing
304
-
305
300
  ---
306
301
  ```
307
302
 
@@ -324,11 +319,6 @@ All {N} phases finished!
324
319
 
325
320
  <sub>`/clear` first → fresh context window</sub>
326
321
 
327
- ---
328
-
329
- **Also available:**
330
- - `/ez:verify-work` — user acceptance test before completing milestone
331
-
332
322
  ---
333
323
  ```
334
324
 
@@ -0,0 +1,253 @@
1
+ <purpose>
2
+ Orchestrate tier-aware production releases. Validates state, runs security gates, evaluates tier checklist, creates release branch, generates changelog, bumps version, writes rollback plan, and tags the release.
3
+ </purpose>
4
+
5
+ <process>
6
+
7
+ <auto_invoke>
8
+ Check for --no-auto in ARGUMENTS. If present, skip this section and proceed to step 1.
9
+
10
+ ```bash
11
+ SMART_ORCH=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" config-get smart_orchestration.enabled 2>/dev/null || echo "true")
12
+ ```
13
+ If `SMART_ORCH` is `"false"`: skip, proceed to step 1.
14
+
15
+ **Tier-based pre-flight:**
16
+ Parse the tier argument from ARGUMENTS (mvp / medium / enterprise).
17
+
18
+ - **mvp**: No pre-flight auto-invocations. Proceed directly to step 1.
19
+ - **medium**: Check if a VERIFICATION.md from verify-work already exists for the current phase. If not:
20
+ → Display: `[auto] Running verify-work before medium release...`
21
+ → Invoke: Skill(ez:verify-work)
22
+ → Continue to step 1.
23
+ - **enterprise**: Run in sequence:
24
+ → Display: `[auto] Running verify-work...`
25
+ → Invoke: Skill(ez:verify-work)
26
+ → Display: `[auto] Running audit-milestone...`
27
+ → Invoke: Skill(ez:audit-milestone)
28
+ → Display: `[auto] Running arch-review...`
29
+ → Invoke: Skill(ez:arch-review)
30
+ → Continue to step 1.
31
+
32
+ All auto-invocations are prefixed with `[auto]` in output. Override with `--no-auto` to skip all pre-invocations.
33
+ </auto_invoke>
34
+
35
+ ## 1. Initialize
36
+
37
+ Parse $ARGUMENTS:
38
+ - Command: `release` or `preflight`
39
+ - Tier: `mvp`, `medium`, or `enterprise`
40
+ - Version: semver string (e.g., `1.0.0`)
41
+
42
+ **If missing tier or version (for release command):**
43
+ ```
44
+ Usage: /ez:release <tier> <version>
45
+ /ez:release preflight <tier>
46
+
47
+ Examples:
48
+ /ez:release mvp v1.0.0
49
+ /ez:release medium v1.5.0
50
+ /ez:release enterprise v2.0.0
51
+ /ez:release preflight medium
52
+ ```
53
+ Exit.
54
+
55
+ **Normalize version:** Strip leading `v` if present (e.g., `v1.0.0` → `1.0.0`).
56
+
57
+ **Load tier config:**
58
+ ```bash
59
+ TIER_CONFIG=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" tier-config "${TARGET_TIER}" 2>/dev/null)
60
+ ```
61
+
62
+ Display banner:
63
+ ```
64
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+ EZ ► RELEASE v{version} — {TIER} TIER
66
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
67
+ ```
68
+
69
+ ## 2. Validate Semver
70
+
71
+ ```bash
72
+ echo "${VERSION}" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$"
73
+ ```
74
+
75
+ **If invalid:** Error — "Version must be semver (X.Y.Z). Got: {version}"
76
+
77
+ ## 3. Check Current State
78
+
79
+ ```bash
80
+ # Uncommitted changes
81
+ git status --short
82
+
83
+ # Current branch
84
+ git branch --show-current
85
+
86
+ # Current version
87
+ CURRENT=$(node -e "console.log(require('./package.json').version)" 2>/dev/null || echo "0.0.0")
88
+ ```
89
+
90
+ **If uncommitted changes:** Error — "Commit or stash all changes before releasing"
91
+
92
+ ## 4. Run Security Gates
93
+
94
+ ```bash
95
+ echo "Running security gates..."
96
+
97
+ # Gate 1: No secrets in tracked files
98
+ SECRET_HITS=$(git grep -i -E "(api[_-]?key|password|secret)['\"]?\s*[=:]\s*['\"]?[a-zA-Z0-9+/]{20,}" HEAD 2>/dev/null | \
99
+ grep -v "example\|placeholder\|your-key\|process\.env\|env\.\|config\.\|getenv" | wc -l)
100
+
101
+ # Gate 2: npm audit
102
+ npm audit --audit-level=critical 2>/dev/null
103
+ AUDIT_EXIT=$?
104
+
105
+ # Gate 3: Production TODOs
106
+ PROD_TODOS=$(grep -rn "TODO\|FIXME\|HACK" src/ --include="*.ts" --include="*.js" --include="*.py" 2>/dev/null | \
107
+ grep -v "test\|spec\|__test__\|\.test\." | wc -l)
108
+
109
+ # Gate 4: .env in .gitignore
110
+ grep -q "^\.env" .gitignore 2>/dev/null && ENV_SAFE=true || ENV_SAFE=false
111
+ ```
112
+
113
+ Security gate results:
114
+ ```
115
+ Security Gates:
116
+ ✓/✗ No secrets in committed files ({SECRET_HITS} found)
117
+ ✓/✗ npm audit clean (exit {AUDIT_EXIT})
118
+ ✓/✗ No production TODOs ({PROD_TODOS} found)
119
+ ✓/✗ .env in .gitignore
120
+ ```
121
+
122
+ **Hard stop:** If SECRET_HITS > 0 → "BLOCKED: Secrets found in committed files. Remove before releasing."
123
+ **Hard stop:** If AUDIT_EXIT is non-zero → "BLOCKED: Critical vulnerabilities found. Run npm audit fix."
124
+
125
+ ## 5. Run Tier Checklist
126
+
127
+ Load checklist template from `~/.claude/ez-agents/templates/release-checklist.md`.
128
+
129
+ Run automated checks for the target tier:
130
+
131
+ ```bash
132
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" release check-tier "${TARGET_TIER}"
133
+ ```
134
+
135
+ Display checklist results with pass/fail/skip for each item.
136
+
137
+ **If `preflight` command:** Display checklist results and exit here.
138
+
139
+ ## 6. Check Coverage (if test coverage available)
140
+
141
+ ```bash
142
+ # Try to find coverage report
143
+ COVERAGE=$(cat coverage/coverage-summary.json 2>/dev/null | jq '.total.lines.pct // 0')
144
+ ```
145
+
146
+ Coverage thresholds by tier:
147
+ - mvp: 60%
148
+ - medium: 80%
149
+ - enterprise: 95%
150
+
151
+ **If below threshold:** Warning (not hard blocker — tests may not be configured).
152
+
153
+ ## 7. Spawn Release Agent
154
+
155
+ ```
156
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
157
+ ◆ Spawning release agent...
158
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
159
+ ```
160
+
161
+ Release agent prompt:
162
+
163
+ ```markdown
164
+ <objective>
165
+ Create a {TARGET_TIER} tier release v{VERSION}.
166
+ </objective>
167
+
168
+ <release_config>
169
+ Tier: {TARGET_TIER}
170
+ Version: {VERSION}
171
+ Current version: {CURRENT_VERSION}
172
+ </release_config>
173
+
174
+ <files_to_read>
175
+ - package.json (current version and scripts)
176
+ - CHANGELOG.md (if exists — append new entry)
177
+ - .planning/config.json (release tier config)
178
+ - ~/.claude/ez-agents/templates/release-checklist.md (checklist template)
179
+ - ~/.claude/ez-agents/templates/rollback-plan.md (rollback template)
180
+ </files_to_read>
181
+
182
+ <security_gate_results>
183
+ {security gate results from step 4}
184
+ </security_gate_results>
185
+
186
+ <checklist_results>
187
+ {checklist results from step 5}
188
+ </checklist_results>
189
+
190
+ <tasks>
191
+ 1. Create release branch (per tier: trunk | github-flow | gitflow)
192
+ 2. Generate changelog from git log since last tag
193
+ 3. Bump version in package.json to {VERSION}
194
+ 4. Create rollback plan in .planning/releases/v{VERSION}-ROLLBACK-PLAN.md
195
+ 5. Commit release artifacts
196
+ 6. Tag v{VERSION}
197
+ 7. Report production readiness score
198
+ </tasks>
199
+ ```
200
+
201
+ ```
202
+ Task(
203
+ prompt=release_prompt,
204
+ subagent_type="ez-release-agent",
205
+ model="{planner_model from init}"
206
+ )
207
+ ```
208
+
209
+ ## 8. Handle Agent Return
210
+
211
+ **`## RELEASE COMPLETE`:**
212
+
213
+ ```
214
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
215
+ EZ ► RELEASE v{version} READY ✓
216
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
217
+
218
+ {agent summary}
219
+
220
+ ### To Ship
221
+ git push origin {branch} && git push origin v{version}
222
+
223
+ ### Rollback Plan
224
+ .planning/releases/v{version}-ROLLBACK-PLAN.md
225
+ ```
226
+
227
+ **If blocked:**
228
+ ```
229
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
230
+ EZ ► RELEASE BLOCKED
231
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
232
+
233
+ {blocker details}
234
+
235
+ Fix the above issues then re-run: /ez:release {tier} v{version}
236
+ ```
237
+
238
+ </process>
239
+
240
+ <success_criteria>
241
+ - [ ] Tier and version validated
242
+ - [ ] Uncommitted changes check passed
243
+ - [ ] All security gates run (fail on hard blockers)
244
+ - [ ] Tier checklist evaluated
245
+ - [ ] Coverage checked against tier threshold
246
+ - [ ] ez-release-agent spawned with full context
247
+ - [ ] Release branch created per tier strategy
248
+ - [ ] Changelog updated
249
+ - [ ] Version bumped in package.json
250
+ - [ ] Rollback plan written
251
+ - [ ] Tag created
252
+ - [ ] User sees push instructions and production readiness score
253
+ </success_criteria>
@@ -0,0 +1,215 @@
1
+ # Workflow: resume-session
2
+
3
+ **Purpose:** Resume work from a previous session with full context restoration
4
+
5
+ **Related Commands:** `/ez:resume`
6
+
7
+ ---
8
+
9
+ ## Workflow Steps
10
+
11
+ ### 1. Load and Validate Session
12
+
13
+ ```
14
+ SessionManager mgr = new SessionManager();
15
+ Session session = sessionId ? mgr.loadSession(sessionId) : mgr.getLastSession();
16
+
17
+ if (!session) {
18
+ output("No previous sessions found. Start a new session with your work.");
19
+ exit;
20
+ }
21
+
22
+ logger.info('Resuming session', { sessionId: session.metadata.session_id });
23
+ ```
24
+
25
+ ### 2. Compare with Current State
26
+
27
+ ```
28
+ Load current STATE.md
29
+ Extract current phase, plan, incomplete tasks from STATE.md
30
+
31
+ sessionPhase = session.state.current_phase
32
+ sessionPlan = session.state.current_plan
33
+ statePhase = STATE.md.current_phase
34
+ statePlan = STATE.md.current_plan
35
+
36
+ needsReconciliation = (sessionPhase !== statePhase) || (sessionPlan !== statePlan)
37
+ ```
38
+
39
+ ### 3. If Reconciliation Needed
40
+
41
+ **Display Warning:**
42
+ ```
43
+ ⚠️ Session state differs from current project state
44
+
45
+ Session shows:
46
+ - Phase: {session.state.current_phase}
47
+ - Plan: {session.state.current_plan}
48
+
49
+ Current STATE.md shows:
50
+ - Phase: {state.current_phase}
51
+ - Plan: {state.current_plan}
52
+ ```
53
+
54
+ **Offer Options:**
55
+ ```
56
+ How would you like to reconcile?
57
+
58
+ 1. Use session state (overwrite STATE.md)
59
+ 2. Use current state (ignore session state)
60
+ 3. Manual review (show both, let user decide)
61
+ ```
62
+
63
+ **Handle Choice:**
64
+ - "1": Update STATE.md with session.state values
65
+ - "2": Keep STATE.md unchanged, use session context only
66
+ - "3": Show side-by-side comparison, let user edit
67
+
68
+ ### 4. Load Context
69
+
70
+ ```
71
+ // Load recent transcript for context
72
+ transcript = session.context.transcript
73
+ if (Array.isArray(transcript)) {
74
+ recentMessages = transcript.slice(-20) // Last 20 messages
75
+ }
76
+
77
+ // Load tasks
78
+ completedTasks = session.context.tasks.filter(t => t.status === 'completed')
79
+ incompleteTasks = session.state.incomplete_tasks
80
+
81
+ // Load decisions
82
+ decisions = session.context.decisions
83
+
84
+ // Load file changes
85
+ fileChanges = session.context.file_changes
86
+ ```
87
+
88
+ ### 5. Update STATE.md
89
+
90
+ ```
91
+ ez-tools state record-session \
92
+ --stopped-at "{session.state.last_action}" \
93
+ --resume-file "{session.metadata.session_id}"
94
+
95
+ // Update phase/plan if using session state
96
+ if (useSessionState) {
97
+ ez-tools state update "Current Phase" "{session.metadata.phase}"
98
+ ez-tools state update "Current Plan" "{session.metadata.plan}"
99
+ }
100
+ ```
101
+
102
+ ### 6. Prepare for Continuation
103
+
104
+ ```
105
+ // Identify incomplete work
106
+ incompleteTasks = session.state.incomplete_tasks || []
107
+
108
+ // Identify next action
109
+ nextAction = session.state.next_recommended_action
110
+
111
+ // Load relevant files
112
+ if (session.metadata.phase && session.metadata.plan) {
113
+ planFile = `.planning/phases/${session.metadata.phase}/.../${session.metadata.plan}-PLAN.md`
114
+ summaryFile = `.planning/phases/${session.metadata.phase}/.../${session.metadata.plan}-PLAN-SUMMARY.md`
115
+
116
+ if (fileExists(planFile)) {
117
+ loadFile(planFile)
118
+ }
119
+ }
120
+
121
+ // Load incomplete task files
122
+ for (task of incompleteTasks) {
123
+ if (task.file) {
124
+ loadFile(task.file)
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### 7. Output Resumption Confirmation
130
+
131
+ ```
132
+ ╔══════════════════════════════════════════════════════════════╗
133
+ ║ SESSION RESUMED ║
134
+ ╠══════════════════════════════════════════════════════════════╣
135
+ ║ Session: {session.metadata.session_id} ║
136
+ ║ Phase: {session.metadata.phase} ║
137
+ ║ Plan: {session.metadata.plan} ║
138
+ ║ Next action: {session.state.next_recommended_action} ║
139
+ ╚══════════════════════════════════════════════════════════════╝
140
+
141
+ Context loaded:
142
+ - {incompleteTasks.length} incomplete tasks
143
+ - {decisions.length} decisions recorded
144
+ - {fileChanges.length} file changes
145
+
146
+ Ready to continue. What would you like to do?
147
+
148
+ 1. Continue with recommended action
149
+ 2. Review incomplete tasks
150
+ 3. View session transcript
151
+ 4. Something else
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Error Handling
157
+
158
+ ### Session Not Found
159
+ ```
160
+ if (!session) {
161
+ output(`Session not found: ${sessionId}`);
162
+ output("Use /ez:list-sessions to see available sessions.");
163
+ exit;
164
+ }
165
+ ```
166
+
167
+ ### Corrupted Session File
168
+ ```
169
+ try {
170
+ session = JSON.parse(content);
171
+ } catch (err) {
172
+ logger.error('Corrupted session file', { sessionId, error: err.message });
173
+ output(`Error: Session file is corrupted: ${sessionId}`);
174
+ output("Consider deleting the file or contacting support.");
175
+ exit;
176
+ }
177
+ ```
178
+
179
+ ### Broken Chain Links
180
+ ```
181
+ if (session.metadata.session_chain) {
182
+ for (chainId of session.metadata.session_chain) {
183
+ if (!mgr.loadSession(chainId)) {
184
+ warnings.push(`Missing linked session: ${chainId}`);
185
+ }
186
+ }
187
+
188
+ if (warnings.length > 0) {
189
+ output("⚠️ Session chain has broken links:");
190
+ for (warning of warnings) {
191
+ output(` - ${warning}`);
192
+ }
193
+ }
194
+ }
195
+ ```
196
+
197
+ ---
198
+
199
+ ## State Transitions
200
+
201
+ **Before:** Session ended, STATE.md shows stopped state
202
+
203
+ **After:** Session resumed, STATE.md updated with:
204
+ - `Last session`: Current timestamp
205
+ - `Resume file`: Session ID
206
+ - `Stopped at`: Last action from session
207
+
208
+ ---
209
+
210
+ ## Related Files
211
+
212
+ - `ez-agents/bin/lib/session-manager.cjs` - Session loading
213
+ - `ez-agents/bin/lib/session-chain.cjs` - Chain navigation
214
+ - `ez-agents/bin/lib/state.cjs` - STATE.md updates
215
+ - `.planning/sessions/` - Session storage directory
@@ -0,0 +1,64 @@
1
+ <purpose>
2
+ Generate a sprint standup report. Analyzes recent SUMMARY.md files, STATE.md decisions/blockers, and phase progress to produce yesterday/today/blockers/velocity/health score.
3
+ </purpose>
4
+
5
+ <process>
6
+
7
+ ## 1. Initialize
8
+
9
+ ```bash
10
+ INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init progress)
11
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
12
+ ```
13
+
14
+ Parse optional phase from $ARGUMENTS.
15
+
16
+ ## 2. Gather Data
17
+
18
+ ```bash
19
+ STATE=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" state-snapshot)
20
+ ROADMAP=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap analyze)
21
+ PROGRESS_BAR=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" progress bar --raw)
22
+ ```
23
+
24
+ Find 3-5 most recent SUMMARY.md files (last 2 sessions worth of work).
25
+
26
+ ## 3. Calculate Sprint Health
27
+
28
+ Score 0-100 based on:
29
+ - Plans completed vs planned (velocity): 30pts
30
+ - Active blockers (0=30pts, 1=15pts, 2+=0pts): 30pts
31
+ - Requirements coverage from ROADMAP: 20pts
32
+ - Deviation rate from STATE.md: 20pts
33
+
34
+ ## 4. Generate Standup Report
35
+
36
+ ```
37
+ ## Daily Standup — {date}
38
+
39
+ ### Yesterday
40
+ {recent SUMMARY.md one-liners}
41
+
42
+ ### Today (Planned)
43
+ {next phase/plans from ROADMAP}
44
+
45
+ ### Blockers
46
+ {from STATE.md blockers[] or "None"}
47
+
48
+ ### Velocity Trend
49
+ {calculated from plan completion rate}
50
+
51
+ Sprint Health: {score}/100 — {status}
52
+ {one-line recommendation}
53
+ ```
54
+
55
+ Status thresholds: 80-100=HEALTHY, 60-79=SOME FRICTION, 40-59=STRUGGLING, <40=AT RISK.
56
+
57
+ </process>
58
+
59
+ <success_criteria>
60
+ - [ ] Recent work summarized
61
+ - [ ] Next steps identified
62
+ - [ ] Blockers surfaced
63
+ - [ ] Sprint health score calculated
64
+ </success_criteria>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@howlil/ez-agents",
3
- "version": "3.4.2",
3
+ "version": "3.5.0",
4
4
  "description": "EZ Agents — Meta-prompting with multi-model support (Qwen, Kimi, OpenAI)",
5
5
  "bin": {
6
6
  "ez-agents": "bin/install.js"
@@ -41,11 +41,15 @@
41
41
  "node": ">=16.7.0"
42
42
  },
43
43
  "devDependencies": {
44
+ "@octokit/rest": "^20.0.0",
44
45
  "c8": "^11.0.0",
46
+ "conventional-changelog": "^5.0.0",
47
+ "conventional-commits-parser": "^5.0.0",
45
48
  "esbuild": "^0.24.2",
46
49
  "husky": "^9.1.7",
47
50
  "lint-staged": "^15.5.2",
48
- "proper-lockfile": "^4.1.2"
51
+ "proper-lockfile": "^4.1.2",
52
+ "semver": "^7.6.0"
49
53
  },
50
54
  "scripts": {
51
55
  "build:hooks": "node scripts/build-hooks.js",
@@ -60,5 +64,8 @@
60
64
  "*.md": [
61
65
  "node scripts/run-tests.cjs"
62
66
  ]
67
+ },
68
+ "dependencies": {
69
+ "micromatch": "^4.0.5"
63
70
  }
64
71
  }