poe-code 3.0.29 → 3.0.31
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 +2 -2
- package/dist/bin/poe-claude.js +23 -0
- package/dist/bin/poe-codex.js +23 -0
- package/dist/bin/poe-kimi-cli.js +23 -0
- package/dist/bin/poe-opencode.js +23 -0
- package/dist/bin.cjs +9 -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-not-found.d.ts +8 -0
- package/dist/cli/command-not-found.js +34 -0
- package/dist/cli/command-not-found.js.map +1 -0
- 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 +12 -0
- package/dist/cli/commands/configure.js +151 -0
- package/dist/cli/commands/configure.js.map +1 -0
- 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 +322 -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.d.ts +6 -0
- package/dist/cli/commands/login.js +105 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.js +178 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/models.d.ts +3 -0
- package/dist/cli/commands/models.js +183 -0
- package/dist/cli/commands/models.js.map +1 -0
- package/dist/cli/commands/ralph-worktree.d.ts +3 -0
- package/dist/cli/commands/ralph-worktree.js +73 -0
- package/dist/cli/commands/ralph-worktree.js.map +1 -0
- package/dist/cli/commands/ralph.d.ts +3 -0
- package/dist/cli/commands/ralph.js +424 -0
- package/dist/cli/commands/ralph.js.map +1 -0
- package/dist/cli/commands/shared.d.ts +29 -0
- package/dist/cli/commands/shared.js +82 -0
- package/dist/cli/commands/shared.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +3 -0
- package/dist/cli/commands/skill.js +242 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/spawn.d.ts +17 -0
- package/dist/cli/commands/spawn.js +226 -0
- package/dist/cli/commands/spawn.js.map +1 -0
- package/dist/cli/commands/test.d.ts +8 -0
- package/dist/cli/commands/test.js +124 -0
- package/dist/cli/commands/test.js.map +1 -0
- 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/usage.d.ts +3 -0
- package/dist/cli/commands/usage.js +186 -0
- package/dist/cli/commands/usage.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 +24 -0
- package/dist/cli/constants.js +44 -0
- package/dist/cli/constants.js.map +1 -0
- package/dist/cli/container.d.ts +42 -0
- package/dist/cli/container.js +90 -0
- package/dist/cli/container.js.map +1 -0
- package/dist/cli/context.d.ts +33 -0
- package/dist/cli/context.js +91 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/environment.d.ts +21 -0
- package/dist/cli/environment.js +106 -0
- package/dist/cli/environment.js.map +1 -0
- package/dist/cli/error-logger.d.ts +62 -0
- package/dist/cli/error-logger.js +155 -0
- package/dist/cli/error-logger.js.map +1 -0
- package/dist/cli/errors.d.ts +95 -0
- package/dist/cli/errors.js +141 -0
- package/dist/cli/errors.js.map +1 -0
- 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 +12 -0
- package/dist/cli/http.js +2 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/isolated-env-runner.d.ts +10 -0
- package/dist/cli/isolated-env-runner.js +50 -0
- package/dist/cli/isolated-env-runner.js.map +1 -0
- package/dist/cli/isolated-env.d.ts +24 -0
- package/dist/cli/isolated-env.js +210 -0
- package/dist/cli/isolated-env.js.map +1 -0
- package/dist/cli/logger.d.ts +36 -0
- package/dist/cli/logger.js +191 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/mcp-output-format.d.ts +2 -0
- package/dist/cli/mcp-output-format.js +27 -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 +321 -0
- package/dist/cli/mcp-server.js.map +1 -0
- package/dist/cli/options.d.ts +45 -0
- package/dist/cli/options.js +111 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/poe-code-command-runner.d.ts +6 -0
- package/dist/cli/poe-code-command-runner.js +63 -0
- package/dist/cli/poe-code-command-runner.js.map +1 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.js +249 -0
- package/dist/cli/program.js.map +1 -0
- 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 +39 -0
- package/dist/cli/prompts.js +42 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/service-registry.d.ts +108 -0
- package/dist/cli/service-registry.js +83 -0
- package/dist/cli/service-registry.js.map +1 -0
- package/dist/cli/types.d.ts +2 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- 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 +8 -0
- package/dist/index.js +36812 -0
- package/dist/index.js.map +7 -0
- package/dist/providers/claude-code.d.ts +13 -0
- package/dist/providers/claude-code.js +143 -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 +78 -0
- package/dist/providers/create-provider.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- 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 +13 -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 +31 -0
- package/dist/sdk/spawn.js +109 -0
- package/dist/sdk/spawn.js.map +1 -0
- package/dist/sdk/types.d.ts +44 -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 +24 -0
- package/dist/services/credentials.js +157 -0
- package/dist/services/credentials.js.map +1 -0
- 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 +99 -0
- package/dist/services/model-strategy.js +187 -0
- package/dist/services/model-strategy.js.map +1 -0
- 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 +22 -0
- package/dist/services/service-install.js +70 -0
- package/dist/services/service-install.js.map +1 -0
- 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/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/backup.d.ts +5 -0
- package/dist/utils/backup.js +56 -0
- package/dist/utils/backup.js.map +1 -0
- package/dist/utils/cli-settings-merge.d.ts +22 -0
- package/dist/utils/cli-settings-merge.js +56 -0
- package/dist/utils/cli-settings-merge.js.map +1 -0
- package/dist/utils/command-checks.d.ts +36 -0
- package/dist/utils/command-checks.js +120 -0
- package/dist/utils/command-checks.js.map +1 -0
- package/dist/utils/command-line.d.ts +1 -0
- package/dist/utils/command-line.js +54 -0
- package/dist/utils/command-line.js.map +1 -0
- package/dist/utils/dry-run.d.ts +39 -0
- package/dist/utils/dry-run.js +315 -0
- package/dist/utils/dry-run.js.map +1 -0
- package/dist/utils/execution-context.d.ts +48 -0
- package/dist/utils/execution-context.js +151 -0
- package/dist/utils/execution-context.js.map +1 -0
- package/dist/utils/file-system.d.ts +21 -0
- package/dist/utils/file-system.js +2 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +45 -0
- package/dist/utils/json.js.map +1 -0
- package/package.json +5 -2
- package/packages/tiny-mcp-test-server/dist/index.js +47 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { intro, outro, spinner } from "@poe-code/design-system";
|
|
3
|
+
import { DEFAULT_TEXT_MODEL, DEFAULT_IMAGE_BOT, DEFAULT_AUDIO_BOT, DEFAULT_VIDEO_BOT } from "../constants.js";
|
|
4
|
+
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
5
|
+
import { getGlobalClient, initializeClient } from "../../services/client-instance.js";
|
|
6
|
+
import { downloadToFile, MediaDownloadError } from "../../services/media-download.js";
|
|
7
|
+
import { ValidationError } from "../errors.js";
|
|
8
|
+
const MODEL_ENV_KEYS = {
|
|
9
|
+
text: "POE_TEXT_MODEL",
|
|
10
|
+
image: "POE_IMAGE_MODEL",
|
|
11
|
+
video: "POE_VIDEO_MODEL",
|
|
12
|
+
audio: "POE_AUDIO_MODEL"
|
|
13
|
+
};
|
|
14
|
+
const DEFAULT_MODELS = {
|
|
15
|
+
text: DEFAULT_TEXT_MODEL,
|
|
16
|
+
image: DEFAULT_IMAGE_BOT,
|
|
17
|
+
video: DEFAULT_VIDEO_BOT,
|
|
18
|
+
audio: DEFAULT_AUDIO_BOT
|
|
19
|
+
};
|
|
20
|
+
export function registerGenerateCommand(program, container) {
|
|
21
|
+
const generate = program
|
|
22
|
+
.command("generate")
|
|
23
|
+
.description("Generate content via Poe API")
|
|
24
|
+
.option("--model <model>", `Model identifier (default: ${DEFAULT_TEXT_MODEL})`)
|
|
25
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
26
|
+
.option("-o, --output <path>", "Output file path (media only)")
|
|
27
|
+
.argument("[prompt]", "Generation prompt (for text without subcommand)")
|
|
28
|
+
.action(async function (promptArg) {
|
|
29
|
+
const flags = resolveCommandFlags(program);
|
|
30
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
31
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: true });
|
|
32
|
+
const opts = resolveGenerateOptions(this);
|
|
33
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
34
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
35
|
+
if (flags.dryRun) {
|
|
36
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
intro("generate");
|
|
40
|
+
const client = await resolveClient(container);
|
|
41
|
+
const response = await withSpinner({
|
|
42
|
+
message: `Generating with ${model}...`,
|
|
43
|
+
fn: () => client.text({ model, prompt, params }),
|
|
44
|
+
stopMessage: () => model,
|
|
45
|
+
subtext: (r) => r.content
|
|
46
|
+
});
|
|
47
|
+
if (!response.content) {
|
|
48
|
+
throw new ValidationError("No response from LLM");
|
|
49
|
+
}
|
|
50
|
+
outro("");
|
|
51
|
+
});
|
|
52
|
+
generate
|
|
53
|
+
.command("text")
|
|
54
|
+
.description(`Generate text (default model: ${DEFAULT_TEXT_MODEL})`)
|
|
55
|
+
.option("--model <model>", `Model identifier (default: ${DEFAULT_TEXT_MODEL})`)
|
|
56
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
57
|
+
.argument("[prompt]", "Generation prompt")
|
|
58
|
+
.action(async function (promptArg) {
|
|
59
|
+
const flags = resolveCommandFlags(program);
|
|
60
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
61
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: false });
|
|
62
|
+
const opts = resolveGenerateOptions(this);
|
|
63
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
64
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
65
|
+
if (flags.dryRun) {
|
|
66
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
intro("generate text");
|
|
70
|
+
const client = await resolveClient(container);
|
|
71
|
+
const response = await withSpinner({
|
|
72
|
+
message: `Generating with ${model}...`,
|
|
73
|
+
fn: () => client.text({ model, prompt, params }),
|
|
74
|
+
stopMessage: () => model,
|
|
75
|
+
subtext: (r) => r.content
|
|
76
|
+
});
|
|
77
|
+
if (!response.content) {
|
|
78
|
+
throw new ValidationError("No response from LLM");
|
|
79
|
+
}
|
|
80
|
+
outro("");
|
|
81
|
+
});
|
|
82
|
+
registerMediaSubcommand(generate, program, container, "image");
|
|
83
|
+
registerMediaSubcommand(generate, program, container, "video");
|
|
84
|
+
registerMediaSubcommand(generate, program, container, "audio");
|
|
85
|
+
}
|
|
86
|
+
function registerMediaSubcommand(generate, program, container, type) {
|
|
87
|
+
const defaultModel = DEFAULT_MODELS[type];
|
|
88
|
+
generate
|
|
89
|
+
.command(type)
|
|
90
|
+
.description(`Generate ${type} (default model: ${defaultModel})`)
|
|
91
|
+
.option("--model <model>", `Model identifier (default: ${defaultModel})`)
|
|
92
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
93
|
+
.option("-o, --output <path>", "Output file path")
|
|
94
|
+
.argument("[prompt]", "Generation prompt")
|
|
95
|
+
.action(async function (promptArg) {
|
|
96
|
+
const flags = resolveCommandFlags(program);
|
|
97
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
98
|
+
const prompt = ensurePrompt(promptArg, { type, isDefault: false });
|
|
99
|
+
const opts = resolveGenerateOptions(this);
|
|
100
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
101
|
+
const model = resolveModel(type, opts, container.env.variables);
|
|
102
|
+
if (flags.dryRun) {
|
|
103
|
+
resources.logger.dryRun(`Dry run: would generate ${type} with model ${model} and prompt (${prompt.length} chars)`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
intro(`generate ${type}`);
|
|
107
|
+
const client = await resolveClient(container);
|
|
108
|
+
const saved = await withSpinner({
|
|
109
|
+
message: `Generating ${type} with ${model}...`,
|
|
110
|
+
fn: async () => {
|
|
111
|
+
const response = await client.media(type, { model, prompt, params });
|
|
112
|
+
if (!response.url) {
|
|
113
|
+
throw new ValidationError(buildMissingMediaMessage(type, model, response.content));
|
|
114
|
+
}
|
|
115
|
+
const mimeType = response.mimeType ?? getDefaultMimeType(type);
|
|
116
|
+
const filename = opts.output ?? generateFilename(type, mimeType);
|
|
117
|
+
const resolved = resolveOutputPath(filename, container.env.cwd);
|
|
118
|
+
try {
|
|
119
|
+
await downloadToFile({
|
|
120
|
+
url: response.url,
|
|
121
|
+
outputPath: resolved.path,
|
|
122
|
+
fs: container.fs
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (error instanceof MediaDownloadError) {
|
|
127
|
+
if (error.kind === "write") {
|
|
128
|
+
throw new ValidationError(`Cannot write to "${resolved.label}". Check the path exists and is writable.`);
|
|
129
|
+
}
|
|
130
|
+
throw new ValidationError(`Failed to download ${type} from URL.\nThe file may no longer be available or the URL may have expired.`);
|
|
131
|
+
}
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
return resolved;
|
|
135
|
+
},
|
|
136
|
+
stopMessage: () => `Generated ${type}`
|
|
137
|
+
});
|
|
138
|
+
outro(`Saved ${saved.label}`);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export function parseParams(params) {
|
|
142
|
+
const result = {};
|
|
143
|
+
for (const param of params) {
|
|
144
|
+
const eqIndex = param.indexOf("=");
|
|
145
|
+
if (eqIndex === -1) {
|
|
146
|
+
throw new ValidationError(`Invalid param format: "${param}". Expected key=value`);
|
|
147
|
+
}
|
|
148
|
+
const key = param.slice(0, eqIndex);
|
|
149
|
+
const value = param.slice(eqIndex + 1);
|
|
150
|
+
result[key] = value;
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
function normalizeParamList(value) {
|
|
155
|
+
if (Array.isArray(value)) {
|
|
156
|
+
return value;
|
|
157
|
+
}
|
|
158
|
+
if (typeof value === "string") {
|
|
159
|
+
return [value];
|
|
160
|
+
}
|
|
161
|
+
return [];
|
|
162
|
+
}
|
|
163
|
+
function resolveGenerateOptions(command) {
|
|
164
|
+
const current = command.opts();
|
|
165
|
+
const parent = command.parent?.opts() ?? {};
|
|
166
|
+
return {
|
|
167
|
+
model: current.model ?? parent.model,
|
|
168
|
+
param: mergeParamValues(current.param, parent.param),
|
|
169
|
+
output: current.output ?? parent.output
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function mergeParamValues(current, parent) {
|
|
173
|
+
const currentList = normalizeParamList(current);
|
|
174
|
+
const parentList = normalizeParamList(parent);
|
|
175
|
+
if (currentList.length === 0 && parentList.length === 0) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
return [...parentList, ...currentList];
|
|
179
|
+
}
|
|
180
|
+
function collectParam(value, previous) {
|
|
181
|
+
const list = Array.isArray(previous) ? [...previous] : [];
|
|
182
|
+
list.push(value);
|
|
183
|
+
return list;
|
|
184
|
+
}
|
|
185
|
+
async function withSpinner(options) {
|
|
186
|
+
const { message, fn, stopMessage, subtext } = options;
|
|
187
|
+
const noSpinner = process.env.POE_NO_SPINNER === "1";
|
|
188
|
+
const isTTY = process.stdout.isTTY;
|
|
189
|
+
if (noSpinner || !isTTY) {
|
|
190
|
+
const result = await fn();
|
|
191
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
192
|
+
if (msg) {
|
|
193
|
+
process.stdout.write(`\x1b[32m◆\x1b[0m ${msg}\n`);
|
|
194
|
+
}
|
|
195
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
196
|
+
if (sub) {
|
|
197
|
+
const lines = sub.split("\n");
|
|
198
|
+
for (const line of lines) {
|
|
199
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
const s = spinner();
|
|
205
|
+
s.start(message);
|
|
206
|
+
try {
|
|
207
|
+
const result = await fn();
|
|
208
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
209
|
+
s.stop(msg);
|
|
210
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
211
|
+
if (sub) {
|
|
212
|
+
const lines = sub.split("\n");
|
|
213
|
+
for (const line of lines) {
|
|
214
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
s.stop("", 1);
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function resolveClient(container) {
|
|
225
|
+
try {
|
|
226
|
+
return getGlobalClient();
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
const apiBaseUrl = resolveApiBaseUrl(container);
|
|
230
|
+
await initializeClient({
|
|
231
|
+
fs: container.fs,
|
|
232
|
+
credentialsPath: container.env.credentialsPath,
|
|
233
|
+
baseUrl: apiBaseUrl,
|
|
234
|
+
httpClient: container.httpClient
|
|
235
|
+
});
|
|
236
|
+
return getGlobalClient();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function resolveApiBaseUrl(container) {
|
|
240
|
+
const override = container.env.getVariable("POE_API_BASE_URL");
|
|
241
|
+
if (override && override.trim().length > 0) {
|
|
242
|
+
return override.trim();
|
|
243
|
+
}
|
|
244
|
+
return container.env.poeApiBaseUrl;
|
|
245
|
+
}
|
|
246
|
+
function resolveModel(type, options, variables) {
|
|
247
|
+
if (options.model) {
|
|
248
|
+
return options.model;
|
|
249
|
+
}
|
|
250
|
+
const envKey = MODEL_ENV_KEYS[type];
|
|
251
|
+
const envModel = normalizeEnvModel(variables ? variables[envKey] : undefined);
|
|
252
|
+
if (envModel) {
|
|
253
|
+
return envModel;
|
|
254
|
+
}
|
|
255
|
+
return DEFAULT_MODELS[type];
|
|
256
|
+
}
|
|
257
|
+
function normalizeEnvModel(value) {
|
|
258
|
+
if (typeof value !== "string") {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
const trimmed = value.trim();
|
|
262
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
263
|
+
}
|
|
264
|
+
function buildMissingMediaMessage(type, model, responseContent) {
|
|
265
|
+
const article = type === "video" ? "a" : "an";
|
|
266
|
+
const base = (`The model "${model}" did not return ${article} ${type}.` +
|
|
267
|
+
`\nThis model may not support ${type} generation. Try using a different model with --model.`);
|
|
268
|
+
const trimmed = responseContent?.trim();
|
|
269
|
+
if (trimmed && trimmed.length > 0) {
|
|
270
|
+
return `${base}\nResponse: ${trimmed}`;
|
|
271
|
+
}
|
|
272
|
+
return base;
|
|
273
|
+
}
|
|
274
|
+
function ensurePrompt(prompt, options) {
|
|
275
|
+
if (prompt && prompt.length > 0) {
|
|
276
|
+
return prompt;
|
|
277
|
+
}
|
|
278
|
+
const usage = options.isDefault
|
|
279
|
+
? "poe-code generate \"your prompt\""
|
|
280
|
+
: `poe-code generate ${options.type} "your prompt"`;
|
|
281
|
+
throw new ValidationError(`No prompt provided. Usage: ${usage}`);
|
|
282
|
+
}
|
|
283
|
+
function generateFilename(type, mimeType) {
|
|
284
|
+
const timestamp = Date.now();
|
|
285
|
+
const ext = mimeTypeToExt(mimeType);
|
|
286
|
+
return `${type}-${timestamp}.${ext}`;
|
|
287
|
+
}
|
|
288
|
+
function mimeTypeToExt(mimeType) {
|
|
289
|
+
const known = {
|
|
290
|
+
"image/png": "png",
|
|
291
|
+
"video/mp4": "mp4",
|
|
292
|
+
"audio/mp3": "mp3",
|
|
293
|
+
"audio/mpeg": "mp3"
|
|
294
|
+
};
|
|
295
|
+
const mapped = known[mimeType];
|
|
296
|
+
if (mapped) {
|
|
297
|
+
return mapped;
|
|
298
|
+
}
|
|
299
|
+
const slashIndex = mimeType.indexOf("/");
|
|
300
|
+
if (slashIndex === -1 || slashIndex === mimeType.length - 1) {
|
|
301
|
+
return "bin";
|
|
302
|
+
}
|
|
303
|
+
return mimeType.slice(slashIndex + 1);
|
|
304
|
+
}
|
|
305
|
+
function getDefaultMimeType(type) {
|
|
306
|
+
const defaults = {
|
|
307
|
+
image: "image/png",
|
|
308
|
+
video: "video/mp4",
|
|
309
|
+
audio: "audio/mp3"
|
|
310
|
+
};
|
|
311
|
+
return defaults[type];
|
|
312
|
+
}
|
|
313
|
+
function resolveOutputPath(filename, cwd) {
|
|
314
|
+
if (path.isAbsolute(filename)) {
|
|
315
|
+
return { path: filename, label: filename };
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
path: path.join(cwd, filename),
|
|
319
|
+
label: `./${filename}`
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
//# 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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { buildProviderContext, createExecutionResources, resolveCommandFlags, applyIsolatedConfiguration } from "./shared.js";
|
|
2
|
+
import { loadConfiguredServices, saveCredentials } from "../../services/credentials.js";
|
|
3
|
+
import { ValidationError } from "../errors.js";
|
|
4
|
+
import { combineMutationObservers, createMutationReporter } from "../../services/mutation-events.js";
|
|
5
|
+
export function registerLoginCommand(program, container) {
|
|
6
|
+
program
|
|
7
|
+
.command("login")
|
|
8
|
+
.description("Store a Poe API key for reuse across commands.")
|
|
9
|
+
.option("--api-key <key>", "Poe API key")
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
const flags = resolveCommandFlags(program);
|
|
12
|
+
const resources = createExecutionResources(container, flags, "login");
|
|
13
|
+
resources.logger.intro("login");
|
|
14
|
+
try {
|
|
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
|
+
});
|
|
21
|
+
await saveCredentials({
|
|
22
|
+
fs: resources.context.fs,
|
|
23
|
+
filePath: container.env.credentialsPath,
|
|
24
|
+
apiKey: normalized
|
|
25
|
+
});
|
|
26
|
+
await reconfigureServices({
|
|
27
|
+
program,
|
|
28
|
+
container,
|
|
29
|
+
apiKey: normalized,
|
|
30
|
+
configuredServices
|
|
31
|
+
});
|
|
32
|
+
resources.context.complete({
|
|
33
|
+
success: `Poe API key stored at ${container.env.credentialsPath}.`,
|
|
34
|
+
dry: `Dry run: would store Poe API key at ${container.env.credentialsPath}.`
|
|
35
|
+
});
|
|
36
|
+
resources.context.finalize();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (error instanceof Error) {
|
|
40
|
+
resources.logger.logException(error, "login command", {
|
|
41
|
+
operation: "login",
|
|
42
|
+
credentialsPath: container.env.credentialsPath
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function resolveApiKeyInput(container, options) {
|
|
50
|
+
if (options.apiKey) {
|
|
51
|
+
return options.apiKey;
|
|
52
|
+
}
|
|
53
|
+
const descriptor = container.promptLibrary.loginApiKey();
|
|
54
|
+
const response = await container.prompts(descriptor);
|
|
55
|
+
const value = response[descriptor.name];
|
|
56
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
57
|
+
throw new ValidationError("POE API key is required.", {
|
|
58
|
+
operation: "login",
|
|
59
|
+
field: "apiKey"
|
|
60
|
+
});
|
|
61
|
+
}
|
|
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
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|