@aigne/cli 1.74.0-beta → 1.74.0-beta.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.
Files changed (128) hide show
  1. package/README.md +153 -14
  2. package/dist/commands/aigne.cjs +3 -4
  3. package/dist/commands/aigne.mjs +3 -4
  4. package/dist/commands/aigne.mjs.map +1 -1
  5. package/dist/commands/app/agent.cjs +2 -27
  6. package/dist/commands/app/agent.mjs +2 -26
  7. package/dist/commands/app/agent.mjs.map +1 -1
  8. package/dist/commands/create.cjs +1 -1
  9. package/dist/commands/create.mjs +1 -1
  10. package/dist/commands/eval.cjs +42 -3
  11. package/dist/commands/eval.mjs +43 -4
  12. package/dist/commands/eval.mjs.map +1 -1
  13. package/dist/commands/explain.cjs +340 -0
  14. package/dist/commands/explain.mjs +340 -0
  15. package/dist/commands/explain.mjs.map +1 -0
  16. package/dist/commands/hub.cjs +111 -14
  17. package/dist/commands/hub.mjs +111 -14
  18. package/dist/commands/hub.mjs.map +1 -1
  19. package/dist/commands/observe.cjs +44 -1
  20. package/dist/commands/observe.mjs +44 -1
  21. package/dist/commands/observe.mjs.map +1 -1
  22. package/dist/commands/run-skill.cjs +29 -13
  23. package/dist/commands/run-skill.mjs +29 -13
  24. package/dist/commands/run-skill.mjs.map +1 -1
  25. package/dist/commands/run.cjs +5 -4
  26. package/dist/commands/run.mjs +5 -4
  27. package/dist/commands/run.mjs.map +1 -1
  28. package/dist/commands/serve-mcp.cjs +49 -4
  29. package/dist/commands/serve-mcp.mjs +49 -3
  30. package/dist/commands/serve-mcp.mjs.map +1 -1
  31. package/dist/commands/shell.cjs +106 -0
  32. package/dist/commands/shell.mjs +105 -0
  33. package/dist/commands/shell.mjs.map +1 -0
  34. package/dist/shell/repl.cjs +544 -0
  35. package/dist/shell/repl.mjs +543 -0
  36. package/dist/shell/repl.mjs.map +1 -0
  37. package/dist/shell/tools/ask-user.cjs +191 -0
  38. package/dist/shell/tools/ask-user.mjs +187 -0
  39. package/dist/shell/tools/ask-user.mjs.map +1 -0
  40. package/dist/shell/tools/index.cjs +2 -0
  41. package/dist/shell/tools/index.mjs +4 -0
  42. package/dist/shell/tools/render.cjs +189 -0
  43. package/dist/shell/tools/render.mjs +186 -0
  44. package/dist/shell/tools/render.mjs.map +1 -0
  45. package/dist/tracer/terminal.cjs +120 -133
  46. package/dist/tracer/terminal.mjs +121 -134
  47. package/dist/tracer/terminal.mjs.map +1 -1
  48. package/dist/ui/utils/terminal-select.cjs +73 -0
  49. package/dist/ui/utils/terminal-select.mjs +72 -0
  50. package/dist/ui/utils/terminal-select.mjs.map +1 -0
  51. package/dist/utils/agent-v1.cjs +2 -2
  52. package/dist/utils/agent-v1.mjs +2 -2
  53. package/dist/utils/aigne-hub/credential.cjs +3 -3
  54. package/dist/utils/aigne-hub/credential.mjs +3 -3
  55. package/dist/utils/aigne-hub/model.cjs +2 -2
  56. package/dist/utils/aigne-hub/model.mjs +1 -1
  57. package/dist/utils/ascii-logo.cjs +12 -13
  58. package/dist/utils/ascii-logo.d.cts.map +1 -1
  59. package/dist/utils/ascii-logo.d.mts.map +1 -1
  60. package/dist/utils/ascii-logo.mjs +12 -13
  61. package/dist/utils/ascii-logo.mjs.map +1 -1
  62. package/dist/utils/evaluation/evaluator.cjs +1 -1
  63. package/dist/utils/evaluation/evaluator.mjs +1 -1
  64. package/dist/utils/evaluation/reporter.cjs +78 -1
  65. package/dist/utils/evaluation/reporter.mjs +76 -1
  66. package/dist/utils/evaluation/reporter.mjs.map +1 -1
  67. package/dist/utils/exit-codes.cjs +73 -0
  68. package/dist/utils/exit-codes.d.cts +52 -0
  69. package/dist/utils/exit-codes.d.cts.map +1 -0
  70. package/dist/utils/exit-codes.d.mts +52 -0
  71. package/dist/utils/exit-codes.d.mts.map +1 -0
  72. package/dist/utils/exit-codes.mjs +71 -0
  73. package/dist/utils/exit-codes.mjs.map +1 -0
  74. package/dist/utils/output.cjs +61 -0
  75. package/dist/utils/output.d.cts +43 -0
  76. package/dist/utils/output.d.cts.map +1 -0
  77. package/dist/utils/output.d.mts +43 -0
  78. package/dist/utils/output.d.mts.map +1 -0
  79. package/dist/utils/output.mjs +56 -0
  80. package/dist/utils/output.mjs.map +1 -0
  81. package/dist/utils/run-chat-loop.cjs +1 -1
  82. package/dist/utils/run-chat-loop.mjs +1 -1
  83. package/dist/utils/run-with-aigne.cjs +10 -3
  84. package/dist/utils/run-with-aigne.d.cts.map +1 -1
  85. package/dist/utils/run-with-aigne.d.mts.map +1 -1
  86. package/dist/utils/run-with-aigne.mjs +10 -3
  87. package/dist/utils/run-with-aigne.mjs.map +1 -1
  88. package/dist/utils/serve-mcp.cjs +1 -1
  89. package/dist/utils/serve-mcp.mjs +1 -1
  90. package/dist/utils/view.cjs +34 -0
  91. package/dist/utils/view.d.cts +47 -0
  92. package/dist/utils/view.d.cts.map +1 -0
  93. package/dist/utils/view.d.mts +47 -0
  94. package/dist/utils/view.d.mts.map +1 -0
  95. package/dist/utils/view.mjs +33 -0
  96. package/dist/utils/view.mjs.map +1 -0
  97. package/dist/utils/yargs.cjs +27 -5
  98. package/dist/utils/yargs.d.cts +13 -0
  99. package/dist/utils/yargs.d.cts.map +1 -1
  100. package/dist/utils/yargs.d.mts +14 -1
  101. package/dist/utils/yargs.d.mts.map +1 -1
  102. package/dist/utils/yargs.mjs +32 -10
  103. package/dist/utils/yargs.mjs.map +1 -1
  104. package/package.json +20 -16
  105. package/dist/commands/app/app.cjs +0 -92
  106. package/dist/commands/app/app.mjs +0 -90
  107. package/dist/commands/app/app.mjs.map +0 -1
  108. package/dist/commands/app/cli.cjs +0 -6
  109. package/dist/commands/app/cli.d.cts +0 -1
  110. package/dist/commands/app/cli.d.mts +0 -1
  111. package/dist/commands/app/cli.mjs +0 -8
  112. package/dist/commands/app/cli.mjs.map +0 -1
  113. package/dist/commands/app/upgrade.cjs +0 -243
  114. package/dist/commands/app/upgrade.mjs +0 -240
  115. package/dist/commands/app/upgrade.mjs.map +0 -1
  116. package/dist/commands/app.cjs +0 -53
  117. package/dist/commands/app.mjs +0 -53
  118. package/dist/commands/app.mjs.map +0 -1
  119. package/dist/commands/deploy.cjs +0 -237
  120. package/dist/commands/deploy.mjs +0 -237
  121. package/dist/commands/deploy.mjs.map +0 -1
  122. package/dist/utils/listr.cjs +0 -226
  123. package/dist/utils/listr.d.cts +0 -71
  124. package/dist/utils/listr.d.cts.map +0 -1
  125. package/dist/utils/listr.d.mts +0 -71
  126. package/dist/utils/listr.d.mts.map +0 -1
  127. package/dist/utils/listr.mjs +0 -222
  128. package/dist/utils/listr.mjs.map +0 -1
@@ -1,6 +0,0 @@
1
- const require_app = require('./app.cjs');
2
-
3
- //#region src/commands/app/cli.ts
4
- require_app.runAppCLI();
5
-
6
- //#endregion
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -1,8 +0,0 @@
1
- import { runAppCLI } from "./app.mjs";
2
-
3
- //#region src/commands/app/cli.ts
4
- runAppCLI();
5
-
6
- //#endregion
7
- export { };
8
- //# sourceMappingURL=cli.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../../../src/commands/app/cli.ts"],"sourcesContent":["import { runAppCLI } from \"./app.js\";\n\nrunAppCLI();\n"],"mappings":";;;AAEA,WAAW"}
@@ -1,243 +0,0 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- const require_utils_download = require('../../utils/download.cjs');
3
- const require_utils_load_aigne = require('../../utils/load-aigne.cjs');
4
- const require_utils_spinner = require('../../utils/spinner.cjs');
5
- let node_child_process = require("node:child_process");
6
- let node_path = require("node:path");
7
- let node_fs_promises = require("node:fs/promises");
8
- let _aigne_core_loader_error = require("@aigne/core/loader/error");
9
- let _aigne_core_utils_fetch = require("@aigne/core/utils/fetch");
10
- let _aigne_listr2 = require("@aigne/listr2");
11
- let ufo = require("ufo");
12
-
13
- //#region src/commands/app/upgrade.ts
14
- const NPM_PACKAGE_CACHE_TIME_MS = 1e3 * 60 * 60 * 24;
15
- /**
16
- * Check if beta applications should be used based on environment variables
17
- */
18
- function shouldUseBetaApps() {
19
- const envVar = process.env.AIGNE_USE_BETA_APPS;
20
- return envVar === "true" || envVar === "1";
21
- }
22
- const upgradeCommandModule = ({ packageName, dir }) => ({
23
- command: "upgrade",
24
- describe: `Upgrade ${packageName} to the latest version`,
25
- builder: (yargs) => {
26
- return yargs.option("beta", {
27
- type: "boolean",
28
- describe: "Use beta versions if available"
29
- }).option("target-version", {
30
- type: "string",
31
- describe: "Specify a version to upgrade to (default is latest)",
32
- alias: ["to", "target"]
33
- }).option("force", {
34
- type: "boolean",
35
- describe: "Force upgrade even if already at latest version",
36
- default: false
37
- });
38
- },
39
- handler: async ({ beta, targetVersion, force }) => {
40
- beta ??= shouldUseBetaApps();
41
- const npm = await require_utils_spinner.withSpinner("", async () => {
42
- if (force) await (0, node_fs_promises.rm)(dir, {
43
- force: true,
44
- recursive: true
45
- });
46
- return await getNpmTgzInfo(packageName, {
47
- beta,
48
- version: targetVersion
49
- });
50
- });
51
- const check = await checkInstallation(dir);
52
- if (force || !check || npm.version !== check.version) await installApp({
53
- packageName,
54
- dir,
55
- beta,
56
- version: targetVersion
57
- });
58
- const app = await loadApplication({
59
- dir,
60
- packageName,
61
- install: true,
62
- skipModelLoading: true
63
- });
64
- if (force || check?.version !== app.version) console.log(`\n✅ Upgraded ${packageName} to version ${app.version}`);
65
- else console.log(`\n✅ ${packageName} is already at the latest version (${app.version})`);
66
- }
67
- });
68
- var NeedReinstallError = class extends Error {
69
- static code = 244;
70
- };
71
- var NeedReinstallBetaError = class extends Error {
72
- static code = 245;
73
- };
74
- async function loadApplication(options) {
75
- const { dir, packageName } = options;
76
- const check = await checkInstallation(dir);
77
- const beta = options.beta ?? check?.version?.includes("beta");
78
- if (check) {
79
- let needUpdate = check.expired;
80
- if (check.expired) await require_utils_spinner.withSpinner("Checking updates...", async () => {
81
- if ((await getNpmTgzInfo(packageName, { beta })).version === check.version) {
82
- await writeInstallationMetadata(dir, { installedAt: Date.now() });
83
- needUpdate = false;
84
- }
85
- });
86
- if (!needUpdate) {
87
- const aigne = await require_utils_load_aigne.loadAIGNE({
88
- ...options,
89
- path: dir,
90
- metadata: {
91
- appName: packageName,
92
- appVersion: check?.version
93
- }
94
- }).catch(async (error) => {
95
- if (error instanceof _aigne_core_loader_error.LoadJsAgentError) {
96
- await require_utils_spinner.withSpinner("", async () => {
97
- await (0, node_fs_promises.rm)(options.dir, {
98
- recursive: true,
99
- force: true
100
- });
101
- await (0, node_fs_promises.mkdir)(options.dir, { recursive: true });
102
- });
103
- const message = `⚠️ Failed to load ${packageName}, trying to reinstall: ${error.message}`;
104
- throw beta ? new NeedReinstallBetaError(message) : new NeedReinstallError(message);
105
- }
106
- throw error;
107
- });
108
- if (aigne) return {
109
- aigne,
110
- version: check.version,
111
- isCache: true
112
- };
113
- }
114
- }
115
- if (!options.install) return null;
116
- const result = await installApp({
117
- dir,
118
- packageName,
119
- beta
120
- });
121
- return {
122
- aigne: await require_utils_load_aigne.loadAIGNE({
123
- ...options,
124
- path: dir,
125
- metadata: {
126
- appName: packageName,
127
- appVersion: result.version
128
- }
129
- }),
130
- version: result.version
131
- };
132
- }
133
- async function getNpmTgzInfo(name, { version, beta } = {}) {
134
- const data = await (await (0, _aigne_core_utils_fetch.fetch)((0, ufo.joinURL)("https://registry.npmjs.org", name))).json();
135
- let targetVersion;
136
- if (version) {
137
- if (!data.versions[version]) throw new Error(`Version ${version} of package ${name} not found`);
138
- targetVersion = version;
139
- } else if (beta && data["dist-tags"].beta) targetVersion = data["dist-tags"].beta;
140
- else targetVersion = data["dist-tags"].latest;
141
- const url = data.versions[targetVersion].dist.tarball;
142
- return {
143
- version: targetVersion,
144
- url
145
- };
146
- }
147
- async function readInstallationMetadata(dir) {
148
- return safeParseJSON(await (0, node_fs_promises.readFile)((0, node_path.join)(dir, ".aigne-cli.json"), "utf-8").catch(() => "{}"));
149
- }
150
- async function writeInstallationMetadata(dir, metadata) {
151
- await (0, node_fs_promises.writeFile)((0, node_path.join)(dir, ".aigne-cli.json"), JSON.stringify(metadata, null, 2));
152
- }
153
- async function checkInstallation(dir, { cacheTimeMs = NPM_PACKAGE_CACHE_TIME_MS } = {}) {
154
- if (!await (0, node_fs_promises.stat)((0, node_path.join)(dir, "package.json")).catch(() => null)) return null;
155
- const version = safeParseJSON(await (0, node_fs_promises.readFile)((0, node_path.join)(dir, "package.json"), "utf-8"))?.version;
156
- if (!version) return null;
157
- const installedAt = (await readInstallationMetadata(dir))?.installedAt;
158
- if (!installedAt) return null;
159
- return {
160
- version,
161
- expired: Date.now() - installedAt > cacheTimeMs
162
- };
163
- }
164
- async function installApp({ dir, packageName, beta, version }) {
165
- return await new _aigne_listr2.Listr([
166
- {
167
- title: `Fetching ${packageName} metadata`,
168
- task: async (ctx, task) => {
169
- if (beta) task.title = `Fetching ${packageName} metadata (using beta version)`;
170
- const info = await getNpmTgzInfo(packageName, {
171
- beta,
172
- version
173
- });
174
- Object.assign(ctx, info);
175
- }
176
- },
177
- {
178
- title: `Downloading ${packageName}`,
179
- task: async (ctx, task) => {
180
- task.title = `Downloading ${packageName} (v${ctx.version})`;
181
- await (0, node_fs_promises.mkdir)(dir, { recursive: true });
182
- await require_utils_download.downloadAndExtract(ctx.url, dir, { strip: 1 });
183
- }
184
- },
185
- {
186
- title: "Installing dependencies",
187
- task: async (_, task) => {
188
- await installDependencies(dir, { log: (log) => {
189
- const last = log.split("\n").findLast((i) => !!i);
190
- if (last) task.output = last;
191
- } });
192
- await writeInstallationMetadata(dir, { installedAt: Date.now() });
193
- }
194
- }
195
- ], { rendererOptions: {
196
- collapseSubtasks: false,
197
- showErrorMessage: false,
198
- timer: _aigne_listr2.PRESET_TIMER
199
- } }).run();
200
- }
201
- async function installDependencies(dir, { log } = {}) {
202
- await new Promise((resolve, reject) => {
203
- const child = (0, node_child_process.spawn)("npm", [
204
- "install",
205
- "--omit",
206
- "dev",
207
- "--verbose",
208
- "--legacy-peer-deps"
209
- ], {
210
- cwd: dir,
211
- stdio: "pipe",
212
- shell: process.platform === "win32"
213
- });
214
- child.stdout.on("data", (data) => {
215
- log?.(data.toString());
216
- });
217
- let stderr = "";
218
- child.stderr.on("data", (data) => {
219
- const str = data.toString();
220
- log?.(str);
221
- stderr += str;
222
- });
223
- child.on("error", (error) => reject(error));
224
- child.on("exit", (code) => {
225
- if (code === 0) resolve();
226
- else {
227
- console.error(stderr);
228
- reject(/* @__PURE__ */ new Error(`npm install failed with code ${code}`));
229
- }
230
- });
231
- });
232
- }
233
- function safeParseJSON(raw) {
234
- try {
235
- return JSON.parse(raw);
236
- } catch {}
237
- }
238
-
239
- //#endregion
240
- exports.NeedReinstallBetaError = NeedReinstallBetaError;
241
- exports.NeedReinstallError = NeedReinstallError;
242
- exports.loadApplication = loadApplication;
243
- exports.upgradeCommandModule = upgradeCommandModule;
@@ -1,240 +0,0 @@
1
- import { downloadAndExtract } from "../../utils/download.mjs";
2
- import { loadAIGNE } from "../../utils/load-aigne.mjs";
3
- import { withSpinner } from "../../utils/spinner.mjs";
4
- import { spawn } from "node:child_process";
5
- import { join } from "node:path";
6
- import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
7
- import { LoadJsAgentError } from "@aigne/core/loader/error";
8
- import { fetch } from "@aigne/core/utils/fetch";
9
- import { Listr, PRESET_TIMER } from "@aigne/listr2";
10
- import { joinURL } from "ufo";
11
-
12
- //#region src/commands/app/upgrade.ts
13
- const NPM_PACKAGE_CACHE_TIME_MS = 1e3 * 60 * 60 * 24;
14
- /**
15
- * Check if beta applications should be used based on environment variables
16
- */
17
- function shouldUseBetaApps() {
18
- const envVar = process.env.AIGNE_USE_BETA_APPS;
19
- return envVar === "true" || envVar === "1";
20
- }
21
- const upgradeCommandModule = ({ packageName, dir }) => ({
22
- command: "upgrade",
23
- describe: `Upgrade ${packageName} to the latest version`,
24
- builder: (yargs) => {
25
- return yargs.option("beta", {
26
- type: "boolean",
27
- describe: "Use beta versions if available"
28
- }).option("target-version", {
29
- type: "string",
30
- describe: "Specify a version to upgrade to (default is latest)",
31
- alias: ["to", "target"]
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) await rm(dir, {
42
- force: true,
43
- recursive: true
44
- });
45
- return await getNpmTgzInfo(packageName, {
46
- beta,
47
- version: targetVersion
48
- });
49
- });
50
- const check = await checkInstallation(dir);
51
- if (force || !check || npm.version !== check.version) await installApp({
52
- packageName,
53
- dir,
54
- beta,
55
- version: targetVersion
56
- });
57
- const app = await loadApplication({
58
- dir,
59
- packageName,
60
- install: true,
61
- skipModelLoading: true
62
- });
63
- if (force || check?.version !== app.version) console.log(`\n✅ Upgraded ${packageName} to version ${app.version}`);
64
- else console.log(`\n✅ ${packageName} is already at the latest version (${app.version})`);
65
- }
66
- });
67
- var NeedReinstallError = class extends Error {
68
- static code = 244;
69
- };
70
- var NeedReinstallBetaError = class extends Error {
71
- static code = 245;
72
- };
73
- async function loadApplication(options) {
74
- const { dir, packageName } = options;
75
- const check = await checkInstallation(dir);
76
- const beta = options.beta ?? check?.version?.includes("beta");
77
- if (check) {
78
- let needUpdate = check.expired;
79
- if (check.expired) await withSpinner("Checking updates...", async () => {
80
- if ((await getNpmTgzInfo(packageName, { beta })).version === check.version) {
81
- await writeInstallationMetadata(dir, { installedAt: Date.now() });
82
- needUpdate = false;
83
- }
84
- });
85
- if (!needUpdate) {
86
- const aigne = await loadAIGNE({
87
- ...options,
88
- path: dir,
89
- metadata: {
90
- appName: packageName,
91
- appVersion: check?.version
92
- }
93
- }).catch(async (error) => {
94
- if (error instanceof LoadJsAgentError) {
95
- await withSpinner("", async () => {
96
- await rm(options.dir, {
97
- recursive: true,
98
- force: true
99
- });
100
- await mkdir(options.dir, { recursive: true });
101
- });
102
- const message = `⚠️ Failed to load ${packageName}, trying to reinstall: ${error.message}`;
103
- throw beta ? new NeedReinstallBetaError(message) : new NeedReinstallError(message);
104
- }
105
- throw error;
106
- });
107
- if (aigne) return {
108
- aigne,
109
- version: check.version,
110
- isCache: true
111
- };
112
- }
113
- }
114
- if (!options.install) return null;
115
- const result = await installApp({
116
- dir,
117
- packageName,
118
- beta
119
- });
120
- return {
121
- aigne: await loadAIGNE({
122
- ...options,
123
- path: dir,
124
- metadata: {
125
- appName: packageName,
126
- appVersion: result.version
127
- }
128
- }),
129
- version: result.version
130
- };
131
- }
132
- async function getNpmTgzInfo(name, { version, beta } = {}) {
133
- const data = await (await fetch(joinURL("https://registry.npmjs.org", name))).json();
134
- let targetVersion;
135
- if (version) {
136
- if (!data.versions[version]) throw new Error(`Version ${version} of package ${name} not found`);
137
- targetVersion = version;
138
- } else if (beta && data["dist-tags"].beta) targetVersion = data["dist-tags"].beta;
139
- else targetVersion = data["dist-tags"].latest;
140
- const url = data.versions[targetVersion].dist.tarball;
141
- return {
142
- version: targetVersion,
143
- url
144
- };
145
- }
146
- async function readInstallationMetadata(dir) {
147
- return safeParseJSON(await readFile(join(dir, ".aigne-cli.json"), "utf-8").catch(() => "{}"));
148
- }
149
- async function writeInstallationMetadata(dir, metadata) {
150
- await writeFile(join(dir, ".aigne-cli.json"), JSON.stringify(metadata, null, 2));
151
- }
152
- async function checkInstallation(dir, { cacheTimeMs = NPM_PACKAGE_CACHE_TIME_MS } = {}) {
153
- if (!await stat(join(dir, "package.json")).catch(() => null)) return null;
154
- const version = safeParseJSON(await readFile(join(dir, "package.json"), "utf-8"))?.version;
155
- if (!version) return null;
156
- const installedAt = (await readInstallationMetadata(dir))?.installedAt;
157
- if (!installedAt) return null;
158
- return {
159
- version,
160
- expired: Date.now() - installedAt > cacheTimeMs
161
- };
162
- }
163
- async function installApp({ dir, packageName, beta, version }) {
164
- return await new Listr([
165
- {
166
- title: `Fetching ${packageName} metadata`,
167
- task: async (ctx, task) => {
168
- if (beta) task.title = `Fetching ${packageName} metadata (using beta version)`;
169
- const info = await getNpmTgzInfo(packageName, {
170
- beta,
171
- version
172
- });
173
- Object.assign(ctx, info);
174
- }
175
- },
176
- {
177
- title: `Downloading ${packageName}`,
178
- task: async (ctx, task) => {
179
- task.title = `Downloading ${packageName} (v${ctx.version})`;
180
- await mkdir(dir, { recursive: true });
181
- await downloadAndExtract(ctx.url, dir, { strip: 1 });
182
- }
183
- },
184
- {
185
- title: "Installing dependencies",
186
- task: async (_, task) => {
187
- await installDependencies(dir, { log: (log) => {
188
- const last = log.split("\n").findLast((i) => !!i);
189
- if (last) task.output = last;
190
- } });
191
- await writeInstallationMetadata(dir, { installedAt: Date.now() });
192
- }
193
- }
194
- ], { rendererOptions: {
195
- collapseSubtasks: false,
196
- showErrorMessage: false,
197
- timer: PRESET_TIMER
198
- } }).run();
199
- }
200
- async function installDependencies(dir, { log } = {}) {
201
- await new Promise((resolve$1, reject) => {
202
- const child = spawn("npm", [
203
- "install",
204
- "--omit",
205
- "dev",
206
- "--verbose",
207
- "--legacy-peer-deps"
208
- ], {
209
- cwd: dir,
210
- stdio: "pipe",
211
- shell: process.platform === "win32"
212
- });
213
- child.stdout.on("data", (data) => {
214
- log?.(data.toString());
215
- });
216
- let stderr = "";
217
- child.stderr.on("data", (data) => {
218
- const str = data.toString();
219
- log?.(str);
220
- stderr += str;
221
- });
222
- child.on("error", (error) => reject(error));
223
- child.on("exit", (code) => {
224
- if (code === 0) resolve$1();
225
- else {
226
- console.error(stderr);
227
- reject(/* @__PURE__ */ new Error(`npm install failed with code ${code}`));
228
- }
229
- });
230
- });
231
- }
232
- function safeParseJSON(raw) {
233
- try {
234
- return JSON.parse(raw);
235
- } catch {}
236
- }
237
-
238
- //#endregion
239
- export { NeedReinstallBetaError, NeedReinstallError, loadApplication, upgradeCommandModule };
240
- //# sourceMappingURL=upgrade.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upgrade.mjs","names":[],"sources":["../../../src/commands/app/upgrade.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdir, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { LoadCredentialOptions } from \"@aigne/cli/utils/aigne-hub/type.js\";\nimport type { AIGNE, ChatModelInputOptions, ImageModelInputOptions } from \"@aigne/core\";\nimport { LoadJsAgentError } from \"@aigne/core/loader/error\";\nimport { fetch } from \"@aigne/core/utils/fetch\";\nimport { Listr, PRESET_TIMER } from \"@aigne/listr2\";\nimport { joinURL } from \"ufo\";\nimport type { CommandModule } from \"yargs\";\nimport { downloadAndExtract } from \"../../utils/download.js\";\nimport { loadAIGNE } from \"../../utils/load-aigne.js\";\nimport { withSpinner } from \"../../utils/spinner.js\";\n\nconst NPM_PACKAGE_CACHE_TIME_MS = 1000 * 60 * 60 * 24; // 1 day\n\n/**\n * Check if beta applications should be used based on environment variables\n */\nfunction shouldUseBetaApps(): boolean {\n const envVar = process.env.AIGNE_USE_BETA_APPS;\n return envVar === \"true\" || envVar === \"1\";\n}\n\nexport const upgradeCommandModule = ({\n packageName,\n dir,\n}: {\n packageName: string;\n dir: string;\n}): CommandModule<\n unknown,\n {\n beta?: boolean;\n targetVersion?: string;\n force?: boolean;\n }\n> => ({\n command: \"upgrade\",\n describe: `Upgrade ${packageName} to the latest version`,\n builder: (yargs) => {\n return yargs\n .option(\"beta\", {\n type: \"boolean\",\n describe: \"Use beta versions if available\",\n })\n .option(\"target-version\", {\n type: \"string\",\n describe: \"Specify a version to upgrade to (default is latest)\",\n alias: [\"to\", \"target\"],\n })\n .option(\"force\", {\n type: \"boolean\",\n describe: \"Force upgrade even if already at latest version\",\n default: false,\n });\n },\n handler: async ({ beta, targetVersion, force }) => {\n beta ??= shouldUseBetaApps();\n\n const npm = await withSpinner(\"\", async () => {\n if (force) await rm(dir, { force: true, recursive: true });\n return await getNpmTgzInfo(packageName, { beta, version: targetVersion });\n });\n\n const check = await checkInstallation(dir);\n\n if (force || !check || npm.version !== check.version) {\n await installApp({ packageName, dir, beta, version: targetVersion });\n }\n\n const app = await loadApplication({ dir, packageName, install: true, skipModelLoading: true });\n\n if (force || check?.version !== app.version) {\n console.log(`\\n✅ Upgraded ${packageName} to version ${app.version}`);\n } else {\n console.log(`\\n✅ ${packageName} is already at the latest version (${app.version})`);\n }\n },\n});\n\ninterface LoadApplicationOptions {\n packageName: string;\n dir: string;\n install?: boolean;\n skipModelLoading?: boolean;\n modelOptions?: ChatModelInputOptions & LoadCredentialOptions;\n imageModelOptions?: ImageModelInputOptions & LoadCredentialOptions;\n beta?: boolean;\n}\n\ninterface LoadApplicationResult {\n aigne: AIGNE;\n version: string;\n isCache?: boolean;\n}\n\nexport class NeedReinstallError extends Error {\n static code = 244;\n}\n\nexport class NeedReinstallBetaError extends Error {\n static code = 245;\n}\n\nexport async function loadApplication(\n options: LoadApplicationOptions & { install: true },\n): Promise<LoadApplicationResult>;\nexport async function loadApplication(\n options: LoadApplicationOptions & { install?: false },\n): Promise<LoadApplicationResult | null>;\nexport async function loadApplication(\n options: LoadApplicationOptions,\n): Promise<LoadApplicationResult | null> {\n const { dir, packageName } = options;\n\n const check = await checkInstallation(dir);\n\n const beta = options.beta ?? check?.version?.includes(\"beta\");\n\n if (check) {\n let needUpdate = check.expired;\n\n if (check.expired) {\n await withSpinner(\"Checking updates...\", async () => {\n const tgz = await getNpmTgzInfo(packageName, { beta });\n if (tgz.version === check.version) {\n await writeInstallationMetadata(dir, { installedAt: Date.now() });\n needUpdate = false;\n }\n });\n }\n\n if (!needUpdate) {\n const aigne = await loadAIGNE({\n ...options,\n path: dir,\n metadata: {\n appName: packageName,\n appVersion: check?.version,\n },\n }).catch(async (error) => {\n if (error instanceof LoadJsAgentError) {\n await withSpinner(\"\", async () => {\n await rm(options.dir, { recursive: true, force: true });\n await mkdir(options.dir, { recursive: true });\n });\n\n const message = `⚠️ Failed to load ${packageName}, trying to reinstall: ${error.message}`;\n\n throw beta ? new NeedReinstallBetaError(message) : new NeedReinstallError(message);\n }\n\n throw error;\n });\n\n if (aigne) {\n return { aigne, version: check.version, isCache: true };\n }\n }\n }\n\n if (!options.install) return null;\n\n const result = await installApp({ dir, packageName, beta });\n\n return {\n aigne: await loadAIGNE({\n ...options,\n path: dir,\n metadata: {\n appName: packageName,\n appVersion: result.version,\n },\n }),\n version: result.version,\n };\n}\n\nexport async function getNpmTgzInfo(\n name: string,\n { version, beta }: { version?: string; beta?: boolean } = {},\n): Promise<{ version: string; url: string }> {\n const res = await fetch(joinURL(\"https://registry.npmjs.org\", name));\n const data = await res.json();\n\n let targetVersion: string;\n\n if (version) {\n if (!data.versions[version]) {\n throw new Error(`Version ${version} of package ${name} not found`);\n }\n targetVersion = version;\n } else if (beta && data[\"dist-tags\"].beta) {\n // Use beta version if available and beta flag is set\n targetVersion = data[\"dist-tags\"].beta;\n } else {\n // Fall back to latest version\n targetVersion = data[\"dist-tags\"].latest;\n }\n\n const url = data.versions[targetVersion].dist.tarball;\n\n return {\n version: targetVersion,\n url,\n };\n}\n\ninterface InstallationMetadata {\n installedAt?: number;\n}\n\nasync function readInstallationMetadata(dir: string): Promise<InstallationMetadata | undefined> {\n return safeParseJSON<InstallationMetadata>(\n await readFile(join(dir, \".aigne-cli.json\"), \"utf-8\").catch(() => \"{}\"),\n );\n}\n\nasync function writeInstallationMetadata(dir: string, metadata: InstallationMetadata) {\n await writeFile(join(dir, \".aigne-cli.json\"), JSON.stringify(metadata, null, 2));\n}\n\nasync function checkInstallation(\n dir: string,\n { cacheTimeMs = NPM_PACKAGE_CACHE_TIME_MS }: { cacheTimeMs?: number } = {},\n): Promise<{ version: string; expired: boolean } | null> {\n const s = await stat(join(dir, \"package.json\")).catch(() => null);\n\n if (!s) return null;\n\n const version = safeParseJSON<{ version: string }>(\n await readFile(join(dir, \"package.json\"), \"utf-8\"),\n )?.version;\n if (!version) return null;\n\n const installedAt = (await readInstallationMetadata(dir))?.installedAt;\n\n if (!installedAt) return null;\n\n const now = Date.now();\n const expired = now - installedAt > cacheTimeMs;\n\n return { version, expired };\n}\n\nexport async function installApp({\n dir,\n packageName,\n beta,\n version,\n}: {\n dir: string;\n packageName: string;\n beta?: boolean;\n version?: string;\n}) {\n return await new Listr<{ url: string; version: string }>(\n [\n {\n title: `Fetching ${packageName} metadata`,\n task: async (ctx, task) => {\n if (beta) {\n task.title = `Fetching ${packageName} metadata (using beta version)`;\n }\n\n const info = await getNpmTgzInfo(packageName, { beta, version });\n Object.assign(ctx, info);\n },\n },\n {\n title: `Downloading ${packageName}`,\n task: async (ctx, task) => {\n task.title = `Downloading ${packageName} (v${ctx.version})`;\n\n await mkdir(dir, { recursive: true });\n\n await downloadAndExtract(ctx.url, dir, { strip: 1 });\n },\n },\n {\n title: \"Installing dependencies\",\n task: async (_, task) => {\n await installDependencies(dir, {\n log: (log) => {\n const last = log.split(\"\\n\").findLast((i) => !!i);\n if (last) task.output = last;\n },\n });\n\n await writeInstallationMetadata(dir, { installedAt: Date.now() });\n },\n },\n ],\n {\n rendererOptions: {\n collapseSubtasks: false,\n showErrorMessage: false,\n timer: PRESET_TIMER,\n },\n },\n ).run();\n}\n\nasync function installDependencies(dir: string, { log }: { log?: (log: string) => void } = {}) {\n await new Promise<void>((resolve, reject) => {\n const child = spawn(\"npm\", [\"install\", \"--omit\", \"dev\", \"--verbose\", \"--legacy-peer-deps\"], {\n cwd: dir,\n stdio: \"pipe\",\n shell: process.platform === \"win32\",\n });\n\n child.stdout.on(\"data\", (data) => {\n log?.(data.toString());\n });\n\n let stderr = \"\";\n child.stderr.on(\"data\", (data) => {\n const str = data.toString();\n log?.(str);\n stderr += str;\n });\n\n child.on(\"error\", (error) => reject(error));\n\n child.on(\"exit\", (code) => {\n if (code === 0) resolve();\n else {\n console.error(stderr);\n reject(new Error(`npm install failed with code ${code}`));\n }\n });\n });\n}\n\nfunction safeParseJSON<T>(raw: string): T | undefined {\n try {\n return JSON.parse(raw) as T;\n } catch {}\n}\n"],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_upgrade = require('./app/upgrade.cjs');
3
- let node_child_process = require("node:child_process");
4
- let node_path = require("node:path");
5
- let node_url = require("node:url");
6
-
7
- //#region src/commands/app.ts
8
- const builtinApps = [{
9
- name: "doc-smith",
10
- packageName: "@aigne/doc-smith",
11
- describe: "Generate and maintain project docs — powered by agents.",
12
- aliases: ["docsmith", "doc"]
13
- }, {
14
- name: "web-smith",
15
- packageName: "@aigne/web-smith",
16
- describe: "Generate and maintain project website pages — powered by agents.",
17
- aliases: ["websmith", "web"]
18
- }];
19
- function createAppCommands({ argv } = {}) {
20
- return builtinApps.map((app) => ({
21
- command: app.name,
22
- describe: app.describe,
23
- aliases: app.aliases,
24
- builder: async (y) => y.help(false).version(false).strict(false),
25
- handler: async () => {
26
- let retried = false;
27
- let retryWithBeta = false;
28
- while (true) {
29
- const child = (0, node_child_process.fork)((0, node_path.join)((0, node_path.dirname)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href)), "./app/cli.mjs"), argv, {
30
- stdio: "inherit",
31
- env: {
32
- ...process.env,
33
- AIGNE_APP_NAME: app.name,
34
- AIGNE_APP_PACKAGE_NAME: app.packageName,
35
- AIGNE_APP_DESCRIPTION: app.describe,
36
- AIGNE_APP_USE_BETA_APPS: retryWithBeta ? "1" : "0"
37
- }
38
- });
39
- const code = await new Promise((resolve) => {
40
- child.on("exit", (code$1) => resolve(code$1));
41
- });
42
- if (code === require_upgrade.NeedReinstallError.code || code === require_upgrade.NeedReinstallBetaError.code) {
43
- if (retried) process.exit(1);
44
- retryWithBeta = code === require_upgrade.NeedReinstallBetaError.code;
45
- retried = true;
46
- } else process.exit(code);
47
- }
48
- }
49
- }));
50
- }
51
-
52
- //#endregion
53
- exports.createAppCommands = createAppCommands;
@@ -1,53 +0,0 @@
1
- import { NeedReinstallBetaError, NeedReinstallError } from "./app/upgrade.mjs";
2
- import { fork } from "node:child_process";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
-
6
- //#region src/commands/app.ts
7
- const builtinApps = [{
8
- name: "doc-smith",
9
- packageName: "@aigne/doc-smith",
10
- describe: "Generate and maintain project docs — powered by agents.",
11
- aliases: ["docsmith", "doc"]
12
- }, {
13
- name: "web-smith",
14
- packageName: "@aigne/web-smith",
15
- describe: "Generate and maintain project website pages — powered by agents.",
16
- aliases: ["websmith", "web"]
17
- }];
18
- function createAppCommands({ argv } = {}) {
19
- return builtinApps.map((app) => ({
20
- command: app.name,
21
- describe: app.describe,
22
- aliases: app.aliases,
23
- builder: async (y) => y.help(false).version(false).strict(false),
24
- handler: async () => {
25
- let retried = false;
26
- let retryWithBeta = false;
27
- while (true) {
28
- const child = fork(join(dirname(fileURLToPath(import.meta.url)), "./app/cli.mjs"), argv, {
29
- stdio: "inherit",
30
- env: {
31
- ...process.env,
32
- AIGNE_APP_NAME: app.name,
33
- AIGNE_APP_PACKAGE_NAME: app.packageName,
34
- AIGNE_APP_DESCRIPTION: app.describe,
35
- AIGNE_APP_USE_BETA_APPS: retryWithBeta ? "1" : "0"
36
- }
37
- });
38
- const code = await new Promise((resolve$1) => {
39
- child.on("exit", (code$1) => resolve$1(code$1));
40
- });
41
- if (code === NeedReinstallError.code || code === NeedReinstallBetaError.code) {
42
- if (retried) process.exit(1);
43
- retryWithBeta = code === NeedReinstallBetaError.code;
44
- retried = true;
45
- } else process.exit(code);
46
- }
47
- }
48
- }));
49
- }
50
-
51
- //#endregion
52
- export { createAppCommands };
53
- //# sourceMappingURL=app.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.mjs","names":["resolve","code"],"sources":["../../src/commands/app.ts"],"sourcesContent":["import { fork } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { CommandModule } from \"yargs\";\nimport { NeedReinstallBetaError, NeedReinstallError } from \"./app/upgrade.js\";\n\nconst builtinApps = [\n {\n name: \"doc-smith\",\n packageName: \"@aigne/doc-smith\",\n describe: \"Generate and maintain project docs — powered by agents.\",\n aliases: [\"docsmith\", \"doc\"],\n },\n {\n name: \"web-smith\",\n packageName: \"@aigne/web-smith\",\n describe: \"Generate and maintain project website pages — powered by agents.\",\n aliases: [\"websmith\", \"web\"],\n },\n];\n\nexport function createAppCommands({ argv }: { argv?: string[] } = {}): CommandModule[] {\n return builtinApps.map((app) => ({\n command: app.name,\n describe: app.describe,\n aliases: app.aliases,\n builder: async (y) => y.help(false).version(false).strict(false),\n handler: async () => {\n let retried = false;\n\n let retryWithBeta = false;\n\n while (true) {\n const child = fork(join(dirname(fileURLToPath(import.meta.url)), \"./app/cli.mjs\"), argv, {\n stdio: \"inherit\",\n env: {\n ...process.env,\n AIGNE_APP_NAME: app.name,\n AIGNE_APP_PACKAGE_NAME: app.packageName,\n AIGNE_APP_DESCRIPTION: app.describe,\n AIGNE_APP_USE_BETA_APPS: retryWithBeta ? \"1\" : \"0\",\n },\n });\n\n const code = await new Promise<number | null>((resolve) => {\n child.on(\"exit\", (code) => resolve(code));\n });\n\n if (code === NeedReinstallError.code || code === NeedReinstallBetaError.code) {\n if (retried) process.exit(1);\n retryWithBeta = code === NeedReinstallBetaError.code;\n retried = true;\n } else {\n process.exit(code);\n }\n }\n },\n }));\n}\n"],"mappings":";;;;;;AAMA,MAAM,cAAc,CAClB;CACE,MAAM;CACN,aAAa;CACb,UAAU;CACV,SAAS,CAAC,YAAY,MAAM;CAC7B,EACD;CACE,MAAM;CACN,aAAa;CACb,UAAU;CACV,SAAS,CAAC,YAAY,MAAM;CAC7B,CACF;AAED,SAAgB,kBAAkB,EAAE,SAA8B,EAAE,EAAmB;AACrF,QAAO,YAAY,KAAK,SAAS;EAC/B,SAAS,IAAI;EACb,UAAU,IAAI;EACd,SAAS,IAAI;EACb,SAAS,OAAO,MAAM,EAAE,KAAK,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM;EAChE,SAAS,YAAY;GACnB,IAAI,UAAU;GAEd,IAAI,gBAAgB;AAEpB,UAAO,MAAM;IACX,MAAM,QAAQ,KAAK,KAAK,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,EAAE,gBAAgB,EAAE,MAAM;KACvF,OAAO;KACP,KAAK;MACH,GAAG,QAAQ;MACX,gBAAgB,IAAI;MACpB,wBAAwB,IAAI;MAC5B,uBAAuB,IAAI;MAC3B,yBAAyB,gBAAgB,MAAM;MAChD;KACF,CAAC;IAEF,MAAM,OAAO,MAAM,IAAI,SAAwB,cAAY;AACzD,WAAM,GAAG,SAAS,WAASA,UAAQC,OAAK,CAAC;MACzC;AAEF,QAAI,SAAS,mBAAmB,QAAQ,SAAS,uBAAuB,MAAM;AAC5E,SAAI,QAAS,SAAQ,KAAK,EAAE;AAC5B,qBAAgB,SAAS,uBAAuB;AAChD,eAAU;UAEV,SAAQ,KAAK,KAAK;;;EAIzB,EAAE"}