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.
Files changed (227) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/poe-claude.js +23 -0
  3. package/dist/bin/poe-codex.js +23 -0
  4. package/dist/bin/poe-kimi-cli.js +23 -0
  5. package/dist/bin/poe-opencode.js +23 -0
  6. package/dist/bin.cjs +9 -0
  7. package/dist/cli/binary-aliases.d.ts +7 -0
  8. package/dist/cli/binary-aliases.js +26 -0
  9. package/dist/cli/binary-aliases.js.map +1 -0
  10. package/dist/cli/bootstrap.d.ts +4 -0
  11. package/dist/cli/bootstrap.js +78 -0
  12. package/dist/cli/bootstrap.js.map +1 -0
  13. package/dist/cli/command-not-found.d.ts +8 -0
  14. package/dist/cli/command-not-found.js +34 -0
  15. package/dist/cli/command-not-found.js.map +1 -0
  16. package/dist/cli/commands/configure-payload.d.ts +15 -0
  17. package/dist/cli/commands/configure-payload.js +31 -0
  18. package/dist/cli/commands/configure-payload.js.map +1 -0
  19. package/dist/cli/commands/configure.d.ts +12 -0
  20. package/dist/cli/commands/configure.js +151 -0
  21. package/dist/cli/commands/configure.js.map +1 -0
  22. package/dist/cli/commands/ensure-isolated-config.d.ts +12 -0
  23. package/dist/cli/commands/ensure-isolated-config.js +53 -0
  24. package/dist/cli/commands/ensure-isolated-config.js.map +1 -0
  25. package/dist/cli/commands/generate.d.ts +9 -0
  26. package/dist/cli/commands/generate.js +322 -0
  27. package/dist/cli/commands/generate.js.map +1 -0
  28. package/dist/cli/commands/install.d.ts +4 -0
  29. package/dist/cli/commands/install.js +40 -0
  30. package/dist/cli/commands/install.js.map +1 -0
  31. package/dist/cli/commands/login.d.ts +6 -0
  32. package/dist/cli/commands/login.js +105 -0
  33. package/dist/cli/commands/login.js.map +1 -0
  34. package/dist/cli/commands/mcp.d.ts +3 -0
  35. package/dist/cli/commands/mcp.js +178 -0
  36. package/dist/cli/commands/mcp.js.map +1 -0
  37. package/dist/cli/commands/models.d.ts +3 -0
  38. package/dist/cli/commands/models.js +183 -0
  39. package/dist/cli/commands/models.js.map +1 -0
  40. package/dist/cli/commands/ralph-worktree.d.ts +3 -0
  41. package/dist/cli/commands/ralph-worktree.js +73 -0
  42. package/dist/cli/commands/ralph-worktree.js.map +1 -0
  43. package/dist/cli/commands/ralph.d.ts +3 -0
  44. package/dist/cli/commands/ralph.js +424 -0
  45. package/dist/cli/commands/ralph.js.map +1 -0
  46. package/dist/cli/commands/shared.d.ts +29 -0
  47. package/dist/cli/commands/shared.js +82 -0
  48. package/dist/cli/commands/shared.js.map +1 -0
  49. package/dist/cli/commands/skill.d.ts +3 -0
  50. package/dist/cli/commands/skill.js +242 -0
  51. package/dist/cli/commands/skill.js.map +1 -0
  52. package/dist/cli/commands/spawn.d.ts +17 -0
  53. package/dist/cli/commands/spawn.js +226 -0
  54. package/dist/cli/commands/spawn.js.map +1 -0
  55. package/dist/cli/commands/test.d.ts +8 -0
  56. package/dist/cli/commands/test.js +124 -0
  57. package/dist/cli/commands/test.js.map +1 -0
  58. package/dist/cli/commands/unconfigure.d.ts +7 -0
  59. package/dist/cli/commands/unconfigure.js +116 -0
  60. package/dist/cli/commands/unconfigure.js.map +1 -0
  61. package/dist/cli/commands/usage.d.ts +3 -0
  62. package/dist/cli/commands/usage.js +186 -0
  63. package/dist/cli/commands/usage.js.map +1 -0
  64. package/dist/cli/commands/version.d.ts +3 -0
  65. package/dist/cli/commands/version.js +31 -0
  66. package/dist/cli/commands/version.js.map +1 -0
  67. package/dist/cli/commands/wrap.d.ts +3 -0
  68. package/dist/cli/commands/wrap.js +61 -0
  69. package/dist/cli/commands/wrap.js.map +1 -0
  70. package/dist/cli/constants.d.ts +24 -0
  71. package/dist/cli/constants.js +44 -0
  72. package/dist/cli/constants.js.map +1 -0
  73. package/dist/cli/container.d.ts +42 -0
  74. package/dist/cli/container.js +90 -0
  75. package/dist/cli/container.js.map +1 -0
  76. package/dist/cli/context.d.ts +33 -0
  77. package/dist/cli/context.js +91 -0
  78. package/dist/cli/context.js.map +1 -0
  79. package/dist/cli/environment.d.ts +21 -0
  80. package/dist/cli/environment.js +106 -0
  81. package/dist/cli/environment.js.map +1 -0
  82. package/dist/cli/error-logger.d.ts +62 -0
  83. package/dist/cli/error-logger.js +155 -0
  84. package/dist/cli/error-logger.js.map +1 -0
  85. package/dist/cli/errors.d.ts +95 -0
  86. package/dist/cli/errors.js +141 -0
  87. package/dist/cli/errors.js.map +1 -0
  88. package/dist/cli/exit-signals.d.ts +4 -0
  89. package/dist/cli/exit-signals.js +8 -0
  90. package/dist/cli/exit-signals.js.map +1 -0
  91. package/dist/cli/http.d.ts +12 -0
  92. package/dist/cli/http.js +2 -0
  93. package/dist/cli/http.js.map +1 -0
  94. package/dist/cli/isolated-env-runner.d.ts +10 -0
  95. package/dist/cli/isolated-env-runner.js +50 -0
  96. package/dist/cli/isolated-env-runner.js.map +1 -0
  97. package/dist/cli/isolated-env.d.ts +24 -0
  98. package/dist/cli/isolated-env.js +210 -0
  99. package/dist/cli/isolated-env.js.map +1 -0
  100. package/dist/cli/logger.d.ts +36 -0
  101. package/dist/cli/logger.js +191 -0
  102. package/dist/cli/logger.js.map +1 -0
  103. package/dist/cli/mcp-output-format.d.ts +2 -0
  104. package/dist/cli/mcp-output-format.js +27 -0
  105. package/dist/cli/mcp-output-format.js.map +1 -0
  106. package/dist/cli/mcp-server.d.ts +21 -0
  107. package/dist/cli/mcp-server.js +321 -0
  108. package/dist/cli/mcp-server.js.map +1 -0
  109. package/dist/cli/options.d.ts +45 -0
  110. package/dist/cli/options.js +111 -0
  111. package/dist/cli/options.js.map +1 -0
  112. package/dist/cli/poe-code-command-runner.d.ts +6 -0
  113. package/dist/cli/poe-code-command-runner.js +63 -0
  114. package/dist/cli/poe-code-command-runner.js.map +1 -0
  115. package/dist/cli/program.d.ts +4 -0
  116. package/dist/cli/program.js +249 -0
  117. package/dist/cli/program.js.map +1 -0
  118. package/dist/cli/prompt-runner.d.ts +10 -0
  119. package/dist/cli/prompt-runner.js +79 -0
  120. package/dist/cli/prompt-runner.js.map +1 -0
  121. package/dist/cli/prompts.d.ts +39 -0
  122. package/dist/cli/prompts.js +42 -0
  123. package/dist/cli/prompts.js.map +1 -0
  124. package/dist/cli/service-registry.d.ts +108 -0
  125. package/dist/cli/service-registry.js +83 -0
  126. package/dist/cli/service-registry.js.map +1 -0
  127. package/dist/cli/types.d.ts +2 -0
  128. package/dist/cli/types.js +2 -0
  129. package/dist/cli/types.js.map +1 -0
  130. package/dist/cli/ui/service-menu.d.ts +7 -0
  131. package/dist/cli/ui/service-menu.js +43 -0
  132. package/dist/cli/ui/service-menu.js.map +1 -0
  133. package/dist/index.d.ts +8 -0
  134. package/dist/index.js +36812 -0
  135. package/dist/index.js.map +7 -0
  136. package/dist/providers/claude-code.d.ts +13 -0
  137. package/dist/providers/claude-code.js +143 -0
  138. package/dist/providers/claude-code.js.map +1 -0
  139. package/dist/providers/codex.d.ts +17 -0
  140. package/dist/providers/codex.js +144 -0
  141. package/dist/providers/codex.js.map +1 -0
  142. package/dist/providers/create-provider.d.ts +29 -0
  143. package/dist/providers/create-provider.js +78 -0
  144. package/dist/providers/create-provider.js.map +1 -0
  145. package/dist/providers/index.d.ts +2 -0
  146. package/dist/providers/index.js +8 -0
  147. package/dist/providers/index.js.map +1 -0
  148. package/dist/providers/kimi.d.ts +4 -0
  149. package/dist/providers/kimi.js +123 -0
  150. package/dist/providers/kimi.js.map +1 -0
  151. package/dist/providers/opencode.d.ts +3 -0
  152. package/dist/providers/opencode.js +119 -0
  153. package/dist/providers/opencode.js.map +1 -0
  154. package/dist/providers/spawn-options.d.ts +13 -0
  155. package/dist/providers/spawn-options.js +2 -0
  156. package/dist/providers/spawn-options.js.map +1 -0
  157. package/dist/sdk/container.d.ts +18 -0
  158. package/dist/sdk/container.js +127 -0
  159. package/dist/sdk/container.js.map +1 -0
  160. package/dist/sdk/credentials.d.ts +9 -0
  161. package/dist/sdk/credentials.js +35 -0
  162. package/dist/sdk/credentials.js.map +1 -0
  163. package/dist/sdk/generate.d.ts +5 -0
  164. package/dist/sdk/generate.js +97 -0
  165. package/dist/sdk/generate.js.map +1 -0
  166. package/dist/sdk/spawn-core.d.ts +23 -0
  167. package/dist/sdk/spawn-core.js +105 -0
  168. package/dist/sdk/spawn-core.js.map +1 -0
  169. package/dist/sdk/spawn.d.ts +31 -0
  170. package/dist/sdk/spawn.js +109 -0
  171. package/dist/sdk/spawn.js.map +1 -0
  172. package/dist/sdk/types.d.ts +44 -0
  173. package/dist/sdk/types.js +2 -0
  174. package/dist/sdk/types.js.map +1 -0
  175. package/dist/services/client-instance.d.ts +12 -0
  176. package/dist/services/client-instance.js +36 -0
  177. package/dist/services/client-instance.js.map +1 -0
  178. package/dist/services/credentials.d.ts +24 -0
  179. package/dist/services/credentials.js +157 -0
  180. package/dist/services/credentials.js.map +1 -0
  181. package/dist/services/llm-client.d.ts +22 -0
  182. package/dist/services/llm-client.js +138 -0
  183. package/dist/services/llm-client.js.map +1 -0
  184. package/dist/services/media-download.d.ts +17 -0
  185. package/dist/services/media-download.js +42 -0
  186. package/dist/services/media-download.js.map +1 -0
  187. package/dist/services/model-strategy.d.ts +99 -0
  188. package/dist/services/model-strategy.js +187 -0
  189. package/dist/services/model-strategy.js.map +1 -0
  190. package/dist/services/mutation-events.d.ts +4 -0
  191. package/dist/services/mutation-events.js +53 -0
  192. package/dist/services/mutation-events.js.map +1 -0
  193. package/dist/services/service-install.d.ts +22 -0
  194. package/dist/services/service-install.js +70 -0
  195. package/dist/services/service-install.js.map +1 -0
  196. package/dist/services/version.d.ts +11 -0
  197. package/dist/services/version.js +28 -0
  198. package/dist/services/version.js.map +1 -0
  199. package/dist/tools/label-generator.d.ts +11 -0
  200. package/dist/tools/label-generator.js +78 -0
  201. package/dist/tools/label-generator.js.map +1 -0
  202. package/dist/utils/backup.d.ts +5 -0
  203. package/dist/utils/backup.js +56 -0
  204. package/dist/utils/backup.js.map +1 -0
  205. package/dist/utils/cli-settings-merge.d.ts +22 -0
  206. package/dist/utils/cli-settings-merge.js +56 -0
  207. package/dist/utils/cli-settings-merge.js.map +1 -0
  208. package/dist/utils/command-checks.d.ts +36 -0
  209. package/dist/utils/command-checks.js +120 -0
  210. package/dist/utils/command-checks.js.map +1 -0
  211. package/dist/utils/command-line.d.ts +1 -0
  212. package/dist/utils/command-line.js +54 -0
  213. package/dist/utils/command-line.js.map +1 -0
  214. package/dist/utils/dry-run.d.ts +39 -0
  215. package/dist/utils/dry-run.js +315 -0
  216. package/dist/utils/dry-run.js.map +1 -0
  217. package/dist/utils/execution-context.d.ts +48 -0
  218. package/dist/utils/execution-context.js +151 -0
  219. package/dist/utils/execution-context.js.map +1 -0
  220. package/dist/utils/file-system.d.ts +21 -0
  221. package/dist/utils/file-system.js +2 -0
  222. package/dist/utils/file-system.js.map +1 -0
  223. package/dist/utils/json.d.ts +12 -0
  224. package/dist/utils/json.js +45 -0
  225. package/dist/utils/json.js.map +1 -0
  226. package/package.json +5 -2
  227. 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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAEtF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAY/C,MAAM,cAAc,GAAiC;IACnD,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,iBAAiB;CACzB,CAAC;AAEF,MAAM,cAAc,GAAiC;IACnD,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,iBAAiB;CACzB,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,kBAAkB,GAAG,CAAC;SAC9E,MAAM,CACL,qBAAqB,EACrB,oCAAoC,EACpC,YAAY,EACZ,EAAE,CACH;SACA,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,QAAQ,CAAC,UAAU,EAAE,iDAAiD,CAAC;SACvE,MAAM,CAAC,KAAK,WAA0B,SAAkB;QACvD,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CACrB,2CAA2C,KAAK,gBAAgB,MAAM,CAAC,MAAM,SAAS,CACvF,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YACjC,OAAO,EAAE,mBAAmB,KAAK,KAAK;YACtC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAChD,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;YACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEL,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,iCAAiC,kBAAkB,GAAG,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,kBAAkB,GAAG,CAAC;SAC9E,MAAM,CACL,qBAAqB,EACrB,oCAAoC,EACpC,YAAY,EACZ,EAAE,CACH;SACA,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACzC,MAAM,CAAC,KAAK,WAA0B,SAAkB;QACvD,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CACrB,2CAA2C,KAAK,gBAAgB,MAAM,CAAC,MAAM,SAAS,CACvF,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;YACjC,OAAO,EAAE,mBAAmB,KAAK,KAAK;YACtC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAChD,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;YACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IAEL,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/D,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/D,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAiB,EACjB,OAAgB,EAChB,SAAuB,EACvB,IAAe;IAEf,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ;SACL,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,YAAY,IAAI,oBAAoB,YAAY,GAAG,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,YAAY,GAAG,CAAC;SACxE,MAAM,CACL,qBAAqB,EACrB,oCAAoC,EACpC,YAAY,EACZ,EAAE,CACH;SACA,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;SACzC,MAAM,CAAC,KAAK,WAA0B,SAAkB;QACvD,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CACrB,2BAA2B,IAAI,eAAe,KAAK,gBAAgB,MAAM,CAAC,MAAM,SAAS,CAC1F,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;YAC9B,OAAO,EAAE,cAAc,IAAI,SAAS,KAAK,KAAK;YAC9C,EAAE,EAAE,KAAK,IAAI,EAAE;gBACb,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAErE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;oBAClB,MAAM,IAAI,eAAe,CACvB,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CACxD,CAAC;gBACJ,CAAC;gBAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEhE,IAAI,CAAC;oBACH,MAAM,cAAc,CAAC;wBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,UAAU,EAAE,QAAQ,CAAC,IAAI;wBACzB,EAAE,EAAE,SAAS,CAAC,EAAE;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;wBACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BAC3B,MAAM,IAAI,eAAe,CACvB,oBAAoB,QAAQ,CAAC,KAAK,2CAA2C,CAC9E,CAAC;wBACJ,CAAC;wBACD,MAAM,IAAI,eAAe,CACvB,sBAAsB,IAAI,8EAA8E,CACzG,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,WAAW,EAAE,GAAG,EAAE,CAAC,aAAa,IAAI,EAAE;SACvC,CAAC,CAAC;QACH,KAAK,CAAC,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAgB;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,eAAe,CACvB,0BAA0B,KAAK,uBAAuB,CACvD,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAgB;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAA0B,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAA0B,IAAI,EAAE,CAAC;IAEpE,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;QACpC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAsC,EACtC,MAAqC;IAErC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,QAAkB;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAWD,KAAK,UAAU,WAAW,CAAI,OAA0B;IACtD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAEnC,IAAI,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACd,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,SAAuB;IAClD,IAAI,CAAC;QACH,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,gBAAgB,CAAC;YACrB,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe;YAC9C,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,SAAS,CAAC,UAAU;SACjC,CAAC,CAAC;QACH,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAuB;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CACnB,IAAkB,EAClB,OAA+B,EAC/B,SAA8C;IAE9C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9E,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAe,EACf,KAAa,EACb,eAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,CACX,cAAc,KAAK,oBAAoB,OAAO,IAAI,IAAI,GAAG;QACzD,gCAAgC,IAAI,wDAAwD,CAC7F,CAAC;IACF,MAAM,OAAO,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,IAAI,eAAe,OAAO,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CACnB,MAA0B,EAC1B,OAAmD;IAEnD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS;QAC7B,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,qBAAqB,OAAO,CAAC,IAAI,gBAAgB,CAAC;IACtD,MAAM,IAAI,eAAe,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAe,EAAE,QAAgB;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAA2B;QACpC,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,KAAK;KACpB,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,UAAU,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAe;IACzC,MAAM,QAAQ,GAA8B;QAC1C,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,WAAW;KACnB,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,GAAW;IACtD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC9B,KAAK,EAAE,KAAK,QAAQ,EAAE;KACvB,CAAC;AACJ,CAAC"}
@@ -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,6 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export interface LoginCommandOptions {
4
+ apiKey?: string;
5
+ }
6
+ export declare function registerLoginCommand(program: Command, container: CliContainer): void;
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ import type { CliContainer } from "../container.js";
3
+ export declare function registerMcpCommand(program: Command, container: CliContainer): void;