@paretools/init 0.15.0 → 0.16.0
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/dist/doctor.js +3 -70
- package/dist/doctor.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/detect.d.ts +16 -0
- package/dist/lib/detect.d.ts.map +1 -1
- package/dist/lib/detect.js +108 -1
- package/dist/lib/detect.js.map +1 -1
- package/dist/lib/extract-servers.d.ts +8 -0
- package/dist/lib/extract-servers.d.ts.map +1 -0
- package/dist/lib/extract-servers.js +71 -0
- package/dist/lib/extract-servers.js.map +1 -0
- package/dist/lib/prompts.d.ts +1 -1
- package/dist/lib/prompts.d.ts.map +1 -1
- package/dist/lib/prompts.js +14 -4
- package/dist/lib/prompts.js.map +1 -1
- package/package.json +5 -5
package/dist/doctor.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/* eslint-disable no-console */
|
|
3
|
-
import { readFileSync
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
4
|
import { resolve, dirname } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { parse as parseToml } from "smol-toml";
|
|
7
|
-
import YAML from "yaml";
|
|
8
6
|
import { parseDoctorArgs, DOCTOR_HELP } from "./lib/args.js";
|
|
9
|
-
import { CLIENT_MAP
|
|
7
|
+
import { CLIENT_MAP } from "./lib/clients.js";
|
|
10
8
|
import { checkServer, validateServerPackage } from "./lib/doctor/health-check.js";
|
|
11
9
|
import { formatReport } from "./lib/doctor/report.js";
|
|
12
10
|
import { detectClients } from "./lib/detect.js";
|
|
13
11
|
import { promptClient } from "./lib/prompts.js";
|
|
14
|
-
import {
|
|
12
|
+
import { extractPareServers } from "./lib/extract-servers.js";
|
|
15
13
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
14
|
function getVersion() {
|
|
17
15
|
try {
|
|
@@ -22,71 +20,6 @@ function getVersion() {
|
|
|
22
20
|
return "0.0.0";
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
|
-
/** Extract Pare server entries from a client's config file. */
|
|
26
|
-
function extractPareServers(client, projectDir) {
|
|
27
|
-
const configPath = resolveConfigPath(client.configPath, projectDir);
|
|
28
|
-
if (!existsSync(configPath)) {
|
|
29
|
-
return new Map();
|
|
30
|
-
}
|
|
31
|
-
const raw = readFileSync(configPath, "utf-8");
|
|
32
|
-
const servers = new Map();
|
|
33
|
-
try {
|
|
34
|
-
if (client.format === "json-mcpservers") {
|
|
35
|
-
const config = parseJsonc(raw);
|
|
36
|
-
if (config?.mcpServers) {
|
|
37
|
-
for (const [key, val] of Object.entries(config.mcpServers)) {
|
|
38
|
-
if (key.startsWith("pare-")) {
|
|
39
|
-
servers.set(key, val);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else if (client.format === "json-vscode") {
|
|
45
|
-
const config = parseJsonc(raw);
|
|
46
|
-
if (config?.servers) {
|
|
47
|
-
for (const [key, val] of Object.entries(config.servers)) {
|
|
48
|
-
if (key.startsWith("pare-")) {
|
|
49
|
-
servers.set(key, { command: val.command, args: val.args });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else if (client.format === "json-zed") {
|
|
55
|
-
const config = parseJsonc(raw);
|
|
56
|
-
if (config?.context_servers) {
|
|
57
|
-
for (const [key, val] of Object.entries(config.context_servers)) {
|
|
58
|
-
if (key.startsWith("pare-")) {
|
|
59
|
-
servers.set(key, { command: val.command, args: val.args });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (client.format === "toml-codex") {
|
|
65
|
-
const config = parseToml(raw);
|
|
66
|
-
if (config?.mcp_servers) {
|
|
67
|
-
for (const [key, val] of Object.entries(config.mcp_servers)) {
|
|
68
|
-
if (key.startsWith("pare-")) {
|
|
69
|
-
servers.set(key, val);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else if (client.format === "yaml-continue") {
|
|
75
|
-
const config = YAML.parse(raw);
|
|
76
|
-
if (config?.mcpServers) {
|
|
77
|
-
for (const entry of config.mcpServers) {
|
|
78
|
-
if (entry.name.startsWith("pare-")) {
|
|
79
|
-
servers.set(entry.name, { command: entry.command, args: entry.args });
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
console.warn(`Warning: Could not parse ${configPath}`);
|
|
87
|
-
}
|
|
88
|
-
return servers;
|
|
89
|
-
}
|
|
90
23
|
async function main() {
|
|
91
24
|
const args = parseDoctorArgs(process.argv.slice(2));
|
|
92
25
|
if (args.help) {
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":";AACA,+BAA+B;AAE/B,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,7 @@ async function main() {
|
|
|
43
43
|
client = await promptClient();
|
|
44
44
|
}
|
|
45
45
|
// 2. Resolve servers
|
|
46
|
+
const projectDir = process.cwd();
|
|
46
47
|
let servers;
|
|
47
48
|
if (args.preset) {
|
|
48
49
|
const preset = PRESET_MAP.get(args.preset);
|
|
@@ -54,10 +55,9 @@ async function main() {
|
|
|
54
55
|
servers = resolveServers(preset.serverIds);
|
|
55
56
|
}
|
|
56
57
|
else {
|
|
57
|
-
servers = await promptServers();
|
|
58
|
+
servers = await promptServers(projectDir);
|
|
58
59
|
}
|
|
59
60
|
// 3. Merge config
|
|
60
|
-
const projectDir = process.cwd();
|
|
61
61
|
const fs = args.dryRun ? memoryFs() : realFs();
|
|
62
62
|
const result = mergeConfig(client, servers, projectDir, fs);
|
|
63
63
|
// 4. Print summary
|
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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"}
|
package/dist/lib/detect.d.ts
CHANGED
|
@@ -4,4 +4,20 @@ import { type ClientEntry } from "./clients.js";
|
|
|
4
4
|
* known config directories/files on the filesystem.
|
|
5
5
|
*/
|
|
6
6
|
export declare function detectClients(): ClientEntry[];
|
|
7
|
+
/** Ecosystem identifier detected from marker files. */
|
|
8
|
+
export type Ecosystem = "python" | "rust" | "go" | "web" | "devops" | "make" | "jvm" | "dotnet" | "ruby" | "swift";
|
|
9
|
+
/** Result of project type auto-detection. */
|
|
10
|
+
export interface DetectionResult {
|
|
11
|
+
/** All detected ecosystems. */
|
|
12
|
+
ecosystems: Ecosystem[];
|
|
13
|
+
/** Suggested preset ID, or undefined if nothing detected. */
|
|
14
|
+
suggestedPreset: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Auto-detect the project type by scanning for marker files in the given directory.
|
|
18
|
+
*
|
|
19
|
+
* @param projectDir - The directory to scan (defaults to cwd).
|
|
20
|
+
* @param checkExists - Override for testing (defaults to `existsSync`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectProjectType(projectDir?: string, checkExists?: (path: string) => boolean): DetectionResult;
|
|
7
23
|
//# sourceMappingURL=detect.d.ts.map
|
package/dist/lib/detect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D;;;GAGG;AACH,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAE7C;AAED,uDAAuD;AACvD,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,IAAI,GACJ,KAAK,GACL,QAAQ,GACR,MAAM,GACN,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AA4CZ,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAmCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,GAAE,MAAsB,EAClC,WAAW,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAClD,eAAe,CA6BjB"}
|
package/dist/lib/detect.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
2
3
|
import { getClients } from "./clients.js";
|
|
3
4
|
/**
|
|
4
5
|
* Auto-detect installed AI coding clients by checking for
|
|
@@ -7,4 +8,110 @@ import { getClients } from "./clients.js";
|
|
|
7
8
|
export function detectClients() {
|
|
8
9
|
return getClients().filter((client) => client.detectPaths.some((p) => existsSync(p)));
|
|
9
10
|
}
|
|
11
|
+
/** Marker files/directories that indicate a particular ecosystem. */
|
|
12
|
+
const ECOSYSTEM_MARKERS = {
|
|
13
|
+
python: [
|
|
14
|
+
"pyproject.toml",
|
|
15
|
+
"setup.py",
|
|
16
|
+
"setup.cfg",
|
|
17
|
+
"requirements.txt",
|
|
18
|
+
"Pipfile",
|
|
19
|
+
"poetry.lock",
|
|
20
|
+
"uv.lock",
|
|
21
|
+
],
|
|
22
|
+
rust: ["Cargo.toml", "Cargo.lock"],
|
|
23
|
+
go: ["go.mod", "go.sum"],
|
|
24
|
+
web: [
|
|
25
|
+
"package.json",
|
|
26
|
+
"tsconfig.json",
|
|
27
|
+
"next.config.js",
|
|
28
|
+
"next.config.mjs",
|
|
29
|
+
"next.config.ts",
|
|
30
|
+
"vite.config.js",
|
|
31
|
+
"vite.config.ts",
|
|
32
|
+
"vite.config.mjs",
|
|
33
|
+
"webpack.config.js",
|
|
34
|
+
"webpack.config.ts",
|
|
35
|
+
"webpack.config.mjs",
|
|
36
|
+
],
|
|
37
|
+
devops: [
|
|
38
|
+
"Dockerfile",
|
|
39
|
+
"docker-compose.yml",
|
|
40
|
+
"docker-compose.yaml",
|
|
41
|
+
".docker",
|
|
42
|
+
"k8s",
|
|
43
|
+
"kubernetes",
|
|
44
|
+
"helm",
|
|
45
|
+
],
|
|
46
|
+
make: ["Makefile", "justfile"],
|
|
47
|
+
jvm: ["build.gradle", "build.gradle.kts", "pom.xml", "gradlew"],
|
|
48
|
+
dotnet: ["*.csproj", "*.sln", "*.fsproj", "global.json"],
|
|
49
|
+
ruby: ["Gemfile", "Rakefile", ".ruby-version"],
|
|
50
|
+
swift: ["Package.swift", "*.xcodeproj", "*.xcworkspace"],
|
|
51
|
+
};
|
|
52
|
+
/** Map from single ecosystem to preset ID. */
|
|
53
|
+
const ECOSYSTEM_TO_PRESET = {
|
|
54
|
+
python: "python",
|
|
55
|
+
rust: "rust",
|
|
56
|
+
go: "go",
|
|
57
|
+
web: "web",
|
|
58
|
+
devops: "devops",
|
|
59
|
+
make: "web", // make is common in web projects; no standalone make preset
|
|
60
|
+
jvm: "jvm",
|
|
61
|
+
dotnet: "dotnet",
|
|
62
|
+
ruby: "ruby",
|
|
63
|
+
swift: "swift",
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Check whether a marker exists in the given directory.
|
|
67
|
+
* Supports exact names and simple glob patterns with leading `*` (e.g. `*.csproj`).
|
|
68
|
+
*/
|
|
69
|
+
function markerExists(dir, marker, checkExists) {
|
|
70
|
+
if (!marker.includes("*")) {
|
|
71
|
+
return checkExists(join(dir, marker));
|
|
72
|
+
}
|
|
73
|
+
// For glob patterns like *.csproj, do a simple directory listing check.
|
|
74
|
+
try {
|
|
75
|
+
const ext = marker.replace("*", "");
|
|
76
|
+
const entries = readdirSync(dir);
|
|
77
|
+
return entries.some((e) => e.endsWith(ext));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Auto-detect the project type by scanning for marker files in the given directory.
|
|
85
|
+
*
|
|
86
|
+
* @param projectDir - The directory to scan (defaults to cwd).
|
|
87
|
+
* @param checkExists - Override for testing (defaults to `existsSync`).
|
|
88
|
+
*/
|
|
89
|
+
export function detectProjectType(projectDir = process.cwd(), checkExists = existsSync) {
|
|
90
|
+
const detected = [];
|
|
91
|
+
for (const [ecosystem, markers] of Object.entries(ECOSYSTEM_MARKERS)) {
|
|
92
|
+
if (markers.some((m) => markerExists(projectDir, m, checkExists))) {
|
|
93
|
+
detected.push(ecosystem);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
let suggestedPreset;
|
|
97
|
+
if (detected.length === 0) {
|
|
98
|
+
suggestedPreset = undefined;
|
|
99
|
+
}
|
|
100
|
+
else if (detected.length === 1) {
|
|
101
|
+
suggestedPreset = ECOSYSTEM_TO_PRESET[detected[0]];
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Multiple ecosystems: if one primary language + devops/make, use the language preset.
|
|
105
|
+
// Otherwise suggest "full".
|
|
106
|
+
const auxiliary = new Set(["devops", "make"]);
|
|
107
|
+
const primary = detected.filter((e) => !auxiliary.has(e));
|
|
108
|
+
if (primary.length === 1) {
|
|
109
|
+
suggestedPreset = ECOSYSTEM_TO_PRESET[primary[0]];
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
suggestedPreset = "full";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { ecosystems: detected, suggestedPreset };
|
|
116
|
+
}
|
|
10
117
|
//# sourceMappingURL=detect.js.map
|
package/dist/lib/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ClientEntry } from "./clients.js";
|
|
2
|
+
export interface ServerConfig {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
}
|
|
6
|
+
/** Extract Pare server entries from a client's config file. */
|
|
7
|
+
export declare function extractPareServers(client: ClientEntry, projectDir: string): Map<string, ServerConfig>;
|
|
8
|
+
//# sourceMappingURL=extract-servers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-servers.d.ts","sourceRoot":"","sources":["../../src/lib/extract-servers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAqE3B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { parse as parseToml } from "smol-toml";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
import { resolveConfigPath } from "./clients.js";
|
|
5
|
+
import { parseJsonc } from "./parse-utils.js";
|
|
6
|
+
/** Extract Pare server entries from a client's config file. */
|
|
7
|
+
export function extractPareServers(client, projectDir) {
|
|
8
|
+
const configPath = resolveConfigPath(client.configPath, projectDir);
|
|
9
|
+
if (!existsSync(configPath)) {
|
|
10
|
+
return new Map();
|
|
11
|
+
}
|
|
12
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
13
|
+
const servers = new Map();
|
|
14
|
+
try {
|
|
15
|
+
if (client.format === "json-mcpservers") {
|
|
16
|
+
const config = parseJsonc(raw);
|
|
17
|
+
if (config?.mcpServers) {
|
|
18
|
+
for (const [key, val] of Object.entries(config.mcpServers)) {
|
|
19
|
+
if (key.startsWith("pare-")) {
|
|
20
|
+
servers.set(key, val);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else if (client.format === "json-vscode") {
|
|
26
|
+
const config = parseJsonc(raw);
|
|
27
|
+
if (config?.servers) {
|
|
28
|
+
for (const [key, val] of Object.entries(config.servers)) {
|
|
29
|
+
if (key.startsWith("pare-")) {
|
|
30
|
+
servers.set(key, { command: val.command, args: val.args });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (client.format === "json-zed") {
|
|
36
|
+
const config = parseJsonc(raw);
|
|
37
|
+
if (config?.context_servers) {
|
|
38
|
+
for (const [key, val] of Object.entries(config.context_servers)) {
|
|
39
|
+
if (key.startsWith("pare-")) {
|
|
40
|
+
servers.set(key, { command: val.command, args: val.args });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (client.format === "toml-codex") {
|
|
46
|
+
const config = parseToml(raw);
|
|
47
|
+
if (config?.mcp_servers) {
|
|
48
|
+
for (const [key, val] of Object.entries(config.mcp_servers)) {
|
|
49
|
+
if (key.startsWith("pare-")) {
|
|
50
|
+
servers.set(key, val);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (client.format === "yaml-continue") {
|
|
56
|
+
const config = YAML.parse(raw);
|
|
57
|
+
if (config?.mcpServers) {
|
|
58
|
+
for (const entry of config.mcpServers) {
|
|
59
|
+
if (entry.name.startsWith("pare-")) {
|
|
60
|
+
servers.set(entry.name, { command: entry.command, args: entry.args });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Silently ignore parse errors — caller handles empty result
|
|
68
|
+
}
|
|
69
|
+
return servers;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=extract-servers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-servers.js","sourceRoot":"","sources":["../../src/lib/extract-servers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/prompts.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ import { type ServerEntry } from "./servers.js";
|
|
|
3
3
|
/** Prompt user to select a target client. Pre-selects detected ones. */
|
|
4
4
|
export declare function promptClient(): Promise<ClientEntry>;
|
|
5
5
|
/** Prompt user to select a preset or custom server set. */
|
|
6
|
-
export declare function promptServers(): Promise<ServerEntry[]>;
|
|
6
|
+
export declare function promptServers(projectDir?: string): Promise<ServerEntry[]>;
|
|
7
7
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGzD,wEAAwE;AACxE,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBzD;AAED,2DAA2D;AAC3D,wBAAsB,aAAa,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGzD,wEAAwE;AACxE,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBzD;AAED,2DAA2D;AAC3D,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgD/E"}
|
package/dist/lib/prompts.js
CHANGED
|
@@ -2,7 +2,7 @@ import { select, checkbox } from "@inquirer/prompts";
|
|
|
2
2
|
import { getClients } from "./clients.js";
|
|
3
3
|
import { PRESETS } from "./presets.js";
|
|
4
4
|
import { SERVERS } from "./servers.js";
|
|
5
|
-
import { detectClients } from "./detect.js";
|
|
5
|
+
import { detectClients, detectProjectType } from "./detect.js";
|
|
6
6
|
/** Prompt user to select a target client. Pre-selects detected ones. */
|
|
7
7
|
export async function promptClient() {
|
|
8
8
|
const detected = detectClients();
|
|
@@ -22,16 +22,26 @@ export async function promptClient() {
|
|
|
22
22
|
return allClients.find((c) => c.id === clientId);
|
|
23
23
|
}
|
|
24
24
|
/** Prompt user to select a preset or custom server set. */
|
|
25
|
-
export async function promptServers() {
|
|
25
|
+
export async function promptServers(projectDir) {
|
|
26
|
+
const detection = detectProjectType(projectDir);
|
|
27
|
+
if (detection.suggestedPreset && detection.ecosystems.length > 0) {
|
|
28
|
+
const presetLabel = PRESETS.find((p) => p.id === detection.suggestedPreset)?.label ?? detection.suggestedPreset;
|
|
29
|
+
const ecosystemNames = detection.ecosystems.join(", ");
|
|
30
|
+
// eslint-disable-next-line no-console
|
|
31
|
+
console.log(`Detected: ${ecosystemNames} project. Suggested preset: ${presetLabel}`);
|
|
32
|
+
}
|
|
33
|
+
const defaultPreset = detection.suggestedPreset ?? "web";
|
|
26
34
|
const presetChoices = PRESETS.map((p) => ({
|
|
27
|
-
name:
|
|
35
|
+
name: p.id === detection.suggestedPreset
|
|
36
|
+
? `${p.label} — ${p.description} (detected)`
|
|
37
|
+
: `${p.label} — ${p.description}`,
|
|
28
38
|
value: p.id,
|
|
29
39
|
}));
|
|
30
40
|
presetChoices.push({ name: "Custom — pick individual servers", value: "custom" });
|
|
31
41
|
const selection = await select({
|
|
32
42
|
message: "Which servers do you want to install?",
|
|
33
43
|
choices: presetChoices,
|
|
34
|
-
default:
|
|
44
|
+
default: defaultPreset,
|
|
35
45
|
});
|
|
36
46
|
if (selection === "custom") {
|
|
37
47
|
const serverIds = await checkbox({
|
package/dist/lib/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paretools/init",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Setup CLI and health check for Pare MCP servers — auto-detect clients, install servers, verify connections",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -50,15 +50,15 @@
|
|
|
50
50
|
"dist"
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@inquirer/prompts": "^8.3.
|
|
53
|
+
"@inquirer/prompts": "^8.3.2",
|
|
54
54
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
55
|
-
"smol-toml": "^1.
|
|
56
|
-
"yaml": "^2.
|
|
55
|
+
"smol-toml": "^1.6.1",
|
|
56
|
+
"yaml": "^2.8.3"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@types/node": "^25.4.0",
|
|
60
60
|
"typescript": "^5.7.0",
|
|
61
|
-
"vitest": "^4.
|
|
61
|
+
"vitest": "^4.1.1",
|
|
62
62
|
"@paretools/tsconfig": "0.0.0"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|