@brookmind/ai-toolkit 1.0.1 → 1.1.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 (155) hide show
  1. package/README.md +54 -14
  2. package/agents/code-reviewer.md +6 -1
  3. package/agents/code-simplifier.md +52 -0
  4. package/bin/cli.js +1 -5
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +321 -0
  8. package/dist/index.js.map +1 -0
  9. package/mcps/context7/.mcp.json +13 -0
  10. package/mcps/expo-mcp/.mcp.json +13 -0
  11. package/mcps/figma-mcp/.mcp.json +4 -6
  12. package/package.json +22 -11
  13. package/skills/pdf-processing-pro/FORMS.md +610 -0
  14. package/skills/pdf-processing-pro/OCR.md +137 -0
  15. package/skills/pdf-processing-pro/SKILL.md +296 -0
  16. package/skills/pdf-processing-pro/TABLES.md +626 -0
  17. package/skills/pdf-processing-pro/scripts/analyze_form.py +307 -0
  18. package/skills/react-best-practices/AGENTS.md +915 -0
  19. package/skills/react-best-practices/README.md +127 -0
  20. package/skills/react-best-practices/SKILL.md +110 -0
  21. package/skills/react-best-practices/metadata.json +14 -0
  22. package/skills/react-best-practices/rules/_sections.md +41 -0
  23. package/skills/react-best-practices/rules/_template.md +28 -0
  24. package/skills/react-best-practices/rules/advanced-event-handler-refs.md +80 -0
  25. package/skills/react-best-practices/rules/advanced-use-latest.md +76 -0
  26. package/skills/react-best-practices/rules/async-defer-await.md +80 -0
  27. package/skills/react-best-practices/rules/async-dependencies.md +36 -0
  28. package/skills/react-best-practices/rules/async-parallel.md +28 -0
  29. package/skills/react-best-practices/rules/async-suspense-boundaries.md +100 -0
  30. package/skills/react-best-practices/rules/bundle-barrel-imports.md +42 -0
  31. package/skills/react-best-practices/rules/bundle-conditional.md +106 -0
  32. package/skills/react-best-practices/rules/bundle-preload.md +44 -0
  33. package/skills/react-best-practices/rules/client-event-listeners.md +131 -0
  34. package/skills/react-best-practices/rules/client-swr-dedup.md +133 -0
  35. package/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  36. package/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  37. package/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  38. package/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  39. package/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  40. package/skills/react-best-practices/rules/js-early-exit.md +50 -0
  41. package/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  42. package/skills/react-best-practices/rules/js-index-maps.md +37 -0
  43. package/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  44. package/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  45. package/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  46. package/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  47. package/skills/react-best-practices/rules/rendering-activity.md +90 -0
  48. package/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  49. package/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  50. package/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  51. package/skills/react-best-practices/rules/rendering-hoist-jsx.md +65 -0
  52. package/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  53. package/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  54. package/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  55. package/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  56. package/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  57. package/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  58. package/skills/react-best-practices/rules/rerender-memo.md +85 -0
  59. package/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  60. package/themes/README.md +68 -0
  61. package/themes/claude-vivid.json +72 -0
  62. package/mcps/context7/.claude-plugin +0 -1
  63. package/mcps/context7/README.md +0 -1
  64. package/mcps/context7/server.json +0 -1
  65. package/mcps/expo-mcp/README.md +0 -33
  66. package/mcps/expo-mcp/package.json +0 -30
  67. package/mcps/figma-mcp/README.md +0 -554
  68. package/mcps/figma-mcp/server.json +0 -17
  69. package/mcps/figma-mcp/skills/code-connect-components +0 -1
  70. package/mcps/figma-mcp/skills/create-design-system-rules +0 -1
  71. package/mcps/figma-mcp/skills/implement-design +0 -1
  72. package/mcps/pg-aiguide/.claude-plugin +0 -1
  73. package/mcps/pg-aiguide/CLAUDE.md +0 -21
  74. package/mcps/pg-aiguide/README.md +0 -275
  75. package/mcps/pg-aiguide/skills/design-postgres-tables +0 -1
  76. package/mcps/pg-aiguide/skills/find-hypertable-candidates +0 -1
  77. package/mcps/pg-aiguide/skills/migrate-postgres-tables-to-hypertables +0 -1
  78. package/mcps/pg-aiguide/skills/setup-timescaledb-hypertables +0 -1
  79. package/mcps/pg-aiguide/skills.yaml +0 -4
  80. package/skills/cloudflare-cli/SKILL.md +0 -151
  81. package/skills/docx/LICENSE.txt +0 -30
  82. package/skills/docx/SKILL.md +0 -197
  83. package/skills/docx/docx-js.md +0 -350
  84. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  85. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  86. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  87. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  88. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  89. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  90. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  91. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  92. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  93. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  94. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  95. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  96. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  97. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  98. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  99. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  100. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  101. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  102. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  103. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  104. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  105. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  106. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  107. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  108. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  109. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  110. package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  111. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  112. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  113. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  114. package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  115. package/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  116. package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  117. package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  118. package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  119. package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  120. package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  121. package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  122. package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  123. package/skills/docx/ooxml/scripts/pack.py +0 -159
  124. package/skills/docx/ooxml/scripts/unpack.py +0 -29
  125. package/skills/docx/ooxml/scripts/validate.py +0 -69
  126. package/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  127. package/skills/docx/ooxml/scripts/validation/base.py +0 -951
  128. package/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  129. package/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  130. package/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  131. package/skills/docx/ooxml.md +0 -610
  132. package/skills/docx/scripts/__init__.py +0 -1
  133. package/skills/docx/scripts/document.py +0 -1276
  134. package/skills/docx/scripts/templates/comments.xml +0 -3
  135. package/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  136. package/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  137. package/skills/docx/scripts/templates/commentsIds.xml +0 -3
  138. package/skills/docx/scripts/templates/people.xml +0 -3
  139. package/skills/docx/scripts/utilities.py +0 -374
  140. package/skills/pdf/LICENSE.txt +0 -30
  141. package/skills/pdf/SKILL.md +0 -294
  142. package/skills/pdf/forms.md +0 -205
  143. package/skills/pdf/reference.md +0 -612
  144. package/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  145. package/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  146. package/skills/pdf/scripts/check_fillable_fields.py +0 -12
  147. package/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  148. package/skills/pdf/scripts/create_validation_image.py +0 -41
  149. package/skills/pdf/scripts/extract_form_field_info.py +0 -152
  150. package/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  151. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  152. package/skills/xlsx/LICENSE.txt +0 -30
  153. package/skills/xlsx/SKILL.md +0 -289
  154. package/skills/xlsx/recalc.py +0 -178
  155. package/src/index.js +0 -365
package/src/index.js DELETED
@@ -1,365 +0,0 @@
1
- import { select, checkbox } from '@inquirer/prompts';
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import { readdir, cp, mkdir, access } from 'fs/promises';
5
- import { join, dirname } from 'path';
6
- import { fileURLToPath } from 'url';
7
- import { homedir } from 'os';
8
-
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const ROOT_DIR = join(__dirname, '..');
11
-
12
- async function getDirectories(path) {
13
- try {
14
- const entries = await readdir(path, { withFileTypes: true });
15
- return entries.filter(e => e.isDirectory()).map(e => e.name);
16
- } catch {
17
- return [];
18
- }
19
- }
20
-
21
- async function getFiles(path, extension) {
22
- try {
23
- const entries = await readdir(path, { withFileTypes: true });
24
- return entries
25
- .filter(e => e.isFile() && e.name.endsWith(extension))
26
- .map(e => e.name.replace(extension, ''));
27
- } catch {
28
- return [];
29
- }
30
- }
31
-
32
- async function exists(path) {
33
- try {
34
- await access(path);
35
- return true;
36
- } catch {
37
- return false;
38
- }
39
- }
40
-
41
- const BACK = '__BACK__';
42
- const CONTINUE = '__CONTINUE__';
43
-
44
- function createChoices(items, includeBack = false) {
45
- const choices = items.map(item => ({
46
- name: item,
47
- value: item,
48
- }));
49
-
50
- choices.push({ name: chalk.green('─→ Continue'), value: CONTINUE });
51
-
52
- if (includeBack) {
53
- choices.push({ name: chalk.yellow('←─ Back'), value: BACK });
54
- }
55
-
56
- return choices;
57
- }
58
-
59
- export async function run() {
60
- console.clear();
61
-
62
- // Header
63
- console.log('');
64
- console.log(chalk.magenta('╔══════════════════════════════════╗'));
65
- console.log(chalk.magenta('║') + chalk.white.bold(' CKW AI Toolkit Installer ') + chalk.magenta('║'));
66
- console.log(chalk.magenta('╚══════════════════════════════════╝'));
67
- console.log('');
68
-
69
- // Get available items
70
- const agents = await getFiles(join(ROOT_DIR, 'agents'), '.md');
71
- const skills = await getDirectories(join(ROOT_DIR, 'skills'));
72
- const mcps = await getDirectories(join(ROOT_DIR, 'mcps'));
73
-
74
- // State
75
- let step = 1;
76
- let platform = null;
77
- let selectedAgents = [];
78
- let selectedSkills = [];
79
- let selectedMcps = [];
80
-
81
- const home = homedir();
82
-
83
- // Navigation loop
84
- while (step <= 5) {
85
-
86
- if (step === 1) {
87
- // Step 1: Platform
88
- console.log(chalk.cyan('Step 1/5: Platform'));
89
- console.log('');
90
-
91
- platform = await select({
92
- message: 'Where do you want to install?',
93
- choices: [
94
- { name: 'Claude Code', value: 'claude' },
95
- { name: 'OpenCode', value: 'opencode' },
96
- { name: 'Both', value: 'both' },
97
- { name: chalk.yellow('←─ Cancel'), value: BACK }
98
- ]
99
- });
100
-
101
- if (platform === BACK) {
102
- console.log(chalk.yellow('Installation cancelled.'));
103
- return;
104
- }
105
-
106
- step = 2;
107
- }
108
-
109
- else if (step === 2) {
110
- // Step 2: Agents
111
- console.log('');
112
- console.log(chalk.cyan('Step 2/5: Agents'));
113
- console.log(chalk.dim('Select items with space, then choose Continue'));
114
- console.log('');
115
-
116
- if (agents.length > 0) {
117
- // Check which agents already exist
118
- const agentChoices = [];
119
- for (const agent of agents) {
120
- let alreadyInstalled = false;
121
-
122
- if (platform === 'claude' || platform === 'both') {
123
- if (await exists(join(home, '.claude', 'agents', `${agent}.md`))) {
124
- alreadyInstalled = true;
125
- }
126
- }
127
- if (platform === 'opencode' || platform === 'both') {
128
- if (await exists(join(home, '.config', 'opencode', 'agent', `${agent}.md`))) {
129
- alreadyInstalled = true;
130
- }
131
- }
132
-
133
- agentChoices.push({
134
- name: alreadyInstalled ? `${agent} ${chalk.yellow('(installed)')}` : agent,
135
- value: agent,
136
- });
137
- }
138
-
139
- agentChoices.push({ name: chalk.green('─→ Continue'), value: CONTINUE });
140
- agentChoices.push({ name: chalk.yellow('←─ Back'), value: BACK });
141
-
142
- const result = await checkbox({
143
- message: 'Select agents:',
144
- choices: agentChoices,
145
- theme: {
146
- icon: {
147
- checked: chalk.green('[✓]'),
148
- unchecked: '[ ]',
149
- cursor: '→'
150
- }
151
- }
152
- });
153
-
154
- if (result.includes(BACK)) {
155
- step = 1;
156
- continue;
157
- }
158
-
159
- selectedAgents = result.filter(r => r !== CONTINUE && r !== BACK);
160
-
161
- if (!result.includes(CONTINUE)) {
162
- continue;
163
- }
164
- }
165
-
166
- step = 3;
167
- }
168
-
169
- else if (step === 3) {
170
- // Step 3: Skills
171
- console.log('');
172
- console.log(chalk.cyan('Step 3/5: Skills'));
173
- console.log(chalk.dim('Select items with space, then choose Continue'));
174
- console.log('');
175
-
176
- if (skills.length > 0) {
177
- // Check which skills already exist
178
- const skillChoices = [];
179
- for (const skill of skills) {
180
- let alreadyInstalled = false;
181
-
182
- if (platform === 'claude' || platform === 'both') {
183
- if (await exists(join(home, '.claude', 'skills', skill))) {
184
- alreadyInstalled = true;
185
- }
186
- }
187
-
188
- skillChoices.push({
189
- name: alreadyInstalled ? `${skill} ${chalk.yellow('(installed)')}` : skill,
190
- value: skill,
191
- });
192
- }
193
-
194
- skillChoices.push({ name: chalk.green('─→ Continue'), value: CONTINUE });
195
- skillChoices.push({ name: chalk.yellow('←─ Back'), value: BACK });
196
-
197
- const result = await checkbox({
198
- message: 'Select skills:',
199
- choices: skillChoices,
200
- theme: {
201
- icon: {
202
- checked: chalk.green('[✓]'),
203
- unchecked: '[ ]',
204
- cursor: '→'
205
- }
206
- }
207
- });
208
-
209
- if (result.includes(BACK)) {
210
- step = 2;
211
- continue;
212
- }
213
-
214
- selectedSkills = result.filter(r => r !== CONTINUE && r !== BACK);
215
-
216
- if (!result.includes(CONTINUE)) {
217
- continue;
218
- }
219
- }
220
-
221
- step = 4;
222
- }
223
-
224
- else if (step === 4) {
225
- // Step 4: MCPs
226
- console.log('');
227
- console.log(chalk.cyan('Step 4/5: MCPs'));
228
- console.log(chalk.dim('Select items with space, then choose Continue'));
229
- console.log('');
230
-
231
- if (mcps.length > 0) {
232
- const result = await checkbox({
233
- message: 'Select MCPs:',
234
- choices: createChoices(mcps, true),
235
- theme: {
236
- icon: {
237
- checked: chalk.green('[✓]'),
238
- unchecked: '[ ]',
239
- cursor: '→'
240
- }
241
- }
242
- });
243
-
244
- if (result.includes(BACK)) {
245
- step = 3;
246
- continue;
247
- }
248
-
249
- selectedMcps = result.filter(r => r !== CONTINUE && r !== BACK);
250
-
251
- if (!result.includes(CONTINUE)) {
252
- continue;
253
- }
254
- }
255
-
256
- step = 5;
257
- }
258
-
259
- else if (step === 5) {
260
- // Step 5: Summary & Confirm
261
- console.log('');
262
- console.log(chalk.yellow('Summary'));
263
- console.log('');
264
- console.log(` Platform: ${chalk.white(platform)}`);
265
- console.log(` Agents: ${chalk.white(selectedAgents.length > 0 ? selectedAgents.join(', ') : 'none')}`);
266
- console.log(` Skills: ${chalk.white(selectedSkills.length > 0 ? selectedSkills.join(', ') : 'none')}`);
267
- console.log(` MCPs: ${chalk.white(selectedMcps.length > 0 ? selectedMcps.join(', ') : 'none')}`);
268
- console.log('');
269
-
270
- const action = await select({
271
- message: 'What would you like to do?',
272
- choices: [
273
- { name: chalk.green('✓ Install'), value: 'install' },
274
- { name: chalk.yellow('←─ Back'), value: BACK },
275
- { name: chalk.red('✗ Cancel'), value: 'cancel' }
276
- ]
277
- });
278
-
279
- if (action === BACK) {
280
- step = 4;
281
- continue;
282
- }
283
-
284
- if (action === 'cancel') {
285
- console.log(chalk.yellow('Installation cancelled.'));
286
- return;
287
- }
288
-
289
- // Proceed with installation
290
- break;
291
- }
292
- }
293
-
294
- // Installation
295
- console.log('');
296
- const spinner = ora('Installing...').start();
297
-
298
- async function installClaude() {
299
- const claudeDir = join(home, '.claude');
300
- const agentsDir = join(claudeDir, 'agents');
301
- const skillsDir = join(claudeDir, 'skills');
302
-
303
- await mkdir(agentsDir, { recursive: true });
304
- await mkdir(skillsDir, { recursive: true });
305
-
306
- for (const agent of selectedAgents) {
307
- const src = join(ROOT_DIR, 'agents', `${agent}.md`);
308
- const dest = join(agentsDir, `${agent}.md`);
309
- await cp(src, dest);
310
- }
311
-
312
- for (const skill of selectedSkills) {
313
- const src = join(ROOT_DIR, 'skills', skill);
314
- const dest = join(skillsDir, skill);
315
- await cp(src, dest, { recursive: true, force: true });
316
- }
317
- }
318
-
319
- async function installOpencode() {
320
- const opencodeDir = join(home, '.config', 'opencode');
321
- const agentsDir = join(opencodeDir, 'agent');
322
- const commandsDir = join(opencodeDir, 'command');
323
-
324
- await mkdir(agentsDir, { recursive: true });
325
- await mkdir(commandsDir, { recursive: true });
326
-
327
- for (const agent of selectedAgents) {
328
- const src = join(ROOT_DIR, 'agents', `${agent}.md`);
329
- const dest = join(agentsDir, `${agent}.md`);
330
- await cp(src, dest);
331
- }
332
- }
333
-
334
- try {
335
- if (platform === 'claude' || platform === 'both') {
336
- await installClaude();
337
- }
338
- if (platform === 'opencode' || platform === 'both') {
339
- await installOpencode();
340
- }
341
-
342
- spinner.succeed('Installation complete!');
343
- } catch (error) {
344
- spinner.fail('Installation failed');
345
- console.error(chalk.red(error.message));
346
- return;
347
- }
348
-
349
- // Done
350
- console.log('');
351
- console.log(chalk.green('╔══════════════════════════════════╗'));
352
- console.log(chalk.green('║ ✓ Installation Complete! ║'));
353
- console.log(chalk.green('╚══════════════════════════════════╝'));
354
-
355
- if (selectedMcps.length > 0) {
356
- console.log('');
357
- console.log(chalk.yellow('MCP Setup Instructions:'));
358
- console.log('');
359
- for (const mcp of selectedMcps) {
360
- console.log(` → ${chalk.cyan(`mcps/${mcp}/README.md`)}`);
361
- }
362
- }
363
-
364
- console.log('');
365
- }