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,929 @@
1
+ /**
2
+ * Web Server for Claude Code Console
3
+ * Serves the web-based UI and provides WebSocket communication
4
+ */
5
+
6
+ import { createServer } from 'http';
7
+ import { join, dirname } from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import { readFileSync, existsSync } from 'fs';
10
+ import { WebSocketServer } from 'ws';
11
+ import { printSuccess, printError, printWarning, printInfo } from '../utils.js';
12
+ import { compat } from '../runtime-detector.js';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ export class ClaudeCodeWebServer {
18
+ constructor(port = 3000) {
19
+ this.port = port;
20
+ this.server = null;
21
+ this.wss = null;
22
+ this.connections = new Set();
23
+ this.uiPath = join(__dirname, '../../ui/console');
24
+ this.isRunning = false;
25
+ }
26
+
27
+ async createAPIRoutes() {
28
+ const express = await import('express');
29
+ const router = express.Router();
30
+
31
+ // Health check endpoint
32
+ router.get('/health', (req, res) => {
33
+ res.json({ status: 'ok', uptime: process.uptime() });
34
+ });
35
+
36
+ // System status endpoint
37
+ router.get('/status', (req, res) => {
38
+ res.json({
39
+ connections: this.connections.size,
40
+ isRunning: this.isRunning,
41
+ port: this.port,
42
+ });
43
+ });
44
+
45
+ return router;
46
+ }
47
+
48
+ /**
49
+ * Start the web server
50
+ */
51
+ async start() {
52
+ if (this.isRunning) {
53
+ printWarning('Web server is already running');
54
+ return;
55
+ }
56
+
57
+ try {
58
+ // Create HTTP server with express
59
+ const express = await import('express');
60
+ const app = express.default();
61
+
62
+ // Enable CORS
63
+ app.use((req, res, next) => {
64
+ res.header('Access-Control-Allow-Origin', '*');
65
+ res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
66
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
67
+ next();
68
+ });
69
+
70
+ // Serve static files
71
+ app.use('/console', express.static(this.uiPath));
72
+ app.use('/api', await this.createAPIRoutes());
73
+
74
+ // Default route redirects to console
75
+ app.get('/', (req, res) => {
76
+ res.redirect('/console');
77
+ });
78
+
79
+ this.server = createServer(app);
80
+
81
+ // Create WebSocket server
82
+ this.wss = new WebSocketServer({
83
+ server: this.server,
84
+ path: '/ws',
85
+ });
86
+
87
+ this.setupWebSocketServer();
88
+
89
+ // Start listening
90
+ await new Promise((resolve, reject) => {
91
+ this.server.listen(this.port, (err) => {
92
+ if (err) {
93
+ reject(err);
94
+ } else {
95
+ resolve();
96
+ }
97
+ });
98
+ });
99
+
100
+ this.isRunning = true;
101
+ printSuccess(`🌐 Claude Code Web UI started successfully`);
102
+ console.log(`šŸ“ Web Interface: http://localhost:${this.port}/console`);
103
+ console.log(`šŸ”— WebSocket: ws://localhost:${this.port}/ws`);
104
+ console.log(`šŸ“ Serving UI from: ${this.uiPath}`);
105
+ console.log();
106
+ } catch (error) {
107
+ printError(`Failed to start web server: ${error.message}`);
108
+ throw error;
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Stop the web server
114
+ */
115
+ async stop() {
116
+ if (!this.isRunning) return;
117
+
118
+ // Close all WebSocket connections
119
+ this.connections.forEach((ws) => {
120
+ if (ws.readyState === ws.OPEN) {
121
+ ws.close(1000, 'Server shutting down');
122
+ }
123
+ });
124
+
125
+ // Close WebSocket server
126
+ if (this.wss) {
127
+ this.wss.close();
128
+ }
129
+
130
+ // Close HTTP server
131
+ if (this.server) {
132
+ await new Promise((resolve) => {
133
+ this.server.close(resolve);
134
+ });
135
+ }
136
+
137
+ this.isRunning = false;
138
+ printInfo('Web server stopped');
139
+ }
140
+
141
+ /**
142
+ * Handle HTTP requests
143
+ */
144
+ handleRequest(req, res) {
145
+ const url = req.url;
146
+
147
+ // CORS headers
148
+ res.setHeader('Access-Control-Allow-Origin', '*');
149
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
150
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
151
+
152
+ if (req.method === 'OPTIONS') {
153
+ res.writeHead(200);
154
+ res.end();
155
+ return;
156
+ }
157
+
158
+ // Route handling
159
+ if (url === '/' || url === '/console' || url === '/console/') {
160
+ this.serveConsoleHTML(res);
161
+ } else if (url.startsWith('/console/')) {
162
+ // Remove /console prefix and serve static files
163
+ const filePath = url.substring('/console/'.length);
164
+ this.serveStaticFile(res, filePath);
165
+ } else if (url === '/health') {
166
+ this.handleHealthCheck(res);
167
+ } else if (url === '/api/status') {
168
+ this.handleStatusAPI(res);
169
+ } else if (url === '/favicon.ico') {
170
+ this.handleFavicon(res);
171
+ } else {
172
+ this.handle404(res);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Serve the console HTML with corrected paths
178
+ */
179
+ serveConsoleHTML(res) {
180
+ const filePath = join(this.uiPath, 'index.html');
181
+
182
+ if (!existsSync(filePath)) {
183
+ this.handle404(res);
184
+ return;
185
+ }
186
+
187
+ try {
188
+ let content = readFileSync(filePath, 'utf8');
189
+
190
+ // Fix relative paths to be relative to /console/
191
+ content = content.replace(/href="styles\//g, 'href="/console/styles/');
192
+ content = content.replace(/src="js\//g, 'src="/console/js/');
193
+
194
+ res.writeHead(200, { 'Content-Type': 'text/html' });
195
+ res.end(content);
196
+ } catch (error) {
197
+ this.handle500(res, error);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Serve a specific file from the UI directory
203
+ */
204
+ serveFile(res, filename, contentType) {
205
+ const filePath = join(this.uiPath, filename);
206
+
207
+ if (!existsSync(filePath)) {
208
+ this.handle404(res);
209
+ return;
210
+ }
211
+
212
+ try {
213
+ const content = readFileSync(filePath);
214
+ res.writeHead(200, { 'Content-Type': contentType });
215
+ res.end(content);
216
+ } catch (error) {
217
+ this.handle500(res, error);
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Serve static files (CSS, JS, etc.)
223
+ */
224
+ serveStaticFile(res, requestPath) {
225
+ // Security: prevent directory traversal
226
+ if (requestPath.includes('..') || requestPath.includes('\0')) {
227
+ this.handle403(res);
228
+ return;
229
+ }
230
+
231
+ const filePath = join(this.uiPath, requestPath);
232
+
233
+ if (!existsSync(filePath)) {
234
+ this.handle404(res);
235
+ return;
236
+ }
237
+
238
+ // Determine content type
239
+ const contentType = this.getContentType(requestPath);
240
+
241
+ try {
242
+ const content = readFileSync(filePath);
243
+ res.writeHead(200, { 'Content-Type': contentType });
244
+ res.end(content);
245
+ } catch (error) {
246
+ this.handle500(res, error);
247
+ }
248
+ }
249
+
250
+ /**
251
+ * Get content type based on file extension
252
+ */
253
+ getContentType(filePath) {
254
+ const ext = filePath.split('.').pop().toLowerCase();
255
+
256
+ const contentTypes = {
257
+ html: 'text/html',
258
+ css: 'text/css',
259
+ js: 'application/javascript',
260
+ json: 'application/json',
261
+ png: 'image/png',
262
+ jpg: 'image/jpeg',
263
+ jpeg: 'image/jpeg',
264
+ gif: 'image/gif',
265
+ svg: 'image/svg+xml',
266
+ ico: 'image/x-icon',
267
+ woff: 'font/woff',
268
+ woff2: 'font/woff2',
269
+ ttf: 'font/ttf',
270
+ eot: 'application/vnd.ms-fontobject',
271
+ };
272
+
273
+ return contentTypes[ext] || 'text/plain';
274
+ }
275
+
276
+ /**
277
+ * Handle health check endpoint
278
+ */
279
+ handleHealthCheck(res) {
280
+ const health = {
281
+ status: 'ok',
282
+ timestamp: new Date().toISOString(),
283
+ uptime: process.uptime(),
284
+ connections: this.connections.size,
285
+ memory: process.memoryUsage(),
286
+ platform: compat.platform,
287
+ };
288
+
289
+ res.writeHead(200, { 'Content-Type': 'application/json' });
290
+ res.end(JSON.stringify(health, null, 2));
291
+ }
292
+
293
+ /**
294
+ * Handle status API endpoint
295
+ */
296
+ handleStatusAPI(res) {
297
+ const status = {
298
+ server: {
299
+ running: this.isRunning,
300
+ port: this.port,
301
+ connections: this.connections.size,
302
+ },
303
+ claudeFlow: {
304
+ initialized: true,
305
+ version: '1.0.72',
306
+ },
307
+ runtime: compat.runtime,
308
+ platform: compat.platform,
309
+ };
310
+
311
+ res.writeHead(200, { 'Content-Type': 'application/json' });
312
+ res.end(JSON.stringify(status, null, 2));
313
+ }
314
+
315
+ /**
316
+ * Handle favicon request
317
+ */
318
+ handleFavicon(res) {
319
+ // Simple SVG favicon
320
+ const favicon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
321
+ <rect width="32" height="32" fill="#1f6feb"/>
322
+ <text x="16" y="20" text-anchor="middle" fill="white" font-family="monospace" font-size="18">⚔</text>
323
+ </svg>`;
324
+
325
+ res.writeHead(200, { 'Content-Type': 'image/svg+xml' });
326
+ res.end(favicon);
327
+ }
328
+
329
+ /**
330
+ * Handle 403 Forbidden
331
+ */
332
+ handle403(res) {
333
+ res.writeHead(403, { 'Content-Type': 'text/plain' });
334
+ res.end('403 Forbidden');
335
+ }
336
+
337
+ /**
338
+ * Handle 404 Not Found
339
+ */
340
+ handle404(res) {
341
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
342
+ res.end('404 Not Found');
343
+ }
344
+
345
+ /**
346
+ * Handle 500 Internal Server Error
347
+ */
348
+ handle500(res, error) {
349
+ console.error('Server error:', error);
350
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
351
+ res.end('500 Internal Server Error');
352
+ }
353
+
354
+ /**
355
+ * Setup WebSocket server
356
+ */
357
+ setupWebSocketServer() {
358
+ this.wss.on('connection', (ws, req) => {
359
+ this.handleWebSocketConnection(ws, req);
360
+ });
361
+
362
+ this.wss.on('error', (error) => {
363
+ console.error('WebSocket server error:', error);
364
+ });
365
+ }
366
+
367
+ /**
368
+ * Handle new WebSocket connection
369
+ */
370
+ handleWebSocketConnection(ws, req) {
371
+ const clientIP = req.socket.remoteAddress;
372
+ console.log(`šŸ”— New WebSocket connection from ${clientIP}`);
373
+
374
+ this.connections.add(ws);
375
+
376
+ // Send welcome message
377
+ this.sendMessage(ws, {
378
+ jsonrpc: '2.0',
379
+ method: 'connection/established',
380
+ params: {
381
+ server: 'claude-flow-web-server',
382
+ version: '2.0.0',
383
+ timestamp: new Date().toISOString(),
384
+ },
385
+ });
386
+
387
+ // Handle messages
388
+ ws.on('message', (data) => {
389
+ this.handleWebSocketMessage(ws, data);
390
+ });
391
+
392
+ // Handle close
393
+ ws.on('close', (code, reason) => {
394
+ console.log(`āŒ WebSocket connection closed: ${code} ${reason}`);
395
+ this.connections.delete(ws);
396
+ });
397
+
398
+ // Handle error
399
+ ws.on('error', (error) => {
400
+ console.error('WebSocket connection error:', error);
401
+ this.connections.delete(ws);
402
+ });
403
+
404
+ // Setup ping/pong for connection health
405
+ ws.on('pong', () => {
406
+ ws.isAlive = true;
407
+ });
408
+ }
409
+
410
+ /**
411
+ * Handle incoming WebSocket messages
412
+ */
413
+ handleWebSocketMessage(ws, data) {
414
+ try {
415
+ const message = JSON.parse(data.toString());
416
+ console.log('Received WebSocket message:', message.method, message.id);
417
+
418
+ // Handle different message types
419
+ switch (message.method) {
420
+ case 'initialize':
421
+ this.handleInitialize(ws, message);
422
+ break;
423
+
424
+ case 'ping':
425
+ this.handlePing(ws, message);
426
+ break;
427
+
428
+ case 'tools/call':
429
+ this.handleToolCall(ws, message);
430
+ break;
431
+
432
+ case 'tools/list':
433
+ console.log('Handling tools/list request');
434
+ this.handleToolsList(ws, message);
435
+ break;
436
+
437
+ default:
438
+ console.log('Unknown method:', message.method);
439
+ this.handleUnknownMethod(ws, message);
440
+ }
441
+ } catch (error) {
442
+ console.error('Error processing WebSocket message:', error);
443
+ this.sendError(ws, null, 'Invalid JSON message');
444
+ }
445
+ }
446
+
447
+ /**
448
+ * Handle initialize request
449
+ */
450
+ handleInitialize(ws, message) {
451
+ const response = {
452
+ jsonrpc: '2.0',
453
+ id: message.id,
454
+ result: {
455
+ protocolVersion: { major: 2024, minor: 11, patch: 5 },
456
+ serverInfo: {
457
+ name: 'claude-flow-web-server',
458
+ version: '2.0.0',
459
+ },
460
+ capabilities: {
461
+ logging: { level: 'info' },
462
+ tools: { listChanged: true },
463
+ resources: { listChanged: false, subscribe: false },
464
+ prompts: { listChanged: false },
465
+ },
466
+ },
467
+ };
468
+
469
+ this.sendMessage(ws, response);
470
+ }
471
+
472
+ /**
473
+ * Handle ping request
474
+ */
475
+ handlePing(ws, message) {
476
+ this.sendMessage(ws, {
477
+ jsonrpc: '2.0',
478
+ method: 'pong',
479
+ params: {
480
+ timestamp: Date.now(),
481
+ original: message.params,
482
+ },
483
+ });
484
+ }
485
+
486
+ /**
487
+ * Handle tool call request
488
+ */
489
+ handleToolCall(ws, message) {
490
+ const { name, arguments: args } = message.params;
491
+
492
+ // Mock tool execution for demonstration
493
+ const result = this.executeMockTool(name, args);
494
+
495
+ const response = {
496
+ jsonrpc: '2.0',
497
+ id: message.id,
498
+ result: {
499
+ content: [
500
+ {
501
+ type: 'text',
502
+ text: result,
503
+ },
504
+ ],
505
+ },
506
+ };
507
+
508
+ this.sendMessage(ws, response);
509
+ }
510
+
511
+ /**
512
+ * Handle tools list request
513
+ */
514
+ handleToolsList(ws, message) {
515
+ const tools = [
516
+ {
517
+ name: 'claude-flow/execute',
518
+ description: 'Execute Claude Flow commands (start, stop, status, modes)',
519
+ inputSchema: {
520
+ type: 'object',
521
+ properties: {
522
+ command: { type: 'string', description: 'Command to execute' },
523
+ args: { type: 'object', description: 'Command arguments' },
524
+ },
525
+ required: ['command'],
526
+ },
527
+ },
528
+ {
529
+ name: 'swarm/orchestrate',
530
+ description: 'Manage swarm orchestration (create, start, stop, status)',
531
+ inputSchema: {
532
+ type: 'object',
533
+ properties: {
534
+ action: { type: 'string', description: 'Action to perform' },
535
+ args: { type: 'array', description: 'Action arguments' },
536
+ },
537
+ required: ['action'],
538
+ },
539
+ },
540
+ {
541
+ name: 'system/health',
542
+ description: 'Get comprehensive system health status',
543
+ inputSchema: {
544
+ type: 'object',
545
+ properties: {
546
+ detailed: { type: 'boolean', description: 'Include detailed metrics' },
547
+ },
548
+ },
549
+ },
550
+ {
551
+ name: 'memory/manage',
552
+ description: 'Manage persistent memory and storage',
553
+ inputSchema: {
554
+ type: 'object',
555
+ properties: {
556
+ operation: { type: 'string', description: 'Operation: store, retrieve, list, delete' },
557
+ key: { type: 'string', description: 'Memory key' },
558
+ value: { type: 'string', description: 'Value to store' },
559
+ },
560
+ required: ['operation'],
561
+ },
562
+ },
563
+ {
564
+ name: 'agents/manage',
565
+ description: 'Manage AI agents and their coordination',
566
+ inputSchema: {
567
+ type: 'object',
568
+ properties: {
569
+ action: { type: 'string', description: 'Action: list, create, start, stop, status' },
570
+ agentType: { type: 'string', description: 'Agent type for creation' },
571
+ agentId: { type: 'string', description: 'Agent ID for operations' },
572
+ },
573
+ required: ['action'],
574
+ },
575
+ },
576
+ {
577
+ name: 'sparc/execute',
578
+ description: 'Execute SPARC mode operations',
579
+ inputSchema: {
580
+ type: 'object',
581
+ properties: {
582
+ mode: { type: 'string', description: 'SPARC mode: coder, architect, analyzer, etc.' },
583
+ task: { type: 'string', description: 'Task description' },
584
+ options: { type: 'object', description: 'Additional options' },
585
+ },
586
+ required: ['mode'],
587
+ },
588
+ },
589
+ {
590
+ name: 'benchmark/run',
591
+ description: 'Run performance benchmarks',
592
+ inputSchema: {
593
+ type: 'object',
594
+ properties: {
595
+ suite: { type: 'string', description: 'Benchmark suite to run' },
596
+ iterations: { type: 'number', description: 'Number of iterations' },
597
+ },
598
+ },
599
+ },
600
+ ];
601
+
602
+ const response = {
603
+ jsonrpc: '2.0',
604
+ id: message.id,
605
+ result: { tools },
606
+ };
607
+
608
+ this.sendMessage(ws, response);
609
+ }
610
+
611
+ /**
612
+ * Handle unknown method
613
+ */
614
+ handleUnknownMethod(ws, message) {
615
+ this.sendError(ws, message.id, `Unknown method: ${message.method}`);
616
+ }
617
+
618
+ /**
619
+ * Execute mock tool for demonstration
620
+ */
621
+ executeMockTool(name, args) {
622
+ switch (name) {
623
+ case 'claude-flow/execute':
624
+ return this.executeClaudeFlowCommand(args.command, args.args);
625
+
626
+ case 'system/health':
627
+ const healthData = {
628
+ status: 'healthy',
629
+ uptime: Math.floor(process.uptime()),
630
+ memory: process.memoryUsage(),
631
+ connections: this.connections.size,
632
+ platform: compat.platform,
633
+ timestamp: new Date().toISOString(),
634
+ };
635
+
636
+ if (args.detailed) {
637
+ healthData.detailed = {
638
+ nodeVersion: process.version,
639
+ architecture: process.arch,
640
+ pid: process.pid,
641
+ cpuUsage: process.cpuUsage(),
642
+ resourceUsage: process.resourceUsage ? process.resourceUsage() : 'N/A',
643
+ };
644
+ }
645
+
646
+ return JSON.stringify(healthData, null, 2);
647
+
648
+ case 'swarm/orchestrate':
649
+ return this.executeSwarmCommand(args.action, args.args);
650
+
651
+ case 'swarm/status':
652
+ return this.executeSwarmCommand('status', args.args);
653
+
654
+ case 'memory/manage':
655
+ return this.executeMemoryCommand(args.operation, args.key, args.value);
656
+
657
+ case 'agents/manage':
658
+ return this.executeAgentsCommand(args.action, args.agentType, args.agentId);
659
+
660
+ case 'sparc/execute':
661
+ return this.executeSPARCCommand(args.mode, args.task, args.options);
662
+
663
+ case 'benchmark/run':
664
+ return this.executeBenchmarkCommand(args.suite, args.iterations);
665
+
666
+ default:
667
+ return `Tool '${name}' executed successfully with args: ${JSON.stringify(args)}`;
668
+ }
669
+ }
670
+
671
+ /**
672
+ * Execute Claude Flow command simulation
673
+ */
674
+ executeClaudeFlowCommand(command, args = {}) {
675
+ switch (command) {
676
+ case 'status':
677
+ return `Claude Flow Status:
678
+ Version: 2.0.0
679
+ Mode: Web Console
680
+ Active Processes: 3
681
+ Memory Usage: ${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)}MB
682
+ Uptime: ${Math.floor(process.uptime())}s`;
683
+
684
+ case 'init':
685
+ return `Claude Flow initialization complete:
686
+ āœ… Project structure created
687
+ āœ… Configuration files generated
688
+ āœ… Memory bank initialized
689
+ āœ… Ready for development`;
690
+
691
+ case 'agents':
692
+ return `Active Agents:
693
+ • Research Agent (idle) - 0 tasks
694
+ • Code Developer (working) - 2 tasks
695
+ • Data Analyst (idle) - 0 tasks
696
+
697
+ Total: 3 agents`;
698
+
699
+ default:
700
+ return `Claude Flow command '${command}' executed successfully`;
701
+ }
702
+ }
703
+
704
+ /**
705
+ * Execute swarm command simulation
706
+ */
707
+ executeSwarmCommand(action = 'status', args = []) {
708
+ switch (action) {
709
+ case 'status':
710
+ return `Swarm Orchestration Status:
711
+ šŸ Swarm: ACTIVE
712
+ šŸ—ļø Topology: hierarchical
713
+ šŸ‘„ Agents: 5/8 active
714
+ šŸ“Š Tasks: 12 total (4 complete, 6 in-progress, 2 pending)
715
+ ⚔ Mode: parallel execution
716
+ 🧠 Memory: 15 coordination points stored
717
+ šŸ“ˆ Efficiency: 78%`;
718
+
719
+ case 'init':
720
+ return `Swarm initialization complete:
721
+ āœ… Hierarchical topology established
722
+ āœ… 5 agents spawned successfully
723
+ āœ… Coordination protocols active
724
+ āœ… Memory synchronization enabled`;
725
+
726
+ case 'agents':
727
+ return `Swarm Agent Status:
728
+ 🟢 architect: Designing system components...
729
+ 🟢 coder-1: Implementing user authentication...
730
+ 🟢 coder-2: Building API endpoints...
731
+ 🟔 analyst: Analyzing performance metrics...
732
+ šŸ”“ tester: Waiting for code completion...`;
733
+
734
+ case 'test':
735
+ return `Swarm Test Results:
736
+ āœ… Agent communication: PASS
737
+ āœ… Task distribution: PASS
738
+ āœ… Memory coordination: PASS
739
+ āœ… Error handling: PASS
740
+ šŸ“Š Overall health: 95%`;
741
+
742
+ default:
743
+ return `Swarm ${action} completed successfully`;
744
+ }
745
+ }
746
+
747
+ /**
748
+ * Execute memory command simulation
749
+ */
750
+ executeMemoryCommand(operation, key, value) {
751
+ switch (operation) {
752
+ case 'store':
753
+ return `Memory stored successfully:\n Key: ${key}\n Value: ${value}\n Timestamp: ${new Date().toISOString()}`;
754
+
755
+ case 'retrieve':
756
+ return `Memory retrieved:\n Key: ${key}\n Value: "example stored value"\n Last Modified: ${new Date().toISOString()}`;
757
+
758
+ case 'list':
759
+ return `Memory Keys:\n • project/settings\n • swarm/topology\n • agents/coordination\n • session/state\n • benchmark/results\n \n Total: 5 entries`;
760
+
761
+ case 'delete':
762
+ return `Memory deleted:\n Key: ${key}\n Status: Success`;
763
+
764
+ default:
765
+ return `Memory operation '${operation}' completed`;
766
+ }
767
+ }
768
+
769
+ /**
770
+ * Execute agents command simulation
771
+ */
772
+ executeAgentsCommand(action, agentType, agentId) {
773
+ switch (action) {
774
+ case 'list':
775
+ return `Active Agents:\n 🟢 agent-001 (architect) - Designing system components\n 🟢 agent-002 (coder) - Implementing features\n 🟔 agent-003 (analyst) - Analyzing performance\n šŸ”“ agent-004 (tester) - Waiting for code\n 🟢 agent-005 (coordinator) - Managing workflow\n \n Total: 5 agents`;
776
+
777
+ case 'create':
778
+ return `Agent created successfully:\n Type: ${agentType}\n ID: agent-${Math.floor(
779
+ Math.random() * 1000,
780
+ )
781
+ .toString()
782
+ .padStart(3, '0')}\n Status: Active\n Capabilities: Full ${agentType} functionality`;
783
+
784
+ case 'start':
785
+ return `Agent started:\n ID: ${agentId}\n Status: Running\n Tasks: Ready to accept work`;
786
+
787
+ case 'stop':
788
+ return `Agent stopped:\n ID: ${agentId}\n Status: Stopped\n Tasks: Completed gracefully`;
789
+
790
+ case 'status':
791
+ return `Agent Status:\n ID: ${agentId}\n Status: Active\n Type: researcher\n Current Task: Data analysis\n Uptime: 2h 15m\n Tasks Completed: 12\n Efficiency: 92%`;
792
+
793
+ default:
794
+ return `Agent ${action} completed for ${agentId || agentType}`;
795
+ }
796
+ }
797
+
798
+ /**
799
+ * Execute SPARC command simulation
800
+ */
801
+ executeSPARCCommand(mode, task, options = {}) {
802
+ const modes = {
803
+ coder: 'Code development and implementation',
804
+ architect: 'System design and architecture',
805
+ analyzer: 'Data analysis and insights',
806
+ researcher: 'Research and information gathering',
807
+ reviewer: 'Code review and quality assurance',
808
+ tester: 'Testing and validation',
809
+ debugger: 'Bug finding and resolution',
810
+ documenter: 'Documentation and specifications',
811
+ optimizer: 'Performance optimization',
812
+ designer: 'UI/UX design and prototyping',
813
+ };
814
+
815
+ return `SPARC Mode Execution:\n Mode: ${mode} (${modes[mode] || 'Unknown mode'})\n Task: ${task || 'No task specified'}\n Status: Initialized\n Estimated Duration: 15-30 minutes\n Resources Allocated: 2 agents\n Options: ${JSON.stringify(options)}\n \n Ready to begin execution...`;
816
+ }
817
+
818
+ /**
819
+ * Execute benchmark command simulation
820
+ */
821
+ executeBenchmarkCommand(suite = 'default', iterations = 10) {
822
+ const suites = {
823
+ default: 'General performance benchmark',
824
+ memory: 'Memory usage and allocation',
825
+ cpu: 'CPU intensive operations',
826
+ network: 'Network communication speed',
827
+ swarm: 'Swarm coordination efficiency',
828
+ };
829
+
830
+ return `Benchmark Results:\n Suite: ${suite} (${suites[suite] || 'Custom suite'})\n Iterations: ${iterations}\n \n šŸ“Š Results:\n • Average Response Time: 245ms\n • Memory Usage: 128MB\n • CPU Utilization: 15%\n • Success Rate: 98.5%\n • Throughput: 420 ops/sec\n \n šŸ† Performance Grade: A+\n ⚔ Optimization Suggestions: Enable caching for 12% improvement`;
831
+ }
832
+
833
+ /**
834
+ * Send message to WebSocket client
835
+ */
836
+ sendMessage(ws, message) {
837
+ if (ws.readyState === ws.OPEN) {
838
+ ws.send(JSON.stringify(message));
839
+ }
840
+ }
841
+
842
+ /**
843
+ * Send error response
844
+ */
845
+ sendError(ws, id, errorMessage) {
846
+ const response = {
847
+ jsonrpc: '2.0',
848
+ id,
849
+ error: {
850
+ code: -32600,
851
+ message: errorMessage,
852
+ },
853
+ };
854
+
855
+ this.sendMessage(ws, response);
856
+ }
857
+
858
+ /**
859
+ * Broadcast message to all connected clients
860
+ */
861
+ broadcast(message) {
862
+ this.connections.forEach((ws) => {
863
+ this.sendMessage(ws, message);
864
+ });
865
+ }
866
+
867
+ /**
868
+ * Start heartbeat to check connection health
869
+ */
870
+ startHeartbeat() {
871
+ setInterval(() => {
872
+ this.connections.forEach((ws) => {
873
+ if (ws.isAlive === false) {
874
+ ws.terminate();
875
+ this.connections.delete(ws);
876
+ return;
877
+ }
878
+
879
+ ws.isAlive = false;
880
+ ws.ping();
881
+ });
882
+ }, 30000); // 30 seconds
883
+ }
884
+
885
+ /**
886
+ * Get server status
887
+ */
888
+ getStatus() {
889
+ return {
890
+ running: this.isRunning,
891
+ port: this.port,
892
+ connections: this.connections.size,
893
+ uiPath: this.uiPath,
894
+ };
895
+ }
896
+ }
897
+
898
+ /**
899
+ * Start web server command
900
+ */
901
+ export async function startWebServer(port = 3000) {
902
+ const server = new ClaudeCodeWebServer(port);
903
+
904
+ try {
905
+ await server.start();
906
+
907
+ // Setup graceful shutdown
908
+ const shutdown = async () => {
909
+ console.log('\nā¹ļø Shutting down web server...');
910
+ await server.stop();
911
+ process.exit(0);
912
+ };
913
+
914
+ compat.terminal.onSignal('SIGINT', shutdown);
915
+ compat.terminal.onSignal('SIGTERM', shutdown);
916
+
917
+ // Keep server running
918
+ return server;
919
+ } catch (error) {
920
+ printError(`Failed to start web server: ${error.message}`);
921
+ process.exit(1);
922
+ }
923
+ }
924
+
925
+ // Auto-run if called directly
926
+ if (import.meta.url === `file://${process.argv[1]}`) {
927
+ const port = process.argv[2] ? parseInt(process.argv[2]) : 3000;
928
+ await startWebServer(port);
929
+ }