@arizeai/phoenix-cli 1.3.1 → 1.4.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.
Files changed (69) hide show
  1. package/README.md +99 -13
  2. package/build/banner.d.ts.map +1 -1
  3. package/build/banner.js +11 -2
  4. package/build/banner.js.map +1 -1
  5. package/build/cli.d.ts.map +1 -1
  6. package/build/cli.js +2 -1
  7. package/build/cli.js.map +1 -1
  8. package/build/commands/annotationMutationUtils.d.ts +1 -1
  9. package/build/commands/annotationMutationUtils.d.ts.map +1 -1
  10. package/build/commands/annotationMutationUtils.js +13 -1
  11. package/build/commands/annotationMutationUtils.js.map +1 -1
  12. package/build/commands/auth.d.ts +1 -1
  13. package/build/commands/auth.d.ts.map +1 -1
  14. package/build/commands/auth.js +31 -9
  15. package/build/commands/auth.js.map +1 -1
  16. package/build/commands/chunkArray.d.ts +5 -0
  17. package/build/commands/chunkArray.d.ts.map +1 -0
  18. package/build/commands/chunkArray.js +8 -0
  19. package/build/commands/chunkArray.js.map +1 -0
  20. package/build/commands/formatProfiles.d.ts +40 -0
  21. package/build/commands/formatProfiles.d.ts.map +1 -0
  22. package/build/commands/formatProfiles.js +53 -0
  23. package/build/commands/formatProfiles.js.map +1 -0
  24. package/build/commands/formatSessions.d.ts +17 -5
  25. package/build/commands/formatSessions.d.ts.map +1 -1
  26. package/build/commands/formatSessions.js +52 -10
  27. package/build/commands/formatSessions.js.map +1 -1
  28. package/build/commands/formatSpans.d.ts +3 -1
  29. package/build/commands/formatSpans.d.ts.map +1 -1
  30. package/build/commands/formatSpans.js +8 -7
  31. package/build/commands/formatSpans.js.map +1 -1
  32. package/build/commands/index.d.ts +1 -0
  33. package/build/commands/index.d.ts.map +1 -1
  34. package/build/commands/index.js +1 -0
  35. package/build/commands/index.js.map +1 -1
  36. package/build/commands/noteMutationUtils.d.ts +1 -1
  37. package/build/commands/noteMutationUtils.d.ts.map +1 -1
  38. package/build/commands/noteMutationUtils.js +13 -1
  39. package/build/commands/noteMutationUtils.js.map +1 -1
  40. package/build/commands/profile.d.ts +14 -0
  41. package/build/commands/profile.d.ts.map +1 -0
  42. package/build/commands/profile.js +357 -0
  43. package/build/commands/profile.js.map +1 -0
  44. package/build/commands/session.d.ts +2 -0
  45. package/build/commands/session.d.ts.map +1 -1
  46. package/build/commands/session.js +304 -9
  47. package/build/commands/session.js.map +1 -1
  48. package/build/commands/span.d.ts.map +1 -1
  49. package/build/commands/span.js +6 -1
  50. package/build/commands/span.js.map +1 -1
  51. package/build/commands/spanAnnotations.d.ts.map +1 -1
  52. package/build/commands/spanAnnotations.js +7 -10
  53. package/build/commands/spanAnnotations.js.map +1 -1
  54. package/build/commands/traceAnnotations.d.ts.map +1 -1
  55. package/build/commands/traceAnnotations.js +7 -10
  56. package/build/commands/traceAnnotations.js.map +1 -1
  57. package/build/config.d.ts +39 -4
  58. package/build/config.d.ts.map +1 -1
  59. package/build/config.js +73 -5
  60. package/build/config.js.map +1 -1
  61. package/build/exitCodes.d.ts +5 -3
  62. package/build/exitCodes.d.ts.map +1 -1
  63. package/build/exitCodes.js +5 -3
  64. package/build/exitCodes.js.map +1 -1
  65. package/build/settings.d.ts +113 -5
  66. package/build/settings.d.ts.map +1 -1
  67. package/build/settings.js +263 -5
  68. package/build/settings.js.map +1 -1
  69. package/package.json +4 -4
@@ -0,0 +1,357 @@
1
+ import { spawnSync } from "child_process";
2
+ import * as fs from "fs";
3
+ import * as os from "os";
4
+ import * as path from "path";
5
+ import { Command } from "commander";
6
+ import { ExitCode } from "../exitCodes.js";
7
+ import { writeError, writeOutput, writeProgress } from "../io.js";
8
+ import { ProfileEntrySchema, SettingsFileError, getStoredActiveProfile, loadSettings, saveSettings, validateProfileName, } from "../settings.js";
9
+ import { formatProfilesOutput, } from "./formatProfiles.js";
10
+ // ---------------------------------------------------------------------------
11
+ // Helpers
12
+ // ---------------------------------------------------------------------------
13
+ function buildProfileListEntries(file) {
14
+ const activeName = getStoredActiveProfile(file)?.name;
15
+ return Object.entries(file.profiles).map(([name, entry]) => buildSingleProfileEntry(name, entry, name === activeName));
16
+ }
17
+ function buildSingleProfileEntry(name, entry, active) {
18
+ return {
19
+ name,
20
+ endpoint: entry.endpoint,
21
+ project: entry.project,
22
+ hasApiKey: entry.apiKey !== undefined && entry.apiKey.length > 0,
23
+ headers: entry.headers,
24
+ active,
25
+ };
26
+ }
27
+ function isValidUrl(value) {
28
+ try {
29
+ new URL(value);
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ function collectStrings(value, previous) {
37
+ return previous.concat([value]);
38
+ }
39
+ /**
40
+ * Load settings in strict mode. On any parse / I/O error, write the failure
41
+ * to stderr and exit with `ExitCode.FAILURE`. Mutation commands all share
42
+ * this preamble so a corrupt settings file fails loudly instead of silently
43
+ * overwriting whatever's on disk.
44
+ */
45
+ function loadSettingsStrictOrExit() {
46
+ try {
47
+ return loadSettings({ strict: true });
48
+ }
49
+ catch (err) {
50
+ if (err instanceof SettingsFileError) {
51
+ writeError({ message: `Error reading settings file: ${err.message}` });
52
+ process.exit(ExitCode.FAILURE);
53
+ }
54
+ throw err;
55
+ }
56
+ }
57
+ async function profileListHandler(options) {
58
+ const file = loadSettings();
59
+ const entries = buildProfileListEntries(file);
60
+ const output = formatProfilesOutput({
61
+ profiles: entries,
62
+ format: options.format,
63
+ });
64
+ writeOutput({ message: output });
65
+ }
66
+ function createProfileListCommand() {
67
+ return new Command("list")
68
+ .description("List all profiles")
69
+ .option("--format <format>", 'Output format: pretty, json, or raw (default: "pretty")')
70
+ .action(profileListHandler);
71
+ }
72
+ async function profileShowHandler(name, options) {
73
+ const file = loadSettings();
74
+ let resolvedName;
75
+ if (name !== undefined) {
76
+ resolvedName = name;
77
+ }
78
+ else {
79
+ resolvedName = getStoredActiveProfile(file)?.name;
80
+ }
81
+ if (resolvedName === undefined) {
82
+ writeError({
83
+ message: "No active profile. Use `px profile use <name>` to set one, or pass a profile name.",
84
+ });
85
+ process.exit(ExitCode.INVALID_ARGUMENT);
86
+ }
87
+ const entry = file.profiles[resolvedName];
88
+ if (entry === undefined) {
89
+ writeError({ message: `Profile "${resolvedName}" does not exist.` });
90
+ process.exit(ExitCode.INVALID_ARGUMENT);
91
+ }
92
+ const activeName = getStoredActiveProfile(file)?.name;
93
+ const profileEntry = buildSingleProfileEntry(resolvedName, entry, resolvedName === activeName);
94
+ const output = formatProfilesOutput({
95
+ profiles: profileEntry,
96
+ format: options.format,
97
+ });
98
+ writeOutput({ message: output });
99
+ }
100
+ function createProfileShowCommand() {
101
+ return new Command("show")
102
+ .description("Show a profile (defaults to the current profile)")
103
+ .argument("[name]", "Profile name (defaults to the current active profile)")
104
+ .option("--format <format>", 'Output format: pretty, json, or raw (default: "pretty")')
105
+ .action(profileShowHandler);
106
+ }
107
+ async function profileCreateHandler(name, options) {
108
+ if (!validateProfileName(name)) {
109
+ writeError({
110
+ message: `Invalid profile name "${name}". Names must contain only letters, numbers, hyphens, and underscores.`,
111
+ });
112
+ process.exit(ExitCode.INVALID_ARGUMENT);
113
+ }
114
+ if (options.endpoint && !isValidUrl(options.endpoint)) {
115
+ writeError({
116
+ message: `Invalid endpoint "${options.endpoint}". Must be an absolute URL (e.g. https://app.phoenix.arize.com).`,
117
+ });
118
+ process.exit(ExitCode.INVALID_ARGUMENT);
119
+ }
120
+ // Parse --header key=value pairs
121
+ const headers = {};
122
+ for (const h of options.header ?? []) {
123
+ const idx = h.indexOf("=");
124
+ if (idx === -1) {
125
+ writeError({
126
+ message: `Invalid --header "${h}". Expected format: key=value.`,
127
+ });
128
+ process.exit(ExitCode.INVALID_ARGUMENT);
129
+ }
130
+ headers[h.slice(0, idx)] = h.slice(idx + 1);
131
+ }
132
+ const file = loadSettingsStrictOrExit();
133
+ if (file.profiles[name] !== undefined) {
134
+ writeError({
135
+ message: `Profile "${name}" already exists. Delete it first or choose a different name.`,
136
+ });
137
+ process.exit(ExitCode.INVALID_ARGUMENT);
138
+ }
139
+ const entry = {
140
+ ...(options.endpoint ? { endpoint: options.endpoint } : {}),
141
+ ...(options.project ? { project: options.project } : {}),
142
+ ...(options.apiKey ? { apiKey: options.apiKey } : {}),
143
+ ...(Object.keys(headers).length > 0 ? { headers } : {}),
144
+ };
145
+ const newFile = {
146
+ ...file,
147
+ profiles: { ...file.profiles, [name]: entry },
148
+ activeProfile: options.activate ? name : file.activeProfile,
149
+ };
150
+ saveSettings(newFile);
151
+ const message = options.activate
152
+ ? `Created profile "${name}" and set as active.`
153
+ : `Created profile "${name}".`;
154
+ writeOutput({ message });
155
+ }
156
+ function createProfileCreateCommand() {
157
+ return new Command("create")
158
+ .description("Create a new profile")
159
+ .argument("<name>", "Profile name (alphanumeric, hyphens, underscores)")
160
+ .option("--endpoint <url>", "Phoenix API endpoint")
161
+ .option("--project <name>", "Default project name")
162
+ .option("--api-key <key>", "Phoenix API key for authentication. Stored in the settings file (mode 0600); never echoed back to stdout.")
163
+ .option("--header <key=value>", "Custom HTTP header (repeatable)", collectStrings, [])
164
+ .option("--activate", "Make this the active profile after creation (matches `gcloud config configurations create --activate`)")
165
+ .action(profileCreateHandler);
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // edit (interactive, strict kubectl semantics)
169
+ // ---------------------------------------------------------------------------
170
+ /**
171
+ * Resolve the editor command and its baseline arguments from the environment.
172
+ *
173
+ * Splits on whitespace so common multi-token values like `code --wait`,
174
+ * `subl -w`, and `cursor --wait` work. The first token is the binary; any
175
+ * remaining tokens are flags that get prepended to the file path on spawn.
176
+ */
177
+ export function resolveEditorCommand() {
178
+ const raw = process.env.PHOENIX_EDITOR ?? process.env.EDITOR ?? "vi";
179
+ const parts = raw
180
+ .trim()
181
+ .split(/\s+/)
182
+ .filter((t) => t.length > 0);
183
+ const [command, ...args] = parts.length > 0 ? parts : ["vi"];
184
+ return { command, args };
185
+ }
186
+ /**
187
+ * Run the editor synchronously. Aborts the edit (throws) if the editor
188
+ * cannot be spawned, exits non-zero, or is killed by a signal — matching
189
+ * how `kubectl edit` and `git commit` treat editor exit status: a non-zero
190
+ * exit is the user's signal to discard the edit.
191
+ */
192
+ function runEditor(filePath) {
193
+ const { command, args } = resolveEditorCommand();
194
+ const result = spawnSync(command, [...args, filePath], { stdio: "inherit" });
195
+ if (result.error) {
196
+ throw result.error;
197
+ }
198
+ if (result.signal !== null) {
199
+ throw new Error(`Editor "${command}" terminated by signal ${result.signal}; discarding edits.`);
200
+ }
201
+ if (typeof result.status === "number" && result.status !== 0) {
202
+ throw new Error(`Editor "${command}" exited with status ${result.status}; discarding edits.`);
203
+ }
204
+ }
205
+ async function profileEditHandler(name) {
206
+ const file = loadSettingsStrictOrExit();
207
+ const existingEntry = file.profiles[name];
208
+ if (existingEntry === undefined) {
209
+ writeError({ message: `Profile "${name}" does not exist.` });
210
+ process.exit(ExitCode.INVALID_ARGUMENT);
211
+ }
212
+ const tmpFile = path.join(os.tmpdir(), `px-profile-edit-${name}-${Date.now()}.json`);
213
+ try {
214
+ fs.writeFileSync(tmpFile, JSON.stringify(existingEntry, null, 2) + "\n", {
215
+ encoding: "utf-8",
216
+ mode: 0o600,
217
+ });
218
+ let validEntry;
219
+ while (validEntry === undefined) {
220
+ try {
221
+ runEditor(tmpFile);
222
+ }
223
+ catch (err) {
224
+ // Editor failed to spawn, exited non-zero, or was killed by a
225
+ // signal — discard edits and surface a clean error.
226
+ writeError({
227
+ message: err instanceof Error ? err.message : String(err),
228
+ });
229
+ process.exit(ExitCode.FAILURE);
230
+ }
231
+ const raw = fs.readFileSync(tmpFile, "utf-8");
232
+ let parsed;
233
+ try {
234
+ parsed = JSON.parse(raw);
235
+ }
236
+ catch {
237
+ writeProgress({ message: "Error: invalid JSON. Re-opening editor..." });
238
+ continue;
239
+ }
240
+ const result = ProfileEntrySchema.safeParse(parsed);
241
+ if (result.success) {
242
+ validEntry = result.data;
243
+ }
244
+ else {
245
+ const firstIssue = result.error.issues[0];
246
+ const fieldPath = firstIssue.path.join(".");
247
+ const msg = fieldPath
248
+ ? `Validation error at "${fieldPath}": ${firstIssue.message}`
249
+ : `Validation error: ${firstIssue.message}`;
250
+ writeProgress({ message: `${msg}\nRe-opening editor...` });
251
+ }
252
+ }
253
+ const newFile = {
254
+ ...file,
255
+ profiles: { ...file.profiles, [name]: validEntry },
256
+ };
257
+ saveSettings(newFile);
258
+ writeOutput({ message: `Updated profile "${name}".` });
259
+ }
260
+ finally {
261
+ try {
262
+ fs.unlinkSync(tmpFile);
263
+ }
264
+ catch {
265
+ // best-effort cleanup
266
+ }
267
+ }
268
+ }
269
+ function createProfileEditCommand() {
270
+ return new Command("edit")
271
+ .description("Edit a profile in $EDITOR (interactive, validates on save)")
272
+ .argument("<name>", "Profile name to edit")
273
+ .action(profileEditHandler);
274
+ }
275
+ // ---------------------------------------------------------------------------
276
+ // use
277
+ // ---------------------------------------------------------------------------
278
+ async function profileUseHandler(name) {
279
+ const file = loadSettingsStrictOrExit();
280
+ const entry = file.profiles[name];
281
+ if (entry === undefined) {
282
+ writeError({
283
+ message: `Profile "${name}" does not exist. Run \`px profile list\` to see available profiles.`,
284
+ });
285
+ process.exit(ExitCode.INVALID_ARGUMENT);
286
+ }
287
+ // Compute the transition message before mutating. `use` writes the
288
+ // *stored* active profile, so the before/after we report should reflect
289
+ // what's persisted in the settings file.
290
+ const previousActive = file.activeProfile;
291
+ if (previousActive === name) {
292
+ writeOutput({ message: `Already active: ${name}` });
293
+ return;
294
+ }
295
+ saveSettings({ ...file, activeProfile: name });
296
+ const message = previousActive === null
297
+ ? `Active profile set to ${name}`
298
+ : `Switched active profile: ${previousActive} → ${name}`;
299
+ writeOutput({ message });
300
+ }
301
+ function createProfileUseCommand() {
302
+ return new Command("use")
303
+ .description("Set the active profile")
304
+ .argument("<name>", "Profile name to activate")
305
+ .action(profileUseHandler);
306
+ }
307
+ async function profileDeleteHandler(name, options) {
308
+ const file = loadSettingsStrictOrExit();
309
+ if (file.profiles[name] === undefined) {
310
+ writeError({ message: `Profile "${name}" does not exist.` });
311
+ process.exit(ExitCode.INVALID_ARGUMENT);
312
+ }
313
+ const { confirmOrExit } = await import("../confirm.js");
314
+ await confirmOrExit({
315
+ message: `Delete profile "${name}"?`,
316
+ yes: options.yes,
317
+ });
318
+ const updatedProfiles = { ...file.profiles };
319
+ delete updatedProfiles[name];
320
+ let newActiveProfile = file.activeProfile;
321
+ let wasActive = false;
322
+ if (file.activeProfile === name) {
323
+ newActiveProfile = null;
324
+ wasActive = true;
325
+ }
326
+ saveSettings({
327
+ ...file,
328
+ profiles: updatedProfiles,
329
+ activeProfile: newActiveProfile,
330
+ });
331
+ const message = wasActive
332
+ ? `Deleted profile "${name}" (was the active profile; no profile is active now). Run \`px profile use <name>\` to set a new active profile.`
333
+ : `Deleted profile "${name}".`;
334
+ writeOutput({ message });
335
+ }
336
+ function createProfileDeleteCommand() {
337
+ return new Command("delete")
338
+ .description("Delete a profile")
339
+ .argument("<name>", "Profile name to delete")
340
+ .option("--yes", "Skip confirmation prompt")
341
+ .action(profileDeleteHandler);
342
+ }
343
+ // ---------------------------------------------------------------------------
344
+ // Top-level profile command group
345
+ // ---------------------------------------------------------------------------
346
+ export function createProfileCommand() {
347
+ const command = new Command("profile");
348
+ command.description("Manage named profiles");
349
+ command.addCommand(createProfileListCommand());
350
+ command.addCommand(createProfileShowCommand());
351
+ command.addCommand(createProfileCreateCommand());
352
+ command.addCommand(createProfileEditCommand());
353
+ command.addCommand(createProfileUseCommand());
354
+ command.addCommand(createProfileDeleteCommand());
355
+ return command;
356
+ }
357
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { Command } from "commander";
2
2
  export declare function createSessionGetCommand(): Command;
3
3
  export declare function createSessionListCommand(): Command;
4
+ export declare function createSessionAnnotateCommand(): Command;
5
+ export declare function createSessionAddNoteCommand(): Command;
4
6
  export declare function createSessionDeleteCommand(): Command;
5
7
  /**
6
8
  * Create the `session` command with subcommands
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmUpC,wBAAgB,uBAAuB,IAAI,OAAO,CAmBjD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAoBlD;AAuDD,wBAAgB,0BAA0B,IAAI,OAAO,CAYpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmjBpC,wBAAgB,uBAAuB,IAAI,OAAO,CAoBjD;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAsBlD;AAoFD,wBAAgB,4BAA4B,IAAI,OAAO,CA6BtD;AAsED,wBAAgB,2BAA2B,IAAI,OAAO,CAiBrD;AAuDD,wBAAgB,0BAA0B,IAAI,OAAO,CAYpD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAS9C"}