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,235 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tool Verification System
4
+ * Checks availability and versions of development tools for graceful degradation
5
+ *
6
+ * Usage: node lib/platform/verify-tools.js
7
+ * Output: JSON with tool availability and versions
8
+ *
9
+ * @author Avi Fenesh
10
+ * @license MIT
11
+ */
12
+
13
+ const { execFileSync, spawnSync, spawn } = require('child_process');
14
+
15
+ // Detect Windows platform
16
+ const isWindows = process.platform === 'win32';
17
+
18
+ /**
19
+ * Checks if a tool is available and returns its version (sync)
20
+ * Uses safe execution methods to avoid shell injection vulnerabilities
21
+ * @param {string} command - Command to check (e.g., 'git', 'node')
22
+ * @param {string} versionFlag - Flag to get version (default: '--version')
23
+ * @returns {Object} { available: boolean, version: string|null }
24
+ */
25
+ function checkTool(command, versionFlag = '--version') {
26
+ // Validate command contains only safe characters (alphanumeric, underscore, hyphen)
27
+ if (!/^[a-zA-Z0-9_-]+$/.test(command)) {
28
+ return { available: false, version: null };
29
+ }
30
+ // Validate versionFlag contains only safe characters
31
+ if (!/^[a-zA-Z0-9_-]+$/.test(versionFlag)) {
32
+ return { available: false, version: null };
33
+ }
34
+
35
+ try {
36
+ let output;
37
+
38
+ if (isWindows) {
39
+ // On Windows, use spawnSync with shell to handle .cmd/.bat scripts
40
+ // Input is validated above so this is safe
41
+ const result = spawnSync(command, [versionFlag], {
42
+ encoding: 'utf8',
43
+ stdio: ['pipe', 'pipe', 'ignore'],
44
+ timeout: 5000,
45
+ windowsHide: true,
46
+ shell: true
47
+ });
48
+ if (result.error || result.status !== 0) {
49
+ return { available: false, version: null };
50
+ }
51
+ output = (result.stdout || '').trim();
52
+ } else {
53
+ // On Unix, use execFileSync (more secure, no shell)
54
+ output = execFileSync(command, [versionFlag], {
55
+ encoding: 'utf8',
56
+ stdio: ['pipe', 'pipe', 'ignore'],
57
+ timeout: 5000
58
+ }).trim();
59
+ }
60
+
61
+ // Extract version from first line
62
+ const version = output.split('\n')[0];
63
+ return { available: true, version };
64
+ } catch {
65
+ return { available: false, version: null };
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Checks if a tool is available and returns its version (async)
71
+ * Uses safe execution methods to avoid shell injection vulnerabilities
72
+ * @param {string} command - Command to check (e.g., 'git', 'node')
73
+ * @param {string} versionFlag - Flag to get version (default: '--version')
74
+ * @returns {Promise<Object>} { available: boolean, version: string|null }
75
+ */
76
+ function checkToolAsync(command, versionFlag = '--version') {
77
+ return new Promise((resolve) => {
78
+ // Validate command contains only safe characters (alphanumeric, underscore, hyphen)
79
+ if (!/^[a-zA-Z0-9_-]+$/.test(command)) {
80
+ return resolve({ available: false, version: null });
81
+ }
82
+ // Validate versionFlag contains only safe characters
83
+ if (!/^[a-zA-Z0-9_-]+$/.test(versionFlag)) {
84
+ return resolve({ available: false, version: null });
85
+ }
86
+
87
+ let child;
88
+
89
+ if (isWindows) {
90
+ // On Windows, spawn shell directly with command as single argument to avoid deprecation warning
91
+ // Input is validated above so this is safe
92
+ child = spawn('cmd.exe', ['/c', command, versionFlag], {
93
+ stdio: ['pipe', 'pipe', 'ignore'],
94
+ windowsHide: true
95
+ });
96
+ } else {
97
+ // On Unix, spawn directly without shell
98
+ child = spawn(command, [versionFlag], {
99
+ stdio: ['pipe', 'pipe', 'ignore']
100
+ });
101
+ }
102
+
103
+ let stdout = '';
104
+
105
+ // Set timeout
106
+ const timeout = setTimeout(() => {
107
+ child.kill();
108
+ resolve({ available: false, version: null });
109
+ }, 5000);
110
+
111
+ child.stdout.on('data', (data) => {
112
+ stdout += data.toString();
113
+ });
114
+
115
+ child.on('error', () => {
116
+ clearTimeout(timeout);
117
+ resolve({ available: false, version: null });
118
+ });
119
+
120
+ child.on('close', (code) => {
121
+ clearTimeout(timeout);
122
+ if (code !== 0) {
123
+ return resolve({ available: false, version: null });
124
+ }
125
+ const version = stdout.trim().split('\n')[0];
126
+ resolve({ available: true, version });
127
+ });
128
+ });
129
+ }
130
+
131
+ /**
132
+ * Tool definitions with their version flags
133
+ */
134
+ const TOOL_DEFINITIONS = [
135
+ // Version control
136
+ { name: 'git', flag: '--version' },
137
+ { name: 'gh', flag: '--version' },
138
+
139
+ // Node.js ecosystem
140
+ { name: 'node', flag: '--version' },
141
+ { name: 'npm', flag: '--version' },
142
+ { name: 'pnpm', flag: '--version' },
143
+ { name: 'yarn', flag: '--version' },
144
+ { name: 'bun', flag: '--version' },
145
+
146
+ // Python ecosystem
147
+ { name: 'python', flag: '--version' },
148
+ { name: 'python3', flag: '--version' },
149
+ { name: 'pip', flag: '--version' },
150
+ { name: 'pip3', flag: '--version' },
151
+ { name: 'poetry', flag: '--version' },
152
+
153
+ // Rust ecosystem
154
+ { name: 'cargo', flag: '--version' },
155
+ { name: 'rustc', flag: '--version' },
156
+ { name: 'rustup', flag: '--version' },
157
+
158
+ // Go ecosystem
159
+ { name: 'go', flag: 'version' },
160
+
161
+ // Java ecosystem
162
+ { name: 'java', flag: '--version' },
163
+ { name: 'javac', flag: '--version' },
164
+ { name: 'mvn', flag: '--version' },
165
+ { name: 'gradle', flag: '--version' },
166
+
167
+ // Containerization
168
+ { name: 'docker', flag: '--version' },
169
+
170
+ // Deployment platforms
171
+ { name: 'railway', flag: '--version' },
172
+ { name: 'vercel', flag: '--version' },
173
+ { name: 'netlify', flag: '--version' },
174
+ { name: 'flyctl', flag: 'version' },
175
+
176
+ // CI/CD tools
177
+ { name: 'circleci', flag: 'version' }
178
+ ];
179
+
180
+ /**
181
+ * Verifies all development tools (sync)
182
+ * @returns {Object} Tool availability map
183
+ */
184
+ function verifyTools() {
185
+ const result = {};
186
+ for (const tool of TOOL_DEFINITIONS) {
187
+ result[tool.name] = checkTool(tool.name, tool.flag);
188
+ }
189
+ return result;
190
+ }
191
+
192
+ /**
193
+ * Verifies all development tools (async, parallel)
194
+ * Runs all tool checks in parallel for ~10x faster execution
195
+ * @returns {Promise<Object>} Tool availability map
196
+ */
197
+ async function verifyToolsAsync() {
198
+ // Run all checks in parallel
199
+ const results = await Promise.all(
200
+ TOOL_DEFINITIONS.map(tool => checkToolAsync(tool.name, tool.flag))
201
+ );
202
+
203
+ // Build result object
204
+ const toolMap = {};
205
+ TOOL_DEFINITIONS.forEach((tool, index) => {
206
+ toolMap[tool.name] = results[index];
207
+ });
208
+
209
+ return toolMap;
210
+ }
211
+
212
+ // When run directly, output JSON (uses async for better performance)
213
+ if (require.main === module) {
214
+ (async () => {
215
+ try {
216
+ const result = await verifyToolsAsync();
217
+ console.log(JSON.stringify(result, null, 2));
218
+ } catch (error) {
219
+ console.error(JSON.stringify({
220
+ error: error.message,
221
+ timestamp: new Date().toISOString()
222
+ }, null, 2));
223
+ process.exit(1);
224
+ }
225
+ })();
226
+ }
227
+
228
+ // Export for use as module
229
+ module.exports = {
230
+ verifyTools,
231
+ verifyToolsAsync,
232
+ checkTool,
233
+ checkToolAsync,
234
+ TOOL_DEFINITIONS
235
+ };