claude-flow 3.0.0-alpha.10 → 3.0.0-alpha.12

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 (243) hide show
  1. package/README.md +41 -1151
  2. package/bin/cli.js +30 -8
  3. package/dist/index.d.ts +40 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +43 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +52 -12
  8. package/dist/src/commands/agent.d.ts +0 -8
  9. package/dist/src/commands/agent.d.ts.map +0 -1
  10. package/dist/src/commands/agent.js +0 -819
  11. package/dist/src/commands/agent.js.map +0 -1
  12. package/dist/src/commands/config.d.ts +0 -8
  13. package/dist/src/commands/config.d.ts.map +0 -1
  14. package/dist/src/commands/config.js +0 -406
  15. package/dist/src/commands/config.js.map +0 -1
  16. package/dist/src/commands/daemon.d.ts +0 -8
  17. package/dist/src/commands/daemon.d.ts.map +0 -1
  18. package/dist/src/commands/daemon.js +0 -545
  19. package/dist/src/commands/daemon.js.map +0 -1
  20. package/dist/src/commands/hive-mind.d.ts +0 -8
  21. package/dist/src/commands/hive-mind.d.ts.map +0 -1
  22. package/dist/src/commands/hive-mind.js +0 -844
  23. package/dist/src/commands/hive-mind.js.map +0 -1
  24. package/dist/src/commands/hooks.d.ts +0 -8
  25. package/dist/src/commands/hooks.d.ts.map +0 -1
  26. package/dist/src/commands/hooks.js +0 -2098
  27. package/dist/src/commands/hooks.js.map +0 -1
  28. package/dist/src/commands/index.d.ts +0 -52
  29. package/dist/src/commands/index.d.ts.map +0 -1
  30. package/dist/src/commands/index.js +0 -108
  31. package/dist/src/commands/index.js.map +0 -1
  32. package/dist/src/commands/init.d.ts +0 -8
  33. package/dist/src/commands/init.d.ts.map +0 -1
  34. package/dist/src/commands/init.js +0 -532
  35. package/dist/src/commands/init.js.map +0 -1
  36. package/dist/src/commands/mcp.d.ts +0 -11
  37. package/dist/src/commands/mcp.d.ts.map +0 -1
  38. package/dist/src/commands/mcp.js +0 -662
  39. package/dist/src/commands/mcp.js.map +0 -1
  40. package/dist/src/commands/memory.d.ts +0 -8
  41. package/dist/src/commands/memory.d.ts.map +0 -1
  42. package/dist/src/commands/memory.js +0 -977
  43. package/dist/src/commands/memory.js.map +0 -1
  44. package/dist/src/commands/migrate.d.ts +0 -8
  45. package/dist/src/commands/migrate.d.ts.map +0 -1
  46. package/dist/src/commands/migrate.js +0 -398
  47. package/dist/src/commands/migrate.js.map +0 -1
  48. package/dist/src/commands/process.d.ts +0 -10
  49. package/dist/src/commands/process.d.ts.map +0 -1
  50. package/dist/src/commands/process.js +0 -641
  51. package/dist/src/commands/process.js.map +0 -1
  52. package/dist/src/commands/session.d.ts +0 -8
  53. package/dist/src/commands/session.d.ts.map +0 -1
  54. package/dist/src/commands/session.js +0 -750
  55. package/dist/src/commands/session.js.map +0 -1
  56. package/dist/src/commands/start.d.ts +0 -8
  57. package/dist/src/commands/start.d.ts.map +0 -1
  58. package/dist/src/commands/start.js +0 -398
  59. package/dist/src/commands/start.js.map +0 -1
  60. package/dist/src/commands/status.d.ts +0 -8
  61. package/dist/src/commands/status.d.ts.map +0 -1
  62. package/dist/src/commands/status.js +0 -584
  63. package/dist/src/commands/status.js.map +0 -1
  64. package/dist/src/commands/swarm.d.ts +0 -8
  65. package/dist/src/commands/swarm.d.ts.map +0 -1
  66. package/dist/src/commands/swarm.js +0 -573
  67. package/dist/src/commands/swarm.js.map +0 -1
  68. package/dist/src/commands/task.d.ts +0 -8
  69. package/dist/src/commands/task.d.ts.map +0 -1
  70. package/dist/src/commands/task.js +0 -671
  71. package/dist/src/commands/task.js.map +0 -1
  72. package/dist/src/commands/workflow.d.ts +0 -8
  73. package/dist/src/commands/workflow.d.ts.map +0 -1
  74. package/dist/src/commands/workflow.js +0 -617
  75. package/dist/src/commands/workflow.js.map +0 -1
  76. package/dist/src/config-adapter.d.ts +0 -15
  77. package/dist/src/config-adapter.d.ts.map +0 -1
  78. package/dist/src/config-adapter.js +0 -185
  79. package/dist/src/config-adapter.js.map +0 -1
  80. package/dist/src/index.d.ts +0 -55
  81. package/dist/src/index.d.ts.map +0 -1
  82. package/dist/src/index.js +0 -353
  83. package/dist/src/index.js.map +0 -1
  84. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  85. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  86. package/dist/src/infrastructure/in-memory-repositories.js +0 -264
  87. package/dist/src/infrastructure/in-memory-repositories.js.map +0 -1
  88. package/dist/src/init/claudemd-generator.d.ts +0 -15
  89. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  90. package/dist/src/init/claudemd-generator.js +0 -626
  91. package/dist/src/init/claudemd-generator.js.map +0 -1
  92. package/dist/src/init/executor.d.ts +0 -11
  93. package/dist/src/init/executor.d.ts.map +0 -1
  94. package/dist/src/init/executor.js +0 -652
  95. package/dist/src/init/executor.js.map +0 -1
  96. package/dist/src/init/helpers-generator.d.ts +0 -42
  97. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  98. package/dist/src/init/helpers-generator.js +0 -613
  99. package/dist/src/init/helpers-generator.js.map +0 -1
  100. package/dist/src/init/index.d.ts +0 -12
  101. package/dist/src/init/index.d.ts.map +0 -1
  102. package/dist/src/init/index.js +0 -15
  103. package/dist/src/init/index.js.map +0 -1
  104. package/dist/src/init/mcp-generator.d.ts +0 -18
  105. package/dist/src/init/mcp-generator.d.ts.map +0 -1
  106. package/dist/src/init/mcp-generator.js +0 -71
  107. package/dist/src/init/mcp-generator.js.map +0 -1
  108. package/dist/src/init/settings-generator.d.ts +0 -14
  109. package/dist/src/init/settings-generator.d.ts.map +0 -1
  110. package/dist/src/init/settings-generator.js +0 -267
  111. package/dist/src/init/settings-generator.js.map +0 -1
  112. package/dist/src/init/statusline-generator.d.ts +0 -14
  113. package/dist/src/init/statusline-generator.d.ts.map +0 -1
  114. package/dist/src/init/statusline-generator.js +0 -206
  115. package/dist/src/init/statusline-generator.js.map +0 -1
  116. package/dist/src/init/types.d.ts +0 -240
  117. package/dist/src/init/types.d.ts.map +0 -1
  118. package/dist/src/init/types.js +0 -210
  119. package/dist/src/init/types.js.map +0 -1
  120. package/dist/src/mcp-client.d.ts +0 -92
  121. package/dist/src/mcp-client.d.ts.map +0 -1
  122. package/dist/src/mcp-client.js +0 -203
  123. package/dist/src/mcp-client.js.map +0 -1
  124. package/dist/src/mcp-server.d.ts +0 -153
  125. package/dist/src/mcp-server.d.ts.map +0 -1
  126. package/dist/src/mcp-server.js +0 -453
  127. package/dist/src/mcp-server.js.map +0 -1
  128. package/dist/src/mcp-tools/agent-tools.d.ts +0 -8
  129. package/dist/src/mcp-tools/agent-tools.d.ts.map +0 -1
  130. package/dist/src/mcp-tools/agent-tools.js +0 -426
  131. package/dist/src/mcp-tools/agent-tools.js.map +0 -1
  132. package/dist/src/mcp-tools/config-tools.d.ts +0 -8
  133. package/dist/src/mcp-tools/config-tools.d.ts.map +0 -1
  134. package/dist/src/mcp-tools/config-tools.js +0 -333
  135. package/dist/src/mcp-tools/config-tools.js.map +0 -1
  136. package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -8
  137. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +0 -1
  138. package/dist/src/mcp-tools/hive-mind-tools.js +0 -447
  139. package/dist/src/mcp-tools/hive-mind-tools.js.map +0 -1
  140. package/dist/src/mcp-tools/hooks-tools.d.ts +0 -41
  141. package/dist/src/mcp-tools/hooks-tools.d.ts.map +0 -1
  142. package/dist/src/mcp-tools/hooks-tools.js +0 -1711
  143. package/dist/src/mcp-tools/hooks-tools.js.map +0 -1
  144. package/dist/src/mcp-tools/index.d.ts +0 -16
  145. package/dist/src/mcp-tools/index.d.ts.map +0 -1
  146. package/dist/src/mcp-tools/index.js +0 -15
  147. package/dist/src/mcp-tools/index.js.map +0 -1
  148. package/dist/src/mcp-tools/memory-tools.d.ts +0 -8
  149. package/dist/src/mcp-tools/memory-tools.d.ts.map +0 -1
  150. package/dist/src/mcp-tools/memory-tools.js +0 -235
  151. package/dist/src/mcp-tools/memory-tools.js.map +0 -1
  152. package/dist/src/mcp-tools/session-tools.d.ts +0 -8
  153. package/dist/src/mcp-tools/session-tools.d.ts.map +0 -1
  154. package/dist/src/mcp-tools/session-tools.js +0 -315
  155. package/dist/src/mcp-tools/session-tools.js.map +0 -1
  156. package/dist/src/mcp-tools/swarm-tools.d.ts +0 -8
  157. package/dist/src/mcp-tools/swarm-tools.d.ts.map +0 -1
  158. package/dist/src/mcp-tools/swarm-tools.js +0 -102
  159. package/dist/src/mcp-tools/swarm-tools.js.map +0 -1
  160. package/dist/src/mcp-tools/task-tools.d.ts +0 -8
  161. package/dist/src/mcp-tools/task-tools.d.ts.map +0 -1
  162. package/dist/src/mcp-tools/task-tools.js +0 -302
  163. package/dist/src/mcp-tools/task-tools.js.map +0 -1
  164. package/dist/src/mcp-tools/types.d.ts +0 -31
  165. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  166. package/dist/src/mcp-tools/types.js +0 -7
  167. package/dist/src/mcp-tools/types.js.map +0 -1
  168. package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
  169. package/dist/src/mcp-tools/workflow-tools.d.ts.map +0 -1
  170. package/dist/src/mcp-tools/workflow-tools.js +0 -481
  171. package/dist/src/mcp-tools/workflow-tools.js.map +0 -1
  172. package/dist/src/output.d.ts +0 -133
  173. package/dist/src/output.d.ts.map +0 -1
  174. package/dist/src/output.js +0 -513
  175. package/dist/src/output.js.map +0 -1
  176. package/dist/src/parser.d.ts +0 -41
  177. package/dist/src/parser.d.ts.map +0 -1
  178. package/dist/src/parser.js +0 -353
  179. package/dist/src/parser.js.map +0 -1
  180. package/dist/src/prompt.d.ts +0 -44
  181. package/dist/src/prompt.d.ts.map +0 -1
  182. package/dist/src/prompt.js +0 -501
  183. package/dist/src/prompt.js.map +0 -1
  184. package/dist/src/services/index.d.ts +0 -7
  185. package/dist/src/services/index.d.ts.map +0 -1
  186. package/dist/src/services/index.js +0 -6
  187. package/dist/src/services/index.js.map +0 -1
  188. package/dist/src/services/worker-daemon.d.ts +0 -153
  189. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  190. package/dist/src/services/worker-daemon.js +0 -567
  191. package/dist/src/services/worker-daemon.js.map +0 -1
  192. package/dist/src/types.d.ts +0 -198
  193. package/dist/src/types.d.ts.map +0 -1
  194. package/dist/src/types.js +0 -38
  195. package/dist/src/types.js.map +0 -1
  196. package/dist/tsconfig.tsbuildinfo +0 -1
  197. package/src/commands/agent.ts +0 -955
  198. package/src/commands/config.ts +0 -452
  199. package/src/commands/daemon.ts +0 -621
  200. package/src/commands/hive-mind.ts +0 -928
  201. package/src/commands/hooks.ts +0 -2603
  202. package/src/commands/index.ts +0 -118
  203. package/src/commands/init.ts +0 -597
  204. package/src/commands/mcp.ts +0 -753
  205. package/src/commands/memory.ts +0 -1161
  206. package/src/commands/migrate.ts +0 -447
  207. package/src/commands/process.ts +0 -695
  208. package/src/commands/session.ts +0 -891
  209. package/src/commands/start.ts +0 -457
  210. package/src/commands/status.ts +0 -736
  211. package/src/commands/swarm.ts +0 -648
  212. package/src/commands/task.ts +0 -792
  213. package/src/commands/workflow.ts +0 -742
  214. package/src/config-adapter.ts +0 -210
  215. package/src/index.ts +0 -427
  216. package/src/infrastructure/in-memory-repositories.ts +0 -310
  217. package/src/init/claudemd-generator.ts +0 -631
  218. package/src/init/executor.ts +0 -762
  219. package/src/init/helpers-generator.ts +0 -628
  220. package/src/init/index.ts +0 -60
  221. package/src/init/mcp-generator.ts +0 -83
  222. package/src/init/settings-generator.ts +0 -284
  223. package/src/init/statusline-generator.ts +0 -211
  224. package/src/init/types.ts +0 -447
  225. package/src/mcp-client.ts +0 -241
  226. package/src/mcp-server.ts +0 -577
  227. package/src/mcp-tools/agent-tools.ts +0 -466
  228. package/src/mcp-tools/config-tools.ts +0 -370
  229. package/src/mcp-tools/hive-mind-tools.ts +0 -521
  230. package/src/mcp-tools/hooks-tools.ts +0 -1888
  231. package/src/mcp-tools/index.ts +0 -16
  232. package/src/mcp-tools/memory-tools.ts +0 -270
  233. package/src/mcp-tools/session-tools.ts +0 -359
  234. package/src/mcp-tools/swarm-tools.ts +0 -105
  235. package/src/mcp-tools/task-tools.ts +0 -347
  236. package/src/mcp-tools/types.ts +0 -33
  237. package/src/mcp-tools/workflow-tools.ts +0 -573
  238. package/src/output.ts +0 -639
  239. package/src/parser.ts +0 -417
  240. package/src/prompt.ts +0 -619
  241. package/src/services/index.ts +0 -15
  242. package/src/services/worker-daemon.ts +0 -726
  243. package/src/types.ts +0 -287
@@ -1,695 +0,0 @@
1
- /**
2
- * V3 CLI Process Management Command
3
- * Background process management, daemon mode, and monitoring
4
- */
5
-
6
- import { writeFileSync, readFileSync, unlinkSync, existsSync, mkdirSync } from 'fs';
7
- import { dirname, resolve } from 'path';
8
- import type { Command, CommandContext, CommandResult } from '../types.js';
9
-
10
- // Helper functions for PID file management
11
- function writePidFile(pidFile: string, pid: number, port: number): void {
12
- const dir = dirname(resolve(pidFile));
13
- if (!existsSync(dir)) {
14
- mkdirSync(dir, { recursive: true });
15
- }
16
- const data = JSON.stringify({ pid, port, startedAt: new Date().toISOString() });
17
- writeFileSync(resolve(pidFile), data, 'utf-8');
18
- }
19
-
20
- function readPidFile(pidFile: string): { pid: number; port: number; startedAt: string } | null {
21
- try {
22
- const path = resolve(pidFile);
23
- if (!existsSync(path)) return null;
24
- const data = readFileSync(path, 'utf-8');
25
- return JSON.parse(data);
26
- } catch {
27
- return null;
28
- }
29
- }
30
-
31
- function removePidFile(pidFile: string): boolean {
32
- try {
33
- const path = resolve(pidFile);
34
- if (existsSync(path)) {
35
- unlinkSync(path);
36
- return true;
37
- }
38
- return false;
39
- } catch {
40
- return false;
41
- }
42
- }
43
-
44
- /**
45
- * Daemon subcommand - start/stop background daemon
46
- */
47
- const daemonCommand: Command = {
48
- name: 'daemon',
49
- description: 'Manage background daemon process',
50
- options: [
51
- {
52
- name: 'action',
53
- type: 'string',
54
- description: 'Action to perform',
55
- choices: ['start', 'stop', 'restart', 'status'],
56
- default: 'status',
57
- },
58
- {
59
- name: 'port',
60
- type: 'number',
61
- description: 'Port for daemon HTTP API',
62
- default: 3847,
63
- },
64
- {
65
- name: 'pid-file',
66
- type: 'string',
67
- description: 'PID file location',
68
- default: '.claude-flow/daemon.pid',
69
- },
70
- {
71
- name: 'log-file',
72
- type: 'string',
73
- description: 'Log file location',
74
- default: '.claude-flow/daemon.log',
75
- },
76
- {
77
- name: 'detach',
78
- type: 'boolean',
79
- description: 'Run in detached mode',
80
- default: true,
81
- },
82
- ],
83
- examples: [
84
- { command: 'claude-flow process daemon --action start', description: 'Start the daemon' },
85
- { command: 'claude-flow process daemon --action stop', description: 'Stop the daemon' },
86
- { command: 'claude-flow process daemon --action restart --port 3850', description: 'Restart on different port' },
87
- { command: 'claude-flow process daemon --action status', description: 'Check daemon status' },
88
- ],
89
- action: async (ctx: CommandContext): Promise<CommandResult> => {
90
- const action = (ctx.flags?.action as string) || 'status';
91
- const port = (ctx.flags?.port as number) || 3847;
92
- const pidFile = (ctx.flags?.['pid-file'] as string) || '.claude-flow/daemon.pid';
93
- const logFile = (ctx.flags?.['log-file'] as string) || '.claude-flow/daemon.log';
94
- const detach = ctx.flags?.detach !== false;
95
-
96
- // Check existing daemon state from PID file
97
- const existingDaemon = readPidFile(pidFile);
98
- const daemonState = {
99
- status: existingDaemon ? 'running' as const : 'stopped' as const,
100
- pid: existingDaemon?.pid || null as number | null,
101
- uptime: existingDaemon ? Math.floor((Date.now() - new Date(existingDaemon.startedAt).getTime()) / 1000) : 0,
102
- port: existingDaemon?.port || port,
103
- startedAt: existingDaemon?.startedAt || null as string | null,
104
- };
105
-
106
- switch (action) {
107
- case 'start':
108
- if (existingDaemon) {
109
- console.log('\nāš ļø Daemon already running\n');
110
- console.log(` šŸ“ PID: ${existingDaemon.pid}`);
111
- console.log(` 🌐 Port: ${existingDaemon.port}`);
112
- console.log(` ā±ļø Started: ${existingDaemon.startedAt}`);
113
- break;
114
- }
115
-
116
- console.log('\nšŸš€ Starting claude-flow daemon...\n');
117
- const newPid = process.pid; // Use actual process PID
118
- daemonState.status = 'running';
119
- daemonState.pid = newPid;
120
- daemonState.startedAt = new Date().toISOString();
121
- daemonState.uptime = 0;
122
-
123
- // Persist PID to file
124
- writePidFile(pidFile, newPid, port);
125
-
126
- console.log(' āœ… Daemon started successfully');
127
- console.log(` šŸ“ PID: ${daemonState.pid}`);
128
- console.log(` 🌐 HTTP API: http://localhost:${port}`);
129
- console.log(` šŸ“„ PID file: ${resolve(pidFile)}`);
130
- console.log(` šŸ“ Log file: ${logFile}`);
131
- console.log(` šŸ”„ Mode: ${detach ? 'detached' : 'foreground'}`);
132
- console.log('\n Services:');
133
- console.log(' ā”œā”€ MCP Server: listening');
134
- console.log(' ā”œā”€ Agent Pool: initialized (0 agents)');
135
- console.log(' ā”œā”€ Memory Service: connected');
136
- console.log(' ā”œā”€ Task Queue: ready');
137
- console.log(' └─ Swarm Coordinator: standby');
138
- break;
139
-
140
- case 'stop':
141
- if (!existingDaemon) {
142
- console.log('\nāš ļø No daemon running\n');
143
- break;
144
- }
145
- console.log('\nšŸ›‘ Stopping claude-flow daemon...\n');
146
- console.log(` šŸ“ Stopping PID ${existingDaemon.pid}...`);
147
-
148
- // Remove PID file
149
- removePidFile(pidFile);
150
- daemonState.status = 'stopped';
151
- daemonState.pid = null;
152
-
153
- console.log(' āœ… Daemon stopped successfully');
154
- console.log(' šŸ“ PID file removed');
155
- console.log(' 🧹 Resources cleaned up');
156
- break;
157
-
158
- case 'restart':
159
- console.log('\nšŸ”„ Restarting claude-flow daemon...\n');
160
- if (existingDaemon) {
161
- console.log(` šŸ›‘ Stopping PID ${existingDaemon.pid}...`);
162
- removePidFile(pidFile);
163
- console.log(' āœ… Stopped');
164
- }
165
- console.log(' šŸš€ Starting new instance...');
166
- const restartPid = process.pid;
167
- writePidFile(pidFile, restartPid, port);
168
- daemonState.pid = restartPid;
169
- daemonState.status = 'running';
170
- console.log(` āœ… Daemon restarted (PID: ${restartPid})`);
171
- console.log(` 🌐 HTTP API: http://localhost:${port}`);
172
- console.log(` šŸ“„ PID file: ${resolve(pidFile)}`);
173
- break;
174
-
175
- case 'status':
176
- console.log('\nšŸ“Š Daemon Status\n');
177
- console.log(' ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”');
178
- console.log(' │ claude-flow daemon │');
179
- console.log(' ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤');
180
- if (existingDaemon) {
181
- const uptime = Math.floor((Date.now() - new Date(existingDaemon.startedAt).getTime()) / 1000);
182
- const uptimeStr = uptime < 60 ? `${uptime}s` : `${Math.floor(uptime / 60)}m ${uptime % 60}s`;
183
- console.log(' │ Status: 🟢 running │');
184
- console.log(` │ PID: ${existingDaemon.pid.toString().padEnd(28)}│`);
185
- console.log(` │ Port: ${existingDaemon.port.toString().padEnd(28)}│`);
186
- console.log(` │ Uptime: ${uptimeStr.padEnd(28)}│`);
187
- } else {
188
- console.log(' │ Status: ⚪ not running │');
189
- console.log(` │ Port: ${port.toString().padEnd(28)}│`);
190
- console.log(` │ PID file: ${pidFile.substring(0, 26).padEnd(28)}│`);
191
- console.log(' │ Uptime: -- │');
192
- }
193
- console.log(' ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜');
194
- if (!existingDaemon) {
195
- console.log('\n To start: claude-flow process daemon --action start');
196
- }
197
- break;
198
- }
199
-
200
- return { success: true, data: daemonState };
201
- },
202
- };
203
-
204
- /**
205
- * Monitor subcommand - real-time process monitoring
206
- */
207
- const monitorCommand: Command = {
208
- name: 'monitor',
209
- description: 'Real-time process and resource monitoring',
210
- options: [
211
- {
212
- name: 'interval',
213
- type: 'number',
214
- description: 'Refresh interval in seconds',
215
- default: 2,
216
- },
217
- {
218
- name: 'format',
219
- type: 'string',
220
- description: 'Output format',
221
- choices: ['dashboard', 'compact', 'json'],
222
- default: 'dashboard',
223
- },
224
- {
225
- name: 'components',
226
- type: 'string',
227
- description: 'Components to monitor (comma-separated)',
228
- default: 'all',
229
- },
230
- {
231
- name: 'watch',
232
- type: 'boolean',
233
- description: 'Continuous monitoring mode',
234
- default: false,
235
- },
236
- {
237
- name: 'alerts',
238
- type: 'boolean',
239
- description: 'Enable threshold alerts',
240
- default: true,
241
- },
242
- ],
243
- examples: [
244
- { command: 'claude-flow process monitor', description: 'Show process dashboard' },
245
- { command: 'claude-flow process monitor --watch --interval 5', description: 'Watch mode' },
246
- { command: 'claude-flow process monitor --components agents,memory,tasks', description: 'Monitor specific components' },
247
- { command: 'claude-flow process monitor --format json', description: 'JSON output' },
248
- ],
249
- action: async (ctx: CommandContext): Promise<CommandResult> => {
250
- const interval = (ctx.flags?.interval as number) || 2;
251
- const format = (ctx.flags?.format as string) || 'dashboard';
252
- const watch = ctx.flags?.watch === true;
253
- const alerts = ctx.flags?.alerts !== false;
254
-
255
- // Default monitoring data (updated by real process stats when available)
256
- const metrics = {
257
- timestamp: new Date().toISOString(),
258
- system: {
259
- cpuUsage: Math.random() * 30 + 5,
260
- memoryUsed: Math.floor(Math.random() * 500) + 100,
261
- memoryTotal: 2048,
262
- uptime: Math.floor(Math.random() * 86400),
263
- },
264
- agents: {
265
- active: Math.floor(Math.random() * 5),
266
- idle: Math.floor(Math.random() * 3),
267
- total: 0,
268
- poolSize: 10,
269
- },
270
- tasks: {
271
- running: Math.floor(Math.random() * 3),
272
- queued: Math.floor(Math.random() * 5),
273
- completed: Math.floor(Math.random() * 100) + 50,
274
- failed: Math.floor(Math.random() * 5),
275
- },
276
- memory: {
277
- vectorCount: Math.floor(Math.random() * 10000) + 1000,
278
- indexSize: Math.floor(Math.random() * 50) + 10,
279
- cacheHitRate: Math.random() * 0.3 + 0.65,
280
- avgSearchTime: Math.random() * 5 + 1,
281
- },
282
- network: {
283
- mcpConnections: Math.floor(Math.random() * 3) + 1,
284
- requestsPerMin: Math.floor(Math.random() * 100) + 20,
285
- avgLatency: Math.random() * 50 + 10,
286
- },
287
- };
288
-
289
- metrics.agents.total = metrics.agents.active + metrics.agents.idle;
290
-
291
- if (format === 'json') {
292
- console.log(JSON.stringify(metrics, null, 2));
293
- return { success: true, data: metrics };
294
- }
295
-
296
- if (format === 'compact') {
297
- console.log('\nšŸ“Š Process Monitor (compact)\n');
298
- console.log(`CPU: ${metrics.system.cpuUsage.toFixed(1)}% | Memory: ${metrics.system.memoryUsed}MB/${metrics.system.memoryTotal}MB`);
299
- console.log(`Agents: ${metrics.agents.active}/${metrics.agents.total} active | Tasks: ${metrics.tasks.running} running, ${metrics.tasks.queued} queued`);
300
- console.log(`Memory: ${metrics.memory.vectorCount} vectors | Cache: ${(metrics.memory.cacheHitRate * 100).toFixed(1)}%`);
301
- return { success: true, data: metrics };
302
- }
303
-
304
- // Dashboard format
305
- console.log('\n╔══════════════════════════════════════════════════════════════╗');
306
- console.log('ā•‘ šŸ–„ļø CLAUDE-FLOW PROCESS MONITOR ā•‘');
307
- console.log('╠══════════════════════════════════════════════════════════════╣');
308
-
309
- // System metrics
310
- console.log('ā•‘ SYSTEM ā•‘');
311
- const cpuBar = 'ā–ˆ'.repeat(Math.floor(metrics.system.cpuUsage / 5)) + 'ā–‘'.repeat(20 - Math.floor(metrics.system.cpuUsage / 5));
312
- const memPercent = (metrics.system.memoryUsed / metrics.system.memoryTotal) * 100;
313
- const memBar = 'ā–ˆ'.repeat(Math.floor(memPercent / 5)) + 'ā–‘'.repeat(20 - Math.floor(memPercent / 5));
314
- console.log(`ā•‘ CPU: [${cpuBar}] ${metrics.system.cpuUsage.toFixed(1).padStart(5)}% ā•‘`);
315
- console.log(`ā•‘ Memory: [${memBar}] ${metrics.system.memoryUsed}MB/${metrics.system.memoryTotal}MB ā•‘`);
316
-
317
- console.log('╠══════════════════════════════════════════════════════════════╣');
318
-
319
- // Agents
320
- console.log('ā•‘ AGENTS ā•‘');
321
- console.log(`ā•‘ Active: ${metrics.agents.active.toString().padEnd(3)} Idle: ${metrics.agents.idle.toString().padEnd(3)} Pool: ${metrics.agents.poolSize.toString().padEnd(3)} ā•‘`);
322
-
323
- console.log('╠══════════════════════════════════════════════════════════════╣');
324
-
325
- // Tasks
326
- console.log('ā•‘ TASKS ā•‘');
327
- console.log(`ā•‘ Running: ${metrics.tasks.running.toString().padEnd(3)} Queued: ${metrics.tasks.queued.toString().padEnd(3)} Completed: ${metrics.tasks.completed.toString().padEnd(5)} Failed: ${metrics.tasks.failed.toString().padEnd(3)}ā•‘`);
328
-
329
- console.log('╠══════════════════════════════════════════════════════════════╣');
330
-
331
- // Memory service
332
- console.log('ā•‘ MEMORY SERVICE ā•‘');
333
- console.log(`ā•‘ Vectors: ${metrics.memory.vectorCount.toString().padEnd(7)} Index: ${metrics.memory.indexSize}MB ā•‘`);
334
- console.log(`ā•‘ Cache Hit: ${(metrics.memory.cacheHitRate * 100).toFixed(1)}% Avg Search: ${metrics.memory.avgSearchTime.toFixed(2)}ms ā•‘`);
335
-
336
- console.log('╠══════════════════════════════════════════════════════════════╣');
337
-
338
- // Network
339
- console.log('ā•‘ NETWORK ā•‘');
340
- console.log(`ā•‘ MCP Connections: ${metrics.network.mcpConnections} Requests/min: ${metrics.network.requestsPerMin.toString().padEnd(5)} ā•‘`);
341
- console.log(`ā•‘ Avg Latency: ${metrics.network.avgLatency.toFixed(1)}ms ā•‘`);
342
-
343
- console.log('ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•');
344
-
345
- if (alerts) {
346
- console.log('\nšŸ“¢ Alerts:');
347
- if (metrics.system.cpuUsage > 80) {
348
- console.log(' āš ļø High CPU usage detected');
349
- }
350
- if (memPercent > 80) {
351
- console.log(' āš ļø High memory usage detected');
352
- }
353
- if (metrics.tasks.failed > 10) {
354
- console.log(' āš ļø Elevated task failure rate');
355
- }
356
- if (metrics.memory.cacheHitRate < 0.5) {
357
- console.log(' āš ļø Low cache hit rate');
358
- }
359
- if (metrics.system.cpuUsage <= 80 && memPercent <= 80 && metrics.tasks.failed <= 10 && metrics.memory.cacheHitRate >= 0.5) {
360
- console.log(' āœ… All systems nominal');
361
- }
362
- }
363
-
364
- if (watch) {
365
- console.log(`\nšŸ”„ Refresh: ${interval}s | Press Ctrl+C to exit`);
366
- }
367
-
368
- return { success: true, data: metrics };
369
- },
370
- };
371
-
372
- /**
373
- * Workers subcommand - manage background workers
374
- */
375
- const workersCommand: Command = {
376
- name: 'workers',
377
- description: 'Manage background worker processes',
378
- options: [
379
- {
380
- name: 'action',
381
- type: 'string',
382
- description: 'Action to perform',
383
- choices: ['list', 'spawn', 'kill', 'scale'],
384
- default: 'list',
385
- },
386
- {
387
- name: 'type',
388
- type: 'string',
389
- description: 'Worker type',
390
- choices: ['task', 'memory', 'coordinator', 'neural'],
391
- },
392
- {
393
- name: 'count',
394
- type: 'number',
395
- description: 'Number of workers',
396
- default: 1,
397
- },
398
- {
399
- name: 'id',
400
- type: 'string',
401
- description: 'Worker ID (for kill action)',
402
- },
403
- ],
404
- examples: [
405
- { command: 'claude-flow process workers --action list', description: 'List all workers' },
406
- { command: 'claude-flow process workers --action spawn --type task --count 3', description: 'Spawn task workers' },
407
- { command: 'claude-flow process workers --action kill --id worker-123', description: 'Kill specific worker' },
408
- { command: 'claude-flow process workers --action scale --type memory --count 5', description: 'Scale memory workers' },
409
- ],
410
- action: async (ctx: CommandContext): Promise<CommandResult> => {
411
- const action = (ctx.flags?.action as string) || 'list';
412
- const type = ctx.flags?.type as string;
413
- const count = (ctx.flags?.count as number) || 1;
414
- const id = ctx.flags?.id as string;
415
-
416
- // Default worker data (updated by real worker stats when available)
417
- const workers = [
418
- { id: 'worker-task-001', type: 'task', status: 'running', started: '2024-01-15T10:30:00Z', tasks: 42 },
419
- { id: 'worker-task-002', type: 'task', status: 'running', started: '2024-01-15T10:30:05Z', tasks: 38 },
420
- { id: 'worker-memory-001', type: 'memory', status: 'running', started: '2024-01-15T10:30:00Z', tasks: 156 },
421
- { id: 'worker-coord-001', type: 'coordinator', status: 'idle', started: '2024-01-15T10:30:00Z', tasks: 12 },
422
- ];
423
-
424
- switch (action) {
425
- case 'list':
426
- console.log('\nšŸ‘· Background Workers\n');
427
- console.log('ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”');
428
- console.log('│ ID │ Type │ Status │ Tasks │');
429
- console.log('ā”œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¤');
430
- for (const worker of workers) {
431
- const statusIcon = worker.status === 'running' ? '🟢' : '🟔';
432
- console.log(`│ ${worker.id.padEnd(18)} │ ${worker.type.padEnd(11)} │ ${statusIcon} ${worker.status.padEnd(6)} │ ${worker.tasks.toString().padEnd(7)} │`);
433
- }
434
- console.log('ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜');
435
- console.log(`\nTotal: ${workers.length} workers`);
436
- break;
437
-
438
- case 'spawn':
439
- if (!type) {
440
- console.log('\nāŒ Worker type required. Use --type <task|memory|coordinator|neural>');
441
- return { success: false, message: 'Worker type required' };
442
- }
443
- console.log(`\nšŸš€ Spawning ${count} ${type} worker(s)...\n`);
444
- for (let i = 0; i < count; i++) {
445
- const newId = `worker-${type}-${String(workers.length + i + 1).padStart(3, '0')}`;
446
- console.log(` āœ… Spawned: ${newId}`);
447
- }
448
- console.log(`\n Total ${type} workers: ${workers.filter(w => w.type === type).length + count}`);
449
- break;
450
-
451
- case 'kill':
452
- if (!id) {
453
- console.log('\nāŒ Worker ID required. Use --id <worker-id>');
454
- return { success: false, message: 'Worker ID required' };
455
- }
456
- console.log(`\nšŸ›‘ Killing worker: ${id}...\n`);
457
- console.log(' āœ… Worker terminated');
458
- console.log(' 🧹 Resources released');
459
- break;
460
-
461
- case 'scale':
462
- if (!type) {
463
- console.log('\nāŒ Worker type required. Use --type <task|memory|coordinator|neural>');
464
- return { success: false, message: 'Worker type required' };
465
- }
466
- const current = workers.filter(w => w.type === type).length;
467
- console.log(`\nšŸ“Š Scaling ${type} workers: ${current} → ${count}\n`);
468
- if (count > current) {
469
- console.log(` šŸš€ Spawning ${count - current} new worker(s)...`);
470
- } else if (count < current) {
471
- console.log(` šŸ›‘ Terminating ${current - count} worker(s)...`);
472
- } else {
473
- console.log(' ā„¹ļø No scaling needed');
474
- }
475
- console.log(` āœ… Scaling complete`);
476
- break;
477
- }
478
-
479
- return { success: true, data: workers };
480
- },
481
- };
482
-
483
- /**
484
- * Signals subcommand - send signals to processes
485
- */
486
- const signalsCommand: Command = {
487
- name: 'signals',
488
- description: 'Send signals to managed processes',
489
- options: [
490
- {
491
- name: 'target',
492
- type: 'string',
493
- description: 'Target process or group',
494
- required: true,
495
- },
496
- {
497
- name: 'signal',
498
- type: 'string',
499
- description: 'Signal to send',
500
- choices: ['graceful-shutdown', 'force-kill', 'pause', 'resume', 'reload-config'],
501
- default: 'graceful-shutdown',
502
- },
503
- {
504
- name: 'timeout',
505
- type: 'number',
506
- description: 'Timeout in seconds',
507
- default: 30,
508
- },
509
- ],
510
- examples: [
511
- { command: 'claude-flow process signals --target daemon --signal graceful-shutdown', description: 'Graceful shutdown' },
512
- { command: 'claude-flow process signals --target workers --signal pause', description: 'Pause workers' },
513
- { command: 'claude-flow process signals --target all --signal reload-config', description: 'Reload all configs' },
514
- ],
515
- action: async (ctx: CommandContext): Promise<CommandResult> => {
516
- const target = ctx.flags?.target as string;
517
- const signal = (ctx.flags?.signal as string) || 'graceful-shutdown';
518
- const timeout = (ctx.flags?.timeout as number) || 30;
519
-
520
- if (!target) {
521
- console.log('\nāŒ Target required. Use --target <daemon|workers|all|process-id>');
522
- return { success: false, message: 'Target required' };
523
- }
524
-
525
- console.log(`\nšŸ“” Sending signal: ${signal}\n`);
526
- console.log(` Target: ${target}`);
527
- console.log(` Timeout: ${timeout}s`);
528
- console.log('');
529
-
530
- const signalMessages: Record<string, string> = {
531
- 'graceful-shutdown': 'šŸ›‘ Initiating graceful shutdown...',
532
- 'force-kill': 'šŸ’€ Force killing process...',
533
- 'pause': 'āøļø Pausing process...',
534
- 'resume': 'ā–¶ļø Resuming process...',
535
- 'reload-config': 'šŸ”„ Reloading configuration...',
536
- };
537
-
538
- console.log(` ${signalMessages[signal] || 'Sending signal...'}`);
539
- console.log(' āœ… Signal acknowledged');
540
-
541
- return { success: true, data: { target, signal, timeout } };
542
- },
543
- };
544
-
545
- /**
546
- * Logs subcommand - view process logs
547
- */
548
- const logsCommand: Command = {
549
- name: 'logs',
550
- description: 'View and manage process logs',
551
- options: [
552
- {
553
- name: 'source',
554
- type: 'string',
555
- description: 'Log source',
556
- choices: ['daemon', 'workers', 'tasks', 'all'],
557
- default: 'all',
558
- },
559
- {
560
- name: 'tail',
561
- type: 'number',
562
- description: 'Number of lines to show',
563
- default: 50,
564
- },
565
- {
566
- name: 'follow',
567
- type: 'boolean',
568
- description: 'Follow log output',
569
- default: false,
570
- },
571
- {
572
- name: 'level',
573
- type: 'string',
574
- description: 'Minimum log level',
575
- choices: ['debug', 'info', 'warn', 'error'],
576
- default: 'info',
577
- },
578
- {
579
- name: 'since',
580
- type: 'string',
581
- description: 'Show logs since timestamp or duration',
582
- },
583
- {
584
- name: 'grep',
585
- type: 'string',
586
- description: 'Filter logs by pattern',
587
- },
588
- ],
589
- examples: [
590
- { command: 'claude-flow process logs', description: 'Show recent logs' },
591
- { command: 'claude-flow process logs --source daemon --tail 100', description: 'Daemon logs' },
592
- { command: 'claude-flow process logs --follow --level error', description: 'Follow error logs' },
593
- { command: 'claude-flow process logs --since 1h --grep "error"', description: 'Search logs' },
594
- ],
595
- action: async (ctx: CommandContext): Promise<CommandResult> => {
596
- const source = (ctx.flags?.source as string) || 'all';
597
- const tail = (ctx.flags?.tail as number) || 50;
598
- const follow = ctx.flags?.follow === true;
599
- const level = (ctx.flags?.level as string) || 'info';
600
- const since = ctx.flags?.since as string;
601
- const grep = ctx.flags?.grep as string;
602
-
603
- console.log(`\nšŸ“œ Process Logs (${source})\n`);
604
- console.log(` Level: ${level}+ | Lines: ${tail}${since ? ` | Since: ${since}` : ''}${grep ? ` | Filter: ${grep}` : ''}`);
605
- console.log('─'.repeat(70));
606
-
607
- // Default log entries (loaded from actual logs when available)
608
- const levels = ['debug', 'info', 'warn', 'error'];
609
- const levelIcons: Record<string, string> = {
610
- debug: 'šŸ”',
611
- info: 'ā„¹ļø ',
612
- warn: 'āš ļø ',
613
- error: 'āŒ',
614
- };
615
- const sources = ['daemon', 'worker-task', 'worker-memory', 'coordinator'];
616
- const messages = [
617
- 'Processing task queue...',
618
- 'Agent spawned successfully',
619
- 'Memory index optimized',
620
- 'Configuration reloaded',
621
- 'MCP connection established',
622
- 'Task completed: 42ms',
623
- 'Cache hit rate: 87%',
624
- 'Swarm topology updated',
625
- 'Health check passed',
626
- 'Neural pattern learned',
627
- ];
628
-
629
- const minLevelIdx = levels.indexOf(level);
630
- const now = Date.now();
631
-
632
- for (let i = 0; i < Math.min(tail, 15); i++) {
633
- const logLevel = levels[Math.floor(Math.random() * (levels.length - minLevelIdx)) + minLevelIdx];
634
- const logSource = sources[Math.floor(Math.random() * sources.length)];
635
- const message = messages[Math.floor(Math.random() * messages.length)];
636
- const timestamp = new Date(now - (tail - i) * 1000 * 60).toISOString().substring(11, 23);
637
-
638
- if (grep && !message.toLowerCase().includes(grep.toLowerCase())) {
639
- continue;
640
- }
641
-
642
- console.log(`${timestamp} ${levelIcons[logLevel]} [${logSource.padEnd(14)}] ${message}`);
643
- }
644
-
645
- console.log('─'.repeat(70));
646
-
647
- if (follow) {
648
- console.log('\nšŸ”„ Following logs... (Ctrl+C to exit)');
649
- }
650
-
651
- return { success: true, data: { source, tail, level } };
652
- },
653
- };
654
-
655
- /**
656
- * Main process command
657
- */
658
- export const processCommand: Command = {
659
- name: 'process',
660
- description: 'Background process management, daemon, and monitoring',
661
- aliases: ['proc', 'ps'],
662
- subcommands: [daemonCommand, monitorCommand, workersCommand, signalsCommand, logsCommand],
663
- options: [
664
- {
665
- name: 'help',
666
- short: 'h',
667
- type: 'boolean',
668
- description: 'Show help for process command',
669
- },
670
- ],
671
- examples: [
672
- { command: 'claude-flow process daemon --action start', description: 'Start daemon' },
673
- { command: 'claude-flow process monitor --watch', description: 'Watch processes' },
674
- { command: 'claude-flow process workers --action list', description: 'List workers' },
675
- { command: 'claude-flow process logs --follow', description: 'Follow logs' },
676
- ],
677
- action: async (_ctx: CommandContext): Promise<CommandResult> => {
678
- // Show help if no subcommand
679
- console.log('\nšŸ”§ Process Management\n');
680
- console.log('Manage background processes, daemons, and workers.\n');
681
- console.log('Subcommands:');
682
- console.log(' daemon - Manage background daemon process');
683
- console.log(' monitor - Real-time process monitoring');
684
- console.log(' workers - Manage background workers');
685
- console.log(' signals - Send signals to processes');
686
- console.log(' logs - View and manage process logs');
687
- console.log('\nExamples:');
688
- console.log(' claude-flow process daemon --action start');
689
- console.log(' claude-flow process monitor --watch');
690
- console.log(' claude-flow process workers --action spawn --type task --count 3');
691
- console.log(' claude-flow process logs --follow --level error');
692
-
693
- return { success: true, data: { help: true } };
694
- },
695
- };