specweave 0.23.16 → 0.23.18

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 (67) hide show
  1. package/.claude-plugin/marketplace.json +11 -0
  2. package/CLAUDE.md +22 -7
  3. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  4. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +57 -0
  5. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  6. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  7. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  8. package/dist/src/core/progress/progress-tracker.d.ts +4 -1
  9. package/dist/src/core/progress/progress-tracker.d.ts.map +1 -1
  10. package/dist/src/core/progress/progress-tracker.js +33 -4
  11. package/dist/src/core/progress/progress-tracker.js.map +1 -1
  12. package/dist/src/core/spec-content-sync.d.ts +1 -1
  13. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  14. package/dist/src/integrations/ado/ado-dependency-loader.d.ts +1 -1
  15. package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -1
  16. package/dist/src/integrations/ado/ado-dependency-loader.js +39 -7
  17. package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -1
  18. package/package.json +1 -1
  19. package/plugins/specweave/hooks/lib/migrate-increment-work.sh +1 -1
  20. package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +245 -0
  21. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  22. package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +149 -0
  23. package/plugins/specweave/hooks/lib/update-status-line.sh +34 -4
  24. package/plugins/specweave/hooks/lib/validate-spec-status.sh +1 -1
  25. package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +163 -0
  26. package/plugins/specweave/hooks/post-first-increment.sh +1 -1
  27. package/plugins/specweave/hooks/post-first-increment.sh.bak +61 -0
  28. package/plugins/specweave/hooks/post-spec-update.sh +1 -1
  29. package/plugins/specweave/hooks/post-spec-update.sh.bak +158 -0
  30. package/plugins/specweave/hooks/post-user-story-complete.sh +1 -1
  31. package/plugins/specweave/hooks/post-user-story-complete.sh.bak +179 -0
  32. package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -1
  33. package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +83 -0
  34. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  35. package/plugins/specweave/hooks/user-prompt-submit.sh.bak +386 -0
  36. package/plugins/specweave/skills/specweave-framework/SKILL.md +1 -1
  37. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +23 -0
  38. package/plugins/specweave-ado/agents/ado-multi-project-mapper/AGENT.md +23 -0
  39. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +23 -0
  40. package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +23 -0
  41. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +23 -0
  42. package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +23 -0
  43. package/plugins/specweave-github/agents/github-manager/AGENT.md +23 -0
  44. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +25 -0
  45. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +25 -0
  46. package/plugins/specweave-github/lib/github-spec-content-sync.js +49 -0
  47. package/plugins/specweave-github/lib/github-spec-content-sync.ts +67 -0
  48. package/plugins/specweave-infrastructure/agents/devops/AGENT.md +26 -0
  49. package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +26 -0
  50. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +26 -0
  51. package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +26 -0
  52. package/plugins/specweave-infrastructure/agents/sre/AGENT.md +26 -0
  53. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +26 -0
  54. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +26 -0
  55. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +26 -0
  56. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +26 -0
  57. package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +26 -0
  58. package/plugins/specweave-ml/.claude-plugin/plugin.json +2 -2
  59. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +26 -0
  60. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +26 -0
  61. package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +26 -0
  62. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +26 -0
  63. package/plugins/specweave-payments/agents/payment-integration/AGENT.md +26 -0
  64. package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +19 -0
  65. package/plugins/specweave-plugin-dev/skills/plugin-expert/SKILL.md +1231 -0
  66. package/plugins/specweave-release/agents/release-manager/AGENT.md +27 -0
  67. package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -340
@@ -0,0 +1,386 @@
1
+ #!/bin/bash
2
+
3
+ # SpecWeave UserPromptSubmit Hook
4
+ # Fires BEFORE user's command executes (prompt-based hook)
5
+ # Purpose: Discipline validation, context injection, command suggestions
6
+
7
+ set -euo pipefail
8
+
9
+ # Read input JSON from stdin
10
+ INPUT=$(cat)
11
+
12
+ # Extract prompt from JSON
13
+ PROMPT=$(echo "$INPUT" | node -e "
14
+ const input = JSON.parse(require('fs').readFileSync(0, 'utf-8'));
15
+ console.log(input.prompt || '');
16
+ ")
17
+
18
+ # ==============================================================================
19
+ # DISCIPLINE VALIDATION: Block /specweave:increment if incomplete increments exist
20
+ # ==============================================================================
21
+
22
+ if echo "$PROMPT" | grep -q "/specweave:increment"; then
23
+ # Check increment discipline using check-discipline CLI command
24
+ # This enforces WIP limits (max 1 active, hard cap 2)
25
+ SPECWEAVE_DIR=".specweave"
26
+
27
+ if [[ -d "$SPECWEAVE_DIR/increments" ]]; then
28
+ # Run discipline check (exit code: 0=pass, 1=violations, 2=error)
29
+ if command -v node >/dev/null 2>&1 && [[ -f "dist/src/core/increment/metadata-manager.js" ]]; then
30
+ # Check active increments using MetadataManager
31
+ ACTIVE_COUNT=$(node -e "
32
+ try {
33
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
34
+ const active = MetadataManager.getActive();
35
+ console.log(active.length);
36
+ } catch (e) {
37
+ console.error('Error checking active increments:', e.message);
38
+ process.exit(2);
39
+ }
40
+ " 2>/dev/null || echo "0")
41
+
42
+ # Hard cap: never >2 active
43
+ if [[ "$ACTIVE_COUNT" -ge 2 ]]; then
44
+ # Get list of active increments for error message
45
+ ACTIVE_LIST=$(node -e "
46
+ try {
47
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
48
+ const active = MetadataManager.getActive();
49
+ active.forEach(inc => console.log(' - ' + inc.id + ' [' + inc.type + ']'));
50
+ } catch (e) {}
51
+ " 2>/dev/null || echo "")
52
+
53
+ cat <<EOF
54
+ {
55
+ "decision": "block",
56
+ "reason": "❌ HARD CAP REACHED\n\nYou have $ACTIVE_COUNT active increments (absolute maximum: 2)\n\nActive increments:\n$ACTIVE_LIST\n\n💡 You MUST complete or pause existing work first:\n\n1️⃣ Complete an increment:\n /specweave:done <id>\n\n2️⃣ Pause an increment:\n /specweave:pause <id> --reason=\"...\"\n\n3️⃣ Check status:\n /specweave:status\n\n📝 Multiple hotfixes? Combine them into ONE increment!\n Example: 0009-security-fixes (SQL + XSS + CSRF)\n\n⛔ This limit is enforced for your productivity.\nResearch: 3+ concurrent tasks = 40% slower + more bugs"
57
+ }
58
+ EOF
59
+ exit 0
60
+ fi
61
+
62
+ # Soft warning: 1 active (recommended limit)
63
+ if [[ "$ACTIVE_COUNT" -ge 1 ]]; then
64
+ # Get list of active increments for warning
65
+ ACTIVE_LIST=$(node -e "
66
+ try {
67
+ const { MetadataManager } = require('./dist/src/core/increment/metadata-manager.js');
68
+ const active = MetadataManager.getActive();
69
+ active.forEach(inc => console.log(' - ' + inc.id + ' [' + inc.type + ']'));
70
+ } catch (e) {}
71
+ " 2>/dev/null || echo "")
72
+
73
+ # Just warn, don't block (user can choose to continue)
74
+ cat <<EOF
75
+ {
76
+ "decision": "approve",
77
+ "systemMessage": "⚠️ WIP LIMIT REACHED\n\nYou have $ACTIVE_COUNT active increment (recommended limit: 1)\n\nActive increments:\n$ACTIVE_LIST\n\n🧠 Focus Principle: ONE active increment = maximum productivity\nStarting a 2nd increment reduces focus and velocity.\n\n💡 Consider:\n 1️⃣ Complete current work (recommended)\n 2️⃣ Pause current work (/specweave:pause)\n 3️⃣ Continue anyway (accept 20% productivity cost)\n\n⚠️ Emergency hotfix/bug? Use --type=hotfix or --type=bug to bypass this warning."
78
+ }
79
+ EOF
80
+ exit 0
81
+ fi
82
+ else
83
+ # Fallback: check for active/planning status manually
84
+ INCOMPLETE_INCREMENTS=$(find "$SPECWEAVE_DIR/increments" -mindepth 1 -maxdepth 1 -type d | while read increment_dir; do
85
+ metadata="$increment_dir/metadata.json"
86
+ if [[ -f "$metadata" ]]; then
87
+ status=$(node -e "
88
+ try {
89
+ const data = JSON.parse(require('fs').readFileSync('$metadata', 'utf-8'));
90
+ console.log(data.status || 'unknown');
91
+ } catch (e) {
92
+ console.log('unknown');
93
+ }
94
+ ")
95
+
96
+ if [[ "$status" == "active" || "$status" == "planning" ]]; then
97
+ echo "$(basename "$increment_dir")"
98
+ fi
99
+ fi
100
+ done)
101
+
102
+ if [[ -n "$INCOMPLETE_INCREMENTS" ]]; then
103
+ COUNT=$(echo "$INCOMPLETE_INCREMENTS" | wc -l | xargs)
104
+
105
+ # Get incomplete task count for migration guidance
106
+ MIGRATION_SCRIPT="$(dirname "${BASH_SOURCE[0]}")/lib/migrate-increment-work.sh"
107
+ INCOMPLETE_TASKS=""
108
+
109
+ for increment in $INCOMPLETE_INCREMENTS; do
110
+ if [[ -x "$MIGRATION_SCRIPT" ]]; then
111
+ TASK_COUNT=$("$MIGRATION_SCRIPT" count-incomplete "$increment" 2>/dev/null || echo "?")
112
+ INCOMPLETE_TASKS="${INCOMPLETE_TASKS}\n - $increment ($TASK_COUNT incomplete tasks)"
113
+ else
114
+ INCOMPLETE_TASKS="${INCOMPLETE_TASKS}\n - $increment"
115
+ fi
116
+ done
117
+
118
+ cat <<EOF
119
+ {
120
+ "decision": "block",
121
+ "reason": "❌ Cannot create new increment! You have $COUNT incomplete increment(s):$INCOMPLETE_TASKS\n\n💡 **SMART MIGRATION OPTIONS:**\n\n1️⃣ **Transfer Work** (Recommended)\n Move incomplete tasks to new increment:\n \`\`\`bash\n # After creating new increment, run:\n bash plugins/specweave/hooks/lib/migrate-increment-work.sh transfer <old-id> <new-id>\n \`\`\`\n ✅ Clean closure + work continues\n\n2️⃣ **Adjust WIP Limit** (Emergency Only)\n Temporarily allow 3 active increments:\n \`\`\`bash\n bash plugins/specweave/hooks/lib/migrate-increment-work.sh adjust-wip 3\n \`\`\`\n ⚠️ 20% productivity cost, revert ASAP\n\n3️⃣ **Force-Close** (Quick Fix)\n Mark increment as complete (work lost):\n \`\`\`bash\n bash plugins/specweave/hooks/lib/migrate-increment-work.sh force-close <increment-id>\n \`\`\`\n ⚠️ Incomplete work NOT transferred!\n\n📝 **Traditional Options:**\n - /specweave:done <id> # Complete properly\n - /specweave:pause <id> # Pause for later\n - /specweave:abandon <id> # Abandon if obsolete\n\nℹ️ The discipline exists for a reason:\n ✓ Prevents scope creep\n ✓ Ensures completions are tracked\n ✓ Maintains living docs accuracy\n ✓ Keeps work focused"
122
+ }
123
+ EOF
124
+ exit 0
125
+ fi
126
+ fi
127
+ fi
128
+ fi
129
+
130
+ # ==============================================================================
131
+ # PRE-FLIGHT SYNC CHECK: Ensure living docs are fresh before operations
132
+ # ==============================================================================
133
+
134
+ # Detect increment operations that need fresh data
135
+ if echo "$PROMPT" | grep -qE "/(specweave:)?(done|validate|progress|do)"; then
136
+ # Extract increment ID from prompt (if provided)
137
+ INCREMENT_ID=$(echo "$PROMPT" | grep -oE "[0-9]{4}[a-z0-9-]*" | head -1)
138
+
139
+ # If no ID in prompt, try to find active increment
140
+ if [[ -z "$INCREMENT_ID" ]] && [[ -d ".specweave/increments" ]]; then
141
+ INCREMENT_ID=$(find .specweave/increments -mindepth 1 -maxdepth 1 -type d | while read increment_dir; do
142
+ metadata="$increment_dir/metadata.json"
143
+ if [[ -f "$metadata" ]]; then
144
+ status=$(node -e "
145
+ try {
146
+ const data = JSON.parse(require('fs').readFileSync('$metadata', 'utf-8'));
147
+ if (data.status === 'active') {
148
+ console.log('$(basename "$increment_dir")');
149
+ }
150
+ } catch (e) {}
151
+ " 2>/dev/null)
152
+
153
+ if [[ -n "$status" ]]; then
154
+ echo "$status"
155
+ break
156
+ fi
157
+ fi
158
+ done)
159
+ fi
160
+
161
+ # If we have an increment ID, check freshness
162
+ if [[ -n "$INCREMENT_ID" ]]; then
163
+ INCREMENT_SPEC=".specweave/increments/$INCREMENT_ID/spec.md"
164
+ LIVING_DOCS_SPEC=".specweave/docs/internal/specs/spec-$INCREMENT_ID.md"
165
+
166
+ # Check if increment spec exists
167
+ if [[ -f "$INCREMENT_SPEC" ]]; then
168
+ # Get modification times
169
+ if [[ "$(uname)" == "Darwin" ]]; then
170
+ # macOS
171
+ INCREMENT_MTIME=$(stat -f %m "$INCREMENT_SPEC" 2>/dev/null || echo 0)
172
+ LIVING_DOCS_MTIME=$(stat -f %m "$LIVING_DOCS_SPEC" 2>/dev/null || echo 0)
173
+ else
174
+ # Linux
175
+ INCREMENT_MTIME=$(stat -c %Y "$INCREMENT_SPEC" 2>/dev/null || echo 0)
176
+ LIVING_DOCS_MTIME=$(stat -c %Y "$LIVING_DOCS_SPEC" 2>/dev/null || echo 0)
177
+ fi
178
+
179
+ # Check if increment is newer than living docs (or living docs doesn't exist)
180
+ if [[ "$INCREMENT_MTIME" -gt "$LIVING_DOCS_MTIME" ]]; then
181
+ # Sync needed - run sync-living-docs
182
+ PLUGIN_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
183
+ SYNC_SCRIPT="$PLUGIN_ROOT/lib/hooks/sync-living-docs.js"
184
+
185
+ if [[ -f "$SYNC_SCRIPT" ]]; then
186
+ # Run sync (capture output but don't block on errors)
187
+ if node "$SYNC_SCRIPT" "$INCREMENT_ID" >/dev/null 2>&1; then
188
+ # Success - sync completed
189
+ :
190
+ else
191
+ # Sync failed - log but continue
192
+ echo "[WARNING] Pre-flight sync failed for $INCREMENT_ID" >&2
193
+ fi
194
+ fi
195
+ fi
196
+ fi
197
+ fi
198
+ fi
199
+
200
+ # ==============================================================================
201
+ # SPEC SYNC CHECK: Detect spec.md changes and warn about sync needed
202
+ # ==============================================================================
203
+
204
+ # Check if spec.md was modified after plan.md (requires sync)
205
+ if [[ -d ".specweave/increments" ]]; then
206
+ # Find active increment
207
+ ACTIVE_INCREMENT_FOR_SYNC=$(find .specweave/increments -mindepth 1 -maxdepth 1 -type d | while read increment_dir; do
208
+ metadata="$increment_dir/metadata.json"
209
+ if [[ -f "$metadata" ]]; then
210
+ status=$(node -e "
211
+ try {
212
+ const data = JSON.parse(require('fs').readFileSync('$metadata', 'utf-8'));
213
+ if (data.status === 'active') {
214
+ console.log('$(basename "$increment_dir")');
215
+ }
216
+ } catch (e) {}
217
+ " 2>/dev/null)
218
+
219
+ if [[ -n "$status" ]]; then
220
+ echo "$status"
221
+ break
222
+ fi
223
+ fi
224
+ done)
225
+
226
+ if [[ -n "$ACTIVE_INCREMENT_FOR_SYNC" ]]; then
227
+ # Check if SpecSyncManager detects changes
228
+ if command -v node >/dev/null 2>&1 && [[ -f "dist/src/core/increment/spec-sync-manager.js" ]]; then
229
+ SYNC_CHECK=$(node -e "
230
+ try {
231
+ const { SpecSyncManager } = require('./dist/src/core/increment/spec-sync-manager.js');
232
+ const manager = new SpecSyncManager(process.cwd());
233
+ const detection = manager.detectSpecChange('$ACTIVE_INCREMENT_FOR_SYNC');
234
+
235
+ if (detection.specChanged) {
236
+ const message = manager.formatSyncMessage(detection);
237
+ console.log(JSON.stringify({ needsSync: true, message }));
238
+ } else {
239
+ console.log(JSON.stringify({ needsSync: false }));
240
+ }
241
+ } catch (e) {
242
+ console.log(JSON.stringify({ needsSync: false, error: e.message }));
243
+ }
244
+ " 2>/dev/null || echo '{"needsSync":false}')
245
+
246
+ NEEDS_SYNC=$(echo "$SYNC_CHECK" | node -e "
247
+ try {
248
+ const data = JSON.parse(require('fs').readFileSync(0, 'utf-8'));
249
+ console.log(data.needsSync || false);
250
+ } catch (e) {
251
+ console.log(false);
252
+ }
253
+ ")
254
+
255
+ if [[ "$NEEDS_SYNC" == "true" ]]; then
256
+ SYNC_MESSAGE=$(echo "$SYNC_CHECK" | node -e "
257
+ try {
258
+ const data = JSON.parse(require('fs').readFileSync(0, 'utf-8'));
259
+ console.log(data.message || '');
260
+ } catch (e) {
261
+ console.log('');
262
+ }
263
+ ")
264
+
265
+ # Show sync warning (don't block, just warn)
266
+ cat <<EOF
267
+ {
268
+ "decision": "approve",
269
+ "systemMessage": "$SYNC_MESSAGE"
270
+ }
271
+ EOF
272
+ exit 0
273
+ fi
274
+ fi
275
+ fi
276
+ fi
277
+
278
+ # ==============================================================================
279
+ # CONTEXT INJECTION: Add current increment status
280
+ # ==============================================================================
281
+
282
+ CONTEXT=""
283
+
284
+ # Find active increment
285
+ if [[ -d ".specweave/increments" ]]; then
286
+ ACTIVE_INCREMENT=$(find .specweave/increments -mindepth 1 -maxdepth 1 -type d | while read increment_dir; do
287
+ metadata="$increment_dir/metadata.json"
288
+ if [[ -f "$metadata" ]]; then
289
+ status=$(node -e "
290
+ try {
291
+ const data = JSON.parse(require('fs').readFileSync('$metadata', 'utf-8'));
292
+ if (data.status === 'active') {
293
+ console.log('$(basename "$increment_dir")');
294
+ }
295
+ } catch (e) {}
296
+ ")
297
+
298
+ if [[ -n "$status" ]]; then
299
+ echo "$status"
300
+ break
301
+ fi
302
+ fi
303
+ done)
304
+
305
+ if [[ -n "$ACTIVE_INCREMENT" ]]; then
306
+ # Simple status: parse tasks.md for completion
307
+ TASKS_FILE=".specweave/increments/$ACTIVE_INCREMENT/tasks.md"
308
+ if [[ -f "$TASKS_FILE" ]]; then
309
+ # Count tasks (headers with T-NNN format - both ### and ####)
310
+ TOTAL_TASKS=$(grep -cE '^#{3,4}\s*T-[0-9]' "$TASKS_FILE" 2>/dev/null | tr -d '\n' || echo "0")
311
+ # Count completed (various formats)
312
+ COMPLETED_TASKS=$(grep -cE '(✅ COMPLETE|\[COMPLETED\]|\[x\] Completed)' "$TASKS_FILE" 2>/dev/null | tr -d '\n' || echo "0")
313
+
314
+ # Ensure valid numbers
315
+ TOTAL_TASKS=${TOTAL_TASKS:-0}
316
+ COMPLETED_TASKS=${COMPLETED_TASKS:-0}
317
+
318
+ if [[ "$TOTAL_TASKS" -gt 0 ]] 2>/dev/null; then
319
+ PERCENTAGE=$(( COMPLETED_TASKS * 100 / TOTAL_TASKS ))
320
+ CONTEXT="✓ Active: $ACTIVE_INCREMENT ($COMPLETED_TASKS/$TOTAL_TASKS tasks, $PERCENTAGE%)"
321
+ else
322
+ CONTEXT="✓ Active: $ACTIVE_INCREMENT"
323
+ fi
324
+ else
325
+ CONTEXT="✓ Active: $ACTIVE_INCREMENT"
326
+ fi
327
+ fi
328
+ fi
329
+
330
+ # ==============================================================================
331
+ # COMMAND SUGGESTIONS: Guide users to structured workflow
332
+ # ==============================================================================
333
+
334
+ if echo "$PROMPT" | grep -qiE "(add|create|implement|build|develop)" && ! echo "$PROMPT" | grep -q "/specweave:"; then
335
+ if [[ -n "$CONTEXT" ]]; then
336
+ CONTEXT="$CONTEXT
337
+
338
+ 💡 TIP: Consider using SpecWeave commands for structured development:
339
+ - /specweave:increment \"feature name\" # Plan new increment
340
+ - /specweave:do # Execute current tasks
341
+ - /specweave:progress # Check progress"
342
+ fi
343
+ fi
344
+
345
+ # ==============================================================================
346
+ # STATUS LINE REFRESH: Ensure cache is fresh before showing context
347
+ # ==============================================================================
348
+ # Performance: ~50-100ms (acceptable for UX)
349
+ # Frequency: Every user prompt (high coverage)
350
+ # Benefit: Catches ALL edge cases (manual edits, resume, direct changes)
351
+ #
352
+ # Why here? This hook runs on EVERY user prompt, ensuring status line
353
+ # is ALWAYS up-to-date before showing context to the user.
354
+ #
355
+ # Prevents desync scenarios:
356
+ # - Manual spec.md edits (status: planning → active)
357
+ # - /specweave:resume (status: paused → active)
358
+ # - Direct metadata changes (without hook triggers)
359
+ # - File system operations bypassing hooks
360
+ #
361
+ # Background execution: Runs async, doesn't block user prompt
362
+
363
+ HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
364
+ bash "$HOOK_DIR/lib/update-status-line.sh" 2>/dev/null || true
365
+
366
+ # ==============================================================================
367
+ # OUTPUT: Approve with context or no context
368
+ # ==============================================================================
369
+
370
+ if [[ -n "$CONTEXT" ]]; then
371
+ cat <<EOF
372
+ {
373
+ "decision": "approve",
374
+ "systemMessage": "$CONTEXT"
375
+ }
376
+ EOF
377
+ else
378
+ # Just approve, no extra context
379
+ cat <<EOF
380
+ {
381
+ "decision": "approve"
382
+ }
383
+ EOF
384
+ fi
385
+
386
+ exit 0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: specweave-framework
3
- description: Expert knowledge of SpecWeave framework structure, rules, conventions, and increment lifecycle. Deep understanding of source-of-truth discipline, increment naming, hook system, and plugin architecture. Activates for: specweave rules, how does specweave work, framework structure, increment lifecycle, what is specweave, specweave conventions, specweave discipline, specweave architecture, where do files go, source of truth, increment naming, tasks.md format, spec.md structure, living docs sync, hook system, plugin architecture, how to use specweave, specweave best practices.
3
+ description: Expert knowledge of SpecWeave framework structure, rules, conventions, and increment lifecycle. Deep understanding of source-of-truth discipline, increment naming, living docs sync. Covers SpecWeave-specific hooks (post-task-completion), and increment discipline. Activates for specweave rules, increment lifecycle, source of truth, increment naming, tasks.md format, spec.md structure, living docs sync, specweave hooks, where do files go, how to use specweave, specweave best practices, specweave conventions.
4
4
  allowed-tools: Read, Grep, Glob
5
5
  ---
6
6
 
@@ -12,6 +12,29 @@ context: |
12
12
  - Optimize sync performance and rate limiting
13
13
  ---
14
14
 
15
+ ## 🚀 How to Invoke This Agent
16
+
17
+ **Subagent Type**: `specweave-ado:ado-manager:ado-manager`
18
+
19
+ **Usage Example**:
20
+
21
+ ```typescript
22
+ Task({
23
+ subagent_type: "specweave-ado:ado-manager:ado-manager",
24
+ prompt: "Your task description here",
25
+ model: "haiku" // optional: haiku, sonnet, opus
26
+ });
27
+ ```
28
+
29
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
30
+ - **Plugin**: specweave-ado
31
+ - **Directory**: ado-manager
32
+ - **YAML Name**: ado-manager
33
+
34
+ **When to Use**:
35
+ - [TODO: Describe specific use cases for this agent]
36
+ - [TODO: When should this agent be invoked instead of others?]
37
+ - [TODO: What problems does this agent solve?]
15
38
  # ADO Manager Agent
16
39
 
17
40
  **Role**: Azure DevOps Integration Specialist
@@ -5,6 +5,29 @@ tools: Read, Write, Edit, Bash, Glob
5
5
  model: claude-sonnet-4-5-20250929
6
6
  ---
7
7
 
8
+ ## 🚀 How to Invoke This Agent
9
+
10
+ **Subagent Type**: `specweave-ado:ado-multi-project-mapper:ado-multi-project-mapper`
11
+
12
+ **Usage Example**:
13
+
14
+ ```typescript
15
+ Task({
16
+ subagent_type: "specweave-ado:ado-multi-project-mapper:ado-multi-project-mapper",
17
+ prompt: "Your task description here",
18
+ model: "haiku" // optional: haiku, sonnet, opus
19
+ });
20
+ ```
21
+
22
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
23
+ - **Plugin**: specweave-ado
24
+ - **Directory**: ado-multi-project-mapper
25
+ - **YAML Name**: ado-multi-project-mapper
26
+
27
+ **When to Use**:
28
+ - [TODO: Describe specific use cases for this agent]
29
+ - [TODO: When should this agent be invoked instead of others?]
30
+ - [TODO: What problems does this agent solve?]
8
31
  # Azure DevOps Multi-Project Mapper Agent
9
32
 
10
33
  You are an expert in mapping SpecWeave specifications to multiple Azure DevOps projects with intelligent detection and coordination.
@@ -5,6 +5,29 @@ tools: Read, Grep, Bash
5
5
  model: claude-sonnet-4-5-20250929
6
6
  ---
7
7
 
8
+ ## 🚀 How to Invoke This Agent
9
+
10
+ **Subagent Type**: `specweave-ado:ado-sync-judge:ado-sync-judge`
11
+
12
+ **Usage Example**:
13
+
14
+ ```typescript
15
+ Task({
16
+ subagent_type: "specweave-ado:ado-sync-judge:ado-sync-judge",
17
+ prompt: "Your task description here",
18
+ model: "haiku" // optional: haiku, sonnet, opus
19
+ });
20
+ ```
21
+
22
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
23
+ - **Plugin**: specweave-ado
24
+ - **Directory**: ado-sync-judge
25
+ - **YAML Name**: ado-sync-judge
26
+
27
+ **When to Use**:
28
+ - [TODO: Describe specific use cases for this agent]
29
+ - [TODO: When should this agent be invoked instead of others?]
30
+ - [TODO: What problems does this agent solve?]
8
31
  # Azure DevOps Sync Judge Agent
9
32
 
10
33
  You are an expert judge for verifying the correctness of Azure DevOps synchronization with SpecWeave living docs. Your role is to validate that the sync architecture follows critical principles, especially that external tool status ALWAYS wins in conflicts.
@@ -7,6 +7,29 @@ cost_profile: planning
7
7
  fallback_behavior: strict
8
8
  ---
9
9
 
10
+ ## 🚀 How to Invoke This Agent
11
+
12
+ **Subagent Type**: `specweave-backend:database-optimizer:database-optimizer`
13
+
14
+ **Usage Example**:
15
+
16
+ ```typescript
17
+ Task({
18
+ subagent_type: "specweave-backend:database-optimizer:database-optimizer",
19
+ prompt: "Your task description here",
20
+ model: "haiku" // optional: haiku, sonnet, opus
21
+ });
22
+ ```
23
+
24
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
25
+ - **Plugin**: specweave-backend
26
+ - **Directory**: database-optimizer
27
+ - **YAML Name**: database-optimizer
28
+
29
+ **When to Use**:
30
+ - [TODO: Describe specific use cases for this agent]
31
+ - [TODO: When should this agent be invoked instead of others?]
32
+ - [TODO: What problems does this agent solve?]
10
33
  You are a database optimization expert specializing in modern performance tuning, query optimization, and scalable database architectures.
11
34
 
12
35
  ## Purpose
@@ -3,6 +3,29 @@ name: confluent-architect
3
3
  description: Confluent Cloud architecture specialist. Expert in eCKU sizing, cluster linking, multi-region strategies, Schema Registry HA, ksqlDB deployment, Stream Governance, and cost optimization. Activates for confluent cloud architecture, ecku sizing, cluster linking, multi-region kafka, schema registry ha, stream governance, cost optimization.
4
4
  ---
5
5
 
6
+ ## 🚀 How to Invoke This Agent
7
+
8
+ **Subagent Type**: `specweave-confluent:confluent-architect:confluent-architect`
9
+
10
+ **Usage Example**:
11
+
12
+ ```typescript
13
+ Task({
14
+ subagent_type: "specweave-confluent:confluent-architect:confluent-architect",
15
+ prompt: "Your task description here",
16
+ model: "haiku" // optional: haiku, sonnet, opus
17
+ });
18
+ ```
19
+
20
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
21
+ - **Plugin**: specweave-confluent
22
+ - **Directory**: confluent-architect
23
+ - **YAML Name**: confluent-architect
24
+
25
+ **When to Use**:
26
+ - [TODO: Describe specific use cases for this agent]
27
+ - [TODO: When should this agent be invoked instead of others?]
28
+ - [TODO: What problems does this agent solve?]
6
29
  # Confluent Architect Agent
7
30
 
8
31
  I'm a specialized architecture agent with deep expertise in designing scalable, reliable Confluent Cloud systems.
@@ -8,6 +8,29 @@ cost_profile: hybrid
8
8
  fallback_behavior: auto
9
9
  ---
10
10
 
11
+ ## 🚀 How to Invoke This Agent
12
+
13
+ **Subagent Type**: `specweave-diagrams:diagrams-architect:diagrams-architect`
14
+
15
+ **Usage Example**:
16
+
17
+ ```typescript
18
+ Task({
19
+ subagent_type: "specweave-diagrams:diagrams-architect:diagrams-architect",
20
+ prompt: "Your task description here",
21
+ model: "haiku" // optional: haiku, sonnet, opus
22
+ });
23
+ ```
24
+
25
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
26
+ - **Plugin**: specweave-diagrams
27
+ - **Directory**: diagrams-architect
28
+ - **YAML Name**: diagrams-architect
29
+
30
+ **When to Use**:
31
+ - [TODO: Describe specific use cases for this agent]
32
+ - [TODO: When should this agent be invoked instead of others?]
33
+ - [TODO: What problems does this agent solve?]
11
34
  # Diagrams Architect Agent
12
35
 
13
36
  You are an expert diagram architect specializing in creating production-quality Mermaid diagrams following the C4 Model and SpecWeave conventions.
@@ -42,6 +42,29 @@ GitHub issues MUST use living docs format:
42
42
 
43
43
  ---
44
44
 
45
+ ## 🚀 How to Invoke This Agent
46
+
47
+ **Subagent Type**: `specweave-github:github-manager:SpecWeave Sync`
48
+
49
+ **Usage Example**:
50
+
51
+ ```typescript
52
+ Task({
53
+ subagent_type: "specweave-github:github-manager:SpecWeave Sync",
54
+ prompt: "Your task description here",
55
+ model: "haiku" // optional: haiku, sonnet, opus
56
+ });
57
+ ```
58
+
59
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name}`
60
+ - **Plugin**: specweave-github
61
+ - **Directory**: github-manager
62
+ - **YAML Name**: SpecWeave Sync
63
+
64
+ **When to Use**:
65
+ - [TODO: Describe specific use cases for this agent]
66
+ - [TODO: When should this agent be invoked instead of others?]
67
+ - [TODO: What problems does this agent solve?]
45
68
  ## Capabilities
46
69
 
47
70
  As the GitHub Manager agent, I specialize in:
@@ -2,6 +2,31 @@
2
2
 
3
3
  Expert agent for splitting SpecWeave tasks across multiple GitHub repositories based on architecture patterns.
4
4
 
5
+ ## 🚀 How to Invoke This Agent
6
+
7
+ **Subagent Type**: `specweave-github:github-task-splitter:github-task-splitter`
8
+
9
+ **Usage Example**:
10
+
11
+ ```typescript
12
+ Task({
13
+ subagent_type: "specweave-github:github-task-splitter:github-task-splitter",
14
+ prompt: "Split tasks for increment 0015-shopping-cart across frontend, backend, and shared repositories",
15
+ model: "haiku" // optional: haiku, sonnet, opus
16
+ });
17
+ ```
18
+
19
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
20
+ - **Plugin**: specweave-github
21
+ - **Directory**: github-task-splitter
22
+ - **Agent Name**: github-task-splitter
23
+
24
+ **When to Use**:
25
+ - You need to distribute SpecWeave tasks across multiple GitHub repositories based on technology stack
26
+ - You want to analyze task dependencies across different services
27
+ - You need to create tracking issues in multiple repositories for a single increment
28
+ - You're managing a multi-repo architecture (monorepo, microservices, etc.) and need intelligent task distribution
29
+
5
30
  ## Role
6
31
  I analyze SpecWeave increments and intelligently distribute tasks across multiple repositories based on:
7
32
  - Repository architecture (single, multi-repo, monorepo, parent)
@@ -7,6 +7,31 @@ description: Updates GitHub issues for user stories with proper ACs and tasks. A
7
7
 
8
8
  **Role**: Updates GitHub issues for individual user stories to include checkable acceptance criteria and task connections.
9
9
 
10
+ ## 🚀 How to Invoke This Agent
11
+
12
+ **Subagent Type**: `specweave-github:user-story-updater:user-story-updater`
13
+
14
+ **Usage Example**:
15
+
16
+ ```typescript
17
+ Task({
18
+ subagent_type: "specweave-github:user-story-updater:user-story-updater",
19
+ prompt: "Update GitHub issue #501 for user story FS-031/US-004 with checkable ACs and task connections",
20
+ model: "haiku" // optional: haiku, sonnet, opus
21
+ });
22
+ ```
23
+
24
+ **Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
25
+ - **Plugin**: specweave-github
26
+ - **Directory**: user-story-updater
27
+ - **Agent Name**: user-story-updater
28
+
29
+ **When to Use**:
30
+ - You need to sync user story details from SpecWeave to GitHub issues
31
+ - You want to add checkable acceptance criteria checkboxes to GitHub issues
32
+ - You need to link tasks in SpecWeave tasks.md to GitHub issues
33
+ - You're updating GitHub issue content with the latest user story information and progress
34
+
10
35
  **Activates For**:
11
36
  - "Update user story issue"
12
37
  - "Fix GitHub issue format for US-004"