myaidev-method 0.2.19 → 0.2.22
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.
- package/.claude/mcp/sparc-orchestrator-server.js +0 -0
- package/.claude/mcp/wordpress-server.js +0 -0
- package/CHANGELOG.md +123 -5
- package/README.md +205 -13
- package/TECHNICAL_ARCHITECTURE.md +64 -2
- package/bin/cli.js +169 -2
- package/dist/mcp/mcp-config.json +138 -1
- package/dist/mcp/openstack-server.js +1607 -0
- package/package.json +2 -2
- package/src/config/workflows.js +532 -0
- package/src/lib/payloadcms-utils.js +206 -0
- package/src/lib/visual-generation-utils.js +445 -294
- package/src/lib/workflow-installer.js +512 -0
- package/src/libs/security/authorization-checker.js +606 -0
- package/src/mcp/openstack-server.js +1607 -0
- package/src/scripts/openstack-setup.sh +110 -0
- package/src/scripts/security/environment-detect.js +425 -0
- package/src/templates/claude/agents/openstack-vm-manager.md +281 -0
- package/src/templates/claude/agents/osint-researcher.md +1075 -0
- package/src/templates/claude/agents/penetration-tester.md +908 -0
- package/src/templates/claude/agents/security-auditor.md +244 -0
- package/src/templates/claude/agents/security-setup.md +1094 -0
- package/src/templates/claude/agents/webapp-security-tester.md +581 -0
- package/src/templates/claude/commands/myai-configure.md +84 -0
- package/src/templates/claude/commands/myai-openstack.md +229 -0
- package/src/templates/claude/commands/sc:security-exploit.md +464 -0
- package/src/templates/claude/commands/sc:security-recon.md +281 -0
- package/src/templates/claude/commands/sc:security-report.md +756 -0
- package/src/templates/claude/commands/sc:security-scan.md +441 -0
- package/src/templates/claude/commands/sc:security-setup.md +501 -0
- package/src/templates/claude/mcp_config.json +44 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myaidev-method",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Comprehensive development framework with SPARC methodology for AI-assisted software development, AI visual content generation (Gemini, Imagen,
|
|
3
|
+
"version": "0.2.22",
|
|
4
|
+
"description": "Comprehensive development framework with SPARC methodology for AI-assisted software development, security testing (PTES, OWASP, penetration testing, compliance auditing), AI visual content generation (Gemini, OpenAI GPT Image 1.5, Imagen, FLUX 2, Veo 3), OpenStack VM management, multi-platform publishing (WordPress, PayloadCMS, Astro, Docusaurus, Mintlify), and Coolify deployment",
|
|
5
5
|
"mcpName": "io.github.myaione/myaidev-method",
|
|
6
6
|
"main": "src/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MyAIDev Method - Workflow Configuration
|
|
3
|
+
*
|
|
4
|
+
* Defines modular workflows for installation
|
|
5
|
+
* Each workflow specifies its agents, commands, scripts, libraries, and dependencies
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const WORKFLOWS = {
|
|
9
|
+
// Content Creation Workflow
|
|
10
|
+
content: {
|
|
11
|
+
name: 'Content Creation',
|
|
12
|
+
description: 'Professional content writing with SEO optimization and WordPress publishing',
|
|
13
|
+
agents: [
|
|
14
|
+
'content-writer',
|
|
15
|
+
'proprietary-content-verifier'
|
|
16
|
+
],
|
|
17
|
+
commands: [
|
|
18
|
+
'myai-content-writer'
|
|
19
|
+
],
|
|
20
|
+
scripts: [
|
|
21
|
+
'utils/write-content.js'
|
|
22
|
+
],
|
|
23
|
+
libs: [
|
|
24
|
+
'content-generator.js',
|
|
25
|
+
'seo-optimizer.js'
|
|
26
|
+
],
|
|
27
|
+
docs: [
|
|
28
|
+
'content-creation-guide.md'
|
|
29
|
+
],
|
|
30
|
+
mcpServers: [],
|
|
31
|
+
dependencies: ['core'],
|
|
32
|
+
envVars: []
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
// Visual Content Generation Workflow
|
|
36
|
+
visual: {
|
|
37
|
+
name: 'Visual Content Generation',
|
|
38
|
+
description: 'AI-powered image and video generation using Gemini, Imagen, DALL-E, Veo',
|
|
39
|
+
agents: [
|
|
40
|
+
'visual-content-generator'
|
|
41
|
+
],
|
|
42
|
+
commands: [
|
|
43
|
+
'myai-generate-visual'
|
|
44
|
+
],
|
|
45
|
+
scripts: [
|
|
46
|
+
'utils/generate-image.js',
|
|
47
|
+
'utils/generate-video.js'
|
|
48
|
+
],
|
|
49
|
+
libs: [
|
|
50
|
+
'visual-generator.js'
|
|
51
|
+
],
|
|
52
|
+
docs: [
|
|
53
|
+
'visual-generation-guide.md'
|
|
54
|
+
],
|
|
55
|
+
mcpServers: [],
|
|
56
|
+
dependencies: ['core'],
|
|
57
|
+
envVars: [
|
|
58
|
+
'GOOGLE_AI_API_KEY',
|
|
59
|
+
'OPENAI_API_KEY',
|
|
60
|
+
'FAL_AI_API_KEY'
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
// Development Workflow (SPARC)
|
|
65
|
+
development: {
|
|
66
|
+
name: 'Development Workflow',
|
|
67
|
+
description: 'SPARC methodology for systematic software development',
|
|
68
|
+
agents: [],
|
|
69
|
+
commands: [
|
|
70
|
+
'sc:git',
|
|
71
|
+
'sc:estimate',
|
|
72
|
+
'sc:improve',
|
|
73
|
+
'sc:load',
|
|
74
|
+
'sc:design',
|
|
75
|
+
'sc:document',
|
|
76
|
+
'sc:implement',
|
|
77
|
+
'sc:reflect',
|
|
78
|
+
'sc:task',
|
|
79
|
+
'sc:troubleshoot',
|
|
80
|
+
'sc:brainstorm',
|
|
81
|
+
'sc:workflow',
|
|
82
|
+
'sc:spec-panel',
|
|
83
|
+
'sc:test',
|
|
84
|
+
'sc:analyze',
|
|
85
|
+
'sc:spawn',
|
|
86
|
+
'sc:build',
|
|
87
|
+
'sc:explain',
|
|
88
|
+
'sc:save',
|
|
89
|
+
'sc:select-tool',
|
|
90
|
+
'sc:cleanup',
|
|
91
|
+
'sc:index'
|
|
92
|
+
],
|
|
93
|
+
scripts: [],
|
|
94
|
+
libs: [],
|
|
95
|
+
docs: [
|
|
96
|
+
'sparc-methodology.md'
|
|
97
|
+
],
|
|
98
|
+
mcpServers: [],
|
|
99
|
+
dependencies: ['core'],
|
|
100
|
+
envVars: []
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
// Git & CI Workflow
|
|
104
|
+
'git-ci': {
|
|
105
|
+
name: 'Git & Continuous Integration',
|
|
106
|
+
description: 'Git operations and CI/CD pipeline management',
|
|
107
|
+
agents: [],
|
|
108
|
+
commands: [
|
|
109
|
+
'sc:git'
|
|
110
|
+
],
|
|
111
|
+
scripts: [
|
|
112
|
+
'ci/run-tests.js',
|
|
113
|
+
'ci/lint.js'
|
|
114
|
+
],
|
|
115
|
+
libs: [],
|
|
116
|
+
docs: [
|
|
117
|
+
'git-workflow-guide.md'
|
|
118
|
+
],
|
|
119
|
+
mcpServers: [],
|
|
120
|
+
dependencies: ['core'],
|
|
121
|
+
envVars: []
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
// Deployment Workflow
|
|
125
|
+
deployment: {
|
|
126
|
+
name: 'Deployment',
|
|
127
|
+
description: 'Application deployment and infrastructure management',
|
|
128
|
+
agents: [],
|
|
129
|
+
commands: [
|
|
130
|
+
'sc:deploy'
|
|
131
|
+
],
|
|
132
|
+
scripts: [
|
|
133
|
+
'deploy/docker-deploy.js',
|
|
134
|
+
'deploy/vercel-deploy.js',
|
|
135
|
+
'deploy/netlify-deploy.js'
|
|
136
|
+
],
|
|
137
|
+
libs: [
|
|
138
|
+
'deployment-manager.js'
|
|
139
|
+
],
|
|
140
|
+
docs: [
|
|
141
|
+
'deployment-guide.md'
|
|
142
|
+
],
|
|
143
|
+
mcpServers: [],
|
|
144
|
+
dependencies: ['core'],
|
|
145
|
+
envVars: [
|
|
146
|
+
'VERCEL_TOKEN',
|
|
147
|
+
'NETLIFY_TOKEN'
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
// WordPress Publishing Workflow
|
|
152
|
+
'publish-wordpress': {
|
|
153
|
+
name: 'WordPress Publishing',
|
|
154
|
+
description: 'Publish content to WordPress sites with enhanced MCP integration',
|
|
155
|
+
agents: [
|
|
156
|
+
'wordpress-admin'
|
|
157
|
+
],
|
|
158
|
+
commands: [
|
|
159
|
+
'myai-wordpress-publish'
|
|
160
|
+
],
|
|
161
|
+
scripts: [
|
|
162
|
+
'wordpress/publish-to-wordpress.js',
|
|
163
|
+
'wordpress/wordpress-health-check.js'
|
|
164
|
+
],
|
|
165
|
+
libs: [
|
|
166
|
+
'wordpress-client.js'
|
|
167
|
+
],
|
|
168
|
+
docs: [
|
|
169
|
+
'wordpress-publishing-guide.md'
|
|
170
|
+
],
|
|
171
|
+
mcpServers: ['myaidev'],
|
|
172
|
+
dependencies: ['core', 'content'],
|
|
173
|
+
envVars: [
|
|
174
|
+
'WORDPRESS_URL',
|
|
175
|
+
'WORDPRESS_USERNAME',
|
|
176
|
+
'WORDPRESS_APP_PASSWORD'
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
// PayloadCMS Publishing Workflow
|
|
181
|
+
'publish-payloadcms': {
|
|
182
|
+
name: 'PayloadCMS Publishing',
|
|
183
|
+
description: 'Publish content to PayloadCMS with Lexical rich text format',
|
|
184
|
+
agents: [],
|
|
185
|
+
commands: [
|
|
186
|
+
'myai-payloadcms-publish'
|
|
187
|
+
],
|
|
188
|
+
scripts: [
|
|
189
|
+
'payloadcms/publish-to-payloadcms.js',
|
|
190
|
+
'payloadcms/payloadcms-health-check.js'
|
|
191
|
+
],
|
|
192
|
+
libs: [
|
|
193
|
+
'payloadcms-utils.js'
|
|
194
|
+
],
|
|
195
|
+
docs: [
|
|
196
|
+
'payloadcms-publishing-guide.md'
|
|
197
|
+
],
|
|
198
|
+
mcpServers: [],
|
|
199
|
+
dependencies: ['core', 'content'],
|
|
200
|
+
envVars: [
|
|
201
|
+
'PAYLOADCMS_URL',
|
|
202
|
+
'PAYLOADCMS_API_KEY'
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
// Static Site Publishing Workflow
|
|
207
|
+
'publish-static': {
|
|
208
|
+
name: 'Static Site Publishing',
|
|
209
|
+
description: 'Generate and publish static sites (Hugo, Jekyll, 11ty)',
|
|
210
|
+
agents: [],
|
|
211
|
+
commands: [
|
|
212
|
+
'myai-static-publish'
|
|
213
|
+
],
|
|
214
|
+
scripts: [
|
|
215
|
+
'static/generate-hugo.js',
|
|
216
|
+
'static/generate-jekyll.js',
|
|
217
|
+
'static/generate-11ty.js'
|
|
218
|
+
],
|
|
219
|
+
libs: [
|
|
220
|
+
'static-generator.js'
|
|
221
|
+
],
|
|
222
|
+
docs: [
|
|
223
|
+
'static-site-guide.md'
|
|
224
|
+
],
|
|
225
|
+
mcpServers: [],
|
|
226
|
+
dependencies: ['core', 'content'],
|
|
227
|
+
envVars: []
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
// Coolify Deployment Workflow
|
|
231
|
+
coolify: {
|
|
232
|
+
name: 'Coolify Deployment',
|
|
233
|
+
description: 'Deploy applications using Coolify self-hosted PaaS',
|
|
234
|
+
agents: [],
|
|
235
|
+
commands: [
|
|
236
|
+
'myai-coolify-deploy'
|
|
237
|
+
],
|
|
238
|
+
scripts: [
|
|
239
|
+
'coolify/deploy-to-coolify.js',
|
|
240
|
+
'coolify/coolify-health-check.js'
|
|
241
|
+
],
|
|
242
|
+
libs: [
|
|
243
|
+
'coolify-client.js'
|
|
244
|
+
],
|
|
245
|
+
docs: [
|
|
246
|
+
'coolify-deployment-guide.md'
|
|
247
|
+
],
|
|
248
|
+
mcpServers: [],
|
|
249
|
+
dependencies: ['core', 'deployment'],
|
|
250
|
+
envVars: [
|
|
251
|
+
'COOLIFY_URL',
|
|
252
|
+
'COOLIFY_API_KEY'
|
|
253
|
+
]
|
|
254
|
+
},
|
|
255
|
+
|
|
256
|
+
// Core Framework (Required by all workflows)
|
|
257
|
+
core: {
|
|
258
|
+
name: 'Core Framework',
|
|
259
|
+
description: 'Essential MyAIDev Method framework components',
|
|
260
|
+
agents: [
|
|
261
|
+
'content-production-coordinator'
|
|
262
|
+
],
|
|
263
|
+
commands: [
|
|
264
|
+
'myai-coordinate-content',
|
|
265
|
+
'myai-configure'
|
|
266
|
+
],
|
|
267
|
+
scripts: [
|
|
268
|
+
'init/install.js',
|
|
269
|
+
'init/configure.js',
|
|
270
|
+
'utils/file-utils.js',
|
|
271
|
+
'utils/logger.js'
|
|
272
|
+
],
|
|
273
|
+
libs: [
|
|
274
|
+
'config-manager.js'
|
|
275
|
+
],
|
|
276
|
+
docs: [
|
|
277
|
+
'README.md',
|
|
278
|
+
'TECHNICAL_ARCHITECTURE.md'
|
|
279
|
+
],
|
|
280
|
+
mcpServers: [],
|
|
281
|
+
dependencies: [],
|
|
282
|
+
envVars: []
|
|
283
|
+
},
|
|
284
|
+
|
|
285
|
+
// Security Testing Workflows (v0.2.21)
|
|
286
|
+
|
|
287
|
+
// Penetration Testing Workflow
|
|
288
|
+
'security-pentest': {
|
|
289
|
+
name: 'Penetration Testing',
|
|
290
|
+
description: 'Full-scope security assessment following PTES methodology with reconnaissance, scanning, exploitation, and professional reporting',
|
|
291
|
+
agents: [
|
|
292
|
+
'security-setup',
|
|
293
|
+
'security-specialist',
|
|
294
|
+
'penetration-tester',
|
|
295
|
+
'osint-researcher'
|
|
296
|
+
],
|
|
297
|
+
commands: [
|
|
298
|
+
'sc:security-setup',
|
|
299
|
+
'sc:security-recon',
|
|
300
|
+
'sc:security-scan',
|
|
301
|
+
'sc:security-exploit',
|
|
302
|
+
'sc:security-report'
|
|
303
|
+
],
|
|
304
|
+
scripts: [
|
|
305
|
+
'security/setup-tools.js',
|
|
306
|
+
'security/verify-tools.js',
|
|
307
|
+
'security/kali-docker-setup.js',
|
|
308
|
+
'security/environment-detect.js',
|
|
309
|
+
'security/security-scan.js',
|
|
310
|
+
'security/exploit-search.js',
|
|
311
|
+
'security/report-generator.js'
|
|
312
|
+
],
|
|
313
|
+
libs: [
|
|
314
|
+
'security/authorization-checker.js',
|
|
315
|
+
'security/environment-manager.js',
|
|
316
|
+
'security/tool-installer.js',
|
|
317
|
+
'security/docker-manager.js',
|
|
318
|
+
'security/security-scanner.js',
|
|
319
|
+
'security/vulnerability-db.js',
|
|
320
|
+
'security/cvss-calculator.js',
|
|
321
|
+
'security/report-generator.js'
|
|
322
|
+
],
|
|
323
|
+
docs: [
|
|
324
|
+
'SECURITY_TESTING_GUIDE.md',
|
|
325
|
+
'LEGAL_REQUIREMENTS.md',
|
|
326
|
+
'TOOL_INSTALLATION.md',
|
|
327
|
+
'PENTEST_METHODOLOGY.md'
|
|
328
|
+
],
|
|
329
|
+
mcpServers: [],
|
|
330
|
+
dependencies: ['core', 'development'],
|
|
331
|
+
envVars: [
|
|
332
|
+
'SECURITY_AUTHORIZATION_REQUIRED=true',
|
|
333
|
+
'SECURITY_ENVIRONMENT=native',
|
|
334
|
+
'KALI_DOCKER_IMAGE=kalilinux/kali-rolling',
|
|
335
|
+
'SECURITY_TOOLS_PATH=/usr/local/bin'
|
|
336
|
+
]
|
|
337
|
+
},
|
|
338
|
+
|
|
339
|
+
// Security Audit & Compliance Workflow
|
|
340
|
+
'security-audit': {
|
|
341
|
+
name: 'Security Audit & Compliance',
|
|
342
|
+
description: 'Infrastructure security auditing, system hardening, and compliance validation for PCI-DSS, GDPR, HIPAA, SOC 2',
|
|
343
|
+
agents: [
|
|
344
|
+
'security-setup',
|
|
345
|
+
'security-auditor',
|
|
346
|
+
'sysadmin-security',
|
|
347
|
+
'compliance-auditor'
|
|
348
|
+
],
|
|
349
|
+
commands: [
|
|
350
|
+
'sc:security-setup',
|
|
351
|
+
'sc:security-audit',
|
|
352
|
+
'sc:security-harden',
|
|
353
|
+
'sc:compliance-check',
|
|
354
|
+
'sc:security-report'
|
|
355
|
+
],
|
|
356
|
+
scripts: [
|
|
357
|
+
'security/setup-tools.js',
|
|
358
|
+
'security/verify-tools.js',
|
|
359
|
+
'security/audit-scanner.js',
|
|
360
|
+
'security/compliance-checker.js',
|
|
361
|
+
'security/system-hardening.js',
|
|
362
|
+
'security/report-generator.js'
|
|
363
|
+
],
|
|
364
|
+
libs: [
|
|
365
|
+
'security/authorization-checker.js',
|
|
366
|
+
'security/environment-manager.js',
|
|
367
|
+
'security/tool-installer.js',
|
|
368
|
+
'security/compliance-frameworks.js',
|
|
369
|
+
'security/system-auditor.js',
|
|
370
|
+
'security/hardening-rules.js',
|
|
371
|
+
'security/cvss-calculator.js',
|
|
372
|
+
'security/report-generator.js'
|
|
373
|
+
],
|
|
374
|
+
docs: [
|
|
375
|
+
'SECURITY_AUDIT_GUIDE.md',
|
|
376
|
+
'COMPLIANCE_FRAMEWORKS.md',
|
|
377
|
+
'SYSTEM_HARDENING.md',
|
|
378
|
+
'LEGAL_REQUIREMENTS.md'
|
|
379
|
+
],
|
|
380
|
+
mcpServers: [],
|
|
381
|
+
dependencies: ['core'],
|
|
382
|
+
envVars: [
|
|
383
|
+
'COMPLIANCE_FRAMEWORK=PCI-DSS',
|
|
384
|
+
'AUDIT_ENVIRONMENT=native'
|
|
385
|
+
]
|
|
386
|
+
},
|
|
387
|
+
|
|
388
|
+
// Web Application Security Workflow
|
|
389
|
+
'security-webapp': {
|
|
390
|
+
name: 'Web Application Security',
|
|
391
|
+
description: 'OWASP Top 10 testing and web application penetration testing with automated scanning and manual exploitation',
|
|
392
|
+
agents: [
|
|
393
|
+
'security-setup',
|
|
394
|
+
'webapp-security-tester'
|
|
395
|
+
],
|
|
396
|
+
commands: [
|
|
397
|
+
'sc:security-setup',
|
|
398
|
+
'sc:security-webapp-scan',
|
|
399
|
+
'sc:security-webapp-exploit',
|
|
400
|
+
'sc:security-webapp-report'
|
|
401
|
+
],
|
|
402
|
+
scripts: [
|
|
403
|
+
'security/setup-tools.js',
|
|
404
|
+
'security/verify-tools.js',
|
|
405
|
+
'security/webapp-scanner.js',
|
|
406
|
+
'security/owasp-tester.js',
|
|
407
|
+
'security/sqlmap-wrapper.js',
|
|
408
|
+
'security/report-generator.js'
|
|
409
|
+
],
|
|
410
|
+
libs: [
|
|
411
|
+
'security/authorization-checker.js',
|
|
412
|
+
'security/environment-manager.js',
|
|
413
|
+
'security/tool-installer.js',
|
|
414
|
+
'security/owasp-top10.js',
|
|
415
|
+
'security/payload-library.js',
|
|
416
|
+
'security/web-scanner.js',
|
|
417
|
+
'security/report-generator.js'
|
|
418
|
+
],
|
|
419
|
+
docs: [
|
|
420
|
+
'WEBAPP_SECURITY_GUIDE.md',
|
|
421
|
+
'OWASP_TOP10.md',
|
|
422
|
+
'LEGAL_REQUIREMENTS.md'
|
|
423
|
+
],
|
|
424
|
+
mcpServers: [],
|
|
425
|
+
dependencies: ['core', 'development', 'security-pentest'],
|
|
426
|
+
envVars: [
|
|
427
|
+
'BURP_SUITE_PATH=/opt/burpsuite',
|
|
428
|
+
'ZAP_PATH=/usr/share/zaproxy'
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Get workflow by name
|
|
435
|
+
* @param {string} name - Workflow name
|
|
436
|
+
* @returns {Object|null} Workflow definition or null
|
|
437
|
+
*/
|
|
438
|
+
function getWorkflow(name) {
|
|
439
|
+
return WORKFLOWS[name] || null;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Get all workflow names
|
|
444
|
+
* @returns {string[]} Array of workflow names
|
|
445
|
+
*/
|
|
446
|
+
function getWorkflowNames() {
|
|
447
|
+
return Object.keys(WORKFLOWS);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Get workflows by category
|
|
452
|
+
* @param {string} category - Category name (content, development, publishing, deployment)
|
|
453
|
+
* @returns {Object[]} Array of workflow definitions
|
|
454
|
+
*/
|
|
455
|
+
function getWorkflowsByCategory(category) {
|
|
456
|
+
const categories = {
|
|
457
|
+
content: ['content', 'visual'],
|
|
458
|
+
development: ['development', 'git-ci'],
|
|
459
|
+
publishing: ['publish-wordpress', 'publish-payloadcms', 'publish-static'],
|
|
460
|
+
deployment: ['deployment', 'coolify']
|
|
461
|
+
};
|
|
462
|
+
|
|
463
|
+
const workflowNames = categories[category] || [];
|
|
464
|
+
return workflowNames.map(name => ({ name, ...WORKFLOWS[name] }));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Resolve workflow dependencies recursively
|
|
469
|
+
* @param {string} workflowName - Workflow name
|
|
470
|
+
* @param {Set} resolved - Set of already resolved workflows
|
|
471
|
+
* @returns {string[]} Array of workflow names in dependency order
|
|
472
|
+
*/
|
|
473
|
+
function resolveWorkflowDependencies(workflowName, resolved = new Set()) {
|
|
474
|
+
const workflow = WORKFLOWS[workflowName];
|
|
475
|
+
if (!workflow) {
|
|
476
|
+
throw new Error(`Unknown workflow: ${workflowName}`);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// Avoid circular dependencies
|
|
480
|
+
if (resolved.has(workflowName)) {
|
|
481
|
+
return [];
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
const dependencies = [];
|
|
485
|
+
|
|
486
|
+
// Resolve dependencies first
|
|
487
|
+
for (const dep of workflow.dependencies) {
|
|
488
|
+
if (!resolved.has(dep)) {
|
|
489
|
+
dependencies.push(...resolveWorkflowDependencies(dep, resolved));
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// Add this workflow
|
|
494
|
+
dependencies.push(workflowName);
|
|
495
|
+
resolved.add(workflowName);
|
|
496
|
+
|
|
497
|
+
return dependencies;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Validate workflow definition
|
|
502
|
+
* @param {Object} workflow - Workflow definition
|
|
503
|
+
* @returns {{valid: boolean, errors: string[]}}
|
|
504
|
+
*/
|
|
505
|
+
function validateWorkflow(workflow) {
|
|
506
|
+
const errors = [];
|
|
507
|
+
|
|
508
|
+
if (!workflow.name) errors.push('Missing workflow name');
|
|
509
|
+
if (!workflow.description) errors.push('Missing workflow description');
|
|
510
|
+
if (!Array.isArray(workflow.agents)) errors.push('agents must be an array');
|
|
511
|
+
if (!Array.isArray(workflow.commands)) errors.push('commands must be an array');
|
|
512
|
+
if (!Array.isArray(workflow.scripts)) errors.push('scripts must be an array');
|
|
513
|
+
if (!Array.isArray(workflow.libs)) errors.push('libs must be an array');
|
|
514
|
+
if (!Array.isArray(workflow.docs)) errors.push('docs must be an array');
|
|
515
|
+
if (!Array.isArray(workflow.mcpServers)) errors.push('mcpServers must be an array');
|
|
516
|
+
if (!Array.isArray(workflow.dependencies)) errors.push('dependencies must be an array');
|
|
517
|
+
if (!Array.isArray(workflow.envVars)) errors.push('envVars must be an array');
|
|
518
|
+
|
|
519
|
+
return {
|
|
520
|
+
valid: errors.length === 0,
|
|
521
|
+
errors
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
export {
|
|
526
|
+
WORKFLOWS,
|
|
527
|
+
getWorkflow,
|
|
528
|
+
getWorkflowNames,
|
|
529
|
+
getWorkflowsByCategory,
|
|
530
|
+
resolveWorkflowDependencies,
|
|
531
|
+
validateWorkflow
|
|
532
|
+
};
|