poe-code 2.0.58 → 2.0.60
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/dist/cli/commands/configure.d.ts +3 -1
- package/dist/cli/commands/configure.js +31 -27
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/ensure-isolated-config.js +1 -1
- package/dist/cli/commands/ensure-isolated-config.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +9 -0
- package/dist/cli/commands/generate.js +320 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/install.js +10 -5
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/shared.d.ts +1 -0
- package/dist/cli/commands/shared.js +8 -1
- package/dist/cli/commands/shared.js.map +1 -1
- package/dist/cli/commands/spawn.js +24 -13
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/commands/test.js +11 -6
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/unconfigure.js +5 -3
- package/dist/cli/commands/unconfigure.js.map +1 -1
- package/dist/cli/commands/version.js +1 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/commands/wrap.js +5 -3
- package/dist/cli/commands/wrap.js.map +1 -1
- package/dist/cli/constants.d.ts +5 -2
- package/dist/cli/constants.js +5 -2
- package/dist/cli/constants.js.map +1 -1
- package/dist/cli/container.js +2 -1
- package/dist/cli/container.js.map +1 -1
- package/dist/cli/http.d.ts +1 -0
- package/dist/cli/logger.d.ts +2 -0
- package/dist/cli/logger.js +8 -0
- package/dist/cli/logger.js.map +1 -1
- package/dist/cli/program.js +78 -30
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/prompts.d.ts +9 -3
- package/dist/cli/prompts.js +5 -9
- package/dist/cli/prompts.js.map +1 -1
- package/dist/cli/ui/clack-static.d.ts +51 -0
- package/dist/cli/ui/clack-static.js +59 -0
- package/dist/cli/ui/clack-static.js.map +1 -0
- package/dist/cli/ui/design-language.d.ts +30 -0
- package/dist/cli/ui/design-language.js +38 -0
- package/dist/cli/ui/design-language.js.map +1 -0
- package/dist/cli/ui/service-menu.d.ts +1 -0
- package/dist/cli/ui/service-menu.js +6 -4
- package/dist/cli/ui/service-menu.js.map +1 -1
- package/dist/cli/ui/theme.d.ts +1 -0
- package/dist/cli/ui/theme.js +6 -3
- package/dist/cli/ui/theme.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/sdk/generate.d.ts +5 -0
- package/dist/sdk/generate.js +94 -0
- package/dist/sdk/generate.js.map +1 -0
- package/dist/sdk/spawn-core.js +32 -8
- package/dist/sdk/spawn-core.js.map +1 -1
- package/dist/sdk/types.d.ts +14 -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/llm-client.d.ts +21 -0
- package/dist/services/llm-client.js +131 -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/utils/dry-run.d.ts +1 -0
- package/dist/utils/dry-run.js +115 -4
- package/dist/utils/dry-run.js.map +1 -1
- package/package.json +13 -2
- package/dist/cli/commands/query.d.ts +0 -6
- package/dist/cli/commands/query.js +0 -76
- package/dist/cli/commands/query.js.map +0 -1
|
@@ -7,4 +7,6 @@ export interface ConfigureCommandOptions {
|
|
|
7
7
|
}
|
|
8
8
|
export declare function registerConfigureCommand(program: Command, container: CliContainer): Command;
|
|
9
9
|
export declare function executeConfigure(program: Command, container: CliContainer, service: string, options: ConfigureCommandOptions): Promise<void>;
|
|
10
|
-
export declare function resolveServiceArgument(program: Command, container: CliContainer, provided?: string
|
|
10
|
+
export declare function resolveServiceArgument(program: Command, container: CliContainer, provided?: string, selectionContext?: {
|
|
11
|
+
action: string;
|
|
12
|
+
}): Promise<string>;
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter, applyIsolatedConfiguration } from "./shared.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { buildProviderContext, createExecutionResources, formatServiceList, resolveCommandFlags, resolveServiceAdapter, applyIsolatedConfiguration } from "./shared.js";
|
|
2
|
+
import { createCliDesignLanguage } from "../ui/design-language.js";
|
|
3
|
+
import { OperationCancelledError } from "../errors.js";
|
|
4
4
|
import { saveConfiguredService } from "../../services/credentials.js";
|
|
5
5
|
import { combineMutationObservers, createMutationReporter } from "../../services/mutation-events.js";
|
|
6
6
|
import { createConfigurePayload } from "./configure-payload.js";
|
|
7
7
|
export function registerConfigureCommand(program, container) {
|
|
8
|
+
const serviceNames = container.registry.list().map((service) => service.name);
|
|
9
|
+
const serviceDescription = `Agent to configure${formatServiceList(serviceNames)}`;
|
|
8
10
|
const configureCommand = program
|
|
9
11
|
.command("configure")
|
|
10
12
|
.description("Configure developer tooling for Poe API.")
|
|
11
|
-
.argument("[
|
|
13
|
+
.argument("[agent]", serviceDescription)
|
|
12
14
|
.option("--api-key <key>", "Poe API key")
|
|
13
15
|
.option("--model <model>", "Model identifier")
|
|
14
16
|
.option("--reasoning-effort <level>", "Reasoning effort level")
|
|
15
17
|
.action(async (service, options) => {
|
|
16
|
-
const resolved = await resolveServiceArgument(program, container, service);
|
|
18
|
+
const resolved = await resolveServiceArgument(program, container, service, { action: "configure" });
|
|
17
19
|
await executeConfigure(program, container, resolved, options);
|
|
18
20
|
});
|
|
19
21
|
return configureCommand;
|
|
@@ -35,7 +37,7 @@ export async function executeConfigure(program, container, service, options) {
|
|
|
35
37
|
});
|
|
36
38
|
await container.registry.invoke(canonicalService, "configure", async (entry) => {
|
|
37
39
|
if (!entry.configure) {
|
|
38
|
-
throw new Error(`
|
|
40
|
+
throw new Error(`Agent "${canonicalService}" does not support configure.`);
|
|
39
41
|
}
|
|
40
42
|
const tracker = createMutationTracker();
|
|
41
43
|
const mutationLogger = createMutationReporter(resources.logger);
|
|
@@ -111,38 +113,40 @@ function createMutationTracker() {
|
|
|
111
113
|
function resolvePostConfigureMessages(provider) {
|
|
112
114
|
return provider.postConfigureMessages ?? [];
|
|
113
115
|
}
|
|
114
|
-
export async function resolveServiceArgument(program, container, provided) {
|
|
116
|
+
export async function resolveServiceArgument(program, container, provided, selectionContext) {
|
|
115
117
|
if (provided) {
|
|
116
118
|
return provided;
|
|
117
119
|
}
|
|
118
120
|
const services = container.registry.list();
|
|
121
|
+
const action = selectionContext?.action ?? "configure";
|
|
119
122
|
if (services.length === 0) {
|
|
120
|
-
throw new Error(
|
|
123
|
+
throw new Error(`No agents available to ${action}.`);
|
|
121
124
|
}
|
|
122
125
|
const flags = resolveCommandFlags(program);
|
|
123
|
-
const
|
|
126
|
+
const selectionLogger = container.loggerFactory.create({
|
|
124
127
|
dryRun: flags.dryRun,
|
|
125
|
-
verbose:
|
|
126
|
-
scope:
|
|
128
|
+
verbose: flags.verbose,
|
|
129
|
+
scope: action
|
|
130
|
+
});
|
|
131
|
+
selectionLogger.intro(action);
|
|
132
|
+
const choices = services.map((service) => ({
|
|
133
|
+
title: service.label,
|
|
134
|
+
value: service.name
|
|
135
|
+
}));
|
|
136
|
+
const design = createCliDesignLanguage(container.env);
|
|
137
|
+
const descriptor = container.promptLibrary.serviceSelection({
|
|
138
|
+
message: design.copy.serviceSelection(action),
|
|
139
|
+
choices
|
|
127
140
|
});
|
|
128
|
-
const menuTheme = createMenuTheme(container.env);
|
|
129
|
-
const menuLines = renderServiceMenu(services, { theme: menuTheme });
|
|
130
|
-
menuLines.forEach((line) => logger.info(line));
|
|
131
|
-
const descriptor = container.promptLibrary.serviceSelection();
|
|
132
141
|
const response = await container.prompts(descriptor);
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
: typeof selection === "string"
|
|
137
|
-
? Number.parseInt(selection, 10)
|
|
138
|
-
: NaN;
|
|
139
|
-
if (!Number.isInteger(normalized)) {
|
|
140
|
-
throw new Error("Invalid service selection.");
|
|
142
|
+
const selectionValue = response[descriptor.name];
|
|
143
|
+
if (typeof selectionValue !== "string") {
|
|
144
|
+
throw new OperationCancelledError();
|
|
141
145
|
}
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
144
|
-
throw new Error("Invalid
|
|
146
|
+
const resolved = services.find((service) => service.name === selectionValue);
|
|
147
|
+
if (!resolved) {
|
|
148
|
+
throw new Error("Invalid agent selection.");
|
|
145
149
|
}
|
|
146
|
-
return
|
|
150
|
+
return resolved.name;
|
|
147
151
|
}
|
|
148
152
|
//# sourceMappingURL=configure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE,MAAM,UAAU,wBAAwB,CACtC,OAAgB,EAChB,SAAuB;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,kBAAkB,GACtB,qBAAqB,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IACzD,MAAM,gBAAgB,GAAG,OAAO;SAC7B,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CACP,SAAS,EACT,kBAAkB,CACnB;SACA,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,4BAA4B,EAAE,wBAAwB,CAAC;SAC9D,MAAM,CACL,KAAK,EAAE,OAA2B,EAAE,OAAgC,EAAE,EAAE;QACtE,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,OAAO,EACP,SAAS,EACT,OAAO,EACP,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;QACF,MAAM,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CACF,CAAC;IAEJ,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgB,EAChB,SAAuB,EACvB,OAAe,EACf,OAAgC;IAEhC,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,aAAa,gBAAgB,EAAE,CAChC,CAAC;IAEF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,gBAAgB,EAAE,CAAC,CAAC;IAExD,MAAM,eAAe,GAAG,oBAAoB,CAC1C,SAAS,EACT,OAAO,EACP,SAAS,CACV,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;QAC3C,SAAS;QACT,KAAK;QACL,OAAO;QACP,OAAO,EAAE,eAAe;QACxB,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,UAAU,gBAAgB,+BAA+B,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE9E,MAAM,KAAK,CAAC,SAAS,CACnB;YACE,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE;YAC9B,GAAG,EAAE,eAAe,CAAC,GAAG;YACxB,OAAO,EAAE,eAAe,CAAC,OAAO;YAChC,OAAO,EAAE,OAAO;SACjB,EACD,SAAS;YACP,CAAC,CAAC;gBACE,SAAS;aACV;YACH,CAAC,CAAC,SAAS,CACd,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,qBAAqB,CAAC;gBAC1B,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,eAAe;gBAC7C,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE;oBACR,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;iBACvB;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;QACrC,IAAI,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,iBAAiB,GAAG,wBAAwB,CAChD,eAAe,CAAC,SAAS,EACzB,cAAc,CACf,CAAC;YACF,MAAM,0BAA0B,CAAC;gBAC/B,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,OAAO;gBACP,QAAQ;gBACR,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,SAAS,EAAE,iBAAiB;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GACd,gBAAgB,KAAK,aAAa;QAChC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,YAAY;QAC9B,CAAC,CAAC,4BAA4B,OAAO,CAAC,KAAK,GAAG,CAAC;IAEnD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,OAAO,EAAE,cAAc,OAAO,CAAC,KAAK,GAAG;QACvC,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC3D,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,qBAAqB;IAI5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAA6B;QAC1C,UAAU,CAAC,OAAO,EAAE,OAAO;YACzB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9D,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;IAEF,OAAO;QACL,SAAS;QACT,KAAK;YACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAyB;IAC7D,OAAO,QAAQ,CAAC,qBAAqB,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgB,EAChB,SAAuB,EACvB,QAAiB,EACjB,gBAAqC;IAErC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,gBAAgB,EAAE,MAAM,IAAI,WAAW,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QACrD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;IACH,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,IAAI;KACpB,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC;QAC1D,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC7C,OAAO;KACR,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,uBAAuB,EAAE,CAAC;IACtC,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -31,7 +31,7 @@ export async function ensureIsolatedConfigForService(input) {
|
|
|
31
31
|
});
|
|
32
32
|
await container.registry.invoke(canonicalService, "configure", async (entry) => {
|
|
33
33
|
if (!entry.configure) {
|
|
34
|
-
throw new Error(`
|
|
34
|
+
throw new Error(`Agent "${canonicalService}" does not support configure.`);
|
|
35
35
|
}
|
|
36
36
|
const mutationLogger = createMutationReporter(resources.logger);
|
|
37
37
|
await applyIsolatedConfiguration({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-isolated-config.js","sourceRoot":"","sources":["../../../src/cli/commands/ensure-isolated-config.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EACL,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,KAOpD;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;IAC7C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,YAAY,gBAAgB,EAAE,CAC/B,CAAC;IACF,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,SAAS,CAAC,GAAG,EACb,QAAQ,EACR,OAAO,CAAC,IAAI,EACZ,SAAS,CAAC,EAAE,CACb,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,SAAS,CAAC,EAAE,EACZ,OAAO,CAAC,eAAgB,CACzB,CAAC;IACF,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;QAC3C,SAAS;QACT,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,OAAO,EAAE,eAAe;QACxB,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ensure-isolated-config.js","sourceRoot":"","sources":["../../../src/cli/commands/ensure-isolated-config.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EACL,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,KAOpD;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;IAC7C,MAAM,SAAS,GAAG,wBAAwB,CACxC,SAAS,EACT,KAAK,EACL,YAAY,gBAAgB,EAAE,CAC/B,CAAC;IACF,MAAM,eAAe,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,SAAS,CAAC,GAAG,EACb,QAAQ,EACR,OAAO,CAAC,IAAI,EACZ,SAAS,CAAC,EAAE,CACb,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,SAAS,CAAC,EAAE,EACZ,OAAO,CAAC,eAAgB,CACzB,CAAC;IACF,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;QAC3C,SAAS;QACT,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;QAC5B,OAAO,EAAE,eAAe;QACxB,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,UAAU,gBAAgB,+BAA+B,CAAC,CAAC;QAC7E,CAAC;QACD,MAAM,cAAc,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,0BAA0B,CAAC;YAC/B,OAAO,EAAE,KAAK;YACd,eAAe;YACf,OAAO;YACP,QAAQ;YACR,YAAY,EAAE,OAAO,CAAC,IAAI;YAC1B,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,SAAS,CAAC,EAAE,EACZ,OAAO,CAAC,eAAgB,CACzB,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,CAAC,KAAK,0CAA0C,OAAO,CAAC,eAAe,GAAG,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { CliContainer } from "../container.js";
|
|
3
|
+
export interface GenerateCommandOptions {
|
|
4
|
+
model?: string;
|
|
5
|
+
param?: string[] | string;
|
|
6
|
+
output?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function registerGenerateCommand(program: Command, container: CliContainer): void;
|
|
9
|
+
export declare function parseParams(params: string[]): Record<string, string>;
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { intro, outro, spinner } from "@clack/prompts";
|
|
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 { createCliDesignLanguage } from "../ui/design-language.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 design = createCliDesignLanguage(container.env);
|
|
33
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: true });
|
|
34
|
+
const opts = resolveGenerateOptions(this);
|
|
35
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
36
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
37
|
+
if (flags.dryRun) {
|
|
38
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
intro(design.text.intro("generate"));
|
|
42
|
+
const client = await resolveClient(container);
|
|
43
|
+
const response = await withSpinner({
|
|
44
|
+
message: `Generating with ${model}...`,
|
|
45
|
+
fn: () => client.text({ model, prompt, params }),
|
|
46
|
+
stopMessage: () => model,
|
|
47
|
+
subtext: (r) => r.content
|
|
48
|
+
});
|
|
49
|
+
if (!response.content) {
|
|
50
|
+
throw new ValidationError("No response from LLM");
|
|
51
|
+
}
|
|
52
|
+
outro();
|
|
53
|
+
});
|
|
54
|
+
generate
|
|
55
|
+
.command("text")
|
|
56
|
+
.description(`Generate text (default model: ${DEFAULT_TEXT_MODEL})`)
|
|
57
|
+
.option("--model <model>", `Model identifier (default: ${DEFAULT_TEXT_MODEL})`)
|
|
58
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
59
|
+
.argument("[prompt]", "Generation prompt")
|
|
60
|
+
.action(async function (promptArg) {
|
|
61
|
+
const flags = resolveCommandFlags(program);
|
|
62
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
63
|
+
const design = createCliDesignLanguage(container.env);
|
|
64
|
+
const prompt = ensurePrompt(promptArg, { type: "text", isDefault: false });
|
|
65
|
+
const opts = resolveGenerateOptions(this);
|
|
66
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
67
|
+
const model = resolveModel("text", opts, container.env.variables);
|
|
68
|
+
if (flags.dryRun) {
|
|
69
|
+
resources.logger.dryRun(`Dry run: would generate text with model ${model} and prompt (${prompt.length} chars)`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
intro(design.text.intro("generate text"));
|
|
73
|
+
const client = await resolveClient(container);
|
|
74
|
+
const response = await withSpinner({
|
|
75
|
+
message: `Generating with ${model}...`,
|
|
76
|
+
fn: () => client.text({ model, prompt, params }),
|
|
77
|
+
stopMessage: () => model,
|
|
78
|
+
subtext: (r) => r.content
|
|
79
|
+
});
|
|
80
|
+
if (!response.content) {
|
|
81
|
+
throw new ValidationError("No response from LLM");
|
|
82
|
+
}
|
|
83
|
+
outro();
|
|
84
|
+
});
|
|
85
|
+
registerMediaSubcommand(generate, program, container, "image");
|
|
86
|
+
registerMediaSubcommand(generate, program, container, "video");
|
|
87
|
+
registerMediaSubcommand(generate, program, container, "audio");
|
|
88
|
+
}
|
|
89
|
+
function registerMediaSubcommand(generate, program, container, type) {
|
|
90
|
+
const defaultModel = DEFAULT_MODELS[type];
|
|
91
|
+
generate
|
|
92
|
+
.command(type)
|
|
93
|
+
.description(`Generate ${type} (default model: ${defaultModel})`)
|
|
94
|
+
.option("--model <model>", `Model identifier (default: ${defaultModel})`)
|
|
95
|
+
.option("--param <key=value>", "Additional parameters (repeatable)", collectParam, [])
|
|
96
|
+
.option("-o, --output <path>", "Output file path")
|
|
97
|
+
.argument("[prompt]", "Generation prompt")
|
|
98
|
+
.action(async function (promptArg) {
|
|
99
|
+
const flags = resolveCommandFlags(program);
|
|
100
|
+
const resources = createExecutionResources(container, flags, "generate");
|
|
101
|
+
const design = createCliDesignLanguage(container.env);
|
|
102
|
+
const prompt = ensurePrompt(promptArg, { type, isDefault: false });
|
|
103
|
+
const opts = resolveGenerateOptions(this);
|
|
104
|
+
const params = parseParams(normalizeParamList(opts.param));
|
|
105
|
+
const model = resolveModel(type, opts, container.env.variables);
|
|
106
|
+
if (flags.dryRun) {
|
|
107
|
+
resources.logger.dryRun(`Dry run: would generate ${type} with model ${model} and prompt (${prompt.length} chars)`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
intro(design.text.intro(`generate ${type}`));
|
|
111
|
+
const client = await resolveClient(container);
|
|
112
|
+
const saved = await withSpinner({
|
|
113
|
+
message: `Generating ${type} with ${model}...`,
|
|
114
|
+
fn: async () => {
|
|
115
|
+
const response = await client.media(type, { model, prompt, params });
|
|
116
|
+
if (!response.url) {
|
|
117
|
+
throw new ValidationError(buildMissingMediaMessage(type, model, response.content));
|
|
118
|
+
}
|
|
119
|
+
const mimeType = response.mimeType ?? getDefaultMimeType(type);
|
|
120
|
+
const filename = opts.output ?? generateFilename(type, mimeType);
|
|
121
|
+
const resolved = resolveOutputPath(filename, container.env.cwd);
|
|
122
|
+
try {
|
|
123
|
+
await downloadToFile({
|
|
124
|
+
url: response.url,
|
|
125
|
+
outputPath: resolved.path,
|
|
126
|
+
fs: container.fs
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (error instanceof MediaDownloadError) {
|
|
131
|
+
if (error.kind === "write") {
|
|
132
|
+
throw new ValidationError(`Cannot write to "${resolved.label}". Check the path exists and is writable.`);
|
|
133
|
+
}
|
|
134
|
+
throw new ValidationError(`Failed to download ${type} from URL.\nThe file may no longer be available or the URL may have expired.`);
|
|
135
|
+
}
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
return resolved;
|
|
139
|
+
},
|
|
140
|
+
stopMessage: () => `Generated ${type}`
|
|
141
|
+
});
|
|
142
|
+
outro(`Saved ${saved.label}`);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
export function parseParams(params) {
|
|
146
|
+
const result = {};
|
|
147
|
+
for (const param of params) {
|
|
148
|
+
const eqIndex = param.indexOf("=");
|
|
149
|
+
if (eqIndex === -1) {
|
|
150
|
+
throw new ValidationError(`Invalid param format: "${param}". Expected key=value`);
|
|
151
|
+
}
|
|
152
|
+
const key = param.slice(0, eqIndex);
|
|
153
|
+
const value = param.slice(eqIndex + 1);
|
|
154
|
+
result[key] = value;
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
function normalizeParamList(value) {
|
|
159
|
+
if (Array.isArray(value)) {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
if (typeof value === "string") {
|
|
163
|
+
return [value];
|
|
164
|
+
}
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
function resolveGenerateOptions(command) {
|
|
168
|
+
const current = command.opts();
|
|
169
|
+
const parent = command.parent?.opts() ?? {};
|
|
170
|
+
return {
|
|
171
|
+
model: current.model ?? parent.model,
|
|
172
|
+
param: mergeParamValues(current.param, parent.param),
|
|
173
|
+
output: current.output ?? parent.output
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function mergeParamValues(current, parent) {
|
|
177
|
+
const currentList = normalizeParamList(current);
|
|
178
|
+
const parentList = normalizeParamList(parent);
|
|
179
|
+
if (currentList.length === 0 && parentList.length === 0) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
return [...parentList, ...currentList];
|
|
183
|
+
}
|
|
184
|
+
function collectParam(value, previous) {
|
|
185
|
+
const list = Array.isArray(previous) ? [...previous] : [];
|
|
186
|
+
list.push(value);
|
|
187
|
+
return list;
|
|
188
|
+
}
|
|
189
|
+
async function withSpinner(options) {
|
|
190
|
+
const { message, fn, stopMessage, subtext } = options;
|
|
191
|
+
const noSpinner = process.env.POE_NO_SPINNER === "1";
|
|
192
|
+
const isTTY = process.stdout.isTTY;
|
|
193
|
+
if (noSpinner || !isTTY) {
|
|
194
|
+
const result = await fn();
|
|
195
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
196
|
+
if (msg) {
|
|
197
|
+
process.stdout.write(`\x1b[32m◆\x1b[0m ${msg}\n`);
|
|
198
|
+
}
|
|
199
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
200
|
+
if (sub) {
|
|
201
|
+
const lines = sub.split("\n");
|
|
202
|
+
for (const line of lines) {
|
|
203
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
const s = spinner();
|
|
209
|
+
s.start(message);
|
|
210
|
+
try {
|
|
211
|
+
const result = await fn();
|
|
212
|
+
const msg = stopMessage ? stopMessage(result) : undefined;
|
|
213
|
+
s.stop(msg);
|
|
214
|
+
const sub = subtext ? subtext(result) : undefined;
|
|
215
|
+
if (sub) {
|
|
216
|
+
const lines = sub.split("\n");
|
|
217
|
+
for (const line of lines) {
|
|
218
|
+
process.stdout.write(`\x1b[90m│\x1b[0m ${line}\n`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
s.stop("", 1);
|
|
225
|
+
throw error;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async function resolveClient(container) {
|
|
229
|
+
try {
|
|
230
|
+
return getGlobalClient();
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
const apiBaseUrl = resolveApiBaseUrl(container);
|
|
234
|
+
await initializeClient({
|
|
235
|
+
fs: container.fs,
|
|
236
|
+
credentialsPath: container.env.credentialsPath,
|
|
237
|
+
baseUrl: apiBaseUrl,
|
|
238
|
+
httpClient: container.httpClient
|
|
239
|
+
});
|
|
240
|
+
return getGlobalClient();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function resolveApiBaseUrl(container) {
|
|
244
|
+
const override = container.env.getVariable("POE_API_BASE_URL");
|
|
245
|
+
if (override && override.trim().length > 0) {
|
|
246
|
+
return override.trim();
|
|
247
|
+
}
|
|
248
|
+
return container.env.poeApiBaseUrl;
|
|
249
|
+
}
|
|
250
|
+
function resolveModel(type, options, variables) {
|
|
251
|
+
const envKey = MODEL_ENV_KEYS[type];
|
|
252
|
+
const envModel = normalizeEnvModel(variables ? variables[envKey] : undefined);
|
|
253
|
+
return options.model ?? envModel ?? DEFAULT_MODELS[type];
|
|
254
|
+
}
|
|
255
|
+
function normalizeEnvModel(value) {
|
|
256
|
+
if (typeof value !== "string") {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
const trimmed = value.trim();
|
|
260
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
261
|
+
}
|
|
262
|
+
function buildMissingMediaMessage(type, model, responseContent) {
|
|
263
|
+
const article = type === "video" ? "a" : "an";
|
|
264
|
+
const base = (`The model "${model}" did not return ${article} ${type}.` +
|
|
265
|
+
`\nThis model may not support ${type} generation. Try using a different model with --model.`);
|
|
266
|
+
const trimmed = responseContent?.trim();
|
|
267
|
+
if (trimmed && trimmed.length > 0) {
|
|
268
|
+
return `${base}\nResponse: ${trimmed}`;
|
|
269
|
+
}
|
|
270
|
+
return base;
|
|
271
|
+
}
|
|
272
|
+
function ensurePrompt(prompt, options) {
|
|
273
|
+
if (prompt && prompt.length > 0) {
|
|
274
|
+
return prompt;
|
|
275
|
+
}
|
|
276
|
+
const usage = options.isDefault
|
|
277
|
+
? "poe-code generate \"your prompt\""
|
|
278
|
+
: `poe-code generate ${options.type} "your prompt"`;
|
|
279
|
+
throw new ValidationError(`No prompt provided. Usage: ${usage}`);
|
|
280
|
+
}
|
|
281
|
+
function generateFilename(type, mimeType) {
|
|
282
|
+
const timestamp = Date.now();
|
|
283
|
+
const ext = mimeTypeToExt(mimeType);
|
|
284
|
+
return `${type}-${timestamp}.${ext}`;
|
|
285
|
+
}
|
|
286
|
+
function mimeTypeToExt(mimeType) {
|
|
287
|
+
const known = {
|
|
288
|
+
"image/png": "png",
|
|
289
|
+
"video/mp4": "mp4",
|
|
290
|
+
"audio/mp3": "mp3",
|
|
291
|
+
"audio/mpeg": "mp3"
|
|
292
|
+
};
|
|
293
|
+
const mapped = known[mimeType];
|
|
294
|
+
if (mapped) {
|
|
295
|
+
return mapped;
|
|
296
|
+
}
|
|
297
|
+
const slashIndex = mimeType.indexOf("/");
|
|
298
|
+
if (slashIndex === -1 || slashIndex === mimeType.length - 1) {
|
|
299
|
+
return "bin";
|
|
300
|
+
}
|
|
301
|
+
return mimeType.slice(slashIndex + 1);
|
|
302
|
+
}
|
|
303
|
+
function getDefaultMimeType(type) {
|
|
304
|
+
const defaults = {
|
|
305
|
+
image: "image/png",
|
|
306
|
+
video: "video/mp4",
|
|
307
|
+
audio: "audio/mp3"
|
|
308
|
+
};
|
|
309
|
+
return defaults[type];
|
|
310
|
+
}
|
|
311
|
+
function resolveOutputPath(filename, cwd) {
|
|
312
|
+
if (path.isAbsolute(filename)) {
|
|
313
|
+
return { path: filename, label: filename };
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
path: path.join(cwd, filename),
|
|
317
|
+
label: `./${filename}`
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
//# 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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"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter } from "./shared.js";
|
|
1
|
+
import { buildProviderContext, createExecutionResources, resolveCommandFlags, resolveServiceAdapter, formatServiceList } from "./shared.js";
|
|
2
2
|
import { resolveServiceArgument } from "./configure.js";
|
|
3
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)}`;
|
|
4
9
|
return program
|
|
5
10
|
.command("install")
|
|
6
|
-
.description("Install tooling for a configured
|
|
7
|
-
.argument("[
|
|
11
|
+
.description("Install tooling for a configured agent.")
|
|
12
|
+
.argument("[agent]", serviceDescription)
|
|
8
13
|
.action(async (service) => {
|
|
9
|
-
const resolved = await resolveServiceArgument(program, container, service);
|
|
14
|
+
const resolved = await resolveServiceArgument(program, container, service, { action: "install" });
|
|
10
15
|
await executeInstall(program, container, resolved);
|
|
11
16
|
});
|
|
12
17
|
}
|
|
@@ -19,7 +24,7 @@ export async function executeInstall(program, container, service) {
|
|
|
19
24
|
const providerContext = buildProviderContext(container, adapter, resources);
|
|
20
25
|
await container.registry.invoke(canonicalService, "install", async (entry) => {
|
|
21
26
|
if (!entry.install) {
|
|
22
|
-
throw new Error(`
|
|
27
|
+
throw new Error(`Agent "${canonicalService}" does not support install.`);
|
|
23
28
|
}
|
|
24
29
|
await entry.install(providerContext);
|
|
25
30
|
});
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -18,6 +18,7 @@ export declare function createExecutionResources(container: CliContainer, flags:
|
|
|
18
18
|
export declare function buildProviderContext(container: CliContainer, adapter: ProviderService, resources: ExecutionResources): ProviderContext;
|
|
19
19
|
export declare function listIsolatedServiceIds(container: CliContainer): string[];
|
|
20
20
|
export declare function resolveServiceAdapter(container: CliContainer, service: string): ProviderService;
|
|
21
|
+
export declare function formatServiceList(names: string[]): string;
|
|
21
22
|
export declare function applyIsolatedConfiguration(input: {
|
|
22
23
|
adapter: ProviderService;
|
|
23
24
|
providerContext: ProviderContext;
|
|
@@ -52,10 +52,17 @@ export function listIsolatedServiceIds(container) {
|
|
|
52
52
|
export function resolveServiceAdapter(container, service) {
|
|
53
53
|
const adapter = container.registry.get(service);
|
|
54
54
|
if (!adapter) {
|
|
55
|
-
throw new Error(`Unknown
|
|
55
|
+
throw new Error(`Unknown agent "${service}".`);
|
|
56
56
|
}
|
|
57
57
|
return adapter;
|
|
58
58
|
}
|
|
59
|
+
export function formatServiceList(names) {
|
|
60
|
+
const unique = Array.from(new Set(names.filter((name) => name.length > 0)));
|
|
61
|
+
if (unique.length === 0) {
|
|
62
|
+
return "";
|
|
63
|
+
}
|
|
64
|
+
return ` (${unique.join(" | ")})`;
|
|
65
|
+
}
|
|
59
66
|
export async function applyIsolatedConfiguration(input) {
|
|
60
67
|
await input.adapter.configure({
|
|
61
68
|
fs: input.providerContext.command.fs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/commands/shared.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,0BAA0B,EAE3B,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAapE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAuB,EACvB,KAAmB,EACnB,KAAa;IAEb,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK;KACN,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,UAAU;QAClB,MAAM;KACP,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAuB,EACvB,OAAwB,EACxB,SAA6B;IAE7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO;QACL,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,SAA6B;IAE7B,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,KAAK,CAAC,GAAG,CAAC;YACd,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;YACzC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,UAAU;YACxC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;SACzD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAuB;IAC5D,OAAO,SAAS,CAAC,QAAQ;SACtB,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;SACnD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAuB,EACvB,OAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/commands/shared.ts"],"names":[],"mappings":"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"}
|