claude-flow-novice 2.0.3 → 2.0.4
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/dist/src/cli/commands/guidance.js +487 -668
- package/dist/src/cli/commands/index-validate.js +18 -29
- package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
- package/dist/src/cli/commands/neural-goal-init.js +92 -125
- package/dist/src/cli/commands/swarm-exec.js +317 -393
- package/dist/src/cli/commands/swarm.js +1 -1
- package/dist/src/cli/commands/validate-framework.js +983 -1100
- package/dist/src/cli/commands/validate.js +144 -223
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
- package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
- package/dist/src/cli/simple-commands/agent.js +157 -193
- package/dist/src/cli/simple-commands/analysis.js +336 -446
- package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
- package/dist/src/cli/simple-commands/automation.js +481 -469
- package/dist/src/cli/simple-commands/batch-manager.js +261 -313
- package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
- package/dist/src/cli/simple-commands/claude-track.js +68 -90
- package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
- package/dist/src/cli/simple-commands/config.js +245 -290
- package/dist/src/cli/simple-commands/coordination.js +182 -234
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
- package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
- package/dist/src/cli/simple-commands/github/github-api.js +535 -574
- package/dist/src/cli/simple-commands/github/init.js +276 -303
- package/dist/src/cli/simple-commands/github.js +222 -247
- package/dist/src/cli/simple-commands/goal.js +51 -63
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
- package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
- package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
- package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
- package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
- package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
- package/dist/src/cli/simple-commands/hive.js +90 -79
- package/dist/src/cli/simple-commands/hook-safety.js +431 -521
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
- package/dist/src/cli/simple-commands/hooks.js +1064 -1204
- package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
- package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
- package/dist/src/cli/simple-commands/init/help.js +104 -107
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
- package/dist/src/cli/simple-commands/init/index.js +1510 -1759
- package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
- package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
- package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
- package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
- package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
- package/dist/src/cli/simple-commands/init.js +1 -2
- package/dist/src/cli/simple-commands/mcp-health.js +131 -158
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
- package/dist/src/cli/simple-commands/mcp.js +345 -400
- package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
- package/dist/src/cli/simple-commands/memory.js +247 -311
- package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
- package/dist/src/cli/simple-commands/monitor.js +294 -363
- package/dist/src/cli/simple-commands/neural.js +51 -65
- package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
- package/dist/src/cli/simple-commands/pair-basic.js +528 -656
- package/dist/src/cli/simple-commands/pair-old.js +430 -543
- package/dist/src/cli/simple-commands/pair-working.js +615 -751
- package/dist/src/cli/simple-commands/pair.js +615 -751
- package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
- package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
- package/dist/src/cli/simple-commands/process-ui.js +230 -254
- package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
- package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
- package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
- package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
- package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
- package/dist/src/cli/simple-commands/sparc/index.js +241 -298
- package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
- package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
- package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +465 -493
- package/dist/src/cli/simple-commands/start-ui.js +108 -132
- package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +254 -275
- package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
- package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
- package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
- package/dist/src/cli/simple-commands/stream-chain.js +260 -318
- package/dist/src/cli/simple-commands/stream-processor.js +290 -315
- package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
- package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
- package/dist/src/cli/simple-commands/swarm.js +887 -1082
- package/dist/src/cli/simple-commands/task.js +161 -206
- package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
- package/dist/src/cli/simple-commands/token-tracker.js +258 -316
- package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
- package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
- package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
- package/dist/src/cli/simple-commands/training.js +170 -227
- package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
- package/dist/src/cli/simple-commands/verification-integration.js +389 -417
- package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
- package/dist/src/cli/simple-commands/verification.js +493 -513
- package/dist/src/cli/simple-commands/web-server.js +766 -836
- package/dist/src/cli/simple-commands/webui-validator.js +106 -124
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
- package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
- package/dist/src/coordination/iteration-tracker.js +363 -454
- package/dist/src/enterprise/analytics-manager.js +1135 -0
- package/dist/src/enterprise/audit-manager.js +1115 -0
- package/dist/src/enterprise/cloud-manager.js +891 -0
- package/dist/src/enterprise/deployment-manager.js +966 -0
- package/dist/src/enterprise/index.js +6 -0
- package/dist/src/enterprise/project-manager.js +584 -0
- package/dist/src/enterprise/security-manager.js +991 -0
- package/dist/src/index.js +1 -1
- package/dist/src/mcp/DEPRECATED.js +46 -60
- package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
- package/dist/src/mcp/implementations/agent-tracker.js +114 -128
- package/dist/src/mcp/implementations/daa-tools.js +292 -350
- package/dist/src/mcp/implementations/workflow-tools.js +329 -361
- package/dist/src/mcp/mcp-config-manager.js +1183 -1331
- package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
- package/dist/src/mcp/mcp-server-novice.js +11 -17
- package/dist/src/mcp/mcp-server-sdk.js +11 -17
- package/dist/src/mcp/mcp-server.js +1620 -1484
- package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
- package/dist/src/memory/advanced-serializer.js +609 -589
- package/dist/src/memory/enhanced-examples.js +220 -305
- package/dist/src/memory/enhanced-memory.js +295 -336
- package/dist/src/memory/enhanced-session-serializer.js +408 -492
- package/dist/src/memory/fallback-memory-system.js +900 -1021
- package/dist/src/memory/fallback-store.js +93 -131
- package/dist/src/memory/high-performance-serialization.js +592 -730
- package/dist/src/memory/in-memory-store.js +161 -213
- package/dist/src/memory/index.js +123 -157
- package/dist/src/memory/lock-free-structures.js +578 -764
- package/dist/src/memory/memory-mapped-persistence.js +585 -766
- package/dist/src/memory/memory-pressure-manager.js +569 -707
- package/dist/src/memory/migration.js +358 -445
- package/dist/src/memory/shared-memory.js +641 -768
- package/dist/src/memory/sqlite-store.js +245 -325
- package/dist/src/memory/sqlite-wrapper.js +122 -151
- package/dist/src/memory/swarm-memory.js +470 -603
- package/dist/src/memory/test-example.js +126 -134
- package/dist/src/memory/ultra-fast-memory-store.js +622 -821
- package/dist/src/memory/unified-memory-manager.js +356 -437
- package/dist/src/migration/index.js +92 -0
- package/dist/src/migration/logger.js +121 -0
- package/dist/src/migration/migration-analyzer.js +268 -0
- package/dist/src/migration/migration-runner.js +522 -0
- package/dist/src/migration/migration-validator.js +285 -0
- package/dist/src/migration/progress-reporter.js +150 -0
- package/dist/src/migration/rollback-manager.js +321 -0
- package/dist/src/migration/tests/migration-system.test.js +7 -0
- package/dist/src/migration/types.js +3 -0
- package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
- package/dist/src/swarm/__tests__/integration.test.js +227 -0
- package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
- package/dist/src/swarm/advanced-orchestrator.js +1095 -0
- package/dist/src/swarm/claude-code-interface.js +961 -0
- package/dist/src/swarm/claude-flow-executor.js +229 -0
- package/dist/src/swarm/consensus-coordinator.js +475 -0
- package/dist/src/swarm/coordinator.js +2993 -0
- package/dist/src/swarm/direct-executor.js +1180 -0
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
- package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
- package/dist/src/swarm/executor-v2.js +322 -0
- package/dist/src/swarm/executor.js +815 -0
- package/dist/src/swarm/hive-mind-integration.js +703 -0
- package/dist/src/swarm/index.js +41 -0
- package/dist/src/swarm/json-output-aggregator.js +267 -0
- package/dist/src/swarm/large-scale-coordinator.js +542 -0
- package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
- package/dist/src/swarm/memory.js +1117 -0
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
- package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
- package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
- package/dist/src/swarm/optimizations/connection-pool.js +244 -0
- package/dist/src/swarm/optimizations/index.js +28 -0
- package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
- package/dist/src/swarm/optimizations/ttl-map.js +234 -0
- package/dist/src/swarm/prompt-cli.js +200 -0
- package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
- package/dist/src/swarm/prompt-copier.js +381 -0
- package/dist/src/swarm/prompt-manager.js +295 -0
- package/dist/src/swarm/prompt-utils.js +310 -0
- package/dist/src/swarm/result-aggregator.js +718 -0
- package/dist/src/swarm/sparc-executor.js +1568 -0
- package/dist/src/swarm/strategies/auto.js +758 -0
- package/dist/src/swarm/strategies/base.js +128 -0
- package/dist/src/swarm/strategies/research.js +914 -0
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
- package/dist/src/swarm/types.js +52 -0
- package/dist/src/swarm/workers/copy-worker.js +56 -0
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
- package/dist/src/utils/github-cli-safe.js +56 -64
- package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
- package/dist/src/utils/npx-isolated-cache.js +104 -119
- package/dist/src/utils/preference-manager.js +622 -652
- package/dist/src/utils/timezone-utils.js +86 -105
- package/dist/src/validators/epic-config-schema.js +214 -0
- package/dist/src/validators/index.js +10 -0
- package/dist/src/validators/swarm-init-validator.js +259 -0
- package/dist/src/validators/todowrite-batching-validator.js +215 -0
- package/dist/src/validators/todowrite-integration.js +187 -0
- package/package.json +2 -2
|
@@ -2,276 +2,217 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* GitHub Coordinator Command
|
|
4
4
|
* Provides GitHub workflow orchestration and coordination capabilities
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class GitHubCoordinator {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.api = githubAPI;
|
|
14
|
-
this.workflows = new Map();
|
|
15
|
-
this.activeCoordinations = new Map();
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
5
|
+
*/ import { printSuccess, printError, printWarning, printInfo } from "../utils.js";
|
|
6
|
+
import { githubAPI } from "./github-api.js";
|
|
7
|
+
import { execSync } from "child_process";
|
|
8
|
+
let GitHubCoordinator = class GitHubCoordinator {
|
|
9
|
+
/**
|
|
19
10
|
* Initialize GitHub coordination
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
*/ async initialize(options = {}) {
|
|
12
|
+
printInfo('🚀 Initializing GitHub Coordinator...');
|
|
13
|
+
// Authenticate with GitHub
|
|
14
|
+
const authenticated = await this.api.authenticate(options.token);
|
|
15
|
+
if (!authenticated) {
|
|
16
|
+
throw new Error('Failed to authenticate with GitHub');
|
|
17
|
+
}
|
|
18
|
+
// Check if we're in a git repository
|
|
19
|
+
try {
|
|
20
|
+
const remoteUrl = execSync('git config --get remote.origin.url', {
|
|
21
|
+
encoding: 'utf8'
|
|
22
|
+
}).trim();
|
|
23
|
+
const repoMatch = remoteUrl.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?$/);
|
|
24
|
+
if (repoMatch) {
|
|
25
|
+
this.currentRepo = {
|
|
26
|
+
owner: repoMatch[1],
|
|
27
|
+
repo: repoMatch[2]
|
|
28
|
+
};
|
|
29
|
+
printSuccess(`Connected to repository: ${this.currentRepo.owner}/${this.currentRepo.repo}`);
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
printWarning('Not in a git repository or no GitHub remote found');
|
|
33
|
+
}
|
|
34
|
+
// Initialize swarm integration
|
|
35
|
+
await this.initializeSwarmIntegration();
|
|
36
|
+
printSuccess('✅ GitHub Coordinator initialized successfully');
|
|
28
37
|
}
|
|
29
|
-
|
|
30
|
-
// Check if we're in a git repository
|
|
31
|
-
try {
|
|
32
|
-
const remoteUrl = execSync('git config --get remote.origin.url', { encoding: 'utf8' }).trim();
|
|
33
|
-
const repoMatch = remoteUrl.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?$/);
|
|
34
|
-
|
|
35
|
-
if (repoMatch) {
|
|
36
|
-
this.currentRepo = { owner: repoMatch[1], repo: repoMatch[2] };
|
|
37
|
-
printSuccess(`Connected to repository: ${this.currentRepo.owner}/${this.currentRepo.repo}`);
|
|
38
|
-
}
|
|
39
|
-
} catch (error) {
|
|
40
|
-
printWarning('Not in a git repository or no GitHub remote found');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Initialize swarm integration
|
|
44
|
-
await this.initializeSwarmIntegration();
|
|
45
|
-
|
|
46
|
-
printSuccess('✅ GitHub Coordinator initialized successfully');
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
38
|
+
/**
|
|
50
39
|
* Initialize swarm integration for coordination
|
|
51
|
-
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.swarmEnabled = false;
|
|
40
|
+
*/ async initializeSwarmIntegration() {
|
|
41
|
+
try {
|
|
42
|
+
// Check if ruv-swarm is available
|
|
43
|
+
execSync('npx ruv-swarm --version', {
|
|
44
|
+
stdio: 'pipe'
|
|
45
|
+
});
|
|
46
|
+
// Initialize swarm for GitHub coordination
|
|
47
|
+
const swarmInit = execSync('npx ruv-swarm hook pre-task --description "GitHub workflow coordination"', {
|
|
48
|
+
encoding: 'utf8'
|
|
49
|
+
});
|
|
50
|
+
if (swarmInit.includes('continue')) {
|
|
51
|
+
printSuccess('🐝 Swarm integration initialized for GitHub coordination');
|
|
52
|
+
this.swarmEnabled = true;
|
|
53
|
+
}
|
|
54
|
+
} catch (error) {
|
|
55
|
+
printWarning('Swarm integration not available - continuing without swarm features');
|
|
56
|
+
this.swarmEnabled = false;
|
|
57
|
+
}
|
|
70
58
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
/**
|
|
59
|
+
/**
|
|
74
60
|
* Coordinate CI/CD pipeline setup
|
|
75
|
-
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
*/ async coordinateCIPipeline(options = {}) {
|
|
62
|
+
printInfo('🔄 Coordinating CI/CD pipeline setup...');
|
|
63
|
+
if (!this.currentRepo) {
|
|
64
|
+
throw new Error('No GitHub repository context available');
|
|
65
|
+
}
|
|
66
|
+
const { owner, repo } = this.currentRepo;
|
|
67
|
+
const pipeline = options.pipeline || 'nodejs';
|
|
68
|
+
const autoApprove = options.autoApprove || false;
|
|
69
|
+
// Create workflow coordination plan
|
|
70
|
+
const coordinationPlan = {
|
|
71
|
+
id: `ci-setup-${Date.now()}`,
|
|
72
|
+
type: 'ci_pipeline_setup',
|
|
73
|
+
repository: `${owner}/${repo}`,
|
|
74
|
+
pipeline,
|
|
75
|
+
steps: [
|
|
76
|
+
'analyze_repository_structure',
|
|
77
|
+
'create_workflow_files',
|
|
78
|
+
'setup_environment_secrets',
|
|
79
|
+
'configure_branch_protection',
|
|
80
|
+
'test_pipeline_execution',
|
|
81
|
+
'setup_notifications'
|
|
82
|
+
],
|
|
83
|
+
status: 'planning'
|
|
84
|
+
};
|
|
85
|
+
this.activeCoordinations.set(coordinationPlan.id, coordinationPlan);
|
|
86
|
+
// Execute coordination with swarm if available
|
|
87
|
+
if (this.swarmEnabled) {
|
|
88
|
+
await this.executeWithSwarm(coordinationPlan);
|
|
89
|
+
} else {
|
|
90
|
+
await this.executeCoordination(coordinationPlan);
|
|
91
|
+
}
|
|
92
|
+
return coordinationPlan;
|
|
81
93
|
}
|
|
82
|
-
|
|
83
|
-
const { owner, repo } = this.currentRepo;
|
|
84
|
-
const pipeline = options.pipeline || 'nodejs';
|
|
85
|
-
const autoApprove = options.autoApprove || false;
|
|
86
|
-
|
|
87
|
-
// Create workflow coordination plan
|
|
88
|
-
const coordinationPlan = {
|
|
89
|
-
id: `ci-setup-${Date.now()}`,
|
|
90
|
-
type: 'ci_pipeline_setup',
|
|
91
|
-
repository: `${owner}/${repo}`,
|
|
92
|
-
pipeline,
|
|
93
|
-
steps: [
|
|
94
|
-
'analyze_repository_structure',
|
|
95
|
-
'create_workflow_files',
|
|
96
|
-
'setup_environment_secrets',
|
|
97
|
-
'configure_branch_protection',
|
|
98
|
-
'test_pipeline_execution',
|
|
99
|
-
'setup_notifications',
|
|
100
|
-
],
|
|
101
|
-
status: 'planning',
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
this.activeCoordinations.set(coordinationPlan.id, coordinationPlan);
|
|
105
|
-
|
|
106
|
-
// Execute coordination with swarm if available
|
|
107
|
-
if (this.swarmEnabled) {
|
|
108
|
-
await this.executeWithSwarm(coordinationPlan);
|
|
109
|
-
} else {
|
|
110
|
-
await this.executeCoordination(coordinationPlan);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return coordinationPlan;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
94
|
+
/**
|
|
117
95
|
* Execute coordination with swarm integration
|
|
118
|
-
*/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
// Execute step
|
|
136
|
-
await this.executeCoordinationStep(coordinationPlan, step);
|
|
137
|
-
|
|
138
|
-
// Post-step hook
|
|
139
|
-
execSync(
|
|
140
|
-
`npx ruv-swarm hook post-edit --file "github-coordination" --memory-key "${memoryKey}/${step}"`,
|
|
141
|
-
);
|
|
96
|
+
*/ async executeWithSwarm(coordinationPlan) {
|
|
97
|
+
printInfo('🐝 Executing coordination with swarm...');
|
|
98
|
+
// Store coordination plan in swarm memory
|
|
99
|
+
const memoryKey = `github-coordination/${coordinationPlan.id}`;
|
|
100
|
+
execSync(`npx ruv-swarm hook notification --message "GitHub Coordination: ${coordinationPlan.type} started" --telemetry true`);
|
|
101
|
+
// Execute each step with swarm coordination
|
|
102
|
+
for (const step of coordinationPlan.steps){
|
|
103
|
+
printInfo(`Executing step: ${step}`);
|
|
104
|
+
// Pre-step hook
|
|
105
|
+
execSync(`npx ruv-swarm hook pre-task --description "GitHub step: ${step}"`);
|
|
106
|
+
// Execute step
|
|
107
|
+
await this.executeCoordinationStep(coordinationPlan, step);
|
|
108
|
+
// Post-step hook
|
|
109
|
+
execSync(`npx ruv-swarm hook post-edit --file "github-coordination" --memory-key "${memoryKey}/${step}"`);
|
|
110
|
+
}
|
|
111
|
+
// Final coordination notification
|
|
112
|
+
execSync(`npx ruv-swarm hook notification --message "GitHub Coordination: ${coordinationPlan.type} completed" --telemetry true`);
|
|
142
113
|
}
|
|
143
|
-
|
|
144
|
-
// Final coordination notification
|
|
145
|
-
execSync(
|
|
146
|
-
`npx ruv-swarm hook notification --message "GitHub Coordination: ${coordinationPlan.type} completed" --telemetry true`,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
114
|
+
/**
|
|
151
115
|
* Execute coordination without swarm
|
|
152
|
-
*/
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
await this.executeCoordinationStep(coordinationPlan, step);
|
|
116
|
+
*/ async executeCoordination(coordinationPlan) {
|
|
117
|
+
printInfo('⚡ Executing coordination...');
|
|
118
|
+
for (const step of coordinationPlan.steps){
|
|
119
|
+
printInfo(`Executing step: ${step}`);
|
|
120
|
+
await this.executeCoordinationStep(coordinationPlan, step);
|
|
121
|
+
}
|
|
159
122
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
/**
|
|
123
|
+
/**
|
|
163
124
|
* Execute individual coordination step
|
|
164
|
-
*/
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
printWarning(`Unknown coordination step: ${step}`);
|
|
125
|
+
*/ async executeCoordinationStep(coordinationPlan, step) {
|
|
126
|
+
const { owner, repo } = this.currentRepo;
|
|
127
|
+
switch(step){
|
|
128
|
+
case 'analyze_repository_structure':
|
|
129
|
+
await this.analyzeRepositoryStructure(owner, repo);
|
|
130
|
+
break;
|
|
131
|
+
case 'create_workflow_files':
|
|
132
|
+
await this.createWorkflowFiles(owner, repo, coordinationPlan.pipeline);
|
|
133
|
+
break;
|
|
134
|
+
case 'setup_environment_secrets':
|
|
135
|
+
await this.setupEnvironmentSecrets(owner, repo);
|
|
136
|
+
break;
|
|
137
|
+
case 'configure_branch_protection':
|
|
138
|
+
await this.configureBranchProtection(owner, repo);
|
|
139
|
+
break;
|
|
140
|
+
case 'test_pipeline_execution':
|
|
141
|
+
await this.testPipelineExecution(owner, repo);
|
|
142
|
+
break;
|
|
143
|
+
case 'setup_notifications':
|
|
144
|
+
await this.setupNotifications(owner, repo);
|
|
145
|
+
break;
|
|
146
|
+
default:
|
|
147
|
+
printWarning(`Unknown coordination step: ${step}`);
|
|
148
|
+
}
|
|
189
149
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
/**
|
|
150
|
+
/**
|
|
193
151
|
* Analyze repository structure
|
|
194
|
-
*/
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
152
|
+
*/ async analyzeRepositoryStructure(owner, repo) {
|
|
153
|
+
printInfo('📊 Analyzing repository structure...');
|
|
154
|
+
const response = await this.api.getRepository(owner, repo);
|
|
155
|
+
if (!response.success) {
|
|
156
|
+
throw new Error(`Failed to get repository info: ${response.error}`);
|
|
157
|
+
}
|
|
158
|
+
const repoData = response.data;
|
|
159
|
+
const analysis = {
|
|
160
|
+
language: repoData.language,
|
|
161
|
+
size: repoData.size,
|
|
162
|
+
defaultBranch: repoData.default_branch,
|
|
163
|
+
hasWorkflows: false,
|
|
164
|
+
hasTests: false,
|
|
165
|
+
hasPackageJson: false
|
|
166
|
+
};
|
|
167
|
+
// Check for existing workflows
|
|
168
|
+
const workflowsResponse = await this.api.listWorkflows(owner, repo);
|
|
169
|
+
if (workflowsResponse.success) {
|
|
170
|
+
analysis.hasWorkflows = workflowsResponse.data.total_count > 0;
|
|
171
|
+
}
|
|
172
|
+
// Check for package.json (Node.js projects)
|
|
173
|
+
try {
|
|
174
|
+
const packageResponse = await this.api.request(`/repos/${owner}/${repo}/contents/package.json`);
|
|
175
|
+
analysis.hasPackageJson = packageResponse.success;
|
|
176
|
+
} catch (error) {
|
|
177
|
+
// package.json doesn't exist
|
|
178
|
+
}
|
|
179
|
+
printSuccess(`✅ Repository analysis complete: ${analysis.language} project`);
|
|
180
|
+
return analysis;
|
|
217
181
|
}
|
|
218
|
-
|
|
219
|
-
// Check for package.json (Node.js projects)
|
|
220
|
-
try {
|
|
221
|
-
const packageResponse = await this.api.request(
|
|
222
|
-
`/repos/${owner}/${repo}/contents/package.json`,
|
|
223
|
-
);
|
|
224
|
-
analysis.hasPackageJson = packageResponse.success;
|
|
225
|
-
} catch (error) {
|
|
226
|
-
// package.json doesn't exist
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
printSuccess(`✅ Repository analysis complete: ${analysis.language} project`);
|
|
230
|
-
return analysis;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
182
|
+
/**
|
|
234
183
|
* Create workflow files
|
|
235
|
-
*/
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (response.success) {
|
|
263
|
-
printSuccess(`✅ Workflow file created: ${workflowPath}`);
|
|
264
|
-
} else {
|
|
265
|
-
throw new Error(`Failed to create workflow file: ${response.error}`);
|
|
184
|
+
*/ async createWorkflowFiles(owner, repo, pipeline) {
|
|
185
|
+
printInfo('📝 Creating workflow files...');
|
|
186
|
+
const workflowContent = this.generateWorkflowContent(pipeline);
|
|
187
|
+
const workflowPath = `.github/workflows/${pipeline}-ci.yml`;
|
|
188
|
+
// Create workflow file content
|
|
189
|
+
const createFileData = {
|
|
190
|
+
message: `Add ${pipeline} CI workflow`,
|
|
191
|
+
content: Buffer.from(workflowContent).toString('base64'),
|
|
192
|
+
path: workflowPath
|
|
193
|
+
};
|
|
194
|
+
// Check if file exists
|
|
195
|
+
const existingFile = await this.api.request(`/repos/${owner}/${repo}/contents/${workflowPath}`);
|
|
196
|
+
if (existingFile.success) {
|
|
197
|
+
// Update existing file
|
|
198
|
+
createFileData.sha = existingFile.data.sha;
|
|
199
|
+
createFileData.message = `Update ${pipeline} CI workflow`;
|
|
200
|
+
}
|
|
201
|
+
const response = await this.api.request(`/repos/${owner}/${repo}/contents/${workflowPath}`, {
|
|
202
|
+
method: 'PUT',
|
|
203
|
+
body: createFileData
|
|
204
|
+
});
|
|
205
|
+
if (response.success) {
|
|
206
|
+
printSuccess(`✅ Workflow file created: ${workflowPath}`);
|
|
207
|
+
} else {
|
|
208
|
+
throw new Error(`Failed to create workflow file: ${response.error}`);
|
|
209
|
+
}
|
|
266
210
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
/**
|
|
211
|
+
/**
|
|
270
212
|
* Generate workflow content based on pipeline type
|
|
271
|
-
*/
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
nodejs: `name: Node.js CI
|
|
213
|
+
*/ generateWorkflowContent(pipeline) {
|
|
214
|
+
const templates = {
|
|
215
|
+
nodejs: `name: Node.js CI
|
|
275
216
|
|
|
276
217
|
on:
|
|
277
218
|
push:
|
|
@@ -319,8 +260,7 @@ jobs:
|
|
|
319
260
|
- name: Check for vulnerabilities
|
|
320
261
|
run: npm audit --audit-level high
|
|
321
262
|
`,
|
|
322
|
-
|
|
323
|
-
python: `name: Python CI
|
|
263
|
+
python: `name: Python CI
|
|
324
264
|
|
|
325
265
|
on:
|
|
326
266
|
push:
|
|
@@ -358,8 +298,7 @@ jobs:
|
|
|
358
298
|
with:
|
|
359
299
|
file: ./coverage.xml
|
|
360
300
|
`,
|
|
361
|
-
|
|
362
|
-
docker: `name: Docker CI
|
|
301
|
+
docker: `name: Docker CI
|
|
363
302
|
|
|
364
303
|
on:
|
|
365
304
|
push:
|
|
@@ -386,220 +325,202 @@ jobs:
|
|
|
386
325
|
image-ref: 'app'
|
|
387
326
|
format: 'sarif'
|
|
388
327
|
output: 'trivy-results.sarif'
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
/**
|
|
328
|
+
`
|
|
329
|
+
};
|
|
330
|
+
return templates[pipeline] || templates.nodejs;
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
396
333
|
* Setup environment secrets
|
|
397
|
-
*/
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
334
|
+
*/ async setupEnvironmentSecrets(owner, repo) {
|
|
335
|
+
printInfo('🔐 Setting up environment secrets...');
|
|
336
|
+
const secrets = [
|
|
337
|
+
{
|
|
338
|
+
name: 'NODE_ENV',
|
|
339
|
+
description: 'Node.js environment'
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: 'DATABASE_URL',
|
|
343
|
+
description: 'Database connection string'
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
name: 'API_KEY',
|
|
347
|
+
description: 'API authentication key'
|
|
348
|
+
}
|
|
349
|
+
];
|
|
350
|
+
printInfo('Recommended secrets to configure:');
|
|
351
|
+
secrets.forEach((secret)=>{
|
|
352
|
+
console.log(` - ${secret.name}: ${secret.description}`);
|
|
353
|
+
});
|
|
354
|
+
printWarning('Note: Secrets must be configured manually in GitHub repository settings');
|
|
355
|
+
printSuccess('✅ Environment secrets guidance provided');
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
417
358
|
* Configure branch protection
|
|
418
|
-
*/
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
printWarning(`⚠️ Failed to configure branch protection: ${response.error}`);
|
|
359
|
+
*/ async configureBranchProtection(owner, repo) {
|
|
360
|
+
printInfo('🛡️ Configuring branch protection...');
|
|
361
|
+
const protectionConfig = {
|
|
362
|
+
required_status_checks: {
|
|
363
|
+
strict: true,
|
|
364
|
+
contexts: [
|
|
365
|
+
'test'
|
|
366
|
+
]
|
|
367
|
+
},
|
|
368
|
+
enforce_admins: true,
|
|
369
|
+
required_pull_request_reviews: {
|
|
370
|
+
required_approving_review_count: 1,
|
|
371
|
+
dismiss_stale_reviews: true
|
|
372
|
+
},
|
|
373
|
+
restrictions: null
|
|
374
|
+
};
|
|
375
|
+
const response = await this.api.updateBranchProtection(owner, repo, 'main', protectionConfig);
|
|
376
|
+
if (response.success) {
|
|
377
|
+
printSuccess('✅ Branch protection configured for main branch');
|
|
378
|
+
} else {
|
|
379
|
+
printWarning(`⚠️ Failed to configure branch protection: ${response.error}`);
|
|
380
|
+
}
|
|
441
381
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
/**
|
|
382
|
+
/**
|
|
445
383
|
* Test pipeline execution
|
|
446
|
-
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
384
|
+
*/ async testPipelineExecution(owner, repo) {
|
|
385
|
+
printInfo('🧪 Testing pipeline execution...');
|
|
386
|
+
const workflows = await this.api.listWorkflows(owner, repo);
|
|
387
|
+
if (!workflows.success) {
|
|
388
|
+
printWarning('No workflows found to test');
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const recentRuns = await this.api.listWorkflowRuns(owner, repo, {
|
|
392
|
+
per_page: 5
|
|
393
|
+
});
|
|
394
|
+
if (recentRuns.success) {
|
|
395
|
+
printInfo(`Found ${recentRuns.data.total_count} recent workflow runs`);
|
|
396
|
+
const latestRun = recentRuns.data.workflow_runs[0];
|
|
397
|
+
if (latestRun) {
|
|
398
|
+
printInfo(`Latest run: ${latestRun.conclusion} (${latestRun.status})`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
printSuccess('✅ Pipeline execution status checked');
|
|
464
402
|
}
|
|
465
|
-
|
|
466
|
-
printSuccess('✅ Pipeline execution status checked');
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
/**
|
|
403
|
+
/**
|
|
470
404
|
* Setup notifications
|
|
471
|
-
*/
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
/**
|
|
494
|
-
* Coordinate release process
|
|
495
|
-
*/
|
|
496
|
-
async coordinateRelease(options = {}) {
|
|
497
|
-
printInfo('🚀 Coordinating release process...');
|
|
498
|
-
|
|
499
|
-
if (!this.currentRepo) {
|
|
500
|
-
throw new Error('No GitHub repository context available');
|
|
405
|
+
*/ async setupNotifications(owner, repo) {
|
|
406
|
+
printInfo('📢 Setting up notifications...');
|
|
407
|
+
const webhookConfig = {
|
|
408
|
+
name: 'web',
|
|
409
|
+
active: true,
|
|
410
|
+
events: [
|
|
411
|
+
'push',
|
|
412
|
+
'pull_request',
|
|
413
|
+
'issues',
|
|
414
|
+
'workflow_run'
|
|
415
|
+
],
|
|
416
|
+
config: {
|
|
417
|
+
url: 'https://your-webhook-url.com/github',
|
|
418
|
+
content_type: 'json',
|
|
419
|
+
insecure_ssl: '0'
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
printInfo('Webhook configuration template:');
|
|
423
|
+
console.log(JSON.stringify(webhookConfig, null, 2));
|
|
424
|
+
printWarning('Note: Webhook URL must be configured with your actual endpoint');
|
|
425
|
+
printSuccess('✅ Notification setup guidance provided');
|
|
501
426
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
427
|
+
/**
|
|
428
|
+
* Coordinate release process
|
|
429
|
+
*/ async coordinateRelease(options = {}) {
|
|
430
|
+
printInfo('🚀 Coordinating release process...');
|
|
431
|
+
if (!this.currentRepo) {
|
|
432
|
+
throw new Error('No GitHub repository context available');
|
|
433
|
+
}
|
|
434
|
+
const { owner, repo } = this.currentRepo;
|
|
435
|
+
const version = options.version || 'auto';
|
|
436
|
+
const prerelease = options.prerelease || false;
|
|
437
|
+
const coordinationPlan = {
|
|
438
|
+
id: `release-${Date.now()}`,
|
|
439
|
+
type: 'release_coordination',
|
|
440
|
+
repository: `${owner}/${repo}`,
|
|
441
|
+
version,
|
|
442
|
+
prerelease,
|
|
443
|
+
steps: [
|
|
444
|
+
'prepare_release_notes',
|
|
445
|
+
'create_release_branch',
|
|
446
|
+
'run_release_tests',
|
|
447
|
+
'create_release_tag',
|
|
448
|
+
'publish_release',
|
|
449
|
+
'notify_stakeholders'
|
|
450
|
+
],
|
|
451
|
+
status: 'planning'
|
|
452
|
+
};
|
|
453
|
+
this.activeCoordinations.set(coordinationPlan.id, coordinationPlan);
|
|
454
|
+
if (this.swarmEnabled) {
|
|
455
|
+
await this.executeWithSwarm(coordinationPlan);
|
|
456
|
+
} else {
|
|
457
|
+
await this.executeCoordination(coordinationPlan);
|
|
458
|
+
}
|
|
459
|
+
return coordinationPlan;
|
|
530
460
|
}
|
|
531
|
-
|
|
532
|
-
return coordinationPlan;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
/**
|
|
461
|
+
/**
|
|
536
462
|
* Get coordination status
|
|
537
|
-
*/
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
/**
|
|
463
|
+
*/ getCoordinationStatus(coordinationId) {
|
|
464
|
+
return this.activeCoordinations.get(coordinationId) || null;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
543
467
|
* List active coordinations
|
|
544
|
-
*/
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
/**
|
|
468
|
+
*/ listActiveCoordinations() {
|
|
469
|
+
return Array.from(this.activeCoordinations.values());
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
550
472
|
* Cancel coordination
|
|
551
|
-
*/
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
473
|
+
*/ cancelCoordination(coordinationId) {
|
|
474
|
+
const coordination = this.activeCoordinations.get(coordinationId);
|
|
475
|
+
if (coordination) {
|
|
476
|
+
coordination.status = 'cancelled';
|
|
477
|
+
this.activeCoordinations.delete(coordinationId);
|
|
478
|
+
printSuccess(`✅ Coordination ${coordinationId} cancelled`);
|
|
479
|
+
return true;
|
|
480
|
+
}
|
|
481
|
+
return false;
|
|
559
482
|
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
483
|
+
constructor(){
|
|
484
|
+
this.api = githubAPI;
|
|
485
|
+
this.workflows = new Map();
|
|
486
|
+
this.activeCoordinations = new Map();
|
|
487
|
+
}
|
|
488
|
+
};
|
|
564
489
|
// Export coordination function
|
|
565
490
|
export async function coordinateGitHubWorkflow(args, flags = {}) {
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
491
|
+
const coordinator = new GitHubCoordinator();
|
|
492
|
+
try {
|
|
493
|
+
await coordinator.initialize(flags);
|
|
494
|
+
const objective = args.join(' ').trim();
|
|
495
|
+
if (objective.includes('CI/CD') || objective.includes('pipeline')) {
|
|
496
|
+
return await coordinator.coordinateCIPipeline(flags);
|
|
497
|
+
} else if (objective.includes('release')) {
|
|
498
|
+
return await coordinator.coordinateRelease(flags);
|
|
499
|
+
} else {
|
|
500
|
+
// General coordination
|
|
501
|
+
printInfo(`🎯 Coordinating: ${objective}`);
|
|
502
|
+
const coordinationPlan = {
|
|
503
|
+
id: `general-${Date.now()}`,
|
|
504
|
+
type: 'general_coordination',
|
|
505
|
+
objective,
|
|
506
|
+
steps: [
|
|
507
|
+
'analyze_requirements',
|
|
508
|
+
'create_action_plan',
|
|
509
|
+
'execute_plan'
|
|
510
|
+
],
|
|
511
|
+
status: 'planning'
|
|
512
|
+
};
|
|
513
|
+
coordinator.activeCoordinations.set(coordinationPlan.id, coordinationPlan);
|
|
514
|
+
if (coordinator.swarmEnabled) {
|
|
515
|
+
await coordinator.executeWithSwarm(coordinationPlan);
|
|
516
|
+
} else {
|
|
517
|
+
await coordinator.executeCoordination(coordinationPlan);
|
|
518
|
+
}
|
|
519
|
+
return coordinationPlan;
|
|
520
|
+
}
|
|
521
|
+
} catch (error) {
|
|
522
|
+
printError(`❌ GitHub coordination failed: ${error.message}`);
|
|
523
|
+
throw error;
|
|
598
524
|
}
|
|
599
|
-
} catch (error) {
|
|
600
|
-
printError(`❌ GitHub coordination failed: ${error.message}`);
|
|
601
|
-
throw error;
|
|
602
|
-
}
|
|
603
525
|
}
|
|
604
|
-
|
|
605
526
|
export default GitHubCoordinator;
|