@brookmind/ai-toolkit 1.2.0 → 1.2.2
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.
- package/README.md +8 -12
- package/dist/__tests__/constants.test.d.ts +2 -0
- package/dist/__tests__/constants.test.d.ts.map +1 -0
- package/dist/__tests__/constants.test.js +102 -0
- package/dist/__tests__/constants.test.js.map +1 -0
- package/dist/__tests__/index.test.js +6 -105
- package/dist/__tests__/index.test.js.map +1 -1
- package/dist/__tests__/integration/installer.test.d.ts +2 -0
- package/dist/__tests__/integration/installer.test.d.ts.map +1 -0
- package/dist/__tests__/integration/installer.test.js +450 -0
- package/dist/__tests__/integration/installer.test.js.map +1 -0
- package/dist/__tests__/services/installers.test.d.ts +2 -0
- package/dist/__tests__/services/installers.test.d.ts.map +1 -0
- package/dist/__tests__/services/installers.test.js +250 -0
- package/dist/__tests__/services/installers.test.js.map +1 -0
- package/dist/__tests__/services/opencode.test.d.ts +2 -0
- package/dist/__tests__/services/opencode.test.d.ts.map +1 -0
- package/dist/__tests__/services/opencode.test.js +120 -0
- package/dist/__tests__/services/opencode.test.js.map +1 -0
- package/dist/__tests__/ui/categorize.test.d.ts +2 -0
- package/dist/__tests__/ui/categorize.test.d.ts.map +1 -0
- package/dist/__tests__/ui/categorize.test.js +225 -0
- package/dist/__tests__/ui/categorize.test.js.map +1 -0
- package/dist/__tests__/ui/choices.test.d.ts +2 -0
- package/dist/__tests__/ui/choices.test.d.ts.map +1 -0
- package/dist/__tests__/ui/choices.test.js +223 -0
- package/dist/__tests__/ui/choices.test.js.map +1 -0
- package/dist/__tests__/ui/display.test.d.ts +2 -0
- package/dist/__tests__/ui/display.test.d.ts.map +1 -0
- package/dist/__tests__/ui/display.test.js +138 -0
- package/dist/__tests__/ui/display.test.js.map +1 -0
- package/dist/__tests__/utils/fs.test.d.ts +2 -0
- package/dist/__tests__/utils/fs.test.d.ts.map +1 -0
- package/dist/__tests__/utils/fs.test.js +301 -0
- package/dist/__tests__/utils/fs.test.js.map +1 -0
- package/dist/__tests__/utils/terminal.test.d.ts +2 -0
- package/dist/__tests__/utils/terminal.test.d.ts.map +1 -0
- package/dist/__tests__/utils/terminal.test.js +97 -0
- package/dist/__tests__/utils/terminal.test.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -29
- package/dist/index.js.map +1 -1
- package/dist/services/installers.d.ts +1 -1
- package/dist/services/installers.d.ts.map +1 -1
- package/dist/services/installers.js +21 -14
- package/dist/services/installers.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +28 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/categorize.d.ts +1 -0
- package/dist/ui/categorize.d.ts.map +1 -1
- package/dist/ui/categorize.js +15 -3
- package/dist/ui/categorize.js.map +1 -1
- package/dist/ui/choices.d.ts +1 -0
- package/dist/ui/choices.d.ts.map +1 -1
- package/dist/ui/choices.js +14 -3
- package/dist/ui/choices.js.map +1 -1
- package/dist/ui/display.d.ts +1 -2
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +14 -17
- package/dist/ui/display.js.map +1 -1
- package/dist/utils/fs.d.ts +14 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +72 -2
- package/dist/utils/fs.js.map +1 -1
- package/package.json +4 -2
|
@@ -2,7 +2,7 @@ export declare function installAgents(agents: string[]): Promise<void>;
|
|
|
2
2
|
export declare function installSkills(skills: string[]): Promise<void>;
|
|
3
3
|
export declare function installCommands(commands: string[]): Promise<void>;
|
|
4
4
|
export declare function installMcps(mcps: string[]): Promise<void>;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function installThemes(themes: string[]): Promise<void>;
|
|
6
6
|
export declare function isThemeInstalled(themeName: string): Promise<boolean>;
|
|
7
7
|
export declare function getInstalledMcps(): Promise<Set<string>>;
|
|
8
8
|
//# sourceMappingURL=installers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installers.d.ts","sourceRoot":"","sources":["../../src/services/installers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installers.d.ts","sourceRoot":"","sources":["../../src/services/installers.ts"],"names":[],"mappings":"AAMA,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,CAiB/D;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnE;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAY7D"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { cp, mkdir, readFile, writeFile } from 'fs/promises';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { OPENCODE_CONFIG, OPENCODE_DIR, TOOLS_DIR } from '../constants.js';
|
|
4
|
-
import { exists,
|
|
4
|
+
import { exists, readMcpConfig, readOpencodeConfig } from '../utils/fs.js';
|
|
5
|
+
import { isOpencodeConfig } from '../types.js';
|
|
5
6
|
export async function installAgents(agents) {
|
|
6
7
|
if (agents.length === 0)
|
|
7
8
|
return;
|
|
@@ -35,29 +36,32 @@ export async function installCommands(commands) {
|
|
|
35
36
|
export async function installMcps(mcps) {
|
|
36
37
|
if (mcps.length === 0)
|
|
37
38
|
return;
|
|
38
|
-
const config = await
|
|
39
|
+
const config = await readOpencodeConfig(OPENCODE_CONFIG);
|
|
39
40
|
if (!config.mcp) {
|
|
40
41
|
config.mcp = {};
|
|
41
42
|
}
|
|
42
|
-
const mcpSection = config.mcp;
|
|
43
43
|
for (const mcp of mcps) {
|
|
44
|
-
const mcpConfig = await
|
|
44
|
+
const mcpConfig = await readMcpConfig(join(TOOLS_DIR, 'mcps', mcp, '.mcp.json'));
|
|
45
45
|
const servers = mcpConfig.mcpServers;
|
|
46
46
|
if (servers) {
|
|
47
|
-
Object.assign(
|
|
47
|
+
Object.assign(config.mcp, servers);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
|
|
51
51
|
}
|
|
52
|
-
export async function
|
|
52
|
+
export async function installThemes(themes) {
|
|
53
|
+
if (themes.length === 0)
|
|
54
|
+
return;
|
|
53
55
|
const themesDir = join(OPENCODE_DIR, 'themes');
|
|
54
56
|
await mkdir(themesDir, { recursive: true });
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
for (const theme of themes) {
|
|
58
|
+
const themeSource = join(TOOLS_DIR, 'themes', `${theme}.json`);
|
|
59
|
+
await cp(themeSource, join(themesDir, `${theme}.json`));
|
|
60
|
+
}
|
|
61
|
+
const firstTheme = themes[0];
|
|
62
|
+
if (firstTheme) {
|
|
63
|
+
const config = await readOpencodeConfig(OPENCODE_CONFIG);
|
|
64
|
+
config.theme = firstTheme;
|
|
61
65
|
await writeFile(OPENCODE_CONFIG, JSON.stringify(config, null, 2));
|
|
62
66
|
}
|
|
63
67
|
}
|
|
@@ -68,8 +72,11 @@ export async function isThemeInstalled(themeName) {
|
|
|
68
72
|
export async function getInstalledMcps() {
|
|
69
73
|
try {
|
|
70
74
|
const content = await readFile(OPENCODE_CONFIG, 'utf-8');
|
|
71
|
-
const
|
|
72
|
-
|
|
75
|
+
const parsed = JSON.parse(content);
|
|
76
|
+
if (!isOpencodeConfig(parsed)) {
|
|
77
|
+
return new Set();
|
|
78
|
+
}
|
|
79
|
+
const mcpSection = parsed.mcp;
|
|
73
80
|
return mcpSection ? new Set(Object.keys(mcpSection)) : new Set();
|
|
74
81
|
}
|
|
75
82
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installers.js","sourceRoot":"","sources":["../../src/services/installers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"installers.js","sourceRoot":"","sources":["../../src/services/installers.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,4 +7,19 @@ export interface CategorizedItems {
|
|
|
7
7
|
new: string[];
|
|
8
8
|
update: string[];
|
|
9
9
|
}
|
|
10
|
+
export interface OpencodeConfig {
|
|
11
|
+
mcp?: Record<string, unknown>;
|
|
12
|
+
theme?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface McpConfig {
|
|
15
|
+
mcpServers?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface PackageJson {
|
|
18
|
+
version?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
22
|
+
export declare function isOpencodeConfig(value: unknown): value is OpencodeConfig;
|
|
23
|
+
export declare function isMcpConfig(value: unknown): value is McpConfig;
|
|
24
|
+
export declare function isPackageJson(value: unknown): value is PackageJson;
|
|
10
25
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAKxE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAI9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAKlE"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,29 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export function isRecord(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
export function isOpencodeConfig(value) {
|
|
5
|
+
if (!isRecord(value))
|
|
6
|
+
return false;
|
|
7
|
+
if (value.mcp !== undefined && !isRecord(value.mcp))
|
|
8
|
+
return false;
|
|
9
|
+
if (value.theme !== undefined && typeof value.theme !== 'string')
|
|
10
|
+
return false;
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
export function isMcpConfig(value) {
|
|
14
|
+
if (!isRecord(value))
|
|
15
|
+
return false;
|
|
16
|
+
if (value.mcpServers !== undefined && !isRecord(value.mcpServers))
|
|
17
|
+
return false;
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
export function isPackageJson(value) {
|
|
21
|
+
if (!isRecord(value))
|
|
22
|
+
return false;
|
|
23
|
+
if (value.version !== undefined && typeof value.version !== 'string')
|
|
24
|
+
return false;
|
|
25
|
+
if (value.name !== undefined && typeof value.name !== 'string')
|
|
26
|
+
return false;
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
2
29
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/ui/categorize.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare function categorizeAgents(agents: string[]): Promise<CategorizedI
|
|
|
3
3
|
export declare function categorizeSkills(skills: string[]): Promise<CategorizedItems>;
|
|
4
4
|
export declare function categorizeCommands(commands: string[]): Promise<CategorizedItems>;
|
|
5
5
|
export declare function categorizeMcps(mcps: string[]): Promise<CategorizedItems>;
|
|
6
|
+
export declare function categorizeThemes(themes: string[]): Promise<CategorizedItems>;
|
|
6
7
|
//# sourceMappingURL=categorize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categorize.d.ts","sourceRoot":"","sources":["../../src/ui/categorize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWlF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWlF;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWtF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B9E"}
|
|
1
|
+
{"version":3,"file":"categorize.d.ts","sourceRoot":"","sources":["../../src/ui/categorize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWlF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWlF;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWtF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B9E;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAUlF"}
|
package/dist/ui/categorize.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { MCP_DISPLAY_NAMES, OPENCODE_DIR, TOOLS_DIR } from '../constants.js';
|
|
3
|
-
import { exists,
|
|
4
|
-
import { getInstalledMcps } from '../services/installers.js';
|
|
3
|
+
import { exists, readMcpConfig } from '../utils/fs.js';
|
|
4
|
+
import { getInstalledMcps, isThemeInstalled } from '../services/installers.js';
|
|
5
5
|
export async function categorizeAgents(agents) {
|
|
6
6
|
const result = { new: [], update: [] };
|
|
7
7
|
for (const agent of agents) {
|
|
@@ -45,7 +45,7 @@ export async function categorizeMcps(mcps) {
|
|
|
45
45
|
const installedMcps = await getInstalledMcps();
|
|
46
46
|
const result = { new: [], update: [] };
|
|
47
47
|
for (const mcp of mcps) {
|
|
48
|
-
const mcpConfig = await
|
|
48
|
+
const mcpConfig = await readMcpConfig(join(TOOLS_DIR, 'mcps', mcp, '.mcp.json'));
|
|
49
49
|
const servers = mcpConfig.mcpServers;
|
|
50
50
|
const displayName = MCP_DISPLAY_NAMES[mcp] ?? mcp;
|
|
51
51
|
let isInstalled = false;
|
|
@@ -66,4 +66,16 @@ export async function categorizeMcps(mcps) {
|
|
|
66
66
|
}
|
|
67
67
|
return result;
|
|
68
68
|
}
|
|
69
|
+
export async function categorizeThemes(themes) {
|
|
70
|
+
const result = { new: [], update: [] };
|
|
71
|
+
for (const theme of themes) {
|
|
72
|
+
if (await isThemeInstalled(theme)) {
|
|
73
|
+
result.update.push(theme);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
result.new.push(theme);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
69
81
|
//# sourceMappingURL=categorize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"categorize.js","sourceRoot":"","sources":["../../src/ui/categorize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"categorize.js","sourceRoot":"","sources":["../../src/ui/categorize.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/choices.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare function buildAgentChoices(agents: string[]): Promise<CheckboxCho
|
|
|
3
3
|
export declare function buildSkillChoices(skills: string[]): Promise<CheckboxChoice[]>;
|
|
4
4
|
export declare function buildCommandChoices(commands: string[]): Promise<CheckboxChoice[]>;
|
|
5
5
|
export declare function buildMcpChoices(mcps: string[]): Promise<CheckboxChoice[]>;
|
|
6
|
+
export declare function buildThemeChoices(themes: string[]): Promise<CheckboxChoice[]>;
|
|
6
7
|
//# sourceMappingURL=choices.d.ts.map
|
package/dist/ui/choices.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choices.d.ts","sourceRoot":"","sources":["../../src/ui/choices.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWnF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWnF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWvF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0B/E"}
|
|
1
|
+
{"version":3,"file":"choices.d.ts","sourceRoot":"","sources":["../../src/ui/choices.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWnF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWnF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAWvF;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0B/E;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAUnF"}
|
package/dist/ui/choices.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { getDescription, MCP_DISPLAY_NAMES, OPENCODE_DIR, TOOLS_DIR } from '../constants.js';
|
|
4
|
-
import { exists,
|
|
5
|
-
import { getInstalledMcps } from '../services/installers.js';
|
|
4
|
+
import { exists, readMcpConfig } from '../utils/fs.js';
|
|
5
|
+
import { getInstalledMcps, isThemeInstalled } from '../services/installers.js';
|
|
6
6
|
function formatChoiceLabel(name, description, isInstalled) {
|
|
7
7
|
const installedTag = isInstalled ? chalk.yellow(' (installed)') : '';
|
|
8
8
|
const descText = description ? chalk.dim(` - ${description}`) : '';
|
|
@@ -48,7 +48,7 @@ export async function buildMcpChoices(mcps) {
|
|
|
48
48
|
const installedMcps = await getInstalledMcps();
|
|
49
49
|
const choices = [];
|
|
50
50
|
for (const mcp of mcps) {
|
|
51
|
-
const mcpConfig = await
|
|
51
|
+
const mcpConfig = await readMcpConfig(join(TOOLS_DIR, 'mcps', mcp, '.mcp.json'));
|
|
52
52
|
const servers = mcpConfig.mcpServers;
|
|
53
53
|
let isInstalled = false;
|
|
54
54
|
if (servers) {
|
|
@@ -67,4 +67,15 @@ export async function buildMcpChoices(mcps) {
|
|
|
67
67
|
}
|
|
68
68
|
return choices;
|
|
69
69
|
}
|
|
70
|
+
export async function buildThemeChoices(themes) {
|
|
71
|
+
const choices = [];
|
|
72
|
+
for (const theme of themes) {
|
|
73
|
+
const installed = await isThemeInstalled(theme);
|
|
74
|
+
choices.push({
|
|
75
|
+
name: formatChoiceLabel(theme, getDescription(theme), installed),
|
|
76
|
+
value: theme,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return choices;
|
|
80
|
+
}
|
|
70
81
|
//# sourceMappingURL=choices.js.map
|
package/dist/ui/choices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../src/ui/choices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"choices.js","sourceRoot":"","sources":["../../src/ui/choices.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/display.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { CategorizedItems } from '../types.js';
|
|
2
2
|
export declare function displayHeader(): Promise<void>;
|
|
3
3
|
export declare function formatCategorized(cat: CategorizedItems): string;
|
|
4
|
-
export declare function formatTheme(installThemeChoice: boolean, themeIsUpdate: boolean): string;
|
|
5
4
|
export declare function showSelectionResult(count: number, label: string): void;
|
|
6
5
|
export declare function getSeparator(): string;
|
|
7
|
-
export declare function displaySummary(agentsCat: CategorizedItems, skillsCat: CategorizedItems, commandsCat: CategorizedItems, mcpsCat: CategorizedItems,
|
|
6
|
+
export declare function displaySummary(agentsCat: CategorizedItems, skillsCat: CategorizedItems, commandsCat: CategorizedItems, mcpsCat: CategorizedItems, themesCat: CategorizedItems): void;
|
|
8
7
|
//# sourceMappingURL=display.d.ts.map
|
package/dist/ui/display.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBnD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAS/D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,gBAAgB,GAC1B,IAAI,CAsCN"}
|
package/dist/ui/display.js
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import boxen from 'boxen';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
import { ROOT_DIR } from '../constants.js';
|
|
5
|
-
import {
|
|
4
|
+
import { ROOT_DIR, UI_PANEL_WIDTH } from '../constants.js';
|
|
5
|
+
import { readPackageJson } from '../utils/fs.js';
|
|
6
6
|
import { clearScreen } from '../utils/terminal.js';
|
|
7
7
|
export async function displayHeader() {
|
|
8
|
-
const pkg = await
|
|
9
|
-
const version = pkg.version;
|
|
8
|
+
const pkg = await readPackageJson(join(ROOT_DIR, 'package.json'));
|
|
9
|
+
const version = pkg.version ?? 'unknown';
|
|
10
10
|
const logo = [
|
|
11
|
-
chalk.cyanBright('
|
|
11
|
+
chalk.cyanBright(' ███████╗██╗ ██╗██╗ ██╗'),
|
|
12
12
|
chalk.cyanBright(' ██╔════╝██║ ██╔╝██║ ██║'),
|
|
13
13
|
chalk.cyanBright(' ██║ █████╔╝ ██║ █╗ ██║'),
|
|
14
14
|
chalk.cyanBright(' ██║ ██╔═██╗ ██║███╗██║'),
|
|
15
|
-
chalk.cyanBright('
|
|
16
|
-
chalk.cyanBright('
|
|
15
|
+
chalk.cyanBright(' ███████╗██║ ██╗╚███╔███╔╝'),
|
|
16
|
+
chalk.cyanBright(' ╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝') + chalk.green(' ●'),
|
|
17
17
|
].join('\n');
|
|
18
18
|
clearScreen();
|
|
19
19
|
console.log(boxen(logo, {
|
|
20
20
|
padding: { top: 1, bottom: 1, left: 16, right: 16 },
|
|
21
21
|
borderStyle: 'round',
|
|
22
22
|
borderColor: 'green',
|
|
23
|
-
title: chalk.white(`
|
|
23
|
+
title: chalk.white(`SWE AI Toolkit v${version}`),
|
|
24
24
|
titleAlignment: 'left',
|
|
25
|
+
width: UI_PANEL_WIDTH,
|
|
25
26
|
}));
|
|
26
27
|
console.log(chalk.dim(' Install agents, skills, commands and MCPs\n'));
|
|
27
28
|
}
|
|
@@ -35,11 +36,6 @@ export function formatCategorized(cat) {
|
|
|
35
36
|
}
|
|
36
37
|
return parts.length > 0 ? parts.join(' ') : chalk.dim('none');
|
|
37
38
|
}
|
|
38
|
-
export function formatTheme(installThemeChoice, themeIsUpdate) {
|
|
39
|
-
if (!installThemeChoice)
|
|
40
|
-
return chalk.dim('none');
|
|
41
|
-
return themeIsUpdate ? chalk.yellow('↻ claude-vivid') : chalk.green('+ claude-vivid');
|
|
42
|
-
}
|
|
43
39
|
export function showSelectionResult(count, label) {
|
|
44
40
|
if (count > 0) {
|
|
45
41
|
console.log(chalk.green(`✓ ${count} ${label} selected`));
|
|
@@ -51,17 +47,17 @@ export function showSelectionResult(count, label) {
|
|
|
51
47
|
export function getSeparator() {
|
|
52
48
|
return chalk.dim('─'.repeat(50));
|
|
53
49
|
}
|
|
54
|
-
export function displaySummary(agentsCat, skillsCat, commandsCat, mcpsCat,
|
|
50
|
+
export function displaySummary(agentsCat, skillsCat, commandsCat, mcpsCat, themesCat) {
|
|
55
51
|
const totalNew = agentsCat.new.length +
|
|
56
52
|
skillsCat.new.length +
|
|
57
53
|
commandsCat.new.length +
|
|
58
54
|
mcpsCat.new.length +
|
|
59
|
-
|
|
55
|
+
themesCat.new.length;
|
|
60
56
|
const totalUpdate = agentsCat.update.length +
|
|
61
57
|
skillsCat.update.length +
|
|
62
58
|
commandsCat.update.length +
|
|
63
59
|
mcpsCat.update.length +
|
|
64
|
-
|
|
60
|
+
themesCat.update.length;
|
|
65
61
|
const summaryLines = [
|
|
66
62
|
chalk.dim('(+ new ↻ update)'),
|
|
67
63
|
'',
|
|
@@ -69,7 +65,7 @@ export function displaySummary(agentsCat, skillsCat, commandsCat, mcpsCat, insta
|
|
|
69
65
|
`Skills: ${formatCategorized(skillsCat)}`,
|
|
70
66
|
`Commands: ${formatCategorized(commandsCat)}`,
|
|
71
67
|
`MCPs: ${formatCategorized(mcpsCat)}`,
|
|
72
|
-
`
|
|
68
|
+
`Themes: ${formatCategorized(themesCat)}`,
|
|
73
69
|
'',
|
|
74
70
|
chalk.white(`Total: ${chalk.green(`${totalNew} new`)}, ${chalk.yellow(`${totalUpdate} updates`)}`),
|
|
75
71
|
].join('\n');
|
|
@@ -79,6 +75,7 @@ export function displaySummary(agentsCat, skillsCat, commandsCat, mcpsCat, insta
|
|
|
79
75
|
borderColor: 'white',
|
|
80
76
|
title: chalk.white('Summary'),
|
|
81
77
|
titleAlignment: 'left',
|
|
78
|
+
width: UI_PANEL_WIDTH,
|
|
82
79
|
}));
|
|
83
80
|
}
|
|
84
81
|
//# sourceMappingURL=display.js.map
|
package/dist/ui/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/ui/display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAEzC,MAAM,IAAI,GAAG;QACX,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC;QAChD,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC;QAC/C,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC;QAC/C,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC;QAC/C,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC;QAC/C,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;KACpE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,EAAE;QACV,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACnD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC;QAChD,cAAc,EAAE,MAAM;QACtB,KAAK,EAAE,cAAc;KACtB,CAAC,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAa;IAC9D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAA2B,EAC3B,SAA2B,EAC3B,WAA6B,EAC7B,OAAyB,EACzB,SAA2B;IAE3B,MAAM,QAAQ,GACZ,SAAS,CAAC,GAAG,CAAC,MAAM;QACpB,SAAS,CAAC,GAAG,CAAC,MAAM;QACpB,WAAW,CAAC,GAAG,CAAC,MAAM;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM;QAClB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;IACvB,MAAM,WAAW,GACf,SAAS,CAAC,MAAM,CAAC,MAAM;QACvB,SAAS,CAAC,MAAM,CAAC,MAAM;QACvB,WAAW,CAAC,MAAM,CAAC,MAAM;QACzB,OAAO,CAAC,MAAM,CAAC,MAAM;QACrB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAE1B,MAAM,YAAY,GAAG;QACnB,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC9B,EAAE;QACF,aAAa,iBAAiB,CAAC,SAAS,CAAC,EAAE;QAC3C,aAAa,iBAAiB,CAAC,SAAS,CAAC,EAAE;QAC3C,aAAa,iBAAiB,CAAC,WAAW,CAAC,EAAE;QAC7C,aAAa,iBAAiB,CAAC,OAAO,CAAC,EAAE;QACzC,aAAa,iBAAiB,CAAC,SAAS,CAAC,EAAE;QAC3C,EAAE;QACF,KAAK,CAAC,KAAK,CACT,UAAU,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW,UAAU,CAAC,EAAE,CACtF;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,YAAY,EAAE;QAClB,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACjD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7B,cAAc,EAAE,MAAM;QACtB,KAAK,EAAE,cAAc;KACtB,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/utils/fs.d.ts
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
|
+
import { type McpConfig, type OpencodeConfig, type PackageJson } from '../types.js';
|
|
2
|
+
export declare class JsonParseError extends Error {
|
|
3
|
+
readonly filePath: string;
|
|
4
|
+
readonly cause: Error;
|
|
5
|
+
constructor(filePath: string, cause: Error);
|
|
6
|
+
}
|
|
7
|
+
export declare class JsonValidationError extends Error {
|
|
8
|
+
readonly filePath: string;
|
|
9
|
+
readonly expectedType: string;
|
|
10
|
+
constructor(filePath: string, expectedType: string);
|
|
11
|
+
}
|
|
1
12
|
export declare function exists(path: string): Promise<boolean>;
|
|
2
13
|
export declare function getDirectories(path: string): Promise<string[]>;
|
|
3
14
|
export declare function getFiles(path: string, extension: string): Promise<string[]>;
|
|
15
|
+
export declare function readOpencodeConfig(path: string): Promise<OpencodeConfig>;
|
|
16
|
+
export declare function readMcpConfig(path: string): Promise<McpConfig>;
|
|
17
|
+
export declare function readPackageJson(path: string): Promise<PackageJson>;
|
|
4
18
|
export declare function readJsonConfig(path: string): Promise<Record<string, unknown>>;
|
|
5
19
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/utils/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,SAAQ,KAAK;aAErB,QAAQ,EAAE,MAAM;aAChB,KAAK,EAAE,KAAK;gBADZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK;CAK/B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,QAAQ,EAAE,MAAM;aAChB,YAAY,EAAE,MAAM;gBADpB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM;CAKvC;AAMD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOpE;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASjF;AAiBD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAS9E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CASpE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASxE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASnF"}
|
package/dist/utils/fs.js
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import { access, readdir, readFile } from 'fs/promises';
|
|
2
|
+
import { isRecord, isMcpConfig, isOpencodeConfig, isPackageJson, } from '../types.js';
|
|
3
|
+
export class JsonParseError extends Error {
|
|
4
|
+
filePath;
|
|
5
|
+
cause;
|
|
6
|
+
constructor(filePath, cause) {
|
|
7
|
+
super(`Failed to parse JSON at ${filePath}: ${cause.message}`);
|
|
8
|
+
this.filePath = filePath;
|
|
9
|
+
this.cause = cause;
|
|
10
|
+
this.name = 'JsonParseError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class JsonValidationError extends Error {
|
|
14
|
+
filePath;
|
|
15
|
+
expectedType;
|
|
16
|
+
constructor(filePath, expectedType) {
|
|
17
|
+
super(`Invalid JSON structure at ${filePath}: expected ${expectedType}`);
|
|
18
|
+
this.filePath = filePath;
|
|
19
|
+
this.expectedType = expectedType;
|
|
20
|
+
this.name = 'JsonValidationError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function isNodeError(error) {
|
|
24
|
+
return error instanceof Error && 'code' in error;
|
|
25
|
+
}
|
|
2
26
|
export async function exists(path) {
|
|
3
27
|
try {
|
|
4
28
|
await access(path);
|
|
@@ -28,13 +52,59 @@ export async function getFiles(path, extension) {
|
|
|
28
52
|
return [];
|
|
29
53
|
}
|
|
30
54
|
}
|
|
31
|
-
|
|
55
|
+
async function readAndParseJson(path) {
|
|
32
56
|
try {
|
|
33
57
|
const content = await readFile(path, 'utf-8');
|
|
34
58
|
return JSON.parse(content);
|
|
35
59
|
}
|
|
36
|
-
catch {
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (isNodeError(error) && error.code === 'ENOENT') {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
if (error instanceof SyntaxError) {
|
|
65
|
+
throw new JsonParseError(path, error);
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export async function readOpencodeConfig(path) {
|
|
71
|
+
const data = await readAndParseJson(path);
|
|
72
|
+
if (data === null) {
|
|
37
73
|
return {};
|
|
38
74
|
}
|
|
75
|
+
if (!isOpencodeConfig(data)) {
|
|
76
|
+
throw new JsonValidationError(path, 'OpencodeConfig');
|
|
77
|
+
}
|
|
78
|
+
return data;
|
|
79
|
+
}
|
|
80
|
+
export async function readMcpConfig(path) {
|
|
81
|
+
const data = await readAndParseJson(path);
|
|
82
|
+
if (data === null) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
if (!isMcpConfig(data)) {
|
|
86
|
+
throw new JsonValidationError(path, 'McpConfig');
|
|
87
|
+
}
|
|
88
|
+
return data;
|
|
89
|
+
}
|
|
90
|
+
export async function readPackageJson(path) {
|
|
91
|
+
const data = await readAndParseJson(path);
|
|
92
|
+
if (data === null) {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
if (!isPackageJson(data)) {
|
|
96
|
+
throw new JsonValidationError(path, 'PackageJson');
|
|
97
|
+
}
|
|
98
|
+
return data;
|
|
99
|
+
}
|
|
100
|
+
export async function readJsonConfig(path) {
|
|
101
|
+
const data = await readAndParseJson(path);
|
|
102
|
+
if (data === null) {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
if (!isRecord(data)) {
|
|
106
|
+
throw new JsonValidationError(path, 'Record<string, unknown>');
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
39
109
|
}
|
|
40
110
|
//# sourceMappingURL=fs.js.map
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brookmind/ai-toolkit",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "AI Toolkit
|
|
3
|
+
"version": "1.2.2",
|
|
4
|
+
"description": "SWE AI Toolkit - agents, skills, commands, MCPs, and themes for AI coding assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"typecheck": "tsc --noEmit",
|
|
27
27
|
"test": "vitest run",
|
|
28
28
|
"test:watch": "vitest",
|
|
29
|
+
"test:coverage": "vitest run --coverage",
|
|
29
30
|
"prepublishOnly": "npm run build",
|
|
30
31
|
"prepare": "husky"
|
|
31
32
|
},
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@eslint/js": "^9.39.2",
|
|
51
52
|
"@types/node": "^25.0.9",
|
|
53
|
+
"@vitest/coverage-v8": "^4.0.17",
|
|
52
54
|
"eslint": "^9.39.2",
|
|
53
55
|
"eslint-config-prettier": "^10.1.8",
|
|
54
56
|
"husky": "^9.1.7",
|