@arizeai/phoenix-cli 0.6.0 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAmBA,wBAAgB,IAAI,SA2BnB"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAqBA,wBAAgB,IAAI,SA6BnB"}
package/build/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
- import { createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
3
+ import { createApiCommand, createAuthCommand, createDatasetCommand, createDatasetsCommand, createExperimentCommand, createExperimentsCommand, createProjectsCommand, createPromptCommand, createPromptsCommand, createSessionCommand, createSessionsCommand, createTraceCommand, createTracesCommand, } from "./commands/index.js";
4
4
  // Phoenix CLI Main Logic
5
5
  export function main() {
6
6
  const program = new Command();
@@ -15,6 +15,8 @@ export function main() {
15
15
  program.addCommand(createTraceCommand());
16
16
  program.addCommand(createDatasetsCommand());
17
17
  program.addCommand(createDatasetCommand());
18
+ program.addCommand(createSessionsCommand());
19
+ program.addCommand(createSessionCommand());
18
20
  program.addCommand(createExperimentsCommand());
19
21
  program.addCommand(createExperimentCommand());
20
22
  program.addCommand(createPromptsCommand());
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,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oBAAoB;IACpB,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,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;IAEvC,mCAAmC;IACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,yBAAyB;AACzB,MAAM,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,IAAI,CAAC;SACV,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,oBAAoB;IACpB,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,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;IAEvC,mCAAmC;IACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { componentsV1 } from "@arizeai/phoenix-client";
2
+ export type OutputFormat = "pretty" | "json" | "raw";
3
+ type SessionData = componentsV1["schemas"]["SessionData"];
4
+ type SessionAnnotation = componentsV1["schemas"]["SessionAnnotation"];
5
+ export interface FormatSessionsOutputOptions {
6
+ sessions: SessionData[];
7
+ format?: OutputFormat;
8
+ }
9
+ export declare function formatSessionsOutput({ sessions, format, }: FormatSessionsOutputOptions): string;
10
+ export interface FormatSessionOutputOptions {
11
+ session: SessionData;
12
+ annotations?: SessionAnnotation[];
13
+ format?: OutputFormat;
14
+ }
15
+ export declare function formatSessionOutput({ session, annotations, format, }: FormatSessionOutputOptions): string;
16
+ export {};
17
+ //# sourceMappingURL=formatSessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatSessions.d.ts","sourceRoot":"","sources":["../../src/commands/formatSessions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD,KAAK,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;AAC1D,KAAK,iBAAiB,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAEtE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,GACP,EAAE,2BAA2B,GAAG,MAAM,CAStC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,WAAW,EACX,MAAM,GACP,EAAE,0BAA0B,GAAG,MAAM,CASrC"}
@@ -0,0 +1,121 @@
1
+ export function formatSessionsOutput({ sessions, format, }) {
2
+ const selected = format || "pretty";
3
+ if (selected === "raw") {
4
+ return JSON.stringify(sessions);
5
+ }
6
+ if (selected === "json") {
7
+ return JSON.stringify(sessions, null, 2);
8
+ }
9
+ return formatSessionsPretty(sessions);
10
+ }
11
+ export function formatSessionOutput({ session, annotations, format, }) {
12
+ const selected = format || "pretty";
13
+ if (selected === "raw") {
14
+ return JSON.stringify({ session, annotations });
15
+ }
16
+ if (selected === "json") {
17
+ return JSON.stringify({ session, annotations }, null, 2);
18
+ }
19
+ return formatSessionPretty(session, annotations);
20
+ }
21
+ function formatSessionsPretty(sessions) {
22
+ if (sessions.length === 0) {
23
+ return "No sessions found";
24
+ }
25
+ const lines = [];
26
+ lines.push("Sessions:");
27
+ lines.push("");
28
+ for (const session of sessions) {
29
+ lines.push(`┌─ ${session.session_id}`);
30
+ lines.push(`│ ID: ${session.id}`);
31
+ lines.push(`│ Traces: ${session.traces.length}`);
32
+ lines.push(`│ Started: ${formatDate(session.start_time)}`);
33
+ lines.push(`│ Ended: ${formatDate(session.end_time)}`);
34
+ lines.push(`│ Duration: ${formatDuration(session.start_time, session.end_time)}`);
35
+ lines.push(`└─`);
36
+ lines.push("");
37
+ }
38
+ return lines.join("\n").trimEnd();
39
+ }
40
+ function formatSessionPretty(session, annotations) {
41
+ const lines = [];
42
+ lines.push(`┌─ Session: ${session.session_id}`);
43
+ lines.push(`│ ID: ${session.id}`);
44
+ lines.push(`│ Project: ${session.project_id}`);
45
+ lines.push(`│ Started: ${formatDate(session.start_time)}`);
46
+ lines.push(`│ Ended: ${formatDate(session.end_time)}`);
47
+ lines.push(`│ Turns: ${session.traces.length}`);
48
+ lines.push(`│`);
49
+ if (session.traces.length > 0) {
50
+ // Sort traces by start_time ascending (chronological order)
51
+ const sortedTraces = [...session.traces].sort((a, b) => new Date(a.start_time).getTime() - new Date(b.start_time).getTime());
52
+ lines.push(`│ Traces:`);
53
+ for (let i = 0; i < sortedTraces.length; i++) {
54
+ const trace = sortedTraces[i];
55
+ const isLast = i === sortedTraces.length - 1;
56
+ const connector = isLast ? "└─" : "├─";
57
+ const continuation = isLast ? " " : "│ ";
58
+ const startTime = formatTime(trace.start_time);
59
+ const endTime = formatTime(trace.end_time);
60
+ const duration = formatDuration(trace.start_time, trace.end_time);
61
+ lines.push(`│ ${connector} [Turn ${i + 1}] ${startTime} - ${endTime} (${duration})`);
62
+ lines.push(`│ ${continuation} trace: ${trace.trace_id}`);
63
+ }
64
+ }
65
+ if (annotations && annotations.length > 0) {
66
+ lines.push(`│`);
67
+ lines.push(`│ Annotations:`);
68
+ for (const annotation of annotations) {
69
+ const parts = [];
70
+ if (annotation.result?.score != null) {
71
+ parts.push(`score=${annotation.result.score}`);
72
+ }
73
+ if (annotation.result?.label) {
74
+ parts.push(`label="${annotation.result.label}"`);
75
+ }
76
+ const detail = parts.length > 0 ? `: ${parts.join(", ")}` : "";
77
+ lines.push(`│ - ${annotation.name} (${annotation.annotator_kind})${detail}`);
78
+ }
79
+ }
80
+ lines.push(`└─`);
81
+ return lines.join("\n");
82
+ }
83
+ function formatDate(dateStr) {
84
+ try {
85
+ const date = new Date(dateStr);
86
+ return date.toLocaleString();
87
+ }
88
+ catch {
89
+ return dateStr;
90
+ }
91
+ }
92
+ function formatTime(dateStr) {
93
+ try {
94
+ const date = new Date(dateStr);
95
+ return date.toLocaleTimeString();
96
+ }
97
+ catch {
98
+ return dateStr;
99
+ }
100
+ }
101
+ function formatDuration(startStr, endStr) {
102
+ const startMs = Date.parse(startStr);
103
+ const endMs = Date.parse(endStr);
104
+ if (Number.isNaN(startMs) || Number.isNaN(endMs)) {
105
+ return "n/a";
106
+ }
107
+ const diffMs = Math.max(0, endMs - startMs);
108
+ const totalSeconds = Math.floor(diffMs / 1000);
109
+ if (totalSeconds < 60) {
110
+ return `${totalSeconds}s`;
111
+ }
112
+ const minutes = Math.floor(totalSeconds / 60);
113
+ const seconds = totalSeconds % 60;
114
+ if (minutes < 60) {
115
+ return `${minutes}m ${seconds}s`;
116
+ }
117
+ const hours = Math.floor(minutes / 60);
118
+ const remainingMinutes = minutes % 60;
119
+ return `${hours}h ${remainingMinutes}m ${seconds}s`;
120
+ }
121
+ //# sourceMappingURL=formatSessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatSessions.js","sourceRoot":"","sources":["../../src/commands/formatSessions.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export * from "./datasets.js";
6
6
  export * from "./dataset.js";
7
7
  export * from "./experiments.js";
8
8
  export * from "./experiment.js";
9
+ export * from "./sessions.js";
10
+ export * from "./session.js";
9
11
  export * from "./prompts.js";
10
12
  export * from "./prompt.js";
11
13
  export * from "./api.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,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"}
@@ -6,6 +6,8 @@ export * from "./datasets.js";
6
6
  export * from "./dataset.js";
7
7
  export * from "./experiments.js";
8
8
  export * from "./experiment.js";
9
+ export * from "./sessions.js";
10
+ export * from "./session.js";
9
11
  export * from "./prompts.js";
10
12
  export * from "./prompt.js";
11
13
  export * from "./api.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Create the session command
4
+ */
5
+ export declare function createSessionCommand(): Command;
6
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsLpC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAuB9C"}
@@ -0,0 +1,149 @@
1
+ import * as fs from "fs";
2
+ import { Command } from "commander";
3
+ import { createPhoenixClient } from "../client.js";
4
+ import { getConfigErrorMessage, resolveConfig } from "../config.js";
5
+ import { writeError, writeOutput, writeProgress } from "../io.js";
6
+ import { formatSessionOutput } from "./formatSessions.js";
7
+ /**
8
+ * Fetch a single session by identifier
9
+ */
10
+ async function fetchSession(client, sessionIdentifier) {
11
+ const response = await client.GET("/v1/sessions/{session_identifier}", {
12
+ params: {
13
+ path: {
14
+ session_identifier: sessionIdentifier,
15
+ },
16
+ },
17
+ });
18
+ if (response.error || !response.data) {
19
+ throw new Error(`Failed to fetch session: ${response.error}`);
20
+ }
21
+ return response.data.data;
22
+ }
23
+ /**
24
+ * Fetch annotations for a session
25
+ */
26
+ async function fetchSessionAnnotations(client, projectIdentifier, sessionId) {
27
+ const allAnnotations = [];
28
+ let cursor;
29
+ do {
30
+ const response = await client.GET("/v1/projects/{project_identifier}/session_annotations", {
31
+ params: {
32
+ path: {
33
+ project_identifier: projectIdentifier,
34
+ },
35
+ query: {
36
+ session_ids: [sessionId],
37
+ cursor,
38
+ limit: 100,
39
+ },
40
+ },
41
+ });
42
+ if (response.error || !response.data) {
43
+ throw new Error(`Failed to fetch session annotations: ${response.error}`);
44
+ }
45
+ allAnnotations.push(...response.data.data);
46
+ cursor = response.data.next_cursor || undefined;
47
+ } while (cursor);
48
+ return allAnnotations;
49
+ }
50
+ /**
51
+ * Session command handler
52
+ */
53
+ async function sessionHandler(sessionId, options) {
54
+ try {
55
+ const userSpecifiedFormat = process.argv.includes("--format") ||
56
+ process.argv.some((arg) => arg.startsWith("--format="));
57
+ // Resolve configuration
58
+ const config = resolveConfig({
59
+ cliOptions: {
60
+ endpoint: options.endpoint,
61
+ project: options.project,
62
+ apiKey: options.apiKey,
63
+ },
64
+ });
65
+ // Validate that we have endpoint
66
+ if (!config.endpoint) {
67
+ const errors = [
68
+ "Phoenix endpoint not configured. Set PHOENIX_HOST environment variable or use --endpoint flag.",
69
+ ];
70
+ writeError({ message: getConfigErrorMessage({ errors }) });
71
+ process.exit(1);
72
+ }
73
+ // Create client
74
+ const client = createPhoenixClient({ config });
75
+ writeProgress({
76
+ message: `Fetching session ${sessionId}...`,
77
+ noProgress: !options.progress,
78
+ });
79
+ // Fetch session
80
+ const session = await fetchSession(client, sessionId);
81
+ writeProgress({
82
+ message: `Fetched session with ${session.traces.length} trace(s)`,
83
+ noProgress: !options.progress,
84
+ });
85
+ // Optionally fetch annotations
86
+ let annotations;
87
+ if (options.includeAnnotations) {
88
+ writeProgress({
89
+ message: "Fetching session annotations...",
90
+ noProgress: !options.progress,
91
+ });
92
+ annotations = await fetchSessionAnnotations(client, session.project_id, session.session_id);
93
+ writeProgress({
94
+ message: `Found ${annotations.length} annotation(s)`,
95
+ noProgress: !options.progress,
96
+ });
97
+ }
98
+ // Determine output format
99
+ const outputFormat = options.file
100
+ ? "json"
101
+ : options.format || "pretty";
102
+ if (options.file && userSpecifiedFormat && options.format !== "json") {
103
+ writeError({
104
+ message: `Warning: --format is ignored when writing to a file; writing JSON to ${options.file}`,
105
+ });
106
+ }
107
+ // Format output
108
+ const output = formatSessionOutput({
109
+ session,
110
+ annotations,
111
+ format: outputFormat,
112
+ });
113
+ if (options.file) {
114
+ fs.writeFileSync(options.file, output, "utf-8");
115
+ writeProgress({
116
+ message: `Wrote session to ${options.file}`,
117
+ noProgress: !options.progress,
118
+ });
119
+ }
120
+ else {
121
+ writeOutput({ message: output });
122
+ }
123
+ }
124
+ catch (error) {
125
+ writeError({
126
+ message: `Error fetching session: ${error instanceof Error ? error.message : String(error)}`,
127
+ });
128
+ process.exit(1);
129
+ }
130
+ }
131
+ /**
132
+ * Create the session command
133
+ */
134
+ export function createSessionCommand() {
135
+ const command = new Command("session");
136
+ command
137
+ .description("View a session's conversation flow")
138
+ .argument("<session-id>", "Session identifier (GlobalID or user-provided session_id)")
139
+ .option("--endpoint <url>", "Phoenix API endpoint")
140
+ .option("--project <name>", "Project name or ID")
141
+ .option("--api-key <key>", "Phoenix API key for authentication")
142
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
143
+ .option("--no-progress", "Disable progress indicators")
144
+ .option("--file <path>", "Save session to file instead of stdout")
145
+ .option("--include-annotations", "Include session annotations")
146
+ .action(sessionHandler);
147
+ return command;
148
+ }
149
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Create the sessions command
4
+ */
5
+ export declare function createSessionsCommand(): Command;
6
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/commands/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsJpC;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAwB/C"}
@@ -0,0 +1,126 @@
1
+ import { Command } from "commander";
2
+ import { createPhoenixClient, resolveProjectId } from "../client.js";
3
+ import { getConfigErrorMessage, resolveConfig, validateConfig, } from "../config.js";
4
+ import { writeError, writeOutput, writeProgress } from "../io.js";
5
+ import { formatSessionsOutput } from "./formatSessions.js";
6
+ /**
7
+ * Fetch sessions for a project from Phoenix
8
+ */
9
+ async function fetchSessions(client, projectIdentifier, options = {}) {
10
+ const allSessions = [];
11
+ let cursor;
12
+ const targetLimit = options.limit || 10;
13
+ do {
14
+ const response = await client.GET("/v1/projects/{project_identifier}/sessions", {
15
+ params: {
16
+ path: {
17
+ project_identifier: projectIdentifier,
18
+ },
19
+ query: {
20
+ cursor,
21
+ limit: Math.min(targetLimit - allSessions.length, 100),
22
+ order: options.order,
23
+ },
24
+ },
25
+ });
26
+ if (response.error || !response.data) {
27
+ throw new Error(`Failed to fetch sessions: ${response.error}`);
28
+ }
29
+ allSessions.push(...response.data.data);
30
+ cursor = response.data.next_cursor || undefined;
31
+ if (allSessions.length >= targetLimit) {
32
+ break;
33
+ }
34
+ } while (cursor);
35
+ return allSessions.slice(0, targetLimit);
36
+ }
37
+ /**
38
+ * Sessions command handler
39
+ */
40
+ async function sessionsHandler(options) {
41
+ try {
42
+ // Resolve configuration
43
+ const config = resolveConfig({
44
+ cliOptions: {
45
+ endpoint: options.endpoint,
46
+ project: options.project,
47
+ apiKey: options.apiKey,
48
+ },
49
+ });
50
+ // Validate configuration
51
+ const validation = validateConfig({ config });
52
+ if (!validation.valid) {
53
+ writeError({
54
+ message: getConfigErrorMessage({ errors: validation.errors }),
55
+ });
56
+ process.exit(1);
57
+ }
58
+ // Create client
59
+ const client = createPhoenixClient({ config });
60
+ // Resolve project ID
61
+ const projectIdentifier = config.project;
62
+ if (!projectIdentifier) {
63
+ writeError({ message: "Project not configured" });
64
+ process.exit(1);
65
+ }
66
+ writeProgress({
67
+ message: `Resolving project: ${projectIdentifier}`,
68
+ noProgress: !options.progress,
69
+ });
70
+ const projectId = await resolveProjectId({
71
+ client,
72
+ projectIdentifier,
73
+ });
74
+ const limit = options.limit || 10;
75
+ writeProgress({
76
+ message: `Fetching sessions for project ${projectId}...`,
77
+ noProgress: !options.progress,
78
+ });
79
+ // Fetch sessions
80
+ const sessions = await fetchSessions(client, projectId, {
81
+ limit,
82
+ order: options.order,
83
+ });
84
+ if (sessions.length === 0) {
85
+ writeProgress({
86
+ message: "No sessions found",
87
+ noProgress: !options.progress,
88
+ });
89
+ return;
90
+ }
91
+ writeProgress({
92
+ message: `Found ${sessions.length} session(s)`,
93
+ noProgress: !options.progress,
94
+ });
95
+ // Output sessions
96
+ const output = formatSessionsOutput({
97
+ sessions,
98
+ format: options.format,
99
+ });
100
+ writeOutput({ message: output });
101
+ }
102
+ catch (error) {
103
+ writeError({
104
+ message: `Error fetching sessions: ${error instanceof Error ? error.message : String(error)}`,
105
+ });
106
+ process.exit(1);
107
+ }
108
+ }
109
+ /**
110
+ * Create the sessions command
111
+ */
112
+ export function createSessionsCommand() {
113
+ const command = new Command("sessions");
114
+ command
115
+ .description("List sessions for a project")
116
+ .option("--endpoint <url>", "Phoenix API endpoint")
117
+ .option("--project <name>", "Project name or ID")
118
+ .option("--api-key <key>", "Phoenix API key for authentication")
119
+ .option("--format <format>", "Output format: pretty, json, or raw", "pretty")
120
+ .option("--no-progress", "Disable progress indicators")
121
+ .option("-n, --limit <number>", "Maximum number of sessions to return", parseInt, 10)
122
+ .option("--order <order>", "Sort order: asc or desc", "desc")
123
+ .action(sessionsHandler);
124
+ return command;
125
+ }
126
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/commands/sessions.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.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "A command-line interface for Phoenix",
5
5
  "keywords": [
6
6
  "arize",
@@ -32,12 +32,12 @@
32
32
  "dependencies": {
33
33
  "@arizeai/openinference-semantic-conventions": "^1.1.0",
34
34
  "commander": "^12.1.0",
35
- "@arizeai/phoenix-client": "5.9.0",
36
- "@arizeai/phoenix-config": "0.1.1"
35
+ "@arizeai/phoenix-config": "0.1.1",
36
+ "@arizeai/phoenix-client": "6.0.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^18.19.0",
40
- "rimraf": "^5.0.10",
40
+ "rimraf": "^6.1.3",
41
41
  "tsc-alias": "^1.8.11",
42
42
  "tsx": "^4.19.3",
43
43
  "vitest": "^2.1.9"