@aigne/cli 1.53.1-beta.2 → 1.53.1-beta.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.53.1-beta.3](https://github.com/AIGNE-io/aigne-framework/compare/cli-v1.53.1-beta.2...cli-v1.53.1-beta.3) (2025-11-04)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **cli:** optimize app startup by restructuring CLI application loading ([#698](https://github.com/AIGNE-io/aigne-framework/issues/698)) ([20c5059](https://github.com/AIGNE-io/aigne-framework/commit/20c50591bbd9a958b29409eca3ede5e341db2b7d))
9
+ * update package to latest ([#699](https://github.com/AIGNE-io/aigne-framework/issues/699)) ([9877f6d](https://github.com/AIGNE-io/aigne-framework/commit/9877f6d1975362338db4eb47a2bf3564114c3cf8))
10
+
11
+
12
+ ### Dependencies
13
+
14
+ * The following workspace dependencies were updated
15
+ * dependencies
16
+ * @aigne/afs-system-fs bumped to 1.0.4-beta.3
17
+ * @aigne/agent-library bumped to 1.21.51-beta.2
18
+ * @aigne/agentic-memory bumped to 1.0.51-beta.2
19
+ * @aigne/aigne-hub bumped to 0.10.5-beta.2
20
+ * @aigne/core bumped to 1.65.1-beta.2
21
+ * @aigne/default-memory bumped to 1.2.14-beta.2
22
+ * @aigne/observability-api bumped to 0.11.5-beta.1
23
+ * @aigne/openai bumped to 0.16.5-beta.2
24
+ * devDependencies
25
+ * @aigne/test-utils bumped to 0.5.58-beta.2
26
+
3
27
  ## [1.53.1-beta.2](https://github.com/AIGNE-io/aigne-framework/compare/cli-v1.53.1-beta.1...cli-v1.53.1-beta.2) (2025-11-04)
4
28
 
5
29
 
@@ -0,0 +1,26 @@
1
+ import type { Agent, AIGNE, Message } from "@aigne/core";
2
+ import type { CLIAgent } from "@aigne/core/utils/agent-utils.js";
3
+ import type { CommandModule } from "yargs";
4
+ import { type AgentRunCommonOptions } from "../../utils/yargs.js";
5
+ export declare const serveMcpCommandModule: ({ aigne, name, }: {
6
+ aigne: AIGNE;
7
+ name: string;
8
+ }) => CommandModule<unknown, {
9
+ host: string;
10
+ port?: number;
11
+ pathname: string;
12
+ }>;
13
+ export declare const agentCommandModule: ({ aigne, agent, chat, }: {
14
+ aigne: AIGNE;
15
+ agent: Agent;
16
+ chat?: boolean;
17
+ }) => CommandModule<unknown, AgentRunCommonOptions>;
18
+ export declare const cliAgentCommandModule: ({ aigne, cliAgent, }: {
19
+ aigne: AIGNE;
20
+ cliAgent: CLIAgent<Agent>;
21
+ }) => CommandModule<unknown, AgentRunCommonOptions>;
22
+ export declare function invokeAgent(options: {
23
+ aigne: AIGNE;
24
+ agent: Agent;
25
+ input: Message & AgentRunCommonOptions;
26
+ }): Promise<void>;
@@ -0,0 +1,102 @@
1
+ import assert from "node:assert";
2
+ import { logger } from "@aigne/core/utils/logger.js";
3
+ import { runAgentWithAIGNE } from "../../utils/run-with-aigne.js";
4
+ import { parseAgentInput, withAgentInputSchema, } from "../../utils/yargs.js";
5
+ import { serveMCPServerFromDir } from "../serve-mcp.js";
6
+ export const serveMcpCommandModule = ({ aigne, name, }) => ({
7
+ command: "serve-mcp",
8
+ describe: `Serve ${name} a MCP server (streamable http)`,
9
+ builder: (yargs) => {
10
+ return yargs
11
+ .option("host", {
12
+ describe: "Host to run the MCP server on, use 0.0.0.0 to publicly expose the server",
13
+ type: "string",
14
+ default: "localhost",
15
+ })
16
+ .option("port", {
17
+ describe: "Port to run the MCP server on",
18
+ type: "number",
19
+ })
20
+ .option("pathname", {
21
+ describe: "Pathname to the service",
22
+ type: "string",
23
+ default: "/mcp",
24
+ });
25
+ },
26
+ handler: async (options) => {
27
+ await serveMCPServerFromDir({
28
+ ...options,
29
+ aigne,
30
+ });
31
+ },
32
+ });
33
+ export const agentCommandModule = ({ aigne, agent, chat, }) => {
34
+ return {
35
+ command: agent.name,
36
+ aliases: agent.alias || [],
37
+ describe: agent.description || "",
38
+ builder: async (yargs) => {
39
+ return withAgentInputSchema(yargs, { inputSchema: agent.inputSchema });
40
+ },
41
+ handler: async (options) => {
42
+ if (options.logLevel)
43
+ logger.level = options.logLevel;
44
+ await invokeAgent({
45
+ aigne,
46
+ agent,
47
+ input: { ...options, chat: chat ?? options.chat },
48
+ });
49
+ },
50
+ };
51
+ };
52
+ export const cliAgentCommandModule = ({ aigne, cliAgent, }) => {
53
+ const { agent, agents } = cliAgent;
54
+ const name = cliAgent.name || agent?.name;
55
+ assert(name, "CLI agent must have a name");
56
+ return {
57
+ command: name,
58
+ aliases: cliAgent.alias || agent?.alias || [],
59
+ describe: cliAgent.description || agent?.description || "",
60
+ builder: async (yargs) => {
61
+ if (agent) {
62
+ withAgentInputSchema(yargs, { inputSchema: agent.inputSchema });
63
+ }
64
+ if (agents?.length) {
65
+ for (const cmd of agents) {
66
+ yargs.command(cliAgentCommandModule({
67
+ aigne,
68
+ cliAgent: cmd,
69
+ }));
70
+ }
71
+ }
72
+ if (!agent)
73
+ yargs.demandCommand();
74
+ return yargs;
75
+ },
76
+ handler: async (options) => {
77
+ if (!agent)
78
+ throw new Error("CLI agent is not defined");
79
+ if (options.logLevel)
80
+ logger.level = options.logLevel;
81
+ await invokeAgent({
82
+ aigne,
83
+ agent,
84
+ input: options,
85
+ });
86
+ },
87
+ };
88
+ };
89
+ export async function invokeAgent(options) {
90
+ const { agent, aigne } = options;
91
+ try {
92
+ const input = await parseAgentInput(options.input, agent);
93
+ await runAgentWithAIGNE(aigne, agent, {
94
+ ...options.input,
95
+ input,
96
+ chat: options.input.chat,
97
+ });
98
+ }
99
+ finally {
100
+ await aigne.shutdown();
101
+ }
102
+ }
@@ -0,0 +1,7 @@
1
+ export declare function runAppCLI({ appName, appPackageName, appDescription, appUseBetaVersion, ...options }?: {
2
+ argv?: string[];
3
+ appName?: string;
4
+ appPackageName?: string;
5
+ appDescription?: string;
6
+ appUseBetaVersion?: boolean;
7
+ }): Promise<void>;
@@ -0,0 +1,90 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { LogLevel, logger } from "@aigne/core/utils/logger.js";
4
+ import chalk from "chalk";
5
+ import yargs from "yargs";
6
+ import { hideBin } from "yargs/helpers";
7
+ import { highlightUrl } from "../../utils/string-utils.js";
8
+ import { withRunAgentCommonOptions } from "../../utils/yargs.js";
9
+ import { agentCommandModule, cliAgentCommandModule, serveMcpCommandModule } from "./agent.js";
10
+ import { loadApplication, NeedReinstallBetaError, NeedReinstallError, upgradeCommandModule, } from "./upgrade.js";
11
+ export async function runAppCLI({ appName = process.env.AIGNE_APP_NAME, appPackageName = process.env.AIGNE_APP_PACKAGE_NAME, appDescription = process.env.AIGNE_APP_DESCRIPTION, appUseBetaVersion = process.env.AIGNE_APP_USE_BETA_APPS === "1" ? true : undefined, ...options } = {}) {
12
+ const [scriptName, ...argv] = options.argv || hideBin(process.argv);
13
+ if (!appName || !appPackageName)
14
+ throw new Error("AIGNE_APP_NAME or AIGNE_APP_PACKAGE_NAME is not defined");
15
+ try {
16
+ // Parse model options for loading application
17
+ const options = withRunAgentCommonOptions(yargs(argv).help(false).version(false).strict(false)).parseSync();
18
+ logger.level = options.logLevel;
19
+ const dir = join(homedir(), ".aigne", "registry.npmjs.org", appPackageName);
20
+ const y = yargs()
21
+ .scriptName(`aigne ${scriptName}`)
22
+ .usage(`aigne ${scriptName}\n\n${appDescription || ""}`)
23
+ .command(upgradeCommandModule({ packageName: appPackageName, dir }));
24
+ if (!isUpgradeCommand(argv)) {
25
+ const { aigne, version } = await loadApplication({
26
+ packageName: appPackageName,
27
+ beta: appUseBetaVersion,
28
+ dir,
29
+ install: true,
30
+ modelOptions: options,
31
+ imageModelOptions: { model: options.imageModel },
32
+ skipModelLoading: (options.help || options.h || options.version || options.v) === true,
33
+ });
34
+ if (aigne.cli?.chat) {
35
+ y.command({
36
+ ...agentCommandModule({
37
+ aigne,
38
+ agent: aigne.cli.chat,
39
+ chat: true,
40
+ }),
41
+ command: "$0",
42
+ });
43
+ }
44
+ for (const cliAgent of aigne.cli?.agents ?? []) {
45
+ y.command(cliAgentCommandModule({ aigne, cliAgent }));
46
+ }
47
+ y.option("model", {
48
+ type: "string",
49
+ description: "Model to use for the application, example: openai:gpt-4.1 or google:gemini-2.5-flash",
50
+ }).command(serveMcpCommandModule({ aigne, name: appName }));
51
+ y.version(`${appName} v${version}`);
52
+ }
53
+ await y
54
+ .alias("v", "version")
55
+ .alias("h", "help")
56
+ .demandCommand()
57
+ .fail((message, error, yargs) => {
58
+ // We catch all errors below, here just print the help message non-error case like demandCommand
59
+ if (!error) {
60
+ yargs.showHelp();
61
+ console.error(`\n${message}`);
62
+ process.exit(1);
63
+ }
64
+ })
65
+ .parseAsync(argv);
66
+ process.exit(0);
67
+ }
68
+ catch (error) {
69
+ if (error instanceof NeedReinstallError || error instanceof NeedReinstallBetaError) {
70
+ logger.warn(error.message);
71
+ process.exit(error instanceof NeedReinstallBetaError
72
+ ? NeedReinstallBetaError.code
73
+ : NeedReinstallError.code);
74
+ }
75
+ if (error.name !== "ExitPromptError") {
76
+ console.log(""); // Add an empty line for better readability
77
+ if (logger.enabled(LogLevel.ERROR)) {
78
+ console.error(chalk.red(error.stack));
79
+ }
80
+ else {
81
+ console.error(`${chalk.red("Error:")} ${highlightUrl(error.message)}`);
82
+ }
83
+ }
84
+ process.exit(1);
85
+ }
86
+ }
87
+ function isUpgradeCommand(argv) {
88
+ const skipGlobalOptions = ["-v", "--version", "-h", "--help"];
89
+ return argv[0] === "upgrade" && !argv.some((arg) => skipGlobalOptions.includes(arg));
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { runAppCLI } from "./app.js";
2
+ await runAppCLI();
@@ -0,0 +1,54 @@
1
+ import type { LoadCredentialOptions } from "@aigne/cli/utils/aigne-hub/type.js";
2
+ import type { AIGNE, ChatModelInputOptions, ImageModelInputOptions } from "@aigne/core";
3
+ import type { CommandModule } from "yargs";
4
+ export declare const upgradeCommandModule: ({ packageName, dir, }: {
5
+ packageName: string;
6
+ dir: string;
7
+ }) => CommandModule<unknown, {
8
+ beta?: boolean;
9
+ targetVersion?: string;
10
+ force?: boolean;
11
+ }>;
12
+ interface LoadApplicationOptions {
13
+ packageName: string;
14
+ dir: string;
15
+ install?: boolean;
16
+ skipModelLoading?: boolean;
17
+ modelOptions?: ChatModelInputOptions & LoadCredentialOptions;
18
+ imageModelOptions?: ImageModelInputOptions & LoadCredentialOptions;
19
+ beta?: boolean;
20
+ }
21
+ interface LoadApplicationResult {
22
+ aigne: AIGNE;
23
+ version: string;
24
+ isCache?: boolean;
25
+ }
26
+ export declare class NeedReinstallError extends Error {
27
+ static code: number;
28
+ }
29
+ export declare class NeedReinstallBetaError extends Error {
30
+ static code: number;
31
+ }
32
+ export declare function loadApplication(options: LoadApplicationOptions & {
33
+ install: true;
34
+ }): Promise<LoadApplicationResult>;
35
+ export declare function loadApplication(options: LoadApplicationOptions & {
36
+ install?: false;
37
+ }): Promise<LoadApplicationResult | null>;
38
+ export declare function getNpmTgzInfo(name: string, { version, beta }?: {
39
+ version?: string;
40
+ beta?: boolean;
41
+ }): Promise<{
42
+ version: string;
43
+ url: string;
44
+ }>;
45
+ export declare function installApp({ dir, packageName, beta, version, }: {
46
+ dir: string;
47
+ packageName: string;
48
+ beta?: boolean;
49
+ version?: string;
50
+ }): Promise<{
51
+ url: string;
52
+ version: string;
53
+ }>;
54
+ export {};
@@ -0,0 +1,234 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { fetch } from "@aigne/core/utils/fetch.js";
5
+ import { Listr, PRESET_TIMER } from "@aigne/listr2";
6
+ import { joinURL } from "ufo";
7
+ import { downloadAndExtract } from "../../utils/download.js";
8
+ import { loadAIGNE } from "../../utils/load-aigne.js";
9
+ import { withSpinner } from "../../utils/spinner.js";
10
+ const NPM_PACKAGE_CACHE_TIME_MS = 1000 * 60 * 60 * 24; // 1 day
11
+ /**
12
+ * Check if beta applications should be used based on environment variables
13
+ */
14
+ function shouldUseBetaApps() {
15
+ const envVar = process.env.AIGNE_USE_BETA_APPS;
16
+ return envVar === "true" || envVar === "1";
17
+ }
18
+ export const upgradeCommandModule = ({ packageName, dir, }) => ({
19
+ command: "upgrade",
20
+ describe: `Upgrade ${packageName} to the latest version`,
21
+ builder: (yargs) => {
22
+ return yargs
23
+ .option("beta", {
24
+ type: "boolean",
25
+ describe: "Use beta versions if available",
26
+ })
27
+ .option("target-version", {
28
+ type: "string",
29
+ describe: "Specify a version to upgrade to (default is latest)",
30
+ alias: ["to", "target"],
31
+ })
32
+ .option("force", {
33
+ type: "boolean",
34
+ describe: "Force upgrade even if already at latest version",
35
+ default: false,
36
+ });
37
+ },
38
+ handler: async ({ beta, targetVersion, force }) => {
39
+ beta ??= shouldUseBetaApps();
40
+ const npm = await withSpinner("", async () => {
41
+ if (force)
42
+ await rm(dir, { force: true, recursive: true });
43
+ return await getNpmTgzInfo(packageName, { beta, version: targetVersion });
44
+ });
45
+ const check = await checkInstallation(dir);
46
+ if (force || !check || npm.version !== check.version) {
47
+ await installApp({ packageName, dir, beta, version: targetVersion });
48
+ }
49
+ const app = await loadApplication({ dir, packageName, install: true, skipModelLoading: true });
50
+ if (force || check?.version !== app.version) {
51
+ console.log(`\n✅ Upgraded ${packageName} to version ${app.version}`);
52
+ }
53
+ else {
54
+ console.log(`\n✅ ${packageName} is already at the latest version (${app.version})`);
55
+ }
56
+ },
57
+ });
58
+ export class NeedReinstallError extends Error {
59
+ static code = 244;
60
+ }
61
+ export class NeedReinstallBetaError extends Error {
62
+ static code = 245;
63
+ }
64
+ export async function loadApplication(options) {
65
+ const { dir, packageName } = options;
66
+ const check = await checkInstallation(dir);
67
+ const beta = options.beta ?? check?.version?.includes("beta");
68
+ if (check) {
69
+ let needUpdate = check.expired;
70
+ if (check.expired) {
71
+ await withSpinner("Checking updates...", async () => {
72
+ const tgz = await getNpmTgzInfo(packageName, { beta });
73
+ if (tgz.version === check.version) {
74
+ await writeInstallationMetadata(dir, { installedAt: Date.now() });
75
+ needUpdate = false;
76
+ }
77
+ });
78
+ }
79
+ if (!needUpdate) {
80
+ const aigne = await loadAIGNE({
81
+ path: dir,
82
+ skipModelLoading: options.skipModelLoading,
83
+ modelOptions: options.modelOptions,
84
+ imageModelOptions: options.imageModelOptions,
85
+ metadata: {
86
+ appName: packageName,
87
+ appVersion: check?.version,
88
+ },
89
+ }).catch(async (error) => {
90
+ await withSpinner("", async () => {
91
+ await rm(options.dir, { recursive: true, force: true });
92
+ await mkdir(options.dir, { recursive: true });
93
+ });
94
+ const message = `⚠️ Failed to load ${packageName}, trying to reinstall: ${error.message}`;
95
+ throw beta ? new NeedReinstallBetaError(message) : new NeedReinstallError(message);
96
+ });
97
+ if (aigne) {
98
+ return { aigne, version: check.version, isCache: true };
99
+ }
100
+ }
101
+ }
102
+ if (!options.install)
103
+ return null;
104
+ const result = await installApp({ dir, packageName, beta });
105
+ return {
106
+ aigne: await loadAIGNE({
107
+ path: dir,
108
+ skipModelLoading: true,
109
+ metadata: {
110
+ appName: packageName,
111
+ appVersion: result.version,
112
+ },
113
+ }),
114
+ version: result.version,
115
+ };
116
+ }
117
+ export async function getNpmTgzInfo(name, { version, beta } = {}) {
118
+ const res = await fetch(joinURL("https://registry.npmjs.org", name));
119
+ const data = await res.json();
120
+ let targetVersion;
121
+ if (version) {
122
+ if (!data.versions[version]) {
123
+ throw new Error(`Version ${version} of package ${name} not found`);
124
+ }
125
+ targetVersion = version;
126
+ }
127
+ else if (beta && data["dist-tags"].beta) {
128
+ // Use beta version if available and beta flag is set
129
+ targetVersion = data["dist-tags"].beta;
130
+ }
131
+ else {
132
+ // Fall back to latest version
133
+ targetVersion = data["dist-tags"].latest;
134
+ }
135
+ const url = data.versions[targetVersion].dist.tarball;
136
+ return {
137
+ version: targetVersion,
138
+ url,
139
+ };
140
+ }
141
+ async function readInstallationMetadata(dir) {
142
+ return safeParseJSON(await readFile(join(dir, ".aigne-cli.json"), "utf-8").catch(() => "{}"));
143
+ }
144
+ async function writeInstallationMetadata(dir, metadata) {
145
+ await writeFile(join(dir, ".aigne-cli.json"), JSON.stringify(metadata, null, 2));
146
+ }
147
+ async function checkInstallation(dir, { cacheTimeMs = NPM_PACKAGE_CACHE_TIME_MS } = {}) {
148
+ const s = await stat(join(dir, "package.json")).catch(() => null);
149
+ if (!s)
150
+ return null;
151
+ const version = safeParseJSON(await readFile(join(dir, "package.json"), "utf-8"))?.version;
152
+ if (!version)
153
+ return null;
154
+ const installedAt = (await readInstallationMetadata(dir))?.installedAt;
155
+ if (!installedAt)
156
+ return null;
157
+ const now = Date.now();
158
+ const expired = now - installedAt > cacheTimeMs;
159
+ return { version, expired };
160
+ }
161
+ export async function installApp({ dir, packageName, beta, version, }) {
162
+ return await new Listr([
163
+ {
164
+ title: `Fetching ${packageName} metadata`,
165
+ task: async (ctx, task) => {
166
+ if (beta) {
167
+ task.title = `Fetching ${packageName} metadata (using beta version)`;
168
+ }
169
+ const info = await getNpmTgzInfo(packageName, { beta, version });
170
+ Object.assign(ctx, info);
171
+ },
172
+ },
173
+ {
174
+ title: `Downloading ${packageName}`,
175
+ task: async (ctx, task) => {
176
+ task.title = `Downloading ${packageName} (v${ctx.version})`;
177
+ await mkdir(dir, { recursive: true });
178
+ await downloadAndExtract(ctx.url, dir, { strip: 1 });
179
+ },
180
+ },
181
+ {
182
+ title: "Installing dependencies",
183
+ task: async (_, task) => {
184
+ await installDependencies(dir, {
185
+ log: (log) => {
186
+ const last = log.split("\n").findLast((i) => !!i);
187
+ if (last)
188
+ task.output = last;
189
+ },
190
+ });
191
+ await writeInstallationMetadata(dir, { installedAt: Date.now() });
192
+ },
193
+ },
194
+ ], {
195
+ rendererOptions: {
196
+ collapseSubtasks: false,
197
+ showErrorMessage: false,
198
+ timer: PRESET_TIMER,
199
+ },
200
+ }).run();
201
+ }
202
+ async function installDependencies(dir, { log } = {}) {
203
+ await new Promise((resolve, reject) => {
204
+ const child = spawn("npm", ["install", "--omit", "dev", "--verbose", "--legacy-peer-deps"], {
205
+ cwd: dir,
206
+ stdio: "pipe",
207
+ shell: process.platform === "win32",
208
+ });
209
+ child.stdout.on("data", (data) => {
210
+ log?.(data.toString());
211
+ });
212
+ let stderr = "";
213
+ child.stderr.on("data", (data) => {
214
+ const str = data.toString();
215
+ log?.(str);
216
+ stderr += str;
217
+ });
218
+ child.on("error", (error) => reject(error));
219
+ child.on("exit", (code) => {
220
+ if (code === 0)
221
+ resolve();
222
+ else {
223
+ console.error(stderr);
224
+ reject(new Error(`npm install failed with code ${code}`));
225
+ }
226
+ });
227
+ });
228
+ }
229
+ function safeParseJSON(raw) {
230
+ try {
231
+ return JSON.parse(raw);
232
+ }
233
+ catch { }
234
+ }
@@ -1,53 +1,4 @@
1
1
  import type { CommandModule } from "yargs";
2
- import { type AgentInChildProcess, type CLIAgentInChildProcess, type LoadAIGNEInChildProcessResult } from "../utils/workers/run-aigne-in-child-process.js";
3
- import { type AgentRunCommonOptions } from "../utils/yargs.js";
4
2
  export declare function createAppCommands({ argv }?: {
5
3
  argv?: string[];
6
4
  }): CommandModule[];
7
- export declare const agentCommandModule: ({ dir, agent, chat, version, packageName, }: {
8
- dir: string;
9
- agent: AgentInChildProcess;
10
- chat?: boolean;
11
- version?: string;
12
- packageName?: string;
13
- }) => CommandModule<unknown, AgentRunCommonOptions>;
14
- export declare const cliAgentCommandModule: ({ dir, parent, cliAgent, version, packageName, }: {
15
- dir: string;
16
- parent?: string[];
17
- cliAgent: CLIAgentInChildProcess;
18
- version?: string;
19
- packageName?: string;
20
- }) => CommandModule<unknown, AgentRunCommonOptions>;
21
- interface LoadApplicationOptions {
22
- packageName: string;
23
- dir: string;
24
- install?: boolean;
25
- }
26
- interface LoadApplicationResult {
27
- aigne: LoadAIGNEInChildProcessResult;
28
- version: string;
29
- isCache?: boolean;
30
- }
31
- export declare function loadApplication(options: LoadApplicationOptions & {
32
- install: true;
33
- }): Promise<LoadApplicationResult>;
34
- export declare function loadApplication(options: LoadApplicationOptions & {
35
- install?: false;
36
- }): Promise<LoadApplicationResult | null>;
37
- export declare function installApp({ dir, packageName, beta, version, }: {
38
- dir: string;
39
- packageName: string;
40
- beta?: boolean;
41
- version?: string;
42
- }): Promise<{
43
- url: string;
44
- version: string;
45
- }>;
46
- export declare function getNpmTgzInfo(name: string, { version, beta }?: {
47
- version?: string;
48
- beta?: boolean;
49
- }): Promise<{
50
- version: string;
51
- url: string;
52
- }>;
53
- export {};