@xdevops/issue-auto-finish 1.0.4 → 1.0.5
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/{chunk-VFQYIC6L.js → chunk-F4IB7IRT.js} +2 -2
- package/dist/{chunk-PTIL5AY2.js → chunk-F7AYCERS.js} +2 -2
- package/dist/{chunk-PECYMYAK.js → chunk-XJYGHL6J.js} +12 -2
- package/dist/chunk-XJYGHL6J.js.map +1 -0
- package/dist/cli/setup/DependencyChecker.d.ts.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/{doctor-ZPGIBA5N.js → doctor-EOYNPACK.js} +2 -2
- package/dist/index.js +3 -3
- package/dist/{init-QDTII4SP.js → init-KF5OGQ3B.js} +3 -3
- package/dist/run.js +3 -3
- package/dist/{start-EDOZC5WL.js → start-3XVP2TAP.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-PECYMYAK.js.map +0 -1
- /package/dist/{chunk-VFQYIC6L.js.map → chunk-F4IB7IRT.js.map} +0 -0
- /package/dist/{chunk-PTIL5AY2.js.map → chunk-F7AYCERS.js.map} +0 -0
- /package/dist/{doctor-ZPGIBA5N.js.map → doctor-EOYNPACK.js.map} +0 -0
- /package/dist/{init-QDTII4SP.js.map → init-KF5OGQ3B.js.map} +0 -0
- /package/dist/{start-EDOZC5WL.js.map → start-3XVP2TAP.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSetupRouter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-F7AYCERS.js";
|
|
4
4
|
import {
|
|
5
5
|
BrainstormService,
|
|
6
6
|
CLASSIC_PIPELINE,
|
|
@@ -3063,4 +3063,4 @@ async function main() {
|
|
|
3063
3063
|
export {
|
|
3064
3064
|
main
|
|
3065
3065
|
};
|
|
3066
|
-
//# sourceMappingURL=chunk-
|
|
3066
|
+
//# sourceMappingURL=chunk-F4IB7IRT.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-HCHEFK4Z.js";
|
|
4
4
|
import {
|
|
5
5
|
DependencyChecker
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XJYGHL6J.js";
|
|
7
7
|
import {
|
|
8
8
|
getProjectKnowledge
|
|
9
9
|
} from "./chunk-3JUHZGX5.js";
|
|
@@ -213,4 +213,4 @@ function createSetupRouter(deps = {}) {
|
|
|
213
213
|
export {
|
|
214
214
|
createSetupRouter
|
|
215
215
|
};
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-F7AYCERS.js.map
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
|
|
5
5
|
// src/cli/setup/DependencyChecker.ts
|
|
6
6
|
import { spawn } from "child_process";
|
|
7
|
+
import { homedir } from "os";
|
|
8
|
+
import { join } from "path";
|
|
7
9
|
async function which(binary) {
|
|
8
10
|
return new Promise((resolve) => {
|
|
9
11
|
const proc = spawn("which", [binary], { stdio: ["ignore", "pipe", "ignore"] });
|
|
@@ -53,13 +55,15 @@ var DependencyChecker = class {
|
|
|
53
55
|
}
|
|
54
56
|
async checkVolta() {
|
|
55
57
|
const version = await getVersion("volta");
|
|
58
|
+
const cmd = "curl https://get.volta.sh | bash";
|
|
56
59
|
return {
|
|
57
60
|
name: "volta",
|
|
58
61
|
displayName: "Volta",
|
|
59
62
|
required: true,
|
|
60
63
|
installed: version !== null,
|
|
61
64
|
version: version ?? void 0,
|
|
62
|
-
|
|
65
|
+
installCommand: cmd,
|
|
66
|
+
installHint: cmd
|
|
63
67
|
};
|
|
64
68
|
}
|
|
65
69
|
async checkNode() {
|
|
@@ -167,6 +171,12 @@ var DependencyChecker = class {
|
|
|
167
171
|
proc.on("close", (code) => resolve(code ?? 1));
|
|
168
172
|
});
|
|
169
173
|
if (exitCode === 0) {
|
|
174
|
+
if (name === "volta") {
|
|
175
|
+
const voltaBin = join(homedir(), ".volta", "bin");
|
|
176
|
+
if (!process.env.PATH?.includes(voltaBin)) {
|
|
177
|
+
process.env.PATH = `${voltaBin}:${process.env.PATH}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
170
180
|
yield t("cli.installSuccess", { name: dep.displayName });
|
|
171
181
|
} else {
|
|
172
182
|
yield t("cli.installFailed", { name: dep.displayName, code: exitCode });
|
|
@@ -177,4 +187,4 @@ var DependencyChecker = class {
|
|
|
177
187
|
export {
|
|
178
188
|
DependencyChecker
|
|
179
189
|
};
|
|
180
|
-
//# sourceMappingURL=chunk-
|
|
190
|
+
//# sourceMappingURL=chunk-XJYGHL6J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/setup/DependencyChecker.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { t } from '../../i18n/index.js';\n\nexport interface DepCheckResult {\n name: string;\n displayName: string;\n required: boolean;\n installed: boolean;\n version?: string;\n installCommand?: string;\n installHint?: string;\n}\n\nasync function which(binary: string): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn('which', [binary], { stdio: ['ignore', 'pipe', 'ignore'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => resolve(code === 0 ? out.trim() : null));\n proc.on('error', () => resolve(null));\n });\n}\n\nasync function getVersion(binary: string, args: string[] = ['--version']): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.stderr.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => {\n if (code === 0 && out.trim()) {\n const match = out.trim().match(/[\\d]+\\.[\\d]+[\\d.a-z-]*/);\n resolve(match ? match[0] : out.trim().split('\\n')[0]);\n } else {\n resolve(null);\n }\n });\n proc.on('error', () => resolve(null));\n });\n}\n\nexport class DependencyChecker {\n async checkAll(aiMode?: string): Promise<DepCheckResult[]> {\n const isCodebuddy = aiMode === 'codebuddy';\n const isCursor = aiMode === 'cursor-agent';\n const results = await Promise.all([\n this.checkVolta(),\n this.checkNode(),\n this.checkGit(),\n this.checkPnpm(),\n this.checkClaudeInternal(!isCursor && !isCodebuddy),\n this.checkCursor(isCursor),\n this.checkCodebuddy(isCodebuddy),\n ]);\n return results;\n }\n\n async checkVolta(): Promise<DepCheckResult> {\n const version = await getVersion('volta');\n const cmd = 'curl https://get.volta.sh | bash';\n return {\n name: 'volta',\n displayName: 'Volta',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n };\n }\n\n async checkNode(): Promise<DepCheckResult> {\n const version = await getVersion('node');\n return {\n name: 'node',\n displayName: 'Node.js (>= 20)',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installHint: t('cli.nodeInstallHint'),\n };\n }\n\n async checkGit(): Promise<DepCheckResult> {\n const version = await getVersion('git');\n return {\n name: 'git',\n displayName: 'Git',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installHint: 'sudo apt install git / brew install git',\n };\n }\n\n async checkPnpm(): Promise<DepCheckResult> {\n const version = await getVersion('pnpm');\n return {\n name: 'pnpm',\n displayName: 'pnpm (>= 9)',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installCommand: 'volta install pnpm@9',\n installHint: 'volta install pnpm@9',\n };\n }\n\n async checkClaudeInternal(required: boolean): Promise<DepCheckResult> {\n const path = await which('claude-internal');\n const version = path ? await getVersion('claude-internal') : null;\n const cmd = 'npm install -g claude-code-internal';\n return {\n name: 'claude-internal',\n displayName: 'Claude Internal CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n };\n }\n\n async checkCursor(required: boolean): Promise<DepCheckResult> {\n const path = await which('cursor');\n const version = path ? await getVersion('cursor') : null;\n return {\n name: 'cursor',\n displayName: 'Cursor Agent CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installHint: t('cli.cursorInstallHint'),\n };\n }\n\n async checkCodebuddy(required: boolean): Promise<DepCheckResult> {\n const path = await which('codebuddy');\n const version = path ? await getVersion('codebuddy') : null;\n const cmd = 'npm install -g codebuddy-code';\n return {\n name: 'codebuddy',\n displayName: 'CodeBuddy CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n };\n }\n\n async *install(name: string): AsyncGenerator<string> {\n const checks = await this.checkAll();\n const dep = checks.find((d) => d.name === name);\n if (!dep) {\n yield t('cli.unknownDep', { name });\n return;\n }\n if (dep.installed) {\n yield t('cli.alreadyInstalled', { name: dep.displayName, version: dep.version ?? '' });\n return;\n }\n if (!dep.installCommand) {\n yield t('cli.manualInstall', { name: dep.displayName, hint: dep.installHint ?? '' });\n return;\n }\n\n yield t('cli.installing', { name: dep.displayName });\n yield `$ ${dep.installCommand}`;\n\n const proc = spawn(dep.installCommand, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n for await (const chunk of proc.stdout) {\n yield chunk.toString();\n }\n for await (const chunk of proc.stderr) {\n yield chunk.toString();\n }\n\n const exitCode = await new Promise<number>((resolve) => {\n proc.on('close', (code) => resolve(code ?? 1));\n });\n\n if (exitCode === 0) {\n if (name === 'volta') {\n const voltaBin = join(homedir(), '.volta', 'bin');\n if (!process.env.PATH?.includes(voltaBin)) {\n process.env.PATH = `${voltaBin}:${process.env.PATH}`;\n }\n }\n yield t('cli.installSuccess', { name: dep.displayName });\n } else {\n yield t('cli.installFailed', { name: dep.displayName, code: exitCode });\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/DependencyChecker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/DependencyChecker.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8BD,qBAAa,iBAAiB;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAepD,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAcrC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAYpC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAYnC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAapC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAe/D,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAezD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;CA+CrD"}
|
package/dist/cli.js
CHANGED
|
@@ -23,15 +23,15 @@ var pkg = JSON.parse(readFileSync(findPackageJson(), "utf-8"));
|
|
|
23
23
|
var program = new Command();
|
|
24
24
|
program.name("issue-auto-finish").description("Issue Auto-Finish: AI-powered issue resolution daemon").version(pkg.version);
|
|
25
25
|
program.command("init").description("Launch the interactive web setup wizard").option("-p, --port <port>", "Port for the setup wizard", "3456").option("-c, --config <path>", "Config file path to generate").action(async (opts) => {
|
|
26
|
-
const { initCommand } = await import("./init-
|
|
26
|
+
const { initCommand } = await import("./init-KF5OGQ3B.js");
|
|
27
27
|
await initCommand({ port: parseInt(opts.port, 10), config: opts.config });
|
|
28
28
|
});
|
|
29
29
|
program.command("start").description("Start the issue-auto-finish daemon service").option("-c, --config <path>", "Path to .env config file").action(async (opts) => {
|
|
30
|
-
const { startCommand } = await import("./start-
|
|
30
|
+
const { startCommand } = await import("./start-3XVP2TAP.js");
|
|
31
31
|
await startCommand({ config: opts.config });
|
|
32
32
|
});
|
|
33
33
|
program.command("doctor").description("Check environment dependencies").action(async () => {
|
|
34
|
-
const { doctorCommand } = await import("./doctor-
|
|
34
|
+
const { doctorCommand } = await import("./doctor-EOYNPACK.js");
|
|
35
35
|
await doctorCommand();
|
|
36
36
|
});
|
|
37
37
|
program.command("analyze").description("Analyze target repository and generate knowledge.json").option("-d, --dir <path>", "Project directory to analyze (defaults to PROJECT_WORK_DIR)").option("-o, --output <path>", "Output path for knowledge.json").option("-f, --force", "Overwrite existing knowledge.json").action(async (opts) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DependencyChecker
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XJYGHL6J.js";
|
|
4
4
|
import "./chunk-JFYAXNNS.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/commands/doctor.ts
|
|
@@ -30,4 +30,4 @@ async function doctorCommand() {
|
|
|
30
30
|
export {
|
|
31
31
|
doctorCommand
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=doctor-
|
|
33
|
+
//# sourceMappingURL=doctor-EOYNPACK.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
main
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-F4IB7IRT.js";
|
|
4
|
+
import "./chunk-F7AYCERS.js";
|
|
5
5
|
import "./chunk-HCHEFK4Z.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-XJYGHL6J.js";
|
|
7
7
|
import "./chunk-N5YK6YVI.js";
|
|
8
8
|
import "./chunk-3JUHZGX5.js";
|
|
9
9
|
import "./chunk-JFYAXNNS.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSetupRouter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-F7AYCERS.js";
|
|
4
4
|
import "./chunk-HCHEFK4Z.js";
|
|
5
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-XJYGHL6J.js";
|
|
6
6
|
import "./chunk-3JUHZGX5.js";
|
|
7
7
|
import "./chunk-JFYAXNNS.js";
|
|
8
8
|
import "./chunk-5VUB3UUK.js";
|
|
@@ -67,4 +67,4 @@ async function initCommand(options) {
|
|
|
67
67
|
export {
|
|
68
68
|
initCommand
|
|
69
69
|
};
|
|
70
|
-
//# sourceMappingURL=init-
|
|
70
|
+
//# sourceMappingURL=init-KF5OGQ3B.js.map
|
package/dist/run.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
main
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-F4IB7IRT.js";
|
|
4
|
+
import "./chunk-F7AYCERS.js";
|
|
5
5
|
import "./chunk-HCHEFK4Z.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-XJYGHL6J.js";
|
|
7
7
|
import "./chunk-N5YK6YVI.js";
|
|
8
8
|
import "./chunk-3JUHZGX5.js";
|
|
9
9
|
import "./chunk-JFYAXNNS.js";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/setup/DependencyChecker.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { t } from '../../i18n/index.js';\n\nexport interface DepCheckResult {\n name: string;\n displayName: string;\n required: boolean;\n installed: boolean;\n version?: string;\n installCommand?: string;\n installHint?: string;\n}\n\nasync function which(binary: string): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn('which', [binary], { stdio: ['ignore', 'pipe', 'ignore'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => resolve(code === 0 ? out.trim() : null));\n proc.on('error', () => resolve(null));\n });\n}\n\nasync function getVersion(binary: string, args: string[] = ['--version']): Promise<string | null> {\n return new Promise((resolve) => {\n const proc = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });\n let out = '';\n proc.stdout.on('data', (d) => { out += d.toString(); });\n proc.stderr.on('data', (d) => { out += d.toString(); });\n proc.on('close', (code) => {\n if (code === 0 && out.trim()) {\n const match = out.trim().match(/[\\d]+\\.[\\d]+[\\d.a-z-]*/);\n resolve(match ? match[0] : out.trim().split('\\n')[0]);\n } else {\n resolve(null);\n }\n });\n proc.on('error', () => resolve(null));\n });\n}\n\nexport class DependencyChecker {\n async checkAll(aiMode?: string): Promise<DepCheckResult[]> {\n const isCodebuddy = aiMode === 'codebuddy';\n const isCursor = aiMode === 'cursor-agent';\n const results = await Promise.all([\n this.checkVolta(),\n this.checkNode(),\n this.checkGit(),\n this.checkPnpm(),\n this.checkClaudeInternal(!isCursor && !isCodebuddy),\n this.checkCursor(isCursor),\n this.checkCodebuddy(isCodebuddy),\n ]);\n return results;\n }\n\n async checkVolta(): Promise<DepCheckResult> {\n const version = await getVersion('volta');\n return {\n name: 'volta',\n displayName: 'Volta',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installHint: 'curl https://get.volta.sh | bash',\n };\n }\n\n async checkNode(): Promise<DepCheckResult> {\n const version = await getVersion('node');\n return {\n name: 'node',\n displayName: 'Node.js (>= 20)',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installHint: t('cli.nodeInstallHint'),\n };\n }\n\n async checkGit(): Promise<DepCheckResult> {\n const version = await getVersion('git');\n return {\n name: 'git',\n displayName: 'Git',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installHint: 'sudo apt install git / brew install git',\n };\n }\n\n async checkPnpm(): Promise<DepCheckResult> {\n const version = await getVersion('pnpm');\n return {\n name: 'pnpm',\n displayName: 'pnpm (>= 9)',\n required: true,\n installed: version !== null,\n version: version ?? undefined,\n installCommand: 'volta install pnpm@9',\n installHint: 'volta install pnpm@9',\n };\n }\n\n async checkClaudeInternal(required: boolean): Promise<DepCheckResult> {\n const path = await which('claude-internal');\n const version = path ? await getVersion('claude-internal') : null;\n const cmd = 'npm install -g claude-code-internal';\n return {\n name: 'claude-internal',\n displayName: 'Claude Internal CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n };\n }\n\n async checkCursor(required: boolean): Promise<DepCheckResult> {\n const path = await which('cursor');\n const version = path ? await getVersion('cursor') : null;\n return {\n name: 'cursor',\n displayName: 'Cursor Agent CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installHint: t('cli.cursorInstallHint'),\n };\n }\n\n async checkCodebuddy(required: boolean): Promise<DepCheckResult> {\n const path = await which('codebuddy');\n const version = path ? await getVersion('codebuddy') : null;\n const cmd = 'npm install -g codebuddy-code';\n return {\n name: 'codebuddy',\n displayName: 'CodeBuddy CLI',\n required,\n installed: path !== null,\n version: version ?? undefined,\n installCommand: cmd,\n installHint: cmd,\n };\n }\n\n async *install(name: string): AsyncGenerator<string> {\n const checks = await this.checkAll();\n const dep = checks.find((d) => d.name === name);\n if (!dep) {\n yield t('cli.unknownDep', { name });\n return;\n }\n if (dep.installed) {\n yield t('cli.alreadyInstalled', { name: dep.displayName, version: dep.version ?? '' });\n return;\n }\n if (!dep.installCommand) {\n yield t('cli.manualInstall', { name: dep.displayName, hint: dep.installHint ?? '' });\n return;\n }\n\n yield t('cli.installing', { name: dep.displayName });\n yield `$ ${dep.installCommand}`;\n\n const proc = spawn(dep.installCommand, {\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n });\n\n for await (const chunk of proc.stdout) {\n yield chunk.toString();\n }\n for await (const chunk of proc.stderr) {\n yield chunk.toString();\n }\n\n const exitCode = await new Promise<number>((resolve) => {\n proc.on('close', (code) => resolve(code ?? 1));\n });\n\n if (exitCode === 0) {\n yield t('cli.installSuccess', { name: dep.displayName });\n } else {\n yield t('cli.installFailed', { name: dep.displayName, code: exitCode });\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|