@arizeai/phoenix-cli 1.8.1 → 1.9.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 +88 -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/cli.d.ts.map +1 -1
- package/build/cli.js +2 -1
- package/build/cli.js.map +1 -1
- package/build/client.d.ts +5 -1
- package/build/client.d.ts.map +1 -1
- package/build/client.js +6 -1
- package/build/client.js.map +1 -1
- package/build/commands/annotationConfig.d.ts.map +1 -1
- package/build/commands/annotationConfig.js.map +1 -1
- package/build/commands/{annotationMutationUtils.d.ts → annotationMutations.d.ts} +1 -1
- package/build/commands/annotationMutations.d.ts.map +1 -0
- package/build/commands/{annotationMutationUtils.js → annotationMutations.js} +1 -1
- package/build/commands/annotationMutations.js.map +1 -0
- 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 +5 -2
- package/build/commands/auth.d.ts.map +1 -1
- package/build/commands/auth.js +332 -25
- package/build/commands/auth.js.map +1 -1
- package/build/commands/dataset.d.ts.map +1 -1
- package/build/commands/dataset.js.map +1 -1
- package/build/commands/docs.d.ts +51 -0
- package/build/commands/docs.d.ts.map +1 -1
- package/build/commands/docs.js +86 -37
- package/build/commands/docs.js.map +1 -1
- package/build/commands/experiment.d.ts.map +1 -1
- package/build/commands/experiment.js.map +1 -1
- package/build/commands/fetchSpanAnnotations.d.ts +14 -0
- package/build/commands/fetchSpanAnnotations.d.ts.map +1 -0
- package/build/commands/fetchSpanAnnotations.js +57 -0
- package/build/commands/fetchSpanAnnotations.js.map +1 -0
- package/build/commands/fetchTraceAnnotations.d.ts +14 -0
- package/build/commands/fetchTraceAnnotations.d.ts.map +1 -0
- package/build/commands/fetchTraceAnnotations.js +57 -0
- package/build/commands/fetchTraceAnnotations.js.map +1 -0
- package/build/commands/formatAnnotationMutation.d.ts +1 -1
- package/build/commands/formatAnnotationMutation.d.ts.map +1 -1
- package/build/commands/formatNoteMutation.d.ts +1 -1
- package/build/commands/formatNoteMutation.d.ts.map +1 -1
- package/build/commands/formatSetup.d.ts +56 -0
- package/build/commands/formatSetup.d.ts.map +1 -0
- package/build/commands/formatSetup.js +73 -0
- package/build/commands/formatSetup.js.map +1 -0
- package/build/commands/index.d.ts +4 -3
- package/build/commands/index.d.ts.map +1 -1
- package/build/commands/index.js +4 -3
- package/build/commands/index.js.map +1 -1
- package/build/commands/{noteMutationUtils.d.ts → noteMutations.d.ts} +1 -1
- package/build/commands/noteMutations.d.ts.map +1 -0
- package/build/commands/{noteMutationUtils.js → noteMutations.js} +1 -1
- package/build/commands/noteMutations.js.map +1 -0
- package/build/commands/options.d.ts +248 -0
- package/build/commands/options.d.ts.map +1 -0
- package/build/commands/options.js +16 -0
- package/build/commands/options.js.map +1 -0
- package/build/commands/profile.d.ts.map +1 -1
- package/build/commands/profile.js +3 -11
- package/build/commands/profile.js.map +1 -1
- package/build/commands/project.d.ts.map +1 -1
- package/build/commands/project.js +0 -1
- package/build/commands/project.js.map +1 -1
- package/build/commands/prompt.d.ts.map +1 -1
- package/build/commands/prompt.js.map +1 -1
- package/build/commands/self.d.ts.map +1 -1
- package/build/commands/self.js.map +1 -1
- package/build/commands/session.d.ts.map +1 -1
- package/build/commands/session.js +4 -4
- package/build/commands/session.js.map +1 -1
- package/build/commands/{sessionAnnotationsCommand.d.ts → sessionAnnotations.d.ts} +1 -1
- package/build/commands/sessionAnnotations.d.ts.map +1 -0
- package/build/commands/{sessionAnnotationsCommand.js → sessionAnnotations.js} +1 -1
- package/build/commands/sessionAnnotations.js.map +1 -0
- package/build/commands/setup.d.ts +19 -0
- package/build/commands/setup.d.ts.map +1 -0
- package/build/commands/setup.js +249 -0
- package/build/commands/setup.js.map +1 -0
- package/build/commands/span.d.ts.map +1 -1
- package/build/commands/span.js +5 -5
- package/build/commands/span.js.map +1 -1
- package/build/commands/spanAnnotations.d.ts +6 -13
- package/build/commands/spanAnnotations.d.ts.map +1 -1
- package/build/commands/spanAnnotations.js +154 -47
- package/build/commands/spanAnnotations.js.map +1 -1
- package/build/commands/trace.d.ts.map +1 -1
- package/build/commands/trace.js +6 -6
- package/build/commands/trace.js.map +1 -1
- package/build/commands/traceAnnotations.d.ts +6 -13
- package/build/commands/traceAnnotations.d.ts.map +1 -1
- package/build/commands/traceAnnotations.js +157 -47
- package/build/commands/traceAnnotations.js.map +1 -1
- 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/curl.d.ts +17 -0
- package/build/curl.d.ts.map +1 -1
- package/build/curl.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/optionParsers.d.ts +12 -0
- package/build/optionParsers.d.ts.map +1 -1
- package/build/optionParsers.js +15 -0
- package/build/optionParsers.js.map +1 -1
- package/build/pxi/App.d.ts.map +1 -1
- package/build/pxi/App.js +4 -0
- package/build/pxi/App.js.map +1 -1
- 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/pxi/options.d.ts +98 -0
- package/build/pxi/options.d.ts.map +1 -1
- package/build/pxi/options.js.map +1 -1
- package/build/settings.d.ts +19 -0
- package/build/settings.d.ts.map +1 -1
- package/build/settings.js +25 -0
- package/build/settings.js.map +1 -1
- package/build/setup/agents/registry.d.ts +135 -0
- package/build/setup/agents/registry.d.ts.map +1 -0
- package/build/setup/agents/registry.js +174 -0
- package/build/setup/agents/registry.js.map +1 -0
- package/build/setup/copy.d.ts +199 -0
- package/build/setup/copy.d.ts.map +1 -0
- package/build/setup/copy.js +334 -0
- package/build/setup/copy.js.map +1 -0
- package/build/setup/deps/buildDefaultDeps.d.ts +13 -0
- package/build/setup/deps/buildDefaultDeps.d.ts.map +1 -0
- package/build/setup/deps/buildDefaultDeps.js +31 -0
- package/build/setup/deps/buildDefaultDeps.js.map +1 -0
- package/build/setup/deps/clipboard.d.ts +12 -0
- package/build/setup/deps/clipboard.d.ts.map +1 -0
- package/build/setup/deps/clipboard.js +30 -0
- package/build/setup/deps/clipboard.js.map +1 -0
- package/build/setup/deps/clock.d.ts +10 -0
- package/build/setup/deps/clock.d.ts.map +1 -0
- package/build/setup/deps/clock.js +11 -0
- package/build/setup/deps/clock.js.map +1 -0
- package/build/setup/deps/context.d.ts +28 -0
- package/build/setup/deps/context.d.ts.map +1 -0
- package/build/setup/deps/context.js +24 -0
- package/build/setup/deps/context.js.map +1 -0
- package/build/setup/deps/docs.d.ts +41 -0
- package/build/setup/deps/docs.d.ts.map +1 -0
- package/build/setup/deps/docs.js +33 -0
- package/build/setup/deps/docs.js.map +1 -0
- package/build/setup/deps/index.d.ts +46 -0
- package/build/setup/deps/index.d.ts.map +1 -0
- package/build/setup/deps/index.js +16 -0
- package/build/setup/deps/index.js.map +1 -0
- 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/phoenixClient.d.ts +22 -0
- package/build/setup/deps/phoenixClient.d.ts.map +1 -0
- package/build/setup/deps/phoenixClient.js +17 -0
- package/build/setup/deps/phoenixClient.js.map +1 -0
- package/build/setup/deps/processes.d.ts +28 -0
- package/build/setup/deps/processes.d.ts.map +1 -0
- package/build/setup/deps/processes.js +58 -0
- package/build/setup/deps/processes.js.map +1 -0
- package/build/setup/deps/prompter.d.ts +49 -0
- package/build/setup/deps/prompter.d.ts.map +1 -0
- package/build/setup/deps/prompter.js +10 -0
- package/build/setup/deps/prompter.js.map +1 -0
- package/build/setup/errors.d.ts +27 -0
- package/build/setup/errors.d.ts.map +1 -0
- package/build/setup/errors.js +36 -0
- package/build/setup/errors.js.map +1 -0
- package/build/setup/options.d.ts +124 -0
- package/build/setup/options.d.ts.map +1 -0
- package/build/setup/options.js +64 -0
- package/build/setup/options.js.map +1 -0
- package/build/setup/prompts/instrumentationPrompt.d.ts +48 -0
- package/build/setup/prompts/instrumentationPrompt.d.ts.map +1 -0
- package/build/setup/prompts/instrumentationPrompt.js +68 -0
- package/build/setup/prompts/instrumentationPrompt.js.map +1 -0
- package/build/setup/runSetup.d.ts +48 -0
- package/build/setup/runSetup.d.ts.map +1 -0
- package/build/setup/runSetup.js +213 -0
- package/build/setup/runSetup.js.map +1 -0
- package/build/setup/steps/chooseEndpoint.d.ts +36 -0
- package/build/setup/steps/chooseEndpoint.d.ts.map +1 -0
- package/build/setup/steps/chooseEndpoint.js +125 -0
- package/build/setup/steps/chooseEndpoint.js.map +1 -0
- package/build/setup/steps/confirmGitSafety.d.ts +17 -0
- package/build/setup/steps/confirmGitSafety.d.ts.map +1 -0
- package/build/setup/steps/confirmGitSafety.js +73 -0
- package/build/setup/steps/confirmGitSafety.js.map +1 -0
- package/build/setup/steps/establishConnection.d.ts +32 -0
- package/build/setup/steps/establishConnection.d.ts.map +1 -0
- package/build/setup/steps/establishConnection.js +252 -0
- package/build/setup/steps/establishConnection.js.map +1 -0
- package/build/setup/steps/installTooling.d.ts +28 -0
- package/build/setup/steps/installTooling.d.ts.map +1 -0
- package/build/setup/steps/installTooling.js +79 -0
- package/build/setup/steps/installTooling.js.map +1 -0
- package/build/setup/steps/instrumentApp.d.ts +60 -0
- package/build/setup/steps/instrumentApp.d.ts.map +1 -0
- package/build/setup/steps/instrumentApp.js +179 -0
- package/build/setup/steps/instrumentApp.js.map +1 -0
- 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 +133 -0
- package/build/setup/steps/offerDocsMcp.js.map +1 -0
- package/build/setup/steps/offerPxProfile.d.ts +20 -0
- package/build/setup/steps/offerPxProfile.d.ts.map +1 -0
- package/build/setup/steps/offerPxProfile.js +95 -0
- package/build/setup/steps/offerPxProfile.js.map +1 -0
- package/build/setup/steps/prefetchDocs.d.ts +24 -0
- package/build/setup/steps/prefetchDocs.d.ts.map +1 -0
- package/build/setup/steps/prefetchDocs.js +49 -0
- package/build/setup/steps/prefetchDocs.js.map +1 -0
- package/build/setup/steps/verifyTraces.d.ts +44 -0
- package/build/setup/steps/verifyTraces.d.ts.map +1 -0
- package/build/setup/steps/verifyTraces.js +119 -0
- package/build/setup/steps/verifyTraces.js.map +1 -0
- package/build/setup/steps/writeEnvFile.d.ts +19 -0
- package/build/setup/steps/writeEnvFile.d.ts.map +1 -0
- package/build/setup/steps/writeEnvFile.js +50 -0
- package/build/setup/steps/writeEnvFile.js.map +1 -0
- package/build/setup/ui/clackPrompter.d.ts +11 -0
- package/build/setup/ui/clackPrompter.d.ts.map +1 -0
- package/build/setup/ui/clackPrompter.js +122 -0
- package/build/setup/ui/clackPrompter.js.map +1 -0
- package/build/setup/ui/selectBoolean.d.ts +18 -0
- package/build/setup/ui/selectBoolean.d.ts.map +1 -0
- package/build/setup/ui/selectBoolean.js +14 -0
- package/build/setup/ui/selectBoolean.js.map +1 -0
- package/build/setup/util/gitignoreCoverage.d.ts +24 -0
- package/build/setup/util/gitignoreCoverage.d.ts.map +1 -0
- package/build/setup/util/gitignoreCoverage.js +43 -0
- package/build/setup/util/gitignoreCoverage.js.map +1 -0
- package/build/setup/util/mcpConfig.d.ts +31 -0
- package/build/setup/util/mcpConfig.d.ts.map +1 -0
- package/build/setup/util/mcpConfig.js +62 -0
- package/build/setup/util/mcpConfig.js.map +1 -0
- package/build/setup/util/paths.d.ts +6 -0
- package/build/setup/util/paths.d.ts.map +1 -0
- package/build/setup/util/paths.js +23 -0
- package/build/setup/util/paths.js.map +1 -0
- package/build/setup/util/redact.d.ts +12 -0
- package/build/setup/util/redact.d.ts.map +1 -0
- package/build/setup/util/redact.js +31 -0
- package/build/setup/util/redact.js.map +1 -0
- package/build/validation/endpoint.d.ts +19 -0
- package/build/validation/endpoint.d.ts.map +1 -0
- package/build/validation/endpoint.js +39 -0
- package/build/validation/endpoint.js.map +1 -0
- package/package.json +15 -12
- package/build/commands/annotationMutationUtils.d.ts.map +0 -1
- package/build/commands/annotationMutationUtils.js.map +0 -1
- package/build/commands/noteMutationUtils.d.ts.map +0 -1
- package/build/commands/noteMutationUtils.js.map +0 -1
- package/build/commands/sessionAnnotationsCommand.d.ts.map +0 -1
- package/build/commands/sessionAnnotationsCommand.js.map +0 -1
- package/build/commands/spanAnnotationsCommand.d.ts +0 -7
- package/build/commands/spanAnnotationsCommand.d.ts.map +0 -1
- package/build/commands/spanAnnotationsCommand.js +0 -164
- package/build/commands/spanAnnotationsCommand.js.map +0 -1
- package/build/commands/traceAnnotationsCommand.d.ts +0 -7
- package/build/commands/traceAnnotationsCommand.d.ts.map +0 -1
- package/build/commands/traceAnnotationsCommand.js +0 -167
- package/build/commands/traceAnnotationsCommand.js.map +0 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known coding agents setup can hand off to.
|
|
3
|
+
*
|
|
4
|
+
* Detection is a parallel `<binary> --version` probe — binary-on-PATH is the
|
|
5
|
+
* only signal, and a detected agent becomes a "Hand off to …" lane in the
|
|
6
|
+
* instrumentation step. Launching is interactive: the agent takes over the
|
|
7
|
+
* terminal with the setup prompt pre-loaded and Phoenix credentials injected
|
|
8
|
+
* via environment variables; setup resumes when it exits.
|
|
9
|
+
*/
|
|
10
|
+
import type { CommandSpec, SetupDeps } from "../deps/index.js";
|
|
11
|
+
import type { Connection } from "../steps/establishConnection.js";
|
|
12
|
+
export type CodingAgentId = "claude" | "codex" | "opencode" | "cursor";
|
|
13
|
+
/** The server name the docs MCP is registered under in agent configs. */
|
|
14
|
+
export declare const DOCS_MCP_SERVER_NAME = "phoenix-docs";
|
|
15
|
+
/**
|
|
16
|
+
* The Mintlify-hosted Phoenix docs MCP server (streamable HTTP). Searching it
|
|
17
|
+
* returns just the relevant doc sections, so an agent connected to it needs
|
|
18
|
+
* neither the `.px/docs` download nor whole-page fetches.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DOCS_MCP_SERVER_URL = "https://arizeai-433a7140.mintlify.app/mcp";
|
|
21
|
+
/**
|
|
22
|
+
* How the docs MCP server is installed for an agent, scoped to the repo setup
|
|
23
|
+
* runs in. Absent when the agent has no per-project MCP config (Codex reads
|
|
24
|
+
* only a global TOML).
|
|
25
|
+
*
|
|
26
|
+
* `cli` is preferred wherever the agent ships an MCP subcommand: the installed
|
|
27
|
+
* binary writes the config format that same binary reads, so the CLI can never
|
|
28
|
+
* drift from the agent's schema. `file` is the fallback for agents whose only
|
|
29
|
+
* documented mechanism is hand-editing a JSON file — those shapes mirror
|
|
30
|
+
* `docs/phoenix/integrations/phoenix-mcp-server.mdx`, which is the contract to
|
|
31
|
+
* keep them true to.
|
|
32
|
+
*/
|
|
33
|
+
export type DocsMcpInstall = {
|
|
34
|
+
kind: "cli";
|
|
35
|
+
/**
|
|
36
|
+
* Best-effort removal of a previous entry, with its exit code ignored.
|
|
37
|
+
* Run only after an `add` was refused and `verifyArgs` confirmed an
|
|
38
|
+
* entry exists under our name — `add` refuses a name that already
|
|
39
|
+
* exists, and remove-then-retry is what makes a setup re-run
|
|
40
|
+
* idempotent, while removing any earlier would destroy a working
|
|
41
|
+
* registration a failed retry can't put back.
|
|
42
|
+
*/
|
|
43
|
+
removeArgs: string[];
|
|
44
|
+
/** argv (after the binary) that registers the server. */
|
|
45
|
+
addArgs(serverUrl: string): string[];
|
|
46
|
+
/**
|
|
47
|
+
* Read-back of the entry after `add`; a non-zero exit means the server
|
|
48
|
+
* is not actually registered. This is the drift guard: if the agent's
|
|
49
|
+
* flags ever change meaning while still parsing, exit codes alone would
|
|
50
|
+
* lie, but an entry that doesn't show up in the agent's own listing
|
|
51
|
+
* cannot.
|
|
52
|
+
*/
|
|
53
|
+
verifyArgs: string[];
|
|
54
|
+
} | {
|
|
55
|
+
kind: "file";
|
|
56
|
+
/**
|
|
57
|
+
* Config file path, relative to the repo root. Always forward-slash:
|
|
58
|
+
* Node's fs resolves it on every platform, and the setup report stays
|
|
59
|
+
* platform-stable (`path.join` would put a backslash in the JSON
|
|
60
|
+
* envelope on Windows).
|
|
61
|
+
*/
|
|
62
|
+
relativePath: string;
|
|
63
|
+
/** Keys applied only when the file is being created, e.g. `$schema`. */
|
|
64
|
+
createDefaults?: Record<string, unknown>;
|
|
65
|
+
/** The JSON fragment to merge into that file. */
|
|
66
|
+
patch(serverUrl: string): Record<string, unknown>;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* How the agent is run.
|
|
70
|
+
*
|
|
71
|
+
* `background` drops the TUI and runs to completion — required when setup
|
|
72
|
+
* itself is headless, since there is no terminal for the agent to take over.
|
|
73
|
+
* `bypassPermissions` waives the agent's own file/command approval prompts;
|
|
74
|
+
* without it a background run stalls on the first approval it wants and is
|
|
75
|
+
* killed by the verification timeout instead.
|
|
76
|
+
*/
|
|
77
|
+
export interface AgentRunMode {
|
|
78
|
+
background: boolean;
|
|
79
|
+
bypassPermissions: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface CodingAgent {
|
|
82
|
+
id: CodingAgentId;
|
|
83
|
+
/** "Claude Code", "Codex", … */
|
|
84
|
+
label: string;
|
|
85
|
+
/** Binary name for PATH discovery and launch. */
|
|
86
|
+
binary: string;
|
|
87
|
+
/**
|
|
88
|
+
* argv that opens the agent with the prompt pre-loaded, in the requested
|
|
89
|
+
* mode. Each agent builds its own argv because the flags are not
|
|
90
|
+
* interchangeable and their order matters — `codex` takes its bypass flag
|
|
91
|
+
* after the `exec` subcommand, not before it.
|
|
92
|
+
*/
|
|
93
|
+
launchArgs(prompt: string, mode: AgentRunMode): string[];
|
|
94
|
+
/** See {@link DocsMcpInstall}; absent when the agent has none. */
|
|
95
|
+
docsMcpInstall?: DocsMcpInstall;
|
|
96
|
+
}
|
|
97
|
+
export declare const CODING_AGENTS: readonly CodingAgent[];
|
|
98
|
+
/** The agent with this id, or undefined when the id is unknown. */
|
|
99
|
+
export declare function getCodingAgent(id: string): CodingAgent | undefined;
|
|
100
|
+
/** Every id `--agent` accepts, for help text and error messages. */
|
|
101
|
+
export declare const CODING_AGENT_IDS: readonly CodingAgentId[];
|
|
102
|
+
/**
|
|
103
|
+
* True when the binary answers `--version` within the timeout. The timeout
|
|
104
|
+
* kills the child (via the exec seam), so a hung probe counts as not found
|
|
105
|
+
* without leaving an orphaned subprocess behind.
|
|
106
|
+
*/
|
|
107
|
+
export declare function probeBinary(deps: Pick<SetupDeps, "processes">, binary: string, { env }?: {
|
|
108
|
+
env?: Record<string, string>;
|
|
109
|
+
}): Promise<boolean>;
|
|
110
|
+
/**
|
|
111
|
+
* PATH with `node_modules/.bin` entries removed. Package runners (`npx`,
|
|
112
|
+
* `pnpm dlx`) prepend their package's own bin directory, which would make a
|
|
113
|
+
* package-provided shim masquerade as a globally installed binary.
|
|
114
|
+
*/
|
|
115
|
+
export declare function pathWithoutPackageBins(pathValue: string): string;
|
|
116
|
+
/**
|
|
117
|
+
* `probeBinary`, but blind to binaries provided by the running package —
|
|
118
|
+
* used to decide whether `px` is genuinely installed globally when the
|
|
119
|
+
* setup itself runs under `npx @arizeai/phoenix-cli`.
|
|
120
|
+
*/
|
|
121
|
+
export declare function probeGlobalBinary(deps: Pick<SetupDeps, "context" | "processes">, binary: string): Promise<boolean>;
|
|
122
|
+
/** Agents whose binary probe succeeds, in registry order. */
|
|
123
|
+
export declare function detectCodingAgents(deps: Pick<SetupDeps, "processes">): Promise<CodingAgent[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Env vars the launched agent's shell inherits so the app under test can
|
|
126
|
+
* export a verification trace without the agent handling credentials.
|
|
127
|
+
*/
|
|
128
|
+
export declare function connectionEnv(connection: Connection): Record<string, string>;
|
|
129
|
+
export declare function buildLaunchSpec(agent: CodingAgent, args: {
|
|
130
|
+
prompt: string;
|
|
131
|
+
cwd: string;
|
|
132
|
+
connection: Connection;
|
|
133
|
+
mode?: AgentRunMode;
|
|
134
|
+
}): CommandSpec;
|
|
135
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/setup/agents/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known coding agents setup can hand off to.
|
|
3
|
+
*
|
|
4
|
+
* Detection is a parallel `<binary> --version` probe — binary-on-PATH is the
|
|
5
|
+
* only signal, and a detected agent becomes a "Hand off to …" lane in the
|
|
6
|
+
* instrumentation step. Launching is interactive: the agent takes over the
|
|
7
|
+
* terminal with the setup prompt pre-loaded and Phoenix credentials injected
|
|
8
|
+
* via environment variables; setup resumes when it exits.
|
|
9
|
+
*/
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
/** The server name the docs MCP is registered under in agent configs. */
|
|
12
|
+
export const DOCS_MCP_SERVER_NAME = "phoenix-docs";
|
|
13
|
+
/**
|
|
14
|
+
* The Mintlify-hosted Phoenix docs MCP server (streamable HTTP). Searching it
|
|
15
|
+
* returns just the relevant doc sections, so an agent connected to it needs
|
|
16
|
+
* neither the `.px/docs` download nor whole-page fetches.
|
|
17
|
+
*/
|
|
18
|
+
export const DOCS_MCP_SERVER_URL = "https://arizeai-433a7140.mintlify.app/mcp";
|
|
19
|
+
export const CODING_AGENTS = [
|
|
20
|
+
{
|
|
21
|
+
id: "claude",
|
|
22
|
+
label: "Claude Code",
|
|
23
|
+
binary: "claude",
|
|
24
|
+
launchArgs: (prompt, mode) => [
|
|
25
|
+
...(mode.background ? ["-p"] : []),
|
|
26
|
+
...(mode.bypassPermissions ? ["--dangerously-skip-permissions"] : []),
|
|
27
|
+
prompt,
|
|
28
|
+
],
|
|
29
|
+
// The default (local) scope is deliberate: nothing lands in the repo, and
|
|
30
|
+
// unlike a project-scoped .mcp.json the server needs no first-use
|
|
31
|
+
// approval, so the launched hand-off session can actually use it.
|
|
32
|
+
docsMcpInstall: {
|
|
33
|
+
kind: "cli",
|
|
34
|
+
removeArgs: ["mcp", "remove", DOCS_MCP_SERVER_NAME],
|
|
35
|
+
addArgs: (serverUrl) => [
|
|
36
|
+
"mcp",
|
|
37
|
+
"add",
|
|
38
|
+
"--transport",
|
|
39
|
+
"http",
|
|
40
|
+
DOCS_MCP_SERVER_NAME,
|
|
41
|
+
serverUrl,
|
|
42
|
+
],
|
|
43
|
+
verifyArgs: ["mcp", "get", DOCS_MCP_SERVER_NAME],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "codex",
|
|
48
|
+
label: "Codex",
|
|
49
|
+
binary: "codex",
|
|
50
|
+
// `codex exec` is the non-interactive entry point; flags belong after it.
|
|
51
|
+
launchArgs: (prompt, mode) => [
|
|
52
|
+
...(mode.background ? ["exec"] : []),
|
|
53
|
+
...(mode.bypassPermissions
|
|
54
|
+
? ["--dangerously-bypass-approvals-and-sandbox"]
|
|
55
|
+
: []),
|
|
56
|
+
prompt,
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "opencode",
|
|
61
|
+
label: "OpenCode",
|
|
62
|
+
binary: "opencode",
|
|
63
|
+
// `opencode run` is already non-interactive, so background adds nothing.
|
|
64
|
+
launchArgs: (prompt, mode) => [
|
|
65
|
+
"run",
|
|
66
|
+
...(mode.bypassPermissions ? ["--dangerously-skip-permissions"] : []),
|
|
67
|
+
prompt,
|
|
68
|
+
],
|
|
69
|
+
docsMcpInstall: {
|
|
70
|
+
kind: "file",
|
|
71
|
+
relativePath: "opencode.json",
|
|
72
|
+
createDefaults: { $schema: "https://opencode.ai/config.json" },
|
|
73
|
+
patch: (serverUrl) => ({
|
|
74
|
+
mcp: {
|
|
75
|
+
[DOCS_MCP_SERVER_NAME]: {
|
|
76
|
+
type: "remote",
|
|
77
|
+
url: serverUrl,
|
|
78
|
+
enabled: true,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
}),
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "cursor",
|
|
86
|
+
label: "Cursor",
|
|
87
|
+
binary: "cursor-agent",
|
|
88
|
+
launchArgs: (prompt, mode) => [
|
|
89
|
+
...(mode.background ? ["-p"] : []),
|
|
90
|
+
...(mode.bypassPermissions ? ["--force"] : []),
|
|
91
|
+
prompt,
|
|
92
|
+
],
|
|
93
|
+
docsMcpInstall: {
|
|
94
|
+
kind: "file",
|
|
95
|
+
relativePath: ".cursor/mcp.json",
|
|
96
|
+
patch: (serverUrl) => ({
|
|
97
|
+
mcpServers: { [DOCS_MCP_SERVER_NAME]: { url: serverUrl } },
|
|
98
|
+
}),
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
/** The agent with this id, or undefined when the id is unknown. */
|
|
103
|
+
export function getCodingAgent(id) {
|
|
104
|
+
return CODING_AGENTS.find((agent) => agent.id === id);
|
|
105
|
+
}
|
|
106
|
+
/** Every id `--agent` accepts, for help text and error messages. */
|
|
107
|
+
export const CODING_AGENT_IDS = CODING_AGENTS.map((agent) => agent.id);
|
|
108
|
+
const PROBE_TIMEOUT_MS = 2_000;
|
|
109
|
+
/**
|
|
110
|
+
* True when the binary answers `--version` within the timeout. The timeout
|
|
111
|
+
* kills the child (via the exec seam), so a hung probe counts as not found
|
|
112
|
+
* without leaving an orphaned subprocess behind.
|
|
113
|
+
*/
|
|
114
|
+
export async function probeBinary(deps, binary, { env } = {}) {
|
|
115
|
+
const result = await deps.processes.exec({
|
|
116
|
+
command: binary,
|
|
117
|
+
args: ["--version"],
|
|
118
|
+
timeoutMs: PROBE_TIMEOUT_MS,
|
|
119
|
+
...(env ? { env } : {}),
|
|
120
|
+
});
|
|
121
|
+
return result.exitCode === 0;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* PATH with `node_modules/.bin` entries removed. Package runners (`npx`,
|
|
125
|
+
* `pnpm dlx`) prepend their package's own bin directory, which would make a
|
|
126
|
+
* package-provided shim masquerade as a globally installed binary.
|
|
127
|
+
*/
|
|
128
|
+
export function pathWithoutPackageBins(pathValue) {
|
|
129
|
+
const packageBinMarker = `node_modules${path.sep}.bin`;
|
|
130
|
+
return pathValue
|
|
131
|
+
.split(path.delimiter)
|
|
132
|
+
.filter((entry) => !entry.includes(packageBinMarker))
|
|
133
|
+
.join(path.delimiter);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* `probeBinary`, but blind to binaries provided by the running package —
|
|
137
|
+
* used to decide whether `px` is genuinely installed globally when the
|
|
138
|
+
* setup itself runs under `npx @arizeai/phoenix-cli`.
|
|
139
|
+
*/
|
|
140
|
+
export function probeGlobalBinary(deps, binary) {
|
|
141
|
+
// Override PATH under the spelling the run context resolved, so the child
|
|
142
|
+
// does not end up with both a "Path" and a "PATH" on Windows.
|
|
143
|
+
const { env, pathKey } = deps.context;
|
|
144
|
+
const pathValue = env[pathKey];
|
|
145
|
+
return probeBinary(deps, binary, pathValue === undefined
|
|
146
|
+
? {}
|
|
147
|
+
: { env: { [pathKey]: pathWithoutPackageBins(pathValue) } });
|
|
148
|
+
}
|
|
149
|
+
/** Agents whose binary probe succeeds, in registry order. */
|
|
150
|
+
export async function detectCodingAgents(deps) {
|
|
151
|
+
const probes = await Promise.all(CODING_AGENTS.map((agent) => probeBinary(deps, agent.binary)));
|
|
152
|
+
return CODING_AGENTS.filter((_, index) => probes[index]);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Env vars the launched agent's shell inherits so the app under test can
|
|
156
|
+
* export a verification trace without the agent handling credentials.
|
|
157
|
+
*/
|
|
158
|
+
export function connectionEnv(connection) {
|
|
159
|
+
return {
|
|
160
|
+
PHOENIX_COLLECTOR_ENDPOINT: connection.endpoint,
|
|
161
|
+
PHOENIX_PROJECT_NAME: connection.projectName,
|
|
162
|
+
...(connection.apiKey ? { PHOENIX_API_KEY: connection.apiKey } : {}),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export function buildLaunchSpec(agent, args) {
|
|
166
|
+
const mode = args.mode ?? { background: false, bypassPermissions: false };
|
|
167
|
+
return {
|
|
168
|
+
command: agent.binary,
|
|
169
|
+
args: agent.launchArgs(args.prompt, mode),
|
|
170
|
+
cwd: args.cwd,
|
|
171
|
+
env: connectionEnv(args.connection),
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/setup/agents/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ALL user-facing strings for setup, grouped by the step that emits
|
|
3
|
+
* them. Control flow references copy; copy never references control flow.
|
|
4
|
+
* Keep prose here so wording changes never touch step logic.
|
|
5
|
+
*/
|
|
6
|
+
export declare const DOCS: {
|
|
7
|
+
/** Agent-facing quickstart, Python (arize-phoenix-otel). */
|
|
8
|
+
readonly quickstartPython: "https://arize.com/docs/phoenix/get-started/get-started-tracing";
|
|
9
|
+
/** Agent-facing quickstart, TypeScript (@arizeai/phoenix-otel). */
|
|
10
|
+
readonly quickstartTypeScript: "https://arize.com/docs/phoenix/get-started/ts-get-started-tracing";
|
|
11
|
+
/** phoenix.otel register() reference for custom setups. */
|
|
12
|
+
readonly phoenixOtelSetup: "https://arize.com/docs/phoenix/tracing/how-to-tracing/setup-tracing/setup-using-phoenix-otel";
|
|
13
|
+
/** Per-framework/provider auto-instrumentation guides. */
|
|
14
|
+
readonly integrationsIndex: "https://arize.com/docs/phoenix/integrations";
|
|
15
|
+
/** Linked from the verification step. */
|
|
16
|
+
readonly troubleshooting: "https://arize.com/docs/phoenix/tracing/concepts-tracing/faqs-tracing";
|
|
17
|
+
/** Linked from the manual lane and headless output. */
|
|
18
|
+
readonly instrumentationIndex: "https://arize.com/docs/phoenix/quickstart";
|
|
19
|
+
};
|
|
20
|
+
export declare const SUPPORT_LINKS: string;
|
|
21
|
+
export declare const INTRO = "Phoenix tracing setup";
|
|
22
|
+
export declare const INTRO_INSTRUMENT = "Phoenix setup \u2014 instrument this app and verify traces arrive.";
|
|
23
|
+
export declare const INTRO_SKILLS = "Install agent skills";
|
|
24
|
+
export declare const CANCEL_OUTRO: string;
|
|
25
|
+
export declare const OUTRO_TITLE = "You're set up.";
|
|
26
|
+
export declare const OUTRO_BODY: string;
|
|
27
|
+
export declare const GIT: {
|
|
28
|
+
readonly notARepoMessage: "This directory is not a git repository. Continue anyway?";
|
|
29
|
+
readonly notARepoYes: "Yes, continue without git";
|
|
30
|
+
readonly notARepoNo: "No, stop here (recommended)";
|
|
31
|
+
readonly notARepoNoHint: "Setup may edit files via a coding agent — git is the undo button.";
|
|
32
|
+
readonly notARepoYesHint: "You will have no easy way to review or revert changes.";
|
|
33
|
+
readonly dirtyMessage: (fileCount: number) => string;
|
|
34
|
+
readonly dirtyYes: "Yes, continue with a dirty tree";
|
|
35
|
+
readonly dirtyNo: "No, stop here so I can commit first (recommended)";
|
|
36
|
+
readonly dirtyNoHint: "A clean tree keeps agent edits separate from your own edits.";
|
|
37
|
+
readonly dirtyYesHint: "Agent edits will be tangled with your uncommitted work.";
|
|
38
|
+
readonly dirtyFileListTitle: "Uncommitted changes";
|
|
39
|
+
readonly andMore: (count: number) => string;
|
|
40
|
+
readonly headlessDirty: "Refusing to run headless in a dirty git tree. Commit or stash your changes and re-run.";
|
|
41
|
+
readonly headlessNotARepo: "Refusing to run headless outside a git repository. Run `git init` (or run setup interactively) and re-run.";
|
|
42
|
+
readonly stopped: "Stopped. Commit your work, then re-run `px setup`.";
|
|
43
|
+
};
|
|
44
|
+
export declare const ENDPOINT: {
|
|
45
|
+
readonly selectMessage: "Where is your Phoenix instance running?";
|
|
46
|
+
readonly localLabel: "Local — http://localhost:6006";
|
|
47
|
+
readonly localHint: "recommended if you just ran `phoenix serve`";
|
|
48
|
+
readonly remoteLabel: "Remote — paste your instance URL";
|
|
49
|
+
readonly remoteHint: "any Phoenix instance reachable by URL";
|
|
50
|
+
readonly remoteUrlMessage: "Phoenix instance URL";
|
|
51
|
+
readonly remoteUrlInvalid: "Enter a full http:// or https:// URL, e.g. https://phoenix.example.com";
|
|
52
|
+
readonly probing: (endpoint: string) => string;
|
|
53
|
+
readonly unexpectedBody: "unexpected response body";
|
|
54
|
+
readonly unreachable: (endpoint: string) => string;
|
|
55
|
+
readonly notPhoenix: (endpoint: string, detail: string) => string;
|
|
56
|
+
readonly retryMessage: "Try a different URL?";
|
|
57
|
+
readonly retryYes: "Yes, enter a URL again";
|
|
58
|
+
readonly retryNo: "No, exit setup";
|
|
59
|
+
readonly gaveUp: string;
|
|
60
|
+
readonly authOn: "Authentication is enabled on this instance.";
|
|
61
|
+
readonly authOff: "Authentication is off — no API key needed.";
|
|
62
|
+
readonly headlessUnreachable: (endpoint: string) => string;
|
|
63
|
+
readonly headlessNeedsEndpoint: string;
|
|
64
|
+
};
|
|
65
|
+
export declare const CONNECT: {
|
|
66
|
+
readonly projectNameMessage: "Phoenix project name for this app's traces";
|
|
67
|
+
readonly projectNameInvalid: "Project names can't contain '/', '?', or '#' and can't be empty.";
|
|
68
|
+
readonly usingProject: (name: string) => string;
|
|
69
|
+
readonly connectFailed: (detail: string) => string;
|
|
70
|
+
readonly headlessNeedsProject: string;
|
|
71
|
+
readonly headlessNeedsApiKey: string;
|
|
72
|
+
readonly headlessAuthRejected: "The API key was rejected. Check PHOENIX_API_KEY.";
|
|
73
|
+
};
|
|
74
|
+
export declare const CREDENTIALS: {
|
|
75
|
+
readonly methodMessage: "How do you want to connect to Phoenix?";
|
|
76
|
+
readonly loginLabel: "Log in with your browser (recommended)";
|
|
77
|
+
readonly loginHint: "approve once in Phoenix; setup creates an API key for you";
|
|
78
|
+
readonly pasteLabel: "Paste an existing API key";
|
|
79
|
+
readonly pasteHint: "create or copy one in Phoenix under Settings";
|
|
80
|
+
readonly authorizationUrl: (url: string) => string;
|
|
81
|
+
readonly browserOpenFailed: (detail: string) => string;
|
|
82
|
+
readonly keyCreated: (name: string) => string;
|
|
83
|
+
readonly loginCancelled: "Login didn't finish — paste an API key instead.";
|
|
84
|
+
readonly loginFailed: (detail: string) => string;
|
|
85
|
+
readonly keyCreateFailed: (detail: string) => string;
|
|
86
|
+
};
|
|
87
|
+
export declare const API_KEY: {
|
|
88
|
+
readonly instructionsTitle: "Phoenix API key";
|
|
89
|
+
readonly instructions: string;
|
|
90
|
+
readonly pasteKeyMessage: "Phoenix API key";
|
|
91
|
+
readonly pasteKeyInvalid: "API key can't be empty.";
|
|
92
|
+
readonly pasteKeyRejected: "That API key was rejected by the instance. Try again.";
|
|
93
|
+
};
|
|
94
|
+
export declare const ENV_FILE: {
|
|
95
|
+
readonly wrote: (names: string[]) => string;
|
|
96
|
+
readonly gitignored: (names: string[]) => string;
|
|
97
|
+
readonly fileHeaderEnv: (isoDate: string) => string;
|
|
98
|
+
};
|
|
99
|
+
export declare const INSTRUMENTATION: {
|
|
100
|
+
readonly modeMessage: "How do you want to instrument this app?";
|
|
101
|
+
readonly launchLabel: (agentLabel: string) => string;
|
|
102
|
+
readonly launchHint: "launches here with the setup prompt pre-loaded";
|
|
103
|
+
readonly unknownAgent: (agent: string) => string;
|
|
104
|
+
readonly agentNotFound: (agentLabel: string, binary: string) => string;
|
|
105
|
+
readonly launchingBackground: (agentLabel: string) => string;
|
|
106
|
+
readonly backgroundNeedsYolo: (agentLabel: string) => string;
|
|
107
|
+
readonly launching: (agentLabel: string) => string;
|
|
108
|
+
readonly agentExitWarning: (agentLabel: string) => string;
|
|
109
|
+
readonly clipboardLabel: "Copy a prompt for my own coding agent";
|
|
110
|
+
readonly clipboardHint: "paste it into Claude Code, Codex, Cursor — any agent you run yourself";
|
|
111
|
+
readonly manualLabel: "I'll do it manually";
|
|
112
|
+
readonly manualHint: "follow the quickstart docs yourself";
|
|
113
|
+
readonly promptCopied: "Instrumentation prompt copied to your clipboard. Paste it into your agent in this directory.";
|
|
114
|
+
readonly promptCopyFailed: "Couldn't write to the clipboard — here is the prompt to copy:";
|
|
115
|
+
readonly clipboardDoneMessage: "When your agent has finished:";
|
|
116
|
+
readonly clipboardDoneLabel: "I've run the prompt";
|
|
117
|
+
readonly manualDocs: (url: string) => string;
|
|
118
|
+
readonly manualDoneMessage: "When you've added instrumentation:";
|
|
119
|
+
readonly manualDoneLabel: "I've finished instrumenting";
|
|
120
|
+
};
|
|
121
|
+
export declare const VERIFY: {
|
|
122
|
+
readonly title: "Verifying traces";
|
|
123
|
+
readonly waitingBody: (tracesUrl: string) => string;
|
|
124
|
+
readonly received: (tracesUrl: string) => string;
|
|
125
|
+
readonly timeoutMessage: "No traces have arrived yet. Keep watching?";
|
|
126
|
+
readonly keepWatchingLabel: "Keep watching";
|
|
127
|
+
readonly finishLabel: "Finish setup — I'll verify later";
|
|
128
|
+
readonly finishHint: "everything else is already configured";
|
|
129
|
+
readonly notVerifiedHeadless: (tracesUrl: string) => string;
|
|
130
|
+
readonly notVerifiedTitle: "Traces not verified yet";
|
|
131
|
+
readonly notVerifiedBody: (tracesUrl: string) => string;
|
|
132
|
+
};
|
|
133
|
+
export declare const PRODUCTION: {
|
|
134
|
+
readonly title: "Production hand-off";
|
|
135
|
+
readonly bodyAuthOn: string;
|
|
136
|
+
readonly bodyAuthOff: string;
|
|
137
|
+
};
|
|
138
|
+
export declare const PX_PROFILE: {
|
|
139
|
+
readonly optInMessage: "Also point the px CLI at this project? (lets you query traces from your terminal)";
|
|
140
|
+
readonly optInYes: "Yes, create a px profile";
|
|
141
|
+
readonly optInNo: "No thanks";
|
|
142
|
+
readonly conflictMessage: (profileName: string, endpoint: string) => string;
|
|
143
|
+
readonly conflictYes: "Yes, switch px to this project";
|
|
144
|
+
readonly conflictNo: "No, leave px as-is";
|
|
145
|
+
readonly created: (profileName: string) => string;
|
|
146
|
+
readonly failed: (detail: string) => string;
|
|
147
|
+
readonly unreadableSettings: (settingsPath: string, detail: string) => string;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* The skills repo, named once: the command we spawn and the commands the copy
|
|
151
|
+
* below tells the user to run by hand have to point at the same place.
|
|
152
|
+
*/
|
|
153
|
+
export declare const SKILLS_SOURCE = "Arize-ai/phoenix";
|
|
154
|
+
/** One copy group per install offer; both share the shape `ToolingOfferCopy`. */
|
|
155
|
+
export declare const TOOLING: {
|
|
156
|
+
readonly cli: {
|
|
157
|
+
readonly message: "Install the px CLI globally? (`px` isn't on your PATH — it lets you query traces from any terminal)";
|
|
158
|
+
readonly yes: "Yes, npm install -g @arizeai/phoenix-cli";
|
|
159
|
+
readonly no: "No thanks";
|
|
160
|
+
readonly installed: "px CLI installed. Try `px --help` in a new shell.";
|
|
161
|
+
readonly failed: "CLI install failed — install later with `npm install -g @arizeai/phoenix-cli`.";
|
|
162
|
+
};
|
|
163
|
+
readonly skills: {
|
|
164
|
+
readonly message: "Install agent skills? (opens a skill picker — query traces, debug failures)";
|
|
165
|
+
readonly yes: "Yes, run npx skills add Arize-ai/phoenix";
|
|
166
|
+
readonly no: "No thanks";
|
|
167
|
+
readonly installed: "Phoenix skills installed. Your coding agent can now query and debug traces.";
|
|
168
|
+
readonly failed: "Skills install failed — install later with `npx skills add Arize-ai/phoenix`.";
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
export declare const DOCS_MCP: {
|
|
172
|
+
readonly message: (agentLabel: string) => string;
|
|
173
|
+
readonly yes: "Yes, connect phoenix-docs (recommended)";
|
|
174
|
+
readonly yesHint: "fastest setup; pulls only the doc sections the agent needs";
|
|
175
|
+
readonly no: "No, download the docs instead";
|
|
176
|
+
readonly noHint: "writes ~100 pages to .px/docs for offline reading";
|
|
177
|
+
/** The decline pair when `--no-docs` means declining downloads nothing. */
|
|
178
|
+
readonly noWithoutDownload: "No, skip it";
|
|
179
|
+
readonly noWithoutDownloadHint: "the docs download is off (--no-docs); the agent reads the docs from the web";
|
|
180
|
+
readonly configured: (files: string[]) => string;
|
|
181
|
+
readonly configuredCli: (agentLabel: string) => string;
|
|
182
|
+
readonly failedFor: (agentLabel: string, reason: string) => string;
|
|
183
|
+
readonly verifyFailed: "the entry did not show up in the agent's own MCP listing after adding it";
|
|
184
|
+
readonly fallback: "The MCP server was not connected — downloading the docs instead.";
|
|
185
|
+
readonly fallbackWithoutDownload: "The MCP server was not connected — the agent will read the docs from the web.";
|
|
186
|
+
/** Printed when an explicit --docs-mcp met a lane with no agent to configure. */
|
|
187
|
+
readonly noAgentLane: "The clipboard and manual lanes have no coding agent to connect the phoenix-docs MCP server to — skipping the offer.";
|
|
188
|
+
readonly unsupported: (agentLabel: string) => string;
|
|
189
|
+
};
|
|
190
|
+
export declare const DOCS_PREFETCH: {
|
|
191
|
+
readonly fetching: "Downloading the Phoenix docs so the agent reads them locally...";
|
|
192
|
+
readonly wrote: (pages: number, outputDir: string) => string;
|
|
193
|
+
readonly failed: (reason: string) => string;
|
|
194
|
+
};
|
|
195
|
+
export declare const HEADLESS: {
|
|
196
|
+
readonly agentRequired: (agentIds: readonly string[]) => string;
|
|
197
|
+
readonly nextSteps: (tracesUrl: string) => string;
|
|
198
|
+
};
|
|
199
|
+
//# sourceMappingURL=copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/setup/copy.ts"],"names":[],"mappings":"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"}
|