@arizeai/phoenix-cli 1.9.0 → 1.10.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 +82 -7
- package/build/authFetch.d.ts +24 -0
- package/build/authFetch.d.ts.map +1 -0
- package/build/authFetch.js +44 -0
- package/build/authFetch.js.map +1 -0
- package/build/client.d.ts.map +1 -1
- package/build/client.js +5 -1
- package/build/client.js.map +1 -1
- package/build/commands/api.d.ts.map +1 -1
- package/build/commands/api.js +12 -1
- package/build/commands/api.js.map +1 -1
- package/build/commands/auth.d.ts +4 -1
- package/build/commands/auth.d.ts.map +1 -1
- package/build/commands/auth.js +326 -13
- package/build/commands/auth.js.map +1 -1
- package/build/commands/formatSetup.d.ts +12 -0
- package/build/commands/formatSetup.d.ts.map +1 -1
- package/build/commands/formatSetup.js +32 -1
- package/build/commands/formatSetup.js.map +1 -1
- package/build/commands/setup.d.ts.map +1 -1
- package/build/commands/setup.js +14 -38
- package/build/commands/setup.js.map +1 -1
- package/build/commands/setupErrors.d.ts +10 -0
- package/build/commands/setupErrors.d.ts.map +1 -0
- package/build/commands/setupErrors.js +54 -0
- package/build/commands/setupErrors.js.map +1 -0
- package/build/commands/setupMcp.d.ts +15 -0
- package/build/commands/setupMcp.d.ts.map +1 -0
- package/build/commands/setupMcp.js +141 -0
- package/build/commands/setupMcp.js.map +1 -0
- package/build/config.d.ts +15 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +54 -7
- package/build/config.js.map +1 -1
- package/build/exitCodes.d.ts +6 -0
- package/build/exitCodes.d.ts.map +1 -1
- package/build/exitCodes.js +18 -0
- package/build/exitCodes.js.map +1 -1
- package/build/index.js +2 -1
- package/build/index.js.map +1 -1
- package/build/oauth.d.ts +138 -0
- package/build/oauth.d.ts.map +1 -0
- package/build/oauth.js +465 -0
- package/build/oauth.js.map +1 -0
- package/build/oauthCallbackPage.d.ts +9 -0
- package/build/oauthCallbackPage.d.ts.map +1 -0
- package/build/oauthCallbackPage.js +111 -0
- package/build/oauthCallbackPage.js.map +1 -0
- package/build/pxi/client.d.ts.map +1 -1
- package/build/pxi/client.js +11 -2
- package/build/pxi/client.js.map +1 -1
- package/build/settings.d.ts +19 -0
- package/build/settings.d.ts.map +1 -1
- package/build/settings.js +21 -0
- package/build/settings.js.map +1 -1
- package/build/setup/agents/registry.d.ts +61 -0
- package/build/setup/agents/registry.d.ts.map +1 -1
- package/build/setup/agents/registry.js +52 -3
- package/build/setup/agents/registry.js.map +1 -1
- package/build/setup/copy.d.ts +32 -0
- package/build/setup/copy.d.ts.map +1 -1
- package/build/setup/copy.js +44 -0
- package/build/setup/copy.js.map +1 -1
- package/build/setup/deps/buildDefaultDeps.d.ts.map +1 -1
- package/build/setup/deps/buildDefaultDeps.js +2 -0
- package/build/setup/deps/buildDefaultDeps.js.map +1 -1
- package/build/setup/deps/index.d.ts +4 -0
- package/build/setup/deps/index.d.ts.map +1 -1
- package/build/setup/deps/index.js.map +1 -1
- package/build/setup/deps/oauthLogin.d.ts +64 -0
- package/build/setup/deps/oauthLogin.d.ts.map +1 -0
- package/build/setup/deps/oauthLogin.js +82 -0
- package/build/setup/deps/oauthLogin.js.map +1 -0
- package/build/setup/deps/prompter.d.ts +7 -0
- package/build/setup/deps/prompter.d.ts.map +1 -1
- package/build/setup/mcp/agents.d.ts +91 -0
- package/build/setup/mcp/agents.d.ts.map +1 -0
- package/build/setup/mcp/agents.js +265 -0
- package/build/setup/mcp/agents.js.map +1 -0
- package/build/setup/mcp/install.d.ts +34 -0
- package/build/setup/mcp/install.d.ts.map +1 -0
- package/build/setup/mcp/install.js +76 -0
- package/build/setup/mcp/install.js.map +1 -0
- package/build/setup/mcp/runSetupMcp.d.ts +68 -0
- package/build/setup/mcp/runSetupMcp.d.ts.map +1 -0
- package/build/setup/mcp/runSetupMcp.js +235 -0
- package/build/setup/mcp/runSetupMcp.js.map +1 -0
- package/build/setup/options.d.ts +11 -0
- package/build/setup/options.d.ts.map +1 -1
- package/build/setup/options.js +1 -0
- package/build/setup/options.js.map +1 -1
- package/build/setup/prompts/instrumentationPrompt.d.ts +7 -1
- package/build/setup/prompts/instrumentationPrompt.d.ts.map +1 -1
- package/build/setup/prompts/instrumentationPrompt.js +6 -2
- package/build/setup/prompts/instrumentationPrompt.js.map +1 -1
- package/build/setup/runSetup.d.ts +3 -0
- package/build/setup/runSetup.d.ts.map +1 -1
- package/build/setup/runSetup.js +13 -12
- package/build/setup/runSetup.js.map +1 -1
- package/build/setup/steps/establishConnection.d.ts +6 -3
- package/build/setup/steps/establishConnection.d.ts.map +1 -1
- package/build/setup/steps/establishConnection.js +120 -11
- package/build/setup/steps/establishConnection.js.map +1 -1
- package/build/setup/steps/instrumentApp.d.ts +23 -4
- package/build/setup/steps/instrumentApp.d.ts.map +1 -1
- package/build/setup/steps/instrumentApp.js +89 -41
- package/build/setup/steps/instrumentApp.js.map +1 -1
- package/build/setup/steps/offerDocsMcp.d.ts +48 -0
- package/build/setup/steps/offerDocsMcp.d.ts.map +1 -0
- package/build/setup/steps/offerDocsMcp.js +134 -0
- package/build/setup/steps/offerDocsMcp.js.map +1 -0
- package/build/setup/ui/clackPrompter.d.ts.map +1 -1
- package/build/setup/ui/clackPrompter.js +15 -0
- package/build/setup/ui/clackPrompter.js.map +1 -1
- package/build/setup/util/mcpConfig.d.ts +38 -0
- package/build/setup/util/mcpConfig.d.ts.map +1 -0
- package/build/setup/util/mcpConfig.js +64 -0
- package/build/setup/util/mcpConfig.js.map +1 -0
- package/package.json +3 -3
package/build/commands/setup.js
CHANGED
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
* px setup skills # the coding-agent skills install alone
|
|
16
16
|
*/
|
|
17
17
|
import { Command } from "commander";
|
|
18
|
-
import { ExitCode
|
|
18
|
+
import { ExitCode } from "../exitCodes.js";
|
|
19
19
|
import { writeOutput } from "../io.js";
|
|
20
20
|
import { collectString, parsePositiveIntOption } from "../optionParsers.js";
|
|
21
21
|
import { CODING_AGENT_IDS } from "../setup/agents/registry.js";
|
|
22
|
-
import * as COPY from "../setup/copy.js";
|
|
23
22
|
import { buildDefaultDeps } from "../setup/deps/buildDefaultDeps.js";
|
|
24
|
-
import { HeadlessInputError, SetupCancelledError, SetupFatalError, } from "../setup/errors.js";
|
|
25
23
|
import { resolveSetupInputs, } from "../setup/options.js";
|
|
26
24
|
import { runInstrument, runSetup, runSkills } from "../setup/runSetup.js";
|
|
27
25
|
import { writeStructuredError } from "../structuredError.js";
|
|
28
26
|
import { ENDPOINT_REQUIREMENT, isEndpointUrl } from "../validation/endpoint.js";
|
|
29
27
|
import { WORKERS_REQUIREMENT } from "./docs.js";
|
|
30
28
|
import { formatSetupOutput, formatToolingOutput, } from "./formatSetup.js";
|
|
29
|
+
import { exitWithError } from "./setupErrors.js";
|
|
30
|
+
import { createSetupMcpCommand } from "./setupMcp.js";
|
|
31
31
|
/** Reject bad flag values before any side effect runs. */
|
|
32
32
|
function toSetupOptions(options) {
|
|
33
33
|
const format = options.format ?? "pretty";
|
|
@@ -76,43 +76,9 @@ function toSetupOptions(options) {
|
|
|
76
76
|
refresh: options.refreshDocs,
|
|
77
77
|
workers: options.workers,
|
|
78
78
|
},
|
|
79
|
+
docsMcp: options.docsMcp,
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Every lane funnels its failures through here, so a cancelled prompt, a bad
|
|
83
|
-
* headless invocation, and a fatal step keep their distinct exit codes — and so
|
|
84
|
-
* a `--format json|raw` caller gets the same `{error, code, hint}` envelope
|
|
85
|
-
* every other px command gives it, instead of a bare line on stderr.
|
|
86
|
-
*/
|
|
87
|
-
function exitWithError(error, format) {
|
|
88
|
-
if (error instanceof SetupCancelledError) {
|
|
89
|
-
writeStructuredError({
|
|
90
|
-
format,
|
|
91
|
-
message: COPY.CANCEL_OUTRO,
|
|
92
|
-
code: "CANCELLED",
|
|
93
|
-
});
|
|
94
|
-
process.exit(ExitCode.CANCELLED);
|
|
95
|
-
}
|
|
96
|
-
if (error instanceof HeadlessInputError) {
|
|
97
|
-
writeStructuredError({
|
|
98
|
-
format,
|
|
99
|
-
message: error.message,
|
|
100
|
-
code: "INVALID_ARGUMENT",
|
|
101
|
-
});
|
|
102
|
-
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
103
|
-
}
|
|
104
|
-
if (error instanceof SetupFatalError) {
|
|
105
|
-
writeStructuredError({ format, message: error.message, code: "FAILURE" });
|
|
106
|
-
process.exit(ExitCode.FAILURE);
|
|
107
|
-
}
|
|
108
|
-
const exitCode = getExitCodeForError(error);
|
|
109
|
-
writeStructuredError({
|
|
110
|
-
format,
|
|
111
|
-
message: String(error),
|
|
112
|
-
code: exitCode === ExitCode.NETWORK_ERROR ? "NETWORK_ERROR" : "FAILURE",
|
|
113
|
-
});
|
|
114
|
-
process.exit(exitCode);
|
|
115
|
-
}
|
|
116
82
|
/**
|
|
117
83
|
* Run one of the setup lanes, then print what it did in the requested format.
|
|
118
84
|
*
|
|
@@ -176,6 +142,8 @@ function addInstrumentationOptions(command) {
|
|
|
176
142
|
.option("--background", "Run the agent without its TUI (implied by --no-input)")
|
|
177
143
|
.option("--yolo", "Let the agent apply changes without asking permission (required in practice for --background)")
|
|
178
144
|
.option("--no-docs", "Skip the docs prefetch")
|
|
145
|
+
.option("--docs-mcp", "Connect the Phoenix docs MCP server to the hand-off agent (skips the docs prefetch)")
|
|
146
|
+
.option("--no-docs-mcp", "Skip the docs MCP offer")
|
|
179
147
|
.option("--workflow <name>", "Docs workflow to prefetch (repeatable); same values as px docs fetch", collectString, [])
|
|
180
148
|
.option("--refresh-docs", "Clear the docs directory before downloading")
|
|
181
149
|
.option("--workers <n>", "Concurrent docs downloads", parsePositiveIntOption);
|
|
@@ -216,6 +184,11 @@ Examples:
|
|
|
216
184
|
}
|
|
217
185
|
export function createSetupCommand() {
|
|
218
186
|
const command = new Command("setup");
|
|
187
|
+
// The program enables positional options; `setup` must too, or it greedily
|
|
188
|
+
// consumes a subcommand's flags that share a name with its own (`--agent`,
|
|
189
|
+
// `--format`, `--no-input`), leaving `px setup mcp --agent codex` and
|
|
190
|
+
// `px setup instrument --agent claude` unable to see their agent.
|
|
191
|
+
command.enablePositionalOptions();
|
|
219
192
|
command.description("Interactive setup: connect this app to Phoenix and get traces flowing.\n" +
|
|
220
193
|
"(A top-level command, unlike the CLI's usual noun-verb layout — onboarding is a flow, not a resource.)");
|
|
221
194
|
addConnectionOptions(command);
|
|
@@ -233,13 +206,16 @@ Examples:
|
|
|
233
206
|
px setup --endpoint https://phoenix.example.com
|
|
234
207
|
px setup --no-input --endpoint http://localhost:6006 --project my-app
|
|
235
208
|
px setup --no-input --instrument --agent claude --yolo --format raw
|
|
209
|
+
px setup --no-input --instrument --agent claude --yolo --docs-mcp --format raw
|
|
236
210
|
|
|
237
211
|
Subcommands:
|
|
238
212
|
px setup instrument Instrument and verify, without redoing the questions
|
|
239
213
|
px setup skills Install the coding-agent skills alone
|
|
214
|
+
px setup mcp Register the Phoenix MCP server with a coding agent
|
|
240
215
|
`);
|
|
241
216
|
command.addCommand(createSetupInstrumentCommand());
|
|
242
217
|
command.addCommand(createSetupSkillsCommand());
|
|
218
|
+
command.addCommand(createSetupMcpCommand());
|
|
243
219
|
return command;
|
|
244
220
|
}
|
|
245
221
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The setup commands' shared failure funnel. Every `px setup` lane and
|
|
3
|
+
* subcommand exits through here, so a cancelled prompt, a bad headless
|
|
4
|
+
* invocation, and a fatal step keep their distinct exit codes — and a
|
|
5
|
+
* `--format json|raw` caller gets the same `{error, code, hint}` envelope
|
|
6
|
+
* every other px command gives it, instead of a bare line on stderr.
|
|
7
|
+
*/
|
|
8
|
+
import type { OutputFormat } from "./formatSetup.js";
|
|
9
|
+
export declare function exitWithError(error: unknown, format: OutputFormat): never;
|
|
10
|
+
//# sourceMappingURL=setupErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupErrors.d.ts","sourceRoot":"","sources":["../../src/commands/setupErrors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgBlD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,CA4BzE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The setup commands' shared failure funnel. Every `px setup` lane and
|
|
3
|
+
* subcommand exits through here, so a cancelled prompt, a bad headless
|
|
4
|
+
* invocation, and a fatal step keep their distinct exit codes — and a
|
|
5
|
+
* `--format json|raw` caller gets the same `{error, code, hint}` envelope
|
|
6
|
+
* every other px command gives it, instead of a bare line on stderr.
|
|
7
|
+
*/
|
|
8
|
+
import { ExitCode, getExitCodeForError } from "../exitCodes.js";
|
|
9
|
+
import * as COPY from "../setup/copy.js";
|
|
10
|
+
import { HeadlessInputError, SetupCancelledError, SetupFatalError, } from "../setup/errors.js";
|
|
11
|
+
import { writeStructuredError } from "../structuredError.js";
|
|
12
|
+
/** The envelope `code` is the ExitCode constant *name* the number maps to. */
|
|
13
|
+
function exitCodeName(code) {
|
|
14
|
+
switch (code) {
|
|
15
|
+
case ExitCode.INVALID_ARGUMENT:
|
|
16
|
+
return "INVALID_ARGUMENT";
|
|
17
|
+
case ExitCode.AUTH_REQUIRED:
|
|
18
|
+
return "AUTH_REQUIRED";
|
|
19
|
+
case ExitCode.NETWORK_ERROR:
|
|
20
|
+
return "NETWORK_ERROR";
|
|
21
|
+
default:
|
|
22
|
+
return "FAILURE";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function exitWithError(error, format) {
|
|
26
|
+
if (error instanceof SetupCancelledError) {
|
|
27
|
+
writeStructuredError({
|
|
28
|
+
format,
|
|
29
|
+
message: COPY.CANCEL_OUTRO,
|
|
30
|
+
code: "CANCELLED",
|
|
31
|
+
});
|
|
32
|
+
process.exit(ExitCode.CANCELLED);
|
|
33
|
+
}
|
|
34
|
+
if (error instanceof HeadlessInputError) {
|
|
35
|
+
writeStructuredError({
|
|
36
|
+
format,
|
|
37
|
+
message: error.message,
|
|
38
|
+
code: "INVALID_ARGUMENT",
|
|
39
|
+
});
|
|
40
|
+
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
41
|
+
}
|
|
42
|
+
if (error instanceof SetupFatalError) {
|
|
43
|
+
writeStructuredError({ format, message: error.message, code: "FAILURE" });
|
|
44
|
+
process.exit(ExitCode.FAILURE);
|
|
45
|
+
}
|
|
46
|
+
const exitCode = getExitCodeForError(error);
|
|
47
|
+
writeStructuredError({
|
|
48
|
+
format,
|
|
49
|
+
message: String(error),
|
|
50
|
+
code: exitCodeName(exitCode),
|
|
51
|
+
});
|
|
52
|
+
process.exit(exitCode);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=setupErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupErrors.js","sourceRoot":"","sources":["../../src/commands/setupErrors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,8EAA8E;AAC9E,SAAS,YAAY,CAAC,IAAc;IAClC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,gBAAgB;YAC5B,OAAO,kBAAkB,CAAC;QAC5B,KAAK,QAAQ,CAAC,aAAa;YACzB,OAAO,eAAe,CAAC;QACzB,KAAK,QAAQ,CAAC,aAAa;YACzB,OAAO,eAAe,CAAC;QACzB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,MAAoB;IAChE,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,oBAAoB,CAAC;YACnB,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,oBAAoB,CAAC;YACnB,MAAM;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5C,oBAAoB,CAAC;QACnB,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `px setup mcp` — register the Phoenix remote MCP server (`<endpoint>/mcp`)
|
|
3
|
+
* with a coding agent. A subcommand of the `px setup` flow, like
|
|
4
|
+
* `px setup instrument`.
|
|
5
|
+
*
|
|
6
|
+
* The endpoint is inferred through `resolveConfig` (the flag → env → profile →
|
|
7
|
+
* default merge every `px` command uses). Auth defaults to OAuth; `--header`
|
|
8
|
+
* adds the API-key bearer fallback for headless clients.
|
|
9
|
+
*
|
|
10
|
+
* This layer only parses flags, resolves the endpoint, and renders the report;
|
|
11
|
+
* the behavior lives in `runSetupMcp` (`../setup/mcp/runSetupMcp.ts`).
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
export declare function createSetupMcpCommand(): Command;
|
|
15
|
+
//# sourceMappingURL=setupMcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupMcp.d.ts","sourceRoot":"","sources":["../../src/commands/setupMcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6MpC,wBAAgB,qBAAqB,IAAI,OAAO,CAyC/C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `px setup mcp` — register the Phoenix remote MCP server (`<endpoint>/mcp`)
|
|
3
|
+
* with a coding agent. A subcommand of the `px setup` flow, like
|
|
4
|
+
* `px setup instrument`.
|
|
5
|
+
*
|
|
6
|
+
* The endpoint is inferred through `resolveConfig` (the flag → env → profile →
|
|
7
|
+
* default merge every `px` command uses). Auth defaults to OAuth; `--header`
|
|
8
|
+
* adds the API-key bearer fallback for headless clients.
|
|
9
|
+
*
|
|
10
|
+
* This layer only parses flags, resolves the endpoint, and renders the report;
|
|
11
|
+
* the behavior lives in `runSetupMcp` (`../setup/mcp/runSetupMcp.ts`).
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
import { DEFAULT_PHOENIX_ENDPOINT, resolveConfig } from "../config.js";
|
|
15
|
+
import { ExitCode } from "../exitCodes.js";
|
|
16
|
+
import { writeOutput } from "../io.js";
|
|
17
|
+
import { collectString } from "../optionParsers.js";
|
|
18
|
+
import { buildDefaultDeps } from "../setup/deps/buildDefaultDeps.js";
|
|
19
|
+
import { HeadlessInputError } from "../setup/errors.js";
|
|
20
|
+
import { MCP_AGENT_IDS, } from "../setup/mcp/agents.js";
|
|
21
|
+
import { runSetupMcp } from "../setup/mcp/runSetupMcp.js";
|
|
22
|
+
import { writeStructuredError } from "../structuredError.js";
|
|
23
|
+
import { ENDPOINT_REQUIREMENT, isEndpointUrl } from "../validation/endpoint.js";
|
|
24
|
+
import { formatMcpSetupOutput } from "./formatSetup.js";
|
|
25
|
+
import { exitWithError } from "./setupErrors.js";
|
|
26
|
+
const OUTPUT_FORMATS = ["pretty", "json", "raw"];
|
|
27
|
+
/** Parse `Name: value` into a header, or throw with the offending input. */
|
|
28
|
+
function parseHeader(raw) {
|
|
29
|
+
const index = raw.indexOf(":");
|
|
30
|
+
const name = index === -1 ? "" : raw.slice(0, index).trim();
|
|
31
|
+
const value = index === -1 ? "" : raw.slice(index + 1).trim();
|
|
32
|
+
if (!name || !value) {
|
|
33
|
+
throw new HeadlessInputError(`Invalid --header "${raw}". Use the form "Name: value".`);
|
|
34
|
+
}
|
|
35
|
+
return { name, value };
|
|
36
|
+
}
|
|
37
|
+
/** Reject bad flag values before any side effect runs. */
|
|
38
|
+
function toMcpInputs(options) {
|
|
39
|
+
const format = options.format ?? "pretty";
|
|
40
|
+
if (!OUTPUT_FORMATS.includes(format)) {
|
|
41
|
+
fail(format, `Invalid --format: ${options.format}.`, "px setup mcp --format pretty|json|raw");
|
|
42
|
+
}
|
|
43
|
+
if (options.agent !== undefined &&
|
|
44
|
+
!MCP_AGENT_IDS.includes(options.agent)) {
|
|
45
|
+
fail(format, `Invalid --agent: ${options.agent}.`, `px setup mcp --agent <${MCP_AGENT_IDS.join("|")}>`);
|
|
46
|
+
}
|
|
47
|
+
if (options.global && options.local) {
|
|
48
|
+
fail(format, "Pass only one of --global or --local.", "px setup mcp --global");
|
|
49
|
+
}
|
|
50
|
+
if (options.endpoint !== undefined && !isEndpointUrl(options.endpoint)) {
|
|
51
|
+
fail(format, `--endpoint ${ENDPOINT_REQUIREMENT}.`, undefined);
|
|
52
|
+
}
|
|
53
|
+
let headers;
|
|
54
|
+
try {
|
|
55
|
+
headers = (options.header ?? []).map(parseHeader);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
fail(format, error instanceof Error ? error.message : String(error), `px setup mcp --header 'Authorization: Bearer \${PHOENIX_API_KEY}'`);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
agent: options.agent,
|
|
62
|
+
scope: options.local ? "local" : options.global ? "global" : undefined,
|
|
63
|
+
headers,
|
|
64
|
+
endpointExplicit: options.endpoint !== undefined,
|
|
65
|
+
headless: options.input === false,
|
|
66
|
+
format,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Emit a structured INVALID_ARGUMENT and exit — the one bad-flag exit path. */
|
|
70
|
+
function fail(format, message, hint) {
|
|
71
|
+
writeStructuredError({
|
|
72
|
+
format,
|
|
73
|
+
message,
|
|
74
|
+
code: "INVALID_ARGUMENT",
|
|
75
|
+
...(hint ? { hint } : {}),
|
|
76
|
+
});
|
|
77
|
+
process.exit(ExitCode.INVALID_ARGUMENT);
|
|
78
|
+
}
|
|
79
|
+
async function setupMcpHandler(options) {
|
|
80
|
+
const parsed = toMcpInputs(options);
|
|
81
|
+
const format = parsed.format;
|
|
82
|
+
const deps = buildDefaultDeps();
|
|
83
|
+
try {
|
|
84
|
+
// The endpoint is resolved the same way every command resolves it: flags
|
|
85
|
+
// over the active profile, then env vars, then the built-in default. A bad
|
|
86
|
+
// --profile (or an unreadable stored config) throws here, so it must run
|
|
87
|
+
// inside the funnel — otherwise --format json|raw would get a bare stderr
|
|
88
|
+
// line and the wrong exit code instead of the {error,code,hint} envelope.
|
|
89
|
+
const config = resolveConfig({
|
|
90
|
+
cliOptions: { endpoint: options.endpoint },
|
|
91
|
+
profileName: options.profile,
|
|
92
|
+
});
|
|
93
|
+
// `--no-input` OR a non-TTY stdin opts into headless, matching px convention.
|
|
94
|
+
const headless = parsed.headless || !deps.context.stdinIsTTY;
|
|
95
|
+
const report = await runSetupMcp(deps, {
|
|
96
|
+
// `resolveConfig` always fills `endpoint`; the fallback only satisfies
|
|
97
|
+
// the optional type, and uses the shared default so it can't drift.
|
|
98
|
+
endpoint: config.endpoint ?? DEFAULT_PHOENIX_ENDPOINT,
|
|
99
|
+
endpointExplicit: parsed.endpointExplicit,
|
|
100
|
+
agent: parsed.agent,
|
|
101
|
+
scope: parsed.scope,
|
|
102
|
+
headers: parsed.headers,
|
|
103
|
+
headless,
|
|
104
|
+
});
|
|
105
|
+
// An interactive run already narrated the result through the prompter; only
|
|
106
|
+
// a headless run (or an explicit --format) needs the printed report.
|
|
107
|
+
if (headless || format !== "pretty") {
|
|
108
|
+
writeOutput({ message: formatMcpSetupOutput({ report, format }) });
|
|
109
|
+
}
|
|
110
|
+
process.exit(ExitCode.SUCCESS);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
exitWithError(error, format);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export function createSetupMcpCommand() {
|
|
117
|
+
const command = new Command("mcp");
|
|
118
|
+
command
|
|
119
|
+
.description("Register the Phoenix remote MCP server with a coding agent.\n" +
|
|
120
|
+
"The endpoint is inferred from --endpoint, the active profile, or PHOENIX_HOST.")
|
|
121
|
+
.option("--agent <agent>", `Coding agent to configure (${MCP_AGENT_IDS.join("|")})`)
|
|
122
|
+
.option("--global", "Configure the agent's user-wide config (default)")
|
|
123
|
+
.option("--local", "Configure this repo's config (requires a git repo)")
|
|
124
|
+
.option("--endpoint <url>", "Phoenix base URL (skips inference)")
|
|
125
|
+
.option("--profile <name>", "Profile to infer the endpoint from")
|
|
126
|
+
.option("--header <header>", 'Header for the API-key fallback, "Name: value" (repeatable)', collectString, [])
|
|
127
|
+
.option("--no-input", "Headless mode: no prompts (requires --agent)")
|
|
128
|
+
.option("--format <format>", "Output format: pretty, json, or raw", "pretty")
|
|
129
|
+
.action(setupMcpHandler)
|
|
130
|
+
.addHelpText("after", `
|
|
131
|
+
Examples:
|
|
132
|
+
px setup mcp
|
|
133
|
+
px setup mcp --agent codex
|
|
134
|
+
px setup mcp --agent claude --local
|
|
135
|
+
px setup mcp --agent cursor --global --endpoint https://phoenix.example.com
|
|
136
|
+
px setup mcp --agent codex --no-input --format raw
|
|
137
|
+
px setup mcp --agent claude --header 'Authorization: Bearer \${PHOENIX_API_KEY}'
|
|
138
|
+
`);
|
|
139
|
+
return command;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=setupMcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupMcp.js","sourceRoot":"","sources":["../../src/commands/setupMcp.ts"],"names":[],"mappings":"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"}
|
package/build/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type OAuthTokens } from "./settings.js";
|
|
1
2
|
/**
|
|
2
3
|
* Default Phoenix endpoint used when PHOENIX_HOST is not set.
|
|
3
4
|
*/
|
|
@@ -18,6 +19,20 @@ export interface PhoenixConfig {
|
|
|
18
19
|
* API key for authentication
|
|
19
20
|
*/
|
|
20
21
|
apiKey?: string;
|
|
22
|
+
/**
|
|
23
|
+
* OAuth tokens from the selected profile. Used only when no API key is
|
|
24
|
+
* configured by CLI flag, environment variable, or profile.
|
|
25
|
+
*/
|
|
26
|
+
oauthTokens?: OAuthTokens;
|
|
27
|
+
/**
|
|
28
|
+
* Selected profile name. Present when config came from an explicit or active
|
|
29
|
+
* profile and used to persist refreshed OAuth tokens.
|
|
30
|
+
*/
|
|
31
|
+
profileName?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Source of the credential that will be used for API requests.
|
|
34
|
+
*/
|
|
35
|
+
credentialSource?: "flag" | "env" | "profile-key" | "oauth" | "none";
|
|
21
36
|
/**
|
|
22
37
|
* Custom headers
|
|
23
38
|
*/
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,WAAW,EAMjB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IAErE;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAIlD;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,IAAI,aAAa,CAEzD;AA8ED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,CAkBzE;AAqBD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,WAAW,GACZ,EAAE,oBAAoB,GAAG,aAAa,CA8EtC;AAgCD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,eAAsB,GACvB,EAAE,qBAAqB,GAAG;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAkBA;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,GACP,EAAE,4BAA4B,GAAG,MAAM,CAiBvC"}
|
package/build/config.js
CHANGED
|
@@ -36,8 +36,6 @@ function loadConfigFromEnvironmentWithSources() {
|
|
|
36
36
|
if (headers) {
|
|
37
37
|
config.headers = headers;
|
|
38
38
|
}
|
|
39
|
-
// Resolve the project from PHOENIX_PROJECT (canonical) or the
|
|
40
|
-
// PHOENIX_PROJECT_NAME alias.
|
|
41
39
|
const project = getProjectFromEnvironment();
|
|
42
40
|
if (project) {
|
|
43
41
|
config.project = project;
|
|
@@ -97,29 +95,32 @@ export function loadConfigFromProfile(profileName) {
|
|
|
97
95
|
if (!active) {
|
|
98
96
|
throw new ProfileResolutionError(`Profile "${profileName}" (from --profile) does not exist. Run \`px profile list\` to see available profiles.`);
|
|
99
97
|
}
|
|
100
|
-
return profileEntryToConfig(active.entry);
|
|
98
|
+
return profileEntryToConfig(active.entry, active.name);
|
|
101
99
|
}
|
|
102
100
|
const active = getStoredActiveProfile(settingsFile);
|
|
103
101
|
if (!active) {
|
|
104
102
|
return {};
|
|
105
103
|
}
|
|
106
|
-
return profileEntryToConfig(active.entry);
|
|
104
|
+
return profileEntryToConfig(active.entry, active.name);
|
|
107
105
|
}
|
|
108
106
|
/**
|
|
109
107
|
* Project a `ProfileEntry` onto the `PhoenixConfig` shape. Skipped fields
|
|
110
108
|
* (e.g. an apiKey set on a different profile) are simply omitted so the
|
|
111
109
|
* downstream merge in `resolveConfig` can layer env vars / defaults on top.
|
|
112
110
|
*/
|
|
113
|
-
function profileEntryToConfig(entry) {
|
|
111
|
+
function profileEntryToConfig(entry, profileName) {
|
|
114
112
|
const config = {};
|
|
115
113
|
if (entry.endpoint)
|
|
116
114
|
config.endpoint = entry.endpoint;
|
|
117
115
|
if (entry.apiKey)
|
|
118
116
|
config.apiKey = entry.apiKey;
|
|
117
|
+
if (entry.oauthTokens)
|
|
118
|
+
config.oauthTokens = entry.oauthTokens;
|
|
119
119
|
if (entry.project)
|
|
120
120
|
config.project = entry.project;
|
|
121
121
|
if (entry.headers)
|
|
122
122
|
config.headers = entry.headers;
|
|
123
|
+
config.profileName = profileName;
|
|
123
124
|
return config;
|
|
124
125
|
}
|
|
125
126
|
/**
|
|
@@ -138,18 +139,45 @@ export function resolveConfig({ cliOptions, profileName, }) {
|
|
|
138
139
|
// Commander (and other callers) may include keys with `undefined` values.
|
|
139
140
|
// If we spread those over envConfig we would accidentally clobber env vars.
|
|
140
141
|
const definedCliOptions = Object.fromEntries(Object.entries(cliOptions).filter(([, value]) => value !== undefined));
|
|
142
|
+
// OAuth tokens are only valid against the endpoint that issued them. When
|
|
143
|
+
// --endpoint or PHOENIX_HOST points the command at a different server, drop
|
|
144
|
+
// the tokens so they are never sent to — or refreshed against — a host that
|
|
145
|
+
// did not issue them.
|
|
146
|
+
const resolvedEndpoint = definedCliOptions.endpoint ??
|
|
147
|
+
processEnvConfig.endpoint ??
|
|
148
|
+
profileConfig.endpoint ??
|
|
149
|
+
envFileConfig.endpoint ??
|
|
150
|
+
builtInDefaults.endpoint;
|
|
151
|
+
const boundProfileConfig = profileConfig.oauthTokens && profileConfig.endpoint !== resolvedEndpoint
|
|
152
|
+
? { ...profileConfig, oauthTokens: undefined }
|
|
153
|
+
: profileConfig;
|
|
154
|
+
const credentialSource = getCredentialSource({
|
|
155
|
+
cliOptions: definedCliOptions,
|
|
156
|
+
processEnvConfig,
|
|
157
|
+
envFileConfig,
|
|
158
|
+
profileConfig: boundProfileConfig,
|
|
159
|
+
});
|
|
160
|
+
const oauthTokens = credentialSource === "oauth" ? boundProfileConfig.oauthTokens : undefined;
|
|
141
161
|
const config = {
|
|
142
162
|
...builtInDefaults,
|
|
143
163
|
...envFileConfig,
|
|
144
164
|
...profileConfig,
|
|
145
165
|
...processEnvConfig,
|
|
146
166
|
...definedCliOptions,
|
|
167
|
+
credentialSource,
|
|
168
|
+
oauthTokens,
|
|
147
169
|
};
|
|
170
|
+
// Profile OAuth outranks `.env.phoenix` API keys. The spread above can leave
|
|
171
|
+
// a file-tier apiKey in place when the profile only has oauthTokens — clear
|
|
172
|
+
// it so clients do not prefer the lower-tier key.
|
|
173
|
+
if (credentialSource === "oauth") {
|
|
174
|
+
config.apiKey = undefined;
|
|
175
|
+
}
|
|
148
176
|
const usesFileEndpoint = endpointSource?.kind === "env-file" &&
|
|
149
177
|
definedCliOptions.endpoint === undefined &&
|
|
150
178
|
processEnvConfig.endpoint === undefined &&
|
|
151
179
|
profileConfig.endpoint === undefined;
|
|
152
|
-
const
|
|
180
|
+
const warningCredentialSource = definedCliOptions.apiKey !== undefined ||
|
|
153
181
|
definedCliOptions.headers !== undefined
|
|
154
182
|
? "CLI options"
|
|
155
183
|
: processEnvConfig.apiKey !== undefined ||
|
|
@@ -161,13 +189,32 @@ export function resolveConfig({ cliOptions, profileName, }) {
|
|
|
161
189
|
: undefined;
|
|
162
190
|
if (usesFileEndpoint) {
|
|
163
191
|
warnIfUsingFileEndpointWithCredentials({
|
|
164
|
-
credentialSource,
|
|
192
|
+
credentialSource: warningCredentialSource,
|
|
165
193
|
endpointSource,
|
|
166
194
|
endpointVariable: ENV_PHOENIX_HOST,
|
|
167
195
|
});
|
|
168
196
|
}
|
|
169
197
|
return config;
|
|
170
198
|
}
|
|
199
|
+
function getCredentialSource({ cliOptions, processEnvConfig, envFileConfig, profileConfig, }) {
|
|
200
|
+
if (cliOptions.apiKey) {
|
|
201
|
+
return "flag";
|
|
202
|
+
}
|
|
203
|
+
// Process env outranks the profile; `.env.phoenix` does not.
|
|
204
|
+
if (processEnvConfig.apiKey) {
|
|
205
|
+
return "env";
|
|
206
|
+
}
|
|
207
|
+
if (profileConfig.apiKey) {
|
|
208
|
+
return "profile-key";
|
|
209
|
+
}
|
|
210
|
+
if (profileConfig.oauthTokens) {
|
|
211
|
+
return "oauth";
|
|
212
|
+
}
|
|
213
|
+
if (envFileConfig.apiKey) {
|
|
214
|
+
return "env";
|
|
215
|
+
}
|
|
216
|
+
return "none";
|
|
217
|
+
}
|
|
171
218
|
/**
|
|
172
219
|
* Validate that required configuration is present.
|
|
173
220
|
*/
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EAExB,uCAAuC,EACvC,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,GACvC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/build/exitCodes.d.ts
CHANGED
|
@@ -32,6 +32,12 @@ export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
|
|
|
32
32
|
export declare class InvalidArgumentError extends Error {
|
|
33
33
|
constructor(message: string);
|
|
34
34
|
}
|
|
35
|
+
export declare class AuthRequiredError extends Error {
|
|
36
|
+
constructor(message: string);
|
|
37
|
+
}
|
|
38
|
+
export declare class NetworkError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
35
41
|
/**
|
|
36
42
|
* Infer a semantic exit code from an unknown error value.
|
|
37
43
|
*
|
package/build/exitCodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../src/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;aACrC,OAAO,EAAE,CAAC;IACV,sCAAsC;aACtC,OAAO,EAAE,CAAC;IACV,mCAAmC;aACnC,SAAS,EAAE,CAAC;IACZ,6DAA6D;aAC7D,gBAAgB,EAAE,CAAC;IACnB,oDAAoD;aACpD,aAAa,EAAE,CAAC;IAChB,4DAA4D;aAC5D,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"exitCodes.d.ts","sourceRoot":"","sources":["../src/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ;IACnB,qCAAqC;aACrC,OAAO,EAAE,CAAC;IACV,sCAAsC;aACtC,OAAO,EAAE,CAAC;IACV,mCAAmC;aACnC,SAAS,EAAE,CAAC;IACZ,6DAA6D;aAC7D,gBAAgB,EAAE,CAAC;IACnB,oDAAoD;aACpD,aAAa,EAAE,CAAC;IAChB,4DAA4D;aAC5D,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAmB5D"}
|
package/build/exitCodes.js
CHANGED
|
@@ -34,6 +34,18 @@ export class InvalidArgumentError extends Error {
|
|
|
34
34
|
this.name = "InvalidArgumentError";
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
export class AuthRequiredError extends Error {
|
|
38
|
+
constructor(message) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.name = "AuthRequiredError";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class NetworkError extends Error {
|
|
44
|
+
constructor(message) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.name = "NetworkError";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
37
49
|
/**
|
|
38
50
|
* Infer a semantic exit code from an unknown error value.
|
|
39
51
|
*
|
|
@@ -47,6 +59,12 @@ export function getExitCodeForError(error) {
|
|
|
47
59
|
if (error instanceof InvalidArgumentError) {
|
|
48
60
|
return ExitCode.INVALID_ARGUMENT;
|
|
49
61
|
}
|
|
62
|
+
if (error instanceof AuthRequiredError) {
|
|
63
|
+
return ExitCode.AUTH_REQUIRED;
|
|
64
|
+
}
|
|
65
|
+
if (error instanceof NetworkError) {
|
|
66
|
+
return ExitCode.NETWORK_ERROR;
|
|
67
|
+
}
|
|
50
68
|
// TypeError is thrown by the Fetch API for network-level failures
|
|
51
69
|
// (e.g. ECONNREFUSED, ETIMEDOUT, DNS errors).
|
|
52
70
|
if (error instanceof TypeError) {
|
package/build/exitCodes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../src/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,CAAC;IACV,sCAAsC;IACtC,OAAO,EAAE,CAAC;IACV,mCAAmC;IACnC,SAAS,EAAE,CAAC;IACZ,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC;IACnB,oDAAoD;IACpD,aAAa,EAAE,CAAC;IAChB,4DAA4D;IAC5D,aAAa,EAAE,CAAC;CACR,CAAC;AAIX,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IACnC,CAAC;IAED,kEAAkE;IAClE,8CAA8C;IAC9C,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"exitCodes.js","sourceRoot":"","sources":["../src/exitCodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,CAAC;IACV,sCAAsC;IACtC,OAAO,EAAE,CAAC;IACV,mCAAmC;IACnC,SAAS,EAAE,CAAC;IACZ,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC;IACnB,oDAAoD;IACpD,aAAa,EAAE,CAAC;IAChB,4DAA4D;IAC5D,aAAa,EAAE,CAAC;CACR,CAAC;AAIX,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC,gBAAgB,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IAED,kEAAkE;IAClE,8CAA8C;IAC9C,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,aAAa,CAAC;IAChC,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
|