imgx-mcp 1.2.0 → 1.3.0
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 +17 -0
- package/README.md +9 -1
- package/dist/cli.bundle.js +105 -87
- package/dist/mcp.bundle.js +128 -97
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.3.0 (2026-03-04)
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **Session-based `clear_history`** — MCP `clear_history` tool accepts optional `session_id` parameter to clear a single session instead of all sessions
|
|
8
|
+
- **Managed path protection** — MCP `clear_history` with `delete_files` only deletes files inside managed directories (`.imgx/` or `~/Pictures/imgx/`); files saved to custom output paths are never deleted
|
|
9
|
+
- **`clearSession()` API** — new function to remove a single session from history
|
|
10
|
+
- **`isManagedPath()` API** — determines whether a file path is inside a managed directory
|
|
11
|
+
- **CLI `history clear <session-id>`** — clear a specific session from CLI (errors on `--all` + session ID combo)
|
|
12
|
+
- **Uninstall cleanup documentation** — README uninstall section now documents data that `npm uninstall` does not remove
|
|
13
|
+
- 7 new tests for `clearSession` and `isManagedPath` (total: 66 tests)
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **`historyDir()` exported** — previously private, now available for managed path detection
|
|
18
|
+
- **MCP `clear_history` response** — now includes `skippedFiles` count for files outside managed directories
|
|
19
|
+
|
|
3
20
|
## 1.2.0 (2026-03-04)
|
|
4
21
|
|
|
5
22
|
### Added
|
package/README.md
CHANGED
|
@@ -438,7 +438,9 @@ Delete the `image-generation/` directory from `.claude/skills/` or `~/.claude/sk
|
|
|
438
438
|
npm uninstall -g imgx-mcp
|
|
439
439
|
```
|
|
440
440
|
|
|
441
|
-
|
|
441
|
+
`npm uninstall` removes the package but does not delete configuration or generated files. Remove them manually if needed:
|
|
442
|
+
|
|
443
|
+
**Global configuration:**
|
|
442
444
|
|
|
443
445
|
```bash
|
|
444
446
|
# Linux / macOS
|
|
@@ -448,6 +450,12 @@ rm -rf ~/.config/imgx/
|
|
|
448
450
|
Remove-Item -Recurse -Force "$env:APPDATA\imgx"
|
|
449
451
|
```
|
|
450
452
|
|
|
453
|
+
**Project history and images:** Each project may have a `.imgx/` directory containing edit history and generated images. Remove it from each project as needed.
|
|
454
|
+
|
|
455
|
+
```bash
|
|
456
|
+
rm -rf <project-root>/.imgx/
|
|
457
|
+
```
|
|
458
|
+
|
|
451
459
|
## License
|
|
452
460
|
|
|
453
461
|
MIT — [SOMA COFFEE KYOTO](https://github.com/somacoffeekyoto)
|
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((resolve6, 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
|
+
resolve6(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((resolve6) => {
|
|
854
|
+
setTimeout(resolve6, 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((resolve6, reject) => {
|
|
1631
|
+
req2.once("response", resolve6).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((resolve6, 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
|
+
resolve6({
|
|
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((resolve6) => resolve6(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((resolve6, reject) => {
|
|
2287
|
+
reader._closedPromise_resolve = resolve6;
|
|
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((resolve6, reject) => {
|
|
2462
|
+
resolvePromise = resolve6;
|
|
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((resolve6, reject) => {
|
|
2568
|
+
resolvePromise = resolve6;
|
|
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((resolve6, reject) => {
|
|
3588
|
+
resolvePromise = resolve6;
|
|
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((resolve6, reject) => {
|
|
3901
3901
|
stream._pendingAbortRequest = {
|
|
3902
3902
|
_promise: void 0,
|
|
3903
|
-
_resolve:
|
|
3903
|
+
_resolve: resolve6,
|
|
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((resolve6, reject) => {
|
|
3921
3921
|
const closeRequest = {
|
|
3922
|
-
_resolve:
|
|
3922
|
+
_resolve: resolve6,
|
|
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((resolve6, reject) => {
|
|
3936
3936
|
const writeRequest = {
|
|
3937
|
-
_resolve:
|
|
3937
|
+
_resolve: resolve6,
|
|
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((resolve6, reject) => {
|
|
4554
|
+
writer._closedPromise_resolve = resolve6;
|
|
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((resolve6, reject) => {
|
|
4591
|
+
writer._readyPromise_resolve = resolve6;
|
|
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((resolve6, 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
|
+
resolve6(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((resolve6) => {
|
|
5105
|
+
resolveCancelPromise = resolve6;
|
|
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((resolve6) => {
|
|
5197
|
+
resolveCancelPromise = resolve6;
|
|
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((resolve6) => {
|
|
5978
|
+
startPromise_resolve = resolve6;
|
|
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((resolve6) => {
|
|
6072
|
+
stream._backpressureChangePromise_resolve = resolve6;
|
|
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((resolve6, reject) => {
|
|
6241
|
+
controller._finishPromise_resolve = resolve6;
|
|
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((resolve6, reject) => {
|
|
6268
|
+
controller._finishPromise_resolve = resolve6;
|
|
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((resolve6, reject) => {
|
|
6299
|
+
controller._finishPromise_resolve = resolve6;
|
|
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((resolve6, 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
|
+
resolve6(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
|
+
resolve6(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
|
+
resolve6(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
|
+
resolve6(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
|
+
resolve6(response);
|
|
8453
8453
|
});
|
|
8454
8454
|
raw.once("end", () => {
|
|
8455
8455
|
if (!response) {
|
|
8456
8456
|
response = new Response2(body, responseOptions);
|
|
8457
|
-
|
|
8457
|
+
resolve6(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
|
+
resolve6(response);
|
|
8470
8470
|
return;
|
|
8471
8471
|
}
|
|
8472
8472
|
response = new Response2(body, responseOptions);
|
|
8473
|
-
|
|
8473
|
+
resolve6(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((resolve6, 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
|
+
resolve6();
|
|
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((resolve6, 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
|
+
resolve6();
|
|
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((resolve6, 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 resolve6();
|
|
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((resolve6, 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 resolve6(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((resolve6, 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 resolve6(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 resolve6(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((resolve6) => {
|
|
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
|
+
resolve6(projectId);
|
|
17762
17762
|
return;
|
|
17763
17763
|
} catch (e2) {
|
|
17764
17764
|
}
|
|
17765
17765
|
}
|
|
17766
|
-
|
|
17766
|
+
resolve6(null);
|
|
17767
17767
|
});
|
|
17768
17768
|
});
|
|
17769
17769
|
}
|
|
@@ -26913,14 +26913,14 @@ function __asyncValues(o) {
|
|
|
26913
26913
|
}, i2);
|
|
26914
26914
|
function verb(n) {
|
|
26915
26915
|
i2[n] = o[n] && function(v) {
|
|
26916
|
-
return new Promise(function(
|
|
26917
|
-
v = o[n](v), settle(
|
|
26916
|
+
return new Promise(function(resolve6, reject) {
|
|
26917
|
+
v = o[n](v), settle(resolve6, reject, v.done, v.value);
|
|
26918
26918
|
});
|
|
26919
26919
|
};
|
|
26920
26920
|
}
|
|
26921
|
-
function settle(
|
|
26921
|
+
function settle(resolve6, reject, d, v) {
|
|
26922
26922
|
Promise.resolve(v).then(function(v2) {
|
|
26923
|
-
|
|
26923
|
+
resolve6({ value: v2, done: d });
|
|
26924
26924
|
}, reject);
|
|
26925
26925
|
}
|
|
26926
26926
|
}
|
|
@@ -32891,8 +32891,8 @@ var LiveMusic = class {
|
|
|
32891
32891
|
const url = `${websocketBaseUrl}/ws/google.ai.generativelanguage.${apiVersion}.GenerativeService.BidiGenerateMusic?key=${apiKey}`;
|
|
32892
32892
|
let onopenResolve = () => {
|
|
32893
32893
|
};
|
|
32894
|
-
const onopenPromise = new Promise((
|
|
32895
|
-
onopenResolve =
|
|
32894
|
+
const onopenPromise = new Promise((resolve6) => {
|
|
32895
|
+
onopenResolve = resolve6;
|
|
32896
32896
|
});
|
|
32897
32897
|
const callbacks = params.callbacks;
|
|
32898
32898
|
const onopenAwaitedCallback = function() {
|
|
@@ -33132,8 +33132,8 @@ var Live = class {
|
|
|
33132
33132
|
}
|
|
33133
33133
|
let onopenResolve = () => {
|
|
33134
33134
|
};
|
|
33135
|
-
const onopenPromise = new Promise((
|
|
33136
|
-
onopenResolve =
|
|
33135
|
+
const onopenPromise = new Promise((resolve6) => {
|
|
33136
|
+
onopenResolve = resolve6;
|
|
33137
33137
|
});
|
|
33138
33138
|
const callbacks = params.callbacks;
|
|
33139
33139
|
const onopenAwaitedCallback = function() {
|
|
@@ -36075,7 +36075,7 @@ var safeJSON = (text) => {
|
|
|
36075
36075
|
return void 0;
|
|
36076
36076
|
}
|
|
36077
36077
|
};
|
|
36078
|
-
var sleep$1 = (ms) => new Promise((
|
|
36078
|
+
var sleep$1 = (ms) => new Promise((resolve6) => setTimeout(resolve6, ms));
|
|
36079
36079
|
var VERSION = "0.0.1";
|
|
36080
36080
|
function getDetectedPlatform() {
|
|
36081
36081
|
if (typeof Deno !== "undefined" && Deno.build != null) {
|
|
@@ -36995,8 +36995,8 @@ async function defaultParseResponse(client, props) {
|
|
|
36995
36995
|
}
|
|
36996
36996
|
var APIPromise = class _APIPromise extends Promise {
|
|
36997
36997
|
constructor(client, responsePromise, parseResponse = defaultParseResponse) {
|
|
36998
|
-
super((
|
|
36999
|
-
|
|
36998
|
+
super((resolve6) => {
|
|
36999
|
+
resolve6(null);
|
|
37000
37000
|
});
|
|
37001
37001
|
this.responsePromise = responsePromise;
|
|
37002
37002
|
this.parseResponse = parseResponse;
|
|
@@ -39586,7 +39586,7 @@ function initOpenAI() {
|
|
|
39586
39586
|
|
|
39587
39587
|
// build/core/history.js
|
|
39588
39588
|
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, mkdirSync as mkdirSync3 } from "node:fs";
|
|
39589
|
-
import { join as join3 } from "node:path";
|
|
39589
|
+
import { join as join3, resolve as resolve3, sep } from "node:path";
|
|
39590
39590
|
import { homedir as homedir3, platform as platform2 } from "node:os";
|
|
39591
39591
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
39592
39592
|
var HISTORY_FILE = "output-history.json";
|
|
@@ -39732,6 +39732,20 @@ function clearHistory() {
|
|
|
39732
39732
|
saveHistory(history);
|
|
39733
39733
|
return { filePaths };
|
|
39734
39734
|
}
|
|
39735
|
+
function clearSession(sessionId) {
|
|
39736
|
+
const history = loadHistory();
|
|
39737
|
+
const idx = history.sessions.findIndex((s2) => s2.id === sessionId);
|
|
39738
|
+
if (idx === -1)
|
|
39739
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
39740
|
+
const [removed] = history.sessions.splice(idx, 1);
|
|
39741
|
+
const filePaths = [];
|
|
39742
|
+
for (const entry of removed.entries)
|
|
39743
|
+
filePaths.push(...entry.filePaths);
|
|
39744
|
+
if (history.activeSessionId === sessionId)
|
|
39745
|
+
history.activeSessionId = null;
|
|
39746
|
+
saveHistory(history);
|
|
39747
|
+
return { filePaths };
|
|
39748
|
+
}
|
|
39735
39749
|
function clearGlobalHistory() {
|
|
39736
39750
|
const globalPath = join3(globalHistoryDir(), HISTORY_FILE);
|
|
39737
39751
|
try {
|
|
@@ -39765,7 +39779,7 @@ function updateHistoryPaths(oldBase, newBase) {
|
|
|
39765
39779
|
|
|
39766
39780
|
// build/cli/commands/init.js
|
|
39767
39781
|
import { existsSync as existsSync2, writeFileSync as writeFileSync4 } from "node:fs";
|
|
39768
|
-
import { resolve as
|
|
39782
|
+
import { resolve as resolve4 } from "node:path";
|
|
39769
39783
|
|
|
39770
39784
|
// build/cli/output.js
|
|
39771
39785
|
function success(data) {
|
|
@@ -39786,7 +39800,7 @@ var TEMPLATE = {
|
|
|
39786
39800
|
}
|
|
39787
39801
|
};
|
|
39788
39802
|
function runInit() {
|
|
39789
|
-
const filePath =
|
|
39803
|
+
const filePath = resolve4(".imgxrc");
|
|
39790
39804
|
if (existsSync2(filePath)) {
|
|
39791
39805
|
fail(".imgxrc already exists in current directory");
|
|
39792
39806
|
}
|
|
@@ -39871,7 +39885,7 @@ async function runEdit(provider, args) {
|
|
|
39871
39885
|
// build/cli/commands/config.js
|
|
39872
39886
|
import { createInterface } from "node:readline";
|
|
39873
39887
|
import { existsSync as existsSync3, readdirSync, cpSync, rmSync, mkdirSync as mkdirSync4 } from "node:fs";
|
|
39874
|
-
import { resolve as
|
|
39888
|
+
import { resolve as resolve5 } from "node:path";
|
|
39875
39889
|
import { homedir as homedir4 } from "node:os";
|
|
39876
39890
|
function extractProvider(args) {
|
|
39877
39891
|
const rest = [];
|
|
@@ -39973,8 +39987,8 @@ function setKey(key, value, provider) {
|
|
|
39973
39987
|
}
|
|
39974
39988
|
function setOutputDir(newDir, skipConfirm, noMove) {
|
|
39975
39989
|
const config = loadConfig();
|
|
39976
|
-
const oldDir = config.defaults?.outputDir ||
|
|
39977
|
-
const resolvedNew =
|
|
39990
|
+
const oldDir = config.defaults?.outputDir || resolve5(homedir4(), "Pictures", "imgx");
|
|
39991
|
+
const resolvedNew = resolve5(newDir);
|
|
39978
39992
|
if (!config.defaults)
|
|
39979
39993
|
config.defaults = {};
|
|
39980
39994
|
config.defaults.outputDir = resolvedNew;
|
|
@@ -40095,10 +40109,14 @@ function runHistory(args) {
|
|
|
40095
40109
|
return;
|
|
40096
40110
|
}
|
|
40097
40111
|
if (sub === "clear") {
|
|
40112
|
+
const positional = args.slice(1).filter((a) => !a.startsWith("--"));
|
|
40113
|
+
const sessionId = positional[0];
|
|
40098
40114
|
const hasYes = args.includes("--yes");
|
|
40099
40115
|
const hasKeepFiles = args.includes("--keep-files");
|
|
40100
40116
|
const hasAll = args.includes("--all");
|
|
40101
|
-
|
|
40117
|
+
if (sessionId && hasAll)
|
|
40118
|
+
return fail("Cannot use --all with session ID");
|
|
40119
|
+
runClear(hasYes, hasKeepFiles, hasAll, sessionId);
|
|
40102
40120
|
return;
|
|
40103
40121
|
}
|
|
40104
40122
|
fail(`Unknown history subcommand: ${sub}. Use: switch, clear`);
|
|
@@ -40126,12 +40144,12 @@ function showHistory() {
|
|
|
40126
40144
|
}))
|
|
40127
40145
|
});
|
|
40128
40146
|
}
|
|
40129
|
-
function runClear(skipConfirm, keepFiles, clearAll) {
|
|
40147
|
+
function runClear(skipConfirm, keepFiles, clearAll, sessionId) {
|
|
40130
40148
|
if (clearAll) {
|
|
40131
40149
|
runClearAll(keepFiles);
|
|
40132
40150
|
return;
|
|
40133
40151
|
}
|
|
40134
|
-
const result = clearHistory();
|
|
40152
|
+
const result = sessionId ? clearSession(sessionId) : clearHistory();
|
|
40135
40153
|
if (keepFiles || result.filePaths.length === 0) {
|
|
40136
40154
|
return success({ cleared: true, filesDeleted: 0 });
|
|
40137
40155
|
}
|
|
@@ -40219,7 +40237,7 @@ function runRedo() {
|
|
|
40219
40237
|
}
|
|
40220
40238
|
|
|
40221
40239
|
// build/cli/index.js
|
|
40222
|
-
var VERSION2 = "1.
|
|
40240
|
+
var VERSION2 = "1.3.0";
|
|
40223
40241
|
var HELP = `imgx v${VERSION2} \u2014 AI image generation and editing for MCP-compatible AI agents
|
|
40224
40242
|
|
|
40225
40243
|
Commands:
|