@claude-flow/cli 3.0.0-alpha.1

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 (229) hide show
  1. package/.agentic-flow/intelligence.json +16 -0
  2. package/.claude-flow/metrics/agent-metrics.json +1 -0
  3. package/.claude-flow/metrics/performance.json +87 -0
  4. package/.claude-flow/metrics/task-metrics.json +10 -0
  5. package/README.md +1186 -0
  6. package/__tests__/README.md +140 -0
  7. package/__tests__/TEST_SUMMARY.md +144 -0
  8. package/__tests__/cli.test.ts +558 -0
  9. package/__tests__/commands.test.ts +726 -0
  10. package/__tests__/config-adapter.test.ts +362 -0
  11. package/__tests__/config-loading.test.ts +106 -0
  12. package/__tests__/coverage/.tmp/coverage-0.json +1 -0
  13. package/__tests__/coverage/.tmp/coverage-1.json +1 -0
  14. package/__tests__/coverage/.tmp/coverage-2.json +1 -0
  15. package/__tests__/coverage/.tmp/coverage-3.json +1 -0
  16. package/__tests__/coverage/.tmp/coverage-4.json +1 -0
  17. package/__tests__/coverage/.tmp/coverage-5.json +1 -0
  18. package/__tests__/mcp-client.test.ts +480 -0
  19. package/__tests__/p1-commands.test.ts +1064 -0
  20. package/bin/cli.js +14 -0
  21. package/dist/src/commands/agent.d.ts +8 -0
  22. package/dist/src/commands/agent.d.ts.map +1 -0
  23. package/dist/src/commands/agent.js +803 -0
  24. package/dist/src/commands/agent.js.map +1 -0
  25. package/dist/src/commands/config.d.ts +8 -0
  26. package/dist/src/commands/config.d.ts.map +1 -0
  27. package/dist/src/commands/config.js +406 -0
  28. package/dist/src/commands/config.js.map +1 -0
  29. package/dist/src/commands/hive-mind.d.ts +8 -0
  30. package/dist/src/commands/hive-mind.d.ts.map +1 -0
  31. package/dist/src/commands/hive-mind.js +627 -0
  32. package/dist/src/commands/hive-mind.js.map +1 -0
  33. package/dist/src/commands/hooks.d.ts +8 -0
  34. package/dist/src/commands/hooks.d.ts.map +1 -0
  35. package/dist/src/commands/hooks.js +2098 -0
  36. package/dist/src/commands/hooks.js.map +1 -0
  37. package/dist/src/commands/index.d.ts +51 -0
  38. package/dist/src/commands/index.d.ts.map +1 -0
  39. package/dist/src/commands/index.js +105 -0
  40. package/dist/src/commands/index.js.map +1 -0
  41. package/dist/src/commands/init.d.ts +8 -0
  42. package/dist/src/commands/init.d.ts.map +1 -0
  43. package/dist/src/commands/init.js +532 -0
  44. package/dist/src/commands/init.js.map +1 -0
  45. package/dist/src/commands/mcp.d.ts +11 -0
  46. package/dist/src/commands/mcp.d.ts.map +1 -0
  47. package/dist/src/commands/mcp.js +662 -0
  48. package/dist/src/commands/mcp.js.map +1 -0
  49. package/dist/src/commands/memory.d.ts +8 -0
  50. package/dist/src/commands/memory.d.ts.map +1 -0
  51. package/dist/src/commands/memory.js +911 -0
  52. package/dist/src/commands/memory.js.map +1 -0
  53. package/dist/src/commands/migrate.d.ts +8 -0
  54. package/dist/src/commands/migrate.d.ts.map +1 -0
  55. package/dist/src/commands/migrate.js +398 -0
  56. package/dist/src/commands/migrate.js.map +1 -0
  57. package/dist/src/commands/process.d.ts +10 -0
  58. package/dist/src/commands/process.d.ts.map +1 -0
  59. package/dist/src/commands/process.js +566 -0
  60. package/dist/src/commands/process.js.map +1 -0
  61. package/dist/src/commands/session.d.ts +8 -0
  62. package/dist/src/commands/session.d.ts.map +1 -0
  63. package/dist/src/commands/session.js +750 -0
  64. package/dist/src/commands/session.js.map +1 -0
  65. package/dist/src/commands/start.d.ts +8 -0
  66. package/dist/src/commands/start.d.ts.map +1 -0
  67. package/dist/src/commands/start.js +398 -0
  68. package/dist/src/commands/start.js.map +1 -0
  69. package/dist/src/commands/status.d.ts +8 -0
  70. package/dist/src/commands/status.d.ts.map +1 -0
  71. package/dist/src/commands/status.js +560 -0
  72. package/dist/src/commands/status.js.map +1 -0
  73. package/dist/src/commands/swarm.d.ts +8 -0
  74. package/dist/src/commands/swarm.d.ts.map +1 -0
  75. package/dist/src/commands/swarm.js +573 -0
  76. package/dist/src/commands/swarm.js.map +1 -0
  77. package/dist/src/commands/task.d.ts +8 -0
  78. package/dist/src/commands/task.d.ts.map +1 -0
  79. package/dist/src/commands/task.js +671 -0
  80. package/dist/src/commands/task.js.map +1 -0
  81. package/dist/src/commands/workflow.d.ts +8 -0
  82. package/dist/src/commands/workflow.d.ts.map +1 -0
  83. package/dist/src/commands/workflow.js +617 -0
  84. package/dist/src/commands/workflow.js.map +1 -0
  85. package/dist/src/config-adapter.d.ts +15 -0
  86. package/dist/src/config-adapter.d.ts.map +1 -0
  87. package/dist/src/config-adapter.js +185 -0
  88. package/dist/src/config-adapter.js.map +1 -0
  89. package/dist/src/index.d.ts +55 -0
  90. package/dist/src/index.d.ts.map +1 -0
  91. package/dist/src/index.js +312 -0
  92. package/dist/src/index.js.map +1 -0
  93. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  94. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  95. package/dist/src/infrastructure/in-memory-repositories.js +264 -0
  96. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -0
  97. package/dist/src/init/claudemd-generator.d.ts +15 -0
  98. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  99. package/dist/src/init/claudemd-generator.js +626 -0
  100. package/dist/src/init/claudemd-generator.js.map +1 -0
  101. package/dist/src/init/executor.d.ts +11 -0
  102. package/dist/src/init/executor.d.ts.map +1 -0
  103. package/dist/src/init/executor.js +647 -0
  104. package/dist/src/init/executor.js.map +1 -0
  105. package/dist/src/init/helpers-generator.d.ts +42 -0
  106. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  107. package/dist/src/init/helpers-generator.js +613 -0
  108. package/dist/src/init/helpers-generator.js.map +1 -0
  109. package/dist/src/init/index.d.ts +12 -0
  110. package/dist/src/init/index.d.ts.map +1 -0
  111. package/dist/src/init/index.js +15 -0
  112. package/dist/src/init/index.js.map +1 -0
  113. package/dist/src/init/mcp-generator.d.ts +18 -0
  114. package/dist/src/init/mcp-generator.d.ts.map +1 -0
  115. package/dist/src/init/mcp-generator.js +71 -0
  116. package/dist/src/init/mcp-generator.js.map +1 -0
  117. package/dist/src/init/settings-generator.d.ts +14 -0
  118. package/dist/src/init/settings-generator.d.ts.map +1 -0
  119. package/dist/src/init/settings-generator.js +257 -0
  120. package/dist/src/init/settings-generator.js.map +1 -0
  121. package/dist/src/init/statusline-generator.d.ts +14 -0
  122. package/dist/src/init/statusline-generator.d.ts.map +1 -0
  123. package/dist/src/init/statusline-generator.js +206 -0
  124. package/dist/src/init/statusline-generator.js.map +1 -0
  125. package/dist/src/init/types.d.ts +240 -0
  126. package/dist/src/init/types.d.ts.map +1 -0
  127. package/dist/src/init/types.js +210 -0
  128. package/dist/src/init/types.js.map +1 -0
  129. package/dist/src/mcp-client.d.ts +92 -0
  130. package/dist/src/mcp-client.d.ts.map +1 -0
  131. package/dist/src/mcp-client.js +189 -0
  132. package/dist/src/mcp-client.js.map +1 -0
  133. package/dist/src/mcp-server.d.ts +153 -0
  134. package/dist/src/mcp-server.d.ts.map +1 -0
  135. package/dist/src/mcp-server.js +448 -0
  136. package/dist/src/mcp-server.js.map +1 -0
  137. package/dist/src/mcp-tools/agent-tools.d.ts +8 -0
  138. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -0
  139. package/dist/src/mcp-tools/agent-tools.js +90 -0
  140. package/dist/src/mcp-tools/agent-tools.js.map +1 -0
  141. package/dist/src/mcp-tools/config-tools.d.ts +8 -0
  142. package/dist/src/mcp-tools/config-tools.d.ts.map +1 -0
  143. package/dist/src/mcp-tools/config-tools.js +86 -0
  144. package/dist/src/mcp-tools/config-tools.js.map +1 -0
  145. package/dist/src/mcp-tools/hooks-tools.d.ts +41 -0
  146. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -0
  147. package/dist/src/mcp-tools/hooks-tools.js +1646 -0
  148. package/dist/src/mcp-tools/hooks-tools.js.map +1 -0
  149. package/dist/src/mcp-tools/index.d.ts +12 -0
  150. package/dist/src/mcp-tools/index.d.ts.map +1 -0
  151. package/dist/src/mcp-tools/index.js +11 -0
  152. package/dist/src/mcp-tools/index.js.map +1 -0
  153. package/dist/src/mcp-tools/memory-tools.d.ts +8 -0
  154. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -0
  155. package/dist/src/mcp-tools/memory-tools.js +87 -0
  156. package/dist/src/mcp-tools/memory-tools.js.map +1 -0
  157. package/dist/src/mcp-tools/swarm-tools.d.ts +8 -0
  158. package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -0
  159. package/dist/src/mcp-tools/swarm-tools.js +67 -0
  160. package/dist/src/mcp-tools/swarm-tools.js.map +1 -0
  161. package/dist/src/mcp-tools/types.d.ts +31 -0
  162. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  163. package/dist/src/mcp-tools/types.js +7 -0
  164. package/dist/src/mcp-tools/types.js.map +1 -0
  165. package/dist/src/output.d.ts +117 -0
  166. package/dist/src/output.d.ts.map +1 -0
  167. package/dist/src/output.js +471 -0
  168. package/dist/src/output.js.map +1 -0
  169. package/dist/src/parser.d.ts +41 -0
  170. package/dist/src/parser.d.ts.map +1 -0
  171. package/dist/src/parser.js +353 -0
  172. package/dist/src/parser.js.map +1 -0
  173. package/dist/src/prompt.d.ts +44 -0
  174. package/dist/src/prompt.d.ts.map +1 -0
  175. package/dist/src/prompt.js +501 -0
  176. package/dist/src/prompt.js.map +1 -0
  177. package/dist/src/types.d.ts +198 -0
  178. package/dist/src/types.d.ts.map +1 -0
  179. package/dist/src/types.js +38 -0
  180. package/dist/src/types.js.map +1 -0
  181. package/dist/tsconfig.tsbuildinfo +1 -0
  182. package/docs/CONFIG_LOADING.md +236 -0
  183. package/docs/IMPLEMENTATION_COMPLETE.md +421 -0
  184. package/docs/MCP_CLIENT_GUIDE.md +620 -0
  185. package/docs/REFACTORING_SUMMARY.md +247 -0
  186. package/package.json +29 -0
  187. package/src/commands/agent.ts +941 -0
  188. package/src/commands/config.ts +452 -0
  189. package/src/commands/hive-mind.ts +762 -0
  190. package/src/commands/hooks.ts +2603 -0
  191. package/src/commands/index.ts +115 -0
  192. package/src/commands/init.ts +597 -0
  193. package/src/commands/mcp.ts +753 -0
  194. package/src/commands/memory.ts +1063 -0
  195. package/src/commands/migrate.ts +447 -0
  196. package/src/commands/process.ts +617 -0
  197. package/src/commands/session.ts +891 -0
  198. package/src/commands/start.ts +457 -0
  199. package/src/commands/status.ts +705 -0
  200. package/src/commands/swarm.ts +648 -0
  201. package/src/commands/task.ts +792 -0
  202. package/src/commands/workflow.ts +742 -0
  203. package/src/config-adapter.ts +210 -0
  204. package/src/index.ts +383 -0
  205. package/src/infrastructure/in-memory-repositories.ts +310 -0
  206. package/src/init/claudemd-generator.ts +631 -0
  207. package/src/init/executor.ts +756 -0
  208. package/src/init/helpers-generator.ts +628 -0
  209. package/src/init/index.ts +60 -0
  210. package/src/init/mcp-generator.ts +83 -0
  211. package/src/init/settings-generator.ts +274 -0
  212. package/src/init/statusline-generator.ts +211 -0
  213. package/src/init/types.ts +447 -0
  214. package/src/mcp-client.ts +227 -0
  215. package/src/mcp-server.ts +571 -0
  216. package/src/mcp-tools/agent-tools.ts +92 -0
  217. package/src/mcp-tools/config-tools.ts +88 -0
  218. package/src/mcp-tools/hooks-tools.ts +1819 -0
  219. package/src/mcp-tools/index.ts +12 -0
  220. package/src/mcp-tools/memory-tools.ts +89 -0
  221. package/src/mcp-tools/swarm-tools.ts +69 -0
  222. package/src/mcp-tools/types.ts +33 -0
  223. package/src/output.ts +593 -0
  224. package/src/parser.ts +417 -0
  225. package/src/prompt.ts +619 -0
  226. package/src/types.ts +287 -0
  227. package/tsconfig.json +16 -0
  228. package/tsconfig.tsbuildinfo +1 -0
  229. package/vitest.config.ts +13 -0
@@ -0,0 +1,501 @@
1
+ /**
2
+ * V3 CLI Interactive Prompt System
3
+ * Modern interactive prompts for user input
4
+ */
5
+ import * as readline from 'readline';
6
+ import { output } from './output.js';
7
+ // ============================================
8
+ // Core Prompt Infrastructure
9
+ // ============================================
10
+ class PromptManager {
11
+ rl = null;
12
+ formatter;
13
+ constructor(formatter = output) {
14
+ this.formatter = formatter;
15
+ }
16
+ createInterface() {
17
+ if (!this.rl) {
18
+ this.rl = readline.createInterface({
19
+ input: process.stdin,
20
+ output: process.stdout,
21
+ terminal: true
22
+ });
23
+ // Handle cleanup on exit
24
+ this.rl.on('close', () => {
25
+ this.rl = null;
26
+ });
27
+ }
28
+ return this.rl;
29
+ }
30
+ close() {
31
+ if (this.rl) {
32
+ this.rl.close();
33
+ this.rl = null;
34
+ }
35
+ }
36
+ async question(prompt) {
37
+ return new Promise((resolve) => {
38
+ const rl = this.createInterface();
39
+ rl.question(prompt, (answer) => {
40
+ resolve(answer);
41
+ });
42
+ });
43
+ }
44
+ // ============================================
45
+ // Select Prompt
46
+ // ============================================
47
+ async select(options) {
48
+ const { message, options: choices, default: defaultValue, pageSize = 10 } = options;
49
+ this.formatter.writeln();
50
+ this.formatter.writeln(this.formatter.bold(`? ${message}`));
51
+ this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, enter to select)'));
52
+ this.formatter.writeln();
53
+ // Find default index
54
+ let selectedIndex = 0;
55
+ if (defaultValue !== undefined) {
56
+ const idx = choices.findIndex(c => c.value === defaultValue);
57
+ if (idx !== -1)
58
+ selectedIndex = idx;
59
+ }
60
+ // Display options
61
+ const displayChoices = (currentIndex, startIndex = 0) => {
62
+ // Move cursor up to overwrite
63
+ if (startIndex > 0 || currentIndex > 0) {
64
+ process.stdout.write(`\x1b[${Math.min(choices.length, pageSize)}A`);
65
+ }
66
+ const endIndex = Math.min(startIndex + pageSize, choices.length);
67
+ for (let i = startIndex; i < endIndex; i++) {
68
+ const choice = choices[i];
69
+ const isSelected = i === currentIndex;
70
+ const prefix = isSelected ? this.formatter.info('>') : ' ';
71
+ const label = isSelected
72
+ ? this.formatter.highlight(choice.label)
73
+ : choice.label;
74
+ const hint = choice.hint ? this.formatter.dim(` - ${choice.hint}`) : '';
75
+ const disabled = choice.disabled ? this.formatter.dim(' (disabled)') : '';
76
+ this.formatter.writeln(` ${prefix} ${label}${hint}${disabled}`);
77
+ }
78
+ };
79
+ // Initial display
80
+ displayChoices(selectedIndex);
81
+ return new Promise((resolve, reject) => {
82
+ const rl = this.createInterface();
83
+ // Enable raw mode for arrow key detection
84
+ if (process.stdin.isTTY) {
85
+ process.stdin.setRawMode(true);
86
+ }
87
+ process.stdin.resume();
88
+ const handleKeypress = (key) => {
89
+ const keyStr = key.toString();
90
+ // Arrow keys
91
+ if (keyStr === '\x1b[A') { // Up
92
+ do {
93
+ selectedIndex = (selectedIndex - 1 + choices.length) % choices.length;
94
+ } while (choices[selectedIndex].disabled && selectedIndex !== 0);
95
+ displayChoices(selectedIndex);
96
+ }
97
+ else if (keyStr === '\x1b[B') { // Down
98
+ do {
99
+ selectedIndex = (selectedIndex + 1) % choices.length;
100
+ } while (choices[selectedIndex].disabled && selectedIndex !== choices.length - 1);
101
+ displayChoices(selectedIndex);
102
+ }
103
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
104
+ cleanup();
105
+ const selected = choices[selectedIndex];
106
+ if (!selected.disabled) {
107
+ this.formatter.writeln();
108
+ this.formatter.writeln(this.formatter.success(`Selected: ${selected.label}`));
109
+ resolve(selected.value);
110
+ }
111
+ }
112
+ else if (keyStr === '\x03') { // Ctrl+C
113
+ cleanup();
114
+ reject(new Error('User cancelled'));
115
+ }
116
+ };
117
+ const cleanup = () => {
118
+ process.stdin.removeListener('data', handleKeypress);
119
+ if (process.stdin.isTTY) {
120
+ process.stdin.setRawMode(false);
121
+ }
122
+ this.close();
123
+ };
124
+ process.stdin.on('data', handleKeypress);
125
+ });
126
+ }
127
+ // ============================================
128
+ // Confirm Prompt
129
+ // ============================================
130
+ async confirm(options) {
131
+ const { message, default: defaultValue = false, active = 'Yes', inactive = 'No' } = options;
132
+ const defaultText = defaultValue ? `${active}/${inactive}` : `${active}/${inactive}`;
133
+ const hint = defaultValue ? `[${active}]` : `[${inactive}]`;
134
+ const prompt = `${this.formatter.bold('?')} ${message} ${this.formatter.dim(hint)} `;
135
+ const answer = await this.question(prompt);
136
+ this.close();
137
+ if (answer === '') {
138
+ return defaultValue;
139
+ }
140
+ const normalized = answer.toLowerCase().trim();
141
+ if (['y', 'yes', 'true', '1'].includes(normalized)) {
142
+ return true;
143
+ }
144
+ if (['n', 'no', 'false', '0'].includes(normalized)) {
145
+ return false;
146
+ }
147
+ return defaultValue;
148
+ }
149
+ // ============================================
150
+ // Input Prompt
151
+ // ============================================
152
+ async input(options) {
153
+ const { message, default: defaultValue, placeholder, validate, mask } = options;
154
+ let prompt = `${this.formatter.bold('?')} ${message}`;
155
+ if (defaultValue) {
156
+ prompt += ` ${this.formatter.dim(`(${defaultValue})`)}`;
157
+ }
158
+ else if (placeholder) {
159
+ prompt += ` ${this.formatter.dim(placeholder)}`;
160
+ }
161
+ prompt += ': ';
162
+ while (true) {
163
+ let answer;
164
+ if (mask) {
165
+ answer = await this.inputMasked(prompt);
166
+ }
167
+ else {
168
+ answer = await this.question(prompt);
169
+ }
170
+ // Use default if empty
171
+ if (answer === '' && defaultValue !== undefined) {
172
+ answer = defaultValue;
173
+ }
174
+ // Validate
175
+ if (validate) {
176
+ const result = validate(answer);
177
+ if (result !== true) {
178
+ const errorMsg = typeof result === 'string' ? result : 'Invalid input';
179
+ this.formatter.writeln(this.formatter.error(` ${errorMsg}`));
180
+ continue;
181
+ }
182
+ }
183
+ this.close();
184
+ return answer;
185
+ }
186
+ }
187
+ async inputMasked(prompt) {
188
+ return new Promise((resolve) => {
189
+ const rl = this.createInterface();
190
+ let password = '';
191
+ // Don't echo characters
192
+ process.stdout.write(prompt);
193
+ if (process.stdin.isTTY) {
194
+ process.stdin.setRawMode(true);
195
+ }
196
+ process.stdin.resume();
197
+ const handleData = (chunk) => {
198
+ const char = chunk.toString();
199
+ if (char === '\n' || char === '\r') {
200
+ // Enter pressed
201
+ process.stdin.removeListener('data', handleData);
202
+ if (process.stdin.isTTY) {
203
+ process.stdin.setRawMode(false);
204
+ }
205
+ process.stdout.write('\n');
206
+ resolve(password);
207
+ }
208
+ else if (char === '\x7f' || char === '\x08') {
209
+ // Backspace
210
+ if (password.length > 0) {
211
+ password = password.slice(0, -1);
212
+ process.stdout.write('\b \b');
213
+ }
214
+ }
215
+ else if (char === '\x03') {
216
+ // Ctrl+C
217
+ process.stdin.removeListener('data', handleData);
218
+ if (process.stdin.isTTY) {
219
+ process.stdin.setRawMode(false);
220
+ }
221
+ resolve('');
222
+ }
223
+ else if (char.charCodeAt(0) >= 32) {
224
+ // Printable character
225
+ password += char;
226
+ process.stdout.write('*');
227
+ }
228
+ };
229
+ process.stdin.on('data', handleData);
230
+ });
231
+ }
232
+ // ============================================
233
+ // Multi-Select Prompt
234
+ // ============================================
235
+ async multiSelect(options) {
236
+ const { message, options: choices, default: defaultValues = [], required = false, min, max } = options;
237
+ this.formatter.writeln();
238
+ this.formatter.writeln(this.formatter.bold(`? ${message}`));
239
+ this.formatter.writeln(this.formatter.dim(' (Use arrow keys to navigate, space to select, enter to confirm)'));
240
+ this.formatter.writeln();
241
+ // Initialize selection state
242
+ const selected = new Set();
243
+ for (let i = 0; i < choices.length; i++) {
244
+ // Check both default array and individual selected property
245
+ if (defaultValues.includes(choices[i].value) || choices[i].selected) {
246
+ selected.add(i);
247
+ }
248
+ }
249
+ let currentIndex = 0;
250
+ // Display options
251
+ const displayChoices = () => {
252
+ // Move cursor up to overwrite
253
+ process.stdout.write(`\x1b[${choices.length}A`);
254
+ for (let i = 0; i < choices.length; i++) {
255
+ const choice = choices[i];
256
+ const isCurrentRow = i === currentIndex;
257
+ const isSelected = selected.has(i);
258
+ const cursor = isCurrentRow ? this.formatter.info('>') : ' ';
259
+ const checkbox = isSelected
260
+ ? this.formatter.success('[x]')
261
+ : this.formatter.dim('[ ]');
262
+ const label = isCurrentRow
263
+ ? this.formatter.highlight(choice.label)
264
+ : choice.label;
265
+ const hint = choice.hint ? this.formatter.dim(` - ${choice.hint}`) : '';
266
+ const disabled = choice.disabled ? this.formatter.dim(' (disabled)') : '';
267
+ this.formatter.writeln(` ${cursor} ${checkbox} ${label}${hint}${disabled}`);
268
+ }
269
+ };
270
+ // Initial display
271
+ for (let i = 0; i < choices.length; i++) {
272
+ this.formatter.writeln('');
273
+ }
274
+ displayChoices();
275
+ return new Promise((resolve, reject) => {
276
+ const rl = this.createInterface();
277
+ if (process.stdin.isTTY) {
278
+ process.stdin.setRawMode(true);
279
+ }
280
+ process.stdin.resume();
281
+ const handleKeypress = (key) => {
282
+ const keyStr = key.toString();
283
+ if (keyStr === '\x1b[A') { // Up
284
+ currentIndex = (currentIndex - 1 + choices.length) % choices.length;
285
+ displayChoices();
286
+ }
287
+ else if (keyStr === '\x1b[B') { // Down
288
+ currentIndex = (currentIndex + 1) % choices.length;
289
+ displayChoices();
290
+ }
291
+ else if (keyStr === ' ') { // Space
292
+ if (!choices[currentIndex].disabled) {
293
+ if (selected.has(currentIndex)) {
294
+ selected.delete(currentIndex);
295
+ }
296
+ else {
297
+ // Check max limit
298
+ if (!max || selected.size < max) {
299
+ selected.add(currentIndex);
300
+ }
301
+ }
302
+ displayChoices();
303
+ }
304
+ }
305
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
306
+ // Validate selection
307
+ if (required && selected.size === 0) {
308
+ this.formatter.writeln(this.formatter.error(' At least one option must be selected'));
309
+ return;
310
+ }
311
+ if (min && selected.size < min) {
312
+ this.formatter.writeln(this.formatter.error(` At least ${min} options must be selected`));
313
+ return;
314
+ }
315
+ cleanup();
316
+ const selectedValues = Array.from(selected).map(i => choices[i].value);
317
+ const selectedLabels = Array.from(selected).map(i => choices[i].label);
318
+ this.formatter.writeln();
319
+ this.formatter.writeln(this.formatter.success(`Selected: ${selectedLabels.join(', ')}`));
320
+ resolve(selectedValues);
321
+ }
322
+ else if (keyStr === '\x03') { // Ctrl+C
323
+ cleanup();
324
+ reject(new Error('User cancelled'));
325
+ }
326
+ else if (keyStr === 'a') { // Select all
327
+ if (!max || choices.length <= max) {
328
+ for (let i = 0; i < choices.length; i++) {
329
+ if (!choices[i].disabled) {
330
+ selected.add(i);
331
+ }
332
+ }
333
+ displayChoices();
334
+ }
335
+ }
336
+ else if (keyStr === 'n') { // Select none
337
+ selected.clear();
338
+ displayChoices();
339
+ }
340
+ };
341
+ const cleanup = () => {
342
+ process.stdin.removeListener('data', handleKeypress);
343
+ if (process.stdin.isTTY) {
344
+ process.stdin.setRawMode(false);
345
+ }
346
+ this.close();
347
+ };
348
+ process.stdin.on('data', handleKeypress);
349
+ });
350
+ }
351
+ // ============================================
352
+ // Text Prompt (Multi-line)
353
+ // ============================================
354
+ async text(message, placeholder) {
355
+ this.formatter.writeln();
356
+ this.formatter.writeln(this.formatter.bold(`? ${message}`));
357
+ if (placeholder) {
358
+ this.formatter.writeln(this.formatter.dim(` ${placeholder}`));
359
+ }
360
+ this.formatter.writeln(this.formatter.dim(' (Enter an empty line to finish)'));
361
+ this.formatter.writeln();
362
+ const lines = [];
363
+ while (true) {
364
+ const line = await this.question(' > ');
365
+ if (line === '') {
366
+ break;
367
+ }
368
+ lines.push(line);
369
+ }
370
+ this.close();
371
+ return lines.join('\n');
372
+ }
373
+ // ============================================
374
+ // Number Prompt
375
+ // ============================================
376
+ async number(message, options = {}) {
377
+ const { default: defaultValue, min, max } = options;
378
+ const validate = (value) => {
379
+ const num = Number(value);
380
+ if (isNaN(num)) {
381
+ return 'Please enter a valid number';
382
+ }
383
+ if (min !== undefined && num < min) {
384
+ return `Value must be at least ${min}`;
385
+ }
386
+ if (max !== undefined && num > max) {
387
+ return `Value must be at most ${max}`;
388
+ }
389
+ return true;
390
+ };
391
+ const result = await this.input({
392
+ message,
393
+ default: defaultValue?.toString(),
394
+ validate
395
+ });
396
+ return Number(result);
397
+ }
398
+ // ============================================
399
+ // Autocomplete Prompt
400
+ // ============================================
401
+ async autocomplete(message, choices, options = {}) {
402
+ const { limit = 10 } = options;
403
+ this.formatter.writeln();
404
+ this.formatter.writeln(this.formatter.bold(`? ${message}`));
405
+ this.formatter.writeln(this.formatter.dim(' (Type to filter, arrow keys to navigate)'));
406
+ let query = '';
407
+ let selectedIndex = 0;
408
+ let filteredChoices = choices.slice(0, limit);
409
+ const filterChoices = (q) => {
410
+ if (q === '')
411
+ return choices.slice(0, limit);
412
+ const normalized = q.toLowerCase();
413
+ return choices
414
+ .filter(c => c.label.toLowerCase().includes(normalized))
415
+ .slice(0, limit);
416
+ };
417
+ const displayChoices = () => {
418
+ // Clear previous output
419
+ process.stdout.write(`\x1b[${filteredChoices.length + 1}A`);
420
+ process.stdout.write('\x1b[J');
421
+ // Show input
422
+ this.formatter.writeln(` ${this.formatter.dim('>')} ${query}`);
423
+ // Show filtered options
424
+ for (let i = 0; i < filteredChoices.length; i++) {
425
+ const choice = filteredChoices[i];
426
+ const isSelected = i === selectedIndex;
427
+ const prefix = isSelected ? this.formatter.info('>') : ' ';
428
+ const label = isSelected ? this.formatter.highlight(choice.label) : choice.label;
429
+ this.formatter.writeln(` ${prefix} ${label}`);
430
+ }
431
+ };
432
+ // Initial display
433
+ this.formatter.writeln('');
434
+ for (let i = 0; i < limit; i++) {
435
+ this.formatter.writeln('');
436
+ }
437
+ displayChoices();
438
+ return new Promise((resolve, reject) => {
439
+ const rl = this.createInterface();
440
+ if (process.stdin.isTTY) {
441
+ process.stdin.setRawMode(true);
442
+ }
443
+ process.stdin.resume();
444
+ const handleKeypress = (key) => {
445
+ const keyStr = key.toString();
446
+ if (keyStr === '\x1b[A') { // Up
447
+ selectedIndex = Math.max(0, selectedIndex - 1);
448
+ displayChoices();
449
+ }
450
+ else if (keyStr === '\x1b[B') { // Down
451
+ selectedIndex = Math.min(filteredChoices.length - 1, selectedIndex + 1);
452
+ displayChoices();
453
+ }
454
+ else if (keyStr === '\r' || keyStr === '\n') { // Enter
455
+ if (filteredChoices.length > 0) {
456
+ cleanup();
457
+ const selected = filteredChoices[selectedIndex];
458
+ this.formatter.writeln();
459
+ this.formatter.writeln(this.formatter.success(`Selected: ${selected.label}`));
460
+ resolve(selected.value);
461
+ }
462
+ }
463
+ else if (keyStr === '\x7f' || keyStr === '\x08') { // Backspace
464
+ query = query.slice(0, -1);
465
+ filteredChoices = filterChoices(query);
466
+ selectedIndex = 0;
467
+ displayChoices();
468
+ }
469
+ else if (keyStr === '\x03') { // Ctrl+C
470
+ cleanup();
471
+ reject(new Error('User cancelled'));
472
+ }
473
+ else if (keyStr.charCodeAt(0) >= 32 && keyStr.charCodeAt(0) < 127) {
474
+ // Printable character
475
+ query += keyStr;
476
+ filteredChoices = filterChoices(query);
477
+ selectedIndex = 0;
478
+ displayChoices();
479
+ }
480
+ };
481
+ const cleanup = () => {
482
+ process.stdin.removeListener('data', handleKeypress);
483
+ if (process.stdin.isTTY) {
484
+ process.stdin.setRawMode(false);
485
+ }
486
+ this.close();
487
+ };
488
+ process.stdin.on('data', handleKeypress);
489
+ });
490
+ }
491
+ }
492
+ // Export singleton and convenience functions
493
+ export const promptManager = new PromptManager();
494
+ export const select = (options) => promptManager.select(options);
495
+ export const confirm = (options) => promptManager.confirm(options);
496
+ export const input = (options) => promptManager.input(options);
497
+ export const multiSelect = (options) => promptManager.multiSelect(options);
498
+ export const text = (message, placeholder) => promptManager.text(message, placeholder);
499
+ export const number = (message, options) => promptManager.number(message, options);
500
+ export const autocomplete = (message, choices, options) => promptManager.autocomplete(message, choices, options);
501
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"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"}