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

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 (239) hide show
  1. package/package.json +10 -23
  2. package/README.md +0 -1186
  3. package/bin/cli.js +0 -14
  4. package/dist/src/commands/agent.d.ts +0 -8
  5. package/dist/src/commands/agent.d.ts.map +0 -1
  6. package/dist/src/commands/agent.js +0 -819
  7. package/dist/src/commands/agent.js.map +0 -1
  8. package/dist/src/commands/config.d.ts +0 -8
  9. package/dist/src/commands/config.d.ts.map +0 -1
  10. package/dist/src/commands/config.js +0 -406
  11. package/dist/src/commands/config.js.map +0 -1
  12. package/dist/src/commands/daemon.d.ts +0 -8
  13. package/dist/src/commands/daemon.d.ts.map +0 -1
  14. package/dist/src/commands/daemon.js +0 -545
  15. package/dist/src/commands/daemon.js.map +0 -1
  16. package/dist/src/commands/hive-mind.d.ts +0 -8
  17. package/dist/src/commands/hive-mind.d.ts.map +0 -1
  18. package/dist/src/commands/hive-mind.js +0 -844
  19. package/dist/src/commands/hive-mind.js.map +0 -1
  20. package/dist/src/commands/hooks.d.ts +0 -8
  21. package/dist/src/commands/hooks.d.ts.map +0 -1
  22. package/dist/src/commands/hooks.js +0 -2098
  23. package/dist/src/commands/hooks.js.map +0 -1
  24. package/dist/src/commands/index.d.ts +0 -52
  25. package/dist/src/commands/index.d.ts.map +0 -1
  26. package/dist/src/commands/index.js +0 -108
  27. package/dist/src/commands/index.js.map +0 -1
  28. package/dist/src/commands/init.d.ts +0 -8
  29. package/dist/src/commands/init.d.ts.map +0 -1
  30. package/dist/src/commands/init.js +0 -532
  31. package/dist/src/commands/init.js.map +0 -1
  32. package/dist/src/commands/mcp.d.ts +0 -11
  33. package/dist/src/commands/mcp.d.ts.map +0 -1
  34. package/dist/src/commands/mcp.js +0 -662
  35. package/dist/src/commands/mcp.js.map +0 -1
  36. package/dist/src/commands/memory.d.ts +0 -8
  37. package/dist/src/commands/memory.d.ts.map +0 -1
  38. package/dist/src/commands/memory.js +0 -977
  39. package/dist/src/commands/memory.js.map +0 -1
  40. package/dist/src/commands/migrate.d.ts +0 -8
  41. package/dist/src/commands/migrate.d.ts.map +0 -1
  42. package/dist/src/commands/migrate.js +0 -398
  43. package/dist/src/commands/migrate.js.map +0 -1
  44. package/dist/src/commands/process.d.ts +0 -10
  45. package/dist/src/commands/process.d.ts.map +0 -1
  46. package/dist/src/commands/process.js +0 -641
  47. package/dist/src/commands/process.js.map +0 -1
  48. package/dist/src/commands/session.d.ts +0 -8
  49. package/dist/src/commands/session.d.ts.map +0 -1
  50. package/dist/src/commands/session.js +0 -750
  51. package/dist/src/commands/session.js.map +0 -1
  52. package/dist/src/commands/start.d.ts +0 -8
  53. package/dist/src/commands/start.d.ts.map +0 -1
  54. package/dist/src/commands/start.js +0 -398
  55. package/dist/src/commands/start.js.map +0 -1
  56. package/dist/src/commands/status.d.ts +0 -8
  57. package/dist/src/commands/status.d.ts.map +0 -1
  58. package/dist/src/commands/status.js +0 -584
  59. package/dist/src/commands/status.js.map +0 -1
  60. package/dist/src/commands/swarm.d.ts +0 -8
  61. package/dist/src/commands/swarm.d.ts.map +0 -1
  62. package/dist/src/commands/swarm.js +0 -573
  63. package/dist/src/commands/swarm.js.map +0 -1
  64. package/dist/src/commands/task.d.ts +0 -8
  65. package/dist/src/commands/task.d.ts.map +0 -1
  66. package/dist/src/commands/task.js +0 -671
  67. package/dist/src/commands/task.js.map +0 -1
  68. package/dist/src/commands/workflow.d.ts +0 -8
  69. package/dist/src/commands/workflow.d.ts.map +0 -1
  70. package/dist/src/commands/workflow.js +0 -617
  71. package/dist/src/commands/workflow.js.map +0 -1
  72. package/dist/src/config-adapter.d.ts +0 -15
  73. package/dist/src/config-adapter.d.ts.map +0 -1
  74. package/dist/src/config-adapter.js +0 -185
  75. package/dist/src/config-adapter.js.map +0 -1
  76. package/dist/src/index.d.ts +0 -55
  77. package/dist/src/index.d.ts.map +0 -1
  78. package/dist/src/index.js +0 -353
  79. package/dist/src/index.js.map +0 -1
  80. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  81. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  82. package/dist/src/infrastructure/in-memory-repositories.js +0 -264
  83. package/dist/src/infrastructure/in-memory-repositories.js.map +0 -1
  84. package/dist/src/init/claudemd-generator.d.ts +0 -15
  85. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  86. package/dist/src/init/claudemd-generator.js +0 -626
  87. package/dist/src/init/claudemd-generator.js.map +0 -1
  88. package/dist/src/init/executor.d.ts +0 -11
  89. package/dist/src/init/executor.d.ts.map +0 -1
  90. package/dist/src/init/executor.js +0 -652
  91. package/dist/src/init/executor.js.map +0 -1
  92. package/dist/src/init/helpers-generator.d.ts +0 -42
  93. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  94. package/dist/src/init/helpers-generator.js +0 -613
  95. package/dist/src/init/helpers-generator.js.map +0 -1
  96. package/dist/src/init/index.d.ts +0 -12
  97. package/dist/src/init/index.d.ts.map +0 -1
  98. package/dist/src/init/index.js +0 -15
  99. package/dist/src/init/index.js.map +0 -1
  100. package/dist/src/init/mcp-generator.d.ts +0 -18
  101. package/dist/src/init/mcp-generator.d.ts.map +0 -1
  102. package/dist/src/init/mcp-generator.js +0 -71
  103. package/dist/src/init/mcp-generator.js.map +0 -1
  104. package/dist/src/init/settings-generator.d.ts +0 -14
  105. package/dist/src/init/settings-generator.d.ts.map +0 -1
  106. package/dist/src/init/settings-generator.js +0 -267
  107. package/dist/src/init/settings-generator.js.map +0 -1
  108. package/dist/src/init/statusline-generator.d.ts +0 -14
  109. package/dist/src/init/statusline-generator.d.ts.map +0 -1
  110. package/dist/src/init/statusline-generator.js +0 -206
  111. package/dist/src/init/statusline-generator.js.map +0 -1
  112. package/dist/src/init/types.d.ts +0 -240
  113. package/dist/src/init/types.d.ts.map +0 -1
  114. package/dist/src/init/types.js +0 -210
  115. package/dist/src/init/types.js.map +0 -1
  116. package/dist/src/mcp-client.d.ts +0 -92
  117. package/dist/src/mcp-client.d.ts.map +0 -1
  118. package/dist/src/mcp-client.js +0 -203
  119. package/dist/src/mcp-client.js.map +0 -1
  120. package/dist/src/mcp-server.d.ts +0 -153
  121. package/dist/src/mcp-server.d.ts.map +0 -1
  122. package/dist/src/mcp-server.js +0 -453
  123. package/dist/src/mcp-server.js.map +0 -1
  124. package/dist/src/mcp-tools/agent-tools.d.ts +0 -8
  125. package/dist/src/mcp-tools/agent-tools.d.ts.map +0 -1
  126. package/dist/src/mcp-tools/agent-tools.js +0 -426
  127. package/dist/src/mcp-tools/agent-tools.js.map +0 -1
  128. package/dist/src/mcp-tools/config-tools.d.ts +0 -8
  129. package/dist/src/mcp-tools/config-tools.d.ts.map +0 -1
  130. package/dist/src/mcp-tools/config-tools.js +0 -333
  131. package/dist/src/mcp-tools/config-tools.js.map +0 -1
  132. package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -8
  133. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +0 -1
  134. package/dist/src/mcp-tools/hive-mind-tools.js +0 -447
  135. package/dist/src/mcp-tools/hive-mind-tools.js.map +0 -1
  136. package/dist/src/mcp-tools/hooks-tools.d.ts +0 -41
  137. package/dist/src/mcp-tools/hooks-tools.d.ts.map +0 -1
  138. package/dist/src/mcp-tools/hooks-tools.js +0 -1711
  139. package/dist/src/mcp-tools/hooks-tools.js.map +0 -1
  140. package/dist/src/mcp-tools/index.d.ts +0 -16
  141. package/dist/src/mcp-tools/index.d.ts.map +0 -1
  142. package/dist/src/mcp-tools/index.js +0 -15
  143. package/dist/src/mcp-tools/index.js.map +0 -1
  144. package/dist/src/mcp-tools/memory-tools.d.ts +0 -8
  145. package/dist/src/mcp-tools/memory-tools.d.ts.map +0 -1
  146. package/dist/src/mcp-tools/memory-tools.js +0 -235
  147. package/dist/src/mcp-tools/memory-tools.js.map +0 -1
  148. package/dist/src/mcp-tools/session-tools.d.ts +0 -8
  149. package/dist/src/mcp-tools/session-tools.d.ts.map +0 -1
  150. package/dist/src/mcp-tools/session-tools.js +0 -315
  151. package/dist/src/mcp-tools/session-tools.js.map +0 -1
  152. package/dist/src/mcp-tools/swarm-tools.d.ts +0 -8
  153. package/dist/src/mcp-tools/swarm-tools.d.ts.map +0 -1
  154. package/dist/src/mcp-tools/swarm-tools.js +0 -102
  155. package/dist/src/mcp-tools/swarm-tools.js.map +0 -1
  156. package/dist/src/mcp-tools/task-tools.d.ts +0 -8
  157. package/dist/src/mcp-tools/task-tools.d.ts.map +0 -1
  158. package/dist/src/mcp-tools/task-tools.js +0 -302
  159. package/dist/src/mcp-tools/task-tools.js.map +0 -1
  160. package/dist/src/mcp-tools/types.d.ts +0 -31
  161. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  162. package/dist/src/mcp-tools/types.js +0 -7
  163. package/dist/src/mcp-tools/types.js.map +0 -1
  164. package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
  165. package/dist/src/mcp-tools/workflow-tools.d.ts.map +0 -1
  166. package/dist/src/mcp-tools/workflow-tools.js +0 -481
  167. package/dist/src/mcp-tools/workflow-tools.js.map +0 -1
  168. package/dist/src/output.d.ts +0 -133
  169. package/dist/src/output.d.ts.map +0 -1
  170. package/dist/src/output.js +0 -513
  171. package/dist/src/output.js.map +0 -1
  172. package/dist/src/parser.d.ts +0 -41
  173. package/dist/src/parser.d.ts.map +0 -1
  174. package/dist/src/parser.js +0 -353
  175. package/dist/src/parser.js.map +0 -1
  176. package/dist/src/prompt.d.ts +0 -44
  177. package/dist/src/prompt.d.ts.map +0 -1
  178. package/dist/src/prompt.js +0 -501
  179. package/dist/src/prompt.js.map +0 -1
  180. package/dist/src/services/index.d.ts +0 -7
  181. package/dist/src/services/index.d.ts.map +0 -1
  182. package/dist/src/services/index.js +0 -6
  183. package/dist/src/services/index.js.map +0 -1
  184. package/dist/src/services/worker-daemon.d.ts +0 -153
  185. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  186. package/dist/src/services/worker-daemon.js +0 -567
  187. package/dist/src/services/worker-daemon.js.map +0 -1
  188. package/dist/src/types.d.ts +0 -198
  189. package/dist/src/types.d.ts.map +0 -1
  190. package/dist/src/types.js +0 -38
  191. package/dist/src/types.js.map +0 -1
  192. package/dist/tsconfig.tsbuildinfo +0 -1
  193. package/src/commands/agent.ts +0 -955
  194. package/src/commands/config.ts +0 -452
  195. package/src/commands/daemon.ts +0 -621
  196. package/src/commands/hive-mind.ts +0 -928
  197. package/src/commands/hooks.ts +0 -2603
  198. package/src/commands/index.ts +0 -118
  199. package/src/commands/init.ts +0 -597
  200. package/src/commands/mcp.ts +0 -753
  201. package/src/commands/memory.ts +0 -1161
  202. package/src/commands/migrate.ts +0 -447
  203. package/src/commands/process.ts +0 -695
  204. package/src/commands/session.ts +0 -891
  205. package/src/commands/start.ts +0 -457
  206. package/src/commands/status.ts +0 -736
  207. package/src/commands/swarm.ts +0 -648
  208. package/src/commands/task.ts +0 -792
  209. package/src/commands/workflow.ts +0 -742
  210. package/src/config-adapter.ts +0 -210
  211. package/src/index.ts +0 -427
  212. package/src/infrastructure/in-memory-repositories.ts +0 -310
  213. package/src/init/claudemd-generator.ts +0 -631
  214. package/src/init/executor.ts +0 -762
  215. package/src/init/helpers-generator.ts +0 -628
  216. package/src/init/index.ts +0 -60
  217. package/src/init/mcp-generator.ts +0 -83
  218. package/src/init/settings-generator.ts +0 -284
  219. package/src/init/statusline-generator.ts +0 -211
  220. package/src/init/types.ts +0 -447
  221. package/src/mcp-client.ts +0 -241
  222. package/src/mcp-server.ts +0 -577
  223. package/src/mcp-tools/agent-tools.ts +0 -466
  224. package/src/mcp-tools/config-tools.ts +0 -370
  225. package/src/mcp-tools/hive-mind-tools.ts +0 -521
  226. package/src/mcp-tools/hooks-tools.ts +0 -1888
  227. package/src/mcp-tools/index.ts +0 -16
  228. package/src/mcp-tools/memory-tools.ts +0 -270
  229. package/src/mcp-tools/session-tools.ts +0 -359
  230. package/src/mcp-tools/swarm-tools.ts +0 -105
  231. package/src/mcp-tools/task-tools.ts +0 -347
  232. package/src/mcp-tools/types.ts +0 -33
  233. package/src/mcp-tools/workflow-tools.ts +0 -573
  234. package/src/output.ts +0 -639
  235. package/src/parser.ts +0 -417
  236. package/src/prompt.ts +0 -619
  237. package/src/services/index.ts +0 -15
  238. package/src/services/worker-daemon.ts +0 -726
  239. 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
- };