imgx-cli 0.5.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +24 -62
- package/dist/cli.bundle.js +321 -104
- package/dist/mcp.bundle.js +314 -97
- package/package.json +2 -1
package/dist/cli.bundle.js
CHANGED
|
@@ -303,7 +303,7 @@ var require_p_retry = __commonJS({
|
|
|
303
303
|
return error;
|
|
304
304
|
};
|
|
305
305
|
var isNetworkError = (errorMessage) => networkErrorMsgs.includes(errorMessage);
|
|
306
|
-
var pRetry2 = (input, options) => new Promise((
|
|
306
|
+
var pRetry2 = (input, options) => new Promise((resolve5, reject) => {
|
|
307
307
|
options = {
|
|
308
308
|
onFailedAttempt: () => {
|
|
309
309
|
},
|
|
@@ -313,7 +313,7 @@ var require_p_retry = __commonJS({
|
|
|
313
313
|
const operation = retry.operation(options);
|
|
314
314
|
operation.attempt(async (attemptNumber) => {
|
|
315
315
|
try {
|
|
316
|
-
|
|
316
|
+
resolve5(await input(attemptNumber));
|
|
317
317
|
} catch (error) {
|
|
318
318
|
if (!(error instanceof Error)) {
|
|
319
319
|
reject(new TypeError(`Non-error was thrown: "${error}". You should only throw errors.`));
|
|
@@ -850,8 +850,8 @@ var require_retry3 = __commonJS({
|
|
|
850
850
|
}
|
|
851
851
|
const delay = getNextRetryDelay(config);
|
|
852
852
|
err.config.retryConfig.currentRetryAttempt += 1;
|
|
853
|
-
const backoff = config.retryBackoff ? config.retryBackoff(err, delay) : new Promise((
|
|
854
|
-
setTimeout(
|
|
853
|
+
const backoff = config.retryBackoff ? config.retryBackoff(err, delay) : new Promise((resolve5) => {
|
|
854
|
+
setTimeout(resolve5, delay);
|
|
855
855
|
});
|
|
856
856
|
if (config.onRetryAttempt) {
|
|
857
857
|
await config.onRetryAttempt(err);
|
|
@@ -1627,8 +1627,8 @@ var require_helpers = __commonJS({
|
|
|
1627
1627
|
function req(url, opts = {}) {
|
|
1628
1628
|
const href = typeof url === "string" ? url : url.href;
|
|
1629
1629
|
const req2 = (href.startsWith("https:") ? https2 : http3).request(url, opts);
|
|
1630
|
-
const promise = new Promise((
|
|
1631
|
-
req2.once("response",
|
|
1630
|
+
const promise = new Promise((resolve5, reject) => {
|
|
1631
|
+
req2.once("response", resolve5).once("error", reject).end();
|
|
1632
1632
|
});
|
|
1633
1633
|
req2.then = promise.then.bind(promise);
|
|
1634
1634
|
return req2;
|
|
@@ -1805,7 +1805,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
1805
1805
|
var debug_1 = __importDefault(require_src());
|
|
1806
1806
|
var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
|
|
1807
1807
|
function parseProxyResponse(socket) {
|
|
1808
|
-
return new Promise((
|
|
1808
|
+
return new Promise((resolve5, reject) => {
|
|
1809
1809
|
let buffersLength = 0;
|
|
1810
1810
|
const buffers = [];
|
|
1811
1811
|
function read() {
|
|
@@ -1871,7 +1871,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
1871
1871
|
}
|
|
1872
1872
|
debug("got proxy server response: %o %o", firstLine, headers);
|
|
1873
1873
|
cleanup();
|
|
1874
|
-
|
|
1874
|
+
resolve5({
|
|
1875
1875
|
connect: {
|
|
1876
1876
|
statusCode,
|
|
1877
1877
|
statusText,
|
|
@@ -2113,7 +2113,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
2113
2113
|
return new originalPromise(executor);
|
|
2114
2114
|
}
|
|
2115
2115
|
function promiseResolvedWith(value) {
|
|
2116
|
-
return newPromise((
|
|
2116
|
+
return newPromise((resolve5) => resolve5(value));
|
|
2117
2117
|
}
|
|
2118
2118
|
function promiseRejectedWith(reason) {
|
|
2119
2119
|
return originalPromiseReject(reason);
|
|
@@ -2283,8 +2283,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
2283
2283
|
return new TypeError("Cannot " + name + " a stream using a released reader");
|
|
2284
2284
|
}
|
|
2285
2285
|
function defaultReaderClosedPromiseInitialize(reader) {
|
|
2286
|
-
reader._closedPromise = newPromise((
|
|
2287
|
-
reader._closedPromise_resolve =
|
|
2286
|
+
reader._closedPromise = newPromise((resolve5, reject) => {
|
|
2287
|
+
reader._closedPromise_resolve = resolve5;
|
|
2288
2288
|
reader._closedPromise_reject = reject;
|
|
2289
2289
|
});
|
|
2290
2290
|
}
|
|
@@ -2458,8 +2458,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
2458
2458
|
}
|
|
2459
2459
|
let resolvePromise;
|
|
2460
2460
|
let rejectPromise;
|
|
2461
|
-
const promise = newPromise((
|
|
2462
|
-
resolvePromise =
|
|
2461
|
+
const promise = newPromise((resolve5, reject) => {
|
|
2462
|
+
resolvePromise = resolve5;
|
|
2463
2463
|
rejectPromise = reject;
|
|
2464
2464
|
});
|
|
2465
2465
|
const readRequest = {
|
|
@@ -2564,8 +2564,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
2564
2564
|
const reader = this._reader;
|
|
2565
2565
|
let resolvePromise;
|
|
2566
2566
|
let rejectPromise;
|
|
2567
|
-
const promise = newPromise((
|
|
2568
|
-
resolvePromise =
|
|
2567
|
+
const promise = newPromise((resolve5, reject) => {
|
|
2568
|
+
resolvePromise = resolve5;
|
|
2569
2569
|
rejectPromise = reject;
|
|
2570
2570
|
});
|
|
2571
2571
|
const readRequest = {
|
|
@@ -3584,8 +3584,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
3584
3584
|
}
|
|
3585
3585
|
let resolvePromise;
|
|
3586
3586
|
let rejectPromise;
|
|
3587
|
-
const promise = newPromise((
|
|
3588
|
-
resolvePromise =
|
|
3587
|
+
const promise = newPromise((resolve5, reject) => {
|
|
3588
|
+
resolvePromise = resolve5;
|
|
3589
3589
|
rejectPromise = reject;
|
|
3590
3590
|
});
|
|
3591
3591
|
const readIntoRequest = {
|
|
@@ -3897,10 +3897,10 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
3897
3897
|
wasAlreadyErroring = true;
|
|
3898
3898
|
reason = void 0;
|
|
3899
3899
|
}
|
|
3900
|
-
const promise = newPromise((
|
|
3900
|
+
const promise = newPromise((resolve5, reject) => {
|
|
3901
3901
|
stream._pendingAbortRequest = {
|
|
3902
3902
|
_promise: void 0,
|
|
3903
|
-
_resolve:
|
|
3903
|
+
_resolve: resolve5,
|
|
3904
3904
|
_reject: reject,
|
|
3905
3905
|
_reason: reason,
|
|
3906
3906
|
_wasAlreadyErroring: wasAlreadyErroring
|
|
@@ -3917,9 +3917,9 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
3917
3917
|
if (state === "closed" || state === "errored") {
|
|
3918
3918
|
return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));
|
|
3919
3919
|
}
|
|
3920
|
-
const promise = newPromise((
|
|
3920
|
+
const promise = newPromise((resolve5, reject) => {
|
|
3921
3921
|
const closeRequest = {
|
|
3922
|
-
_resolve:
|
|
3922
|
+
_resolve: resolve5,
|
|
3923
3923
|
_reject: reject
|
|
3924
3924
|
};
|
|
3925
3925
|
stream._closeRequest = closeRequest;
|
|
@@ -3932,9 +3932,9 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
3932
3932
|
return promise;
|
|
3933
3933
|
}
|
|
3934
3934
|
function WritableStreamAddWriteRequest(stream) {
|
|
3935
|
-
const promise = newPromise((
|
|
3935
|
+
const promise = newPromise((resolve5, reject) => {
|
|
3936
3936
|
const writeRequest = {
|
|
3937
|
-
_resolve:
|
|
3937
|
+
_resolve: resolve5,
|
|
3938
3938
|
_reject: reject
|
|
3939
3939
|
};
|
|
3940
3940
|
stream._writeRequests.push(writeRequest);
|
|
@@ -4550,8 +4550,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
4550
4550
|
return new TypeError("Cannot " + name + " a stream using a released writer");
|
|
4551
4551
|
}
|
|
4552
4552
|
function defaultWriterClosedPromiseInitialize(writer) {
|
|
4553
|
-
writer._closedPromise = newPromise((
|
|
4554
|
-
writer._closedPromise_resolve =
|
|
4553
|
+
writer._closedPromise = newPromise((resolve5, reject) => {
|
|
4554
|
+
writer._closedPromise_resolve = resolve5;
|
|
4555
4555
|
writer._closedPromise_reject = reject;
|
|
4556
4556
|
writer._closedPromiseState = "pending";
|
|
4557
4557
|
});
|
|
@@ -4587,8 +4587,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
4587
4587
|
writer._closedPromiseState = "resolved";
|
|
4588
4588
|
}
|
|
4589
4589
|
function defaultWriterReadyPromiseInitialize(writer) {
|
|
4590
|
-
writer._readyPromise = newPromise((
|
|
4591
|
-
writer._readyPromise_resolve =
|
|
4590
|
+
writer._readyPromise = newPromise((resolve5, reject) => {
|
|
4591
|
+
writer._readyPromise_resolve = resolve5;
|
|
4592
4592
|
writer._readyPromise_reject = reject;
|
|
4593
4593
|
});
|
|
4594
4594
|
writer._readyPromiseState = "pending";
|
|
@@ -4675,7 +4675,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
4675
4675
|
source._disturbed = true;
|
|
4676
4676
|
let shuttingDown = false;
|
|
4677
4677
|
let currentWrite = promiseResolvedWith(void 0);
|
|
4678
|
-
return newPromise((
|
|
4678
|
+
return newPromise((resolve5, reject) => {
|
|
4679
4679
|
let abortAlgorithm;
|
|
4680
4680
|
if (signal !== void 0) {
|
|
4681
4681
|
abortAlgorithm = () => {
|
|
@@ -4820,7 +4820,7 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
4820
4820
|
if (isError) {
|
|
4821
4821
|
reject(error);
|
|
4822
4822
|
} else {
|
|
4823
|
-
|
|
4823
|
+
resolve5(void 0);
|
|
4824
4824
|
}
|
|
4825
4825
|
return null;
|
|
4826
4826
|
}
|
|
@@ -5101,8 +5101,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
5101
5101
|
let branch1;
|
|
5102
5102
|
let branch2;
|
|
5103
5103
|
let resolveCancelPromise;
|
|
5104
|
-
const cancelPromise = newPromise((
|
|
5105
|
-
resolveCancelPromise =
|
|
5104
|
+
const cancelPromise = newPromise((resolve5) => {
|
|
5105
|
+
resolveCancelPromise = resolve5;
|
|
5106
5106
|
});
|
|
5107
5107
|
function pullAlgorithm() {
|
|
5108
5108
|
if (reading) {
|
|
@@ -5193,8 +5193,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
5193
5193
|
let branch1;
|
|
5194
5194
|
let branch2;
|
|
5195
5195
|
let resolveCancelPromise;
|
|
5196
|
-
const cancelPromise = newPromise((
|
|
5197
|
-
resolveCancelPromise =
|
|
5196
|
+
const cancelPromise = newPromise((resolve5) => {
|
|
5197
|
+
resolveCancelPromise = resolve5;
|
|
5198
5198
|
});
|
|
5199
5199
|
function forwardReaderError(thisReader) {
|
|
5200
5200
|
uponRejection(thisReader._closedPromise, (r2) => {
|
|
@@ -5974,8 +5974,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
5974
5974
|
const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);
|
|
5975
5975
|
const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);
|
|
5976
5976
|
let startPromise_resolve;
|
|
5977
|
-
const startPromise = newPromise((
|
|
5978
|
-
startPromise_resolve =
|
|
5977
|
+
const startPromise = newPromise((resolve5) => {
|
|
5978
|
+
startPromise_resolve = resolve5;
|
|
5979
5979
|
});
|
|
5980
5980
|
InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);
|
|
5981
5981
|
SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);
|
|
@@ -6068,8 +6068,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
6068
6068
|
if (stream._backpressureChangePromise !== void 0) {
|
|
6069
6069
|
stream._backpressureChangePromise_resolve();
|
|
6070
6070
|
}
|
|
6071
|
-
stream._backpressureChangePromise = newPromise((
|
|
6072
|
-
stream._backpressureChangePromise_resolve =
|
|
6071
|
+
stream._backpressureChangePromise = newPromise((resolve5) => {
|
|
6072
|
+
stream._backpressureChangePromise_resolve = resolve5;
|
|
6073
6073
|
});
|
|
6074
6074
|
stream._backpressure = backpressure;
|
|
6075
6075
|
}
|
|
@@ -6237,8 +6237,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
6237
6237
|
return controller._finishPromise;
|
|
6238
6238
|
}
|
|
6239
6239
|
const readable = stream._readable;
|
|
6240
|
-
controller._finishPromise = newPromise((
|
|
6241
|
-
controller._finishPromise_resolve =
|
|
6240
|
+
controller._finishPromise = newPromise((resolve5, reject) => {
|
|
6241
|
+
controller._finishPromise_resolve = resolve5;
|
|
6242
6242
|
controller._finishPromise_reject = reject;
|
|
6243
6243
|
});
|
|
6244
6244
|
const cancelPromise = controller._cancelAlgorithm(reason);
|
|
@@ -6264,8 +6264,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
6264
6264
|
return controller._finishPromise;
|
|
6265
6265
|
}
|
|
6266
6266
|
const readable = stream._readable;
|
|
6267
|
-
controller._finishPromise = newPromise((
|
|
6268
|
-
controller._finishPromise_resolve =
|
|
6267
|
+
controller._finishPromise = newPromise((resolve5, reject) => {
|
|
6268
|
+
controller._finishPromise_resolve = resolve5;
|
|
6269
6269
|
controller._finishPromise_reject = reject;
|
|
6270
6270
|
});
|
|
6271
6271
|
const flushPromise = controller._flushAlgorithm();
|
|
@@ -6295,8 +6295,8 @@ var require_ponyfill_es2018 = __commonJS({
|
|
|
6295
6295
|
return controller._finishPromise;
|
|
6296
6296
|
}
|
|
6297
6297
|
const writable = stream._writable;
|
|
6298
|
-
controller._finishPromise = newPromise((
|
|
6299
|
-
controller._finishPromise_resolve =
|
|
6298
|
+
controller._finishPromise = newPromise((resolve5, reject) => {
|
|
6299
|
+
controller._finishPromise_resolve = resolve5;
|
|
6300
6300
|
controller._finishPromise_reject = reject;
|
|
6301
6301
|
});
|
|
6302
6302
|
const cancelPromise = controller._cancelAlgorithm(reason);
|
|
@@ -8247,7 +8247,7 @@ import zlib from "node:zlib";
|
|
|
8247
8247
|
import Stream2, { PassThrough as PassThrough2, pipeline as pump } from "node:stream";
|
|
8248
8248
|
import { Buffer as Buffer3 } from "node:buffer";
|
|
8249
8249
|
async function fetch2(url, options_) {
|
|
8250
|
-
return new Promise((
|
|
8250
|
+
return new Promise((resolve5, reject) => {
|
|
8251
8251
|
const request = new Request(url, options_);
|
|
8252
8252
|
const { parsedURL, options } = getNodeRequestOptions(request);
|
|
8253
8253
|
if (!supportedSchemas.has(parsedURL.protocol)) {
|
|
@@ -8256,7 +8256,7 @@ async function fetch2(url, options_) {
|
|
|
8256
8256
|
if (parsedURL.protocol === "data:") {
|
|
8257
8257
|
const data = dist_default(request.url);
|
|
8258
8258
|
const response2 = new Response2(data, { headers: { "Content-Type": data.typeFull } });
|
|
8259
|
-
|
|
8259
|
+
resolve5(response2);
|
|
8260
8260
|
return;
|
|
8261
8261
|
}
|
|
8262
8262
|
const send = (parsedURL.protocol === "https:" ? https : http2).request;
|
|
@@ -8378,7 +8378,7 @@ async function fetch2(url, options_) {
|
|
|
8378
8378
|
if (responseReferrerPolicy) {
|
|
8379
8379
|
requestOptions.referrerPolicy = responseReferrerPolicy;
|
|
8380
8380
|
}
|
|
8381
|
-
|
|
8381
|
+
resolve5(fetch2(new Request(locationURL, requestOptions)));
|
|
8382
8382
|
finalize();
|
|
8383
8383
|
return;
|
|
8384
8384
|
}
|
|
@@ -8411,7 +8411,7 @@ async function fetch2(url, options_) {
|
|
|
8411
8411
|
const codings = headers.get("Content-Encoding");
|
|
8412
8412
|
if (!request.compress || request.method === "HEAD" || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {
|
|
8413
8413
|
response = new Response2(body, responseOptions);
|
|
8414
|
-
|
|
8414
|
+
resolve5(response);
|
|
8415
8415
|
return;
|
|
8416
8416
|
}
|
|
8417
8417
|
const zlibOptions = {
|
|
@@ -8425,7 +8425,7 @@ async function fetch2(url, options_) {
|
|
|
8425
8425
|
}
|
|
8426
8426
|
});
|
|
8427
8427
|
response = new Response2(body, responseOptions);
|
|
8428
|
-
|
|
8428
|
+
resolve5(response);
|
|
8429
8429
|
return;
|
|
8430
8430
|
}
|
|
8431
8431
|
if (codings === "deflate" || codings === "x-deflate") {
|
|
@@ -8449,12 +8449,12 @@ async function fetch2(url, options_) {
|
|
|
8449
8449
|
});
|
|
8450
8450
|
}
|
|
8451
8451
|
response = new Response2(body, responseOptions);
|
|
8452
|
-
|
|
8452
|
+
resolve5(response);
|
|
8453
8453
|
});
|
|
8454
8454
|
raw.once("end", () => {
|
|
8455
8455
|
if (!response) {
|
|
8456
8456
|
response = new Response2(body, responseOptions);
|
|
8457
|
-
|
|
8457
|
+
resolve5(response);
|
|
8458
8458
|
}
|
|
8459
8459
|
});
|
|
8460
8460
|
return;
|
|
@@ -8466,11 +8466,11 @@ async function fetch2(url, options_) {
|
|
|
8466
8466
|
}
|
|
8467
8467
|
});
|
|
8468
8468
|
response = new Response2(body, responseOptions);
|
|
8469
|
-
|
|
8469
|
+
resolve5(response);
|
|
8470
8470
|
return;
|
|
8471
8471
|
}
|
|
8472
8472
|
response = new Response2(body, responseOptions);
|
|
8473
|
-
|
|
8473
|
+
resolve5(response);
|
|
8474
8474
|
});
|
|
8475
8475
|
writeToStream(request_, request).catch(reject);
|
|
8476
8476
|
});
|
|
@@ -14540,7 +14540,7 @@ var require_jwtaccess = __commonJS({
|
|
|
14540
14540
|
}
|
|
14541
14541
|
}
|
|
14542
14542
|
fromStreamAsync(inputStream) {
|
|
14543
|
-
return new Promise((
|
|
14543
|
+
return new Promise((resolve5, reject) => {
|
|
14544
14544
|
if (!inputStream) {
|
|
14545
14545
|
reject(new Error("Must pass in a stream containing the service account auth settings."));
|
|
14546
14546
|
}
|
|
@@ -14549,7 +14549,7 @@ var require_jwtaccess = __commonJS({
|
|
|
14549
14549
|
try {
|
|
14550
14550
|
const data = JSON.parse(s2);
|
|
14551
14551
|
this.fromJSON(data);
|
|
14552
|
-
|
|
14552
|
+
resolve5();
|
|
14553
14553
|
} catch (err) {
|
|
14554
14554
|
reject(err);
|
|
14555
14555
|
}
|
|
@@ -14788,7 +14788,7 @@ var require_jwtclient = __commonJS({
|
|
|
14788
14788
|
}
|
|
14789
14789
|
}
|
|
14790
14790
|
fromStreamAsync(inputStream) {
|
|
14791
|
-
return new Promise((
|
|
14791
|
+
return new Promise((resolve5, reject) => {
|
|
14792
14792
|
if (!inputStream) {
|
|
14793
14793
|
throw new Error("Must pass in a stream containing the service account auth settings.");
|
|
14794
14794
|
}
|
|
@@ -14797,7 +14797,7 @@ var require_jwtclient = __commonJS({
|
|
|
14797
14797
|
try {
|
|
14798
14798
|
const data = JSON.parse(s2);
|
|
14799
14799
|
this.fromJSON(data);
|
|
14800
|
-
|
|
14800
|
+
resolve5();
|
|
14801
14801
|
} catch (e2) {
|
|
14802
14802
|
reject(e2);
|
|
14803
14803
|
}
|
|
@@ -14930,7 +14930,7 @@ var require_refreshclient = __commonJS({
|
|
|
14930
14930
|
}
|
|
14931
14931
|
}
|
|
14932
14932
|
async fromStreamAsync(inputStream) {
|
|
14933
|
-
return new Promise((
|
|
14933
|
+
return new Promise((resolve5, reject) => {
|
|
14934
14934
|
if (!inputStream) {
|
|
14935
14935
|
return reject(new Error("Must pass in a stream containing the user refresh token."));
|
|
14936
14936
|
}
|
|
@@ -14939,7 +14939,7 @@ var require_refreshclient = __commonJS({
|
|
|
14939
14939
|
try {
|
|
14940
14940
|
const data = JSON.parse(s2);
|
|
14941
14941
|
this.fromJSON(data);
|
|
14942
|
-
return
|
|
14942
|
+
return resolve5();
|
|
14943
14943
|
} catch (err) {
|
|
14944
14944
|
return reject(err);
|
|
14945
14945
|
}
|
|
@@ -16772,7 +16772,7 @@ var require_pluggable_auth_handler = __commonJS({
|
|
|
16772
16772
|
* @return A promise that resolves with the executable response.
|
|
16773
16773
|
*/
|
|
16774
16774
|
retrieveResponseFromExecutable(envMap) {
|
|
16775
|
-
return new Promise((
|
|
16775
|
+
return new Promise((resolve5, reject) => {
|
|
16776
16776
|
const child = childProcess.spawn(this.commandComponents[0], this.commandComponents.slice(1), {
|
|
16777
16777
|
env: { ...process.env, ...Object.fromEntries(envMap) }
|
|
16778
16778
|
});
|
|
@@ -16794,7 +16794,7 @@ var require_pluggable_auth_handler = __commonJS({
|
|
|
16794
16794
|
try {
|
|
16795
16795
|
const responseJson = JSON.parse(output);
|
|
16796
16796
|
const response = new executable_response_1.ExecutableResponse(responseJson);
|
|
16797
|
-
return
|
|
16797
|
+
return resolve5(response);
|
|
16798
16798
|
} catch (error) {
|
|
16799
16799
|
if (error instanceof executable_response_1.ExecutableResponseError) {
|
|
16800
16800
|
return reject(error);
|
|
@@ -17697,7 +17697,7 @@ var require_googleauth = __commonJS({
|
|
|
17697
17697
|
}
|
|
17698
17698
|
}
|
|
17699
17699
|
fromStreamAsync(inputStream, options) {
|
|
17700
|
-
return new Promise((
|
|
17700
|
+
return new Promise((resolve5, reject) => {
|
|
17701
17701
|
if (!inputStream) {
|
|
17702
17702
|
throw new Error("Must pass in a stream containing the Google auth settings.");
|
|
17703
17703
|
}
|
|
@@ -17707,7 +17707,7 @@ var require_googleauth = __commonJS({
|
|
|
17707
17707
|
try {
|
|
17708
17708
|
const data = JSON.parse(chunks.join(""));
|
|
17709
17709
|
const r2 = this._cacheClientFromJSON(data, options);
|
|
17710
|
-
return
|
|
17710
|
+
return resolve5(r2);
|
|
17711
17711
|
} catch (err) {
|
|
17712
17712
|
if (!this.keyFilename)
|
|
17713
17713
|
throw err;
|
|
@@ -17717,7 +17717,7 @@ var require_googleauth = __commonJS({
|
|
|
17717
17717
|
});
|
|
17718
17718
|
this.cachedCredential = client;
|
|
17719
17719
|
this.setGapicJWTValues(client);
|
|
17720
|
-
return
|
|
17720
|
+
return resolve5(client);
|
|
17721
17721
|
}
|
|
17722
17722
|
} catch (err) {
|
|
17723
17723
|
return reject(err);
|
|
@@ -17753,17 +17753,17 @@ var require_googleauth = __commonJS({
|
|
|
17753
17753
|
* Run the Google Cloud SDK command that prints the default project ID
|
|
17754
17754
|
*/
|
|
17755
17755
|
async getDefaultServiceProjectId() {
|
|
17756
|
-
return new Promise((
|
|
17756
|
+
return new Promise((resolve5) => {
|
|
17757
17757
|
(0, child_process_1.exec)("gcloud config config-helper --format json", (err, stdout) => {
|
|
17758
17758
|
if (!err && stdout) {
|
|
17759
17759
|
try {
|
|
17760
17760
|
const projectId = JSON.parse(stdout).configuration.properties.core.project;
|
|
17761
|
-
|
|
17761
|
+
resolve5(projectId);
|
|
17762
17762
|
return;
|
|
17763
17763
|
} catch (e2) {
|
|
17764
17764
|
}
|
|
17765
17765
|
}
|
|
17766
|
-
|
|
17766
|
+
resolve5(null);
|
|
17767
17767
|
});
|
|
17768
17768
|
});
|
|
17769
17769
|
}
|
|
@@ -22081,9 +22081,12 @@ function saveConfig(config) {
|
|
|
22081
22081
|
}
|
|
22082
22082
|
}
|
|
22083
22083
|
function resolveApiKey(providerName) {
|
|
22084
|
-
|
|
22085
|
-
|
|
22086
|
-
|
|
22084
|
+
const envMap = {
|
|
22085
|
+
gemini: process.env.GEMINI_API_KEY,
|
|
22086
|
+
openai: process.env.OPENAI_API_KEY
|
|
22087
|
+
};
|
|
22088
|
+
if (envMap[providerName])
|
|
22089
|
+
return envMap[providerName];
|
|
22087
22090
|
const config = loadConfig();
|
|
22088
22091
|
return config.providers?.[providerName]?.apiKey;
|
|
22089
22092
|
}
|
|
@@ -26893,14 +26896,14 @@ function __asyncValues(o) {
|
|
|
26893
26896
|
}, i2);
|
|
26894
26897
|
function verb(n) {
|
|
26895
26898
|
i2[n] = o[n] && function(v) {
|
|
26896
|
-
return new Promise(function(
|
|
26897
|
-
v = o[n](v), settle(
|
|
26899
|
+
return new Promise(function(resolve5, reject) {
|
|
26900
|
+
v = o[n](v), settle(resolve5, reject, v.done, v.value);
|
|
26898
26901
|
});
|
|
26899
26902
|
};
|
|
26900
26903
|
}
|
|
26901
|
-
function settle(
|
|
26904
|
+
function settle(resolve5, reject, d, v) {
|
|
26902
26905
|
Promise.resolve(v).then(function(v2) {
|
|
26903
|
-
|
|
26906
|
+
resolve5({ value: v2, done: d });
|
|
26904
26907
|
}, reject);
|
|
26905
26908
|
}
|
|
26906
26909
|
}
|
|
@@ -32871,8 +32874,8 @@ var LiveMusic = class {
|
|
|
32871
32874
|
const url = `${websocketBaseUrl}/ws/google.ai.generativelanguage.${apiVersion}.GenerativeService.BidiGenerateMusic?key=${apiKey}`;
|
|
32872
32875
|
let onopenResolve = () => {
|
|
32873
32876
|
};
|
|
32874
|
-
const onopenPromise = new Promise((
|
|
32875
|
-
onopenResolve =
|
|
32877
|
+
const onopenPromise = new Promise((resolve5) => {
|
|
32878
|
+
onopenResolve = resolve5;
|
|
32876
32879
|
});
|
|
32877
32880
|
const callbacks = params.callbacks;
|
|
32878
32881
|
const onopenAwaitedCallback = function() {
|
|
@@ -33112,8 +33115,8 @@ var Live = class {
|
|
|
33112
33115
|
}
|
|
33113
33116
|
let onopenResolve = () => {
|
|
33114
33117
|
};
|
|
33115
|
-
const onopenPromise = new Promise((
|
|
33116
|
-
onopenResolve =
|
|
33118
|
+
const onopenPromise = new Promise((resolve5) => {
|
|
33119
|
+
onopenResolve = resolve5;
|
|
33117
33120
|
});
|
|
33118
33121
|
const callbacks = params.callbacks;
|
|
33119
33122
|
const onopenAwaitedCallback = function() {
|
|
@@ -36055,7 +36058,7 @@ var safeJSON = (text) => {
|
|
|
36055
36058
|
return void 0;
|
|
36056
36059
|
}
|
|
36057
36060
|
};
|
|
36058
|
-
var sleep$1 = (ms) => new Promise((
|
|
36061
|
+
var sleep$1 = (ms) => new Promise((resolve5) => setTimeout(resolve5, ms));
|
|
36059
36062
|
var VERSION = "0.0.1";
|
|
36060
36063
|
function getDetectedPlatform() {
|
|
36061
36064
|
if (typeof Deno !== "undefined" && Deno.build != null) {
|
|
@@ -36975,8 +36978,8 @@ async function defaultParseResponse(client, props) {
|
|
|
36975
36978
|
}
|
|
36976
36979
|
var APIPromise = class _APIPromise extends Promise {
|
|
36977
36980
|
constructor(client, responsePromise, parseResponse = defaultParseResponse) {
|
|
36978
|
-
super((
|
|
36979
|
-
|
|
36981
|
+
super((resolve5) => {
|
|
36982
|
+
resolve5(null);
|
|
36980
36983
|
});
|
|
36981
36984
|
this.responsePromise = responsePromise;
|
|
36982
36985
|
this.parseResponse = parseResponse;
|
|
@@ -39207,8 +39210,9 @@ function getApiKeyFromEnv() {
|
|
|
39207
39210
|
|
|
39208
39211
|
// build/core/storage.js
|
|
39209
39212
|
import { readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "node:fs";
|
|
39210
|
-
import { dirname, resolve as resolve2 } from "node:path";
|
|
39213
|
+
import { dirname, join as join2, resolve as resolve2 } from "node:path";
|
|
39211
39214
|
import { randomUUID } from "node:crypto";
|
|
39215
|
+
import { homedir as homedir2 } from "node:os";
|
|
39212
39216
|
var MIME_TO_EXT = {
|
|
39213
39217
|
"image/png": ".png",
|
|
39214
39218
|
"image/jpeg": ".jpg",
|
|
@@ -39221,9 +39225,17 @@ function readImageAsBase64(filePath) {
|
|
|
39221
39225
|
const mimeType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
|
|
39222
39226
|
return { data: buffer.toString("base64"), mimeType };
|
|
39223
39227
|
}
|
|
39228
|
+
function fallbackOutputDir(outputDir) {
|
|
39229
|
+
if (outputDir)
|
|
39230
|
+
return outputDir;
|
|
39231
|
+
const configured = resolveDefault("outputDir");
|
|
39232
|
+
if (configured)
|
|
39233
|
+
return configured;
|
|
39234
|
+
return join2(homedir2(), "Pictures", "imgx");
|
|
39235
|
+
}
|
|
39224
39236
|
function saveImage(image, outputPath, outputDir) {
|
|
39225
39237
|
const ext = MIME_TO_EXT[image.mimeType] || ".png";
|
|
39226
|
-
const filePath = outputPath ? resolve2(outputPath) : resolve2(outputDir
|
|
39238
|
+
const filePath = outputPath ? resolve2(outputPath) : resolve2(fallbackOutputDir(outputDir), `imgx-${randomUUID().slice(0, 8)}${ext}`);
|
|
39227
39239
|
mkdirSync2(dirname(filePath), { recursive: true });
|
|
39228
39240
|
writeFileSync2(filePath, image.data);
|
|
39229
39241
|
return filePath;
|
|
@@ -39359,9 +39371,191 @@ function initGemini() {
|
|
|
39359
39371
|
registerProvider(new GeminiProvider(apiKey));
|
|
39360
39372
|
}
|
|
39361
39373
|
|
|
39374
|
+
// build/providers/openai/client.js
|
|
39375
|
+
import { readFileSync as readFileSync3 } from "node:fs";
|
|
39376
|
+
import { resolve as resolve3 } from "node:path";
|
|
39377
|
+
|
|
39378
|
+
// build/providers/openai/capabilities.js
|
|
39379
|
+
var OPENAI_PROVIDER_INFO = {
|
|
39380
|
+
name: "openai",
|
|
39381
|
+
models: ["gpt-image-1"],
|
|
39382
|
+
defaultModel: "gpt-image-1",
|
|
39383
|
+
capabilities: /* @__PURE__ */ new Set([
|
|
39384
|
+
Capability.TEXT_TO_IMAGE,
|
|
39385
|
+
Capability.ASPECT_RATIO,
|
|
39386
|
+
Capability.IMAGE_EDITING,
|
|
39387
|
+
Capability.MULTIPLE_OUTPUTS
|
|
39388
|
+
]),
|
|
39389
|
+
aspectRatios: ["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4"],
|
|
39390
|
+
resolutions: ["1K", "2K", "4K"]
|
|
39391
|
+
};
|
|
39392
|
+
|
|
39393
|
+
// build/providers/openai/client.js
|
|
39394
|
+
var API_BASE = "https://api.openai.com/v1";
|
|
39395
|
+
function mapSize(aspectRatio) {
|
|
39396
|
+
switch (aspectRatio) {
|
|
39397
|
+
case "1:1":
|
|
39398
|
+
return "1024x1024";
|
|
39399
|
+
case "3:2":
|
|
39400
|
+
case "16:9":
|
|
39401
|
+
case "4:3":
|
|
39402
|
+
return "1536x1024";
|
|
39403
|
+
case "2:3":
|
|
39404
|
+
case "9:16":
|
|
39405
|
+
case "3:4":
|
|
39406
|
+
return "1024x1536";
|
|
39407
|
+
default:
|
|
39408
|
+
return "auto";
|
|
39409
|
+
}
|
|
39410
|
+
}
|
|
39411
|
+
function mapQuality(resolution) {
|
|
39412
|
+
switch (resolution) {
|
|
39413
|
+
case "1K":
|
|
39414
|
+
return "low";
|
|
39415
|
+
case "4K":
|
|
39416
|
+
return "high";
|
|
39417
|
+
default:
|
|
39418
|
+
return "auto";
|
|
39419
|
+
}
|
|
39420
|
+
}
|
|
39421
|
+
function buildMultipart(fields, files) {
|
|
39422
|
+
const boundary = `----imgx${Date.now()}${Math.random().toString(36).slice(2)}`;
|
|
39423
|
+
const parts = [];
|
|
39424
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
39425
|
+
parts.push(Buffer.from(`--${boundary}\r
|
|
39426
|
+
Content-Disposition: form-data; name="${key}"\r
|
|
39427
|
+
\r
|
|
39428
|
+
${value}\r
|
|
39429
|
+
`));
|
|
39430
|
+
}
|
|
39431
|
+
for (const file of files) {
|
|
39432
|
+
parts.push(Buffer.from(`--${boundary}\r
|
|
39433
|
+
Content-Disposition: form-data; name="${file.name}"; filename="${file.filename}"\r
|
|
39434
|
+
Content-Type: ${file.contentType}\r
|
|
39435
|
+
\r
|
|
39436
|
+
`));
|
|
39437
|
+
parts.push(file.data);
|
|
39438
|
+
parts.push(Buffer.from("\r\n"));
|
|
39439
|
+
}
|
|
39440
|
+
parts.push(Buffer.from(`--${boundary}--\r
|
|
39441
|
+
`));
|
|
39442
|
+
const concatenated = Buffer.concat(parts);
|
|
39443
|
+
return {
|
|
39444
|
+
body: new Uint8Array(concatenated.buffer, concatenated.byteOffset, concatenated.byteLength),
|
|
39445
|
+
contentType: `multipart/form-data; boundary=${boundary}`
|
|
39446
|
+
};
|
|
39447
|
+
}
|
|
39448
|
+
var OpenAIProvider = class {
|
|
39449
|
+
info = OPENAI_PROVIDER_INFO;
|
|
39450
|
+
apiKey;
|
|
39451
|
+
constructor(apiKey) {
|
|
39452
|
+
this.apiKey = apiKey;
|
|
39453
|
+
}
|
|
39454
|
+
async generate(input, model) {
|
|
39455
|
+
const modelName = model || this.info.defaultModel;
|
|
39456
|
+
try {
|
|
39457
|
+
const response = await fetch(`${API_BASE}/images/generations`, {
|
|
39458
|
+
method: "POST",
|
|
39459
|
+
headers: {
|
|
39460
|
+
"Content-Type": "application/json",
|
|
39461
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
39462
|
+
},
|
|
39463
|
+
body: JSON.stringify({
|
|
39464
|
+
model: modelName,
|
|
39465
|
+
prompt: input.prompt,
|
|
39466
|
+
n: input.count || 1,
|
|
39467
|
+
size: mapSize(input.aspectRatio),
|
|
39468
|
+
quality: mapQuality(input.resolution)
|
|
39469
|
+
})
|
|
39470
|
+
});
|
|
39471
|
+
const json = await response.json();
|
|
39472
|
+
if (!response.ok || json.error) {
|
|
39473
|
+
return {
|
|
39474
|
+
success: false,
|
|
39475
|
+
images: [],
|
|
39476
|
+
error: json.error?.message || `HTTP ${response.status}`
|
|
39477
|
+
};
|
|
39478
|
+
}
|
|
39479
|
+
return this.parseResponse(json);
|
|
39480
|
+
} catch (err) {
|
|
39481
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
39482
|
+
return { success: false, images: [], error: msg };
|
|
39483
|
+
}
|
|
39484
|
+
}
|
|
39485
|
+
async edit(input, model) {
|
|
39486
|
+
const modelName = model || this.info.defaultModel;
|
|
39487
|
+
const absPath = resolve3(input.inputImage);
|
|
39488
|
+
const imageBuffer = readFileSync3(absPath);
|
|
39489
|
+
const ext = absPath.split(".").pop()?.toLowerCase();
|
|
39490
|
+
const contentType = ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "webp" ? "image/webp" : "image/png";
|
|
39491
|
+
const fields = {
|
|
39492
|
+
model: modelName,
|
|
39493
|
+
prompt: input.prompt,
|
|
39494
|
+
n: String(input.count || 1),
|
|
39495
|
+
size: mapSize(input.aspectRatio),
|
|
39496
|
+
quality: mapQuality(input.resolution)
|
|
39497
|
+
};
|
|
39498
|
+
const { body, contentType: ct } = buildMultipart(fields, [
|
|
39499
|
+
{
|
|
39500
|
+
name: "image",
|
|
39501
|
+
data: imageBuffer,
|
|
39502
|
+
filename: `image.${ext || "png"}`,
|
|
39503
|
+
contentType
|
|
39504
|
+
}
|
|
39505
|
+
]);
|
|
39506
|
+
try {
|
|
39507
|
+
const response = await fetch(`${API_BASE}/images/edits`, {
|
|
39508
|
+
method: "POST",
|
|
39509
|
+
headers: {
|
|
39510
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
39511
|
+
"Content-Type": ct
|
|
39512
|
+
},
|
|
39513
|
+
body
|
|
39514
|
+
});
|
|
39515
|
+
const json = await response.json();
|
|
39516
|
+
if (!response.ok || json.error) {
|
|
39517
|
+
return {
|
|
39518
|
+
success: false,
|
|
39519
|
+
images: [],
|
|
39520
|
+
error: json.error?.message || `HTTP ${response.status}`
|
|
39521
|
+
};
|
|
39522
|
+
}
|
|
39523
|
+
return this.parseResponse(json);
|
|
39524
|
+
} catch (err) {
|
|
39525
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
39526
|
+
return { success: false, images: [], error: msg };
|
|
39527
|
+
}
|
|
39528
|
+
}
|
|
39529
|
+
parseResponse(json) {
|
|
39530
|
+
const images = [];
|
|
39531
|
+
if (json.data) {
|
|
39532
|
+
for (const item of json.data) {
|
|
39533
|
+
if (item.b64_json) {
|
|
39534
|
+
images.push({
|
|
39535
|
+
data: Buffer.from(item.b64_json, "base64"),
|
|
39536
|
+
mimeType: "image/png"
|
|
39537
|
+
});
|
|
39538
|
+
}
|
|
39539
|
+
}
|
|
39540
|
+
}
|
|
39541
|
+
if (images.length === 0) {
|
|
39542
|
+
return { success: false, images: [], error: "No image data in response" };
|
|
39543
|
+
}
|
|
39544
|
+
return { success: true, images };
|
|
39545
|
+
}
|
|
39546
|
+
};
|
|
39547
|
+
|
|
39548
|
+
// build/providers/openai/index.js
|
|
39549
|
+
function initOpenAI() {
|
|
39550
|
+
const apiKey = resolveApiKey("openai");
|
|
39551
|
+
if (!apiKey)
|
|
39552
|
+
return;
|
|
39553
|
+
registerProvider(new OpenAIProvider(apiKey));
|
|
39554
|
+
}
|
|
39555
|
+
|
|
39362
39556
|
// build/cli/commands/init.js
|
|
39363
39557
|
import { existsSync, writeFileSync as writeFileSync3 } from "node:fs";
|
|
39364
|
-
import { resolve as
|
|
39558
|
+
import { resolve as resolve4 } from "node:path";
|
|
39365
39559
|
|
|
39366
39560
|
// build/cli/output.js
|
|
39367
39561
|
function success(data) {
|
|
@@ -39382,7 +39576,7 @@ var TEMPLATE = {
|
|
|
39382
39576
|
}
|
|
39383
39577
|
};
|
|
39384
39578
|
function runInit() {
|
|
39385
|
-
const filePath =
|
|
39579
|
+
const filePath = resolve4(".imgxrc");
|
|
39386
39580
|
if (existsSync(filePath)) {
|
|
39387
39581
|
fail(".imgxrc already exists in current directory");
|
|
39388
39582
|
}
|
|
@@ -39439,6 +39633,19 @@ async function runEdit(provider, args) {
|
|
|
39439
39633
|
}
|
|
39440
39634
|
|
|
39441
39635
|
// build/cli/commands/config.js
|
|
39636
|
+
function extractProvider(args) {
|
|
39637
|
+
const rest = [];
|
|
39638
|
+
let provider = "gemini";
|
|
39639
|
+
for (let i2 = 0; i2 < args.length; i2++) {
|
|
39640
|
+
if (args[i2] === "--provider" && i2 + 1 < args.length) {
|
|
39641
|
+
provider = args[i2 + 1];
|
|
39642
|
+
i2++;
|
|
39643
|
+
} else {
|
|
39644
|
+
rest.push(args[i2]);
|
|
39645
|
+
}
|
|
39646
|
+
}
|
|
39647
|
+
return { provider, rest };
|
|
39648
|
+
}
|
|
39442
39649
|
function runConfig(args) {
|
|
39443
39650
|
const sub = args[0];
|
|
39444
39651
|
if (!sub || sub === "list") {
|
|
@@ -39446,20 +39653,22 @@ function runConfig(args) {
|
|
|
39446
39653
|
return;
|
|
39447
39654
|
}
|
|
39448
39655
|
if (sub === "set") {
|
|
39449
|
-
const
|
|
39450
|
-
const
|
|
39656
|
+
const { provider, rest } = extractProvider(args.slice(1));
|
|
39657
|
+
const key = rest[0];
|
|
39658
|
+
const value = rest[1];
|
|
39451
39659
|
if (!key || !value) {
|
|
39452
|
-
fail("Usage: imgx config set <key> <value
|
|
39660
|
+
fail("Usage: imgx config set <key> <value> [--provider <name>]\n Keys: api-key, provider, model, output-dir, aspect-ratio, resolution");
|
|
39453
39661
|
}
|
|
39454
|
-
setKey(key, value);
|
|
39662
|
+
setKey(key, value, provider);
|
|
39455
39663
|
return;
|
|
39456
39664
|
}
|
|
39457
39665
|
if (sub === "get") {
|
|
39458
|
-
const
|
|
39666
|
+
const { provider, rest } = extractProvider(args.slice(1));
|
|
39667
|
+
const key = rest[0];
|
|
39459
39668
|
if (!key) {
|
|
39460
|
-
fail("Usage: imgx config get <key>");
|
|
39669
|
+
fail("Usage: imgx config get <key> [--provider <name>]");
|
|
39461
39670
|
}
|
|
39462
|
-
getKey(key);
|
|
39671
|
+
getKey(key, provider);
|
|
39463
39672
|
return;
|
|
39464
39673
|
}
|
|
39465
39674
|
if (sub === "path") {
|
|
@@ -39468,15 +39677,15 @@ function runConfig(args) {
|
|
|
39468
39677
|
}
|
|
39469
39678
|
fail(`Unknown config subcommand: ${sub}. Use: list, set, get, path`);
|
|
39470
39679
|
}
|
|
39471
|
-
function setKey(key, value) {
|
|
39680
|
+
function setKey(key, value, provider) {
|
|
39472
39681
|
const config = loadConfig();
|
|
39473
39682
|
switch (key) {
|
|
39474
39683
|
case "api-key": {
|
|
39475
39684
|
if (!config.providers)
|
|
39476
39685
|
config.providers = {};
|
|
39477
|
-
if (!config.providers
|
|
39478
|
-
config.providers
|
|
39479
|
-
config.providers.
|
|
39686
|
+
if (!config.providers[provider])
|
|
39687
|
+
config.providers[provider] = {};
|
|
39688
|
+
config.providers[provider].apiKey = value;
|
|
39480
39689
|
break;
|
|
39481
39690
|
}
|
|
39482
39691
|
case "provider": {
|
|
@@ -39515,13 +39724,13 @@ function setKey(key, value) {
|
|
|
39515
39724
|
saveConfig(config);
|
|
39516
39725
|
success({ key, status: "saved" });
|
|
39517
39726
|
}
|
|
39518
|
-
function getKey(key) {
|
|
39727
|
+
function getKey(key, provider) {
|
|
39519
39728
|
const config = loadConfig();
|
|
39520
39729
|
switch (key) {
|
|
39521
39730
|
case "api-key": {
|
|
39522
|
-
const val = config.providers?.
|
|
39731
|
+
const val = config.providers?.[provider]?.apiKey;
|
|
39523
39732
|
const masked = val ? val.slice(0, 6) + "..." + val.slice(-4) : void 0;
|
|
39524
|
-
success({ key, value: masked ?? null });
|
|
39733
|
+
success({ key, provider, value: masked ?? null });
|
|
39525
39734
|
return;
|
|
39526
39735
|
}
|
|
39527
39736
|
case "provider":
|
|
@@ -39545,16 +39754,22 @@ function getKey(key) {
|
|
|
39545
39754
|
}
|
|
39546
39755
|
function showAll() {
|
|
39547
39756
|
const config = loadConfig();
|
|
39548
|
-
const
|
|
39757
|
+
const providerKeys = {};
|
|
39758
|
+
if (config.providers) {
|
|
39759
|
+
for (const [name, prov] of Object.entries(config.providers)) {
|
|
39760
|
+
if (prov?.apiKey)
|
|
39761
|
+
providerKeys[name] = "(set)";
|
|
39762
|
+
}
|
|
39763
|
+
}
|
|
39549
39764
|
success({
|
|
39550
39765
|
configPath: getConfigPath(),
|
|
39551
|
-
|
|
39766
|
+
apiKeys: Object.keys(providerKeys).length > 0 ? providerKeys : "(none set)",
|
|
39552
39767
|
defaults: config.defaults ?? {}
|
|
39553
39768
|
});
|
|
39554
39769
|
}
|
|
39555
39770
|
|
|
39556
39771
|
// build/cli/index.js
|
|
39557
|
-
var VERSION2 = "0.
|
|
39772
|
+
var VERSION2 = "0.6.1";
|
|
39558
39773
|
var HELP = `imgx v${VERSION2} \u2014 AI image generation and editing CLI
|
|
39559
39774
|
|
|
39560
39775
|
Commands:
|
|
@@ -39568,7 +39783,7 @@ Commands:
|
|
|
39568
39783
|
Usage:
|
|
39569
39784
|
imgx generate -p "prompt" -o "./output.png"
|
|
39570
39785
|
imgx edit -i "./input.png" -p "change background" -o "./output.png"
|
|
39571
|
-
imgx config set api-key <your-
|
|
39786
|
+
imgx config set api-key <your-api-key> --provider gemini
|
|
39572
39787
|
imgx config list
|
|
39573
39788
|
|
|
39574
39789
|
Options:
|
|
@@ -39580,7 +39795,7 @@ Options:
|
|
|
39580
39795
|
-n, --count <number> Number of images to generate
|
|
39581
39796
|
-r, --resolution <size> Resolution: 1K, 2K, 4K
|
|
39582
39797
|
-m, --model <model> Model name
|
|
39583
|
-
--provider <name> Provider (default: gemini)
|
|
39798
|
+
--provider <name> Provider: gemini, openai (default: gemini)
|
|
39584
39799
|
-d, --output-dir <dir> Output directory
|
|
39585
39800
|
-h, --help Show help
|
|
39586
39801
|
-v, --version Show version
|
|
@@ -39597,12 +39812,14 @@ Configuration:
|
|
|
39597
39812
|
|
|
39598
39813
|
Environment variables (override config file):
|
|
39599
39814
|
GEMINI_API_KEY Gemini API key
|
|
39815
|
+
OPENAI_API_KEY OpenAI API key
|
|
39600
39816
|
IMGX_PROVIDER Default provider
|
|
39601
39817
|
IMGX_MODEL Default model
|
|
39602
39818
|
IMGX_OUTPUT_DIR Default output directory
|
|
39603
39819
|
`;
|
|
39604
39820
|
function main() {
|
|
39605
39821
|
initGemini();
|
|
39822
|
+
initOpenAI();
|
|
39606
39823
|
const args = process.argv.slice(2);
|
|
39607
39824
|
const command = args[0];
|
|
39608
39825
|
if (!command || command === "-h" || command === "--help") {
|
|
@@ -39624,7 +39841,7 @@ function main() {
|
|
|
39624
39841
|
if (command === "providers") {
|
|
39625
39842
|
const all = listProviders();
|
|
39626
39843
|
if (all.length === 0) {
|
|
39627
|
-
fail("No providers configured. Set GEMINI_API_KEY to enable
|
|
39844
|
+
fail("No providers configured. Set GEMINI_API_KEY or OPENAI_API_KEY to enable a provider.");
|
|
39628
39845
|
}
|
|
39629
39846
|
const data = all.map((p) => ({
|
|
39630
39847
|
name: p.info.name,
|