awesome-slash 2.4.2

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 (95) hide show
  1. package/.claude-plugin/marketplace.json +54 -0
  2. package/.claude-plugin/plugin.json +11 -0
  3. package/.mcp.json +8 -0
  4. package/CHANGELOG.md +261 -0
  5. package/LICENSE +21 -0
  6. package/README.md +363 -0
  7. package/SECURITY.md +101 -0
  8. package/adapters/README.md +256 -0
  9. package/adapters/codex/README.md +272 -0
  10. package/adapters/codex/install.sh +179 -0
  11. package/adapters/opencode/README.md +301 -0
  12. package/adapters/opencode/install.sh +223 -0
  13. package/lib/patterns/review-patterns.js +511 -0
  14. package/lib/patterns/slop-patterns.js +647 -0
  15. package/lib/platform/detect-platform.js +535 -0
  16. package/lib/platform/verify-tools.js +235 -0
  17. package/lib/state/workflow-state.js +635 -0
  18. package/lib/state/workflow-state.schema.json +282 -0
  19. package/lib/utils/context-optimizer.js +227 -0
  20. package/mcp-server/index.js +303 -0
  21. package/mcp-server/package.json +23 -0
  22. package/package.json +63 -0
  23. package/plugins/deslop-around/.claude-plugin/plugin.json +20 -0
  24. package/plugins/deslop-around/commands/deslop-around.md +220 -0
  25. package/plugins/deslop-around/lib/patterns/review-patterns.js +511 -0
  26. package/plugins/deslop-around/lib/patterns/slop-patterns.js +641 -0
  27. package/plugins/deslop-around/lib/platform/detect-platform.js +514 -0
  28. package/plugins/deslop-around/lib/platform/verify-tools.js +235 -0
  29. package/plugins/deslop-around/lib/state/workflow-state.js +635 -0
  30. package/plugins/deslop-around/lib/state/workflow-state.schema.json +282 -0
  31. package/plugins/deslop-around/lib/utils/context-optimizer.js +222 -0
  32. package/plugins/next-task/.claude-plugin/plugin.json +24 -0
  33. package/plugins/next-task/agents/ci-fixer.md +236 -0
  34. package/plugins/next-task/agents/ci-monitor.md +291 -0
  35. package/plugins/next-task/agents/delivery-validator.md +451 -0
  36. package/plugins/next-task/agents/deslop-work.md +272 -0
  37. package/plugins/next-task/agents/docs-updater.md +506 -0
  38. package/plugins/next-task/agents/exploration-agent.md +277 -0
  39. package/plugins/next-task/agents/implementation-agent.md +427 -0
  40. package/plugins/next-task/agents/planning-agent.md +236 -0
  41. package/plugins/next-task/agents/policy-selector.md +248 -0
  42. package/plugins/next-task/agents/review-orchestrator.md +521 -0
  43. package/plugins/next-task/agents/simple-fixer.md +136 -0
  44. package/plugins/next-task/agents/task-discoverer.md +357 -0
  45. package/plugins/next-task/agents/test-coverage-checker.md +447 -0
  46. package/plugins/next-task/agents/worktree-manager.md +419 -0
  47. package/plugins/next-task/commands/delivery-approval.md +331 -0
  48. package/plugins/next-task/commands/next-task.md +627 -0
  49. package/plugins/next-task/commands/update-docs-around.md +418 -0
  50. package/plugins/next-task/hooks/hooks.json +14 -0
  51. package/plugins/next-task/lib/patterns/review-patterns.js +511 -0
  52. package/plugins/next-task/lib/patterns/slop-patterns.js +641 -0
  53. package/plugins/next-task/lib/platform/detect-platform.js +514 -0
  54. package/plugins/next-task/lib/platform/verify-tools.js +235 -0
  55. package/plugins/next-task/lib/state/tasks-registry.schema.json +85 -0
  56. package/plugins/next-task/lib/state/workflow-state.js +635 -0
  57. package/plugins/next-task/lib/state/workflow-state.schema.json +282 -0
  58. package/plugins/next-task/lib/state/worktree-status.schema.json +219 -0
  59. package/plugins/next-task/lib/utils/context-optimizer.js +222 -0
  60. package/plugins/project-review/.claude-plugin/plugin.json +20 -0
  61. package/plugins/project-review/commands/project-review-agents.md +286 -0
  62. package/plugins/project-review/commands/project-review-github.md +142 -0
  63. package/plugins/project-review/commands/project-review.md +273 -0
  64. package/plugins/project-review/lib/patterns/review-patterns.js +511 -0
  65. package/plugins/project-review/lib/patterns/slop-patterns.js +641 -0
  66. package/plugins/project-review/lib/platform/detect-platform.js +514 -0
  67. package/plugins/project-review/lib/platform/verify-tools.js +235 -0
  68. package/plugins/project-review/lib/state/workflow-state.js +635 -0
  69. package/plugins/project-review/lib/state/workflow-state.schema.json +282 -0
  70. package/plugins/project-review/lib/utils/context-optimizer.js +222 -0
  71. package/plugins/reality-check/.claude-plugin/plugin.json +23 -0
  72. package/plugins/reality-check/README.md +156 -0
  73. package/plugins/reality-check/agents/code-explorer.md +353 -0
  74. package/plugins/reality-check/agents/doc-analyzer.md +337 -0
  75. package/plugins/reality-check/agents/issue-scanner.md +231 -0
  76. package/plugins/reality-check/agents/plan-synthesizer.md +479 -0
  77. package/plugins/reality-check/commands/scan.md +242 -0
  78. package/plugins/reality-check/commands/set.md +203 -0
  79. package/plugins/reality-check/lib/state/reality-check-state.js +509 -0
  80. package/plugins/reality-check/skills/reality-analysis/SKILL.md +317 -0
  81. package/plugins/ship/.claude-plugin/plugin.json +21 -0
  82. package/plugins/ship/commands/ship-ci-review-loop.md +443 -0
  83. package/plugins/ship/commands/ship-deployment.md +330 -0
  84. package/plugins/ship/commands/ship-error-handling.md +254 -0
  85. package/plugins/ship/commands/ship.md +370 -0
  86. package/plugins/ship/lib/patterns/review-patterns.js +511 -0
  87. package/plugins/ship/lib/patterns/slop-patterns.js +641 -0
  88. package/plugins/ship/lib/platform/detect-platform.js +514 -0
  89. package/plugins/ship/lib/platform/verify-tools.js +235 -0
  90. package/plugins/ship/lib/state/workflow-state.js +635 -0
  91. package/plugins/ship/lib/state/workflow-state.schema.json +282 -0
  92. package/plugins/ship/lib/utils/context-optimizer.js +222 -0
  93. package/scripts/install/claude.sh +50 -0
  94. package/scripts/install/codex.sh +181 -0
  95. package/scripts/install/opencode.sh +211 -0
@@ -0,0 +1,331 @@
1
+ ---
2
+ description: Validate task completion and approve for shipping. Can be used standalone or called by the workflow. Runs autonomous validation checks.
3
+ argument-hint: "[--task-id ID] [--verbose]"
4
+ allowed-tools: Bash(git:*), Bash(npm:*), Read, Grep, Glob
5
+ model: sonnet
6
+ ---
7
+
8
+ # /delivery-approval - Delivery Validation
9
+
10
+ Validate that the current work is complete and ready to ship.
11
+ This command runs the same validation as the workflow's delivery-validator agent.
12
+
13
+ ## Arguments
14
+
15
+ - `--task-id ID`: Specify task ID to validate against (default: from workflow state)
16
+ - `--verbose`: Show detailed output for each check
17
+
18
+ ## Parse Arguments
19
+
20
+ ```javascript
21
+ const args = $ARGUMENTS.split(' ').filter(Boolean);
22
+ const verbose = args.includes('--verbose');
23
+ const taskIdArg = args.find(a => a.startsWith('--task-id'));
24
+ const taskId = taskIdArg ? args[args.indexOf(taskIdArg) + 1] : null;
25
+ ```
26
+
27
+ ## Phase 1: Get Context
28
+
29
+ ```javascript
30
+ const workflowState = require('${CLAUDE_PLUGIN_ROOT}/lib/state/workflow-state.js');
31
+
32
+ let task;
33
+ let changedFiles;
34
+
35
+ // Try to get from workflow state first
36
+ const state = workflowState.readState();
37
+ if (state?.task) {
38
+ task = state.task;
39
+ } else if (taskId) {
40
+ // Fetch task from GitHub
41
+ task = await fetchGitHubIssue(taskId);
42
+ } else {
43
+ // Get from recent commit message
44
+ task = await inferTaskFromCommits();
45
+ }
46
+
47
+ // Get changed files
48
+ changedFiles = (await exec('git diff --name-only origin/main..HEAD')).split('\n').filter(Boolean);
49
+ ```
50
+
51
+ ## Phase 2: Run Validation Checks
52
+
53
+ ### Check 1: Git State
54
+
55
+ ```bash
56
+ # Check for uncommitted changes
57
+ UNCOMMITTED=$(git status --porcelain)
58
+ if [ -n "$UNCOMMITTED" ]; then
59
+ echo "UNCOMMITTED_CHANGES=true"
60
+ echo "$UNCOMMITTED"
61
+ fi
62
+
63
+ # Check if ahead of remote
64
+ AHEAD=$(git rev-list --count origin/main..HEAD)
65
+ echo "COMMITS_AHEAD=$AHEAD"
66
+
67
+ # Check branch name
68
+ BRANCH=$(git branch --show-current)
69
+ echo "BRANCH=$BRANCH"
70
+ ```
71
+
72
+ ### Check 2: Tests Pass
73
+
74
+ ```bash
75
+ # Detect and run tests
76
+ if [ -f "package.json" ]; then
77
+ if grep -q '"test"' package.json; then
78
+ echo "Running npm test..."
79
+ npm test 2>&1
80
+ TEST_RESULT=$?
81
+ echo "TEST_RESULT=$TEST_RESULT"
82
+ else
83
+ echo "NO_TEST_SCRIPT=true"
84
+ fi
85
+ elif [ -f "pytest.ini" ] || [ -f "pyproject.toml" ]; then
86
+ echo "Running pytest..."
87
+ pytest -v 2>&1
88
+ TEST_RESULT=$?
89
+ echo "TEST_RESULT=$TEST_RESULT"
90
+ elif [ -f "Cargo.toml" ]; then
91
+ echo "Running cargo test..."
92
+ cargo test 2>&1
93
+ TEST_RESULT=$?
94
+ echo "TEST_RESULT=$TEST_RESULT"
95
+ elif [ -f "go.mod" ]; then
96
+ echo "Running go test..."
97
+ go test ./... -v 2>&1
98
+ TEST_RESULT=$?
99
+ echo "TEST_RESULT=$TEST_RESULT"
100
+ fi
101
+ ```
102
+
103
+ ### Check 3: Build Passes
104
+
105
+ ```bash
106
+ # Detect and run build
107
+ if [ -f "package.json" ] && grep -q '"build"' package.json; then
108
+ echo "Running npm run build..."
109
+ npm run build 2>&1
110
+ BUILD_RESULT=$?
111
+ echo "BUILD_RESULT=$BUILD_RESULT"
112
+ elif [ -f "Cargo.toml" ]; then
113
+ echo "Running cargo build..."
114
+ cargo build --release 2>&1
115
+ BUILD_RESULT=$?
116
+ echo "BUILD_RESULT=$BUILD_RESULT"
117
+ elif [ -f "go.mod" ]; then
118
+ echo "Running go build..."
119
+ go build ./... 2>&1
120
+ BUILD_RESULT=$?
121
+ echo "BUILD_RESULT=$BUILD_RESULT"
122
+ else
123
+ echo "NO_BUILD_SCRIPT=true"
124
+ BUILD_RESULT=0
125
+ fi
126
+ ```
127
+
128
+ ### Check 4: Lint Passes
129
+
130
+ ```bash
131
+ # Run linter if available
132
+ if [ -f "package.json" ] && grep -q '"lint"' package.json; then
133
+ echo "Running npm run lint..."
134
+ npm run lint 2>&1
135
+ LINT_RESULT=$?
136
+ echo "LINT_RESULT=$LINT_RESULT"
137
+ elif [ -f ".eslintrc.js" ] || [ -f ".eslintrc.json" ]; then
138
+ echo "Running eslint..."
139
+ npx eslint . 2>&1
140
+ LINT_RESULT=$?
141
+ echo "LINT_RESULT=$LINT_RESULT"
142
+ else
143
+ echo "NO_LINTER=true"
144
+ LINT_RESULT=0
145
+ fi
146
+ ```
147
+
148
+ ### Check 5: Type Check (TypeScript)
149
+
150
+ ```bash
151
+ if [ -f "tsconfig.json" ]; then
152
+ echo "Running tsc --noEmit..."
153
+ npx tsc --noEmit 2>&1
154
+ TYPE_RESULT=$?
155
+ echo "TYPE_RESULT=$TYPE_RESULT"
156
+ else
157
+ echo "NO_TYPESCRIPT=true"
158
+ TYPE_RESULT=0
159
+ fi
160
+ ```
161
+
162
+ ## Phase 3: Check Task Requirements
163
+
164
+ ```javascript
165
+ async function checkRequirements(task, changedFiles) {
166
+ if (!task) {
167
+ return { passed: true, reason: 'No task specified, skipping requirements check' };
168
+ }
169
+
170
+ const requirements = extractRequirements(task.description || task.body || '');
171
+
172
+ if (requirements.length === 0) {
173
+ return { passed: true, reason: 'No specific requirements found in task' };
174
+ }
175
+
176
+ // Analyze changed files for each requirement
177
+ const results = [];
178
+ for (const req of requirements) {
179
+ const evidence = await findEvidence(req, changedFiles);
180
+ results.push({
181
+ requirement: req,
182
+ implemented: evidence.found,
183
+ evidence: evidence.details
184
+ });
185
+ }
186
+
187
+ const allMet = results.every(r => r.implemented);
188
+ return {
189
+ passed: allMet,
190
+ results,
191
+ reason: allMet ? 'All requirements met' : 'Some requirements not implemented'
192
+ };
193
+ }
194
+ ```
195
+
196
+ ## Phase 4: Aggregate Results
197
+
198
+ ```javascript
199
+ const checks = {
200
+ gitState: {
201
+ passed: !UNCOMMITTED_CHANGES,
202
+ uncommitted: UNCOMMITTED_CHANGES,
203
+ commitsAhead: COMMITS_AHEAD,
204
+ branch: BRANCH
205
+ },
206
+ tests: {
207
+ passed: TEST_RESULT === 0,
208
+ exitCode: TEST_RESULT
209
+ },
210
+ build: {
211
+ passed: BUILD_RESULT === 0,
212
+ exitCode: BUILD_RESULT
213
+ },
214
+ lint: {
215
+ passed: LINT_RESULT === 0,
216
+ exitCode: LINT_RESULT
217
+ },
218
+ typeCheck: {
219
+ passed: TYPE_RESULT === 0,
220
+ exitCode: TYPE_RESULT
221
+ },
222
+ requirements: await checkRequirements(task, changedFiles)
223
+ };
224
+
225
+ const allPassed = Object.values(checks).every(c => c.passed);
226
+ const failedChecks = Object.entries(checks)
227
+ .filter(([_, v]) => !v.passed)
228
+ .map(([k, _]) => k);
229
+ ```
230
+
231
+ ## Phase 5: Output Results
232
+
233
+ ### Summary Report
234
+
235
+ ```markdown
236
+ ## Delivery Validation Report
237
+
238
+ **Task**: ${task?.title || 'N/A'}
239
+ **Branch**: ${BRANCH}
240
+ **Commits ahead of main**: ${COMMITS_AHEAD}
241
+
242
+ ### Validation Results
243
+
244
+ | Check | Status | Details |
245
+ |-------|--------|---------|
246
+ | Git State | ${checks.gitState.passed ? '✓' : '✗'} | ${checks.gitState.uncommitted ? 'Uncommitted changes' : 'Clean'} |
247
+ | Tests | ${checks.tests.passed ? '✓' : '✗'} | Exit code: ${checks.tests.exitCode} |
248
+ | Build | ${checks.build.passed ? '✓' : '✗'} | Exit code: ${checks.build.exitCode} |
249
+ | Lint | ${checks.lint.passed ? '✓' : '✗'} | Exit code: ${checks.lint.exitCode} |
250
+ | Type Check | ${checks.typeCheck.passed ? '✓' : '✗'} | Exit code: ${checks.typeCheck.exitCode} |
251
+ | Requirements | ${checks.requirements.passed ? '✓' : '✗'} | ${checks.requirements.reason} |
252
+
253
+ ### Overall Status
254
+
255
+ ${allPassed ?
256
+ '## ✓ APPROVED\nAll validation checks passed. Ready to ship!' :
257
+ `## ✗ NOT APPROVED\nFailed checks: ${failedChecks.join(', ')}`}
258
+
259
+ ${!allPassed ? `
260
+ ### Fix Required
261
+
262
+ ${failedChecks.map(check => {
263
+ switch(check) {
264
+ case 'gitState': return '- Commit or stash uncommitted changes';
265
+ case 'tests': return '- Fix failing tests';
266
+ case 'build': return '- Fix build errors';
267
+ case 'lint': return '- Fix linting errors';
268
+ case 'typeCheck': return '- Fix TypeScript errors';
269
+ case 'requirements': return '- Implement missing requirements';
270
+ }
271
+ }).join('\n')}
272
+ ` : ''}
273
+ ```
274
+
275
+ ### JSON Output (for scripting)
276
+
277
+ ```json
278
+ {
279
+ "approved": ${allPassed},
280
+ "task": {
281
+ "id": "${task?.id || 'N/A'}",
282
+ "title": "${task?.title || 'N/A'}"
283
+ },
284
+ "checks": {
285
+ "gitState": ${JSON.stringify(checks.gitState)},
286
+ "tests": ${JSON.stringify(checks.tests)},
287
+ "build": ${JSON.stringify(checks.build)},
288
+ "lint": ${JSON.stringify(checks.lint)},
289
+ "typeCheck": ${JSON.stringify(checks.typeCheck)},
290
+ "requirements": ${JSON.stringify(checks.requirements)}
291
+ },
292
+ "failedChecks": ${JSON.stringify(failedChecks)},
293
+ "summary": "${allPassed ? 'All checks passed' : `Failed: ${failedChecks.join(', ')}`}"
294
+ }
295
+ ```
296
+
297
+ ## Examples
298
+
299
+ ```bash
300
+ # Basic validation
301
+ /delivery-approval
302
+
303
+ # With verbose output
304
+ /delivery-approval --verbose
305
+
306
+ # For specific task
307
+ /delivery-approval --task-id 142
308
+
309
+ # Combined
310
+ /delivery-approval --task-id 142 --verbose
311
+ ```
312
+
313
+ ## Integration with Workflow
314
+
315
+ When called from the next-task workflow:
316
+ 1. Task context is read from workflow state
317
+ 2. Results are written back to workflow state
318
+ 3. Workflow continues to ship phase if approved
319
+
320
+ When called standalone:
321
+ 1. Attempts to infer task from commits
322
+ 2. Runs all validation checks
323
+ 3. Reports results but doesn't modify workflow state
324
+
325
+ ## Success Criteria
326
+
327
+ - Runs all validation checks (tests, build, lint, types)
328
+ - Checks task requirements if available
329
+ - Provides clear pass/fail determination
330
+ - Shows actionable fixes for failures
331
+ - Works both standalone and in workflow context