@arizeai/phoenix-cli 0.11.0 → 0.12.0
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 +16 -0
- package/build/banner.d.ts +23 -2
- package/build/banner.d.ts.map +1 -1
- package/build/banner.js +33 -13
- package/build/banner.js.map +1 -1
- package/build/cli.d.ts +5 -1
- package/build/cli.d.ts.map +1 -1
- package/build/cli.js +14 -6
- package/build/cli.js.map +1 -1
- package/build/commands/index.d.ts +1 -0
- package/build/commands/index.d.ts.map +1 -1
- package/build/commands/index.js +1 -0
- package/build/commands/index.js.map +1 -1
- package/build/commands/prompt.js +1 -1
- package/build/commands/self.d.ts +102 -0
- package/build/commands/self.d.ts.map +1 -0
- package/build/commands/self.js +416 -0
- package/build/commands/self.js.map +1 -0
- package/build/index.js +7 -1
- package/build/index.js.map +1 -1
- package/build/version.d.ts +44 -0
- package/build/version.d.ts.map +1 -0
- package/build/version.js +171 -0
- package/build/version.js.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -30,6 +30,9 @@ A command-line interface for [Arize Phoenix](https://github.com/Arize-ai/phoenix
|
|
|
30
30
|
npm install -g @arizeai/phoenix-cli
|
|
31
31
|
# or run without installing:
|
|
32
32
|
npx @arizeai/phoenix-cli
|
|
33
|
+
|
|
34
|
+
# once installed globally, update in place:
|
|
35
|
+
px self update
|
|
33
36
|
```
|
|
34
37
|
|
|
35
38
|
## Configuration
|
|
@@ -51,6 +54,19 @@ CLI flags (`--endpoint`, `--project`, `--api-key`) override environment variable
|
|
|
51
54
|
|
|
52
55
|
## Commands
|
|
53
56
|
|
|
57
|
+
### `px self update`
|
|
58
|
+
|
|
59
|
+
Check the npm registry for the latest CLI release and update the installed
|
|
60
|
+
global CLI in place when a newer version is available.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
px self update # show current/latest and update if needed
|
|
64
|
+
px self update --check # show current/latest without installing
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Automatic updates are supported for global `npm`, `pnpm`, `bun`, and standard
|
|
68
|
+
`deno install -g` wrapper installs.
|
|
69
|
+
|
|
54
70
|
### `px traces [directory]`
|
|
55
71
|
|
|
56
72
|
Fetch recent traces from the configured project. All output is JSON.
|
package/build/banner.d.ts
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Text shown below the Phoenix logo.
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
4
|
+
export interface BannerInfoLinesOptions {
|
|
5
|
+
serverUrl: string;
|
|
6
|
+
project: string;
|
|
7
|
+
hasApiKey: boolean;
|
|
8
|
+
currentVersion: string;
|
|
9
|
+
latestVersion?: string;
|
|
10
|
+
hasUpdate?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the informational text displayed below the Phoenix logo.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getBannerInfoLines({ serverUrl, project, hasApiKey, currentVersion, latestVersion, hasUpdate, }: BannerInfoLinesOptions): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Render the full banner with the logo first and metadata below it.
|
|
18
|
+
*/
|
|
19
|
+
export declare function renderBanner({ infoLines }: {
|
|
20
|
+
infoLines: string[];
|
|
21
|
+
}): string;
|
|
22
|
+
/**
|
|
23
|
+
* Print the Phoenix CLI banner with connection and update info aligned to the right of the logo.
|
|
24
|
+
*/
|
|
25
|
+
export declare function printBanner(): Promise<void>;
|
|
5
26
|
//# sourceMappingURL=banner.d.ts.map
|
package/build/banner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,SAAS,GACV,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAUnC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAcjD"}
|
package/build/banner.js
CHANGED
|
@@ -1,27 +1,47 @@
|
|
|
1
1
|
import { loadConfigFromEnvironment } from "./config.js";
|
|
2
2
|
import { writeOutput } from "./io.js";
|
|
3
|
+
import { getCliVersionStatus } from "./version.js";
|
|
3
4
|
const LOGO_LINES = [
|
|
4
5
|
"░█▀█░█░█░█▀█░█▀▀░█▀█░▀█▀░█░█",
|
|
5
6
|
"░█▀▀░█▀█░█░█░█▀▀░█░█░░█░░▄▀▄",
|
|
6
7
|
"░▀░░░▀░▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀░▀",
|
|
7
8
|
];
|
|
9
|
+
const TAGLINE = "CLI for interacting with your phoenix server";
|
|
8
10
|
/**
|
|
9
|
-
*
|
|
11
|
+
* Build the informational text displayed below the Phoenix logo.
|
|
10
12
|
*/
|
|
11
|
-
export function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
`
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
export function getBannerInfoLines({ serverUrl, project, hasApiKey, currentVersion, latestVersion, hasUpdate, }) {
|
|
14
|
+
return [
|
|
15
|
+
`Server: ${serverUrl}`,
|
|
16
|
+
`Project: ${project}`,
|
|
17
|
+
...(hasApiKey ? [`API Key: set`] : []),
|
|
18
|
+
`Version: v${currentVersion}`,
|
|
19
|
+
...(hasUpdate && latestVersion
|
|
20
|
+
? [`Update: v${latestVersion} available. Run px self update`]
|
|
21
|
+
: []),
|
|
19
22
|
];
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Render the full banner with the logo first and metadata below it.
|
|
26
|
+
*/
|
|
27
|
+
export function renderBanner({ infoLines }) {
|
|
28
|
+
return [...LOGO_LINES, "", TAGLINE, "", ...infoLines].join("\n");
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Print the Phoenix CLI banner with connection and update info aligned to the right of the logo.
|
|
32
|
+
*/
|
|
33
|
+
export async function printBanner() {
|
|
34
|
+
const config = loadConfigFromEnvironment();
|
|
35
|
+
const versionStatus = await getCliVersionStatus();
|
|
36
|
+
const infoLines = getBannerInfoLines({
|
|
37
|
+
serverUrl: config.endpoint ?? "not set",
|
|
38
|
+
project: config.project ?? "not set",
|
|
39
|
+
hasApiKey: Boolean(config.apiKey),
|
|
40
|
+
currentVersion: versionStatus.currentVersion,
|
|
41
|
+
latestVersion: versionStatus.latestVersion,
|
|
42
|
+
hasUpdate: versionStatus.hasUpdate,
|
|
23
43
|
});
|
|
24
|
-
writeOutput({ message:
|
|
44
|
+
writeOutput({ message: renderBanner({ infoLines }) });
|
|
25
45
|
writeOutput({ message: "" });
|
|
26
46
|
}
|
|
27
47
|
//# sourceMappingURL=banner.js.map
|
package/build/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,UAAU,GAAG;IACjB,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;CAC/B,CAAC;AACF,MAAM,OAAO,GAAG,8CAA8C,CAAC;AAc/D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,SAAS,GACc;IACvB,OAAO;QACL,YAAY,SAAS,EAAE;QACvB,YAAY,OAAO,EAAE;QACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,aAAa,cAAc,EAAE;QAC7B,GAAG,CAAC,SAAS,IAAI,aAAa;YAC5B,CAAC,CAAC,CAAC,aAAa,aAAa,gCAAgC,CAAC;YAC9D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAA2B;IACjE,OAAO,CAAC,GAAG,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAC;IAC3C,MAAM,aAAa,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACvC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS;QACpC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,cAAc,EAAE,aAAa,CAAC,cAAc;QAC5C,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,SAAS,EAAE,aAAa,CAAC,SAAS;KACnC,CAAC,CAAC;IAEH,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC"}
|
package/build/cli.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
export declare function createProgram(): Command;
|
|
4
|
+
export declare function main({ argv, }?: {
|
|
5
|
+
argv?: string[];
|
|
6
|
+
}): Promise<void>;
|
|
3
7
|
//# sourceMappingURL=cli.d.ts.map
|
package/build/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,aAAa,IAAI,OAAO,CA2BvC;AAGD,wBAAsB,IAAI,CAAC,EACzB,IAAmB,GACpB,GAAE;IACD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrB"}
|
package/build/cli.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { printBanner } from "./banner.js";
|
|
4
|
-
import { createAnnotationConfigCommand, createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createDocsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createSessionCommand, createSessionsCommand, createSpansCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
|
|
5
|
-
|
|
6
|
-
export function
|
|
4
|
+
import { createAnnotationConfigCommand, createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createDocsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createSessionCommand, createSessionsCommand, createSelfCommand, createSpansCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
|
|
5
|
+
import { CLI_VERSION } from "./version.js";
|
|
6
|
+
export function createProgram() {
|
|
7
7
|
const program = new Command();
|
|
8
8
|
program.name("px");
|
|
9
9
|
program.enablePositionalOptions();
|
|
10
|
+
program.version(CLI_VERSION);
|
|
10
11
|
// Register commands
|
|
11
12
|
program.addCommand(createAnnotationConfigCommand());
|
|
12
13
|
program.addCommand(createAuthCommand());
|
|
@@ -24,11 +25,18 @@ export function main() {
|
|
|
24
25
|
program.addCommand(createPromptCommand());
|
|
25
26
|
program.addCommand(createApiCommand());
|
|
26
27
|
program.addCommand(createDocsCommand());
|
|
28
|
+
program.addCommand(createSelfCommand());
|
|
29
|
+
return program;
|
|
30
|
+
}
|
|
31
|
+
// Phoenix CLI Main Logic
|
|
32
|
+
export async function main({ argv = process.argv, } = {}) {
|
|
33
|
+
const program = createProgram();
|
|
27
34
|
// Show banner and help if no command provided
|
|
28
|
-
if (
|
|
29
|
-
printBanner();
|
|
35
|
+
if (argv.length === 2) {
|
|
36
|
+
await printBanner();
|
|
30
37
|
program.help();
|
|
38
|
+
return;
|
|
31
39
|
}
|
|
32
|
-
program.
|
|
40
|
+
await program.parseAsync(argv);
|
|
33
41
|
}
|
|
34
42
|
//# sourceMappingURL=cli.js.map
|
package/build/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAClC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7B,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yBAAyB;AACzB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,EACzB,IAAI,GAAG,OAAO,CAAC,IAAI,MAGjB,EAAE;IACJ,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,8CAA8C;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
|
package/build/commands/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
|
package/build/commands/prompt.js
CHANGED
|
@@ -97,7 +97,7 @@ export function createPromptCommand() {
|
|
|
97
97
|
const command = new Command("prompt");
|
|
98
98
|
command
|
|
99
99
|
.description("Show a Phoenix prompt")
|
|
100
|
-
.argument("<
|
|
100
|
+
.argument("<prompt-identifier>", "Prompt name or ID")
|
|
101
101
|
.option("--endpoint <url>", "Phoenix API endpoint")
|
|
102
102
|
.option("--api-key <key>", "Phoenix API key for authentication")
|
|
103
103
|
.option("--format <format>", "Output format: pretty, json, raw, or text", "pretty")
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
declare const FILESYSTEM_PACKAGE_MANAGERS: readonly ["npm", "pnpm", "bun"];
|
|
3
|
+
type FilesystemPackageManager = (typeof FILESYSTEM_PACKAGE_MANAGERS)[number];
|
|
4
|
+
/**
|
|
5
|
+
* Parsed metadata from a Deno-generated CLI wrapper script.
|
|
6
|
+
*/
|
|
7
|
+
export interface DenoInstallScriptMetadata {
|
|
8
|
+
/** Installed executable name, such as `px`. */
|
|
9
|
+
executableName: string;
|
|
10
|
+
/** Absolute path to the generated wrapper script. */
|
|
11
|
+
executablePath: string;
|
|
12
|
+
/** Deno install root containing the `bin/` directory. */
|
|
13
|
+
rootPath: string;
|
|
14
|
+
/** Original `deno run` flags preserved from the wrapper script. */
|
|
15
|
+
runtimeArgs: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A concrete shell command that can be executed to update the CLI.
|
|
19
|
+
*/
|
|
20
|
+
export interface UpdateCommand {
|
|
21
|
+
/** Executable name to invoke. */
|
|
22
|
+
command: string;
|
|
23
|
+
/** Ordered arguments passed to the executable. */
|
|
24
|
+
args: string[];
|
|
25
|
+
/** Human-readable command string shown to the user before execution. */
|
|
26
|
+
displayCommand: string;
|
|
27
|
+
}
|
|
28
|
+
interface PackageManagerRoots {
|
|
29
|
+
npmGlobalRoot?: string | null;
|
|
30
|
+
pnpmGlobalRoot?: string | null;
|
|
31
|
+
bunGlobalRoot?: string | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Determine which supported package manager owns the current installation.
|
|
35
|
+
*
|
|
36
|
+
* @param params - package-manager lookup inputs
|
|
37
|
+
* @param params.packageRoot - resolved package directory for the running CLI
|
|
38
|
+
* @param params.npmGlobalRoot - `npm root -g` result when available
|
|
39
|
+
* @param params.pnpmGlobalRoot - `pnpm root -g` result when available
|
|
40
|
+
* @param params.bunGlobalRoot - Bun global `node_modules` root when available
|
|
41
|
+
*/
|
|
42
|
+
export declare function detectInstallPackageManager({ packageRoot, npmGlobalRoot, pnpmGlobalRoot, bunGlobalRoot, }: {
|
|
43
|
+
packageRoot: string;
|
|
44
|
+
} & PackageManagerRoots): FilesystemPackageManager | null;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve an executable path using the current PATH, mirroring shell lookup.
|
|
47
|
+
*
|
|
48
|
+
* @param params - path lookup inputs
|
|
49
|
+
* @param params.commandNames - executable names to search for on `PATH`
|
|
50
|
+
*/
|
|
51
|
+
export declare function findExecutableOnPath({ commandNames, }: {
|
|
52
|
+
commandNames: readonly string[];
|
|
53
|
+
}): string | null;
|
|
54
|
+
/**
|
|
55
|
+
* Tokenize a simple shell command line so Deno install wrappers can be parsed.
|
|
56
|
+
*
|
|
57
|
+
* @param command - shell command line to tokenize
|
|
58
|
+
*/
|
|
59
|
+
export declare function tokenizeShellCommand(command: string): string[] | null;
|
|
60
|
+
/**
|
|
61
|
+
* Parse a Deno `deno install -g` wrapper for the Phoenix CLI so the command
|
|
62
|
+
* can replay the original install with a newer npm package version.
|
|
63
|
+
*
|
|
64
|
+
* @param params - Deno wrapper inputs
|
|
65
|
+
* @param params.executablePath - absolute path to the generated executable
|
|
66
|
+
* @param params.scriptContent - wrapper script contents to inspect
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseDenoInstallScript({ executablePath, scriptContent, }: {
|
|
69
|
+
executablePath: string;
|
|
70
|
+
scriptContent: string;
|
|
71
|
+
}): DenoInstallScriptMetadata | null;
|
|
72
|
+
/**
|
|
73
|
+
* Build the exact package-manager command that will install the requested
|
|
74
|
+
* version globally.
|
|
75
|
+
*
|
|
76
|
+
* @param params - command construction inputs
|
|
77
|
+
* @param params.packageManager - owning package manager for the current install
|
|
78
|
+
* @param params.packageName - npm package name to install
|
|
79
|
+
* @param params.version - exact version to install
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildUpdateCommand({ packageManager, packageName, version, }: {
|
|
82
|
+
packageManager: "npm" | "pnpm" | "bun";
|
|
83
|
+
packageName: string;
|
|
84
|
+
version: string;
|
|
85
|
+
}): UpdateCommand;
|
|
86
|
+
/**
|
|
87
|
+
* Build the exact Deno reinstall command for a wrapper generated by
|
|
88
|
+
* `deno install --global`.
|
|
89
|
+
*
|
|
90
|
+
* @param params - Deno reinstall inputs
|
|
91
|
+
* @param params.installScript - parsed metadata from the existing Deno wrapper
|
|
92
|
+
* @param params.packageName - npm package name to reinstall
|
|
93
|
+
* @param params.version - exact version to install
|
|
94
|
+
*/
|
|
95
|
+
export declare function buildDenoUpdateCommand({ installScript, packageName, version, }: {
|
|
96
|
+
installScript: DenoInstallScriptMetadata;
|
|
97
|
+
packageName: string;
|
|
98
|
+
version: string;
|
|
99
|
+
}): UpdateCommand;
|
|
100
|
+
export declare function createSelfCommand(): Command;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=self.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self.d.ts","sourceRoot":"","sources":["../../src/commands/self.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,QAAA,MAAM,2BAA2B,iCAAkC,CAAC;AAepE,KAAK,wBAAwB,GAAG,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAkCD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,GACd,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,IAAI,CAwBxD;AAqDD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,GACb,EAAE;IACD,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,GAAG,IAAI,CA0BhB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CA+DrE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,cAAc,EACd,aAAa,GACd,EAAE;IACD,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,yBAAyB,GAAG,IAAI,CAuDnC;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,cAAc,EACd,WAAW,EACX,OAAO,GACR,EAAE;IACD,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,CAahB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,aAAa,EACb,WAAW,EACX,OAAO,GACR,EAAE;IACD,aAAa,EAAE,yBAAyB,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,aAAa,CAmBhB;AAyID,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
import * as childProcess from "node:child_process";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import { ExitCode, getExitCodeForError } from "../exitCodes.js";
|
|
8
|
+
import { writeError, writeOutput } from "../io.js";
|
|
9
|
+
import { CLI_VERSION, compareSemanticVersions, fetchLatestPublishedCliVersion, } from "../version.js";
|
|
10
|
+
const FILESYSTEM_PACKAGE_MANAGERS = ["npm", "pnpm", "bun"];
|
|
11
|
+
const PACKAGE_MANAGER_PNPM_STORE_DIR = ".pnpm";
|
|
12
|
+
const CLI_PACKAGE_NAME = "@arizeai/phoenix-cli";
|
|
13
|
+
const CLI_COMMAND_NAMES = ["px", "phoenix-cli"];
|
|
14
|
+
const DENO_INSTALL_MARKER = "# generated by deno install";
|
|
15
|
+
const CLI_PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
16
|
+
function getPackageManagerExecutable(packageManager) {
|
|
17
|
+
return process.platform === "win32"
|
|
18
|
+
? `${packageManager}.cmd`
|
|
19
|
+
: packageManager;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns true when the candidate path is the same as or nested under
|
|
23
|
+
* the provided root path.
|
|
24
|
+
*/
|
|
25
|
+
function isPathInside(rootPath, candidatePath) {
|
|
26
|
+
const relativePath = path.relative(rootPath, candidatePath);
|
|
27
|
+
return (relativePath === "" ||
|
|
28
|
+
(!relativePath.startsWith("..") && !path.isAbsolute(relativePath)));
|
|
29
|
+
}
|
|
30
|
+
function expandHomeDirectory(filePath) {
|
|
31
|
+
if (filePath === "~") {
|
|
32
|
+
return os.homedir();
|
|
33
|
+
}
|
|
34
|
+
if (filePath.startsWith("~/")) {
|
|
35
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
36
|
+
}
|
|
37
|
+
return filePath;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Determine which supported package manager owns the current installation.
|
|
41
|
+
*
|
|
42
|
+
* @param params - package-manager lookup inputs
|
|
43
|
+
* @param params.packageRoot - resolved package directory for the running CLI
|
|
44
|
+
* @param params.npmGlobalRoot - `npm root -g` result when available
|
|
45
|
+
* @param params.pnpmGlobalRoot - `pnpm root -g` result when available
|
|
46
|
+
* @param params.bunGlobalRoot - Bun global `node_modules` root when available
|
|
47
|
+
*/
|
|
48
|
+
export function detectInstallPackageManager({ packageRoot, npmGlobalRoot, pnpmGlobalRoot, bunGlobalRoot, }) {
|
|
49
|
+
if (bunGlobalRoot && isPathInside(bunGlobalRoot, packageRoot)) {
|
|
50
|
+
return "bun";
|
|
51
|
+
}
|
|
52
|
+
if (pnpmGlobalRoot) {
|
|
53
|
+
const pnpmStoreRoot = path.resolve(pnpmGlobalRoot, "..", PACKAGE_MANAGER_PNPM_STORE_DIR);
|
|
54
|
+
if (isPathInside(pnpmGlobalRoot, packageRoot) ||
|
|
55
|
+
isPathInside(pnpmStoreRoot, packageRoot)) {
|
|
56
|
+
return "pnpm";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (npmGlobalRoot && isPathInside(npmGlobalRoot, packageRoot)) {
|
|
60
|
+
return "npm";
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
function getGlobalRoot(packageManager) {
|
|
65
|
+
try {
|
|
66
|
+
return childProcess
|
|
67
|
+
.execFileSync(getPackageManagerExecutable(packageManager), ["root", "-g"], {
|
|
68
|
+
encoding: "utf8",
|
|
69
|
+
})
|
|
70
|
+
.trim();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function getBunGlobalRoot() {
|
|
77
|
+
const configuredGlobalDir = process.env.BUN_INSTALL_GLOBAL_DIR ??
|
|
78
|
+
path.join(process.env.BUN_INSTALL ?? path.join(os.homedir(), ".bun"), "install", "global");
|
|
79
|
+
return path.join(expandHomeDirectory(configuredGlobalDir), "node_modules");
|
|
80
|
+
}
|
|
81
|
+
function getExecutableExtensions() {
|
|
82
|
+
if (process.platform !== "win32") {
|
|
83
|
+
return [""];
|
|
84
|
+
}
|
|
85
|
+
const pathExtensions = process.env.PATHEXT?.split(";").filter(Boolean);
|
|
86
|
+
return pathExtensions && pathExtensions.length > 0
|
|
87
|
+
? pathExtensions
|
|
88
|
+
: [".CMD", ".EXE", ".BAT", ""];
|
|
89
|
+
}
|
|
90
|
+
function isExecutable(filePath) {
|
|
91
|
+
try {
|
|
92
|
+
fs.accessSync(filePath, process.platform === "win32" ? fs.constants.F_OK : fs.constants.X_OK);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve an executable path using the current PATH, mirroring shell lookup.
|
|
101
|
+
*
|
|
102
|
+
* @param params - path lookup inputs
|
|
103
|
+
* @param params.commandNames - executable names to search for on `PATH`
|
|
104
|
+
*/
|
|
105
|
+
export function findExecutableOnPath({ commandNames, }) {
|
|
106
|
+
const pathValue = process.env.PATH;
|
|
107
|
+
if (!pathValue) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const executableExtensions = getExecutableExtensions();
|
|
111
|
+
for (const pathDirectory of pathValue.split(path.delimiter)) {
|
|
112
|
+
if (!pathDirectory) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
for (const commandName of commandNames) {
|
|
116
|
+
for (const executableExtension of executableExtensions) {
|
|
117
|
+
const candidatePath = path.join(pathDirectory, `${commandName}${executableExtension}`);
|
|
118
|
+
if (isExecutable(candidatePath)) {
|
|
119
|
+
return candidatePath;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Tokenize a simple shell command line so Deno install wrappers can be parsed.
|
|
128
|
+
*
|
|
129
|
+
* @param command - shell command line to tokenize
|
|
130
|
+
*/
|
|
131
|
+
export function tokenizeShellCommand(command) {
|
|
132
|
+
const tokens = [];
|
|
133
|
+
let currentToken = "";
|
|
134
|
+
let quote = null;
|
|
135
|
+
let isEscaped = false;
|
|
136
|
+
for (const character of command) {
|
|
137
|
+
if (isEscaped) {
|
|
138
|
+
currentToken += character;
|
|
139
|
+
isEscaped = false;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (quote === "'") {
|
|
143
|
+
if (character === "'") {
|
|
144
|
+
quote = null;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
currentToken += character;
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (quote === '"') {
|
|
152
|
+
if (character === '"') {
|
|
153
|
+
quote = null;
|
|
154
|
+
}
|
|
155
|
+
else if (character === "\\") {
|
|
156
|
+
isEscaped = true;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
currentToken += character;
|
|
160
|
+
}
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (character === "'" || character === '"') {
|
|
164
|
+
quote = character;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (character === "\\") {
|
|
168
|
+
isEscaped = true;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (/\s/.test(character)) {
|
|
172
|
+
if (currentToken.length > 0) {
|
|
173
|
+
tokens.push(currentToken);
|
|
174
|
+
currentToken = "";
|
|
175
|
+
}
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
currentToken += character;
|
|
179
|
+
}
|
|
180
|
+
if (quote || isEscaped) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
if (currentToken.length > 0) {
|
|
184
|
+
tokens.push(currentToken);
|
|
185
|
+
}
|
|
186
|
+
return tokens;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Parse a Deno `deno install -g` wrapper for the Phoenix CLI so the command
|
|
190
|
+
* can replay the original install with a newer npm package version.
|
|
191
|
+
*
|
|
192
|
+
* @param params - Deno wrapper inputs
|
|
193
|
+
* @param params.executablePath - absolute path to the generated executable
|
|
194
|
+
* @param params.scriptContent - wrapper script contents to inspect
|
|
195
|
+
*/
|
|
196
|
+
export function parseDenoInstallScript({ executablePath, scriptContent, }) {
|
|
197
|
+
if (!scriptContent.includes(DENO_INSTALL_MARKER)) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
const execLine = scriptContent
|
|
201
|
+
.split("\n")
|
|
202
|
+
.map((line) => line.trim())
|
|
203
|
+
.find((line) => line.startsWith("exec "));
|
|
204
|
+
if (!execLine) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
const tokens = tokenizeShellCommand(execLine.slice("exec ".length));
|
|
208
|
+
if (!tokens || tokens.length < 3) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
const executableToken = path.basename(tokens[0]);
|
|
212
|
+
if (executableToken !== "deno" || tokens[1] !== "run") {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
const specifierIndex = tokens.findIndex((token) => token.startsWith(`npm:${CLI_PACKAGE_NAME}`));
|
|
216
|
+
if (specifierIndex === -1) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const runtimeArgs = [];
|
|
220
|
+
for (let index = 2; index < specifierIndex; index++) {
|
|
221
|
+
const token = tokens[index];
|
|
222
|
+
if (token === "--lock") {
|
|
223
|
+
index += 1;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (token.startsWith("--lock=")) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
runtimeArgs.push(token);
|
|
230
|
+
}
|
|
231
|
+
const executableDirectory = path.dirname(executablePath);
|
|
232
|
+
const rootPath = path.basename(executableDirectory) === "bin"
|
|
233
|
+
? path.dirname(executableDirectory)
|
|
234
|
+
: executableDirectory;
|
|
235
|
+
return {
|
|
236
|
+
executableName: path.basename(executablePath),
|
|
237
|
+
executablePath,
|
|
238
|
+
rootPath,
|
|
239
|
+
runtimeArgs,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function getCurrentDenoInstallScript() {
|
|
243
|
+
const executablePath = findExecutableOnPath({
|
|
244
|
+
commandNames: CLI_COMMAND_NAMES,
|
|
245
|
+
});
|
|
246
|
+
if (!executablePath) {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
const scriptContent = fs.readFileSync(executablePath, "utf8");
|
|
251
|
+
return parseDenoInstallScript({
|
|
252
|
+
executablePath,
|
|
253
|
+
scriptContent,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Build the exact package-manager command that will install the requested
|
|
262
|
+
* version globally.
|
|
263
|
+
*
|
|
264
|
+
* @param params - command construction inputs
|
|
265
|
+
* @param params.packageManager - owning package manager for the current install
|
|
266
|
+
* @param params.packageName - npm package name to install
|
|
267
|
+
* @param params.version - exact version to install
|
|
268
|
+
*/
|
|
269
|
+
export function buildUpdateCommand({ packageManager, packageName, version, }) {
|
|
270
|
+
const packageSpecifier = `${packageName}@${version}`;
|
|
271
|
+
const command = getPackageManagerExecutable(packageManager);
|
|
272
|
+
const args = packageManager === "npm"
|
|
273
|
+
? ["install", "--global", packageSpecifier]
|
|
274
|
+
: ["add", "--global", packageSpecifier];
|
|
275
|
+
return {
|
|
276
|
+
command,
|
|
277
|
+
args,
|
|
278
|
+
displayCommand: [packageManager, ...args].join(" "),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Build the exact Deno reinstall command for a wrapper generated by
|
|
283
|
+
* `deno install --global`.
|
|
284
|
+
*
|
|
285
|
+
* @param params - Deno reinstall inputs
|
|
286
|
+
* @param params.installScript - parsed metadata from the existing Deno wrapper
|
|
287
|
+
* @param params.packageName - npm package name to reinstall
|
|
288
|
+
* @param params.version - exact version to install
|
|
289
|
+
*/
|
|
290
|
+
export function buildDenoUpdateCommand({ installScript, packageName, version, }) {
|
|
291
|
+
const command = getPackageManagerExecutable("deno");
|
|
292
|
+
const args = [
|
|
293
|
+
"install",
|
|
294
|
+
"--global",
|
|
295
|
+
"--force",
|
|
296
|
+
"--root",
|
|
297
|
+
installScript.rootPath,
|
|
298
|
+
"--name",
|
|
299
|
+
installScript.executableName,
|
|
300
|
+
...installScript.runtimeArgs,
|
|
301
|
+
`npm:${packageName}@${version}`,
|
|
302
|
+
];
|
|
303
|
+
return {
|
|
304
|
+
command,
|
|
305
|
+
args,
|
|
306
|
+
displayCommand: ["deno", ...args].join(" "),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function runUpdateCommand(updateCommand) {
|
|
310
|
+
const result = childProcess.spawnSync(updateCommand.command, updateCommand.args, {
|
|
311
|
+
stdio: "inherit",
|
|
312
|
+
});
|
|
313
|
+
if (result.error) {
|
|
314
|
+
throw result.error;
|
|
315
|
+
}
|
|
316
|
+
return result.status ?? ExitCode.FAILURE;
|
|
317
|
+
}
|
|
318
|
+
function getCurrentInstallPackageManager({ packageRoot, }) {
|
|
319
|
+
return detectInstallPackageManager({
|
|
320
|
+
packageRoot,
|
|
321
|
+
npmGlobalRoot: getGlobalRoot("npm"),
|
|
322
|
+
pnpmGlobalRoot: getGlobalRoot("pnpm"),
|
|
323
|
+
bunGlobalRoot: getBunGlobalRoot(),
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
function formatVersionStatus({ currentVersion, latestVersion, }) {
|
|
327
|
+
return [
|
|
328
|
+
`Current version: ${currentVersion}`,
|
|
329
|
+
`Latest version: ${latestVersion}`,
|
|
330
|
+
].join("\n");
|
|
331
|
+
}
|
|
332
|
+
async function selfUpdateHandler(options) {
|
|
333
|
+
try {
|
|
334
|
+
const latestVersion = await fetchLatestPublishedCliVersion();
|
|
335
|
+
if (!latestVersion) {
|
|
336
|
+
throw new TypeError("Unable to fetch latest CLI version from npm");
|
|
337
|
+
}
|
|
338
|
+
const versionComparison = compareSemanticVersions({
|
|
339
|
+
leftVersion: latestVersion,
|
|
340
|
+
rightVersion: CLI_VERSION,
|
|
341
|
+
});
|
|
342
|
+
if (versionComparison === null) {
|
|
343
|
+
throw new Error(`Invalid published CLI version: ${latestVersion}`);
|
|
344
|
+
}
|
|
345
|
+
writeOutput({
|
|
346
|
+
message: formatVersionStatus({
|
|
347
|
+
currentVersion: CLI_VERSION,
|
|
348
|
+
latestVersion,
|
|
349
|
+
}),
|
|
350
|
+
});
|
|
351
|
+
if (versionComparison <= 0) {
|
|
352
|
+
writeOutput({ message: "px is up to date." });
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
if (options.check) {
|
|
356
|
+
writeOutput({
|
|
357
|
+
message: "Update available. Run `px self update` to install it.",
|
|
358
|
+
});
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
const packageManager = getCurrentInstallPackageManager({
|
|
362
|
+
packageRoot: CLI_PACKAGE_ROOT,
|
|
363
|
+
});
|
|
364
|
+
const denoInstallScript = packageManager == null ? getCurrentDenoInstallScript() : null;
|
|
365
|
+
const updateCommand = packageManager != null
|
|
366
|
+
? buildUpdateCommand({
|
|
367
|
+
packageManager,
|
|
368
|
+
packageName: CLI_PACKAGE_NAME,
|
|
369
|
+
version: latestVersion,
|
|
370
|
+
})
|
|
371
|
+
: denoInstallScript
|
|
372
|
+
? buildDenoUpdateCommand({
|
|
373
|
+
installScript: denoInstallScript,
|
|
374
|
+
packageName: CLI_PACKAGE_NAME,
|
|
375
|
+
version: latestVersion,
|
|
376
|
+
})
|
|
377
|
+
: null;
|
|
378
|
+
if (!updateCommand) {
|
|
379
|
+
writeError({
|
|
380
|
+
message: "Error: Automatic updates are only supported for global npm, pnpm, bun, or Deno installs of @arizeai/phoenix-cli.",
|
|
381
|
+
});
|
|
382
|
+
process.exit(ExitCode.FAILURE);
|
|
383
|
+
}
|
|
384
|
+
writeOutput({
|
|
385
|
+
message: `Updating via ${updateCommand.displayCommand}`,
|
|
386
|
+
});
|
|
387
|
+
const exitCode = runUpdateCommand(updateCommand);
|
|
388
|
+
if (exitCode !== ExitCode.SUCCESS) {
|
|
389
|
+
process.exit(exitCode);
|
|
390
|
+
}
|
|
391
|
+
writeOutput({
|
|
392
|
+
message: `Updated px to ${latestVersion}.`,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
writeError({
|
|
397
|
+
message: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
398
|
+
});
|
|
399
|
+
process.exit(getExitCodeForError(error));
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
function createSelfUpdateCommand() {
|
|
403
|
+
const command = new Command("update");
|
|
404
|
+
command
|
|
405
|
+
.description("Update the installed Phoenix CLI to the latest npm version")
|
|
406
|
+
.option("--check", "Only check whether a newer version is available")
|
|
407
|
+
.action(selfUpdateHandler);
|
|
408
|
+
return command;
|
|
409
|
+
}
|
|
410
|
+
export function createSelfCommand() {
|
|
411
|
+
const command = new Command("self");
|
|
412
|
+
command.description("Manage the installed Phoenix CLI");
|
|
413
|
+
command.addCommand(createSelfUpdateCommand());
|
|
414
|
+
return command;
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=self.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../src/commands/self.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Phoenix CLI Entry Point
|
|
3
3
|
import { main } from "./cli.js";
|
|
4
|
+
import { writeError } from "./io.js";
|
|
4
5
|
// Run CLI when executed directly
|
|
5
|
-
main()
|
|
6
|
+
void main().catch((error) => {
|
|
7
|
+
writeError({
|
|
8
|
+
message: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
9
|
+
});
|
|
10
|
+
process.exit(1);
|
|
11
|
+
});
|
|
6
12
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,0BAA0B;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,0BAA0B;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,iCAAiC;AACjC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,UAAU,CAAC;QACT,OAAO,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;KAC5E,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type SemanticVersion = {
|
|
2
|
+
major: number;
|
|
3
|
+
minor: number;
|
|
4
|
+
patch: number;
|
|
5
|
+
prerelease?: string;
|
|
6
|
+
};
|
|
7
|
+
export interface CliVersionStatus {
|
|
8
|
+
currentVersion: string;
|
|
9
|
+
latestVersion?: string;
|
|
10
|
+
hasUpdate?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface FetchLatestPublishedCliVersionOptions {
|
|
13
|
+
fetchFn?: typeof fetch;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare const CLI_VERSION: string;
|
|
17
|
+
/**
|
|
18
|
+
* Returns the CLI version from package metadata.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getCliVersion(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Parse a semver string so the CLI can compare local and published versions.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseSemanticVersion({ rawVersion, }: {
|
|
25
|
+
rawVersion: string;
|
|
26
|
+
}): SemanticVersion | null;
|
|
27
|
+
/**
|
|
28
|
+
* Compare two semantic versions.
|
|
29
|
+
* Returns `1` when left is newer, `-1` when right is newer, and `0` when equal.
|
|
30
|
+
*/
|
|
31
|
+
export declare function compareSemanticVersions({ leftVersion, rightVersion, }: {
|
|
32
|
+
leftVersion: string;
|
|
33
|
+
rightVersion: string;
|
|
34
|
+
}): number | null;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch the latest published CLI version from the npm registry.
|
|
37
|
+
*/
|
|
38
|
+
export declare function fetchLatestPublishedCliVersion({ fetchFn, timeoutMs, }?: FetchLatestPublishedCliVersionOptions): Promise<string | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the current CLI version and, when possible, the latest published version.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getCliVersionStatus({ fetchFn, timeoutMs, }?: FetchLatestPublishedCliVersionOptions): Promise<CliVersionStatus>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AASA,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAUF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qCAAqC;IACpD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoCD,eAAO,MAAM,WAAW,QAGH,CAAC;AAEtB;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,eAAe,GAAG,IAAI,CAYzB;AA0DD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,WAAW,EACX,YAAY,GACb,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,GAAG,IAAI,CAsBhB;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,EACnD,OAAe,EACf,SAA4C,GAC7C,GAAE,qCAA0C,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,SAAS,GACV,GAAE,qCAA0C,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyBxE"}
|
package/build/version.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
const CLI_PACKAGE_NAME = "@arizeai/phoenix-cli";
|
|
3
|
+
const CLI_LATEST_VERSION_URL = `https://registry.npmjs.org/${encodeURIComponent(CLI_PACKAGE_NAME)}/latest`;
|
|
4
|
+
const DEFAULT_VERSION_CHECK_TIMEOUT_MS = 1500;
|
|
5
|
+
const DEFAULT_CLI_VERSION = "unknown";
|
|
6
|
+
const SEMANTIC_VERSION_PATTERN = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
|
|
7
|
+
function getPackageJsonVersion({ packageJson, }) {
|
|
8
|
+
if (typeof packageJson.version !== "string") {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const version = packageJson.version.trim();
|
|
12
|
+
return version.length > 0 ? version : undefined;
|
|
13
|
+
}
|
|
14
|
+
function readCliVersionFromPackageJson() {
|
|
15
|
+
try {
|
|
16
|
+
const packageJson = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
|
|
17
|
+
return getPackageJsonVersion({ packageJson });
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function readCliVersionFromEnvironment() {
|
|
24
|
+
if (typeof process.env.npm_package_version !== "string") {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const version = process.env.npm_package_version.trim();
|
|
28
|
+
return version.length > 0 ? version : undefined;
|
|
29
|
+
}
|
|
30
|
+
export const CLI_VERSION = readCliVersionFromPackageJson() ??
|
|
31
|
+
readCliVersionFromEnvironment() ??
|
|
32
|
+
DEFAULT_CLI_VERSION;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the CLI version from package metadata.
|
|
35
|
+
*/
|
|
36
|
+
export function getCliVersion() {
|
|
37
|
+
return CLI_VERSION;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse a semver string so the CLI can compare local and published versions.
|
|
41
|
+
*/
|
|
42
|
+
export function parseSemanticVersion({ rawVersion, }) {
|
|
43
|
+
const match = rawVersion.trim().match(SEMANTIC_VERSION_PATTERN);
|
|
44
|
+
if (!match) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
major: Number.parseInt(match[1], 10),
|
|
49
|
+
minor: Number.parseInt(match[2], 10),
|
|
50
|
+
patch: Number.parseInt(match[3], 10),
|
|
51
|
+
prerelease: match[4] || undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function comparePrereleaseSegments({ leftPrerelease, rightPrerelease, }) {
|
|
55
|
+
if (leftPrerelease === rightPrerelease) {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
if (!leftPrerelease) {
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
if (!rightPrerelease) {
|
|
62
|
+
return -1;
|
|
63
|
+
}
|
|
64
|
+
const leftSegments = leftPrerelease.split(".");
|
|
65
|
+
const rightSegments = rightPrerelease.split(".");
|
|
66
|
+
const segmentCount = Math.max(leftSegments.length, rightSegments.length);
|
|
67
|
+
for (let index = 0; index < segmentCount; index += 1) {
|
|
68
|
+
const leftSegment = leftSegments[index];
|
|
69
|
+
const rightSegment = rightSegments[index];
|
|
70
|
+
if (leftSegment === rightSegment) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (leftSegment === undefined) {
|
|
74
|
+
return -1;
|
|
75
|
+
}
|
|
76
|
+
if (rightSegment === undefined) {
|
|
77
|
+
return 1;
|
|
78
|
+
}
|
|
79
|
+
const leftNumber = Number.parseInt(leftSegment, 10);
|
|
80
|
+
const rightNumber = Number.parseInt(rightSegment, 10);
|
|
81
|
+
const isLeftNumeric = String(leftNumber) === leftSegment;
|
|
82
|
+
const isRightNumeric = String(rightNumber) === rightSegment;
|
|
83
|
+
if (isLeftNumeric && isRightNumeric) {
|
|
84
|
+
return leftNumber === rightNumber ? 0 : leftNumber > rightNumber ? 1 : -1;
|
|
85
|
+
}
|
|
86
|
+
if (isLeftNumeric) {
|
|
87
|
+
return -1;
|
|
88
|
+
}
|
|
89
|
+
if (isRightNumeric) {
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
return leftSegment.localeCompare(rightSegment);
|
|
93
|
+
}
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Compare two semantic versions.
|
|
98
|
+
* Returns `1` when left is newer, `-1` when right is newer, and `0` when equal.
|
|
99
|
+
*/
|
|
100
|
+
export function compareSemanticVersions({ leftVersion, rightVersion, }) {
|
|
101
|
+
const leftParsedVersion = parseSemanticVersion({ rawVersion: leftVersion });
|
|
102
|
+
const rightParsedVersion = parseSemanticVersion({ rawVersion: rightVersion });
|
|
103
|
+
if (!leftParsedVersion || !rightParsedVersion) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
if (leftParsedVersion.major !== rightParsedVersion.major) {
|
|
107
|
+
return leftParsedVersion.major > rightParsedVersion.major ? 1 : -1;
|
|
108
|
+
}
|
|
109
|
+
if (leftParsedVersion.minor !== rightParsedVersion.minor) {
|
|
110
|
+
return leftParsedVersion.minor > rightParsedVersion.minor ? 1 : -1;
|
|
111
|
+
}
|
|
112
|
+
if (leftParsedVersion.patch !== rightParsedVersion.patch) {
|
|
113
|
+
return leftParsedVersion.patch > rightParsedVersion.patch ? 1 : -1;
|
|
114
|
+
}
|
|
115
|
+
return comparePrereleaseSegments({
|
|
116
|
+
leftPrerelease: leftParsedVersion.prerelease,
|
|
117
|
+
rightPrerelease: rightParsedVersion.prerelease,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Fetch the latest published CLI version from the npm registry.
|
|
122
|
+
*/
|
|
123
|
+
export async function fetchLatestPublishedCliVersion({ fetchFn = fetch, timeoutMs = DEFAULT_VERSION_CHECK_TIMEOUT_MS, } = {}) {
|
|
124
|
+
const controller = new AbortController();
|
|
125
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
126
|
+
try {
|
|
127
|
+
const response = await fetchFn(CLI_LATEST_VERSION_URL, {
|
|
128
|
+
headers: {
|
|
129
|
+
Accept: "application/json",
|
|
130
|
+
},
|
|
131
|
+
signal: controller.signal,
|
|
132
|
+
});
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const payload = (await response.json());
|
|
137
|
+
return typeof payload.version === "string" ? payload.version : undefined;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
clearTimeout(timeoutId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Resolve the current CLI version and, when possible, the latest published version.
|
|
148
|
+
*/
|
|
149
|
+
export async function getCliVersionStatus({ fetchFn, timeoutMs, } = {}) {
|
|
150
|
+
const currentVersion = getCliVersion();
|
|
151
|
+
const latestVersion = await fetchLatestPublishedCliVersion({
|
|
152
|
+
fetchFn,
|
|
153
|
+
timeoutMs,
|
|
154
|
+
});
|
|
155
|
+
if (!latestVersion) {
|
|
156
|
+
return { currentVersion };
|
|
157
|
+
}
|
|
158
|
+
const comparison = compareSemanticVersions({
|
|
159
|
+
leftVersion: latestVersion,
|
|
160
|
+
rightVersion: currentVersion,
|
|
161
|
+
});
|
|
162
|
+
if (comparison === null) {
|
|
163
|
+
return { currentVersion };
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
currentVersion,
|
|
167
|
+
latestVersion,
|
|
168
|
+
hasUpdate: comparison > 0,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arizeai/phoenix-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "A command-line interface for Phoenix",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"arize",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@arizeai/openinference-semantic-conventions": "^1.1.0",
|
|
34
34
|
"commander": "^12.1.0",
|
|
35
|
-
"@arizeai/phoenix-client": "6.5.
|
|
36
|
-
"@arizeai/phoenix-config": "0.1.
|
|
35
|
+
"@arizeai/phoenix-client": "6.5.3",
|
|
36
|
+
"@arizeai/phoenix-config": "0.1.2"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^18.19.0",
|