claude-flow-novice 1.3.0 → 1.3.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 (305) hide show
  1. package/.claude-flow-novice/preferences/generation.json +147 -0
  2. package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
  3. package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
  4. package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
  5. package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
  6. package/.claude-flow-novice/preferences/project-local.json +91 -0
  7. package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
  8. package/.claude-flow-novice/preferences/team-shared.json +195 -0
  9. package/.claude-flow-novice/preferences/user-global.json +247 -0
  10. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
  11. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
  12. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
  13. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
  14. package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
  15. package/CLAUDE.md +81 -0
  16. package/README-NPM.md +0 -0
  17. package/package.json +11 -7
  18. package/scripts/build/README.md +167 -0
  19. package/scripts/build/build-config.js +27 -0
  20. package/scripts/build/build-prompt-copier.sh +30 -0
  21. package/scripts/build/performance-monitor.js +869 -0
  22. package/scripts/build/prepare-publish.js +150 -0
  23. package/scripts/build/typescript-fixer.js +621 -0
  24. package/scripts/build/unified-builder.sh +428 -0
  25. package/scripts/build/update-bin-version.js +32 -0
  26. package/scripts/dev/README.md +264 -0
  27. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  28. package/scripts/dev/claude-monitor.py +419 -0
  29. package/scripts/dev/claude-sparc.sh +562 -0
  30. package/scripts/dev/claude-wrapper.sh +17 -0
  31. package/scripts/dev/demo-phase3-compliance.js +172 -0
  32. package/scripts/dev/demo-task-system.ts +224 -0
  33. package/scripts/dev/deployment-validator.js +315 -0
  34. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  35. package/scripts/dev/start-portal.sh +506 -0
  36. package/scripts/dev/start-web-ui.js +15 -0
  37. package/scripts/dev/stop-portal.sh +311 -0
  38. package/scripts/dev/validate-examples.ts +288 -0
  39. package/scripts/dev/validate-phase2.cjs +451 -0
  40. package/scripts/dev/validate-phase2.js +785 -0
  41. package/scripts/dev/validate-phase3.cjs +208 -0
  42. package/scripts/dev/validate-security-remediation.js +1 -0
  43. package/scripts/legacy/README.md +272 -0
  44. package/scripts/legacy/batch-fix-ts.sh +54 -0
  45. package/scripts/legacy/build-migration.sh +105 -0
  46. package/scripts/legacy/build-monitor.js +209 -0
  47. package/scripts/legacy/build-with-filter.sh +84 -0
  48. package/scripts/legacy/build-workaround.sh +71 -0
  49. package/scripts/legacy/fix-ts-advanced.js +358 -0
  50. package/scripts/legacy/fix-ts-final.sh +50 -0
  51. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  52. package/scripts/legacy/fix-typescript-errors.js +305 -0
  53. package/scripts/legacy/force-build.sh +63 -0
  54. package/scripts/legacy/optimize-performance.js +400 -0
  55. package/scripts/legacy/performance-monitor.js +263 -0
  56. package/scripts/legacy/performance-monitoring.js +532 -0
  57. package/scripts/legacy/performance-test-runner.js +645 -0
  58. package/scripts/legacy/quick-fix-ts.js +281 -0
  59. package/scripts/legacy/safe-build.sh +63 -0
  60. package/scripts/migration/README.md +434 -0
  61. package/scripts/migration/install-arm64.js +78 -0
  62. package/scripts/migration/install.js +83 -0
  63. package/scripts/migration/migrate-hooks.js +173 -0
  64. package/scripts/migration/migration-examples.ts +318 -0
  65. package/scripts/optimization/build-optimizer.js +438 -0
  66. package/scripts/optimization/config-validator.js +761 -0
  67. package/scripts/optimization/test-optimization.js +432 -0
  68. package/scripts/optimization/unified-activation.js +839 -0
  69. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  70. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  71. package/scripts/performance/test-enhanced-backend.sh +504 -0
  72. package/scripts/performance-test-runner.js +698 -0
  73. package/scripts/security/README.md +339 -0
  74. package/scripts/security/install-git-hooks.sh +132 -0
  75. package/scripts/security/ruv-swarm-safe.js +74 -0
  76. package/scripts/test/README.md +236 -0
  77. package/scripts/test/check-links.ts +274 -0
  78. package/scripts/test/check-performance-regression.ts +168 -0
  79. package/scripts/test/coverage-report.ts +692 -0
  80. package/scripts/test/generate-swarm-tests.js +633 -0
  81. package/scripts/test/integration-test-validation.cjs +253 -0
  82. package/scripts/test/load-test-swarm.js +576 -0
  83. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  84. package/scripts/test/test-batch-tasks.ts +29 -0
  85. package/scripts/test/test-byzantine-resolution.js +246 -0
  86. package/scripts/test/test-claude-spawn-options.sh +63 -0
  87. package/scripts/test/test-cli-wizard.js +331 -0
  88. package/scripts/test/test-comprehensive.js +401 -0
  89. package/scripts/test/test-coordination-features.ts +238 -0
  90. package/scripts/test/test-fallback-systems.js +276 -0
  91. package/scripts/test/test-init-command.ts +302 -0
  92. package/scripts/test/test-mcp.ts +251 -0
  93. package/scripts/test/test-runner.ts +568 -0
  94. package/scripts/test/test-swarm-integration.sh +92 -0
  95. package/scripts/test/test-swarm.ts +142 -0
  96. package/scripts/test/validation-summary.ts +408 -0
  97. package/scripts/utils/README.md +261 -0
  98. package/scripts/utils/clean-build-artifacts.sh +94 -0
  99. package/scripts/utils/cleanup-root.sh +69 -0
  100. package/scripts/utils/fix-cliffy-imports.js +307 -0
  101. package/scripts/utils/fix-duplicate-imports.js +114 -0
  102. package/scripts/utils/fix-error-handling.cjs +70 -0
  103. package/scripts/utils/fix-import-paths.js +104 -0
  104. package/scripts/utils/fix-imports.js +116 -0
  105. package/scripts/utils/fix-shebang.js +78 -0
  106. package/scripts/utils/fix-test-modules.js +27 -0
  107. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  108. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  109. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  110. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  111. package/scripts/utils/simple-test-fixer.js +190 -0
  112. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  113. package/scripts/verify-mcp-server.js +86 -0
  114. package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
  115. package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
  116. package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
  117. package/src/cli/simple-commands/__tests__/task.test.js +8 -0
  118. package/src/cli/simple-commands/agent.js +216 -0
  119. package/src/cli/simple-commands/analysis.js +570 -0
  120. package/src/cli/simple-commands/automation-executor.js +1603 -0
  121. package/src/cli/simple-commands/automation.js +627 -0
  122. package/src/cli/simple-commands/batch-manager.js +338 -0
  123. package/src/cli/simple-commands/claude-telemetry.js +311 -0
  124. package/src/cli/simple-commands/claude-track.js +102 -0
  125. package/src/cli/simple-commands/concurrent-display.js +348 -0
  126. package/src/cli/simple-commands/config.js +319 -0
  127. package/src/cli/simple-commands/coordination.js +307 -0
  128. package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
  129. package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
  130. package/src/cli/simple-commands/fix-hook-variables.js +363 -0
  131. package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
  132. package/src/cli/simple-commands/github/github-api.js +624 -0
  133. package/src/cli/simple-commands/github/init.js +543 -0
  134. package/src/cli/simple-commands/github.js +377 -0
  135. package/src/cli/simple-commands/goal.js +145 -0
  136. package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
  137. package/src/cli/simple-commands/hive-mind/communication.js +740 -0
  138. package/src/cli/simple-commands/hive-mind/core.js +1031 -0
  139. package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
  140. package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
  141. package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
  142. package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
  143. package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
  144. package/src/cli/simple-commands/hive-mind/queen.js +809 -0
  145. package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
  146. package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
  147. package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
  148. package/src/cli/simple-commands/hive-mind.js +3112 -0
  149. package/src/cli/simple-commands/hive.js +140 -0
  150. package/src/cli/simple-commands/hook-safety.js +671 -0
  151. package/src/cli/simple-commands/hooks.js +1268 -0
  152. package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
  153. package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
  154. package/src/cli/simple-commands/init/README.md +106 -0
  155. package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
  156. package/src/cli/simple-commands/init/agent-copier.js +347 -0
  157. package/src/cli/simple-commands/init/batch-init.js +663 -0
  158. package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
  159. package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
  160. package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
  161. package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
  162. package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
  163. package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
  164. package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
  165. package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
  166. package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
  167. package/src/cli/simple-commands/init/help.js +110 -0
  168. package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
  169. package/src/cli/simple-commands/init/index.js +1953 -0
  170. package/src/cli/simple-commands/init/performance-monitor.js +344 -0
  171. package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
  172. package/src/cli/simple-commands/init/rollback/index.js +399 -0
  173. package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
  174. package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
  175. package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
  176. package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
  177. package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
  178. package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
  179. package/src/cli/simple-commands/init/sparc-structure.js +68 -0
  180. package/src/cli/simple-commands/init/template-copier.js +640 -0
  181. package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
  182. package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
  183. package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
  184. package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
  185. package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
  186. package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
  187. package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
  188. package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
  189. package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
  190. package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
  191. package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
  192. package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
  193. package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
  194. package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
  195. package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
  196. package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
  197. package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
  198. package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
  199. package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
  200. package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
  201. package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
  202. package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
  203. package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
  204. package/src/cli/simple-commands/init/templates/coordination.md +16 -0
  205. package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
  206. package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
  207. package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
  208. package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
  209. package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
  210. package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
  211. package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
  212. package/src/cli/simple-commands/init/templates/settings.json +109 -0
  213. package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
  214. package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
  215. package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
  216. package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
  217. package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
  218. package/src/cli/simple-commands/init/validation/index.js +388 -0
  219. package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
  220. package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
  221. package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
  222. package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
  223. package/src/cli/simple-commands/init.js +4 -0
  224. package/src/cli/simple-commands/mcp-health.js +163 -0
  225. package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
  226. package/src/cli/simple-commands/mcp.js +420 -0
  227. package/src/cli/simple-commands/memory-consolidation.js +631 -0
  228. package/src/cli/simple-commands/memory.js +345 -0
  229. package/src/cli/simple-commands/migrate-hooks.js +63 -0
  230. package/src/cli/simple-commands/monitor.js +417 -0
  231. package/src/cli/simple-commands/neural.js +148 -0
  232. package/src/cli/simple-commands/pair-autofix-only.js +755 -0
  233. package/src/cli/simple-commands/pair-basic.js +751 -0
  234. package/src/cli/simple-commands/pair-old.js +623 -0
  235. package/src/cli/simple-commands/pair-working.js +849 -0
  236. package/src/cli/simple-commands/pair.js +849 -0
  237. package/src/cli/simple-commands/performance-hooks.js +149 -0
  238. package/src/cli/simple-commands/performance-metrics.js +601 -0
  239. package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
  240. package/src/cli/simple-commands/process-ui.js +274 -0
  241. package/src/cli/simple-commands/realtime-update-system.js +659 -0
  242. package/src/cli/simple-commands/sparc/architecture.js +1750 -0
  243. package/src/cli/simple-commands/sparc/commands.js +575 -0
  244. package/src/cli/simple-commands/sparc/completion.js +1831 -0
  245. package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
  246. package/src/cli/simple-commands/sparc/index.js +321 -0
  247. package/src/cli/simple-commands/sparc/phase-base.js +430 -0
  248. package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
  249. package/src/cli/simple-commands/sparc/refinement.js +1856 -0
  250. package/src/cli/simple-commands/sparc/specification.js +736 -0
  251. package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
  252. package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
  253. package/src/cli/simple-commands/sparc-modes/code.js +148 -0
  254. package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
  255. package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
  256. package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
  257. package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
  258. package/src/cli/simple-commands/sparc-modes/index.js +201 -0
  259. package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
  260. package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
  261. package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
  262. package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
  263. package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
  264. package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
  265. package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
  266. package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
  267. package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
  268. package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
  269. package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
  270. package/src/cli/simple-commands/sparc.js +530 -0
  271. package/src/cli/simple-commands/start-ui.js +147 -0
  272. package/src/cli/simple-commands/start-wrapper.js +285 -0
  273. package/src/cli/simple-commands/start.js +2 -0
  274. package/src/cli/simple-commands/status.js +303 -0
  275. package/src/cli/simple-commands/stream-chain-clean.js +221 -0
  276. package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
  277. package/src/cli/simple-commands/stream-chain-real.js +408 -0
  278. package/src/cli/simple-commands/stream-chain-working.js +323 -0
  279. package/src/cli/simple-commands/stream-chain.js +491 -0
  280. package/src/cli/simple-commands/stream-processor.js +340 -0
  281. package/src/cli/simple-commands/swarm-executor.js +253 -0
  282. package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
  283. package/src/cli/simple-commands/swarm-ui.js +741 -0
  284. package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
  285. package/src/cli/simple-commands/swarm.js +2277 -0
  286. package/src/cli/simple-commands/task.js +228 -0
  287. package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
  288. package/src/cli/simple-commands/timestamp-fix.js +104 -0
  289. package/src/cli/simple-commands/token-tracker.js +372 -0
  290. package/src/cli/simple-commands/tool-execution-framework.js +555 -0
  291. package/src/cli/simple-commands/train-and-stream.js +354 -0
  292. package/src/cli/simple-commands/training-pipeline.js +874 -0
  293. package/src/cli/simple-commands/training.js +288 -0
  294. package/src/cli/simple-commands/verification-hooks.js +336 -0
  295. package/src/cli/simple-commands/verification-integration.js +464 -0
  296. package/src/cli/simple-commands/verification-training-integration.js +646 -0
  297. package/src/cli/simple-commands/verification.js +551 -0
  298. package/src/cli/simple-commands/web-server.js +929 -0
  299. package/src/cli/simple-commands/webui-validator.js +136 -0
  300. package/src/language/README.md +503 -0
  301. package/src/language/claude-md-generator.js +618 -0
  302. package/src/language/cli.js +422 -0
  303. package/src/language/example.js +347 -0
  304. package/src/language/integration-system.js +619 -0
  305. package/src/language/language-detector.js +581 -0
@@ -0,0 +1,624 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * GitHub API Integration Module
4
+ * Provides authentication, rate limiting, and API wrappers for GitHub workflow commands
5
+ *
6
+ * Enhanced with GitHub CLI Safety Wrapper for secure command execution
7
+ */
8
+
9
+ import { printSuccess, printError, printWarning, printInfo } from '../utils.js';
10
+ import { githubCli, GitHubCliSafe } from '../../utils/github-cli-safety-wrapper.js';
11
+
12
+ // GitHub API Configuration
13
+ const GITHUB_API_BASE = 'https://api.github.com';
14
+ const GITHUB_RATE_LIMIT = 5000; // API calls per hour
15
+ const GITHUB_WEBHOOK_SECRET = process.env.GITHUB_WEBHOOK_SECRET;
16
+
17
+ class GitHubAPIClient {
18
+ constructor(token = null) {
19
+ this.token = token || process.env.GITHUB_TOKEN;
20
+ this.rateLimitRemaining = GITHUB_RATE_LIMIT;
21
+ this.rateLimitResetTime = null;
22
+ this.lastRequestTime = 0;
23
+ this.requestQueue = [];
24
+ this.isProcessingQueue = false;
25
+
26
+ // Initialize GitHub CLI safety wrapper
27
+ this.cliSafe = new GitHubCliSafe({
28
+ timeout: 60000, // 1 minute timeout for CLI operations
29
+ maxRetries: 3,
30
+ enableRateLimit: true,
31
+ enableLogging: false, // Can be enabled for debugging
32
+ });
33
+ }
34
+
35
+ /**
36
+ * Authentication Methods
37
+ */
38
+ async authenticate(token = null) {
39
+ if (token) {
40
+ this.token = token;
41
+ }
42
+
43
+ if (!this.token) {
44
+ printError('GitHub token not found. Set GITHUB_TOKEN environment variable or provide token.');
45
+ return false;
46
+ }
47
+
48
+ try {
49
+ const response = await this.request('/user');
50
+ if (response.success) {
51
+ printSuccess(`Authenticated as ${response.data.login}`);
52
+ return true;
53
+ }
54
+ return false;
55
+ } catch (error) {
56
+ printError(`Authentication failed: ${error.message}`);
57
+ return false;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Rate Limiting Management
63
+ */
64
+ async checkRateLimit() {
65
+ if (this.rateLimitRemaining <= 1) {
66
+ const resetTime = new Date(this.rateLimitResetTime);
67
+ const now = new Date();
68
+ const waitTime = resetTime.getTime() - now.getTime();
69
+
70
+ if (waitTime > 0) {
71
+ printWarning(`Rate limit exceeded. Waiting ${Math.ceil(waitTime / 1000)}s...`);
72
+ await this.sleep(waitTime);
73
+ }
74
+ }
75
+ }
76
+
77
+ updateRateLimitInfo(headers) {
78
+ this.rateLimitRemaining = parseInt(headers['x-ratelimit-remaining'] || '0');
79
+ this.rateLimitResetTime = new Date((parseInt(headers['x-ratelimit-reset']) || 0) * 1000);
80
+ }
81
+
82
+ /**
83
+ * Core API Request Method
84
+ */
85
+ async request(endpoint, options = {}) {
86
+ await this.checkRateLimit();
87
+
88
+ const url = endpoint.startsWith('http') ? endpoint : `${GITHUB_API_BASE}${endpoint}`;
89
+ const headers = {
90
+ Authorization: `token ${this.token}`,
91
+ Accept: 'application/vnd.github.v3+json',
92
+ 'User-Agent': 'Claude-Flow-GitHub-Integration',
93
+ ...options.headers,
94
+ };
95
+
96
+ const requestOptions = {
97
+ method: options.method || 'GET',
98
+ headers,
99
+ ...options,
100
+ };
101
+
102
+ if (options.body) {
103
+ requestOptions.body = JSON.stringify(options.body);
104
+ headers['Content-Type'] = 'application/json';
105
+ }
106
+
107
+ try {
108
+ const response = await fetch(url, requestOptions);
109
+ this.updateRateLimitInfo(response.headers);
110
+
111
+ const data = await response.json();
112
+
113
+ if (!response.ok) {
114
+ throw new Error(`GitHub API error: ${data.message || response.statusText}`);
115
+ }
116
+
117
+ return {
118
+ success: true,
119
+ data,
120
+ headers: response.headers,
121
+ status: response.status,
122
+ };
123
+ } catch (error) {
124
+ return {
125
+ success: false,
126
+ error: error.message,
127
+ status: error.status || 500,
128
+ };
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Repository Operations
134
+ */
135
+ async getRepository(owner, repo) {
136
+ return await this.request(`/repos/${owner}/${repo}`);
137
+ }
138
+
139
+ async listRepositories(options = {}) {
140
+ const params = new URLSearchParams({
141
+ sort: options.sort || 'updated',
142
+ direction: options.direction || 'desc',
143
+ per_page: options.perPage || 30,
144
+ page: options.page || 1,
145
+ });
146
+
147
+ return await this.request(`/user/repos?${params}`);
148
+ }
149
+
150
+ async createRepository(repoData) {
151
+ return await this.request('/user/repos', {
152
+ method: 'POST',
153
+ body: repoData,
154
+ });
155
+ }
156
+
157
+ /**
158
+ * Pull Request Operations
159
+ */
160
+ async listPullRequests(owner, repo, options = {}) {
161
+ const params = new URLSearchParams({
162
+ state: options.state || 'open',
163
+ sort: options.sort || 'created',
164
+ direction: options.direction || 'desc',
165
+ per_page: options.perPage || 30,
166
+ page: options.page || 1,
167
+ });
168
+
169
+ return await this.request(`/repos/${owner}/${repo}/pulls?${params}`);
170
+ }
171
+
172
+ async createPullRequest(owner, repo, prData) {
173
+ return await this.request(`/repos/${owner}/${repo}/pulls`, {
174
+ method: 'POST',
175
+ body: prData,
176
+ });
177
+ }
178
+
179
+ async updatePullRequest(owner, repo, prNumber, prData) {
180
+ return await this.request(`/repos/${owner}/${repo}/pulls/${prNumber}`, {
181
+ method: 'PATCH',
182
+ body: prData,
183
+ });
184
+ }
185
+
186
+ async mergePullRequest(owner, repo, prNumber, mergeData) {
187
+ return await this.request(`/repos/${owner}/${repo}/pulls/${prNumber}/merge`, {
188
+ method: 'PUT',
189
+ body: mergeData,
190
+ });
191
+ }
192
+
193
+ async requestPullRequestReview(owner, repo, prNumber, reviewData) {
194
+ return await this.request(`/repos/${owner}/${repo}/pulls/${prNumber}/requested_reviewers`, {
195
+ method: 'POST',
196
+ body: reviewData,
197
+ });
198
+ }
199
+
200
+ /**
201
+ * Issue Operations
202
+ */
203
+ async listIssues(owner, repo, options = {}) {
204
+ const params = new URLSearchParams({
205
+ state: options.state || 'open',
206
+ sort: options.sort || 'created',
207
+ direction: options.direction || 'desc',
208
+ per_page: options.perPage || 30,
209
+ page: options.page || 1,
210
+ });
211
+
212
+ if (options.labels) {
213
+ params.append('labels', options.labels);
214
+ }
215
+
216
+ return await this.request(`/repos/${owner}/${repo}/issues?${params}`);
217
+ }
218
+
219
+ async createIssue(owner, repo, issueData) {
220
+ return await this.request(`/repos/${owner}/${repo}/issues`, {
221
+ method: 'POST',
222
+ body: issueData,
223
+ });
224
+ }
225
+
226
+ async updateIssue(owner, repo, issueNumber, issueData) {
227
+ return await this.request(`/repos/${owner}/${repo}/issues/${issueNumber}`, {
228
+ method: 'PATCH',
229
+ body: issueData,
230
+ });
231
+ }
232
+
233
+ async addIssueLabels(owner, repo, issueNumber, labels) {
234
+ return await this.request(`/repos/${owner}/${repo}/issues/${issueNumber}/labels`, {
235
+ method: 'POST',
236
+ body: { labels },
237
+ });
238
+ }
239
+
240
+ async assignIssue(owner, repo, issueNumber, assignees) {
241
+ return await this.request(`/repos/${owner}/${repo}/issues/${issueNumber}/assignees`, {
242
+ method: 'POST',
243
+ body: { assignees },
244
+ });
245
+ }
246
+
247
+ /**
248
+ * Release Operations
249
+ */
250
+ async listReleases(owner, repo, options = {}) {
251
+ const params = new URLSearchParams({
252
+ per_page: options.perPage || 30,
253
+ page: options.page || 1,
254
+ });
255
+
256
+ return await this.request(`/repos/${owner}/${repo}/releases?${params}`);
257
+ }
258
+
259
+ async createRelease(owner, repo, releaseData) {
260
+ return await this.request(`/repos/${owner}/${repo}/releases`, {
261
+ method: 'POST',
262
+ body: releaseData,
263
+ });
264
+ }
265
+
266
+ async updateRelease(owner, repo, releaseId, releaseData) {
267
+ return await this.request(`/repos/${owner}/${repo}/releases/${releaseId}`, {
268
+ method: 'PATCH',
269
+ body: releaseData,
270
+ });
271
+ }
272
+
273
+ async deleteRelease(owner, repo, releaseId) {
274
+ return await this.request(`/repos/${owner}/${repo}/releases/${releaseId}`, {
275
+ method: 'DELETE',
276
+ });
277
+ }
278
+
279
+ /**
280
+ * Workflow Operations
281
+ */
282
+ async listWorkflows(owner, repo) {
283
+ return await this.request(`/repos/${owner}/${repo}/actions/workflows`);
284
+ }
285
+
286
+ async triggerWorkflow(owner, repo, workflowId, ref = 'main', inputs = {}) {
287
+ return await this.request(
288
+ `/repos/${owner}/${repo}/actions/workflows/${workflowId}/dispatches`,
289
+ {
290
+ method: 'POST',
291
+ body: { ref, inputs },
292
+ },
293
+ );
294
+ }
295
+
296
+ async listWorkflowRuns(owner, repo, options = {}) {
297
+ const params = new URLSearchParams({
298
+ per_page: options.perPage || 30,
299
+ page: options.page || 1,
300
+ });
301
+
302
+ if (options.status) {
303
+ params.append('status', options.status);
304
+ }
305
+
306
+ return await this.request(`/repos/${owner}/${repo}/actions/runs?${params}`);
307
+ }
308
+
309
+ /**
310
+ * Branch Operations
311
+ */
312
+ async listBranches(owner, repo) {
313
+ return await this.request(`/repos/${owner}/${repo}/branches`);
314
+ }
315
+
316
+ async createBranch(owner, repo, branchName, sha) {
317
+ return await this.request(`/repos/${owner}/${repo}/git/refs`, {
318
+ method: 'POST',
319
+ body: {
320
+ ref: `refs/heads/${branchName}`,
321
+ sha,
322
+ },
323
+ });
324
+ }
325
+
326
+ async getBranchProtection(owner, repo, branch) {
327
+ return await this.request(`/repos/${owner}/${repo}/branches/${branch}/protection`);
328
+ }
329
+
330
+ async updateBranchProtection(owner, repo, branch, protection) {
331
+ return await this.request(`/repos/${owner}/${repo}/branches/${branch}/protection`, {
332
+ method: 'PUT',
333
+ body: protection,
334
+ });
335
+ }
336
+
337
+ /**
338
+ * Webhook Operations
339
+ */
340
+ async listWebhooks(owner, repo) {
341
+ return await this.request(`/repos/${owner}/${repo}/hooks`);
342
+ }
343
+
344
+ async createWebhook(owner, repo, webhookData) {
345
+ return await this.request(`/repos/${owner}/${repo}/hooks`, {
346
+ method: 'POST',
347
+ body: webhookData,
348
+ });
349
+ }
350
+
351
+ async updateWebhook(owner, repo, hookId, webhookData) {
352
+ return await this.request(`/repos/${owner}/${repo}/hooks/${hookId}`, {
353
+ method: 'PATCH',
354
+ body: webhookData,
355
+ });
356
+ }
357
+
358
+ async deleteWebhook(owner, repo, hookId) {
359
+ return await this.request(`/repos/${owner}/${repo}/hooks/${hookId}`, {
360
+ method: 'DELETE',
361
+ });
362
+ }
363
+
364
+ /**
365
+ * Event Processing
366
+ */
367
+ async processWebhookEvent(event, signature, payload) {
368
+ if (!this.verifyWebhookSignature(signature, payload)) {
369
+ throw new Error('Invalid webhook signature');
370
+ }
371
+
372
+ const eventData = JSON.parse(payload);
373
+
374
+ switch (event) {
375
+ case 'push':
376
+ return this.handlePushEvent(eventData);
377
+ case 'pull_request':
378
+ return this.handlePullRequestEvent(eventData);
379
+ case 'issues':
380
+ return this.handleIssuesEvent(eventData);
381
+ case 'release':
382
+ return this.handleReleaseEvent(eventData);
383
+ case 'workflow_run':
384
+ return this.handleWorkflowRunEvent(eventData);
385
+ default:
386
+ printInfo(`Unhandled event type: ${event}`);
387
+ return { handled: false, event };
388
+ }
389
+ }
390
+
391
+ verifyWebhookSignature(signature, payload) {
392
+ if (!GITHUB_WEBHOOK_SECRET) {
393
+ printWarning('GITHUB_WEBHOOK_SECRET not set. Skipping signature verification.');
394
+ return true;
395
+ }
396
+
397
+ const crypto = require('crypto');
398
+ const hmac = crypto.createHmac('sha256', GITHUB_WEBHOOK_SECRET);
399
+ hmac.update(payload);
400
+ const expectedSignature = `sha256=${hmac.digest('hex')}`;
401
+
402
+ return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature));
403
+ }
404
+
405
+ /**
406
+ * Event Handlers
407
+ */
408
+ async handlePushEvent(eventData) {
409
+ printInfo(`Push event: ${eventData.commits.length} commits to ${eventData.ref}`);
410
+ return { handled: true, event: 'push', data: eventData };
411
+ }
412
+
413
+ async handlePullRequestEvent(eventData) {
414
+ const action = eventData.action;
415
+ const pr = eventData.pull_request;
416
+ printInfo(`Pull request ${action}: #${pr.number} - ${pr.title}`);
417
+ return { handled: true, event: 'pull_request', action, data: eventData };
418
+ }
419
+
420
+ async handleIssuesEvent(eventData) {
421
+ const action = eventData.action;
422
+ const issue = eventData.issue;
423
+ printInfo(`Issue ${action}: #${issue.number} - ${issue.title}`);
424
+ return { handled: true, event: 'issues', action, data: eventData };
425
+ }
426
+
427
+ async handleReleaseEvent(eventData) {
428
+ const action = eventData.action;
429
+ const release = eventData.release;
430
+ printInfo(`Release ${action}: ${release.tag_name} - ${release.name}`);
431
+ return { handled: true, event: 'release', action, data: eventData };
432
+ }
433
+
434
+ async handleWorkflowRunEvent(eventData) {
435
+ const action = eventData.action;
436
+ const workflowRun = eventData.workflow_run;
437
+ printInfo(`Workflow run ${action}: ${workflowRun.name} - ${workflowRun.conclusion}`);
438
+ return { handled: true, event: 'workflow_run', action, data: eventData };
439
+ }
440
+
441
+ /**
442
+ * Utility Methods
443
+ */
444
+ async sleep(ms) {
445
+ return new Promise((resolve) => setTimeout(resolve, ms));
446
+ }
447
+
448
+ parseRepository(repoString) {
449
+ const match = repoString.match(/^([^/]+)\/([^/]+)$/);
450
+ if (!match) {
451
+ throw new Error('Invalid repository format. Use: owner/repo');
452
+ }
453
+ return { owner: match[1], repo: match[2] };
454
+ }
455
+
456
+ formatDate(dateString) {
457
+ return new Date(dateString).toLocaleString();
458
+ }
459
+
460
+ formatFileSize(bytes) {
461
+ const units = ['B', 'KB', 'MB', 'GB'];
462
+ let size = bytes;
463
+ let unitIndex = 0;
464
+
465
+ while (size >= 1024 && unitIndex < units.length - 1) {
466
+ size /= 1024;
467
+ unitIndex++;
468
+ }
469
+
470
+ return `${size.toFixed(2)} ${units[unitIndex]}`;
471
+ }
472
+
473
+ /**
474
+ * Safe GitHub CLI Methods
475
+ * These methods use the GitHubCliSafe wrapper for secure command execution
476
+ */
477
+
478
+ /**
479
+ * Create issue using GitHub CLI (safe alternative to createIssue API method)
480
+ * @param {Object} issueData - Issue data
481
+ * @returns {Promise<Object>} - CLI execution result
482
+ */
483
+ async createIssueCLI(issueData) {
484
+ try {
485
+ const result = await this.cliSafe.createIssue({
486
+ title: issueData.title,
487
+ body: issueData.body,
488
+ labels: issueData.labels || [],
489
+ assignees: issueData.assignees || [],
490
+ });
491
+
492
+ printSuccess(`Issue created via CLI: ${issueData.title}`);
493
+ return { success: true, data: result };
494
+ } catch (error) {
495
+ printError(`Failed to create issue via CLI: ${error.message}`);
496
+ return { success: false, error: error.message };
497
+ }
498
+ }
499
+
500
+ /**
501
+ * Create PR using GitHub CLI (safe alternative to createPullRequest API method)
502
+ * @param {Object} prData - PR data
503
+ * @returns {Promise<Object>} - CLI execution result
504
+ */
505
+ async createPullRequestCLI(prData) {
506
+ try {
507
+ const result = await this.cliSafe.createPR({
508
+ title: prData.title,
509
+ body: prData.body,
510
+ base: prData.base || 'main',
511
+ head: prData.head,
512
+ draft: prData.draft || false,
513
+ });
514
+
515
+ printSuccess(`PR created via CLI: ${prData.title}`);
516
+ return { success: true, data: result };
517
+ } catch (error) {
518
+ printError(`Failed to create PR via CLI: ${error.message}`);
519
+ return { success: false, error: error.message };
520
+ }
521
+ }
522
+
523
+ /**
524
+ * Add issue comment using GitHub CLI
525
+ * @param {number} issueNumber - Issue number
526
+ * @param {string} body - Comment body
527
+ * @returns {Promise<Object>} - CLI execution result
528
+ */
529
+ async addIssueCommentCLI(issueNumber, body) {
530
+ try {
531
+ const result = await this.cliSafe.addIssueComment(issueNumber, body);
532
+ printSuccess(`Comment added to issue #${issueNumber}`);
533
+ return { success: true, data: result };
534
+ } catch (error) {
535
+ printError(`Failed to add comment to issue #${issueNumber}: ${error.message}`);
536
+ return { success: false, error: error.message };
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Add PR comment using GitHub CLI
542
+ * @param {number} prNumber - PR number
543
+ * @param {string} body - Comment body
544
+ * @returns {Promise<Object>} - CLI execution result
545
+ */
546
+ async addPRCommentCLI(prNumber, body) {
547
+ try {
548
+ const result = await this.cliSafe.addPRComment(prNumber, body);
549
+ printSuccess(`Comment added to PR #${prNumber}`);
550
+ return { success: true, data: result };
551
+ } catch (error) {
552
+ printError(`Failed to add comment to PR #${prNumber}: ${error.message}`);
553
+ return { success: false, error: error.message };
554
+ }
555
+ }
556
+
557
+ /**
558
+ * Create release using GitHub CLI
559
+ * @param {Object} releaseData - Release data
560
+ * @returns {Promise<Object>} - CLI execution result
561
+ */
562
+ async createReleaseCLI(releaseData) {
563
+ try {
564
+ const result = await this.cliSafe.createRelease({
565
+ tag: releaseData.tag_name,
566
+ title: releaseData.name,
567
+ body: releaseData.body,
568
+ prerelease: releaseData.prerelease || false,
569
+ draft: releaseData.draft || false,
570
+ });
571
+
572
+ printSuccess(`Release created via CLI: ${releaseData.tag_name}`);
573
+ return { success: true, data: result };
574
+ } catch (error) {
575
+ printError(`Failed to create release via CLI: ${error.message}`);
576
+ return { success: false, error: error.message };
577
+ }
578
+ }
579
+
580
+ /**
581
+ * Check GitHub CLI authentication and availability
582
+ * @returns {Promise<boolean>} - True if CLI is ready to use
583
+ */
584
+ async checkCLIStatus() {
585
+ try {
586
+ const isAvailable = await this.cliSafe.checkGitHubCli();
587
+ if (!isAvailable) {
588
+ printWarning('GitHub CLI is not installed or not in PATH');
589
+ return false;
590
+ }
591
+
592
+ const isAuthenticated = await this.cliSafe.checkAuthentication();
593
+ if (!isAuthenticated) {
594
+ printWarning('GitHub CLI is not authenticated. Run: gh auth login');
595
+ return false;
596
+ }
597
+
598
+ printSuccess('GitHub CLI is ready for use');
599
+ return true;
600
+ } catch (error) {
601
+ printError(`GitHub CLI status check failed: ${error.message}`);
602
+ return false;
603
+ }
604
+ }
605
+
606
+ /**
607
+ * Get GitHub CLI wrapper statistics
608
+ * @returns {Object} - Usage statistics
609
+ */
610
+ getCLIStats() {
611
+ return this.cliSafe.getStats();
612
+ }
613
+
614
+ /**
615
+ * Cleanup CLI resources (call before shutdown)
616
+ */
617
+ async cleanupCLI() {
618
+ await this.cliSafe.cleanup();
619
+ }
620
+ }
621
+
622
+ // Export singleton instance
623
+ export const githubAPI = new GitHubAPIClient();
624
+ export default GitHubAPIClient;