poe-code 0.1.26 → 1.0.1-beta.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 +110 -29
- package/dist/bin/poe-claude.js +16 -0
- package/dist/bin/poe-codex.js +16 -0
- package/dist/bin/poe-kimi-cli.js +16 -0
- package/dist/bin/poe-opencode.js +16 -0
- package/dist/cli/binary-aliases.d.ts +7 -0
- package/dist/cli/binary-aliases.js +26 -0
- package/dist/cli/binary-aliases.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +4 -0
- package/dist/cli/bootstrap.js +78 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/command-runner.d.ts +1 -1
- package/dist/cli/command-runner.js +16 -2
- package/dist/cli/command-runner.js.map +1 -1
- package/dist/cli/commands/configure-payload.d.ts +15 -0
- package/dist/cli/commands/configure-payload.js +31 -0
- package/dist/cli/commands/configure-payload.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +4 -3
- package/dist/cli/commands/configure.js +102 -101
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/ensure-isolated-config.d.ts +12 -0
- package/dist/cli/commands/ensure-isolated-config.js +53 -0
- package/dist/cli/commands/ensure-isolated-config.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +9 -0
- package/dist/cli/commands/generate.js +323 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/install.d.ts +4 -0
- package/dist/cli/commands/install.js +40 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/login.js +62 -8
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/{root.d.ts → mcp.d.ts} +1 -1
- package/dist/cli/commands/mcp.js +168 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +16 -11
- package/dist/cli/commands/shared.js +45 -24
- package/dist/cli/commands/shared.js.map +1 -1
- package/dist/cli/commands/spawn.d.ts +14 -4
- package/dist/cli/commands/spawn.js +92 -77
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -4
- package/dist/cli/commands/test.js +111 -16
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/unconfigure.d.ts +7 -0
- package/dist/cli/commands/unconfigure.js +116 -0
- package/dist/cli/commands/unconfigure.js.map +1 -0
- package/dist/cli/commands/version.d.ts +3 -0
- package/dist/cli/commands/version.js +31 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/wrap.d.ts +3 -0
- package/dist/cli/commands/wrap.js +61 -0
- package/dist/cli/commands/wrap.js.map +1 -0
- package/dist/cli/constants.d.ts +23 -9
- package/dist/cli/constants.js +42 -9
- package/dist/cli/constants.js.map +1 -1
- package/dist/cli/container.d.ts +4 -10
- package/dist/cli/container.js +18 -22
- package/dist/cli/container.js.map +1 -1
- package/dist/cli/context.d.ts +9 -13
- package/dist/cli/context.js +45 -152
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/environment.d.ts +2 -0
- package/dist/cli/environment.js +80 -0
- package/dist/cli/environment.js.map +1 -1
- package/dist/cli/error-logger.d.ts +18 -2
- package/dist/cli/error-logger.js +25 -7
- package/dist/cli/error-logger.js.map +1 -1
- package/dist/cli/errors.d.ts +14 -10
- package/dist/cli/errors.js +25 -12
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/exit-signals.d.ts +4 -0
- package/dist/cli/exit-signals.js +8 -0
- package/dist/cli/exit-signals.js.map +1 -0
- package/dist/cli/http.d.ts +1 -0
- package/dist/cli/isolated-env-runner.d.ts +10 -0
- package/dist/cli/isolated-env-runner.js +46 -0
- package/dist/cli/isolated-env-runner.js.map +1 -0
- package/dist/cli/isolated-env.d.ts +22 -0
- package/dist/cli/isolated-env.js +176 -0
- package/dist/cli/isolated-env.js.map +1 -0
- package/dist/cli/logger.d.ts +11 -1
- package/dist/cli/logger.js +101 -16
- package/dist/cli/logger.js.map +1 -1
- package/dist/cli/mcp-output-format.d.ts +2 -0
- package/dist/cli/mcp-output-format.js +22 -0
- package/dist/cli/mcp-output-format.js.map +1 -0
- package/dist/cli/mcp-server.d.ts +21 -0
- package/dist/cli/mcp-server.js +286 -0
- package/dist/cli/mcp-server.js.map +1 -0
- package/dist/cli/options.d.ts +18 -3
- package/dist/cli/options.js +39 -12
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/poe-code-command-runner.d.ts +6 -0
- package/dist/cli/poe-code-command-runner.js +57 -0
- package/dist/cli/poe-code-command-runner.js.map +1 -0
- package/dist/cli/program.js +134 -23
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/prompt-runner.d.ts +10 -0
- package/dist/cli/prompt-runner.js +79 -0
- package/dist/cli/prompt-runner.js.map +1 -0
- package/dist/cli/prompts.d.ts +23 -7
- package/dist/cli/prompts.js +17 -33
- package/dist/cli/prompts.js.map +1 -1
- package/dist/cli/service-registry.d.ts +86 -21
- package/dist/cli/service-registry.js +60 -12
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/cli/ui/service-menu.d.ts +7 -0
- package/dist/cli/ui/service-menu.js +43 -0
- package/dist/cli/ui/service-menu.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +7 -74
- package/dist/index.js.map +1 -1
- package/dist/providers/claude-code.d.ts +13 -0
- package/dist/providers/claude-code.js +136 -0
- package/dist/providers/claude-code.js.map +1 -0
- package/dist/providers/codex.d.ts +17 -0
- package/dist/providers/codex.js +144 -0
- package/dist/providers/codex.js.map +1 -0
- package/dist/providers/create-provider.d.ts +29 -0
- package/dist/providers/create-provider.js +63 -0
- package/dist/providers/create-provider.js.map +1 -0
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.js +5 -10
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/kimi.d.ts +4 -0
- package/dist/providers/kimi.js +123 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/opencode.d.ts +3 -0
- package/dist/providers/opencode.js +119 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/spawn-options.d.ts +12 -0
- package/dist/providers/spawn-options.js +2 -0
- package/dist/providers/spawn-options.js.map +1 -0
- package/dist/sdk/container.d.ts +18 -0
- package/dist/sdk/container.js +127 -0
- package/dist/sdk/container.js.map +1 -0
- package/dist/sdk/credentials.d.ts +9 -0
- package/dist/sdk/credentials.js +35 -0
- package/dist/sdk/credentials.js.map +1 -0
- package/dist/sdk/generate.d.ts +5 -0
- package/dist/sdk/generate.js +97 -0
- package/dist/sdk/generate.js.map +1 -0
- package/dist/sdk/spawn-core.d.ts +23 -0
- package/dist/sdk/spawn-core.js +105 -0
- package/dist/sdk/spawn-core.js.map +1 -0
- package/dist/sdk/spawn.d.ts +23 -0
- package/dist/sdk/spawn.js +41 -0
- package/dist/sdk/spawn.js.map +1 -0
- package/dist/sdk/types.d.ts +38 -0
- package/dist/sdk/types.js +2 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/services/client-instance.d.ts +12 -0
- package/dist/services/client-instance.js +36 -0
- package/dist/services/client-instance.js.map +1 -0
- package/dist/services/credentials.d.ts +13 -0
- package/dist/services/credentials.js +132 -14
- package/dist/services/credentials.js.map +1 -1
- package/dist/services/llm-client.d.ts +22 -0
- package/dist/services/llm-client.js +138 -0
- package/dist/services/llm-client.js.map +1 -0
- package/dist/services/media-download.d.ts +17 -0
- package/dist/services/media-download.js +42 -0
- package/dist/services/media-download.js.map +1 -0
- package/dist/services/model-strategy.d.ts +2 -2
- package/dist/services/model-strategy.js +36 -31
- package/dist/services/model-strategy.js.map +1 -1
- package/dist/services/mutation-events.d.ts +4 -0
- package/dist/services/mutation-events.js +53 -0
- package/dist/services/mutation-events.js.map +1 -0
- package/dist/services/service-install.d.ts +5 -4
- package/dist/services/service-install.js +36 -13
- package/dist/services/service-install.js.map +1 -1
- package/dist/services/version.d.ts +11 -0
- package/dist/services/version.js +28 -0
- package/dist/services/version.js.map +1 -0
- package/dist/templates/codex/config.toml.hbs +3 -3
- package/dist/tools/label-generator.d.ts +11 -0
- package/dist/tools/label-generator.js +78 -0
- package/dist/tools/label-generator.js.map +1 -0
- package/dist/utils/command-checks.d.ts +45 -0
- package/dist/utils/command-checks.js +120 -0
- package/dist/utils/command-checks.js.map +1 -0
- package/dist/utils/dry-run.d.ts +1 -0
- package/dist/utils/dry-run.js +116 -7
- package/dist/utils/dry-run.js.map +1 -1
- package/dist/utils/execution-context.d.ts +40 -0
- package/dist/utils/execution-context.js +128 -0
- package/dist/utils/execution-context.js.map +1 -0
- package/dist/utils/json.js +3 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/templates.d.ts +1 -0
- package/dist/utils/templates.js +3 -4
- package/dist/utils/templates.js.map +1 -1
- package/package.json +54 -46
- package/dist/cli/api-client.d.ts +0 -14
- package/dist/cli/api-client.js +0 -140
- package/dist/cli/api-client.js.map +0 -1
- package/dist/cli/chat.d.ts +0 -32
- package/dist/cli/chat.js +0 -2
- package/dist/cli/chat.js.map +0 -1
- package/dist/cli/commands/agent.d.ts +0 -18
- package/dist/cli/commands/agent.js +0 -84
- package/dist/cli/commands/agent.js.map +0 -1
- package/dist/cli/commands/configure-agents.d.ts +0 -3
- package/dist/cli/commands/configure-agents.js +0 -72
- package/dist/cli/commands/configure-agents.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.js +0 -45
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/interactive.d.ts +0 -3
- package/dist/cli/commands/interactive.js +0 -17
- package/dist/cli/commands/interactive.js.map +0 -1
- package/dist/cli/commands/logout.d.ts +0 -3
- package/dist/cli/commands/logout.js +0 -31
- package/dist/cli/commands/logout.js.map +0 -1
- package/dist/cli/commands/prerequisites.d.ts +0 -3
- package/dist/cli/commands/prerequisites.js +0 -23
- package/dist/cli/commands/prerequisites.js.map +0 -1
- package/dist/cli/commands/query.d.ts +0 -7
- package/dist/cli/commands/query.js +0 -46
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/remove.d.ts +0 -6
- package/dist/cli/commands/remove.js +0 -80
- package/dist/cli/commands/remove.js.map +0 -1
- package/dist/cli/commands/root.js +0 -7
- package/dist/cli/commands/root.js.map +0 -1
- package/dist/cli/commands/spawn-worktree.d.ts +0 -6
- package/dist/cli/commands/spawn-worktree.js +0 -91
- package/dist/cli/commands/spawn-worktree.js.map +0 -1
- package/dist/cli/file-mentions.d.ts +0 -13
- package/dist/cli/file-mentions.js +0 -87
- package/dist/cli/file-mentions.js.map +0 -1
- package/dist/cli/file-picker-state.d.ts +0 -14
- package/dist/cli/file-picker-state.js +0 -23
- package/dist/cli/file-picker-state.js.map +0 -1
- package/dist/cli/interactive-command-runner.d.ts +0 -11
- package/dist/cli/interactive-command-runner.js +0 -142
- package/dist/cli/interactive-command-runner.js.map +0 -1
- package/dist/cli/interactive-launcher.d.ts +0 -2
- package/dist/cli/interactive-launcher.js +0 -404
- package/dist/cli/interactive-launcher.js.map +0 -1
- package/dist/cli/interactive-tasks.d.ts +0 -7
- package/dist/cli/interactive-tasks.js +0 -199
- package/dist/cli/interactive-tasks.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -19
- package/dist/cli/interactive.js +0 -479
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/markdown-renderer.d.ts +0 -27
- package/dist/cli/markdown-renderer.js +0 -178
- package/dist/cli/markdown-renderer.js.map +0 -1
- package/dist/cli/markdown-renderer.test.d.ts +0 -1
- package/dist/cli/markdown-renderer.test.js +0 -105
- package/dist/cli/markdown-renderer.test.js.map +0 -1
- package/dist/cli/telemetry.d.ts +0 -15
- package/dist/cli/telemetry.js +0 -45
- package/dist/cli/telemetry.js.map +0 -1
- package/dist/commands/init.d.ts +0 -9
- package/dist/commands/init.js +0 -43
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/publish-placeholder.d.ts +0 -8
- package/dist/commands/publish-placeholder.js +0 -50
- package/dist/commands/publish-placeholder.js.map +0 -1
- package/dist/commands/spawn-worktree.d.ts +0 -25
- package/dist/commands/spawn-worktree.js +0 -139
- package/dist/commands/spawn-worktree.js.map +0 -1
- package/dist/providers/claude-code-adapter.d.ts +0 -20
- package/dist/providers/claude-code-adapter.js +0 -48
- package/dist/providers/claude-code-adapter.js.map +0 -1
- package/dist/providers/codex-adapter.d.ts +0 -19
- package/dist/providers/codex-adapter.js +0 -49
- package/dist/providers/codex-adapter.js.map +0 -1
- package/dist/providers/opencode-adapter.d.ts +0 -18
- package/dist/providers/opencode-adapter.js +0 -45
- package/dist/providers/opencode-adapter.js.map +0 -1
- package/dist/providers/roo-code-adapter.d.ts +0 -19
- package/dist/providers/roo-code-adapter.js +0 -70
- package/dist/providers/roo-code-adapter.js.map +0 -1
- package/dist/services/agent-config-manager.d.ts +0 -32
- package/dist/services/agent-config-manager.js +0 -130
- package/dist/services/agent-config-manager.js.map +0 -1
- package/dist/services/agent-registry.d.ts +0 -27
- package/dist/services/agent-registry.js +0 -89
- package/dist/services/agent-registry.js.map +0 -1
- package/dist/services/agent-session.d.ts +0 -24
- package/dist/services/agent-session.js +0 -107
- package/dist/services/agent-session.js.map +0 -1
- package/dist/services/agent-task-registry.d.ts +0 -131
- package/dist/services/agent-task-registry.js +0 -491
- package/dist/services/agent-task-registry.js.map +0 -1
- package/dist/services/chat.d.ts +0 -94
- package/dist/services/chat.js +0 -241
- package/dist/services/chat.js.map +0 -1
- package/dist/services/claude-code.d.ts +0 -28
- package/dist/services/claude-code.js +0 -155
- package/dist/services/claude-code.js.map +0 -1
- package/dist/services/codex.d.ts +0 -27
- package/dist/services/codex.js +0 -231
- package/dist/services/codex.js.map +0 -1
- package/dist/services/mcp-client.d.ts +0 -38
- package/dist/services/mcp-client.js +0 -170
- package/dist/services/mcp-client.js.map +0 -1
- package/dist/services/mcp-manager.d.ts +0 -28
- package/dist/services/mcp-manager.js +0 -157
- package/dist/services/mcp-manager.js.map +0 -1
- package/dist/services/opencode.d.ts +0 -25
- package/dist/services/opencode.js +0 -161
- package/dist/services/opencode.js.map +0 -1
- package/dist/services/poe-code.d.ts +0 -7
- package/dist/services/poe-code.js +0 -5
- package/dist/services/poe-code.js.map +0 -1
- package/dist/services/roo-code.d.ts +0 -22
- package/dist/services/roo-code.js +0 -134
- package/dist/services/roo-code.js.map +0 -1
- package/dist/services/service-manifest.d.ts +0 -122
- package/dist/services/service-manifest.js +0 -368
- package/dist/services/service-manifest.js.map +0 -1
- package/dist/services/task-logger.d.ts +0 -24
- package/dist/services/task-logger.js +0 -73
- package/dist/services/task-logger.js.map +0 -1
- package/dist/services/task-runner.d.ts +0 -19
- package/dist/services/task-runner.js +0 -157
- package/dist/services/task-runner.js.map +0 -1
- package/dist/services/tools.d.ts +0 -76
- package/dist/services/tools.js +0 -870
- package/dist/services/tools.js.map +0 -1
- package/dist/templates/claude-code/anthropic_key.sh.hbs +0 -2
- package/dist/utils/e2e-flags.d.ts +0 -1
- package/dist/utils/e2e-flags.js +0 -9
- package/dist/utils/e2e-flags.js.map +0 -1
- package/dist/utils/prerequisites.d.ts +0 -41
- package/dist/utils/prerequisites.js +0 -92
- package/dist/utils/prerequisites.js.map +0 -1
- package/dist/utils/toml.d.ts +0 -8
- package/dist/utils/toml.js +0 -30
- package/dist/utils/toml.js.map +0 -1
- package/dist/utils/worktree.d.ts +0 -40
- package/dist/utils/worktree.js +0 -179
- package/dist/utils/worktree.js.map +0 -1
- package/shared/conversation-layout.cjs +0 -11
- package/shared/conversation-layout.d.ts +0 -7
- package/shared/conversation-layout.js +0 -11
- package/shared/package.json +0 -13
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { intro, outro, spinner } from "@poe-code/design-system";
|
|
3
|
+
import { text } from "@poe-code/design-system";
|
|
4
|
+
import { DEFAULT_TEXT_MODEL, DEFAULT_IMAGE_BOT, DEFAULT_AUDIO_BOT, DEFAULT_VIDEO_BOT } from "../constants.js";
|
|
5
|
+
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
6
|
+
import { getGlobalClient, initializeClient } from "../../services/client-instance.js";
|
|
7
|
+
import { downloadToFile, MediaDownloadError } from "../../services/media-download.js";
|
|
8
|
+
import { ValidationError } from "../errors.js";
|
|
9
|
+
const MODEL_ENV_KEYS = {
|
|
10
|
+
text: "POE_TEXT_MODEL",
|
|
11
|
+
image: "POE_IMAGE_MODEL",
|
|
12
|
+
video: "POE_VIDEO_MODEL",
|
|
13
|
+
audio: "POE_AUDIO_MODEL"
|
|
14
|
+
};
|
|
15
|
+
const DEFAULT_MODELS = {
|
|
16
|
+
text: DEFAULT_TEXT_MODEL,
|
|
17
|
+
image: DEFAULT_IMAGE_BOT,
|
|
18
|
+
video: DEFAULT_VIDEO_BOT,
|
|
19
|
+
audio: DEFAULT_AUDIO_BOT
|
|
20
|
+
};
|
|
21
|
+
export function registerGenerateCommand(program, container) {
|
|
22
|
+
const generate = program
|
|
23
|
+
.command("generate")
|
|
24
|
+
.description("Generate content via Poe API")
|
|
25
|
+
.option("--model <model>", `Model identifier (default: ${DEFAULT_TEXT_MODEL})`)
|
|
26
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
27
|
+
.option("-o, --output <path>", "Output file path (media only)")
|
|
28
|
+
.argument("[prompt]", "Generation prompt (for text without subcommand)")
|
|
29
|
+
.action(async function (promptArg) {
|
|
30
|
+
const flags = resolveCommandFlags(program);
|
|
31
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
32
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: true });
|
|
33
|
+
const opts = resolveGenerateOptions(this);
|
|
34
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
35
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
36
|
+
if (flags.dryRun) {
|
|
37
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
intro(text.intro("generate"));
|
|
41
|
+
const client = await resolveClient(container);
|
|
42
|
+
const response = await withSpinner({
|
|
43
|
+
message: `Generating with ${model}...`,
|
|
44
|
+
fn: () => client.text({ model, prompt, params }),
|
|
45
|
+
stopMessage: () => model,
|
|
46
|
+
subtext: (r) => r.content
|
|
47
|
+
});
|
|
48
|
+
if (!response.content) {
|
|
49
|
+
throw new ValidationError("No response from LLM");
|
|
50
|
+
}
|
|
51
|
+
outro("");
|
|
52
|
+
});
|
|
53
|
+
generate
|
|
54
|
+
.command("text")
|
|
55
|
+
.description(`Generate text (default model: ${DEFAULT_TEXT_MODEL})`)
|
|
56
|
+
.option("--model <model>", `Model identifier (default: ${DEFAULT_TEXT_MODEL})`)
|
|
57
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
58
|
+
.argument("[prompt]", "Generation prompt")
|
|
59
|
+
.action(async function (promptArg) {
|
|
60
|
+
const flags = resolveCommandFlags(program);
|
|
61
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
62
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: false });
|
|
63
|
+
const opts = resolveGenerateOptions(this);
|
|
64
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
65
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
66
|
+
if (flags.dryRun) {
|
|
67
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
intro(text.intro("generate text"));
|
|
71
|
+
const client = await resolveClient(container);
|
|
72
|
+
const response = await withSpinner({
|
|
73
|
+
message: `Generating with ${model}...`,
|
|
74
|
+
fn: () => client.text({ model, prompt, params }),
|
|
75
|
+
stopMessage: () => model,
|
|
76
|
+
subtext: (r) => r.content
|
|
77
|
+
});
|
|
78
|
+
if (!response.content) {
|
|
79
|
+
throw new ValidationError("No response from LLM");
|
|
80
|
+
}
|
|
81
|
+
outro("");
|
|
82
|
+
});
|
|
83
|
+
registerMediaSubcommand(generate, program, container, "image");
|
|
84
|
+
registerMediaSubcommand(generate, program, container, "video");
|
|
85
|
+
registerMediaSubcommand(generate, program, container, "audio");
|
|
86
|
+
}
|
|
87
|
+
function registerMediaSubcommand(generate, program, container, type) {
|
|
88
|
+
const defaultModel = DEFAULT_MODELS[type];
|
|
89
|
+
generate
|
|
90
|
+
.command(type)
|
|
91
|
+
.description(`Generate ${type} (default model: ${defaultModel})`)
|
|
92
|
+
.option("--model <model>", `Model identifier (default: ${defaultModel})`)
|
|
93
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
94
|
+
.option("-o, --output <path>", "Output file path")
|
|
95
|
+
.argument("[prompt]", "Generation prompt")
|
|
96
|
+
.action(async function (promptArg) {
|
|
97
|
+
const flags = resolveCommandFlags(program);
|
|
98
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
99
|
+
const prompt = ensurePrompt(promptArg, { type, isDefault: false });
|
|
100
|
+
const opts = resolveGenerateOptions(this);
|
|
101
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
102
|
+
const model = resolveModel(type, opts, container.env.variables);
|
|
103
|
+
if (flags.dryRun) {
|
|
104
|
+
resources.logger.dryRun(`Dry run: would generate ${type} with model ${model} and prompt (${prompt.length} chars)`);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
intro(text.intro(`generate ${type}`));
|
|
108
|
+
const client = await resolveClient(container);
|
|
109
|
+
const saved = await withSpinner({
|
|
110
|
+
message: `Generating ${type} with ${model}...`,
|
|
111
|
+
fn: async () => {
|
|
112
|
+
const response = await client.media(type, { model, prompt, params });
|
|
113
|
+
if (!response.url) {
|
|
114
|
+
throw new ValidationError(buildMissingMediaMessage(type, model, response.content));
|
|
115
|
+
}
|
|
116
|
+
const mimeType = response.mimeType ?? getDefaultMimeType(type);
|
|
117
|
+
const filename = opts.output ?? generateFilename(type, mimeType);
|
|
118
|
+
const resolved = resolveOutputPath(filename, container.env.cwd);
|
|
119
|
+
try {
|
|
120
|
+
await downloadToFile({
|
|
121
|
+
url: response.url,
|
|
122
|
+
outputPath: resolved.path,
|
|
123
|
+
fs: container.fs
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (error instanceof MediaDownloadError) {
|
|
128
|
+
if (error.kind === "write") {
|
|
129
|
+
throw new ValidationError(`Cannot write to "${resolved.label}". Check the path exists and is writable.`);
|
|
130
|
+
}
|
|
131
|
+
throw new ValidationError(`Failed to download ${type} from URL.\nThe file may no longer be available or the URL may have expired.`);
|
|
132
|
+
}
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
return resolved;
|
|
136
|
+
},
|
|
137
|
+
stopMessage: () => `Generated ${type}`
|
|
138
|
+
});
|
|
139
|
+
outro(`Saved ${saved.label}`);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
export function parseParams(params) {
|
|
143
|
+
const result = {};
|
|
144
|
+
for (const param of params) {
|
|
145
|
+
const eqIndex = param.indexOf("=");
|
|
146
|
+
if (eqIndex === -1) {
|
|
147
|
+
throw new ValidationError(`Invalid param format: "${param}". Expected key=value`);
|
|
148
|
+
}
|
|
149
|
+
const key = param.slice(0, eqIndex);
|
|
150
|
+
const value = param.slice(eqIndex + 1);
|
|
151
|
+
result[key] = value;
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
function normalizeParamList(value) {
|
|
156
|
+
if (Array.isArray(value)) {
|
|
157
|
+
return value;
|
|
158
|
+
}
|
|
159
|
+
if (typeof value === "string") {
|
|
160
|
+
return [value];
|
|
161
|
+
}
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
function resolveGenerateOptions(command) {
|
|
165
|
+
const current = command.opts();
|
|
166
|
+
const parent = command.parent?.opts() ?? {};
|
|
167
|
+
return {
|
|
168
|
+
model: current.model ?? parent.model,
|
|
169
|
+
param: mergeParamValues(current.param, parent.param),
|
|
170
|
+
output: current.output ?? parent.output
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function mergeParamValues(current, parent) {
|
|
174
|
+
const currentList = normalizeParamList(current);
|
|
175
|
+
const parentList = normalizeParamList(parent);
|
|
176
|
+
if (currentList.length === 0 && parentList.length === 0) {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
return [...parentList, ...currentList];
|
|
180
|
+
}
|
|
181
|
+
function collectParam(value, previous) {
|
|
182
|
+
const list = Array.isArray(previous) ? [...previous] : [];
|
|
183
|
+
list.push(value);
|
|
184
|
+
return list;
|
|
185
|
+
}
|
|
186
|
+
async function withSpinner(options) {
|
|
187
|
+
const { message, fn, stopMessage, subtext } = options;
|
|
188
|
+
const noSpinner = process.env.POE_NO_SPINNER === "1";
|
|
189
|
+
const isTTY = process.stdout.isTTY;
|
|
190
|
+
if (noSpinner || !isTTY) {
|
|
191
|
+
const result = await fn();
|
|
192
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
193
|
+
if (msg) {
|
|
194
|
+
process.stdout.write(`\x1b[32m◆\x1b[0m ${msg}\n`);
|
|
195
|
+
}
|
|
196
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
197
|
+
if (sub) {
|
|
198
|
+
const lines = sub.split("\n");
|
|
199
|
+
for (const line of lines) {
|
|
200
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
const s = spinner();
|
|
206
|
+
s.start(message);
|
|
207
|
+
try {
|
|
208
|
+
const result = await fn();
|
|
209
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
210
|
+
s.stop(msg);
|
|
211
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
212
|
+
if (sub) {
|
|
213
|
+
const lines = sub.split("\n");
|
|
214
|
+
for (const line of lines) {
|
|
215
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
s.stop("", 1);
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function resolveClient(container) {
|
|
226
|
+
try {
|
|
227
|
+
return getGlobalClient();
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
const apiBaseUrl = resolveApiBaseUrl(container);
|
|
231
|
+
await initializeClient({
|
|
232
|
+
fs: container.fs,
|
|
233
|
+
credentialsPath: container.env.credentialsPath,
|
|
234
|
+
baseUrl: apiBaseUrl,
|
|
235
|
+
httpClient: container.httpClient
|
|
236
|
+
});
|
|
237
|
+
return getGlobalClient();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function resolveApiBaseUrl(container) {
|
|
241
|
+
const override = container.env.getVariable("POE_API_BASE_URL");
|
|
242
|
+
if (override && override.trim().length > 0) {
|
|
243
|
+
return override.trim();
|
|
244
|
+
}
|
|
245
|
+
return container.env.poeApiBaseUrl;
|
|
246
|
+
}
|
|
247
|
+
function resolveModel(type, options, variables) {
|
|
248
|
+
if (options.model) {
|
|
249
|
+
return options.model;
|
|
250
|
+
}
|
|
251
|
+
const envKey = MODEL_ENV_KEYS[type];
|
|
252
|
+
const envModel = normalizeEnvModel(variables ? variables[envKey] : undefined);
|
|
253
|
+
if (envModel) {
|
|
254
|
+
return envModel;
|
|
255
|
+
}
|
|
256
|
+
return DEFAULT_MODELS[type];
|
|
257
|
+
}
|
|
258
|
+
function normalizeEnvModel(value) {
|
|
259
|
+
if (typeof value !== "string") {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
const trimmed = value.trim();
|
|
263
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
264
|
+
}
|
|
265
|
+
function buildMissingMediaMessage(type, model, responseContent) {
|
|
266
|
+
const article = type === "video" ? "a" : "an";
|
|
267
|
+
const base = (`The model "${model}" did not return ${article} ${type}.` +
|
|
268
|
+
`\nThis model may not support ${type} generation. Try using a different model with --model.`);
|
|
269
|
+
const trimmed = responseContent?.trim();
|
|
270
|
+
if (trimmed && trimmed.length > 0) {
|
|
271
|
+
return `${base}\nResponse: ${trimmed}`;
|
|
272
|
+
}
|
|
273
|
+
return base;
|
|
274
|
+
}
|
|
275
|
+
function ensurePrompt(prompt, options) {
|
|
276
|
+
if (prompt && prompt.length > 0) {
|
|
277
|
+
return prompt;
|
|
278
|
+
}
|
|
279
|
+
const usage = options.isDefault
|
|
280
|
+
? "poe-code generate \"your prompt\""
|
|
281
|
+
: `poe-code generate ${options.type} "your prompt"`;
|
|
282
|
+
throw new ValidationError(`No prompt provided. Usage: ${usage}`);
|
|
283
|
+
}
|
|
284
|
+
function generateFilename(type, mimeType) {
|
|
285
|
+
const timestamp = Date.now();
|
|
286
|
+
const ext = mimeTypeToExt(mimeType);
|
|
287
|
+
return `${type}-${timestamp}.${ext}`;
|
|
288
|
+
}
|
|
289
|
+
function mimeTypeToExt(mimeType) {
|
|
290
|
+
const known = {
|
|
291
|
+
"image/png": "png",
|
|
292
|
+
"video/mp4": "mp4",
|
|
293
|
+
"audio/mp3": "mp3",
|
|
294
|
+
"audio/mpeg": "mp3"
|
|
295
|
+
};
|
|
296
|
+
const mapped = known[mimeType];
|
|
297
|
+
if (mapped) {
|
|
298
|
+
return mapped;
|
|
299
|
+
}
|
|
300
|
+
const slashIndex = mimeType.indexOf("/");
|
|
301
|
+
if (slashIndex === -1 || slashIndex === mimeType.length - 1) {
|
|
302
|
+
return "bin";
|
|
303
|
+
}
|
|
304
|
+
return mimeType.slice(slashIndex + 1);
|
|
305
|
+
}
|
|
306
|
+
function getDefaultMimeType(type) {
|
|
307
|
+
const defaults = {
|
|
308
|
+
image: "image/png",
|
|
309
|
+
video: "video/mp4",
|
|
310
|
+
audio: "audio/mp3"
|
|
311
|
+
};
|
|
312
|
+
return defaults[type];
|
|
313
|
+
}
|
|
314
|
+
function resolveOutputPath(filename, cwd) {
|
|
315
|
+
if (path.isAbsolute(filename)) {
|
|
316
|
+
return { path: filename, label: filename };
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
path: path.join(cwd, filename),
|
|
320
|
+
label: `./${filename}`
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliContainer } from "../container.js";
|
|
3
|
+
export declare function registerInstallCommand(program: Command, container: CliContainer): Command;
|
|
4
|
+
export declare function executeInstall(program: Command, container: CliContainer, service: string): Promise<void>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
|
|
2
|
+
import { resolveServiceArgument } from "./configure.js";
|
|
3
|
+
export function registerInstallCommand(program, container) {
|
|
4
|
+
const serviceNames = container.registry
|
|
5
|
+
.list()
|
|
6
|
+
.filter((service) => typeof service.install === "function")
|
|
7
|
+
.map((service) => service.name);
|
|
8
|
+
const serviceDescription = `Agent to install${formatServiceList(serviceNames)}`;
|
|
9
|
+
return program
|
|
10
|
+
.command("install")
|
|
11
|
+
.description("Install tooling for a configured agent.")
|
|
12
|
+
.argument("[agent]", serviceDescription)
|
|
13
|
+
.action(async (service) => {
|
|
14
|
+
const resolved = await resolveServiceArgument(program, container, service, { action: "install" });
|
|
15
|
+
await executeInstall(program, container, resolved);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export async function executeInstall(program, container, service) {
|
|
19
|
+
const adapter = resolveServiceAdapter(container, service);
|
|
20
|
+
const canonicalService = adapter.name;
|
|
21
|
+
const flags = resolveCommandFlags(program);
|
|
22
|
+
const resources = createExecutionResources(container, flags, `install:${canonicalService}`);
|
|
23
|
+
resources.logger.intro(`install ${canonicalService}`);
|
|
24
|
+
const providerContext = buildProviderContext(container, adapter, resources);
|
|
25
|
+
await container.registry.invoke(canonicalService, "install", async (entry) => {
|
|
26
|
+
if (!entry.install) {
|
|
27
|
+
throw new Error(`Agent "${canonicalService}" does not support install.`);
|
|
28
|
+
}
|
|
29
|
+
await entry.install(providerContext);
|
|
30
|
+
});
|
|
31
|
+
const dryMessage = canonicalService === "claude-code"
|
|
32
|
+
? `${adapter.label} install (dry run)`
|
|
33
|
+
: `Dry run: would install ${adapter.label}.`;
|
|
34
|
+
resources.context.complete({
|
|
35
|
+
success: `Installed ${adapter.label}.`,
|
|
36
|
+
dry: dryMessage
|
|
37
|
+
});
|
|
38
|
+
resources.context.finalize();
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ;SACpC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC;SAC1D,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,kBAAkB,GACtB,mBAAmB,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IACvD,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CACP,SAAS,EACT,kBAAkB,CACnB;SACA,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,OAAO,EACP,SAAS,EACT,OAAO,EACP,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAC;QACF,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAgB,EAChB,SAAuB,EACvB,OAAe;IAEf,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,WAAW,gBAAgB,EAAE,CAC9B,CAAC;IAEF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,gBAAgB,EAAE,CAAC,CAAC;IAEtD,MAAM,eAAe,GAAG,oBAAoB,CAC1C,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;IAEF,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,UAAU,gBAAgB,6BAA6B,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GACd,gBAAgB,KAAK,aAAa;QAChC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,oBAAoB;QACtC,CAAC,CAAC,0BAA0B,OAAO,CAAC,KAAK,GAAG,CAAC;IAEjD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,OAAO,EAAE,aAAa,OAAO,CAAC,KAAK,GAAG;QACtC,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
2
|
-
import { saveCredentials } from "../../services/credentials.js";
|
|
1
|
+
import { buildProviderContext, createExecutionResources, resolveCommandFlags, applyIsolatedConfiguration } from "./shared.js";
|
|
2
|
+
import { loadConfiguredServices, saveCredentials } from "../../services/credentials.js";
|
|
3
3
|
import { ValidationError } from "../errors.js";
|
|
4
|
+
import { combineMutationObservers, createMutationReporter } from "../../services/mutation-events.js";
|
|
4
5
|
export function registerLoginCommand(program, container) {
|
|
5
6
|
program
|
|
6
7
|
.command("login")
|
|
@@ -9,23 +10,35 @@ export function registerLoginCommand(program, container) {
|
|
|
9
10
|
.action(async (options) => {
|
|
10
11
|
const flags = resolveCommandFlags(program);
|
|
11
12
|
const resources = createExecutionResources(container, flags, "login");
|
|
13
|
+
resources.logger.intro("login");
|
|
12
14
|
try {
|
|
13
|
-
const
|
|
14
|
-
const normalized = container.options.normalizeApiKey(
|
|
15
|
+
const input = await resolveApiKeyInput(container, options);
|
|
16
|
+
const normalized = container.options.normalizeApiKey(input);
|
|
17
|
+
const configuredServices = await loadConfiguredServices({
|
|
18
|
+
fs: container.fs,
|
|
19
|
+
filePath: container.env.credentialsPath
|
|
20
|
+
});
|
|
15
21
|
await saveCredentials({
|
|
16
22
|
fs: resources.context.fs,
|
|
17
23
|
filePath: container.env.credentialsPath,
|
|
18
24
|
apiKey: normalized
|
|
19
25
|
});
|
|
26
|
+
await reconfigureServices({
|
|
27
|
+
program,
|
|
28
|
+
container,
|
|
29
|
+
apiKey: normalized,
|
|
30
|
+
configuredServices
|
|
31
|
+
});
|
|
20
32
|
resources.context.complete({
|
|
21
33
|
success: `Poe API key stored at ${container.env.credentialsPath}.`,
|
|
22
34
|
dry: `Dry run: would store Poe API key at ${container.env.credentialsPath}.`
|
|
23
35
|
});
|
|
36
|
+
resources.context.finalize();
|
|
24
37
|
}
|
|
25
38
|
catch (error) {
|
|
26
39
|
if (error instanceof Error) {
|
|
27
40
|
resources.logger.logException(error, "login command", {
|
|
28
|
-
operation: "
|
|
41
|
+
operation: "login",
|
|
29
42
|
credentialsPath: container.env.credentialsPath
|
|
30
43
|
});
|
|
31
44
|
}
|
|
@@ -39,13 +52,54 @@ async function resolveApiKeyInput(container, options) {
|
|
|
39
52
|
}
|
|
40
53
|
const descriptor = container.promptLibrary.loginApiKey();
|
|
41
54
|
const response = await container.prompts(descriptor);
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
55
|
+
const value = response[descriptor.name];
|
|
56
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
44
57
|
throw new ValidationError("POE API key is required.", {
|
|
45
58
|
operation: "login",
|
|
46
59
|
field: "apiKey"
|
|
47
60
|
});
|
|
48
61
|
}
|
|
49
|
-
return
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
async function reconfigureServices(input) {
|
|
65
|
+
const { program, container, apiKey, configuredServices } = input;
|
|
66
|
+
const serviceNames = Object.keys(configuredServices);
|
|
67
|
+
for (const serviceName of serviceNames) {
|
|
68
|
+
const adapter = container.registry.get(serviceName);
|
|
69
|
+
if (!adapter) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const flags = resolveCommandFlags(program);
|
|
73
|
+
const resources = createExecutionResources(container, flags, `login:reconfigure:${serviceName}`);
|
|
74
|
+
const providerContext = buildProviderContext(container, adapter, resources);
|
|
75
|
+
const payload = {
|
|
76
|
+
env: container.env,
|
|
77
|
+
apiKey
|
|
78
|
+
};
|
|
79
|
+
const mutationLogger = createMutationReporter(resources.logger);
|
|
80
|
+
const observers = combineMutationObservers(mutationLogger);
|
|
81
|
+
await container.registry.invoke(serviceName, "configure", async (entry) => {
|
|
82
|
+
if (!entry.configure) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
await entry.configure({
|
|
86
|
+
fs: providerContext.command.fs,
|
|
87
|
+
env: providerContext.env,
|
|
88
|
+
command: providerContext.command,
|
|
89
|
+
options: payload
|
|
90
|
+
}, observers ? { observers } : undefined);
|
|
91
|
+
const isolated = adapter.isolatedEnv;
|
|
92
|
+
if (isolated && isolated.requiresConfig !== false) {
|
|
93
|
+
await applyIsolatedConfiguration({
|
|
94
|
+
adapter: entry,
|
|
95
|
+
providerContext,
|
|
96
|
+
payload,
|
|
97
|
+
isolated,
|
|
98
|
+
providerName: adapter.name,
|
|
99
|
+
observers
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
50
104
|
}
|
|
51
105
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { CliContainer } from "../container.js";
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function registerMcpCommand(program: Command, container: CliContainer): void;
|