@baijimu/cli 0.1.4 → 0.1.6
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 +57 -69
- package/dist/index.js +7 -66
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +4 -0
- package/dist/install.js +155 -0
- package/dist/install.js.map +1 -0
- package/dist/native.d.ts +7 -0
- package/dist/native.js +51 -0
- package/dist/native.js.map +1 -0
- package/dist/platform.d.ts +21 -0
- package/dist/platform.js +96 -0
- package/dist/platform.js.map +1 -0
- package/package.json +10 -3
- package/scripts/postinstall.cjs +18 -0
- package/dist/args.d.ts +0 -9
- package/dist/args.js +0 -54
- package/dist/args.js.map +0 -1
- package/dist/commands/agent.d.ts +0 -1
- package/dist/commands/agent.js +0 -177
- package/dist/commands/agent.js.map +0 -1
- package/dist/commands/api.d.ts +0 -3
- package/dist/commands/api.js +0 -52
- package/dist/commands/api.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -1
- package/dist/commands/auth.js +0 -166
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/db-profile.d.ts +0 -1
- package/dist/commands/db-profile.js +0 -66
- package/dist/commands/db-profile.js.map +0 -1
- package/dist/commands/hosted-service.d.ts +0 -1
- package/dist/commands/hosted-service.js +0 -332
- package/dist/commands/hosted-service.js.map +0 -1
- package/dist/commands/module.d.ts +0 -1
- package/dist/commands/module.js +0 -199
- package/dist/commands/module.js.map +0 -1
- package/dist/commands/platform-app.d.ts +0 -1
- package/dist/commands/platform-app.js +0 -225
- package/dist/commands/platform-app.js.map +0 -1
- package/dist/commands/project.d.ts +0 -1
- package/dist/commands/project.js +0 -206
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/runtime.d.ts +0 -1
- package/dist/commands/runtime.js +0 -86
- package/dist/commands/runtime.js.map +0 -1
- package/dist/commands/skill.d.ts +0 -1
- package/dist/commands/skill.js +0 -224
- package/dist/commands/skill.js.map +0 -1
- package/dist/commands/workspace.d.ts +0 -1
- package/dist/commands/workspace.js +0 -32
- package/dist/commands/workspace.js.map +0 -1
- package/dist/config.d.ts +0 -10
- package/dist/config.js +0 -71
- package/dist/config.js.map +0 -1
- package/dist/errors.d.ts +0 -5
- package/dist/errors.js +0 -14
- package/dist/errors.js.map +0 -1
- package/dist/help.d.ts +0 -1
- package/dist/help.js +0 -103
- package/dist/help.js.map +0 -1
- package/dist/http.d.ts +0 -12
- package/dist/http.js +0 -82
- package/dist/http.js.map +0 -1
- package/dist/json.d.ts +0 -3
- package/dist/json.js +0 -19
- package/dist/json.js.map +0 -1
- package/dist/types.d.ts +0 -26
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Baijimu CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@baijimu/cli` is the npm distribution wrapper for the native Rust `baijimu` CLI.
|
|
4
|
+
|
|
5
|
+
The JavaScript code in this package does not implement Baijimu commands. It only
|
|
6
|
+
installs and launches the Rust binary.
|
|
4
7
|
|
|
5
8
|
## Install
|
|
6
9
|
|
|
@@ -8,94 +11,79 @@
|
|
|
8
11
|
npm install -g @baijimu/cli
|
|
9
12
|
```
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
During `postinstall`, the package resolves the native CLI in this order:
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
npm
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
1. `BAIJIMU_NATIVE_CLI`, when set.
|
|
17
|
+
2. An existing native install such as `~/.local/bin/baijimu` or `~/AppData/Local/Baijimu/bin/baijimu.exe`.
|
|
18
|
+
3. A binary bundled inside this npm package at `native/<platform>-<arch>/baijimu`.
|
|
19
|
+
4. A downloaded binary cached under `~/.cache/baijimu-cli/native/<native-version>/<platform>-<arch>/`.
|
|
20
|
+
|
|
21
|
+
The launcher uses this order when running commands:
|
|
22
|
+
|
|
23
|
+
1. `BAIJIMU_NATIVE_CLI`, when set.
|
|
24
|
+
2. The binary bundled inside this npm package.
|
|
25
|
+
3. The binary downloaded by `postinstall`.
|
|
26
|
+
4. Existing native installs from other channels.
|
|
18
27
|
|
|
19
|
-
##
|
|
28
|
+
## Commands
|
|
29
|
+
|
|
30
|
+
All command behavior is owned by the Rust CLI:
|
|
20
31
|
|
|
21
32
|
```bash
|
|
22
|
-
baijimu
|
|
33
|
+
baijimu --version --json
|
|
23
34
|
baijimu auth status --verify
|
|
24
35
|
baijimu workspace list
|
|
25
|
-
baijimu
|
|
26
|
-
baijimu project
|
|
27
|
-
baijimu api POST /partner/v1/workspaces/list --data '{"page":1,"pageSize":20}'
|
|
36
|
+
baijimu api POST /partner/v1/projects/list --data '{"workspaceId":642,"pageNum":1,"pageSize":20}'
|
|
37
|
+
baijimu codex apikey create --workspace-id 642 --project-id 7405 --write-codex-config
|
|
28
38
|
```
|
|
29
39
|
|
|
30
|
-
##
|
|
40
|
+
## Installer Configuration
|
|
31
41
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
baijimu
|
|
46
|
-
baijimu project file write <projectId> <path> (--content <text>|--content-file <file>) [--encoding text|base64] [--no-create]
|
|
47
|
-
baijimu project file grep <projectId> <query> [path] [--regex] [--case-sensitive] [--max-results n] [--include glob] [--exclude glob]
|
|
48
|
-
baijimu project file download <projectId> [path]
|
|
49
|
-
baijimu project file import-url <projectId> <targetPath> --source-url <url> [--file-name name] [--content-type type]
|
|
50
|
-
|
|
51
|
-
baijimu project git status <projectId>
|
|
52
|
-
baijimu project git head <projectId>
|
|
53
|
-
baijimu project git log <projectId> [--limit n]
|
|
54
|
-
baijimu project git diff <projectId> <filePath> [--staged]
|
|
55
|
-
baijimu project git commit <projectId> --message <message> [--file path ...]
|
|
56
|
-
baijimu project git pull <projectId>
|
|
57
|
-
baijimu project git push <projectId>
|
|
58
|
-
baijimu project git rollback <projectId> <file...>
|
|
59
|
-
baijimu project git reset <projectId> <commitId>
|
|
60
|
-
|
|
61
|
-
baijimu agent session create <projectId> --agent-config-id <id> [--title title] [--metadata <json|@file>]
|
|
62
|
-
baijimu agent session list <projectId> [--limit n] [--offset n]
|
|
63
|
-
baijimu agent session recent [--limit n] [--offset n]
|
|
64
|
-
baijimu agent session get <projectId> <sessionId>
|
|
65
|
-
baijimu agent session messages <projectId> <sessionId> [--limit n] [--offset n] [--before-message-id id]
|
|
66
|
-
baijimu agent session audit <projectId> <sessionId>
|
|
67
|
-
baijimu agent session delete <projectId> <sessionId>
|
|
68
|
-
baijimu agent chat <projectId> <sessionId> --message <text> [--agent-config-id id] [--client-message-id id]
|
|
69
|
-
|
|
70
|
-
baijimu module list <workspaceId> [--project-id <projectId>]
|
|
71
|
-
baijimu module publish <workspaceId> <projectId> --module-id <moduleId> --version <semver> [--commit-id <id>] [--description <text>] [--scope-type <scope>]
|
|
72
|
-
|
|
73
|
-
baijimu runtime app install <workspaceId> --module-id <moduleId> [--version-id <versionId>] [--properties <json|@file>]
|
|
74
|
-
baijimu runtime app upgrade <workspaceId> --module-id <moduleId> --version-id <versionId> [--properties <json|@file>]
|
|
75
|
-
baijimu runtime app update-properties <workspaceId> --module-id <moduleId> --properties <json|@file>
|
|
76
|
-
baijimu runtime app uninstall <workspaceId> --module-id <moduleId>
|
|
42
|
+
Environment variables:
|
|
43
|
+
|
|
44
|
+
- `BAIJIMU_NATIVE_CLI`: use an explicit existing Rust binary.
|
|
45
|
+
- `BAIJIMU_CLI_SKIP_INSTALL=1`: skip `postinstall` installation.
|
|
46
|
+
- `BAIJIMU_CLI_BINARY_URL`: exact URL for the current platform binary.
|
|
47
|
+
- `BAIJIMU_CLI_RELEASE_BASE_URL`: base URL containing standard binary assets.
|
|
48
|
+
- `BAIJIMU_CLI_NATIVE_DIR`: local directory containing `<platform>-<arch>/baijimu`.
|
|
49
|
+
- `BAIJIMU_CLI_CACHE_DIR`: override the native binary cache root.
|
|
50
|
+
- `BAIJIMU_CLI_IGNORE_EXTERNAL=1`: ignore native installs from standard system paths.
|
|
51
|
+
|
|
52
|
+
By default, `postinstall` downloads:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
https://gitee.com/zxflimit_admin/baijimu-cli-rs/releases/download/v<native-version>/baijimu-<native-version>-<platform>-<arch>[.exe]
|
|
77
56
|
```
|
|
78
57
|
|
|
79
|
-
|
|
58
|
+
The native version comes from `package.json` at `baijimu.nativeVersion`. If that
|
|
59
|
+
field is absent, the npm package version is used.
|
|
80
60
|
|
|
81
|
-
|
|
61
|
+
Supported platform directory examples:
|
|
82
62
|
|
|
83
|
-
|
|
63
|
+
```text
|
|
64
|
+
native/darwin-arm64/baijimu
|
|
65
|
+
native/darwin-x64/baijimu
|
|
66
|
+
native/linux-x64/baijimu
|
|
67
|
+
native/linux-arm64/baijimu
|
|
68
|
+
native/win32-x64/baijimu.exe
|
|
69
|
+
```
|
|
84
70
|
|
|
85
71
|
## Release
|
|
86
72
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
Manual release:
|
|
73
|
+
Build and test the npm wrapper:
|
|
90
74
|
|
|
91
75
|
```bash
|
|
92
76
|
npm ci
|
|
93
77
|
npm run test
|
|
94
78
|
npm run pack:check
|
|
95
|
-
npm run release:npm
|
|
96
79
|
```
|
|
97
80
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
81
|
+
For offline-friendly npm releases, place Rust build artifacts under `native/`
|
|
82
|
+
before publishing. If `native/` is absent, installation still works through the
|
|
83
|
+
release download URL as long as the matching asset has been published.
|
|
84
|
+
|
|
85
|
+
Publish:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm run release:npm
|
|
89
|
+
```
|
package/dist/index.js
CHANGED
|
@@ -1,70 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { realpathSync } from "node:fs";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import {
|
|
5
|
-
import { HELP_TEXT } from "./help.js";
|
|
6
|
-
import { runApiCommand } from "./commands/api.js";
|
|
7
|
-
import { runAgentCommand } from "./commands/agent.js";
|
|
8
|
-
import { runAuthCommand } from "./commands/auth.js";
|
|
9
|
-
import { runDbProfileCommand } from "./commands/db-profile.js";
|
|
10
|
-
import { runHostedServiceCommand } from "./commands/hosted-service.js";
|
|
11
|
-
import { runModuleCommand } from "./commands/module.js";
|
|
12
|
-
import { runPlatformAppCommand } from "./commands/platform-app.js";
|
|
13
|
-
import { runProjectCommand } from "./commands/project.js";
|
|
14
|
-
import { runRuntimeCommand } from "./commands/runtime.js";
|
|
15
|
-
import { runSkillCommand } from "./commands/skill.js";
|
|
16
|
-
import { runWorkspaceCommand } from "./commands/workspace.js";
|
|
4
|
+
import { missingNativeMessage, resolveNativeCli, runNativeCli } from "./native.js";
|
|
17
5
|
export async function main(argv = process.argv.slice(2)) {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
20
|
-
process.
|
|
21
|
-
|
|
6
|
+
const native = resolveNativeCli(import.meta.url);
|
|
7
|
+
if (!native) {
|
|
8
|
+
process.stderr.write(`${missingNativeMessage()}\n`);
|
|
9
|
+
process.exit(127);
|
|
22
10
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
if (command === "api") {
|
|
28
|
-
await runApiCommand(args);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (command === "project") {
|
|
32
|
-
await runProjectCommand(args);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if (command === "agent") {
|
|
36
|
-
await runAgentCommand(args);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (command === "workspace") {
|
|
40
|
-
await runWorkspaceCommand(args);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (command === "module") {
|
|
44
|
-
await runModuleCommand(args);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (command === "hosted-service") {
|
|
48
|
-
await runHostedServiceCommand(args);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
if (command === "db-profile") {
|
|
52
|
-
await runDbProfileCommand(args);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (command === "platform-app") {
|
|
56
|
-
await runPlatformAppCommand(args);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (command === "skill") {
|
|
60
|
-
await runSkillCommand(args);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (command === "runtime") {
|
|
64
|
-
await runRuntimeCommand(args);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
throw new CliError(`未知命令: ${command}\n\n${HELP_TEXT}`);
|
|
11
|
+
const exitCode = await runNativeCli(native.path, argv);
|
|
12
|
+
process.exit(exitCode);
|
|
68
13
|
}
|
|
69
14
|
function isEntrypoint() {
|
|
70
15
|
if (!process.argv[1]) {
|
|
@@ -74,10 +19,6 @@ function isEntrypoint() {
|
|
|
74
19
|
}
|
|
75
20
|
if (isEntrypoint()) {
|
|
76
21
|
main().catch((error) => {
|
|
77
|
-
if (error instanceof CliError) {
|
|
78
|
-
process.stderr.write(`${error.message}\n`);
|
|
79
|
-
process.exit(error.exitCode);
|
|
80
|
-
}
|
|
81
22
|
const message = error instanceof Error ? error.stack || error.message : String(error);
|
|
82
23
|
process.stderr.write(`${message}\n`);
|
|
83
24
|
process.exit(1);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,oBAAoB,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/install.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createWriteStream, existsSync, realpathSync, renameSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { copyFile } from "node:fs/promises";
|
|
4
|
+
import http from "node:http";
|
|
5
|
+
import https from "node:https";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { fileURLToPath, URL } from "node:url";
|
|
8
|
+
import { NATIVE_VERSION, PACKAGE_METADATA, binaryName, bundledNativePath, cacheNativePath, ensureExecutable, ensureNativeCacheDir, explicitNativeCandidate, externalNativeCandidates, isExecutable, packageRoot, platformTriple, } from "./platform.js";
|
|
9
|
+
const MAX_REDIRECTS = 5;
|
|
10
|
+
export async function main() {
|
|
11
|
+
if (process.env.BAIJIMU_CLI_SKIP_INSTALL === "1") {
|
|
12
|
+
log("skipping native install because BAIJIMU_CLI_SKIP_INSTALL=1");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const existing = findExistingNative(import.meta.url);
|
|
16
|
+
if (existing) {
|
|
17
|
+
log(`using existing Rust CLI: ${existing}`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const localBinary = localNativeSource();
|
|
21
|
+
if (localBinary) {
|
|
22
|
+
await installFromLocalFile(localBinary);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const url = nativeDownloadUrl();
|
|
26
|
+
if (!url) {
|
|
27
|
+
throw new Error([
|
|
28
|
+
"No Baijimu Rust CLI binary is available for this install.",
|
|
29
|
+
"Set BAIJIMU_CLI_BINARY_URL to an exact binary URL, set BAIJIMU_CLI_NATIVE_DIR to a directory containing the binary,",
|
|
30
|
+
"or publish this npm package with native/<platform>-<arch>/baijimu included.",
|
|
31
|
+
].join(" "));
|
|
32
|
+
}
|
|
33
|
+
await downloadNative(url);
|
|
34
|
+
}
|
|
35
|
+
export function nativeAssetName() {
|
|
36
|
+
return `baijimu-${NATIVE_VERSION}-${platformTriple()}${process.platform === "win32" ? ".exe" : ""}`;
|
|
37
|
+
}
|
|
38
|
+
export function nativeDownloadUrl() {
|
|
39
|
+
if (process.env.BAIJIMU_CLI_BINARY_URL) {
|
|
40
|
+
return process.env.BAIJIMU_CLI_BINARY_URL;
|
|
41
|
+
}
|
|
42
|
+
const releaseBaseUrl = process.env.BAIJIMU_CLI_RELEASE_BASE_URL || defaultReleaseBaseUrl();
|
|
43
|
+
if (!releaseBaseUrl) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return `${releaseBaseUrl.replace(/\/$/, "")}/${nativeAssetName()}`;
|
|
47
|
+
}
|
|
48
|
+
function defaultReleaseBaseUrl() {
|
|
49
|
+
const configured = PACKAGE_METADATA.releaseBaseUrl;
|
|
50
|
+
if (configured) {
|
|
51
|
+
return configured.replaceAll("${version}", NATIVE_VERSION);
|
|
52
|
+
}
|
|
53
|
+
return `https://gitee.com/zxflimit_admin/baijimu-cli-rs/releases/download/v${NATIVE_VERSION}`;
|
|
54
|
+
}
|
|
55
|
+
function findExistingNative(importMetaUrl) {
|
|
56
|
+
const root = packageRoot(importMetaUrl);
|
|
57
|
+
const candidates = [
|
|
58
|
+
explicitNativeCandidate(),
|
|
59
|
+
...externalNativeCandidates(),
|
|
60
|
+
bundledNativePath(root),
|
|
61
|
+
cacheNativePath(),
|
|
62
|
+
].filter((candidate) => Boolean(candidate));
|
|
63
|
+
for (const candidate of candidates) {
|
|
64
|
+
ensureExecutable(candidate);
|
|
65
|
+
if (isExecutable(candidate)) {
|
|
66
|
+
return candidate;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function localNativeSource() {
|
|
72
|
+
const nativeDir = process.env.BAIJIMU_CLI_NATIVE_DIR;
|
|
73
|
+
if (!nativeDir) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const candidate = join(nativeDir, platformTriple(), binaryName());
|
|
77
|
+
return existsSync(candidate) ? candidate : null;
|
|
78
|
+
}
|
|
79
|
+
async function installFromLocalFile(sourcePath) {
|
|
80
|
+
const destination = cacheNativePath();
|
|
81
|
+
ensureNativeCacheDir();
|
|
82
|
+
await copyFile(sourcePath, destination);
|
|
83
|
+
ensureExecutable(destination);
|
|
84
|
+
log(`installed Rust CLI from ${sourcePath}`);
|
|
85
|
+
}
|
|
86
|
+
async function downloadNative(url) {
|
|
87
|
+
ensureNativeCacheDir();
|
|
88
|
+
const destination = cacheNativePath();
|
|
89
|
+
const tempPath = `${destination}.download`;
|
|
90
|
+
try {
|
|
91
|
+
await downloadToFile(url, tempPath, MAX_REDIRECTS);
|
|
92
|
+
renameSync(tempPath, destination);
|
|
93
|
+
ensureExecutable(destination);
|
|
94
|
+
log(`installed Rust CLI from ${url}`);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
try {
|
|
98
|
+
unlinkSync(tempPath);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Nothing to clean.
|
|
102
|
+
}
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function downloadToFile(url, destination, redirectsLeft) {
|
|
107
|
+
return new Promise((resolveDownload, rejectDownload) => {
|
|
108
|
+
const parsed = new URL(url);
|
|
109
|
+
if (parsed.protocol === "file:") {
|
|
110
|
+
copyFile(parsed, destination).then(resolveDownload, rejectDownload);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const client = parsed.protocol === "https:" ? https : http;
|
|
114
|
+
const request = client.get(parsed, (response) => {
|
|
115
|
+
const statusCode = response.statusCode || 0;
|
|
116
|
+
if (statusCode >= 300 && statusCode < 400 && response.headers.location) {
|
|
117
|
+
response.resume();
|
|
118
|
+
if (redirectsLeft <= 0) {
|
|
119
|
+
rejectDownload(new Error(`too many redirects while downloading ${url}`));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const redirectUrl = new URL(response.headers.location, parsed).toString();
|
|
123
|
+
downloadToFile(redirectUrl, destination, redirectsLeft - 1).then(resolveDownload, rejectDownload);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (statusCode !== 200) {
|
|
127
|
+
response.resume();
|
|
128
|
+
rejectDownload(new Error(`download failed with HTTP ${statusCode}: ${url}`));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const file = createWriteStream(destination, { mode: 0o755 });
|
|
132
|
+
response.pipe(file);
|
|
133
|
+
file.on("finish", () => file.close(() => resolveDownload()));
|
|
134
|
+
file.on("error", rejectDownload);
|
|
135
|
+
});
|
|
136
|
+
request.on("error", rejectDownload);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function log(message) {
|
|
140
|
+
process.stderr.write(`@baijimu/cli: ${message}\n`);
|
|
141
|
+
}
|
|
142
|
+
function isEntrypoint() {
|
|
143
|
+
if (!process.argv[1]) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
|
|
147
|
+
}
|
|
148
|
+
if (isEntrypoint()) {
|
|
149
|
+
main().catch((error) => {
|
|
150
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
151
|
+
process.stderr.write(`@baijimu/cli: ${message}\n`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/dist/native.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface NativeResolution {
|
|
2
|
+
path: string;
|
|
3
|
+
source: "env" | "bundled" | "cache" | "external";
|
|
4
|
+
}
|
|
5
|
+
export declare function resolveNativeCli(importMetaUrl: string, currentEntrypoint?: string): NativeResolution | null;
|
|
6
|
+
export declare function runNativeCli(nativePath: string, argv: string[]): Promise<number>;
|
|
7
|
+
export declare function missingNativeMessage(): string;
|
package/dist/native.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { bundledNativePath, cacheNativePath, ensureExecutable, explicitNativeCandidate, externalNativeCandidates, isExecutable, isSamePath, packageRoot, } from "./platform.js";
|
|
3
|
+
export function resolveNativeCli(importMetaUrl, currentEntrypoint = process.argv[1]) {
|
|
4
|
+
const root = packageRoot(importMetaUrl);
|
|
5
|
+
const bundled = bundledNativePath(root);
|
|
6
|
+
const cache = cacheNativePath();
|
|
7
|
+
const candidates = [
|
|
8
|
+
...(explicitNativeCandidate() ? [{ path: explicitNativeCandidate(), source: "env" }] : []),
|
|
9
|
+
{ path: bundled, source: "bundled" },
|
|
10
|
+
{ path: cache, source: "cache" },
|
|
11
|
+
...externalNativeCandidates().map((path) => ({ path, source: "external" })),
|
|
12
|
+
];
|
|
13
|
+
for (const candidate of candidates) {
|
|
14
|
+
if (currentEntrypoint && isSamePath(candidate.path, currentEntrypoint)) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
ensureExecutable(candidate.path);
|
|
18
|
+
if (isExecutable(candidate.path)) {
|
|
19
|
+
return candidate;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
export function runNativeCli(nativePath, argv) {
|
|
25
|
+
return new Promise((resolveExit) => {
|
|
26
|
+
const child = spawn(nativePath, argv, {
|
|
27
|
+
stdio: "inherit",
|
|
28
|
+
env: process.env,
|
|
29
|
+
});
|
|
30
|
+
child.on("error", () => resolveExit(127));
|
|
31
|
+
child.on("exit", (code, signal) => {
|
|
32
|
+
if (typeof code === "number") {
|
|
33
|
+
resolveExit(code);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
resolveExit(signal ? 128 : 1);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export function missingNativeMessage() {
|
|
41
|
+
return [
|
|
42
|
+
"Baijimu Rust CLI binary was not found.",
|
|
43
|
+
"",
|
|
44
|
+
"The npm package installs the native binary during postinstall. Re-run:",
|
|
45
|
+
" npm rebuild @baijimu/cli",
|
|
46
|
+
"",
|
|
47
|
+
"For offline or managed installs, set BAIJIMU_NATIVE_CLI to an existing baijimu binary,",
|
|
48
|
+
"or pre-bundle native/<platform>-<arch>/baijimu before publishing this package.",
|
|
49
|
+
].join("\n");
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,eAAe,CAAC;AAOvB,MAAM,UAAU,gBAAgB,CAAC,aAAqB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,UAAU,GAAuB;QACrC,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAY,EAAE,MAAM,EAAE,KAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7G,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;QACpC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAChC,GAAG,wBAAwB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC,CAAC;KACrF,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,iBAAiB,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACvE,SAAS;QACX,CAAC;QACD,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,IAAc;IAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YACD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,wCAAwC;QACxC,EAAE;QACF,wEAAwE;QACxE,4BAA4B;QAC5B,EAAE;QACF,wFAAwF;QACxF,gFAAgF;KACjF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const PACKAGE_METADATA: PackageMetadata;
|
|
2
|
+
export declare const PACKAGE_VERSION: string;
|
|
3
|
+
export declare const NATIVE_VERSION: string;
|
|
4
|
+
export interface PackageMetadata {
|
|
5
|
+
version: string;
|
|
6
|
+
nativeVersion: string;
|
|
7
|
+
releaseBaseUrl: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function binaryName(): string;
|
|
10
|
+
export declare function platformTriple(): string;
|
|
11
|
+
export declare function packageRoot(importMetaUrl: string): string;
|
|
12
|
+
export declare function bundledNativePath(root: string): string;
|
|
13
|
+
export declare function cacheNativePath(): string;
|
|
14
|
+
export declare function nativeCacheDir(): string;
|
|
15
|
+
export declare function cacheRoot(): string;
|
|
16
|
+
export declare function externalNativeCandidates(): string[];
|
|
17
|
+
export declare function explicitNativeCandidate(): string | null;
|
|
18
|
+
export declare function isExecutable(path: string): boolean;
|
|
19
|
+
export declare function ensureExecutable(path: string): void;
|
|
20
|
+
export declare function ensureNativeCacheDir(): string;
|
|
21
|
+
export declare function isSamePath(left: string, right: string): boolean;
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { accessSync, constants, chmodSync, existsSync, mkdirSync, readFileSync, realpathSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
export const PACKAGE_METADATA = readPackageMetadata();
|
|
6
|
+
export const PACKAGE_VERSION = PACKAGE_METADATA.version;
|
|
7
|
+
export const NATIVE_VERSION = PACKAGE_METADATA.nativeVersion;
|
|
8
|
+
function readPackageMetadata() {
|
|
9
|
+
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
10
|
+
const raw = readFileSync(join(root, "package.json"), "utf8");
|
|
11
|
+
const parsed = JSON.parse(raw);
|
|
12
|
+
if (typeof parsed.version !== "string" || !parsed.version) {
|
|
13
|
+
throw new Error("package.json is missing a valid version");
|
|
14
|
+
}
|
|
15
|
+
const nativeVersion = typeof parsed.baijimu?.nativeVersion === "string" && parsed.baijimu.nativeVersion
|
|
16
|
+
? parsed.baijimu.nativeVersion
|
|
17
|
+
: parsed.version;
|
|
18
|
+
const releaseBaseUrl = typeof parsed.baijimu?.releaseBaseUrl === "string" && parsed.baijimu.releaseBaseUrl
|
|
19
|
+
? parsed.baijimu.releaseBaseUrl
|
|
20
|
+
: null;
|
|
21
|
+
return {
|
|
22
|
+
version: parsed.version,
|
|
23
|
+
nativeVersion,
|
|
24
|
+
releaseBaseUrl,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function binaryName() {
|
|
28
|
+
return process.platform === "win32" ? "baijimu.exe" : "baijimu";
|
|
29
|
+
}
|
|
30
|
+
export function platformTriple() {
|
|
31
|
+
return `${process.platform}-${process.arch}`;
|
|
32
|
+
}
|
|
33
|
+
export function packageRoot(importMetaUrl) {
|
|
34
|
+
return resolve(dirname(fileURLToPath(importMetaUrl)), "..");
|
|
35
|
+
}
|
|
36
|
+
export function bundledNativePath(root) {
|
|
37
|
+
return join(root, "native", platformTriple(), binaryName());
|
|
38
|
+
}
|
|
39
|
+
export function cacheNativePath() {
|
|
40
|
+
return join(nativeCacheDir(), binaryName());
|
|
41
|
+
}
|
|
42
|
+
export function nativeCacheDir() {
|
|
43
|
+
return join(cacheRoot(), NATIVE_VERSION, platformTriple());
|
|
44
|
+
}
|
|
45
|
+
export function cacheRoot() {
|
|
46
|
+
if (process.env.BAIJIMU_CLI_CACHE_DIR) {
|
|
47
|
+
return process.env.BAIJIMU_CLI_CACHE_DIR;
|
|
48
|
+
}
|
|
49
|
+
if (process.platform === "win32") {
|
|
50
|
+
return join(process.env.LOCALAPPDATA || homedir(), "Baijimu", "cli-native");
|
|
51
|
+
}
|
|
52
|
+
return join(homedir(), ".cache", "baijimu-cli", "native");
|
|
53
|
+
}
|
|
54
|
+
export function externalNativeCandidates() {
|
|
55
|
+
if (process.env.BAIJIMU_CLI_IGNORE_EXTERNAL === "1") {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const candidates = [
|
|
59
|
+
process.platform === "win32"
|
|
60
|
+
? join(process.env.LOCALAPPDATA || homedir(), "Baijimu", "bin", binaryName())
|
|
61
|
+
: join(homedir(), ".local", "bin", binaryName()),
|
|
62
|
+
process.platform === "win32" ? undefined : "/usr/local/bin/baijimu",
|
|
63
|
+
];
|
|
64
|
+
return candidates.filter((candidate) => Boolean(candidate));
|
|
65
|
+
}
|
|
66
|
+
export function explicitNativeCandidate() {
|
|
67
|
+
return process.env.BAIJIMU_NATIVE_CLI || null;
|
|
68
|
+
}
|
|
69
|
+
export function isExecutable(path) {
|
|
70
|
+
try {
|
|
71
|
+
accessSync(path, constants.X_OK);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function ensureExecutable(path) {
|
|
79
|
+
if (process.platform !== "win32" && existsSync(path)) {
|
|
80
|
+
chmodSync(path, 0o755);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function ensureNativeCacheDir() {
|
|
84
|
+
const dir = nativeCacheDir();
|
|
85
|
+
mkdirSync(dir, { recursive: true });
|
|
86
|
+
return dir;
|
|
87
|
+
}
|
|
88
|
+
export function isSamePath(left, right) {
|
|
89
|
+
try {
|
|
90
|
+
return realpathSync(left) === realpathSync(right);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|