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,671 +0,0 @@
1
- /**
2
- * V3 CLI Task Command
3
- * Task management for Claude Flow
4
- */
5
- import { output } from '../output.js';
6
- import { select, confirm, input, multiSelect } from '../prompt.js';
7
- import { callMCPTool, MCPClientError } from '../mcp-client.js';
8
- // Task types
9
- const TASK_TYPES = [
10
- { value: 'implementation', label: 'Implementation', hint: 'Feature implementation' },
11
- { value: 'bug-fix', label: 'Bug Fix', hint: 'Fix a bug or issue' },
12
- { value: 'refactoring', label: 'Refactoring', hint: 'Code refactoring' },
13
- { value: 'testing', label: 'Testing', hint: 'Write or update tests' },
14
- { value: 'documentation', label: 'Documentation', hint: 'Documentation updates' },
15
- { value: 'research', label: 'Research', hint: 'Research and analysis' },
16
- { value: 'review', label: 'Review', hint: 'Code review' },
17
- { value: 'optimization', label: 'Optimization', hint: 'Performance optimization' },
18
- { value: 'security', label: 'Security', hint: 'Security audit or fix' },
19
- { value: 'custom', label: 'Custom', hint: 'Custom task type' }
20
- ];
21
- // Task priorities
22
- const TASK_PRIORITIES = [
23
- { value: 'critical', label: 'Critical', hint: 'Highest priority' },
24
- { value: 'high', label: 'High', hint: 'Important task' },
25
- { value: 'normal', label: 'Normal', hint: 'Standard priority' },
26
- { value: 'low', label: 'Low', hint: 'Lower priority' }
27
- ];
28
- // Format task status with color
29
- function formatStatus(status) {
30
- switch (status) {
31
- case 'completed':
32
- return output.success(status);
33
- case 'running':
34
- case 'in_progress':
35
- return output.info(status);
36
- case 'pending':
37
- case 'queued':
38
- return output.warning(status);
39
- case 'failed':
40
- case 'cancelled':
41
- return output.error(status);
42
- default:
43
- return status;
44
- }
45
- }
46
- // Format priority with color
47
- function formatPriority(priority) {
48
- switch (priority) {
49
- case 'critical':
50
- return output.error(priority);
51
- case 'high':
52
- return output.warning(priority);
53
- case 'normal':
54
- return priority;
55
- case 'low':
56
- return output.dim(priority);
57
- default:
58
- return priority;
59
- }
60
- }
61
- // Create subcommand
62
- const createCommand = {
63
- name: 'create',
64
- aliases: ['new', 'add'],
65
- description: 'Create a new task',
66
- options: [
67
- {
68
- name: 'type',
69
- short: 't',
70
- description: 'Task type',
71
- type: 'string',
72
- choices: TASK_TYPES.map(t => t.value)
73
- },
74
- {
75
- name: 'description',
76
- short: 'd',
77
- description: 'Task description',
78
- type: 'string'
79
- },
80
- {
81
- name: 'priority',
82
- short: 'p',
83
- description: 'Task priority',
84
- type: 'string',
85
- choices: TASK_PRIORITIES.map(p => p.value),
86
- default: 'normal'
87
- },
88
- {
89
- name: 'assign',
90
- short: 'a',
91
- description: 'Assign to agent(s)',
92
- type: 'string'
93
- },
94
- {
95
- name: 'tags',
96
- description: 'Comma-separated tags',
97
- type: 'string'
98
- },
99
- {
100
- name: 'parent',
101
- description: 'Parent task ID',
102
- type: 'string'
103
- },
104
- {
105
- name: 'dependencies',
106
- description: 'Comma-separated task IDs that must complete first',
107
- type: 'string'
108
- },
109
- {
110
- name: 'timeout',
111
- description: 'Task timeout in seconds',
112
- type: 'number',
113
- default: 300
114
- }
115
- ],
116
- action: async (ctx) => {
117
- let taskType = ctx.flags.type;
118
- let description = ctx.flags.description;
119
- let priority = ctx.flags.priority;
120
- // Interactive mode
121
- if (!taskType && ctx.interactive) {
122
- taskType = await select({
123
- message: 'Select task type:',
124
- options: TASK_TYPES
125
- });
126
- }
127
- if (!description && ctx.interactive) {
128
- description = await input({
129
- message: 'Task description:',
130
- validate: (v) => v.length > 0 || 'Description is required'
131
- });
132
- }
133
- if (!taskType || !description) {
134
- output.printError('Task type and description are required');
135
- output.printInfo('Use --type and --description flags, or run in interactive mode');
136
- return { success: false, exitCode: 1 };
137
- }
138
- if (!priority && ctx.interactive) {
139
- priority = await select({
140
- message: 'Select priority:',
141
- options: TASK_PRIORITIES,
142
- default: 'normal'
143
- });
144
- }
145
- // Parse tags and dependencies
146
- const tags = ctx.flags.tags ? ctx.flags.tags.split(',').map(t => t.trim()) : [];
147
- const dependencies = ctx.flags.dependencies
148
- ? ctx.flags.dependencies.split(',').map(d => d.trim())
149
- : [];
150
- output.writeln();
151
- output.printInfo(`Creating ${taskType} task...`);
152
- try {
153
- const result = await callMCPTool('task/create', {
154
- type: taskType,
155
- description,
156
- priority: priority || 'normal',
157
- assignedTo: ctx.flags.assign ? [ctx.flags.assign] : undefined,
158
- parentId: ctx.flags.parent,
159
- dependencies,
160
- tags,
161
- timeout: ctx.flags.timeout,
162
- metadata: {
163
- source: 'cli',
164
- createdBy: 'user'
165
- }
166
- });
167
- output.writeln();
168
- output.printSuccess(`Task created: ${result.taskId}`);
169
- output.writeln();
170
- output.printTable({
171
- columns: [
172
- { key: 'property', header: 'Property', width: 15 },
173
- { key: 'value', header: 'Value', width: 40 }
174
- ],
175
- data: [
176
- { property: 'ID', value: result.taskId },
177
- { property: 'Type', value: result.type },
178
- { property: 'Description', value: result.description },
179
- { property: 'Priority', value: formatPriority(result.priority) },
180
- { property: 'Status', value: formatStatus(result.status) },
181
- { property: 'Assigned To', value: result.assignedTo?.join(', ') || 'Unassigned' },
182
- { property: 'Tags', value: result.tags.join(', ') || 'None' },
183
- { property: 'Created', value: new Date(result.createdAt).toLocaleString() }
184
- ]
185
- });
186
- if (ctx.flags.format === 'json') {
187
- output.printJson(result);
188
- }
189
- return { success: true, data: result };
190
- }
191
- catch (error) {
192
- if (error instanceof MCPClientError) {
193
- output.printError(`Failed to create task: ${error.message}`);
194
- }
195
- else {
196
- output.printError(`Unexpected error: ${String(error)}`);
197
- }
198
- return { success: false, exitCode: 1 };
199
- }
200
- }
201
- };
202
- // List subcommand
203
- const listCommand = {
204
- name: 'list',
205
- aliases: ['ls'],
206
- description: 'List tasks',
207
- options: [
208
- {
209
- name: 'status',
210
- short: 's',
211
- description: 'Filter by status',
212
- type: 'string',
213
- choices: ['pending', 'running', 'completed', 'failed', 'cancelled', 'all']
214
- },
215
- {
216
- name: 'type',
217
- short: 't',
218
- description: 'Filter by task type',
219
- type: 'string'
220
- },
221
- {
222
- name: 'priority',
223
- short: 'p',
224
- description: 'Filter by priority',
225
- type: 'string'
226
- },
227
- {
228
- name: 'agent',
229
- short: 'a',
230
- description: 'Filter by assigned agent',
231
- type: 'string'
232
- },
233
- {
234
- name: 'limit',
235
- short: 'l',
236
- description: 'Maximum number of tasks to show',
237
- type: 'number',
238
- default: 20
239
- },
240
- {
241
- name: 'all',
242
- description: 'Show all tasks including completed',
243
- type: 'boolean',
244
- default: false
245
- }
246
- ],
247
- action: async (ctx) => {
248
- const status = ctx.flags.all ? 'all' : ctx.flags.status || 'pending,running';
249
- const limit = ctx.flags.limit;
250
- try {
251
- const result = await callMCPTool('task/list', {
252
- status,
253
- type: ctx.flags.type,
254
- priority: ctx.flags.priority,
255
- agentId: ctx.flags.agent,
256
- limit,
257
- offset: 0
258
- });
259
- if (ctx.flags.format === 'json') {
260
- output.printJson(result);
261
- return { success: true, data: result };
262
- }
263
- output.writeln();
264
- output.writeln(output.bold('Tasks'));
265
- output.writeln();
266
- if (result.tasks.length === 0) {
267
- output.printInfo('No tasks found matching criteria');
268
- return { success: true, data: result };
269
- }
270
- output.printTable({
271
- columns: [
272
- { key: 'id', header: 'ID', width: 15 },
273
- { key: 'type', header: 'Type', width: 15 },
274
- { key: 'description', header: 'Description', width: 30 },
275
- { key: 'priority', header: 'Priority', width: 10 },
276
- { key: 'status', header: 'Status', width: 12 },
277
- { key: 'progress', header: 'Progress', width: 10 }
278
- ],
279
- data: result.tasks.map(t => ({
280
- id: t.id,
281
- type: t.type,
282
- description: t.description.length > 27
283
- ? t.description.slice(0, 27) + '...'
284
- : t.description,
285
- priority: formatPriority(t.priority),
286
- status: formatStatus(t.status),
287
- progress: `${t.progress}%`
288
- }))
289
- });
290
- output.writeln();
291
- output.printInfo(`Showing ${result.tasks.length} of ${result.total} tasks`);
292
- return { success: true, data: result };
293
- }
294
- catch (error) {
295
- if (error instanceof MCPClientError) {
296
- output.printError(`Failed to list tasks: ${error.message}`);
297
- }
298
- else {
299
- output.printError(`Unexpected error: ${String(error)}`);
300
- }
301
- return { success: false, exitCode: 1 };
302
- }
303
- }
304
- };
305
- // Status subcommand (get task details)
306
- const statusCommand = {
307
- name: 'status',
308
- aliases: ['info', 'get'],
309
- description: 'Get task status and details',
310
- options: [
311
- {
312
- name: 'id',
313
- description: 'Task ID',
314
- type: 'string'
315
- },
316
- {
317
- name: 'logs',
318
- description: 'Include execution logs',
319
- type: 'boolean',
320
- default: false
321
- }
322
- ],
323
- action: async (ctx) => {
324
- let taskId = ctx.args[0] || ctx.flags.id;
325
- if (!taskId && ctx.interactive) {
326
- taskId = await input({
327
- message: 'Enter task ID:',
328
- validate: (v) => v.length > 0 || 'Task ID is required'
329
- });
330
- }
331
- if (!taskId) {
332
- output.printError('Task ID is required');
333
- return { success: false, exitCode: 1 };
334
- }
335
- try {
336
- const result = await callMCPTool('task/status', {
337
- taskId,
338
- includeLogs: ctx.flags.logs,
339
- includeMetrics: true
340
- });
341
- if (ctx.flags.format === 'json') {
342
- output.printJson(result);
343
- return { success: true, data: result };
344
- }
345
- output.writeln();
346
- output.printBox([
347
- `Type: ${result.type}`,
348
- `Status: ${formatStatus(result.status)}`,
349
- `Priority: ${formatPriority(result.priority)}`,
350
- `Progress: ${result.progress}%`,
351
- '',
352
- `Description: ${result.description}`
353
- ].join('\n'), `Task: ${result.id}`);
354
- // Assignment info
355
- output.writeln();
356
- output.writeln(output.bold('Assignment'));
357
- output.printTable({
358
- columns: [
359
- { key: 'property', header: 'Property', width: 15 },
360
- { key: 'value', header: 'Value', width: 40 }
361
- ],
362
- data: [
363
- { property: 'Assigned To', value: result.assignedTo?.join(', ') || 'Unassigned' },
364
- { property: 'Parent Task', value: result.parentId || 'None' },
365
- { property: 'Dependencies', value: result.dependencies.join(', ') || 'None' },
366
- { property: 'Dependents', value: result.dependents.join(', ') || 'None' },
367
- { property: 'Tags', value: result.tags.join(', ') || 'None' }
368
- ]
369
- });
370
- // Timeline
371
- output.writeln();
372
- output.writeln(output.bold('Timeline'));
373
- output.printTable({
374
- columns: [
375
- { key: 'event', header: 'Event', width: 15 },
376
- { key: 'time', header: 'Time', width: 30 }
377
- ],
378
- data: [
379
- { event: 'Created', time: new Date(result.createdAt).toLocaleString() },
380
- { event: 'Started', time: result.startedAt ? new Date(result.startedAt).toLocaleString() : '-' },
381
- { event: 'Completed', time: result.completedAt ? new Date(result.completedAt).toLocaleString() : '-' }
382
- ]
383
- });
384
- // Metrics
385
- if (result.metrics) {
386
- output.writeln();
387
- output.writeln(output.bold('Metrics'));
388
- output.printTable({
389
- columns: [
390
- { key: 'metric', header: 'Metric', width: 20 },
391
- { key: 'value', header: 'Value', width: 20, align: 'right' }
392
- ],
393
- data: [
394
- { metric: 'Execution Time', value: `${(result.metrics.executionTime / 1000).toFixed(2)}s` },
395
- { metric: 'Retries', value: result.metrics.retries },
396
- { metric: 'Tokens Used', value: result.metrics.tokensUsed.toLocaleString() }
397
- ]
398
- });
399
- }
400
- // Error if failed
401
- if (result.status === 'failed' && result.error) {
402
- output.writeln();
403
- output.printError(`Error: ${result.error}`);
404
- }
405
- // Logs if requested
406
- if (ctx.flags.logs && result.logs && result.logs.length > 0) {
407
- output.writeln();
408
- output.writeln(output.bold('Execution Logs'));
409
- for (const log of result.logs.slice(-20)) {
410
- const time = new Date(log.timestamp).toLocaleTimeString();
411
- const level = log.level === 'error' ? output.error(`[${log.level}]`) :
412
- log.level === 'warn' ? output.warning(`[${log.level}]`) :
413
- output.dim(`[${log.level}]`);
414
- output.writeln(` ${output.dim(time)} ${level} ${log.message}`);
415
- }
416
- }
417
- return { success: true, data: result };
418
- }
419
- catch (error) {
420
- if (error instanceof MCPClientError) {
421
- output.printError(`Failed to get task status: ${error.message}`);
422
- }
423
- else {
424
- output.printError(`Unexpected error: ${String(error)}`);
425
- }
426
- return { success: false, exitCode: 1 };
427
- }
428
- }
429
- };
430
- // Cancel subcommand
431
- const cancelCommand = {
432
- name: 'cancel',
433
- aliases: ['abort', 'stop'],
434
- description: 'Cancel a running task',
435
- options: [
436
- {
437
- name: 'force',
438
- short: 'f',
439
- description: 'Force cancel without confirmation',
440
- type: 'boolean',
441
- default: false
442
- },
443
- {
444
- name: 'reason',
445
- short: 'r',
446
- description: 'Cancellation reason',
447
- type: 'string'
448
- }
449
- ],
450
- action: async (ctx) => {
451
- const taskId = ctx.args[0];
452
- const force = ctx.flags.force;
453
- const reason = ctx.flags.reason;
454
- if (!taskId) {
455
- output.printError('Task ID is required');
456
- return { success: false, exitCode: 1 };
457
- }
458
- if (!force && ctx.interactive) {
459
- const confirmed = await confirm({
460
- message: `Are you sure you want to cancel task ${taskId}?`,
461
- default: false
462
- });
463
- if (!confirmed) {
464
- output.printInfo('Operation cancelled');
465
- return { success: true };
466
- }
467
- }
468
- try {
469
- const result = await callMCPTool('task/cancel', {
470
- taskId,
471
- reason: reason || 'Cancelled by user via CLI'
472
- });
473
- output.writeln();
474
- output.printSuccess(`Task ${taskId} cancelled`);
475
- output.printInfo(`Previous status: ${result.previousStatus}`);
476
- if (ctx.flags.format === 'json') {
477
- output.printJson(result);
478
- }
479
- return { success: true, data: result };
480
- }
481
- catch (error) {
482
- if (error instanceof MCPClientError) {
483
- output.printError(`Failed to cancel task: ${error.message}`);
484
- }
485
- else {
486
- output.printError(`Unexpected error: ${String(error)}`);
487
- }
488
- return { success: false, exitCode: 1 };
489
- }
490
- }
491
- };
492
- // Assign subcommand
493
- const assignCommand = {
494
- name: 'assign',
495
- description: 'Assign a task to agent(s)',
496
- options: [
497
- {
498
- name: 'agent',
499
- short: 'a',
500
- description: 'Agent ID(s) to assign (comma-separated)',
501
- type: 'string'
502
- },
503
- {
504
- name: 'unassign',
505
- description: 'Remove current assignment',
506
- type: 'boolean',
507
- default: false
508
- }
509
- ],
510
- action: async (ctx) => {
511
- const taskId = ctx.args[0];
512
- const agentIds = ctx.flags.agent;
513
- const unassign = ctx.flags.unassign;
514
- if (!taskId) {
515
- output.printError('Task ID is required');
516
- return { success: false, exitCode: 1 };
517
- }
518
- if (!agentIds && !unassign) {
519
- // Interactive agent selection
520
- if (ctx.interactive) {
521
- try {
522
- const agents = await callMCPTool('agent/list', { status: 'active,idle' });
523
- if (agents.agents.length === 0) {
524
- output.printWarning('No available agents');
525
- return { success: false, exitCode: 1 };
526
- }
527
- const selectedAgents = await multiSelect({
528
- message: 'Select agent(s) to assign:',
529
- options: agents.agents.map(a => ({
530
- value: a.id,
531
- label: a.id,
532
- hint: `${a.type} - ${a.status}`
533
- })),
534
- required: true
535
- });
536
- if (selectedAgents.length === 0) {
537
- output.printInfo('No agents selected');
538
- return { success: true };
539
- }
540
- // Continue with assignment
541
- const result = await callMCPTool('task/assign', {
542
- taskId,
543
- agentIds: selectedAgents
544
- });
545
- output.writeln();
546
- output.printSuccess(`Task ${taskId} assigned to ${result.assignedTo.join(', ')}`);
547
- return { success: true, data: result };
548
- }
549
- catch (error) {
550
- if (error instanceof Error && error.message === 'User cancelled') {
551
- output.printInfo('Operation cancelled');
552
- return { success: true };
553
- }
554
- throw error;
555
- }
556
- }
557
- output.printError('Agent ID is required. Use --agent flag or run in interactive mode');
558
- return { success: false, exitCode: 1 };
559
- }
560
- try {
561
- const result = await callMCPTool('task/assign', {
562
- taskId,
563
- agentIds: unassign ? [] : agentIds.split(',').map(id => id.trim()),
564
- unassign
565
- });
566
- output.writeln();
567
- if (unassign) {
568
- output.printSuccess(`Task ${taskId} unassigned`);
569
- }
570
- else {
571
- output.printSuccess(`Task ${taskId} assigned to ${result.assignedTo.join(', ')}`);
572
- }
573
- if (ctx.flags.format === 'json') {
574
- output.printJson(result);
575
- }
576
- return { success: true, data: result };
577
- }
578
- catch (error) {
579
- if (error instanceof MCPClientError) {
580
- output.printError(`Failed to assign task: ${error.message}`);
581
- }
582
- else {
583
- output.printError(`Unexpected error: ${String(error)}`);
584
- }
585
- return { success: false, exitCode: 1 };
586
- }
587
- }
588
- };
589
- // Retry subcommand
590
- const retryCommand = {
591
- name: 'retry',
592
- aliases: ['rerun'],
593
- description: 'Retry a failed task',
594
- options: [
595
- {
596
- name: 'reset-state',
597
- description: 'Reset task state completely',
598
- type: 'boolean',
599
- default: false
600
- }
601
- ],
602
- action: async (ctx) => {
603
- const taskId = ctx.args[0];
604
- const resetState = ctx.flags['reset-state'];
605
- if (!taskId) {
606
- output.printError('Task ID is required');
607
- return { success: false, exitCode: 1 };
608
- }
609
- try {
610
- const result = await callMCPTool('task/retry', {
611
- taskId,
612
- resetState
613
- });
614
- output.writeln();
615
- output.printSuccess(`Task ${taskId} retried`);
616
- output.printInfo(`New task ID: ${result.newTaskId}`);
617
- output.printInfo(`Status: ${formatStatus(result.status)}`);
618
- if (ctx.flags.format === 'json') {
619
- output.printJson(result);
620
- }
621
- return { success: true, data: result };
622
- }
623
- catch (error) {
624
- if (error instanceof MCPClientError) {
625
- output.printError(`Failed to retry task: ${error.message}`);
626
- }
627
- else {
628
- output.printError(`Unexpected error: ${String(error)}`);
629
- }
630
- return { success: false, exitCode: 1 };
631
- }
632
- }
633
- };
634
- // Main task command
635
- export const taskCommand = {
636
- name: 'task',
637
- description: 'Task management commands',
638
- subcommands: [createCommand, listCommand, statusCommand, cancelCommand, assignCommand, retryCommand],
639
- options: [],
640
- examples: [
641
- { command: 'claude-flow task create -t implementation -d "Add user auth"', description: 'Create a task' },
642
- { command: 'claude-flow task list', description: 'List pending/running tasks' },
643
- { command: 'claude-flow task list --all', description: 'List all tasks' },
644
- { command: 'claude-flow task status task-123', description: 'Get task details' },
645
- { command: 'claude-flow task cancel task-123', description: 'Cancel a task' },
646
- { command: 'claude-flow task assign task-123 --agent coder-1', description: 'Assign task to agent' },
647
- { command: 'claude-flow task retry task-123', description: 'Retry a failed task' }
648
- ],
649
- action: async (ctx) => {
650
- // Show help if no subcommand
651
- output.writeln();
652
- output.writeln(output.bold('Task Management Commands'));
653
- output.writeln();
654
- output.writeln('Usage: claude-flow task <subcommand> [options]');
655
- output.writeln();
656
- output.writeln('Subcommands:');
657
- output.printList([
658
- `${output.highlight('create')} - Create a new task`,
659
- `${output.highlight('list')} - List tasks`,
660
- `${output.highlight('status')} - Get task details`,
661
- `${output.highlight('cancel')} - Cancel a running task`,
662
- `${output.highlight('assign')} - Assign task to agent(s)`,
663
- `${output.highlight('retry')} - Retry a failed task`
664
- ]);
665
- output.writeln();
666
- output.writeln('Run "claude-flow task <subcommand> --help" for subcommand help');
667
- return { success: true };
668
- }
669
- };
670
- export default taskCommand;
671
- //# sourceMappingURL=task.js.map