@aigne/cli 1.60.0-beta → 1.74.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -12
- package/dist/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/bunwrapper.cjs +22 -0
- package/dist/bunwrapper.d.cts +1 -0
- package/dist/bunwrapper.d.mts +1 -0
- package/dist/bunwrapper.mjs +23 -0
- package/dist/bunwrapper.mjs.map +1 -0
- package/dist/cli.cjs +42 -0
- package/dist/cli.d.cts +9 -0
- package/dist/cli.d.cts.map +1 -0
- package/dist/cli.d.mts +10 -0
- package/dist/cli.d.mts.map +1 -0
- package/dist/cli.mjs +41 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/commands/aigne.cjs +23 -0
- package/dist/commands/aigne.mjs +22 -0
- package/dist/commands/aigne.mjs.map +1 -0
- package/dist/commands/app/agent.cjs +117 -0
- package/dist/commands/app/agent.mjs +113 -0
- package/dist/commands/app/agent.mjs.map +1 -0
- package/dist/commands/app/app.cjs +92 -0
- package/dist/commands/app/app.mjs +90 -0
- package/dist/commands/app/app.mjs.map +1 -0
- package/dist/commands/app/cli.cjs +6 -0
- package/dist/commands/app/cli.d.cts +1 -0
- package/dist/commands/app/cli.d.mts +1 -0
- package/dist/commands/app/cli.mjs +8 -0
- package/dist/commands/app/cli.mjs.map +1 -0
- package/dist/commands/app/upgrade.cjs +243 -0
- package/dist/commands/app/upgrade.mjs +240 -0
- package/dist/commands/app/upgrade.mjs.map +1 -0
- package/dist/commands/app.cjs +53 -0
- package/dist/commands/app.mjs +53 -0
- package/dist/commands/app.mjs.map +1 -0
- package/dist/commands/create.cjs +66 -0
- package/dist/commands/create.mjs +65 -0
- package/dist/commands/create.mjs.map +1 -0
- package/dist/commands/deploy.cjs +237 -0
- package/dist/commands/deploy.mjs +237 -0
- package/dist/commands/deploy.mjs.map +1 -0
- package/dist/commands/eval.cjs +88 -0
- package/dist/commands/eval.mjs +88 -0
- package/dist/commands/eval.mjs.map +1 -0
- package/dist/commands/hub.cjs +297 -0
- package/dist/commands/hub.mjs +294 -0
- package/dist/commands/hub.mjs.map +1 -0
- package/dist/commands/observe.cjs +49 -0
- package/dist/commands/observe.mjs +46 -0
- package/dist/commands/observe.mjs.map +1 -0
- package/dist/commands/run-skill.cjs +84 -0
- package/dist/commands/run-skill.mjs +81 -0
- package/dist/commands/run-skill.mjs.map +1 -0
- package/dist/commands/run.cjs +172 -0
- package/dist/commands/run.mjs +171 -0
- package/dist/commands/run.mjs.map +1 -0
- package/dist/commands/serve-mcp.cjs +68 -0
- package/dist/commands/serve-mcp.mjs +67 -0
- package/dist/commands/serve-mcp.mjs.map +1 -0
- package/dist/commands/test.cjs +40 -0
- package/dist/commands/test.mjs +39 -0
- package/dist/commands/test.mjs.map +1 -0
- package/dist/constants.cjs +28 -0
- package/dist/constants.d.cts +9 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.mts +9 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +24 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/global.d.cjs +0 -0
- package/dist/global.d.cts +6 -0
- package/dist/global.d.cts.map +1 -0
- package/dist/global.d.mts +6 -0
- package/dist/global.d.mts.map +1 -0
- package/dist/index.cjs +0 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +1 -0
- package/dist/tracer/terminal.cjs +336 -0
- package/dist/tracer/terminal.mjs +332 -0
- package/dist/tracer/terminal.mjs.map +1 -0
- package/dist/type.cjs +0 -0
- package/dist/type.d.cts +10 -0
- package/dist/type.d.cts.map +1 -0
- package/dist/type.d.mts +10 -0
- package/dist/type.d.mts.map +1 -0
- package/dist/type.mjs +1 -0
- package/dist/ui/utils/terminal-input.cjs +145 -0
- package/dist/ui/utils/terminal-input.mjs +144 -0
- package/dist/ui/utils/terminal-input.mjs.map +1 -0
- package/dist/ui/utils/text-buffer.cjs +865 -0
- package/dist/ui/utils/text-buffer.mjs +865 -0
- package/dist/ui/utils/text-buffer.mjs.map +1 -0
- package/dist/ui/utils/text-utils.cjs +85 -0
- package/dist/ui/utils/text-utils.mjs +78 -0
- package/dist/ui/utils/text-utils.mjs.map +1 -0
- package/dist/utils/agent-v1.cjs +180 -0
- package/dist/utils/agent-v1.d.cts +138 -0
- package/dist/utils/agent-v1.d.cts.map +1 -0
- package/dist/utils/agent-v1.d.mts +138 -0
- package/dist/utils/agent-v1.d.mts.map +1 -0
- package/dist/utils/agent-v1.mjs +179 -0
- package/dist/utils/agent-v1.mjs.map +1 -0
- package/dist/utils/aigne-hub/constants.cjs +22 -0
- package/dist/utils/aigne-hub/constants.mjs +18 -0
- package/dist/utils/aigne-hub/constants.mjs.map +1 -0
- package/dist/utils/aigne-hub/credential.cjs +179 -0
- package/dist/utils/aigne-hub/credential.mjs +175 -0
- package/dist/utils/aigne-hub/credential.mjs.map +1 -0
- package/dist/utils/aigne-hub/crypto.cjs +41 -0
- package/dist/utils/aigne-hub/crypto.mjs +33 -0
- package/dist/utils/aigne-hub/crypto.mjs.map +1 -0
- package/dist/utils/aigne-hub/model.cjs +112 -0
- package/dist/utils/aigne-hub/model.d.cts +19 -0
- package/dist/utils/aigne-hub/model.d.cts.map +1 -0
- package/dist/utils/aigne-hub/model.d.mts +19 -0
- package/dist/utils/aigne-hub/model.d.mts.map +1 -0
- package/dist/utils/aigne-hub/model.mjs +106 -0
- package/dist/utils/aigne-hub/model.mjs.map +1 -0
- package/dist/utils/aigne-hub/store/file.cjs +64 -0
- package/dist/utils/aigne-hub/store/file.mjs +64 -0
- package/dist/utils/aigne-hub/store/file.mjs.map +1 -0
- package/dist/utils/aigne-hub/store/index.cjs +37 -0
- package/dist/utils/aigne-hub/store/index.mjs +37 -0
- package/dist/utils/aigne-hub/store/index.mjs.map +1 -0
- package/dist/utils/aigne-hub/store/keytar.cjs +61 -0
- package/dist/utils/aigne-hub/store/keytar.mjs +61 -0
- package/dist/utils/aigne-hub/store/keytar.mjs.map +1 -0
- package/dist/utils/aigne-hub/store/migrate.cjs +46 -0
- package/dist/utils/aigne-hub/store/migrate.mjs +45 -0
- package/dist/utils/aigne-hub/store/migrate.mjs.map +1 -0
- package/dist/utils/aigne-hub/type.d.cts +18 -0
- package/dist/utils/aigne-hub/type.d.cts.map +1 -0
- package/dist/utils/aigne-hub/type.d.mts +18 -0
- package/dist/utils/aigne-hub/type.d.mts.map +1 -0
- package/dist/utils/aigne-hub-user.cjs +11 -0
- package/dist/utils/aigne-hub-user.d.cts +23 -0
- package/dist/utils/aigne-hub-user.d.cts.map +1 -0
- package/dist/utils/aigne-hub-user.d.mts +23 -0
- package/dist/utils/aigne-hub-user.d.mts.map +1 -0
- package/dist/utils/aigne-hub-user.mjs +11 -0
- package/dist/utils/aigne-hub-user.mjs.map +1 -0
- package/dist/utils/ascii-logo.cjs +30 -0
- package/dist/utils/ascii-logo.d.cts +5 -0
- package/dist/utils/ascii-logo.d.cts.map +1 -0
- package/dist/utils/ascii-logo.d.mts +5 -0
- package/dist/utils/ascii-logo.d.mts.map +1 -0
- package/dist/utils/{ascii-logo.js → ascii-logo.mjs} +13 -3
- package/dist/utils/ascii-logo.mjs.map +1 -0
- package/dist/utils/download.cjs +25 -0
- package/dist/utils/download.d.cts +7 -0
- package/dist/utils/download.d.cts.map +1 -0
- package/dist/utils/download.d.mts +7 -0
- package/dist/utils/download.d.mts.map +1 -0
- package/dist/utils/download.mjs +25 -0
- package/dist/utils/download.mjs.map +1 -0
- package/dist/utils/evaluation/core.cjs +84 -0
- package/dist/utils/evaluation/core.mjs +84 -0
- package/dist/utils/evaluation/core.mjs.map +1 -0
- package/dist/utils/evaluation/dataset.cjs +47 -0
- package/dist/utils/evaluation/dataset.mjs +46 -0
- package/dist/utils/evaluation/dataset.mjs.map +1 -0
- package/dist/utils/evaluation/evaluator.cjs +109 -0
- package/dist/utils/evaluation/{evaluator.js → evaluator.mjs} +48 -45
- package/dist/utils/evaluation/evaluator.mjs.map +1 -0
- package/dist/utils/evaluation/reporter.cjs +225 -0
- package/dist/utils/evaluation/reporter.mjs +220 -0
- package/dist/utils/evaluation/reporter.mjs.map +1 -0
- package/dist/utils/evaluation/runner.cjs +85 -0
- package/dist/utils/evaluation/runner.mjs +85 -0
- package/dist/utils/evaluation/runner.mjs.map +1 -0
- package/dist/utils/get-url-origin.cjs +12 -0
- package/dist/utils/get-url-origin.d.cts +5 -0
- package/dist/utils/get-url-origin.d.cts.map +1 -0
- package/dist/utils/get-url-origin.d.mts +5 -0
- package/dist/utils/get-url-origin.d.mts.map +1 -0
- package/dist/utils/get-url-origin.mjs +12 -0
- package/dist/utils/get-url-origin.mjs.map +1 -0
- package/dist/utils/inquirer/checkbox.cjs +265 -0
- package/dist/utils/inquirer/checkbox.mjs +262 -0
- package/dist/utils/inquirer/checkbox.mjs.map +1 -0
- package/dist/utils/listr.cjs +226 -0
- package/dist/utils/listr.d.cts +71 -0
- package/dist/utils/listr.d.cts.map +1 -0
- package/dist/utils/listr.d.mts +71 -0
- package/dist/utils/listr.d.mts.map +1 -0
- package/dist/utils/listr.mjs +222 -0
- package/dist/utils/listr.mjs.map +1 -0
- package/dist/utils/load-aigne.cjs +77 -0
- package/dist/utils/load-aigne.d.cts +29 -0
- package/dist/utils/load-aigne.d.cts.map +1 -0
- package/dist/utils/load-aigne.d.mts +29 -0
- package/dist/utils/load-aigne.d.mts.map +1 -0
- package/dist/utils/load-aigne.mjs +74 -0
- package/dist/utils/load-aigne.mjs.map +1 -0
- package/dist/utils/run-chat-loop.cjs +90 -0
- package/dist/utils/run-chat-loop.d.cts +20 -0
- package/dist/utils/run-chat-loop.d.cts.map +1 -0
- package/dist/utils/run-chat-loop.d.mts +20 -0
- package/dist/utils/run-chat-loop.d.mts.map +1 -0
- package/dist/utils/run-chat-loop.mjs +89 -0
- package/dist/utils/run-chat-loop.mjs.map +1 -0
- package/dist/utils/run-with-aigne.cjs +131 -0
- package/dist/utils/run-with-aigne.d.cts +46 -0
- package/dist/utils/run-with-aigne.d.cts.map +1 -0
- package/dist/utils/run-with-aigne.d.mts +46 -0
- package/dist/utils/run-with-aigne.d.mts.map +1 -0
- package/dist/utils/run-with-aigne.mjs +126 -0
- package/dist/utils/run-with-aigne.mjs.map +1 -0
- package/dist/utils/serve-mcp.cjs +91 -0
- package/dist/utils/serve-mcp.d.cts +20 -0
- package/dist/utils/serve-mcp.d.cts.map +1 -0
- package/dist/utils/serve-mcp.d.mts +20 -0
- package/dist/utils/serve-mcp.d.mts.map +1 -0
- package/dist/utils/serve-mcp.mjs +89 -0
- package/dist/utils/serve-mcp.mjs.map +1 -0
- package/dist/utils/spinner.cjs +19 -0
- package/dist/utils/spinner.d.cts +5 -0
- package/dist/utils/spinner.d.cts.map +1 -0
- package/dist/utils/spinner.d.mts +5 -0
- package/dist/utils/spinner.d.mts.map +1 -0
- package/dist/utils/spinner.mjs +19 -0
- package/dist/utils/spinner.mjs.map +1 -0
- package/dist/utils/string-utils.cjs +11 -0
- package/dist/utils/string-utils.d.cts +5 -0
- package/dist/utils/string-utils.d.cts.map +1 -0
- package/dist/utils/string-utils.d.mts +5 -0
- package/dist/utils/string-utils.d.mts.map +1 -0
- package/dist/utils/string-utils.mjs +10 -0
- package/dist/utils/string-utils.mjs.map +1 -0
- package/dist/utils/time.cjs +14 -0
- package/dist/utils/time.d.cts +5 -0
- package/dist/utils/time.d.cts.map +1 -0
- package/dist/utils/time.d.mts +5 -0
- package/dist/utils/time.d.mts.map +1 -0
- package/dist/utils/time.mjs +14 -0
- package/dist/utils/time.mjs.map +1 -0
- package/dist/utils/url.cjs +8 -0
- package/dist/utils/url.d.cts +5 -0
- package/dist/utils/url.d.cts.map +1 -0
- package/dist/utils/url.d.mts +5 -0
- package/dist/utils/url.d.mts.map +1 -0
- package/dist/utils/url.mjs +8 -0
- package/dist/utils/url.mjs.map +1 -0
- package/dist/utils/yargs.cjs +191 -0
- package/dist/utils/yargs.d.cts +96 -0
- package/dist/utils/yargs.d.cts.map +1 -0
- package/dist/utils/yargs.d.mts +96 -0
- package/dist/utils/yargs.d.mts.map +1 -0
- package/dist/utils/yargs.mjs +186 -0
- package/dist/utils/yargs.mjs.map +1 -0
- package/package.json +122 -45
- package/CHANGELOG.md +0 -5019
- package/dist/bunwrapper.d.ts +0 -2
- package/dist/bunwrapper.js +0 -18
- package/dist/cli.d.ts +0 -7
- package/dist/cli.js +0 -42
- package/dist/commands/aigne.d.ts +0 -4
- package/dist/commands/aigne.js +0 -35
- package/dist/commands/app/agent.d.ts +0 -26
- package/dist/commands/app/agent.js +0 -122
- package/dist/commands/app/app.d.ts +0 -7
- package/dist/commands/app/app.js +0 -92
- package/dist/commands/app/cli.d.ts +0 -1
- package/dist/commands/app/cli.js +0 -2
- package/dist/commands/app/upgrade.d.ts +0 -54
- package/dist/commands/app/upgrade.js +0 -236
- package/dist/commands/app.d.ts +0 -4
- package/dist/commands/app.js +0 -54
- package/dist/commands/create.d.ts +0 -6
- package/dist/commands/create.js +0 -74
- package/dist/commands/deploy.d.ts +0 -11
- package/dist/commands/deploy.js +0 -255
- package/dist/commands/eval.d.ts +0 -11
- package/dist/commands/eval.js +0 -110
- package/dist/commands/hub.d.ts +0 -3
- package/dist/commands/hub.js +0 -323
- package/dist/commands/observe.d.ts +0 -7
- package/dist/commands/observe.js +0 -41
- package/dist/commands/run-skill.d.ts +0 -6
- package/dist/commands/run-skill.js +0 -102
- package/dist/commands/run.d.ts +0 -9
- package/dist/commands/run.js +0 -187
- package/dist/commands/serve-mcp.d.ts +0 -20
- package/dist/commands/serve-mcp.js +0 -67
- package/dist/commands/test.d.ts +0 -9
- package/dist/commands/test.js +0 -33
- package/dist/constants.d.ts +0 -7
- package/dist/constants.js +0 -21
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/tracer/terminal.d.ts +0 -62
- package/dist/tracer/terminal.js +0 -404
- package/dist/type.d.ts +0 -5
- package/dist/type.js +0 -1
- package/dist/ui/utils/terminal-input.d.ts +0 -19
- package/dist/ui/utils/terminal-input.js +0 -123
- package/dist/ui/utils/text-buffer.d.ts +0 -87
- package/dist/ui/utils/text-buffer.js +0 -1059
- package/dist/ui/utils/text-utils.d.ts +0 -37
- package/dist/ui/utils/text-utils.js +0 -185
- package/dist/utils/agent-v1.d.ts +0 -134
- package/dist/utils/agent-v1.js +0 -213
- package/dist/utils/aigne-hub/constants.d.ts +0 -6
- package/dist/utils/aigne-hub/constants.js +0 -12
- package/dist/utils/aigne-hub/credential.d.ts +0 -20
- package/dist/utils/aigne-hub/credential.js +0 -182
- package/dist/utils/aigne-hub/crypto.d.ts +0 -4
- package/dist/utils/aigne-hub/crypto.js +0 -30
- package/dist/utils/aigne-hub/model.d.ts +0 -13
- package/dist/utils/aigne-hub/model.js +0 -122
- package/dist/utils/aigne-hub/store/file.d.ts +0 -15
- package/dist/utils/aigne-hub/store/file.js +0 -69
- package/dist/utils/aigne-hub/store/index.d.ts +0 -5
- package/dist/utils/aigne-hub/store/index.js +0 -43
- package/dist/utils/aigne-hub/store/keytar.d.ts +0 -15
- package/dist/utils/aigne-hub/store/keytar.js +0 -67
- package/dist/utils/aigne-hub/store/migrate.d.ts +0 -2
- package/dist/utils/aigne-hub/store/migrate.js +0 -57
- package/dist/utils/aigne-hub/type.d.ts +0 -38
- package/dist/utils/aigne-hub/type.js +0 -1
- package/dist/utils/aigne-hub-user.d.ts +0 -16
- package/dist/utils/aigne-hub-user.js +0 -10
- package/dist/utils/ascii-logo.d.ts +0 -1
- package/dist/utils/download.d.ts +0 -3
- package/dist/utils/download.js +0 -19
- package/dist/utils/evaluation/core.d.ts +0 -8
- package/dist/utils/evaluation/core.js +0 -83
- package/dist/utils/evaluation/dataset.d.ts +0 -15
- package/dist/utils/evaluation/dataset.js +0 -61
- package/dist/utils/evaluation/evaluator.d.ts +0 -9
- package/dist/utils/evaluation/reporter.d.ts +0 -28
- package/dist/utils/evaluation/reporter.js +0 -221
- package/dist/utils/evaluation/runner.d.ts +0 -16
- package/dist/utils/evaluation/runner.js +0 -129
- package/dist/utils/evaluation/type.d.ts +0 -69
- package/dist/utils/evaluation/type.js +0 -1
- package/dist/utils/get-url-origin.d.ts +0 -1
- package/dist/utils/get-url-origin.js +0 -8
- package/dist/utils/inquirer/checkbox.d.ts +0 -55
- package/dist/utils/inquirer/checkbox.js +0 -319
- package/dist/utils/listr.d.ts +0 -64
- package/dist/utils/listr.js +0 -265
- package/dist/utils/load-aigne.d.ts +0 -18
- package/dist/utils/load-aigne.js +0 -80
- package/dist/utils/run-chat-loop.d.ts +0 -15
- package/dist/utils/run-chat-loop.js +0 -87
- package/dist/utils/run-with-aigne.d.ts +0 -27
- package/dist/utils/run-with-aigne.js +0 -157
- package/dist/utils/serve-mcp.d.ts +0 -9
- package/dist/utils/serve-mcp.js +0 -93
- package/dist/utils/spinner.d.ts +0 -1
- package/dist/utils/spinner.js +0 -14
- package/dist/utils/string-utils.d.ts +0 -1
- package/dist/utils/string-utils.js +0 -4
- package/dist/utils/time.d.ts +0 -1
- package/dist/utils/time.js +0 -12
- package/dist/utils/url.d.ts +0 -1
- package/dist/utils/url.js +0 -3
- package/dist/utils/yargs.d.ts +0 -94
- package/dist/utils/yargs.js +0 -210
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_constants = require('../utils/aigne-hub/constants.cjs');
|
|
3
|
+
const require_index = require('../utils/aigne-hub/store/index.cjs');
|
|
4
|
+
const require_credential = require('../utils/aigne-hub/credential.cjs');
|
|
5
|
+
const require_utils_get_url_origin = require('../utils/get-url-origin.cjs');
|
|
6
|
+
const require_utils_aigne_hub_user = require('../utils/aigne-hub-user.cjs');
|
|
7
|
+
let chalk = require("chalk");
|
|
8
|
+
chalk = require_rolldown_runtime.__toESM(chalk);
|
|
9
|
+
let _aigne_aigne_hub = require("@aigne/aigne-hub");
|
|
10
|
+
let inquirer = require("inquirer");
|
|
11
|
+
inquirer = require_rolldown_runtime.__toESM(inquirer);
|
|
12
|
+
let cli_table3 = require("cli-table3");
|
|
13
|
+
cli_table3 = require_rolldown_runtime.__toESM(cli_table3);
|
|
14
|
+
|
|
15
|
+
//#region src/commands/hub.ts
|
|
16
|
+
const formatNumber = (balance) => {
|
|
17
|
+
const balanceNum = String(balance).replace(/[^\d.-]/g, "").split(".")[0];
|
|
18
|
+
if (!balanceNum) return "0";
|
|
19
|
+
return (balanceNum || "").trim().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
20
|
+
};
|
|
21
|
+
const formatNumberWithColor = (balance) => {
|
|
22
|
+
return chalk.default.yellow(formatNumber(balance));
|
|
23
|
+
};
|
|
24
|
+
function formatHubInfoName(name) {
|
|
25
|
+
return chalk.default.bold(`${name}:`.padEnd(10));
|
|
26
|
+
}
|
|
27
|
+
function printHubStatus(data) {
|
|
28
|
+
const divider = "─".repeat(46);
|
|
29
|
+
console.log(chalk.default.bold("AIGNE Hub Connection"));
|
|
30
|
+
console.log(chalk.default.gray(divider));
|
|
31
|
+
console.log(`${chalk.default.bold("Hub:".padEnd(10))} ${data.hub}`);
|
|
32
|
+
console.log(`${chalk.default.bold("Status:".padEnd(10))} ${data.status === "Connected" ? chalk.default.green(`${data.status} ✅`) : `${data.status}`}`);
|
|
33
|
+
console.log("");
|
|
34
|
+
console.log(chalk.default.bold("User:"));
|
|
35
|
+
console.log(` ${formatHubInfoName("Name")} ${data.user.name}`);
|
|
36
|
+
console.log(` ${formatHubInfoName("DID")} ${data.user.did}`);
|
|
37
|
+
console.log(` ${formatHubInfoName("Email")} ${data.user.email}`);
|
|
38
|
+
console.log("");
|
|
39
|
+
if (data.enableCredit) {
|
|
40
|
+
console.log(chalk.default.bold("Credits:"));
|
|
41
|
+
console.log(` ${formatHubInfoName("Total")} ${formatNumberWithColor(data.credits.total)}`);
|
|
42
|
+
console.log(` ${formatHubInfoName("Used")} ${formatNumberWithColor(data.credits.used)}`);
|
|
43
|
+
console.log(` ${formatHubInfoName("Available")} ${formatNumberWithColor(data.credits.available)}`);
|
|
44
|
+
console.log("");
|
|
45
|
+
console.log(chalk.default.bold("Links:"));
|
|
46
|
+
if (data.links.payment) console.log(` ${formatHubInfoName("Payment")} ${data.links.payment}`);
|
|
47
|
+
if (data.links.profile) console.log(` ${formatHubInfoName("Credits")} ${data.links.profile}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async function getHubs() {
|
|
51
|
+
try {
|
|
52
|
+
const hosts = await (await require_index.default()).listHosts();
|
|
53
|
+
const statusList = [];
|
|
54
|
+
for (const host of hosts) statusList.push({
|
|
55
|
+
host: new URL(host.AIGNE_HUB_API_URL).host,
|
|
56
|
+
apiUrl: host.AIGNE_HUB_API_URL,
|
|
57
|
+
apiKey: host.AIGNE_HUB_API_KEY || ""
|
|
58
|
+
});
|
|
59
|
+
return statusList;
|
|
60
|
+
} catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const getDefaultHub = async () => {
|
|
65
|
+
try {
|
|
66
|
+
return (await (await require_index.default()).getDefault())?.AIGNE_HUB_API_URL || _aigne_aigne_hub.AIGNE_HUB_URL;
|
|
67
|
+
} catch {
|
|
68
|
+
return _aigne_aigne_hub.AIGNE_HUB_URL;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
async function formatHubsList(statusList) {
|
|
72
|
+
if (statusList?.length === 0) {
|
|
73
|
+
console.log(chalk.default.yellow("No AIGNE Hub connected."));
|
|
74
|
+
console.log("Use 'aigne hub connect' to connect to a hub.");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const defaultHub = await getDefaultHub();
|
|
78
|
+
const table = new cli_table3.default({
|
|
79
|
+
head: ["URL", "ACTIVE"],
|
|
80
|
+
colWidths: [70, 10],
|
|
81
|
+
style: {
|
|
82
|
+
head: ["cyan"],
|
|
83
|
+
border: ["grey"]
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
console.log(chalk.default.blue("Connected AIGNE Hubs:\n"));
|
|
87
|
+
for (const status of statusList) {
|
|
88
|
+
const isConnected = require_utils_get_url_origin.getUrlOrigin(status.apiUrl) === require_utils_get_url_origin.getUrlOrigin(defaultHub);
|
|
89
|
+
table.push([require_utils_get_url_origin.getUrlOrigin(status.apiUrl), isConnected ? "YES" : "NO"]);
|
|
90
|
+
}
|
|
91
|
+
console.log(table.toString());
|
|
92
|
+
console.log(chalk.default.blue("Use 'aigne hub use' to switch to a different hub."));
|
|
93
|
+
}
|
|
94
|
+
function createHubCommand() {
|
|
95
|
+
return {
|
|
96
|
+
command: "hub <command>",
|
|
97
|
+
describe: "Manage AIGNE Hub connections",
|
|
98
|
+
builder: (yargs) => yargs.command(["list", "ls"], "List all connected AIGNE Hubs", listHubs).command({
|
|
99
|
+
command: "connect [url]",
|
|
100
|
+
describe: "Connect to an AIGNE Hub",
|
|
101
|
+
builder: (yargs$1) => yargs$1.positional("url", {
|
|
102
|
+
type: "string",
|
|
103
|
+
describe: "The URL of the AIGNE Hub to connect to",
|
|
104
|
+
default: null
|
|
105
|
+
}),
|
|
106
|
+
handler: (args) => {
|
|
107
|
+
if (args.url) saveAndConnect(args.url);
|
|
108
|
+
else connectHub();
|
|
109
|
+
}
|
|
110
|
+
}).command("use", "Switch to a different AIGNE Hub", useHub).command(["status", "st"], "Show details of a connected hub", showInfo).command(["remove", "rm"], "Remove a connected hub", removeHub).demandCommand(1, "Please provide a valid hub command"),
|
|
111
|
+
handler: () => {}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const listHubs = async () => {
|
|
115
|
+
await formatHubsList(await getHubs());
|
|
116
|
+
};
|
|
117
|
+
async function connectHub() {
|
|
118
|
+
const defaultUrl = "https://hub.aigne.io";
|
|
119
|
+
const { isOfficial } = await inquirer.default.prompt({
|
|
120
|
+
type: "select",
|
|
121
|
+
name: "isOfficial",
|
|
122
|
+
message: `Choose a hub to connect:`,
|
|
123
|
+
choices: [{
|
|
124
|
+
name: `Official Hub (${defaultUrl})`,
|
|
125
|
+
value: true
|
|
126
|
+
}, {
|
|
127
|
+
name: `Custom Hub URL`,
|
|
128
|
+
value: false
|
|
129
|
+
}],
|
|
130
|
+
default: true
|
|
131
|
+
});
|
|
132
|
+
let currentUrl = defaultUrl;
|
|
133
|
+
if (!isOfficial) {
|
|
134
|
+
const { customUrl } = await inquirer.default.prompt({
|
|
135
|
+
type: "input",
|
|
136
|
+
name: "customUrl",
|
|
137
|
+
message: "Enter the URL of your AIGNE Hub:",
|
|
138
|
+
validate: validateUrl
|
|
139
|
+
});
|
|
140
|
+
currentUrl = customUrl;
|
|
141
|
+
}
|
|
142
|
+
await saveAndConnect(currentUrl);
|
|
143
|
+
}
|
|
144
|
+
async function useHub() {
|
|
145
|
+
const hubs = await getHubs();
|
|
146
|
+
if (!hubs.length) {
|
|
147
|
+
console.log(chalk.default.yellow("No AIGNE Hub connected."));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const { hubApiKey } = await inquirer.default.prompt({
|
|
151
|
+
type: "select",
|
|
152
|
+
name: "hubApiKey",
|
|
153
|
+
message: `Choose a hub to switch to:`,
|
|
154
|
+
choices: hubs.map((h) => ({
|
|
155
|
+
name: require_utils_get_url_origin.getUrlOrigin(h.apiUrl),
|
|
156
|
+
value: h.apiUrl
|
|
157
|
+
}))
|
|
158
|
+
});
|
|
159
|
+
await setDefaultHub(hubApiKey);
|
|
160
|
+
}
|
|
161
|
+
async function removeHub() {
|
|
162
|
+
const hubs = await getHubs();
|
|
163
|
+
if (!hubs.length) {
|
|
164
|
+
console.log(chalk.default.yellow("No AIGNE Hub connected."));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const { hubApiKey } = await inquirer.default.prompt({
|
|
168
|
+
type: "select",
|
|
169
|
+
name: "hubApiKey",
|
|
170
|
+
message: `Choose a hub to remove:`,
|
|
171
|
+
choices: hubs.map((h) => ({
|
|
172
|
+
name: require_utils_get_url_origin.getUrlOrigin(h.apiUrl),
|
|
173
|
+
value: h.apiUrl
|
|
174
|
+
}))
|
|
175
|
+
});
|
|
176
|
+
await deleteHub(hubApiKey);
|
|
177
|
+
}
|
|
178
|
+
async function showInfo() {
|
|
179
|
+
const hubs = await getHubs();
|
|
180
|
+
if (!hubs.length) {
|
|
181
|
+
console.log(chalk.default.yellow("No AIGNE Hub connected."));
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const defaultHub = await getDefaultHub();
|
|
185
|
+
const defaultHubIndex = hubs.findIndex((h) => require_utils_get_url_origin.getUrlOrigin(h.apiUrl) === require_utils_get_url_origin.getUrlOrigin(defaultHub));
|
|
186
|
+
const { hubApiKey } = await inquirer.default.prompt({
|
|
187
|
+
type: "select",
|
|
188
|
+
name: "hubApiKey",
|
|
189
|
+
message: `Choose a hub to view info:`,
|
|
190
|
+
choices: hubs.map((h, index) => ({
|
|
191
|
+
name: `${require_utils_get_url_origin.getUrlOrigin(h.apiUrl)} ${defaultHubIndex === index ? "(connected)" : ""}`,
|
|
192
|
+
value: h.apiUrl
|
|
193
|
+
}))
|
|
194
|
+
});
|
|
195
|
+
try {
|
|
196
|
+
await printHubDetails(hubApiKey);
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error(chalk.default.red("✗ Failed to print hub details:"), error.message);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function validateUrl(input) {
|
|
202
|
+
try {
|
|
203
|
+
return new URL(input).protocol.startsWith("http") ? true : "Must be http or https";
|
|
204
|
+
} catch {
|
|
205
|
+
return "Invalid URL";
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function saveAndConnect(url) {
|
|
209
|
+
const secretStore = await require_index.default();
|
|
210
|
+
const currentKey = await secretStore.getKey(url);
|
|
211
|
+
if (currentKey?.AIGNE_HUB_API_URL) {
|
|
212
|
+
await setDefaultHub(currentKey.AIGNE_HUB_API_URL);
|
|
213
|
+
console.log(chalk.default.green(`✓ Hub ${require_utils_get_url_origin.getUrlOrigin(currentKey.AIGNE_HUB_API_URL)} connected successfully.`));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
if (require_constants.isTest) {
|
|
218
|
+
await secretStore.setKey("https://hub.aigne.io/ai-kit", "test-key");
|
|
219
|
+
await secretStore.setDefault("https://hub.aigne.io/ai-kit");
|
|
220
|
+
console.log(chalk.default.green(`✓ Hub https://hub.aigne.io/ai-kit connected successfully.`));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
await require_credential.connectToAIGNEHub(url);
|
|
224
|
+
console.log(chalk.default.green(`✓ Hub ${require_utils_get_url_origin.getUrlOrigin(url)} connected successfully.`));
|
|
225
|
+
} catch (error) {
|
|
226
|
+
console.error(chalk.default.red("✗ Failed to connect:"), error.message);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function setDefaultHub(url) {
|
|
230
|
+
try {
|
|
231
|
+
const secretStore = await require_index.default();
|
|
232
|
+
const key = await secretStore.getKey(url);
|
|
233
|
+
if (!key) {
|
|
234
|
+
console.error(chalk.default.red("✗ Hub not found"));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
await secretStore.setDefault(key.AIGNE_HUB_API_URL);
|
|
238
|
+
console.log(chalk.default.green(`✓ Switched active hub to ${require_utils_get_url_origin.getUrlOrigin(url)}`));
|
|
239
|
+
} catch {
|
|
240
|
+
console.error(chalk.default.red("✗ Failed to set default hub"));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async function deleteHub(url) {
|
|
244
|
+
try {
|
|
245
|
+
const secretStore = await require_index.default();
|
|
246
|
+
if (!await secretStore.getKey(url)) {
|
|
247
|
+
console.error(chalk.default.red("✗ Hub not found"));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const defaultHub = await getDefaultHub();
|
|
251
|
+
await secretStore.deleteKey(url);
|
|
252
|
+
if (!defaultHub) return;
|
|
253
|
+
if (require_utils_get_url_origin.getUrlOrigin(url) === require_utils_get_url_origin.getUrlOrigin(defaultHub)) {
|
|
254
|
+
await secretStore.deleteDefault();
|
|
255
|
+
const nextHub = (await getHubs())[0];
|
|
256
|
+
if (nextHub) {
|
|
257
|
+
await secretStore.setDefault(nextHub?.apiUrl);
|
|
258
|
+
console.log(chalk.default.green(`✓ Hub ${require_utils_get_url_origin.getUrlOrigin(url)} removed, switched to ${require_utils_get_url_origin.getUrlOrigin(nextHub?.apiUrl)}`));
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
console.log(chalk.default.green(`✓ Hub ${require_utils_get_url_origin.getUrlOrigin(url)} removed`));
|
|
263
|
+
} catch {
|
|
264
|
+
console.error(chalk.default.red("✗ Failed to delete hub"));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async function printHubDetails(url) {
|
|
268
|
+
const key = await (await require_index.default()).getKey(url);
|
|
269
|
+
const defaultHub = await getDefaultHub();
|
|
270
|
+
const isDefault = require_utils_get_url_origin.getUrlOrigin(url) === require_utils_get_url_origin.getUrlOrigin(defaultHub);
|
|
271
|
+
const userInfo = await require_utils_aigne_hub_user.getUserInfo({
|
|
272
|
+
baseUrl: key?.AIGNE_HUB_API_URL || "",
|
|
273
|
+
apiKey: key?.AIGNE_HUB_API_KEY || ""
|
|
274
|
+
}).catch(() => null);
|
|
275
|
+
printHubStatus({
|
|
276
|
+
hub: require_utils_get_url_origin.getUrlOrigin(url),
|
|
277
|
+
status: isDefault ? "Connected" : "Not Used",
|
|
278
|
+
user: {
|
|
279
|
+
name: userInfo?.user.fullName || "",
|
|
280
|
+
did: userInfo?.user.did || "",
|
|
281
|
+
email: userInfo?.user.email || ""
|
|
282
|
+
},
|
|
283
|
+
credits: {
|
|
284
|
+
available: userInfo?.creditBalance?.balance || "0",
|
|
285
|
+
total: userInfo?.creditBalance?.total || "0",
|
|
286
|
+
used: String(parseFloat(userInfo?.creditBalance?.total || "0") - parseFloat(userInfo?.creditBalance?.balance || "0"))
|
|
287
|
+
},
|
|
288
|
+
links: {
|
|
289
|
+
payment: userInfo?.paymentLink || "",
|
|
290
|
+
profile: userInfo?.profileLink || ""
|
|
291
|
+
},
|
|
292
|
+
enableCredit: userInfo?.enableCredit || false
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
//#endregion
|
|
297
|
+
exports.createHubCommand = createHubCommand;
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { isTest } from "../utils/aigne-hub/constants.mjs";
|
|
2
|
+
import store_default from "../utils/aigne-hub/store/index.mjs";
|
|
3
|
+
import { connectToAIGNEHub } from "../utils/aigne-hub/credential.mjs";
|
|
4
|
+
import { getUrlOrigin } from "../utils/get-url-origin.mjs";
|
|
5
|
+
import { getUserInfo } from "../utils/aigne-hub-user.mjs";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { AIGNE_HUB_URL } from "@aigne/aigne-hub";
|
|
8
|
+
import inquirer from "inquirer";
|
|
9
|
+
import Table from "cli-table3";
|
|
10
|
+
|
|
11
|
+
//#region src/commands/hub.ts
|
|
12
|
+
const formatNumber = (balance) => {
|
|
13
|
+
const balanceNum = String(balance).replace(/[^\d.-]/g, "").split(".")[0];
|
|
14
|
+
if (!balanceNum) return "0";
|
|
15
|
+
return (balanceNum || "").trim().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
16
|
+
};
|
|
17
|
+
const formatNumberWithColor = (balance) => {
|
|
18
|
+
return chalk.yellow(formatNumber(balance));
|
|
19
|
+
};
|
|
20
|
+
function formatHubInfoName(name) {
|
|
21
|
+
return chalk.bold(`${name}:`.padEnd(10));
|
|
22
|
+
}
|
|
23
|
+
function printHubStatus(data) {
|
|
24
|
+
const divider = "─".repeat(46);
|
|
25
|
+
console.log(chalk.bold("AIGNE Hub Connection"));
|
|
26
|
+
console.log(chalk.gray(divider));
|
|
27
|
+
console.log(`${chalk.bold("Hub:".padEnd(10))} ${data.hub}`);
|
|
28
|
+
console.log(`${chalk.bold("Status:".padEnd(10))} ${data.status === "Connected" ? chalk.green(`${data.status} ✅`) : `${data.status}`}`);
|
|
29
|
+
console.log("");
|
|
30
|
+
console.log(chalk.bold("User:"));
|
|
31
|
+
console.log(` ${formatHubInfoName("Name")} ${data.user.name}`);
|
|
32
|
+
console.log(` ${formatHubInfoName("DID")} ${data.user.did}`);
|
|
33
|
+
console.log(` ${formatHubInfoName("Email")} ${data.user.email}`);
|
|
34
|
+
console.log("");
|
|
35
|
+
if (data.enableCredit) {
|
|
36
|
+
console.log(chalk.bold("Credits:"));
|
|
37
|
+
console.log(` ${formatHubInfoName("Total")} ${formatNumberWithColor(data.credits.total)}`);
|
|
38
|
+
console.log(` ${formatHubInfoName("Used")} ${formatNumberWithColor(data.credits.used)}`);
|
|
39
|
+
console.log(` ${formatHubInfoName("Available")} ${formatNumberWithColor(data.credits.available)}`);
|
|
40
|
+
console.log("");
|
|
41
|
+
console.log(chalk.bold("Links:"));
|
|
42
|
+
if (data.links.payment) console.log(` ${formatHubInfoName("Payment")} ${data.links.payment}`);
|
|
43
|
+
if (data.links.profile) console.log(` ${formatHubInfoName("Credits")} ${data.links.profile}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function getHubs() {
|
|
47
|
+
try {
|
|
48
|
+
const hosts = await (await store_default()).listHosts();
|
|
49
|
+
const statusList = [];
|
|
50
|
+
for (const host of hosts) statusList.push({
|
|
51
|
+
host: new URL(host.AIGNE_HUB_API_URL).host,
|
|
52
|
+
apiUrl: host.AIGNE_HUB_API_URL,
|
|
53
|
+
apiKey: host.AIGNE_HUB_API_KEY || ""
|
|
54
|
+
});
|
|
55
|
+
return statusList;
|
|
56
|
+
} catch {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const getDefaultHub = async () => {
|
|
61
|
+
try {
|
|
62
|
+
return (await (await store_default()).getDefault())?.AIGNE_HUB_API_URL || AIGNE_HUB_URL;
|
|
63
|
+
} catch {
|
|
64
|
+
return AIGNE_HUB_URL;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
async function formatHubsList(statusList) {
|
|
68
|
+
if (statusList?.length === 0) {
|
|
69
|
+
console.log(chalk.yellow("No AIGNE Hub connected."));
|
|
70
|
+
console.log("Use 'aigne hub connect' to connect to a hub.");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const defaultHub = await getDefaultHub();
|
|
74
|
+
const table = new Table({
|
|
75
|
+
head: ["URL", "ACTIVE"],
|
|
76
|
+
colWidths: [70, 10],
|
|
77
|
+
style: {
|
|
78
|
+
head: ["cyan"],
|
|
79
|
+
border: ["grey"]
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
console.log(chalk.blue("Connected AIGNE Hubs:\n"));
|
|
83
|
+
for (const status of statusList) {
|
|
84
|
+
const isConnected = getUrlOrigin(status.apiUrl) === getUrlOrigin(defaultHub);
|
|
85
|
+
table.push([getUrlOrigin(status.apiUrl), isConnected ? "YES" : "NO"]);
|
|
86
|
+
}
|
|
87
|
+
console.log(table.toString());
|
|
88
|
+
console.log(chalk.blue("Use 'aigne hub use' to switch to a different hub."));
|
|
89
|
+
}
|
|
90
|
+
function createHubCommand() {
|
|
91
|
+
return {
|
|
92
|
+
command: "hub <command>",
|
|
93
|
+
describe: "Manage AIGNE Hub connections",
|
|
94
|
+
builder: (yargs) => yargs.command(["list", "ls"], "List all connected AIGNE Hubs", listHubs).command({
|
|
95
|
+
command: "connect [url]",
|
|
96
|
+
describe: "Connect to an AIGNE Hub",
|
|
97
|
+
builder: (yargs$1) => yargs$1.positional("url", {
|
|
98
|
+
type: "string",
|
|
99
|
+
describe: "The URL of the AIGNE Hub to connect to",
|
|
100
|
+
default: null
|
|
101
|
+
}),
|
|
102
|
+
handler: (args) => {
|
|
103
|
+
if (args.url) saveAndConnect(args.url);
|
|
104
|
+
else connectHub();
|
|
105
|
+
}
|
|
106
|
+
}).command("use", "Switch to a different AIGNE Hub", useHub).command(["status", "st"], "Show details of a connected hub", showInfo).command(["remove", "rm"], "Remove a connected hub", removeHub).demandCommand(1, "Please provide a valid hub command"),
|
|
107
|
+
handler: () => {}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const listHubs = async () => {
|
|
111
|
+
await formatHubsList(await getHubs());
|
|
112
|
+
};
|
|
113
|
+
async function connectHub() {
|
|
114
|
+
const defaultUrl = "https://hub.aigne.io";
|
|
115
|
+
const { isOfficial } = await inquirer.prompt({
|
|
116
|
+
type: "select",
|
|
117
|
+
name: "isOfficial",
|
|
118
|
+
message: `Choose a hub to connect:`,
|
|
119
|
+
choices: [{
|
|
120
|
+
name: `Official Hub (${defaultUrl})`,
|
|
121
|
+
value: true
|
|
122
|
+
}, {
|
|
123
|
+
name: `Custom Hub URL`,
|
|
124
|
+
value: false
|
|
125
|
+
}],
|
|
126
|
+
default: true
|
|
127
|
+
});
|
|
128
|
+
let currentUrl = defaultUrl;
|
|
129
|
+
if (!isOfficial) {
|
|
130
|
+
const { customUrl } = await inquirer.prompt({
|
|
131
|
+
type: "input",
|
|
132
|
+
name: "customUrl",
|
|
133
|
+
message: "Enter the URL of your AIGNE Hub:",
|
|
134
|
+
validate: validateUrl
|
|
135
|
+
});
|
|
136
|
+
currentUrl = customUrl;
|
|
137
|
+
}
|
|
138
|
+
await saveAndConnect(currentUrl);
|
|
139
|
+
}
|
|
140
|
+
async function useHub() {
|
|
141
|
+
const hubs = await getHubs();
|
|
142
|
+
if (!hubs.length) {
|
|
143
|
+
console.log(chalk.yellow("No AIGNE Hub connected."));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const { hubApiKey } = await inquirer.prompt({
|
|
147
|
+
type: "select",
|
|
148
|
+
name: "hubApiKey",
|
|
149
|
+
message: `Choose a hub to switch to:`,
|
|
150
|
+
choices: hubs.map((h) => ({
|
|
151
|
+
name: getUrlOrigin(h.apiUrl),
|
|
152
|
+
value: h.apiUrl
|
|
153
|
+
}))
|
|
154
|
+
});
|
|
155
|
+
await setDefaultHub(hubApiKey);
|
|
156
|
+
}
|
|
157
|
+
async function removeHub() {
|
|
158
|
+
const hubs = await getHubs();
|
|
159
|
+
if (!hubs.length) {
|
|
160
|
+
console.log(chalk.yellow("No AIGNE Hub connected."));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const { hubApiKey } = await inquirer.prompt({
|
|
164
|
+
type: "select",
|
|
165
|
+
name: "hubApiKey",
|
|
166
|
+
message: `Choose a hub to remove:`,
|
|
167
|
+
choices: hubs.map((h) => ({
|
|
168
|
+
name: getUrlOrigin(h.apiUrl),
|
|
169
|
+
value: h.apiUrl
|
|
170
|
+
}))
|
|
171
|
+
});
|
|
172
|
+
await deleteHub(hubApiKey);
|
|
173
|
+
}
|
|
174
|
+
async function showInfo() {
|
|
175
|
+
const hubs = await getHubs();
|
|
176
|
+
if (!hubs.length) {
|
|
177
|
+
console.log(chalk.yellow("No AIGNE Hub connected."));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const defaultHub = await getDefaultHub();
|
|
181
|
+
const defaultHubIndex = hubs.findIndex((h) => getUrlOrigin(h.apiUrl) === getUrlOrigin(defaultHub));
|
|
182
|
+
const { hubApiKey } = await inquirer.prompt({
|
|
183
|
+
type: "select",
|
|
184
|
+
name: "hubApiKey",
|
|
185
|
+
message: `Choose a hub to view info:`,
|
|
186
|
+
choices: hubs.map((h, index) => ({
|
|
187
|
+
name: `${getUrlOrigin(h.apiUrl)} ${defaultHubIndex === index ? "(connected)" : ""}`,
|
|
188
|
+
value: h.apiUrl
|
|
189
|
+
}))
|
|
190
|
+
});
|
|
191
|
+
try {
|
|
192
|
+
await printHubDetails(hubApiKey);
|
|
193
|
+
} catch (error) {
|
|
194
|
+
console.error(chalk.red("✗ Failed to print hub details:"), error.message);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function validateUrl(input) {
|
|
198
|
+
try {
|
|
199
|
+
return new URL(input).protocol.startsWith("http") ? true : "Must be http or https";
|
|
200
|
+
} catch {
|
|
201
|
+
return "Invalid URL";
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async function saveAndConnect(url) {
|
|
205
|
+
const secretStore = await store_default();
|
|
206
|
+
const currentKey = await secretStore.getKey(url);
|
|
207
|
+
if (currentKey?.AIGNE_HUB_API_URL) {
|
|
208
|
+
await setDefaultHub(currentKey.AIGNE_HUB_API_URL);
|
|
209
|
+
console.log(chalk.green(`✓ Hub ${getUrlOrigin(currentKey.AIGNE_HUB_API_URL)} connected successfully.`));
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
if (isTest) {
|
|
214
|
+
await secretStore.setKey("https://hub.aigne.io/ai-kit", "test-key");
|
|
215
|
+
await secretStore.setDefault("https://hub.aigne.io/ai-kit");
|
|
216
|
+
console.log(chalk.green(`✓ Hub https://hub.aigne.io/ai-kit connected successfully.`));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
await connectToAIGNEHub(url);
|
|
220
|
+
console.log(chalk.green(`✓ Hub ${getUrlOrigin(url)} connected successfully.`));
|
|
221
|
+
} catch (error) {
|
|
222
|
+
console.error(chalk.red("✗ Failed to connect:"), error.message);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function setDefaultHub(url) {
|
|
226
|
+
try {
|
|
227
|
+
const secretStore = await store_default();
|
|
228
|
+
const key = await secretStore.getKey(url);
|
|
229
|
+
if (!key) {
|
|
230
|
+
console.error(chalk.red("✗ Hub not found"));
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
await secretStore.setDefault(key.AIGNE_HUB_API_URL);
|
|
234
|
+
console.log(chalk.green(`✓ Switched active hub to ${getUrlOrigin(url)}`));
|
|
235
|
+
} catch {
|
|
236
|
+
console.error(chalk.red("✗ Failed to set default hub"));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async function deleteHub(url) {
|
|
240
|
+
try {
|
|
241
|
+
const secretStore = await store_default();
|
|
242
|
+
if (!await secretStore.getKey(url)) {
|
|
243
|
+
console.error(chalk.red("✗ Hub not found"));
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const defaultHub = await getDefaultHub();
|
|
247
|
+
await secretStore.deleteKey(url);
|
|
248
|
+
if (!defaultHub) return;
|
|
249
|
+
if (getUrlOrigin(url) === getUrlOrigin(defaultHub)) {
|
|
250
|
+
await secretStore.deleteDefault();
|
|
251
|
+
const nextHub = (await getHubs())[0];
|
|
252
|
+
if (nextHub) {
|
|
253
|
+
await secretStore.setDefault(nextHub?.apiUrl);
|
|
254
|
+
console.log(chalk.green(`✓ Hub ${getUrlOrigin(url)} removed, switched to ${getUrlOrigin(nextHub?.apiUrl)}`));
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
console.log(chalk.green(`✓ Hub ${getUrlOrigin(url)} removed`));
|
|
259
|
+
} catch {
|
|
260
|
+
console.error(chalk.red("✗ Failed to delete hub"));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async function printHubDetails(url) {
|
|
264
|
+
const key = await (await store_default()).getKey(url);
|
|
265
|
+
const defaultHub = await getDefaultHub();
|
|
266
|
+
const isDefault = getUrlOrigin(url) === getUrlOrigin(defaultHub);
|
|
267
|
+
const userInfo = await getUserInfo({
|
|
268
|
+
baseUrl: key?.AIGNE_HUB_API_URL || "",
|
|
269
|
+
apiKey: key?.AIGNE_HUB_API_KEY || ""
|
|
270
|
+
}).catch(() => null);
|
|
271
|
+
printHubStatus({
|
|
272
|
+
hub: getUrlOrigin(url),
|
|
273
|
+
status: isDefault ? "Connected" : "Not Used",
|
|
274
|
+
user: {
|
|
275
|
+
name: userInfo?.user.fullName || "",
|
|
276
|
+
did: userInfo?.user.did || "",
|
|
277
|
+
email: userInfo?.user.email || ""
|
|
278
|
+
},
|
|
279
|
+
credits: {
|
|
280
|
+
available: userInfo?.creditBalance?.balance || "0",
|
|
281
|
+
total: userInfo?.creditBalance?.total || "0",
|
|
282
|
+
used: String(parseFloat(userInfo?.creditBalance?.total || "0") - parseFloat(userInfo?.creditBalance?.balance || "0"))
|
|
283
|
+
},
|
|
284
|
+
links: {
|
|
285
|
+
payment: userInfo?.paymentLink || "",
|
|
286
|
+
profile: userInfo?.profileLink || ""
|
|
287
|
+
},
|
|
288
|
+
enableCredit: userInfo?.enableCredit || false
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
//#endregion
|
|
293
|
+
export { createHubCommand };
|
|
294
|
+
//# sourceMappingURL=hub.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.mjs","names":["getSecretStore","yargs"],"sources":["../../src/commands/hub.ts"],"sourcesContent":["import { AIGNE_HUB_URL } from \"@aigne/aigne-hub\";\nimport chalk from \"chalk\";\nimport Table from \"cli-table3\";\nimport inquirer from \"inquirer\";\nimport type { CommandModule } from \"yargs\";\nimport { isTest } from \"../utils/aigne-hub/constants.js\";\nimport { connectToAIGNEHub } from \"../utils/aigne-hub/credential.js\";\nimport getSecretStore from \"../utils/aigne-hub/store/index.js\";\nimport { getUserInfo } from \"../utils/aigne-hub-user.js\";\nimport { getUrlOrigin } from \"../utils/get-url-origin.js\";\n\ninterface StatusInfo {\n host: string;\n apiUrl: string;\n apiKey: string;\n}\n\nexport const formatNumber = (balance: string) => {\n const cleanNumber = String(balance).replace(/[^\\d.-]/g, \"\");\n const balanceNum = cleanNumber.split(\".\")[0];\n\n if (!balanceNum) {\n return \"0\";\n }\n\n return (balanceNum || \"\").trim().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\nconst formatNumberWithColor = (balance: string) => {\n return chalk.yellow(formatNumber(balance));\n};\n\nfunction formatHubInfoName(name: string) {\n return chalk.bold(`${name}:`.padEnd(10));\n}\n\nfunction printHubStatus(data: {\n hub: string;\n status: string;\n user: {\n name: string;\n did: string;\n email: string;\n };\n credits: {\n available: string;\n used: string;\n total: string;\n };\n links: {\n payment: string;\n profile: string;\n };\n enableCredit: boolean;\n}) {\n const divider = \"─\".repeat(46);\n\n console.log(chalk.bold(\"AIGNE Hub Connection\"));\n console.log(chalk.gray(divider));\n\n console.log(`${chalk.bold(\"Hub:\".padEnd(10))} ${data.hub}`);\n console.log(\n `${chalk.bold(\"Status:\".padEnd(10))} ${\n data.status === \"Connected\" ? chalk.green(`${data.status} ✅`) : `${data.status}`\n }`,\n );\n console.log(\"\");\n\n console.log(chalk.bold(\"User:\"));\n console.log(` ${formatHubInfoName(\"Name\")} ${data.user.name}`);\n console.log(` ${formatHubInfoName(\"DID\")} ${data.user.did}`);\n console.log(` ${formatHubInfoName(\"Email\")} ${data.user.email}`);\n console.log(\"\");\n\n if (data.enableCredit) {\n console.log(chalk.bold(\"Credits:\"));\n console.log(` ${formatHubInfoName(\"Total\")} ${formatNumberWithColor(data.credits.total)}`);\n console.log(` ${formatHubInfoName(\"Used\")} ${formatNumberWithColor(data.credits.used)}`);\n console.log(\n ` ${formatHubInfoName(\"Available\")} ${formatNumberWithColor(data.credits.available)}`,\n );\n console.log(\"\");\n\n console.log(chalk.bold(\"Links:\"));\n if (data.links.payment) {\n console.log(` ${formatHubInfoName(\"Payment\")} ${data.links.payment}`);\n }\n if (data.links.profile) {\n console.log(` ${formatHubInfoName(\"Credits\")} ${data.links.profile}`);\n }\n }\n}\n\nasync function getHubs(): Promise<StatusInfo[]> {\n try {\n const secretStore = await getSecretStore();\n const hosts = await secretStore.listHosts();\n\n const statusList: StatusInfo[] = [];\n for (const host of hosts) {\n statusList.push({\n host: new URL(host.AIGNE_HUB_API_URL).host,\n apiUrl: host.AIGNE_HUB_API_URL,\n apiKey: host.AIGNE_HUB_API_KEY || \"\",\n });\n }\n\n return statusList;\n } catch {\n return [];\n }\n}\n\nconst getDefaultHub = async () => {\n try {\n const secretStore = await getSecretStore();\n const defaultHost = await secretStore.getDefault();\n return defaultHost?.AIGNE_HUB_API_URL || AIGNE_HUB_URL;\n } catch {\n return AIGNE_HUB_URL;\n }\n};\n\nasync function formatHubsList(statusList: StatusInfo[]) {\n if (statusList?.length === 0) {\n console.log(chalk.yellow(\"No AIGNE Hub connected.\"));\n console.log(\"Use 'aigne hub connect' to connect to a hub.\");\n return;\n }\n\n const defaultHub = await getDefaultHub();\n\n const table = new Table({\n head: [\"URL\", \"ACTIVE\"],\n colWidths: [70, 10],\n style: {\n head: [\"cyan\"],\n border: [\"grey\"],\n },\n });\n\n console.log(chalk.blue(\"Connected AIGNE Hubs:\\n\"));\n\n for (const status of statusList) {\n const isConnected = getUrlOrigin(status.apiUrl) === getUrlOrigin(defaultHub);\n table.push([getUrlOrigin(status.apiUrl), isConnected ? \"YES\" : \"NO\"]);\n }\n\n console.log(table.toString());\n console.log(chalk.blue(\"Use 'aigne hub use' to switch to a different hub.\"));\n}\n\nexport function createHubCommand(): CommandModule {\n return {\n command: \"hub <command>\",\n describe: \"Manage AIGNE Hub connections\",\n builder: (yargs) =>\n yargs\n .command([\"list\", \"ls\"], \"List all connected AIGNE Hubs\", listHubs)\n .command({\n command: \"connect [url]\",\n describe: \"Connect to an AIGNE Hub\",\n builder: (yargs) =>\n yargs.positional(\"url\", {\n type: \"string\",\n describe: \"The URL of the AIGNE Hub to connect to\",\n default: null,\n }),\n handler: (args) => {\n if (args.url) {\n saveAndConnect(args.url);\n } else {\n connectHub();\n }\n },\n })\n .command(\"use\", \"Switch to a different AIGNE Hub\", useHub)\n .command([\"status\", \"st\"], \"Show details of a connected hub\", showInfo)\n .command([\"remove\", \"rm\"], \"Remove a connected hub\", removeHub)\n .demandCommand(1, \"Please provide a valid hub command\"),\n handler: () => {},\n };\n}\n\nconst listHubs = async () => {\n const list = await getHubs();\n await formatHubsList(list);\n};\n\nasync function connectHub() {\n const defaultUrl = \"https://hub.aigne.io\";\n const { isOfficial } = await inquirer.prompt({\n type: \"select\",\n name: \"isOfficial\",\n message: `Choose a hub to connect:`,\n choices: [\n { name: `Official Hub (${defaultUrl})`, value: true },\n { name: `Custom Hub URL`, value: false },\n ],\n default: true,\n });\n\n let currentUrl = defaultUrl;\n if (!isOfficial) {\n const { customUrl } = await inquirer.prompt({\n type: \"input\",\n name: \"customUrl\",\n message: \"Enter the URL of your AIGNE Hub:\",\n validate: validateUrl,\n });\n currentUrl = customUrl;\n }\n\n await saveAndConnect(currentUrl);\n}\n\nasync function useHub() {\n const hubs = await getHubs();\n\n if (!hubs.length) {\n console.log(chalk.yellow(\"No AIGNE Hub connected.\"));\n return;\n }\n\n const { hubApiKey } = await inquirer.prompt({\n type: \"select\",\n name: \"hubApiKey\",\n message: `Choose a hub to switch to:`,\n choices: hubs.map((h) => ({\n name: getUrlOrigin(h.apiUrl),\n value: h.apiUrl,\n })),\n });\n\n await setDefaultHub(hubApiKey);\n}\n\nasync function removeHub() {\n const hubs = await getHubs();\n if (!hubs.length) {\n console.log(chalk.yellow(\"No AIGNE Hub connected.\"));\n return;\n }\n\n const { hubApiKey } = await inquirer.prompt({\n type: \"select\",\n name: \"hubApiKey\",\n message: `Choose a hub to remove:`,\n choices: hubs.map((h) => ({\n name: getUrlOrigin(h.apiUrl),\n value: h.apiUrl,\n })),\n });\n\n await deleteHub(hubApiKey);\n}\n\nasync function showInfo() {\n const hubs = await getHubs();\n if (!hubs.length) {\n console.log(chalk.yellow(\"No AIGNE Hub connected.\"));\n return;\n }\n\n const defaultHub = await getDefaultHub();\n const defaultHubIndex = hubs.findIndex(\n (h) => getUrlOrigin(h.apiUrl) === getUrlOrigin(defaultHub),\n );\n\n const { hubApiKey } = await inquirer.prompt({\n type: \"select\",\n name: \"hubApiKey\",\n message: `Choose a hub to view info:`,\n choices: hubs.map((h, index) => ({\n name: `${getUrlOrigin(h.apiUrl)} ${defaultHubIndex === index ? \"(connected)\" : \"\"}`,\n value: h.apiUrl,\n })),\n });\n\n try {\n await printHubDetails(hubApiKey);\n } catch (error: any) {\n console.error(chalk.red(\"✗ Failed to print hub details:\"), error.message);\n }\n}\n\nfunction validateUrl(input: string) {\n try {\n const url = new URL(input);\n return url.protocol.startsWith(\"http\") ? true : \"Must be http or https\";\n } catch {\n return \"Invalid URL\";\n }\n}\n\nasync function saveAndConnect(url: string) {\n const secretStore = await getSecretStore();\n const currentKey = await secretStore.getKey(url);\n\n if (currentKey?.AIGNE_HUB_API_URL) {\n await setDefaultHub(currentKey.AIGNE_HUB_API_URL);\n console.log(\n chalk.green(`✓ Hub ${getUrlOrigin(currentKey.AIGNE_HUB_API_URL)} connected successfully.`),\n );\n return;\n }\n\n try {\n if (isTest) {\n await secretStore.setKey(\"https://hub.aigne.io/ai-kit\", \"test-key\");\n await secretStore.setDefault(\"https://hub.aigne.io/ai-kit\");\n console.log(chalk.green(`✓ Hub https://hub.aigne.io/ai-kit connected successfully.`));\n return;\n }\n\n await connectToAIGNEHub(url);\n console.log(chalk.green(`✓ Hub ${getUrlOrigin(url)} connected successfully.`));\n } catch (error: any) {\n console.error(chalk.red(\"✗ Failed to connect:\"), error.message);\n }\n}\n\nasync function setDefaultHub(url: string) {\n try {\n const secretStore = await getSecretStore();\n const key = await secretStore.getKey(url);\n\n if (!key) {\n console.error(chalk.red(\"✗ Hub not found\"));\n return;\n }\n\n await secretStore.setDefault(key.AIGNE_HUB_API_URL);\n console.log(chalk.green(`✓ Switched active hub to ${getUrlOrigin(url)}`));\n } catch {\n console.error(chalk.red(\"✗ Failed to set default hub\"));\n }\n}\n\nasync function deleteHub(url: string) {\n try {\n const secretStore = await getSecretStore();\n const key = await secretStore.getKey(url);\n\n if (!key) {\n console.error(chalk.red(\"✗ Hub not found\"));\n return;\n }\n\n const defaultHub = await getDefaultHub();\n\n await secretStore.deleteKey(url);\n\n if (!defaultHub) {\n return;\n }\n\n const isDefaultHub = getUrlOrigin(url) === getUrlOrigin(defaultHub);\n if (isDefaultHub) {\n await secretStore.deleteDefault();\n const remainingHubs = await getHubs();\n\n const nextHub = remainingHubs[0];\n if (nextHub) {\n await secretStore.setDefault(nextHub?.apiUrl);\n\n console.log(\n chalk.green(\n `✓ Hub ${getUrlOrigin(url)} removed, switched to ${getUrlOrigin(nextHub?.apiUrl)}`,\n ),\n );\n return;\n }\n }\n\n console.log(chalk.green(`✓ Hub ${getUrlOrigin(url)} removed`));\n } catch {\n console.error(chalk.red(\"✗ Failed to delete hub\"));\n }\n}\n\nasync function printHubDetails(url: string) {\n const secretStore = await getSecretStore();\n const key = await secretStore.getKey(url);\n const defaultHub = await getDefaultHub();\n const isDefault = getUrlOrigin(url) === getUrlOrigin(defaultHub);\n\n const userInfo = await getUserInfo({\n baseUrl: key?.AIGNE_HUB_API_URL || \"\",\n apiKey: key?.AIGNE_HUB_API_KEY || \"\",\n }).catch(() => null);\n\n printHubStatus({\n hub: getUrlOrigin(url),\n status: isDefault ? \"Connected\" : \"Not Used\",\n user: {\n name: userInfo?.user.fullName || \"\",\n did: userInfo?.user.did || \"\",\n email: userInfo?.user.email || \"\",\n },\n credits: {\n available: userInfo?.creditBalance?.balance || \"0\",\n total: userInfo?.creditBalance?.total || \"0\",\n used: String(\n parseFloat(userInfo?.creditBalance?.total || \"0\") -\n parseFloat(userInfo?.creditBalance?.balance || \"0\"),\n ),\n },\n links: {\n payment: userInfo?.paymentLink || \"\",\n profile: userInfo?.profileLink || \"\",\n },\n enableCredit: userInfo?.enableCredit || false,\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let chalk = require("chalk");
|
|
3
|
+
chalk = require_rolldown_runtime.__toESM(chalk);
|
|
4
|
+
let _aigne_core_utils_type_utils = require("@aigne/core/utils/type-utils");
|
|
5
|
+
let _aigne_observability_api_cli = require("@aigne/observability-api/cli");
|
|
6
|
+
let _aigne_observability_api_db_path = require("@aigne/observability-api/db-path");
|
|
7
|
+
_aigne_observability_api_db_path = require_rolldown_runtime.__toESM(_aigne_observability_api_db_path);
|
|
8
|
+
let detect_port = require("detect-port");
|
|
9
|
+
detect_port = require_rolldown_runtime.__toESM(detect_port);
|
|
10
|
+
|
|
11
|
+
//#region src/commands/observe.ts
|
|
12
|
+
const DEFAULT_PORT = () => (0, _aigne_core_utils_type_utils.tryOrThrow)(() => {
|
|
13
|
+
const { PORT } = process.env;
|
|
14
|
+
if (!PORT) return 7890;
|
|
15
|
+
const port = Number.parseInt(PORT, 10);
|
|
16
|
+
if (!port || !Number.isInteger(port)) throw new Error(`Invalid PORT: ${PORT}`);
|
|
17
|
+
return port;
|
|
18
|
+
}, (error) => /* @__PURE__ */ new Error(`parse PORT error ${error.message}`));
|
|
19
|
+
function createObservabilityCommand() {
|
|
20
|
+
return {
|
|
21
|
+
command: "observe",
|
|
22
|
+
describe: "Start the observability server",
|
|
23
|
+
builder: (yargs) => {
|
|
24
|
+
return yargs.option("host", {
|
|
25
|
+
type: "string",
|
|
26
|
+
describe: "Host to run the observability server on, use 0.0.0.0 to publicly expose the server",
|
|
27
|
+
default: "localhost"
|
|
28
|
+
}).option("port", {
|
|
29
|
+
type: "number",
|
|
30
|
+
describe: "Port to run the observability server on"
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
handler: async (options) => {
|
|
34
|
+
const port = await (0, detect_port.default)(options.port || DEFAULT_PORT());
|
|
35
|
+
const dbUrl = (0, _aigne_observability_api_db_path.default)();
|
|
36
|
+
process.once("SIGINT", async () => {
|
|
37
|
+
process.exit(0);
|
|
38
|
+
});
|
|
39
|
+
console.log("Observability database path:", chalk.default.greenBright(dbUrl));
|
|
40
|
+
await (0, _aigne_observability_api_cli.startObservabilityCLIServer)({
|
|
41
|
+
port,
|
|
42
|
+
dbUrl
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
exports.createObservabilityCommand = createObservabilityCommand;
|