@arizeai/phoenix-cli 0.11.1 → 0.12.1

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 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.
@@ -275,6 +291,21 @@ px session my-session-id --include-annotations --format raw | jq '.traces'
275
291
 
276
292
  ---
277
293
 
294
+ ### `px annotation-config`
295
+
296
+ List annotation configurations defined in your Phoenix instance.
297
+
298
+ ```bash
299
+ px annotation-config --format raw --no-progress | jq '.[].name'
300
+ ```
301
+
302
+ | Option | Description | Default |
303
+ | ------------------- | -------------------------- | -------- |
304
+ | `--format <format>` | `pretty`, `json`, or `raw` | `pretty` |
305
+ | `--no-progress` | Suppress progress output | — |
306
+
307
+ ---
308
+
278
309
  ### `px auth status`
279
310
 
280
311
  Show current Phoenix authentication status, including the configured endpoint, whether you are authenticated or anonymous, and an obscured API key.
@@ -1 +1 @@
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,CAYnC;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"}
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
@@ -17,9 +17,7 @@ export function getBannerInfoLines({ serverUrl, project, hasApiKey, currentVersi
17
17
  ...(hasApiKey ? [`API Key: set`] : []),
18
18
  `Version: v${currentVersion}`,
19
19
  ...(hasUpdate && latestVersion
20
- ? [
21
- `Update: v${latestVersion} available. Run npm install -g @arizeai/phoenix-cli`,
22
- ]
20
+ ? [`Update: v${latestVersion} available. Run px self update`]
23
21
  : []),
24
22
  ];
25
23
  }
@@ -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;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;gBACE,aAAa,aAAa,qDAAqD;aAChF;YACH,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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,aAAa,IAAI,OAAO,CA0BvC;AAGD,wBAAsB,IAAI,CAAC,EACzB,IAAmB,GACpB,GAAE;IACD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACZ,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrB"}
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,7 +1,7 @@
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";
4
+ import { createAnnotationConfigCommand, createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createDocsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createSessionCommand, createSessionsCommand, createSelfCommand, createSpansCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
5
5
  import { CLI_VERSION } from "./version.js";
6
6
  export function createProgram() {
7
7
  const program = new Command();
@@ -25,6 +25,7 @@ export function createProgram() {
25
25
  program.addCommand(createPromptCommand());
26
26
  program.addCommand(createApiCommand());
27
27
  program.addCommand(createDocsCommand());
28
+ program.addCommand(createSelfCommand());
28
29
  return program;
29
30
  }
30
31
  // Phoenix CLI Main Logic
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;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;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
+ {"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,11 +1,27 @@
1
+ import type { componentsV1 } from "@arizeai/phoenix-client";
1
2
  import { Command } from "commander";
3
+ type ViewerUser = componentsV1["schemas"]["GetViewerResponseBody"]["data"];
2
4
  /**
3
5
  * Obscure an API key for display using asterisks.
4
6
  * Shows a fixed number of asterisks regardless of key length for security.
5
7
  */
6
8
  export declare function obscureApiKey(apiKey: string): string;
9
+ interface FetchViewerSuccess {
10
+ status: "success";
11
+ user: ViewerUser;
12
+ }
13
+ interface FetchViewerError {
14
+ status: "network_error" | "auth_error" | "not_found" | "unknown_error";
15
+ message: string;
16
+ }
17
+ export type FetchViewerResult = FetchViewerSuccess | FetchViewerError;
18
+ /**
19
+ * Format auth status output in gh-style format.
20
+ */
21
+ export declare function formatAuthStatus(endpoint: string, result: FetchViewerResult, apiKey?: string): string;
7
22
  /**
8
23
  * Create the auth command with subcommands
9
24
  */
10
25
  export declare function createAuthCommand(): Command;
26
+ export {};
11
27
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKpD;AA8CD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,KAAK,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAO3E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AAuCtE;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAiB,EACzB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAiCR;AA6DD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
@@ -1,8 +1,8 @@
1
1
  import { Command } from "commander";
2
+ import { createPhoenixClient } from "../client.js";
2
3
  import { resolveConfig } from "../config.js";
3
4
  import { ExitCode } from "../exitCodes.js";
4
5
  import { writeError, writeOutput } from "../io.js";
5
- import { formatTable } from "./formatTable.js";
6
6
  /**
7
7
  * Obscure an API key for display using asterisks.
8
8
  * Shows a fixed number of asterisks regardless of key length for security.
@@ -13,30 +13,115 @@ export function obscureApiKey(apiKey) {
13
13
  }
14
14
  return "************************************";
15
15
  }
16
+ /**
17
+ * Extract an HTTP status code from the phoenix-client middleware error message.
18
+ * The middleware throws errors like: "https://example.org/api/v1/user: 401 Unauthorized"
19
+ */
20
+ function parseStatusCode(error) {
21
+ const match = error.message.match(/:\s*(\d{3})\s/);
22
+ return match ? parseInt(match[1], 10) : null;
23
+ }
24
+ /**
25
+ * Fetch the authenticated viewer from the Phoenix server.
26
+ * Gracefully handles network errors, auth failures, and missing endpoints.
27
+ */
28
+ async function fetchViewer(config) {
29
+ try {
30
+ const client = createPhoenixClient({ config });
31
+ const response = await client.GET("/v1/user");
32
+ return { status: "success", user: response.data.data };
33
+ }
34
+ catch (error) {
35
+ // TypeError is thrown by the Fetch API for network-level failures
36
+ if (error instanceof TypeError) {
37
+ return { status: "network_error", message: error.message };
38
+ }
39
+ if (error instanceof Error) {
40
+ const statusCode = parseStatusCode(error);
41
+ if (statusCode === 401 || statusCode === 403) {
42
+ return { status: "auth_error", message: error.message };
43
+ }
44
+ if (statusCode === 404) {
45
+ return { status: "not_found", message: error.message };
46
+ }
47
+ return { status: "unknown_error", message: error.message };
48
+ }
49
+ return { status: "unknown_error", message: String(error) };
50
+ }
51
+ }
52
+ /**
53
+ * Format auth status output in gh-style format.
54
+ */
55
+ export function formatAuthStatus(endpoint, result, apiKey) {
56
+ const lines = [endpoint];
57
+ if (result.status === "success") {
58
+ const user = result.user;
59
+ if (user.auth_method === "ANONYMOUS") {
60
+ lines.push(" \u2713 Authentication not required (anonymous)");
61
+ }
62
+ else {
63
+ lines.push(` \u2713 Logged in as ${user.username} (api key)`);
64
+ lines.push(` - Role: ${user.role}`);
65
+ }
66
+ }
67
+ else if (result.status === "auth_error") {
68
+ lines.push(" \u2717 Authentication failed (invalid or expired token)");
69
+ }
70
+ else if (result.status === "not_found") {
71
+ lines.push(" - Could not verify token (server does not support user endpoint)");
72
+ }
73
+ else {
74
+ // network_error or unknown_error
75
+ if (apiKey) {
76
+ lines.push(" \u2717 Token configured but could not verify (server unreachable)");
77
+ }
78
+ else {
79
+ lines.push(" \u2717 Could not connect to server");
80
+ }
81
+ }
82
+ if (apiKey) {
83
+ lines.push(` - Token: ${obscureApiKey(apiKey)}`);
84
+ }
85
+ return lines.join("\n");
86
+ }
87
+ function exitCodeForResult(result) {
88
+ switch (result.status) {
89
+ case "success":
90
+ // 404 means the server is an older version without /v1/user — the token
91
+ // may still be valid, we just can't verify it. Not a failure.
92
+ case "not_found":
93
+ return ExitCode.SUCCESS;
94
+ case "auth_error":
95
+ return ExitCode.AUTH_REQUIRED;
96
+ case "network_error":
97
+ return ExitCode.NETWORK_ERROR;
98
+ case "unknown_error":
99
+ return ExitCode.FAILURE;
100
+ }
101
+ }
16
102
  /**
17
103
  * Auth status command handler
18
104
  */
19
105
  async function authStatusHandler(options) {
20
- // Resolve configuration
21
106
  const config = resolveConfig({
22
107
  cliOptions: {
23
108
  endpoint: options.endpoint,
24
109
  apiKey: options.apiKey,
25
110
  },
26
111
  });
27
- // Check if endpoint is configured
28
112
  if (!config.endpoint) {
29
113
  writeError({
30
114
  message: "Configuration Error:\n - Phoenix endpoint not configured",
31
115
  });
32
116
  process.exit(ExitCode.INVALID_ARGUMENT);
33
117
  }
34
- const row = {
35
- endpoint: config.endpoint,
36
- status: config.apiKey ? "authenticated" : "anonymous",
37
- "api key": config.apiKey ? obscureApiKey(config.apiKey) : "not set",
38
- };
39
- writeOutput({ message: formatTable([row]) });
118
+ const result = await fetchViewer(config);
119
+ const output = formatAuthStatus(config.endpoint, result, config.apiKey);
120
+ writeOutput({ message: output });
121
+ const code = exitCodeForResult(result);
122
+ if (code !== ExitCode.SUCCESS) {
123
+ process.exit(code);
124
+ }
40
125
  }
41
126
  /**
42
127
  * Create the auth status subcommand
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,sCAAsC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,OAA0B;IACzD,wBAAwB;IACxB,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,UAAU,CAAC;YACT,OAAO,EAAE,2DAA2D;SACrE,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,GAAG,GAA2B;QAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW;QACrD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACpE,CAAC;IAEF,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO;SACJ,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAErD,kBAAkB;IAClB,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -14,4 +14,5 @@ export * from "./prompts.js";
14
14
  export * from "./prompt.js";
15
15
  export * from "./api.js";
16
16
  export * from "./docs.js";
17
+ export * from "./self.js";
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -14,4 +14,5 @@ export * from "./prompts.js";
14
14
  export * from "./prompt.js";
15
15
  export * from "./api.js";
16
16
  export * from "./docs.js";
17
+ export * from "./self.js";
17
18
  //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arizeai/phoenix-cli",
3
- "version": "0.11.1",
3
+ "version": "0.12.1",
4
4
  "description": "A command-line interface for Phoenix",
5
5
  "keywords": [
6
6
  "arize",
@@ -32,18 +32,18 @@
32
32
  "dependencies": {
33
33
  "@arizeai/openinference-semantic-conventions": "^1.1.0",
34
34
  "commander": "^12.1.0",
35
- "@arizeai/phoenix-client": "6.5.2",
36
- "@arizeai/phoenix-config": "0.1.1"
35
+ "@arizeai/phoenix-client": "6.5.4",
36
+ "@arizeai/phoenix-config": "0.1.3"
37
37
  },
38
38
  "devDependencies": {
39
- "@types/node": "^18.19.0",
39
+ "@types/node": "^22.12.0",
40
40
  "rimraf": "^6.1.3",
41
41
  "tsc-alias": "^1.8.11",
42
42
  "tsx": "^4.19.3",
43
- "vitest": "^2.1.9"
43
+ "vitest": "^4.1.0"
44
44
  },
45
45
  "engines": {
46
- "node": ">=18"
46
+ "node": ">=20"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "tsc && tsc-alias && chmod 755 build/index.js",