@brookmind/ai-toolkit 1.1.7 → 1.2.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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -14
  3. package/dist/__tests__/constants.test.d.ts +2 -0
  4. package/dist/__tests__/constants.test.d.ts.map +1 -0
  5. package/dist/__tests__/constants.test.js +102 -0
  6. package/dist/__tests__/constants.test.js.map +1 -0
  7. package/dist/__tests__/index.test.d.ts +2 -0
  8. package/dist/__tests__/index.test.d.ts.map +1 -0
  9. package/dist/__tests__/index.test.js +114 -0
  10. package/dist/__tests__/index.test.js.map +1 -0
  11. package/dist/__tests__/integration/installer.test.d.ts +2 -0
  12. package/dist/__tests__/integration/installer.test.d.ts.map +1 -0
  13. package/dist/__tests__/integration/installer.test.js +425 -0
  14. package/dist/__tests__/integration/installer.test.js.map +1 -0
  15. package/dist/__tests__/services/installers.test.d.ts +2 -0
  16. package/dist/__tests__/services/installers.test.d.ts.map +1 -0
  17. package/dist/__tests__/services/installers.test.js +222 -0
  18. package/dist/__tests__/services/installers.test.js.map +1 -0
  19. package/dist/__tests__/services/opencode.test.d.ts +2 -0
  20. package/dist/__tests__/services/opencode.test.d.ts.map +1 -0
  21. package/dist/__tests__/services/opencode.test.js +120 -0
  22. package/dist/__tests__/services/opencode.test.js.map +1 -0
  23. package/dist/__tests__/ui/categorize.test.d.ts +2 -0
  24. package/dist/__tests__/ui/categorize.test.d.ts.map +1 -0
  25. package/dist/__tests__/ui/categorize.test.js +194 -0
  26. package/dist/__tests__/ui/categorize.test.js.map +1 -0
  27. package/dist/__tests__/ui/choices.test.d.ts +2 -0
  28. package/dist/__tests__/ui/choices.test.d.ts.map +1 -0
  29. package/dist/__tests__/ui/choices.test.js +180 -0
  30. package/dist/__tests__/ui/choices.test.js.map +1 -0
  31. package/dist/__tests__/ui/display.test.d.ts +2 -0
  32. package/dist/__tests__/ui/display.test.d.ts.map +1 -0
  33. package/dist/__tests__/ui/display.test.js +142 -0
  34. package/dist/__tests__/ui/display.test.js.map +1 -0
  35. package/dist/__tests__/utils/fs.test.d.ts +2 -0
  36. package/dist/__tests__/utils/fs.test.d.ts.map +1 -0
  37. package/dist/__tests__/utils/fs.test.js +142 -0
  38. package/dist/__tests__/utils/fs.test.js.map +1 -0
  39. package/dist/__tests__/utils/terminal.test.d.ts +2 -0
  40. package/dist/__tests__/utils/terminal.test.d.ts.map +1 -0
  41. package/dist/__tests__/utils/terminal.test.js +97 -0
  42. package/dist/__tests__/utils/terminal.test.js.map +1 -0
  43. package/dist/constants.d.ts +11 -0
  44. package/dist/constants.d.ts.map +1 -0
  45. package/dist/constants.js +40 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +49 -332
  50. package/dist/index.js.map +1 -1
  51. package/dist/services/installers.d.ts +8 -0
  52. package/dist/services/installers.d.ts.map +1 -0
  53. package/dist/services/installers.js +79 -0
  54. package/dist/services/installers.js.map +1 -0
  55. package/dist/services/opencode.d.ts +3 -0
  56. package/dist/services/opencode.d.ts.map +1 -0
  57. package/dist/services/opencode.js +33 -0
  58. package/dist/services/opencode.js.map +1 -0
  59. package/dist/types.d.ts +10 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +2 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/ui/categorize.d.ts +6 -0
  64. package/dist/ui/categorize.d.ts.map +1 -0
  65. package/dist/ui/categorize.js +69 -0
  66. package/dist/ui/categorize.js.map +1 -0
  67. package/dist/ui/choices.d.ts +6 -0
  68. package/dist/ui/choices.d.ts.map +1 -0
  69. package/dist/ui/choices.js +70 -0
  70. package/dist/ui/choices.js.map +1 -0
  71. package/dist/ui/display.d.ts +8 -0
  72. package/dist/ui/display.d.ts.map +1 -0
  73. package/dist/ui/display.js +86 -0
  74. package/dist/ui/display.js.map +1 -0
  75. package/dist/utils/fs.d.ts +5 -0
  76. package/dist/utils/fs.d.ts.map +1 -0
  77. package/dist/utils/fs.js +40 -0
  78. package/dist/utils/fs.js.map +1 -0
  79. package/dist/utils/terminal.d.ts +5 -0
  80. package/dist/utils/terminal.d.ts.map +1 -0
  81. package/dist/utils/terminal.js +18 -0
  82. package/dist/utils/terminal.js.map +1 -0
  83. package/package.json +29 -5
  84. package/agents/code-reviewer.md +0 -35
  85. package/agents/code-simplifier.md +0 -52
  86. package/commands/create-pr-description.md +0 -102
  87. package/commands/create-pr.md +0 -76
  88. package/commands/create-react-tests.md +0 -207
  89. package/mcps/context7/.mcp.json +0 -13
  90. package/mcps/expo-mcp/.mcp.json +0 -13
  91. package/mcps/figma-mcp/.mcp.json +0 -10
  92. package/skills/github-cli/SKILL.md +0 -125
  93. package/skills/pdf-processing-pro/FORMS.md +0 -610
  94. package/skills/pdf-processing-pro/OCR.md +0 -137
  95. package/skills/pdf-processing-pro/SKILL.md +0 -296
  96. package/skills/pdf-processing-pro/TABLES.md +0 -626
  97. package/skills/pdf-processing-pro/scripts/analyze_form.py +0 -307
  98. package/skills/react-best-practices/AGENTS.md +0 -915
  99. package/skills/react-best-practices/README.md +0 -127
  100. package/skills/react-best-practices/SKILL.md +0 -110
  101. package/skills/react-best-practices/metadata.json +0 -14
  102. package/skills/react-best-practices/rules/_sections.md +0 -41
  103. package/skills/react-best-practices/rules/_template.md +0 -28
  104. package/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -80
  105. package/skills/react-best-practices/rules/advanced-use-latest.md +0 -76
  106. package/skills/react-best-practices/rules/async-defer-await.md +0 -80
  107. package/skills/react-best-practices/rules/async-dependencies.md +0 -36
  108. package/skills/react-best-practices/rules/async-parallel.md +0 -28
  109. package/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -100
  110. package/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -42
  111. package/skills/react-best-practices/rules/bundle-conditional.md +0 -106
  112. package/skills/react-best-practices/rules/bundle-preload.md +0 -44
  113. package/skills/react-best-practices/rules/client-event-listeners.md +0 -131
  114. package/skills/react-best-practices/rules/client-swr-dedup.md +0 -133
  115. package/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  116. package/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  117. package/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  118. package/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  119. package/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  120. package/skills/react-best-practices/rules/js-early-exit.md +0 -50
  121. package/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  122. package/skills/react-best-practices/rules/js-index-maps.md +0 -37
  123. package/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  124. package/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  125. package/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  126. package/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  127. package/skills/react-best-practices/rules/rendering-activity.md +0 -90
  128. package/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  129. package/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  130. package/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  131. package/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -65
  132. package/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  133. package/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  134. package/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  135. package/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  136. package/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  137. package/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  138. package/skills/react-best-practices/rules/rerender-memo.md +0 -85
  139. package/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  140. package/skills/skill-creator/LICENSE.txt +0 -202
  141. package/skills/skill-creator/SKILL.md +0 -209
  142. package/skills/skill-creator/scripts/init_skill.py +0 -303
  143. package/skills/skill-creator/scripts/package_skill.py +0 -110
  144. package/skills/skill-creator/scripts/quick_validate.py +0 -65
  145. package/skills/spring-boot-development/EXAMPLES.md +0 -2346
  146. package/skills/spring-boot-development/README.md +0 -595
  147. package/skills/spring-boot-development/SKILL.md +0 -1519
  148. package/themes/README.md +0 -68
  149. package/themes/claude-vivid.json +0 -72
@@ -0,0 +1,11 @@
1
+ export declare const ROOT_DIR: string;
2
+ export declare const TOOLS_DIR: string;
3
+ export declare const HOME_DIR: string;
4
+ export declare const OPENCODE_DIR: string;
5
+ export declare const OPENCODE_CONFIG: string;
6
+ export declare const BOTTOM_PADDING = 5;
7
+ export declare const UI_PANEL_WIDTH = 61;
8
+ export declare const MCP_DISPLAY_NAMES: Record<string, string>;
9
+ export declare const DESCRIPTIONS: Record<string, string>;
10
+ export declare function getDescription(name: string): string | null;
11
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,QAAwB,CAAC;AAC9C,eAAO,MAAM,SAAS,QAA0B,CAAC;AACjD,eAAO,MAAM,QAAQ,QAAY,CAAC;AAClC,eAAO,MAAM,YAAY,QAAwC,CAAC;AAClE,eAAO,MAAM,eAAe,QAAsC,CAAC;AAEnE,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEpD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwB/C,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D"}
@@ -0,0 +1,40 @@
1
+ import { dirname, join } from 'path';
2
+ import { homedir } from 'os';
3
+ import { fileURLToPath } from 'url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ export const ROOT_DIR = join(__dirname, '..');
6
+ export const TOOLS_DIR = join(ROOT_DIR, 'tools');
7
+ export const HOME_DIR = homedir();
8
+ export const OPENCODE_DIR = join(HOME_DIR, '.config', 'opencode');
9
+ export const OPENCODE_CONFIG = join(OPENCODE_DIR, 'opencode.json');
10
+ export const BOTTOM_PADDING = 5;
11
+ export const UI_PANEL_WIDTH = 61;
12
+ export const MCP_DISPLAY_NAMES = {
13
+ 'pg-aiguide': 'postgres-mcp',
14
+ };
15
+ export const DESCRIPTIONS = {
16
+ // Agents
17
+ 'changelog-generator': 'Generate changelogs and release notes',
18
+ 'code-reviewer': 'Review code for quality and security',
19
+ 'code-simplifier': 'Simplify and refactor code',
20
+ // Commands
21
+ 'create-pr': 'Create PR with conventional format',
22
+ 'create-pr-description': 'Generate PR title and description',
23
+ 'create-react-tests': 'Generate Jest + RTL tests',
24
+ // Skills
25
+ 'expo-best-practices': 'UI, navigation, styling for Expo apps',
26
+ 'github-cli': 'Issues, PRs, releases via gh CLI',
27
+ 'pdf-processing-pro': 'Forms, tables, OCR, batch operations',
28
+ 'react-best-practices': 'React performance patterns',
29
+ 'react-native-best-practices': 'RN performance optimization',
30
+ 'skill-creator': 'Create custom skills',
31
+ 'spring-boot-development': 'REST APIs, JPA, Security',
32
+ // MCPs
33
+ context7: 'Library documentation lookup',
34
+ 'expo-mcp': 'Expo/React Native utilities',
35
+ 'figma-mcp': 'Figma design integration (Desktop required)',
36
+ };
37
+ export function getDescription(name) {
38
+ return DESCRIPTIONS[name] ?? null;
39
+ }
40
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,YAAY,EAAE,cAAc;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,SAAS;IACT,qBAAqB,EAAE,uCAAuC;IAC9D,eAAe,EAAE,sCAAsC;IACvD,iBAAiB,EAAE,4BAA4B;IAE/C,WAAW;IACX,WAAW,EAAE,oCAAoC;IACjD,uBAAuB,EAAE,mCAAmC;IAC5D,oBAAoB,EAAE,2BAA2B;IAEjD,SAAS;IACT,qBAAqB,EAAE,uCAAuC;IAC9D,YAAY,EAAE,kCAAkC;IAChD,oBAAoB,EAAE,sCAAsC;IAC5D,sBAAsB,EAAE,4BAA4B;IACpD,6BAA6B,EAAE,6BAA6B;IAC5D,eAAe,EAAE,sBAAsB;IACvC,yBAAyB,EAAE,0BAA0B;IAErD,OAAO;IACP,QAAQ,EAAE,8BAA8B;IACxC,UAAU,EAAE,6BAA6B;IACzC,WAAW,EAAE,6CAA6C;CAC3D,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ export { BOTTOM_PADDING } from './constants.js';
2
+ export { setupScrollRegion, resetScrollRegion, handleResize } from './utils/terminal.js';
1
3
  export declare function run(): Promise<void>;
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4RA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQzF,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBzC"}
package/dist/index.js CHANGED
@@ -1,253 +1,27 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import { select } from 'inquirer-select-pro';
3
3
  import chalk from 'chalk';
4
- import boxen from 'boxen';
5
4
  import ora from 'ora';
6
- import { access, cp, mkdir, readdir, readFile, writeFile } from 'fs/promises';
7
- import { exec } from 'child_process';
8
- import { promisify } from 'util';
9
- import { homedir } from 'os';
10
- import { dirname, join } from 'path';
11
- import { fileURLToPath } from 'url';
12
- const execAsync = promisify(exec);
13
- const __dirname = dirname(fileURLToPath(import.meta.url));
14
- const ROOT_DIR = join(__dirname, '..');
15
- const HOME_DIR = homedir();
16
- const OPENCODE_DIR = join(HOME_DIR, '.config', 'opencode');
17
- const OPENCODE_CONFIG = join(OPENCODE_DIR, 'opencode.json');
18
- const MCP_DISPLAY_NAMES = {
19
- 'pg-aiguide': 'postgres-mcp',
20
- };
21
- async function exists(path) {
22
- try {
23
- await access(path);
24
- return true;
25
- }
26
- catch {
27
- return false;
28
- }
29
- }
30
- async function isOpenCodeInstalled() {
31
- try {
32
- await execAsync('which opencode');
33
- return true;
34
- }
35
- catch {
36
- return await exists(OPENCODE_DIR);
37
- }
38
- }
39
- async function installOpenCode() {
40
- const spinner = ora('Installing OpenCode...').start();
41
- try {
42
- await execAsync('curl -fsSL https://opencode.ai/install | bash', {
43
- shell: '/bin/bash',
44
- });
45
- spinner.succeed('OpenCode installed successfully!');
46
- console.log(chalk.cyan('\n Next Steps:'));
47
- console.log(' OpenCode has been installed. You may need to restart your terminal or run:');
48
- console.log(' source ~/.bashrc (or ~/.zshrc)\n');
49
- }
50
- catch (error) {
51
- spinner.fail('Installation failed');
52
- throw new Error(`Failed to install OpenCode: ${error instanceof Error ? error.message : String(error)}`);
53
- }
54
- }
55
- async function getDirectories(path) {
56
- try {
57
- const entries = await readdir(path, { withFileTypes: true });
58
- return entries.filter(e => e.isDirectory()).map(e => e.name);
59
- }
60
- catch {
61
- return [];
62
- }
63
- }
64
- async function getFiles(path, extension) {
65
- try {
66
- const entries = await readdir(path, { withFileTypes: true });
67
- return entries
68
- .filter(e => e.isFile() && e.name.endsWith(extension))
69
- .map(e => e.name.replace(extension, ''));
70
- }
71
- catch {
72
- return [];
73
- }
74
- }
75
- async function getInstalledMcps() {
76
- try {
77
- const content = await readFile(OPENCODE_CONFIG, 'utf-8');
78
- const config = JSON.parse(content);
79
- const mcpSection = config.mcp;
80
- return mcpSection ? new Set(Object.keys(mcpSection)) : new Set();
81
- }
82
- catch {
83
- return new Set();
84
- }
85
- }
86
- async function readJsonConfig(path) {
87
- try {
88
- const content = await readFile(path, 'utf-8');
89
- return JSON.parse(content);
90
- }
91
- catch {
92
- return {};
93
- }
94
- }
95
- async function isThemeInstalled(themeName) {
96
- const themePath = join(OPENCODE_DIR, 'themes', `${themeName}.json`);
97
- return await exists(themePath);
98
- }
99
- function formatInstalledLabel(name, isInstalled) {
100
- return isInstalled ? `${name} ${chalk.yellow('(installed)')}` : name;
101
- }
102
- async function categorizeAgents(agents) {
103
- const result = { new: [], update: [] };
104
- for (const agent of agents) {
105
- const agentPath = join(OPENCODE_DIR, 'agent', `${agent}.md`);
106
- if (await exists(agentPath)) {
107
- result.update.push(agent);
108
- }
109
- else {
110
- result.new.push(agent);
111
- }
112
- }
113
- return result;
114
- }
115
- async function categorizeSkills(skills) {
116
- const result = { new: [], update: [] };
117
- for (const skill of skills) {
118
- const skillPath = join(OPENCODE_DIR, 'skill', skill);
119
- if (await exists(skillPath)) {
120
- result.update.push(skill);
121
- }
122
- else {
123
- result.new.push(skill);
124
- }
125
- }
126
- return result;
127
- }
128
- async function categorizeCommands(commands) {
129
- const result = { new: [], update: [] };
130
- for (const command of commands) {
131
- const commandPath = join(OPENCODE_DIR, 'command', `${command}.md`);
132
- if (await exists(commandPath)) {
133
- result.update.push(command);
134
- }
135
- else {
136
- result.new.push(command);
137
- }
138
- }
139
- return result;
140
- }
141
- async function categorizeMcps(mcps) {
142
- const installedMcps = await getInstalledMcps();
143
- const result = { new: [], update: [] };
144
- for (const mcp of mcps) {
145
- const mcpConfig = await readJsonConfig(join(ROOT_DIR, 'mcps', mcp, '.mcp.json'));
146
- const servers = mcpConfig.mcpServers;
147
- const displayName = MCP_DISPLAY_NAMES[mcp] ?? mcp;
148
- let isInstalled = false;
149
- if (servers) {
150
- for (const serverName of Object.keys(servers)) {
151
- if (installedMcps.has(serverName)) {
152
- isInstalled = true;
153
- break;
154
- }
155
- }
156
- }
157
- if (isInstalled) {
158
- result.update.push(displayName);
159
- }
160
- else {
161
- result.new.push(displayName);
162
- }
163
- }
164
- return result;
165
- }
166
- async function buildAgentChoices(agents) {
167
- const choices = [];
168
- for (const agent of agents) {
169
- const agentPath = join(OPENCODE_DIR, 'agent', `${agent}.md`);
170
- const isInstalled = await exists(agentPath);
171
- choices.push({
172
- name: formatInstalledLabel(agent, isInstalled),
173
- value: agent,
174
- });
175
- }
176
- return choices;
177
- }
178
- async function buildSkillChoices(skills) {
179
- const choices = [];
180
- for (const skill of skills) {
181
- const skillPath = join(OPENCODE_DIR, 'skill', skill);
182
- const isInstalled = await exists(skillPath);
183
- choices.push({
184
- name: formatInstalledLabel(skill, isInstalled),
185
- value: skill,
186
- });
187
- }
188
- return choices;
189
- }
190
- async function buildCommandChoices(commands) {
191
- const choices = [];
192
- for (const command of commands) {
193
- const commandPath = join(OPENCODE_DIR, 'command', `${command}.md`);
194
- const isInstalled = await exists(commandPath);
195
- choices.push({
196
- name: formatInstalledLabel(command, isInstalled),
197
- value: command,
198
- });
199
- }
200
- return choices;
201
- }
202
- async function buildMcpChoices(mcps) {
203
- const installedMcps = await getInstalledMcps();
204
- const choices = [];
205
- for (const mcp of mcps) {
206
- const mcpConfig = await readJsonConfig(join(ROOT_DIR, 'mcps', mcp, '.mcp.json'));
207
- const servers = mcpConfig.mcpServers;
208
- let isInstalled = false;
209
- if (servers) {
210
- for (const serverName of Object.keys(servers)) {
211
- if (installedMcps.has(serverName)) {
212
- isInstalled = true;
213
- break;
214
- }
215
- }
216
- }
217
- const displayName = MCP_DISPLAY_NAMES[mcp] ?? mcp;
218
- choices.push({
219
- name: formatInstalledLabel(displayName, isInstalled),
220
- value: mcp,
221
- });
222
- }
223
- return choices;
224
- }
5
+ import { join } from 'path';
6
+ import { TOOLS_DIR } from './constants.js';
7
+ import { getDirectories, getFiles } from './utils/fs.js';
8
+ import { handleResize, resetScrollRegion, setupScrollRegion } from './utils/terminal.js';
9
+ import { isOpenCodeInstalled, installOpenCode } from './services/opencode.js';
10
+ import { installAgents, installCommands, installMcps, installSkills, installTheme, isThemeInstalled, } from './services/installers.js';
11
+ import { buildAgentChoices, buildCommandChoices, buildMcpChoices, buildSkillChoices, } from './ui/choices.js';
12
+ import { categorizeAgents, categorizeCommands, categorizeMcps, categorizeSkills, } from './ui/categorize.js';
13
+ import { displayHeader, displaySummary, getSeparator, showSelectionResult } from './ui/display.js';
14
+ // Re-export for testing
15
+ export { BOTTOM_PADDING } from './constants.js';
16
+ export { setupScrollRegion, resetScrollRegion, handleResize } from './utils/terminal.js';
225
17
  function handleExit() {
18
+ resetScrollRegion();
226
19
  console.log(chalk.red('\n\nInstallation cancelled.'));
227
20
  process.exit(0);
228
21
  }
229
- async function displayHeader() {
230
- const pkg = await readJsonConfig(join(ROOT_DIR, 'package.json'));
231
- const version = pkg.version;
232
- const logo = [
233
- chalk.cyanBright(' ██████╗██╗ ██╗██╗ ██╗'),
234
- chalk.cyanBright(' ██╔════╝██║ ██╔╝██║ ██║'),
235
- chalk.cyanBright(' ██║ █████╔╝ ██║ █╗ ██║'),
236
- chalk.cyanBright(' ██║ ██╔═██╗ ██║███╗██║'),
237
- chalk.cyanBright(' ╚██████╗██║ ██╗╚███╔███╔╝'),
238
- chalk.cyanBright(' ╚═════╝╚═╝ ╚═╝ ╚══╝╚══╝') + chalk.green(' ●'),
239
- ].join('\n');
240
- console.clear();
241
- console.log(boxen(logo, {
242
- padding: { top: 1, bottom: 1, left: 16, right: 16 },
243
- borderStyle: 'round',
244
- borderColor: 'cyan',
245
- title: `CKW AI Toolkit v${version}`,
246
- titleAlignment: 'left',
247
- }));
248
- console.log();
249
- }
250
22
  export async function run() {
23
+ setupScrollRegion();
24
+ process.stdout.on('resize', handleResize);
251
25
  try {
252
26
  await runInstaller();
253
27
  }
@@ -260,6 +34,10 @@ export async function run() {
260
34
  throw error;
261
35
  }
262
36
  }
37
+ finally {
38
+ process.stdout.off('resize', handleResize);
39
+ resetScrollRegion();
40
+ }
263
41
  }
264
42
  async function runInstaller() {
265
43
  await displayHeader();
@@ -292,16 +70,19 @@ async function runInstaller() {
292
70
  process.exit(0);
293
71
  }
294
72
  }
295
- const agents = await getFiles(join(ROOT_DIR, 'agents'), '.md');
296
- const skills = await getDirectories(join(ROOT_DIR, 'skills'));
297
- const commands = await getFiles(join(ROOT_DIR, 'commands'), '.md');
298
- const mcps = await getDirectories(join(ROOT_DIR, 'mcps'));
73
+ const agents = await getFiles(join(TOOLS_DIR, 'agents'), '.md');
74
+ const skills = await getDirectories(join(TOOLS_DIR, 'skills'));
75
+ const commands = await getFiles(join(TOOLS_DIR, 'commands'), '.md');
76
+ const mcps = await getDirectories(join(TOOLS_DIR, 'mcps'));
299
77
  const selectTheme = {
300
78
  style: {
301
79
  renderSelectedOptions: () => '',
302
80
  },
303
81
  };
82
+ const selectInstructions = () => chalk.dim('(tab: select/unselect, enter: continue, ctrl+c: exit)');
83
+ const separator = getSeparator();
304
84
  // Step 2: Agents
85
+ console.log(separator);
305
86
  console.log(chalk.cyan('Step 2/7: Agents'));
306
87
  const selectedAgents = agents.length > 0
307
88
  ? await select({
@@ -309,42 +90,54 @@ async function runInstaller() {
309
90
  options: await buildAgentChoices(agents),
310
91
  multiple: true,
311
92
  theme: selectTheme,
93
+ instructions: selectInstructions,
312
94
  })
313
95
  : [];
96
+ showSelectionResult(selectedAgents.length, 'agents');
314
97
  // Step 3: Skills
315
- console.log(chalk.cyan('\nStep 3/7: Skills'));
98
+ console.log(`\n${separator}`);
99
+ console.log(chalk.cyan('Step 3/7: Skills'));
316
100
  const selectedSkills = skills.length > 0
317
101
  ? await select({
318
102
  message: 'Select skills:',
319
103
  options: await buildSkillChoices(skills),
320
104
  multiple: true,
321
105
  theme: selectTheme,
106
+ instructions: selectInstructions,
322
107
  })
323
108
  : [];
109
+ showSelectionResult(selectedSkills.length, 'skills');
324
110
  // Step 4: Commands
325
- console.log(chalk.cyan('\nStep 4/7: Commands'));
111
+ console.log(`\n${separator}`);
112
+ console.log(chalk.cyan('Step 4/7: Commands'));
326
113
  const selectedCommands = commands.length > 0
327
114
  ? await select({
328
115
  message: 'Select commands:',
329
116
  options: await buildCommandChoices(commands),
330
117
  multiple: true,
331
118
  theme: selectTheme,
119
+ instructions: selectInstructions,
332
120
  })
333
121
  : [];
122
+ showSelectionResult(selectedCommands.length, 'commands');
334
123
  // Step 5: MCPs
335
- console.log(chalk.cyan('\nStep 5/7: MCPs'));
124
+ console.log(`\n${separator}`);
125
+ console.log(chalk.cyan('Step 5/7: MCPs'));
336
126
  const selectedMcps = mcps.length > 0
337
127
  ? await select({
338
128
  message: 'Select MCPs:',
339
129
  options: await buildMcpChoices(mcps),
340
130
  multiple: true,
341
131
  theme: selectTheme,
132
+ instructions: selectInstructions,
342
133
  })
343
134
  : [];
135
+ showSelectionResult(selectedMcps.length, 'MCPs');
344
136
  // Step 6: Theme
345
137
  let installThemeChoice = isNewInstallation;
346
138
  if (!isNewInstallation) {
347
- console.log(chalk.cyan('\nStep 6/7: Theme'));
139
+ console.log(`\n${separator}`);
140
+ console.log(chalk.cyan('Step 6/7: Theme'));
348
141
  const themeInstalled = await isThemeInstalled('claude-vivid');
349
142
  if (themeInstalled) {
350
143
  console.log(chalk.green('✓ claude-vivid theme is already installed\n'));
@@ -358,7 +151,8 @@ async function runInstaller() {
358
151
  }
359
152
  }
360
153
  else {
361
- console.log(chalk.cyan('\nStep 6/7: Theme'));
154
+ console.log(`\n${separator}`);
155
+ console.log(chalk.cyan('Step 6/7: Theme'));
362
156
  console.log(chalk.green('✓ claude-vivid theme will be installed automatically\n'));
363
157
  }
364
158
  // Check if anything was selected
@@ -372,37 +166,16 @@ async function runInstaller() {
372
166
  process.exit(0);
373
167
  }
374
168
  // Step 7: Confirm
375
- console.log(chalk.cyan('\nStep 7/7: Confirm'));
169
+ console.log(`\n${separator}`);
170
+ console.log(chalk.cyan('Step 7/7: Confirm'));
376
171
  // Categorize selections
377
172
  const agentsCat = await categorizeAgents(selectedAgents);
378
173
  const skillsCat = await categorizeSkills(selectedSkills);
379
174
  const commandsCat = await categorizeCommands(selectedCommands);
380
175
  const mcpsCat = await categorizeMcps(selectedMcps);
381
- const themeIsUpdate = installThemeChoice && await isThemeInstalled('claude-vivid');
382
- const formatCategorized = (cat) => {
383
- const parts = [];
384
- if (cat.new.length > 0) {
385
- parts.push(chalk.green(`+ ${cat.new.join(', ')}`));
386
- }
387
- if (cat.update.length > 0) {
388
- parts.push(chalk.yellow(`↻ ${cat.update.join(', ')}`));
389
- }
390
- return parts.length > 0 ? parts.join(' ') : chalk.dim('none');
391
- };
392
- const formatTheme = () => {
393
- if (!installThemeChoice)
394
- return chalk.dim('none');
395
- return themeIsUpdate
396
- ? chalk.yellow('↻ claude-vivid')
397
- : chalk.green('+ claude-vivid');
398
- };
399
- console.log(chalk.white('\n Summary:'));
400
- console.log(chalk.dim(' (+ new ↻ update)\n'));
401
- console.log(` Agents: ${formatCategorized(agentsCat)}`);
402
- console.log(` Skills: ${formatCategorized(skillsCat)}`);
403
- console.log(` Commands: ${formatCategorized(commandsCat)}`);
404
- console.log(` MCPs: ${formatCategorized(mcpsCat)}`);
405
- console.log(` Theme: ${formatTheme()}\n`);
176
+ const themeIsUpdate = installThemeChoice && (await isThemeInstalled('claude-vivid'));
177
+ displaySummary(agentsCat, skillsCat, commandsCat, mcpsCat, installThemeChoice, themeIsUpdate);
178
+ console.log();
406
179
  const confirmInstall = await confirm({ message: 'Proceed with installation?' });
407
180
  if (!confirmInstall) {
408
181
  console.log(chalk.red('\nInstallation cancelled.'));
@@ -432,60 +205,4 @@ async function runInstaller() {
432
205
  }
433
206
  console.log(chalk.green('\nDone! Your tools are ready.'));
434
207
  }
435
- async function installAgents(agents) {
436
- if (agents.length === 0)
437
- return;
438
- const agentDir = join(OPENCODE_DIR, 'agent');
439
- await mkdir(agentDir, { recursive: true });
440
- for (const agent of agents) {
441
- await cp(join(ROOT_DIR, 'agents', `${agent}.md`), join(agentDir, `${agent}.md`));
442
- }
443
- }
444
- async function installSkills(skills) {
445
- if (skills.length === 0)
446
- return;
447
- const skillDir = join(OPENCODE_DIR, 'skill');
448
- await mkdir(skillDir, { recursive: true });
449
- for (const skill of skills) {
450
- await cp(join(ROOT_DIR, 'skills', skill), join(skillDir, skill), { recursive: true, force: true });
451
- }
452
- }
453
- async function installCommands(commands) {
454
- if (commands.length === 0)
455
- return;
456
- const commandDir = join(OPENCODE_DIR, 'command');
457
- await mkdir(commandDir, { recursive: true });
458
- for (const command of commands) {
459
- await cp(join(ROOT_DIR, 'commands', `${command}.md`), join(commandDir, `${command}.md`));
460
- }
461
- }
462
- async function installMcps(mcps) {
463
- if (mcps.length === 0)
464
- return;
465
- const config = await readJsonConfig(OPENCODE_CONFIG);
466
- if (!config.mcp) {
467
- config.mcp = {};
468
- }
469
- const mcpSection = config.mcp;
470
- for (const mcp of mcps) {
471
- const mcpConfig = await readJsonConfig(join(ROOT_DIR, 'mcps', mcp, '.mcp.json'));
472
- const servers = mcpConfig.mcpServers;
473
- if (servers) {
474
- Object.assign(mcpSection, servers);
475
- }
476
- }
477
- await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
478
- }
479
- async function installTheme() {
480
- const themesDir = join(OPENCODE_DIR, 'themes');
481
- await mkdir(themesDir, { recursive: true });
482
- const themeSource = join(ROOT_DIR, 'themes', 'claude-vivid.json');
483
- const themeExists = await exists(themeSource);
484
- if (themeExists) {
485
- await cp(themeSource, join(themesDir, 'claude-vivid.json'));
486
- const config = await readJsonConfig(OPENCODE_CONFIG);
487
- config.theme = 'claude-vivid';
488
- await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
489
- }
490
- }
491
208
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function installAgents(agents: string[]): Promise<void>;
2
+ export declare function installSkills(skills: string[]): Promise<void>;
3
+ export declare function installCommands(commands: string[]): Promise<void>;
4
+ export declare function installMcps(mcps: string[]): Promise<void>;
5
+ export declare function installTheme(): Promise<void>;
6
+ export declare function isThemeInstalled(themeName: string): Promise<boolean>;
7
+ export declare function getInstalledMcps(): Promise<Set<string>>;
8
+ //# sourceMappingURL=installers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installers.d.ts","sourceRoot":"","sources":["../../src/services/installers.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAYnE;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASvE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAclD;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAS7D"}