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,418 @@
1
+ ---
2
+ description: Sync documentation with actual code state across entire repository. Compares docs with actual code, exports, APIs and fixes discrepancies.
3
+ argument-hint: "[path] [--apply] [--report-only]"
4
+ allowed-tools: Bash(git:*), Read, Write, Edit, Grep, Glob
5
+ model: sonnet
6
+ ---
7
+
8
+ # /update-docs-around - Documentation Sync
9
+
10
+ Compare documentation with actual code state and fix discrepancies.
11
+ This is a standalone command (not part of workflow) that scans the entire repo.
12
+
13
+ ## Arguments
14
+
15
+ - `[path]`: Specific path to check (default: entire repo)
16
+ - `--apply`: Apply fixes (default: report only)
17
+ - `--report-only`: Only report issues, don't fix
18
+
19
+ ## Parse Arguments
20
+
21
+ ```javascript
22
+ const args = $ARGUMENTS.split(' ').filter(Boolean);
23
+ const applyMode = args.includes('--apply');
24
+ const reportOnly = args.includes('--report-only') || !applyMode;
25
+ const targetPath = args.find(a => !a.startsWith('--')) || '.';
26
+ ```
27
+
28
+ ## Phase 1: Find All Documentation Files
29
+
30
+ ```bash
31
+ # Find all markdown files
32
+ DOC_FILES=$(find ${targetPath} -name "*.md" -type f | grep -v node_modules | grep -v .git)
33
+
34
+ # Categorize docs
35
+ README_FILES=$(echo "$DOC_FILES" | grep -i readme)
36
+ API_DOCS=$(echo "$DOC_FILES" | grep -E '(api|reference)')
37
+ GUIDES=$(echo "$DOC_FILES" | grep -E '(guide|tutorial|getting-started)')
38
+ CHANGELOG=$(echo "$DOC_FILES" | grep -i changelog)
39
+
40
+ echo "Total docs: $(echo "$DOC_FILES" | wc -l)"
41
+ echo "READMEs: $(echo "$README_FILES" | wc -l)"
42
+ echo "API docs: $(echo "$API_DOCS" | wc -l)"
43
+ ```
44
+
45
+ ## Phase 2: Extract Code References from Docs
46
+
47
+ For each doc file, extract:
48
+ - Import statements in code blocks
49
+ - Function/class references
50
+ - File path references
51
+ - URL references
52
+
53
+ ```javascript
54
+ async function extractCodeReferences(docFile) {
55
+ const content = await readFile(docFile);
56
+ const references = [];
57
+
58
+ // Extract code blocks
59
+ const codeBlocks = content.match(/```[\w]*\n[\s\S]*?```/g) || [];
60
+
61
+ for (const block of codeBlocks) {
62
+ // Extract imports
63
+ const imports = block.match(/import .* from ['"]([^'"]+)['"]/g);
64
+ if (imports) {
65
+ references.push(...imports.map(i => ({
66
+ type: 'import',
67
+ value: i.match(/from ['"]([^'"]+)['"]/)[1],
68
+ block
69
+ })));
70
+ }
71
+
72
+ // Extract require statements
73
+ const requires = block.match(/require\(['"]([^'"]+)['"]\)/g);
74
+ if (requires) {
75
+ references.push(...requires.map(r => ({
76
+ type: 'require',
77
+ value: r.match(/\(['"]([^'"]+)['"]\)/)[1],
78
+ block
79
+ })));
80
+ }
81
+
82
+ // Extract function calls
83
+ const functionCalls = block.match(/\b([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g);
84
+ if (functionCalls) {
85
+ references.push(...functionCalls.map(f => ({
86
+ type: 'function',
87
+ value: f.replace(/\s*\($/, ''),
88
+ block
89
+ })));
90
+ }
91
+ }
92
+
93
+ // Extract inline code references
94
+ const inlineCode = content.match(/`[^`]+`/g) || [];
95
+ for (const code of inlineCode) {
96
+ const value = code.replace(/`/g, '');
97
+ if (value.includes('/') || value.includes('.')) {
98
+ references.push({ type: 'path', value, inline: true });
99
+ }
100
+ }
101
+
102
+ return references;
103
+ }
104
+ ```
105
+
106
+ ## Phase 3: Verify References Against Codebase
107
+
108
+ ```javascript
109
+ async function verifyReferences(references) {
110
+ const issues = [];
111
+
112
+ for (const ref of references) {
113
+ let exists = false;
114
+ let suggestion = null;
115
+
116
+ switch (ref.type) {
117
+ case 'import':
118
+ case 'require':
119
+ case 'path':
120
+ // Check if file/module exists
121
+ const resolved = resolveImportPath(ref.value);
122
+ exists = await fileExists(resolved);
123
+
124
+ if (!exists) {
125
+ // Try to find similar file
126
+ const similar = await findSimilarFile(ref.value);
127
+ suggestion = similar ? `Did you mean: ${similar}` : null;
128
+ }
129
+ break;
130
+
131
+ case 'function':
132
+ // Check if function exists in exports
133
+ exists = await functionExistsInProject(ref.value);
134
+
135
+ if (!exists) {
136
+ // Try to find renamed function
137
+ const renamed = await findRenamedFunction(ref.value);
138
+ suggestion = renamed ? `Function may have been renamed to: ${renamed}` : null;
139
+ }
140
+ break;
141
+ }
142
+
143
+ if (!exists) {
144
+ issues.push({
145
+ type: 'outdated-reference',
146
+ reference: ref,
147
+ suggestion
148
+ });
149
+ }
150
+ }
151
+
152
+ return issues;
153
+ }
154
+ ```
155
+
156
+ ## Phase 4: Check Code Examples
157
+
158
+ Verify code examples are syntactically valid and runnable:
159
+
160
+ ```javascript
161
+ async function checkCodeExamples(docFile) {
162
+ const content = await readFile(docFile);
163
+ const issues = [];
164
+
165
+ const codeBlocks = content.match(/```(\w+)\n([\s\S]*?)```/g) || [];
166
+
167
+ for (const block of codeBlocks) {
168
+ const [, lang, code] = block.match(/```(\w+)\n([\s\S]*?)```/);
169
+
170
+ if (lang === 'javascript' || lang === 'js' || lang === 'typescript' || lang === 'ts') {
171
+ // Check for syntax errors
172
+ try {
173
+ // Basic syntax check
174
+ new Function(code.replace(/import|export/g, '//'));
175
+ } catch (e) {
176
+ issues.push({
177
+ type: 'invalid-syntax',
178
+ docFile,
179
+ lang,
180
+ error: e.message,
181
+ code: code.substring(0, 100)
182
+ });
183
+ }
184
+ }
185
+ }
186
+
187
+ return issues;
188
+ }
189
+ ```
190
+
191
+ ## Phase 5: Check README Accuracy
192
+
193
+ ```javascript
194
+ async function checkReadmeAccuracy() {
195
+ const issues = [];
196
+ const readme = await readFile('README.md');
197
+
198
+ // Check if installation instructions work
199
+ const installMatch = readme.match(/npm install ([^\n`]+)/);
200
+ if (installMatch) {
201
+ const pkg = await readFile('package.json');
202
+ const pkgJson = JSON.parse(pkg);
203
+ if (!pkgJson.name === installMatch[1]) {
204
+ issues.push({
205
+ type: 'wrong-package-name',
206
+ expected: pkgJson.name,
207
+ found: installMatch[1]
208
+ });
209
+ }
210
+ }
211
+
212
+ // Check version numbers
213
+ const versionMatch = readme.match(/version[^\d]*(\d+\.\d+\.\d+)/i);
214
+ if (versionMatch) {
215
+ const pkg = await readFile('package.json');
216
+ const pkgJson = JSON.parse(pkg);
217
+ if (pkgJson.version !== versionMatch[1]) {
218
+ issues.push({
219
+ type: 'outdated-version',
220
+ docsVersion: versionMatch[1],
221
+ actualVersion: pkgJson.version
222
+ });
223
+ }
224
+ }
225
+
226
+ // Check if exports mentioned in docs exist
227
+ const exportMentions = readme.match(/\{([^}]+)\}/g) || [];
228
+ for (const mention of exportMentions) {
229
+ const exports = mention.replace(/[{}]/g, '').split(',').map(e => e.trim());
230
+ for (const exp of exports) {
231
+ if (!await exportExistsInProject(exp)) {
232
+ issues.push({
233
+ type: 'missing-export',
234
+ export: exp
235
+ });
236
+ }
237
+ }
238
+ }
239
+
240
+ return issues;
241
+ }
242
+ ```
243
+
244
+ ## Phase 6: Check CHANGELOG
245
+
246
+ ```javascript
247
+ async function checkChangelog() {
248
+ const issues = [];
249
+
250
+ if (!await fileExists('CHANGELOG.md')) {
251
+ issues.push({ type: 'missing-changelog' });
252
+ return issues;
253
+ }
254
+
255
+ const changelog = await readFile('CHANGELOG.md');
256
+
257
+ // Check for recent commits not in changelog
258
+ const recentCommits = await exec('git log --oneline -20');
259
+ const commits = recentCommits.split('\n').filter(Boolean);
260
+
261
+ for (const commit of commits) {
262
+ const [hash, ...msgParts] = commit.split(' ');
263
+ const msg = msgParts.join(' ');
264
+
265
+ // Skip merge commits and chore commits
266
+ if (msg.startsWith('Merge') || msg.startsWith('chore')) continue;
267
+
268
+ // Check if commit is mentioned
269
+ if (!changelog.includes(hash) && !changelog.includes(msg.substring(0, 30))) {
270
+ issues.push({
271
+ type: 'missing-commit-entry',
272
+ commit: { hash, msg }
273
+ });
274
+ }
275
+ }
276
+
277
+ return issues;
278
+ }
279
+ ```
280
+
281
+ ## Phase 7: Apply Fixes (if --apply)
282
+
283
+ ```javascript
284
+ async function applyFixes(issues) {
285
+ if (reportOnly) {
286
+ console.log('Report-only mode, not applying fixes');
287
+ return { applied: [], skipped: issues };
288
+ }
289
+
290
+ const applied = [];
291
+ const skipped = [];
292
+
293
+ for (const issue of issues) {
294
+ switch (issue.type) {
295
+ case 'outdated-reference':
296
+ if (issue.suggestion) {
297
+ // Apply the suggested fix
298
+ const oldPath = issue.reference.value;
299
+ const newPath = issue.suggestion.replace('Did you mean: ', '');
300
+ await editFile(issue.docFile, oldPath, newPath);
301
+ applied.push({ ...issue, fixed: true });
302
+ } else {
303
+ skipped.push(issue);
304
+ }
305
+ break;
306
+
307
+ case 'outdated-version':
308
+ // Update version in docs
309
+ await editFile('README.md', issue.docsVersion, issue.actualVersion);
310
+ applied.push({ ...issue, fixed: true });
311
+ break;
312
+
313
+ default:
314
+ skipped.push(issue);
315
+ }
316
+ }
317
+
318
+ return { applied, skipped };
319
+ }
320
+ ```
321
+
322
+ ## Output Report
323
+
324
+ ```markdown
325
+ ## Documentation Sync Report
326
+
327
+ **Mode**: ${applyMode ? 'Apply Fixes' : 'Report Only'}
328
+ **Scope**: ${targetPath === '.' ? 'Entire repository' : targetPath}
329
+ **Files Analyzed**: ${docFiles.length}
330
+
331
+ ### Summary
332
+ | Category | Issues Found | Fixed |
333
+ |----------|--------------|-------|
334
+ | Outdated References | ${outdatedRefs.length} | ${fixed.filter(f => f.type === 'outdated-reference').length} |
335
+ | Invalid Syntax | ${syntaxErrors.length} | 0 |
336
+ | Missing Changelog Entries | ${missingChangelog.length} | 0 |
337
+ | Version Mismatch | ${versionIssues.length} | ${fixed.filter(f => f.type === 'outdated-version').length} |
338
+
339
+ ### Outdated References (${outdatedRefs.length} found)
340
+ ${outdatedRefs.map(i => `
341
+ - **${i.docFile}**
342
+ - Reference: \`${i.reference.value}\`
343
+ - ${i.suggestion || 'No suggestion available'}
344
+ - ${i.fixed ? '✓ Fixed' : '⚠️ Manual fix required'}
345
+ `).join('\n')}
346
+
347
+ ### Invalid Code Examples (${syntaxErrors.length} found)
348
+ ${syntaxErrors.map(i => `
349
+ - **${i.docFile}** (${i.lang})
350
+ - Error: ${i.error}
351
+ - Code: \`${i.code}...\`
352
+ `).join('\n')}
353
+
354
+ ### Missing Changelog Entries (${missingChangelog.length} found)
355
+ ${missingChangelog.map(i => `
356
+ - ${i.commit.hash}: ${i.commit.msg}
357
+ `).join('\n')}
358
+
359
+ ### Recommendations
360
+ ${recommendations.map(r => `- ${r}`).join('\n')}
361
+ ```
362
+
363
+ ## Output Format (JSON)
364
+
365
+ ```json
366
+ {
367
+ "mode": "report-only",
368
+ "scope": ".",
369
+ "filesAnalyzed": 15,
370
+ "issues": {
371
+ "total": 12,
372
+ "outdatedReferences": 5,
373
+ "syntaxErrors": 2,
374
+ "missingChangelog": 3,
375
+ "versionMismatch": 1,
376
+ "missingExports": 1
377
+ },
378
+ "fixed": 0,
379
+ "details": [
380
+ {
381
+ "file": "README.md",
382
+ "line": 45,
383
+ "type": "outdated-reference",
384
+ "reference": "import { oldFunction }",
385
+ "suggestion": "Function renamed to newFunction"
386
+ }
387
+ ],
388
+ "recommendations": [
389
+ "Update README.md with current version",
390
+ "Add changelog entry for recent commits"
391
+ ]
392
+ }
393
+ ```
394
+
395
+ ## Examples
396
+
397
+ ```bash
398
+ # Report-only mode (default)
399
+ /update-docs-around
400
+
401
+ # Apply fixes
402
+ /update-docs-around --apply
403
+
404
+ # Check specific directory
405
+ /update-docs-around docs/ --report-only
406
+
407
+ # Apply fixes to specific path
408
+ /update-docs-around docs/api --apply
409
+ ```
410
+
411
+ ## Success Criteria
412
+
413
+ - Scans all documentation files
414
+ - Identifies outdated references to code
415
+ - Validates code examples for syntax errors
416
+ - Checks CHANGELOG for missing entries
417
+ - Provides clear, actionable report
418
+ - Applies safe fixes when --apply is used
@@ -0,0 +1,14 @@
1
+ {
2
+ "hooks": {
3
+ "SubagentStop": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "prompt",
8
+ "prompt": "## WORKFLOW ENFORCEMENT - SubagentStop Hook\n\nA subagent has completed. You MUST determine and execute the next workflow phase.\n\n### Check Workflow State\n\n```javascript\nconst state = workflowState.readState();\nconst completedAgent = state.phases.current;\nconst agentResult = // from the subagent output\n```\n\n### Decision Tree (MUST FOLLOW)\n\n1. **If implementation-agent completed**:\n - MUST run deslop-work AND test-coverage-checker (parallel)\n - ```javascript\n await Promise.all([\n Task({ subagent_type: 'next-task:deslop-work' }),\n Task({ subagent_type: 'next-task:test-coverage-checker' })\n ]);\n ```\n - Then MUST run review-orchestrator\n\n2. **If pre-review gates completed**:\n - MUST run review-orchestrator\n - ```javascript\n await Task({ subagent_type: 'next-task:review-orchestrator', model: 'opus' });\n ```\n\n3. **If review-orchestrator completed**:\n - Check if approved: `agentResult.approved === true`\n - If APPROVED: MUST run delivery-validator\n ```javascript\n await Task({ subagent_type: 'next-task:delivery-validator' });\n ```\n - If NOT APPROVED: MUST run deslop-work on fixes, then retry review\n\n4. **If delivery-validator completed**:\n - Check if approved: `agentResult.approved === true`\n - If APPROVED: MUST run docs-updater\n ```javascript\n await Task({ subagent_type: 'next-task:docs-updater' });\n ```\n - If NOT APPROVED: Return to implementation with fix instructions\n\n5. **If docs-updater completed**:\n - MUST invoke /ship command\n - ```javascript\n await Skill({ skill: 'ship:ship' });\n ```\n\n### CRITICAL ENFORCEMENT\n\n```\n╔══════════════════════════════════════════════════════════════════╗\n║ ⛔ NEVER skip deslop-work or test-coverage-checker ║\n║ ⛔ NEVER skip review-orchestrator ║\n║ ⛔ NEVER skip delivery-validator ║\n║ ⛔ NEVER skip docs-updater ║\n║ ⛔ NEVER create PR before /ship is invoked ║\n║ ⛔ NEVER push to remote before /ship is invoked ║\n╚══════════════════════════════════════════════════════════════════╝\n```\n\n### Workflow Sequence (MANDATORY)\n\n```\nimplementation-agent\n ↓ (SubagentStop)\npre-review gates (deslop-work + test-coverage-checker)\n ↓ (SubagentStop)\nreview-orchestrator\n ↓ (SubagentStop, if approved)\ndelivery-validator\n ↓ (SubagentStop, if approved)\ndocs-updater\n ↓ (SubagentStop)\n/ship command\n```\n\nReturn: {\"ok\": true, \"nextPhase\": \"<phase-name>\"}"
9
+ }
10
+ ]
11
+ }
12
+ ]
13
+ }
14
+ }