@topazlabs/mcp 0.1.7 → 0.1.9
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/api/client.js +3 -3
- package/dist/api/client.js.map +1 -1
- package/dist/api/models.d.ts +2 -2
- package/dist/api/models.d.ts.map +1 -1
- package/dist/api/models.js +6 -23
- package/dist/api/models.js.map +1 -1
- package/dist/api/types.d.ts +2 -3
- package/dist/api/types.d.ts.map +1 -1
- package/dist/lib/errors.d.ts +2 -11
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +0 -9
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/fetch-url.d.ts +4 -4
- package/dist/lib/fetch-url.d.ts.map +1 -1
- package/dist/lib/fetch-url.js +4 -10
- package/dist/lib/fetch-url.js.map +1 -1
- package/dist/lib/path-security.d.ts +2 -3
- package/dist/lib/path-security.d.ts.map +1 -1
- package/dist/lib/path-security.js +22 -11
- package/dist/lib/path-security.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -66
- package/dist/server.js.map +1 -1
- package/dist/tools/enhance.d.ts.map +1 -1
- package/dist/tools/enhance.js +2 -25
- package/dist/tools/enhance.js.map +1 -1
- package/package.json +4 -9
- package/dist/apps/viewer.html +0 -51
- package/dist/lib/create-main.d.ts +0 -9
- package/dist/lib/create-main.d.ts.map +0 -1
- package/dist/lib/create-main.js +0 -27
- package/dist/lib/create-main.js.map +0 -1
- package/dist/lib/http-server.d.ts +0 -18
- package/dist/lib/http-server.d.ts.map +0 -1
- package/dist/lib/http-server.js +0 -226
- package/dist/lib/http-server.js.map +0 -1
- package/dist/tools/compare.d.ts +0 -9
- package/dist/tools/compare.d.ts.map +0 -1
- package/dist/tools/compare.js +0 -80
- package/dist/tools/compare.js.map +0 -1
package/dist/api/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import { validateReadPath } from "../lib/path-security.js";
|
|
3
|
+
import { validateReadPath, validateWritePath } from "../lib/path-security.js";
|
|
4
4
|
import { isGenerativeEnhanceModel } from "./models.js";
|
|
5
5
|
const BASE_URL = "https://api.topazlabs.com/image/v1";
|
|
6
6
|
const DEFAULT_POLL_INTERVAL_MS = 2000;
|
|
@@ -105,8 +105,8 @@ export class TopazClient {
|
|
|
105
105
|
const filename = outputFilename
|
|
106
106
|
? `${outputFilename}${ext}`
|
|
107
107
|
: `topaz-${processId}${ext}`;
|
|
108
|
-
const filepath = path.join(outputDir, filename);
|
|
109
|
-
fs.mkdirSync(
|
|
108
|
+
const filepath = validateWritePath(path.join(outputDir, filename));
|
|
109
|
+
fs.mkdirSync(path.dirname(filepath), { recursive: true });
|
|
110
110
|
const buffer = Buffer.from(await resp.arrayBuffer());
|
|
111
111
|
fs.writeFileSync(filepath, buffer);
|
|
112
112
|
return filepath;
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAO9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;AACtD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAS1C,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,cAAc,CAAS;IACvB,SAAS,CAAS;IAE1B,YAAY,OAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC3D,CAAC;IAEO,OAAO;QACb,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAEO,aAAa,CACnB,MAA+B,EAC/B,WAAoB,EACpB,aAAsB;QAEtB,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,aAAa,IAAI,WAAW,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,OAAO,GAA2B;gBACtC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,YAAY;aACtB,CAAC;YACF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,gBAAgB;gBAAE,SAAS;YAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAmB;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjE,OAAO,IAAI,CAAC,SAAS,CACnB,QAAQ,EACR,GAAyC,EACzC,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,cAAc,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,QAAgB,EAChB,MAA+B,EAC/B,WAAoB,EACpB,aAAsB;QAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,aAAa,CACrB,IAAI,CAAC,MAAM,EACX,kBAAkB,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CACxC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC5D,MAAM,SAAS,GACZ,IAAI,CAAC,UAAqB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAClE,MAAM,GAAG,GAAI,IAAI,CAAC,GAAc,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,SAAS,EAAE,EAAE;YAC9D,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,aAAa,CACrB,IAAI,CAAC,MAAM,EACX,wBAAwB,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAmB,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,EAAE,EAAE;YAChE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,aAAa,CACrB,IAAI,CAAC,MAAM,EACX,8BAA8B,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CACpD,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAqB,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,SAAiB,EACjB,cAAuB;QAEvB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CACrB,IAAI,CAAC,MAAM,EACX,0BAA0B,IAAI,CAAC,MAAM,EAAE,CACxC,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC;QAC3D,MAAM,MAAM,GAA2B;YACrC,YAAY,EAAE,MAAM;YACpB,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,OAAO;SACtB,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC;QACjC,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,GAAG,cAAc,GAAG,GAAG,EAAE;YAC3B,CAAC,CAAC,SAAS,SAAS,GAAG,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,UAA6C;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,UAAU;gBAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,OAAO,SAAS,SAAS,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,OAAO,SAAS,gBAAgB,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CACrB,CAAC,EACD,OAAO,SAAS,oBAAoB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAC7D,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC/B,UAAU,CAAS;IAC1B,YAAY,UAAkB,EAAE,OAAe;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAK5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/api/models.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ export declare function isGenerativeEnhanceModel(model: string): model is Enhanc
|
|
|
9
9
|
/** 2K width threshold for default upscaling */
|
|
10
10
|
export declare const DEFAULT_TARGET_WIDTH = 2048;
|
|
11
11
|
/**
|
|
12
|
-
* Auto-select model. Defaults to Standard V2
|
|
12
|
+
* Auto-select model. Defaults to Standard V2 with face enhancement.
|
|
13
13
|
*/
|
|
14
|
-
export declare function autoSelectModel(
|
|
14
|
+
export declare function autoSelectModel(): {
|
|
15
15
|
model: EnhanceModel;
|
|
16
16
|
faceEnhancement: boolean;
|
|
17
17
|
};
|
package/dist/api/models.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/api/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/api/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,CAyC1D,CAAC;AASF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,sBAAsB,CAEjC;AAED,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;GAEG;AACH,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAEA"}
|
package/dist/api/models.js
CHANGED
|
@@ -19,49 +19,32 @@ export const ENHANCE_MODELS = {
|
|
|
19
19
|
type: "standard",
|
|
20
20
|
bestFor: "Already-good photos needing upscale",
|
|
21
21
|
},
|
|
22
|
-
"Text Refine": {
|
|
23
|
-
description: "Preserves and sharpens text in images",
|
|
24
|
-
type: "standard",
|
|
25
|
-
bestFor: "Screenshots, documents, text-heavy images",
|
|
26
|
-
},
|
|
27
22
|
Redefine: {
|
|
28
23
|
description: "AI-powered creative enhancement",
|
|
29
24
|
type: "generative",
|
|
30
25
|
bestFor: "Creative reinterpretation",
|
|
31
26
|
},
|
|
32
|
-
"
|
|
33
|
-
description: "
|
|
27
|
+
"Recover 3": {
|
|
28
|
+
description: "Upscale low-res images into high-fidelity results with natural detail",
|
|
34
29
|
type: "generative",
|
|
35
|
-
bestFor: "
|
|
30
|
+
bestFor: "Low-res images, old photos",
|
|
36
31
|
},
|
|
37
32
|
"Standard MAX": {
|
|
38
33
|
description: "Maximum quality generative enhancement",
|
|
39
34
|
type: "generative",
|
|
40
35
|
bestFor: "Best possible quality, slow",
|
|
41
36
|
},
|
|
42
|
-
Wonder: {
|
|
43
|
-
description: "Simple, reliable enhancement for all input quality levels",
|
|
44
|
-
type: "generative",
|
|
45
|
-
bestFor: "General enhancement",
|
|
46
|
-
},
|
|
47
37
|
"Wonder 2": {
|
|
48
38
|
description: "Precision sharpening for organic textures — fur, feathers, skin, hair",
|
|
49
39
|
type: "generative",
|
|
50
40
|
bestFor: "Nature photography, portraits, fine detail",
|
|
51
41
|
},
|
|
52
|
-
Bloom: {
|
|
53
|
-
description: "Creative/artistic generative enhancement",
|
|
54
|
-
type: "generative",
|
|
55
|
-
bestFor: "Stylistic detail, creative enhancement",
|
|
56
|
-
},
|
|
57
42
|
};
|
|
58
43
|
const GENERATIVE_ENHANCE_MODELS = new Set([
|
|
59
44
|
"Redefine",
|
|
60
|
-
"
|
|
45
|
+
"Recover 3",
|
|
61
46
|
"Standard MAX",
|
|
62
|
-
"Wonder",
|
|
63
47
|
"Wonder 2",
|
|
64
|
-
"Bloom",
|
|
65
48
|
]);
|
|
66
49
|
export function isGenerativeEnhanceModel(model) {
|
|
67
50
|
return GENERATIVE_ENHANCE_MODELS.has(model);
|
|
@@ -69,9 +52,9 @@ export function isGenerativeEnhanceModel(model) {
|
|
|
69
52
|
/** 2K width threshold for default upscaling */
|
|
70
53
|
export const DEFAULT_TARGET_WIDTH = 2048;
|
|
71
54
|
/**
|
|
72
|
-
* Auto-select model. Defaults to Standard V2
|
|
55
|
+
* Auto-select model. Defaults to Standard V2 with face enhancement.
|
|
73
56
|
*/
|
|
74
|
-
export function autoSelectModel(
|
|
57
|
+
export function autoSelectModel() {
|
|
75
58
|
return { model: "Standard V2", faceEnhancement: true };
|
|
76
59
|
}
|
|
77
60
|
//# sourceMappingURL=models.js.map
|
package/dist/api/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/api/models.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,aAAa,EAAE;QACb,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,gBAAgB;KAC1B;IACD,mBAAmB,EAAE;QACnB,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,yBAAyB;KACnC;IACD,GAAG,EAAE;QACH,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,iCAAiC;KAC3C;IACD,kBAAkB,EAAE;QAClB,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,qCAAqC;KAC/C;IACD,
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/api/models.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,aAAa,EAAE;QACb,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,gBAAgB;KAC1B;IACD,mBAAmB,EAAE;QACnB,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,yBAAyB;KACnC;IACD,GAAG,EAAE;QACH,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,iCAAiC;KAC3C;IACD,kBAAkB,EAAE;QAClB,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,qCAAqC;KAC/C;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,2BAA2B;KACrC;IACD,WAAW,EAAE;QACX,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,4BAA4B;KACtC;IACD,cAAc,EAAE;QACd,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,6BAA6B;KACvC;IACD,UAAU,EAAE;QACV,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,4CAA4C;KACtD;CACF,CAAC;AAEF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAS;IAChD,UAAU;IACV,WAAW;IACX,cAAc;IACd,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CACtC,KAAa;IAEb,OAAO,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,eAAe;IAI7B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC"}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export type ImageFormat = "jpeg" | "png" | "tiff";
|
|
2
2
|
export type JobStatus = "Pending" | "Processing" | "Completed" | "Failed" | "Cancelled";
|
|
3
|
-
export type EnhanceStandardModel = "Standard V2" | "Low Resolution V2" | "CGI" | "High Fidelity V2"
|
|
4
|
-
export type EnhanceGenerativeModel = "Redefine" | "
|
|
3
|
+
export type EnhanceStandardModel = "Standard V2" | "Low Resolution V2" | "CGI" | "High Fidelity V2";
|
|
4
|
+
export type EnhanceGenerativeModel = "Redefine" | "Recover 3" | "Standard MAX" | "Wonder 2";
|
|
5
5
|
export type EnhanceModel = EnhanceStandardModel | EnhanceGenerativeModel;
|
|
6
6
|
export interface EnhanceRequest {
|
|
7
7
|
image?: Buffer;
|
|
8
8
|
image_filename?: string;
|
|
9
|
-
source_url?: string;
|
|
10
9
|
model?: EnhanceModel;
|
|
11
10
|
output_width?: number;
|
|
12
11
|
output_height?: number;
|
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAExF,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,mBAAmB,GACnB,KAAK,GACL,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAExF,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,mBAAmB,GACnB,KAAK,GACL,kBAAkB,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAC9B,UAAU,GACV,WAAW,GACX,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,YAAY,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared MCP tool result helpers.
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
[key: string]: unknown;
|
|
6
|
-
content: Array<{
|
|
7
|
-
type: "text";
|
|
8
|
-
text: string;
|
|
9
|
-
}>;
|
|
10
|
-
isError?: boolean;
|
|
11
|
-
}
|
|
4
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
12
5
|
/** Create a standard MCP error tool result with isError: true */
|
|
13
|
-
export declare function toolError(message: string):
|
|
14
|
-
/** Create a standard MCP success tool result */
|
|
15
|
-
export declare function toolResult(text: string): ToolResult;
|
|
6
|
+
export declare function toolError(message: string): CallToolResult;
|
|
16
7
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAKzD"}
|
package/dist/lib/errors.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared MCP tool result helpers.
|
|
3
|
-
*/
|
|
4
1
|
/** Create a standard MCP error tool result with isError: true */
|
|
5
2
|
export function toolError(message) {
|
|
6
3
|
return {
|
|
@@ -8,10 +5,4 @@ export function toolError(message) {
|
|
|
8
5
|
isError: true,
|
|
9
6
|
};
|
|
10
7
|
}
|
|
11
|
-
/** Create a standard MCP success tool result */
|
|
12
|
-
export function toolResult(text) {
|
|
13
|
-
return {
|
|
14
|
-
content: [{ type: "text", text }],
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
8
|
//# sourceMappingURL=errors.js.map
|
package/dist/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAKA,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
package/dist/lib/fetch-url.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare function validateUrl(url: string): Promise<void>;
|
|
|
2
2
|
export interface FetchUrlOptions {
|
|
3
3
|
/** Max response size in bytes (default: 100 MB) */
|
|
4
4
|
maxBytes?: number;
|
|
5
|
-
/** Request timeout in ms (default:
|
|
5
|
+
/** Request timeout in ms (default: 120 000) */
|
|
6
6
|
timeoutMs?: number;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
@@ -11,8 +11,8 @@ export interface FetchUrlOptions {
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function fetchUrl(url: string, options?: FetchUrlOptions, _redirectCount?: number): Promise<Buffer>;
|
|
13
13
|
/**
|
|
14
|
-
* Load an image from a URL
|
|
15
|
-
*
|
|
14
|
+
* Load an image from a URL. Goes through SSRF-safe fetchUrl.
|
|
15
|
+
* For local files, use readImageFile from api/client.ts instead.
|
|
16
16
|
*/
|
|
17
|
-
export declare function loadImage(
|
|
17
|
+
export declare function loadImage(url: string, options?: FetchUrlOptions): Promise<Buffer>;
|
|
18
18
|
//# sourceMappingURL=fetch-url.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.d.ts","sourceRoot":"","sources":["../../src/lib/fetch-url.ts"],"names":[],"mappings":"AAoEA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C5D;AAMD,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"fetch-url.d.ts","sourceRoot":"","sources":["../../src/lib/fetch-url.ts"],"names":[],"mappings":"AAoEA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C5D;AAMD,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2BD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,eAAoB,EAC7B,cAAc,SAAI,GACjB,OAAO,CAAC,MAAM,CAAC,CA6GjB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
package/dist/lib/fetch-url.js
CHANGED
|
@@ -224,16 +224,10 @@ export async function fetchUrl(url, options = {}, _redirectCount = 0) {
|
|
|
224
224
|
});
|
|
225
225
|
}
|
|
226
226
|
/**
|
|
227
|
-
* Load an image from a URL
|
|
228
|
-
*
|
|
227
|
+
* Load an image from a URL. Goes through SSRF-safe fetchUrl.
|
|
228
|
+
* For local files, use readImageFile from api/client.ts instead.
|
|
229
229
|
*/
|
|
230
|
-
export async function loadImage(
|
|
231
|
-
|
|
232
|
-
return fetchUrl(source, options);
|
|
233
|
-
}
|
|
234
|
-
// For local paths, the caller must validate with validateReadPath first
|
|
235
|
-
const fs = await import("node:fs");
|
|
236
|
-
const pathMod = await import("node:path");
|
|
237
|
-
return fs.promises.readFile(pathMod.resolve(source));
|
|
230
|
+
export async function loadImage(url, options) {
|
|
231
|
+
return fetchUrl(url, options);
|
|
238
232
|
}
|
|
239
233
|
//# sourceMappingURL=fetch-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.js","sourceRoot":"","sources":["../../src/lib/fetch-url.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fetch-url.js","sourceRoot":"","sources":["../../src/lib/fetch-url.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,13 +6,12 @@
|
|
|
6
6
|
export declare function translateSandboxPath(inputPath: string): string;
|
|
7
7
|
/**
|
|
8
8
|
* Validate a file path for reading. Returns the resolved absolute path.
|
|
9
|
-
*
|
|
10
|
-
* anywhere except sensitive directories.
|
|
9
|
+
* Expands ~, translates sandbox paths, blocks sensitive directories.
|
|
11
10
|
*/
|
|
12
11
|
export declare function validateReadPath(inputPath: string): string;
|
|
13
12
|
/**
|
|
14
13
|
* Validate a file path for writing. Returns the resolved absolute path.
|
|
15
|
-
*
|
|
14
|
+
* Expands ~, translates sandbox paths, restricts to CWD + temp + TOPAZ_ALLOWED_DIRS.
|
|
16
15
|
*/
|
|
17
16
|
export declare function validateWritePath(inputPath: string): string;
|
|
18
17
|
//# sourceMappingURL=path-security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-security.d.ts","sourceRoot":"","sources":["../../src/lib/path-security.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path-security.d.ts","sourceRoot":"","sources":["../../src/lib/path-security.ts"],"names":[],"mappings":"AAmJA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM9D;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB3D"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* - Writes: CWD + temp + TOPAZ_ALLOWED_DIRS
|
|
6
6
|
* - Always blocks sensitive paths (/etc, ~/.ssh, etc.)
|
|
7
7
|
* - Blocks symlinks that escape allowed directories (writes only)
|
|
8
|
+
* - Expands ~ to home directory
|
|
9
|
+
* - Translates Claude Cowork sandbox paths to real macOS paths
|
|
8
10
|
*/
|
|
9
11
|
import * as path from "node:path";
|
|
10
12
|
import * as fs from "node:fs";
|
|
@@ -75,7 +77,7 @@ function hasSymlinkEscape(filePath) {
|
|
|
75
77
|
const allowed = getWriteAllowedDirs();
|
|
76
78
|
const parts = filePath.split(path.sep);
|
|
77
79
|
let current = parts[0] === "" ? path.sep : parts[0];
|
|
78
|
-
for (let i =
|
|
80
|
+
for (let i = 1; i < parts.length; i++) {
|
|
79
81
|
current = path.join(current, parts[i]);
|
|
80
82
|
try {
|
|
81
83
|
const stat = fs.lstatSync(current);
|
|
@@ -124,28 +126,37 @@ function isWithinWriteAllowedDirs(realPath) {
|
|
|
124
126
|
const allowed = getWriteAllowedDirs();
|
|
125
127
|
return allowed.some((dir) => realPath === dir || realPath.startsWith(dir + path.sep));
|
|
126
128
|
}
|
|
129
|
+
/** Expand ~ to the user's home directory */
|
|
130
|
+
function expandTilde(p) {
|
|
131
|
+
if (p === "~")
|
|
132
|
+
return os.homedir();
|
|
133
|
+
if (p.startsWith("~/"))
|
|
134
|
+
return path.join(os.homedir(), p.slice(2));
|
|
135
|
+
return p;
|
|
136
|
+
}
|
|
127
137
|
/**
|
|
128
138
|
* Translate sandbox paths from Claude Cowork's Linux VM to the real
|
|
129
139
|
* macOS filesystem. Cowork mounts the user's folder at
|
|
130
140
|
* /sessions/<id>/mnt/<folder>/ which maps to ~/<folder>/ on the host.
|
|
131
141
|
*/
|
|
132
142
|
export function translateSandboxPath(inputPath) {
|
|
133
|
-
// Match /sessions/<anything>/mnt/<rest>
|
|
134
143
|
const match = inputPath.match(/^\/sessions\/[^/]+\/mnt\/(.+)$/);
|
|
135
144
|
if (match) {
|
|
136
|
-
|
|
137
|
-
return path.join(home, match[1]);
|
|
145
|
+
return path.join(os.homedir(), match[1]);
|
|
138
146
|
}
|
|
139
147
|
return inputPath;
|
|
140
148
|
}
|
|
149
|
+
/** Normalize a user-provided path: expand ~, translate sandbox paths */
|
|
150
|
+
function normalizePath(inputPath) {
|
|
151
|
+
return translateSandboxPath(expandTilde(inputPath));
|
|
152
|
+
}
|
|
141
153
|
/**
|
|
142
154
|
* Validate a file path for reading. Returns the resolved absolute path.
|
|
143
|
-
*
|
|
144
|
-
* anywhere except sensitive directories.
|
|
155
|
+
* Expands ~, translates sandbox paths, blocks sensitive directories.
|
|
145
156
|
*/
|
|
146
157
|
export function validateReadPath(inputPath) {
|
|
147
|
-
const
|
|
148
|
-
const resolved = path.resolve(
|
|
158
|
+
const normalized = normalizePath(inputPath);
|
|
159
|
+
const resolved = path.resolve(normalized);
|
|
149
160
|
const realPath = resolveRealSafe(resolved);
|
|
150
161
|
if (isSensitivePath(resolved) || isSensitivePath(realPath)) {
|
|
151
162
|
throw new Error("Access denied: path is in a restricted location");
|
|
@@ -154,11 +165,11 @@ export function validateReadPath(inputPath) {
|
|
|
154
165
|
}
|
|
155
166
|
/**
|
|
156
167
|
* Validate a file path for writing. Returns the resolved absolute path.
|
|
157
|
-
*
|
|
168
|
+
* Expands ~, translates sandbox paths, restricts to CWD + temp + TOPAZ_ALLOWED_DIRS.
|
|
158
169
|
*/
|
|
159
170
|
export function validateWritePath(inputPath) {
|
|
160
|
-
const
|
|
161
|
-
const resolved = path.resolve(
|
|
171
|
+
const normalized = normalizePath(inputPath);
|
|
172
|
+
const resolved = path.resolve(normalized);
|
|
162
173
|
const realPath = resolveRealSafe(resolved);
|
|
163
174
|
if (isSensitivePath(resolved) || isSensitivePath(realPath)) {
|
|
164
175
|
throw new Error("Access denied: path is in a restricted location");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-security.js","sourceRoot":"","sources":["../../src/lib/path-security.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"path-security.js","sourceRoot":"","sources":["../../src/lib/path-security.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,YAAY,IAAI,SAAS,CAqExC"}
|
package/dist/server.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { readFileSync, existsSync } from "node:fs";
|
|
4
|
-
import { join, dirname } from "node:path";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
3
|
import { toolError } from "./lib/errors.js";
|
|
7
4
|
import { TopazClient } from "./api/client.js";
|
|
8
5
|
import { handleEnhance } from "./tools/enhance.js";
|
|
9
|
-
import { handleCompare } from "./tools/compare.js";
|
|
10
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
function getViewerHtml() {
|
|
12
|
-
const appPath = join(__dirname, "apps", "viewer.html");
|
|
13
|
-
if (!existsSync(appPath)) {
|
|
14
|
-
return "<html><body>Viewer not built. Run npm run build:app</body></html>";
|
|
15
|
-
}
|
|
16
|
-
return readFileSync(appPath, "utf-8");
|
|
17
|
-
}
|
|
18
|
-
const VIEWER_URI = "ui://topaz/viewer";
|
|
19
6
|
export function createServer() {
|
|
20
7
|
let client;
|
|
21
8
|
function getClient() {
|
|
@@ -28,20 +15,7 @@ export function createServer() {
|
|
|
28
15
|
}
|
|
29
16
|
return client;
|
|
30
17
|
}
|
|
31
|
-
const server = new McpServer({ name: "Topaz Labs", version: "0.1.
|
|
32
|
-
// --- Resource: Before/After Viewer (MCP App) ---
|
|
33
|
-
server.resource("viewer", VIEWER_URI, {
|
|
34
|
-
description: "Interactive before/after image comparison viewer",
|
|
35
|
-
mimeType: "text/html;profile=mcp-app",
|
|
36
|
-
}, async () => ({
|
|
37
|
-
contents: [
|
|
38
|
-
{
|
|
39
|
-
uri: VIEWER_URI,
|
|
40
|
-
mimeType: "text/html;profile=mcp-app",
|
|
41
|
-
text: getViewerHtml(),
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
}));
|
|
18
|
+
const server = new McpServer({ name: "Topaz Labs", version: "0.1.7" }, { capabilities: { tools: {} } });
|
|
45
19
|
// --- Tool: enhance ---
|
|
46
20
|
server.registerTool("enhance", {
|
|
47
21
|
title: "Enhance Image",
|
|
@@ -61,7 +35,7 @@ export function createServer() {
|
|
|
61
35
|
model: z
|
|
62
36
|
.string()
|
|
63
37
|
.optional()
|
|
64
|
-
.describe("Model name. Defaults to Standard V2 if omitted. Options: Standard V2, Low Resolution V2, CGI, High Fidelity V2,
|
|
38
|
+
.describe("Model name. Defaults to Standard V2 if omitted. Options: Standard V2, Low Resolution V2, CGI, High Fidelity V2, Redefine, Recover 3, Standard MAX, Wonder 2"),
|
|
65
39
|
},
|
|
66
40
|
}, async (params) => {
|
|
67
41
|
try {
|
|
@@ -75,44 +49,6 @@ export function createServer() {
|
|
|
75
49
|
return toolError(err instanceof Error ? err.message : String(err));
|
|
76
50
|
}
|
|
77
51
|
});
|
|
78
|
-
// --- Tool: compare (MCP App) ---
|
|
79
|
-
server.registerTool("compare", {
|
|
80
|
-
title: "Compare Images",
|
|
81
|
-
description: "Compare two images side-by-side with an interactive before/after slider viewer. Supports zoom, pan, and toggle views.",
|
|
82
|
-
inputSchema: {
|
|
83
|
-
before: z
|
|
84
|
-
.string()
|
|
85
|
-
.describe('File path or URL to the "before" image'),
|
|
86
|
-
after: z
|
|
87
|
-
.string()
|
|
88
|
-
.describe('File path or URL to the "after" image'),
|
|
89
|
-
label_before: z
|
|
90
|
-
.string()
|
|
91
|
-
.optional()
|
|
92
|
-
.default("Before")
|
|
93
|
-
.describe("Label for the before image"),
|
|
94
|
-
label_after: z
|
|
95
|
-
.string()
|
|
96
|
-
.optional()
|
|
97
|
-
.default("After")
|
|
98
|
-
.describe("Label for the after image"),
|
|
99
|
-
},
|
|
100
|
-
_meta: {
|
|
101
|
-
ui: { resourceUri: VIEWER_URI },
|
|
102
|
-
},
|
|
103
|
-
}, async (params) => {
|
|
104
|
-
try {
|
|
105
|
-
return await handleCompare({
|
|
106
|
-
before: params.before,
|
|
107
|
-
after: params.after,
|
|
108
|
-
label_before: params.label_before,
|
|
109
|
-
label_after: params.label_after,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
return toolError(err instanceof Error ? err.message : String(err));
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
52
|
return server;
|
|
117
53
|
}
|
|
118
54
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,YAAY;IAC1B,IAAI,MAA+B,CAAC;IAEpC,SAAS,SAAS;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EACxC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,wPAAwP;QAC1P,WAAW,EAAE;YACX,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CAAC,2GAA2G,CAAC;YACxH,IAAI,EAAE,CAAC;iBACJ,MAAM,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;gBACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;gBACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;aAC9C,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CACP,kIAAkI,CACnI;YACH,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,6JAA6J,CAC9J;SACJ;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,OAAO,MAAM,aAAa,CACxB;gBACE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,EACD,SAAS,EAAE,CACZ,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CACd,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/tools/enhance.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAI9D,6DAA6D;AAC7D,wBAAgB,WAAW,CACzB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACrE,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmCnC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"enhance.d.ts","sourceRoot":"","sources":["../../src/tools/enhance.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAI9D,6DAA6D;AAC7D,wBAAgB,WAAW,CACzB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EACrE,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmCnC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CAuIzB"}
|
package/dist/tools/enhance.js
CHANGED
|
@@ -92,7 +92,7 @@ export async function handleEnhance(input, client) {
|
|
|
92
92
|
selectedModel = input.model;
|
|
93
93
|
}
|
|
94
94
|
else {
|
|
95
|
-
const auto = autoSelectModel(
|
|
95
|
+
const auto = autoSelectModel();
|
|
96
96
|
selectedModel = auto.model;
|
|
97
97
|
faceEnhancement = auto.faceEnhancement;
|
|
98
98
|
}
|
|
@@ -102,7 +102,7 @@ export async function handleEnhance(input, client) {
|
|
|
102
102
|
output_width: targetSize.width,
|
|
103
103
|
output_height: targetSize.height,
|
|
104
104
|
output_format: "jpeg",
|
|
105
|
-
face_enhancement: faceEnhancement
|
|
105
|
+
face_enhancement: faceEnhancement ? true : undefined,
|
|
106
106
|
image: imageBuffer,
|
|
107
107
|
image_filename: imageFilename,
|
|
108
108
|
};
|
|
@@ -148,16 +148,6 @@ export async function handleEnhance(input, client) {
|
|
|
148
148
|
catch {
|
|
149
149
|
// Image too large or read failed — skip inline
|
|
150
150
|
}
|
|
151
|
-
// Include viewer resource reference
|
|
152
|
-
const downloadInfo = await client.getDownloadUrl(process_id);
|
|
153
|
-
content.push({
|
|
154
|
-
type: "resource",
|
|
155
|
-
resource: {
|
|
156
|
-
uri: "ui://topaz/viewer",
|
|
157
|
-
mimeType: "text/html",
|
|
158
|
-
text: buildViewerHtml(downloadInfo.input_download_url ?? "", downloadInfo.download_url),
|
|
159
|
-
},
|
|
160
|
-
});
|
|
161
151
|
return { content };
|
|
162
152
|
}
|
|
163
153
|
catch (err) {
|
|
@@ -168,17 +158,4 @@ export async function handleEnhance(input, client) {
|
|
|
168
158
|
};
|
|
169
159
|
}
|
|
170
160
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Build a minimal viewer HTML that loads the before/after images from URLs.
|
|
173
|
-
* For the full viewer resource, the compare tool is more appropriate.
|
|
174
|
-
*/
|
|
175
|
-
function buildViewerHtml(beforeUrl, afterUrl) {
|
|
176
|
-
const data = JSON.stringify({
|
|
177
|
-
before: beforeUrl,
|
|
178
|
-
after: afterUrl,
|
|
179
|
-
labelBefore: "Original",
|
|
180
|
-
labelAfter: "Enhanced",
|
|
181
|
-
}).replace(/</g, "\\u003c");
|
|
182
|
-
return `<!DOCTYPE html><html><head><script>window.__COMPARE_DATA__=${data};</script></head><body><p>Before/after viewer — use the compare tool for the full interactive experience.</p></body></html>`;
|
|
183
|
-
}
|
|
184
161
|
//# sourceMappingURL=enhance.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/tools/enhance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/tools/enhance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topazlabs/mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Topaz Labs MCP server — AI image enhancement
|
|
3
|
+
"version": "0.1.9",
|
|
4
|
+
"description": "Topaz Labs MCP server — AI image enhancement for LLMs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"topaz-mcp": "./dist/main.js"
|
|
@@ -11,9 +11,7 @@
|
|
|
11
11
|
"dist"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build
|
|
15
|
-
"build:server": "tsc -p tsconfig.server.json",
|
|
16
|
-
"build": "npm run build:app && npm run build:server",
|
|
14
|
+
"build": "tsc -p tsconfig.server.json",
|
|
17
15
|
"dev": "tsc -p tsconfig.server.json --watch",
|
|
18
16
|
"start": "node dist/main.js"
|
|
19
17
|
},
|
|
@@ -22,7 +20,6 @@
|
|
|
22
20
|
"image",
|
|
23
21
|
"enhance",
|
|
24
22
|
"upscale",
|
|
25
|
-
"compare",
|
|
26
23
|
"topaz",
|
|
27
24
|
"ai",
|
|
28
25
|
"mcp-server"
|
|
@@ -36,9 +33,7 @@
|
|
|
36
33
|
},
|
|
37
34
|
"devDependencies": {
|
|
38
35
|
"@types/node": "^22.19.11",
|
|
39
|
-
"typescript": "5.7"
|
|
40
|
-
"vite": "^6.1.0",
|
|
41
|
-
"vite-plugin-singlefile": "^2.0.3"
|
|
36
|
+
"typescript": "5.7"
|
|
42
37
|
},
|
|
43
38
|
"engines": {
|
|
44
39
|
"node": ">=20"
|
package/dist/apps/viewer.html
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Compare</title>
|
|
7
|
-
<script type="module" crossorigin>(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const b of i.addedNodes)b.tagName==="LINK"&&b.rel==="modulepreload"&&r(b)}).observe(document,{childList:!0,subtree:!0});function s(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=s(n);fetch(n.href,i)}})();const y=window.__COMPARE_DATA__??{before:"",after:"",labelBefore:"Before",labelAfter:"After"},t=document.getElementById("viewport"),B=document.getElementById("canvas"),d=document.getElementById("img-before"),f=document.getElementById("img-after"),P=document.getElementById("clip-before"),R=document.getElementById("slider"),Z=document.getElementById("label-before"),_=document.getElementById("label-after"),M=document.getElementById("meta-before"),$=document.getElementById("meta-after"),F=document.getElementById("zoom-level"),w=document.getElementById("btn-before"),C=document.getElementById("btn-split"),A=document.getElementById("btn-after"),T=document.getElementById("btn-zoom-in"),D=document.getElementById("btn-zoom-out"),N=document.getElementById("btn-zoom-fit");let c=0,a=0,l=1,m=0,p=0,L=.5,S="split";const E=[.25,.5,.75,1,1.5,2,3,4];Z.textContent=y.labelBefore;_.textContent=y.labelAfter;let I=0;function k(e,o){const s=e==="before"?M:$;s.textContent=`${y[`label${e==="before"?"Before":"After"}`]}: ${o.naturalWidth}×${o.naturalHeight}`,I++,I>=2&&q()}d.onload=()=>k("before",d);f.onload=()=>k("after",f);d.onerror=()=>{M.textContent="Failed to load before image"};f.onerror=()=>{$.textContent="Failed to load after image"};d.src=y.before;f.src=y.after;function q(){c=Math.max(d.naturalWidth,f.naturalWidth),a=Math.max(d.naturalHeight,f.naturalHeight),v()}function v(){const e=t.clientWidth,o=t.clientHeight;!c||!a||!e||!o||(l=Math.min(e/c,o/a,1),m=(e-c*l)/2,p=(o-a*l)/2,x())}function x(){B.style.transform=`translate(${m}px, ${p}px) scale(${l})`,B.style.width=`${c}px`,B.style.height=`${a}px`,d.style.width=f.style.width=`${c}px`,d.style.height=f.style.height=`${a}px`,O(),F.textContent=`${Math.round(l*100)}%`,t.classList.toggle("can-pan",l>Math.min(t.clientWidth/c,t.clientHeight/a,1)+.01)}function O(){const e=L*c;P.style.width=`${e}px`,R.style.left=`${e}px`}function u(e){S=e,t.classList.remove("mode-before","mode-after"),e!=="split"&&t.classList.add(`mode-${e}`),w.classList.toggle("active",e==="before"),C.classList.toggle("active",e==="split"),A.classList.toggle("active",e==="after")}w.addEventListener("click",()=>u("before"));C.addEventListener("click",()=>u("split"));A.addEventListener("click",()=>u("after"));function X(e,o,s){const r=o??t.clientWidth/2,n=s??t.clientHeight/2,i=(r-m)/l,b=(n-p)/l;l=Math.max(.1,Math.min(8,e)),m=r-i*l,p=n-b*l,x()}function h(e,o,s){const r=l;let n=r;if(e===1)n=E.find(i=>i>r+.01)??r*1.5;else{for(let i=E.length-1;i>=0;i--)if(E[i]<r-.01){n=E[i];break}n===r&&(n=r/1.5)}X(n,o,s)}T.addEventListener("click",()=>h(1));D.addEventListener("click",()=>h(-1));N.addEventListener("click",v);t.addEventListener("wheel",e=>{e.preventDefault();const o=e.deltaY<0?1:-1;h(o,e.clientX,e.clientY-t.getBoundingClientRect().top)},{passive:!1});let g=null,H=0,W=0,Y=0,z=0;function K(e){if(S!=="split")return!1;const o=t.getBoundingClientRect(),s=m+L*c*l;return Math.abs(e.clientX-o.left-s)<20}t.addEventListener("pointerdown",e=>{e.button===0&&(e.preventDefault(),t.setPointerCapture(e.pointerId),K(e)?(g="slider",t.classList.add("dragging-slider")):(g="pan",H=e.clientX,W=e.clientY,Y=m,z=p,t.classList.add("panning")))});t.addEventListener("pointermove",e=>{if(!g)return;const o=t.getBoundingClientRect();if(g==="slider"){const s=e.clientX-o.left;L=Math.max(0,Math.min(1,(s-m)/(c*l))),O()}else g==="pan"&&(m=Y+(e.clientX-H),p=z+(e.clientY-W),x())});t.addEventListener("pointerup",()=>{g=null,t.classList.remove("dragging-slider","panning")});t.addEventListener("dblclick",e=>{const o=t.getBoundingClientRect(),s=e.clientY-o.top,r=Math.min(t.clientWidth/c,t.clientHeight/a,1);Math.abs(l-r)<.05?X(2,e.clientX-o.left,s):v()});new ResizeObserver(()=>{l<=Math.min(t.clientWidth/c,t.clientHeight/a,1)+.05&&v()}).observe(t);document.addEventListener("keydown",e=>{e.key==="1"?u("before"):e.key==="2"?u("split"):e.key==="3"?u("after"):e.key==="+"||e.key==="="?h(1):e.key==="-"?h(-1):e.key==="0"&&v()});</script>
|
|
8
|
-
<style rel="stylesheet" crossorigin>*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #1a1a1a;--surface: #242424;--border: #333;--text: #e8e8e8;--text-muted: #888;--accent: #7c6bf5;--handle: #fff;--slider-line: rgba(255,255,255,.6)}html,body{height:100%;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:13px;overflow:hidden;user-select:none;-webkit-user-select:none}#app{display:flex;flex-direction:column;height:100%}#toolbar{background:var(--surface);border-bottom:1px solid var(--border);padding:8px 12px;display:flex;flex-direction:column;gap:6px;flex-shrink:0}#labels-bar{display:flex;justify-content:space-between}.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}#controls{display:flex;align-items:center;gap:4px;justify-content:center;flex-wrap:wrap}#controls button{background:transparent;border:1px solid var(--border);color:var(--text);padding:4px 10px;border-radius:4px;cursor:pointer;font-size:12px;font-family:inherit;transition:all .15s}#controls button:hover{background:var(--border)}#controls button.active{background:var(--accent);border-color:var(--accent);color:#fff}.separator{width:1px;height:20px;background:var(--border);margin:0 4px}#zoom-level{font-size:12px;font-variant-numeric:tabular-nums;min-width:40px;text-align:center;color:var(--text-muted)}#viewport{flex:1;overflow:hidden;position:relative;cursor:default}#viewport.dragging-slider{cursor:ew-resize}#viewport.panning{cursor:grabbing}#viewport.can-pan{cursor:grab}#canvas{position:absolute;transform-origin:0 0}#canvas img{display:block;pointer-events:none;-webkit-user-drag:none}#img-after{position:relative}#clip-before{position:absolute;top:0;left:0;height:100%;overflow:hidden}#clip-before img{display:block}#slider{position:absolute;top:0;height:100%;width:3px;transform:translate(-50%);z-index:10;cursor:ew-resize}#slider-line{position:absolute;top:0;left:50%;transform:translate(-50%);width:2px;height:100%;background:var(--slider-line);box-shadow:0 0 6px #00000080}#slider-handle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:36px;height:36px;border-radius:50%;background:#000000b3;border:2px solid var(--handle);display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0006;cursor:ew-resize;transition:transform .1s}#slider-handle:hover{transform:translate(-50%,-50%) scale(1.1)}#meta-bar{background:var(--surface);border-top:1px solid var(--border);padding:4px 12px;display:flex;justify-content:space-between;font-size:11px;color:var(--text-muted);flex-shrink:0}.mode-before #clip-before{width:100%!important}.mode-before #slider{display:none}.mode-after #clip-before{width:0!important}.mode-after #slider{display:none}</style>
|
|
9
|
-
</head>
|
|
10
|
-
<body>
|
|
11
|
-
<div id="app">
|
|
12
|
-
<div id="toolbar">
|
|
13
|
-
<div id="labels-bar">
|
|
14
|
-
<span id="label-before" class="label">Before</span>
|
|
15
|
-
<span id="label-after" class="label">After</span>
|
|
16
|
-
</div>
|
|
17
|
-
<div id="controls">
|
|
18
|
-
<button id="btn-before" title="Show Before">◀ Before</button>
|
|
19
|
-
<button id="btn-split" class="active" title="Split View">Split</button>
|
|
20
|
-
<button id="btn-after" title="Show After">After ▶</button>
|
|
21
|
-
<span class="separator"></span>
|
|
22
|
-
<button id="btn-zoom-in" title="Zoom In">+</button>
|
|
23
|
-
<span id="zoom-level">100%</span>
|
|
24
|
-
<button id="btn-zoom-out" title="Zoom Out">−</button>
|
|
25
|
-
<button id="btn-zoom-fit" title="Fit">Fit</button>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
<div id="viewport">
|
|
29
|
-
<div id="canvas">
|
|
30
|
-
<img id="img-after" alt="After" />
|
|
31
|
-
<div id="clip-before">
|
|
32
|
-
<img id="img-before" alt="Before" />
|
|
33
|
-
</div>
|
|
34
|
-
<div id="slider">
|
|
35
|
-
<div id="slider-line"></div>
|
|
36
|
-
<div id="slider-handle">
|
|
37
|
-
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
38
|
-
<path d="M9 18L3 12L9 6" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
39
|
-
<path d="M15 6L21 12L15 18" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
40
|
-
</svg>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
<div id="meta-bar">
|
|
46
|
-
<span id="meta-before"></span>
|
|
47
|
-
<span id="meta-after"></span>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
</body>
|
|
51
|
-
</html>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
/**
|
|
3
|
-
* Create and start the MCP server in the appropriate transport mode.
|
|
4
|
-
*
|
|
5
|
-
* - If `--http` flag or `PORT` env var is set → HTTP mode (strict path security)
|
|
6
|
-
* - Otherwise → stdio mode (CWD + temp allowed)
|
|
7
|
-
*/
|
|
8
|
-
export declare function createMain(createServer: () => McpServer): Promise<void>;
|
|
9
|
-
//# sourceMappingURL=create-main.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-main.d.ts","sourceRoot":"","sources":["../../src/lib/create-main.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,YAAY,EAAE,MAAM,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
package/dist/lib/create-main.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Entry-point factory — handles stdio vs HTTP transport selection,
|
|
3
|
-
* configures path security, and starts the server.
|
|
4
|
-
*/
|
|
5
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
-
import { startHttpServer } from "./http-server.js";
|
|
7
|
-
import { configurePathSecurity } from "./path-security.js";
|
|
8
|
-
/**
|
|
9
|
-
* Create and start the MCP server in the appropriate transport mode.
|
|
10
|
-
*
|
|
11
|
-
* - If `--http` flag or `PORT` env var is set → HTTP mode (strict path security)
|
|
12
|
-
* - Otherwise → stdio mode (CWD + temp allowed)
|
|
13
|
-
*/
|
|
14
|
-
export async function createMain(createServer) {
|
|
15
|
-
const httpMode = process.argv.includes("--http") || !!process.env.PORT;
|
|
16
|
-
if (httpMode) {
|
|
17
|
-
configurePathSecurity({ mode: "http" });
|
|
18
|
-
await startHttpServer({ createServer });
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
configurePathSecurity({ mode: "stdio" });
|
|
22
|
-
const server = createServer();
|
|
23
|
-
const transport = new StdioServerTransport();
|
|
24
|
-
await server.connect(transport);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=create-main.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-main.js","sourceRoot":"","sources":["../../src/lib/create-main.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAA6B;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAEvE,IAAI,QAAQ,EAAE,CAAC;QACb,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,MAAM,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared HTTP transport with security hardening.
|
|
3
|
-
*
|
|
4
|
-
* - Bearer token auth (MCP_AUTH_TOKEN env var, required)
|
|
5
|
-
* - CORS restriction (MCP_CORS_ORIGIN env var, default: deny)
|
|
6
|
-
* - Rate limiting (100 req/min per IP)
|
|
7
|
-
* - Request body size limit (50 MB)
|
|
8
|
-
* - Session TTL (30 min inactivity) + cleanup + max sessions (100)
|
|
9
|
-
* - Graceful shutdown on SIGTERM/SIGINT
|
|
10
|
-
*/
|
|
11
|
-
import { type Server } from "node:http";
|
|
12
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
-
export interface HttpServerOptions {
|
|
14
|
-
createServer: () => McpServer;
|
|
15
|
-
port?: number;
|
|
16
|
-
}
|
|
17
|
-
export declare function startHttpServer(options: HttpServerOptions): Promise<Server>;
|
|
18
|
-
//# sourceMappingURL=http-server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuDzE,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAsOjB"}
|
package/dist/lib/http-server.js
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared HTTP transport with security hardening.
|
|
3
|
-
*
|
|
4
|
-
* - Bearer token auth (MCP_AUTH_TOKEN env var, required)
|
|
5
|
-
* - CORS restriction (MCP_CORS_ORIGIN env var, default: deny)
|
|
6
|
-
* - Rate limiting (100 req/min per IP)
|
|
7
|
-
* - Request body size limit (50 MB)
|
|
8
|
-
* - Session TTL (30 min inactivity) + cleanup + max sessions (100)
|
|
9
|
-
* - Graceful shutdown on SIGTERM/SIGINT
|
|
10
|
-
*/
|
|
11
|
-
import { createServer as createNodeHttpServer, } from "node:http";
|
|
12
|
-
import { randomUUID } from "node:crypto";
|
|
13
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
14
|
-
const RATE_LIMIT_WINDOW_MS = 60_000;
|
|
15
|
-
const RATE_LIMIT_MAX = 100;
|
|
16
|
-
const rateLimitMap = new Map();
|
|
17
|
-
function checkRateLimit(ip) {
|
|
18
|
-
const now = Date.now();
|
|
19
|
-
const entry = rateLimitMap.get(ip);
|
|
20
|
-
if (!entry || now > entry.resetAt) {
|
|
21
|
-
rateLimitMap.set(ip, { count: 1, resetAt: now + RATE_LIMIT_WINDOW_MS });
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
entry.count++;
|
|
25
|
-
return entry.count <= RATE_LIMIT_MAX;
|
|
26
|
-
}
|
|
27
|
-
// Background cleanup for stale rate-limit entries
|
|
28
|
-
const rateLimitCleanup = setInterval(() => {
|
|
29
|
-
const now = Date.now();
|
|
30
|
-
for (const [ip, entry] of rateLimitMap) {
|
|
31
|
-
if (now > entry.resetAt)
|
|
32
|
-
rateLimitMap.delete(ip);
|
|
33
|
-
}
|
|
34
|
-
}, RATE_LIMIT_WINDOW_MS);
|
|
35
|
-
rateLimitCleanup.unref();
|
|
36
|
-
const SESSION_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
37
|
-
const SESSION_CLEANUP_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
38
|
-
const MAX_SESSIONS = 100;
|
|
39
|
-
const MAX_BODY_SIZE = 50 * 1024 * 1024; // 50 MB
|
|
40
|
-
export async function startHttpServer(options) {
|
|
41
|
-
const port = options.port ?? parseInt(process.env.PORT || "3001", 10);
|
|
42
|
-
// Auth token — optional for local testing, strongly recommended for production
|
|
43
|
-
const authToken = process.env.MCP_AUTH_TOKEN;
|
|
44
|
-
if (!authToken) {
|
|
45
|
-
console.error("WARNING: MCP_AUTH_TOKEN not set. Running without authentication.");
|
|
46
|
-
console.error("Set MCP_AUTH_TOKEN for production use.");
|
|
47
|
-
}
|
|
48
|
-
const corsOrigin = process.env.MCP_CORS_ORIGIN || "";
|
|
49
|
-
const sessions = new Map();
|
|
50
|
-
// Periodic session cleanup
|
|
51
|
-
const sessionCleanup = setInterval(() => {
|
|
52
|
-
const now = Date.now();
|
|
53
|
-
for (const [id, entry] of sessions) {
|
|
54
|
-
if (now - entry.lastActivity > SESSION_TTL_MS) {
|
|
55
|
-
try {
|
|
56
|
-
entry.transport.close();
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
/* already closed */
|
|
60
|
-
}
|
|
61
|
-
sessions.delete(id);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}, SESSION_CLEANUP_INTERVAL_MS);
|
|
65
|
-
function getClientIp(req) {
|
|
66
|
-
if (process.env.TOPAZ_TRUST_PROXY) {
|
|
67
|
-
const forwarded = req.headers["x-forwarded-for"];
|
|
68
|
-
if (typeof forwarded === "string")
|
|
69
|
-
return forwarded.split(",")[0].trim();
|
|
70
|
-
}
|
|
71
|
-
return req.socket.remoteAddress ?? "unknown";
|
|
72
|
-
}
|
|
73
|
-
function setCorsHeaders(res) {
|
|
74
|
-
if (corsOrigin) {
|
|
75
|
-
res.setHeader("Access-Control-Allow-Origin", corsOrigin);
|
|
76
|
-
}
|
|
77
|
-
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
78
|
-
res.setHeader("Access-Control-Allow-Headers", "Content-Type, mcp-session-id, Authorization");
|
|
79
|
-
res.setHeader("Access-Control-Expose-Headers", "mcp-session-id");
|
|
80
|
-
}
|
|
81
|
-
function checkAuth(req, res) {
|
|
82
|
-
if (!authToken)
|
|
83
|
-
return true; // No token configured — skip auth
|
|
84
|
-
const header = req.headers.authorization;
|
|
85
|
-
if (!header || header !== `Bearer ${authToken}`) {
|
|
86
|
-
res.writeHead(401, { "Content-Type": "application/json" });
|
|
87
|
-
res.end(JSON.stringify({ error: "Unauthorized: valid Bearer token required" }));
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
function enforceBodyLimit(req, res) {
|
|
93
|
-
// Quick reject if Content-Length is declared and too large
|
|
94
|
-
const cl = req.headers["content-length"];
|
|
95
|
-
if (cl !== undefined) {
|
|
96
|
-
const size = parseInt(cl, 10);
|
|
97
|
-
if (size > MAX_BODY_SIZE) {
|
|
98
|
-
res.writeHead(413, { "Content-Type": "application/json" });
|
|
99
|
-
res.end(JSON.stringify({
|
|
100
|
-
error: `Request body too large (max ${MAX_BODY_SIZE / (1024 * 1024)}MB)`,
|
|
101
|
-
}));
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Also enforce during streaming (handles chunked transfer encoding)
|
|
106
|
-
let received = 0;
|
|
107
|
-
req.on("data", (chunk) => {
|
|
108
|
-
received += chunk.length;
|
|
109
|
-
if (received > MAX_BODY_SIZE) {
|
|
110
|
-
req.destroy();
|
|
111
|
-
if (!res.headersSent) {
|
|
112
|
-
res.writeHead(413, { "Content-Type": "application/json" });
|
|
113
|
-
res.end(JSON.stringify({
|
|
114
|
-
error: `Request body too large (max ${MAX_BODY_SIZE / (1024 * 1024)}MB)`,
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
return true;
|
|
120
|
-
}
|
|
121
|
-
const httpServer = createNodeHttpServer(async (req, res) => {
|
|
122
|
-
setCorsHeaders(res);
|
|
123
|
-
if (req.method === "OPTIONS") {
|
|
124
|
-
res.writeHead(204);
|
|
125
|
-
res.end();
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
// Health check — no auth required
|
|
129
|
-
if (req.url === "/health") {
|
|
130
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
131
|
-
res.end(JSON.stringify({ status: "ok" }));
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
// Rate limiting
|
|
135
|
-
const clientIp = getClientIp(req);
|
|
136
|
-
if (!checkRateLimit(clientIp)) {
|
|
137
|
-
res.writeHead(429, { "Content-Type": "application/json" });
|
|
138
|
-
res.end(JSON.stringify({ error: "Too many requests. Try again later." }));
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
// Auth
|
|
142
|
-
if (!checkAuth(req, res))
|
|
143
|
-
return;
|
|
144
|
-
// Body size
|
|
145
|
-
if (!enforceBodyLimit(req, res))
|
|
146
|
-
return;
|
|
147
|
-
// MCP endpoint
|
|
148
|
-
if (req.url === "/mcp") {
|
|
149
|
-
const sessionId = req.headers["mcp-session-id"];
|
|
150
|
-
// Existing session
|
|
151
|
-
if (sessionId) {
|
|
152
|
-
const entry = sessions.get(sessionId);
|
|
153
|
-
if (entry) {
|
|
154
|
-
entry.lastActivity = Date.now();
|
|
155
|
-
await entry.transport.handleRequest(req, res);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
res.writeHead(404, { "Content-Type": "application/json" });
|
|
159
|
-
res.end(JSON.stringify({ error: "Session not found" }));
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
// New session
|
|
163
|
-
if (req.method === "POST") {
|
|
164
|
-
if (sessions.size >= MAX_SESSIONS) {
|
|
165
|
-
res.writeHead(503, { "Content-Type": "application/json" });
|
|
166
|
-
res.end(JSON.stringify({
|
|
167
|
-
error: "Too many active sessions. Try again later.",
|
|
168
|
-
}));
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
const transport = new StreamableHTTPServerTransport({
|
|
172
|
-
sessionIdGenerator: () => randomUUID(),
|
|
173
|
-
});
|
|
174
|
-
const server = options.createServer();
|
|
175
|
-
await server.connect(transport);
|
|
176
|
-
transport.onclose = () => {
|
|
177
|
-
if (transport.sessionId) {
|
|
178
|
-
sessions.delete(transport.sessionId);
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
await transport.handleRequest(req, res);
|
|
182
|
-
if (transport.sessionId) {
|
|
183
|
-
sessions.set(transport.sessionId, {
|
|
184
|
-
transport,
|
|
185
|
-
lastActivity: Date.now(),
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
191
|
-
res.end(JSON.stringify({ error: "Bad request: missing session ID" }));
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
res.writeHead(404);
|
|
195
|
-
res.end("Not found");
|
|
196
|
-
});
|
|
197
|
-
// Graceful shutdown
|
|
198
|
-
function shutdown() {
|
|
199
|
-
clearInterval(sessionCleanup);
|
|
200
|
-
httpServer.close(() => {
|
|
201
|
-
for (const [, entry] of sessions) {
|
|
202
|
-
try {
|
|
203
|
-
entry.transport.close();
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
/* ok */
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
process.exit(0);
|
|
210
|
-
});
|
|
211
|
-
// Force exit after 5s
|
|
212
|
-
setTimeout(() => process.exit(1), 5000).unref();
|
|
213
|
-
}
|
|
214
|
-
process.on("SIGTERM", shutdown);
|
|
215
|
-
process.on("SIGINT", shutdown);
|
|
216
|
-
httpServer.listen(port, () => {
|
|
217
|
-
const url = `http://localhost:${port}`;
|
|
218
|
-
console.error(`MCP Streamable HTTP server listening on port ${port}`);
|
|
219
|
-
console.error(` Health: ${url}/health`);
|
|
220
|
-
console.error(` MCP: ${url}/mcp`);
|
|
221
|
-
console.error(` Auth: Bearer token required`);
|
|
222
|
-
console.error(` CORS: ${corsOrigin || "(denied)"}`);
|
|
223
|
-
});
|
|
224
|
-
return httpServer;
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=http-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/compare.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
export interface CompareInput {
|
|
3
|
-
before: string;
|
|
4
|
-
after: string;
|
|
5
|
-
label_before?: string;
|
|
6
|
-
label_after?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function handleCompare(input: CompareInput): Promise<CallToolResult>;
|
|
9
|
-
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AA+BzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,cAAc,CAAC,CAqDzB"}
|
package/dist/tools/compare.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "node:fs";
|
|
2
|
-
import { join, dirname } from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { validateReadPath } from "../lib/path-security.js";
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
function getViewerHtml() {
|
|
7
|
-
const appPath = join(__dirname, "..", "apps", "viewer.html");
|
|
8
|
-
if (!existsSync(appPath)) {
|
|
9
|
-
const distPath = join(__dirname, "apps", "viewer.html");
|
|
10
|
-
if (!existsSync(distPath)) {
|
|
11
|
-
return "<html><body>Viewer not built. Run npm run build:app</body></html>";
|
|
12
|
-
}
|
|
13
|
-
return readFileSync(distPath, "utf-8");
|
|
14
|
-
}
|
|
15
|
-
return readFileSync(appPath, "utf-8");
|
|
16
|
-
}
|
|
17
|
-
function isUrl(s) {
|
|
18
|
-
return /^https?:\/\//i.test(s);
|
|
19
|
-
}
|
|
20
|
-
/** Resolve an image input to a URL the viewer can load. */
|
|
21
|
-
function resolveImageSrc(input) {
|
|
22
|
-
if (isUrl(input)) {
|
|
23
|
-
return input;
|
|
24
|
-
}
|
|
25
|
-
// Local file — validate and convert to file:// URL
|
|
26
|
-
const absPath = validateReadPath(input);
|
|
27
|
-
return `file://${absPath}`;
|
|
28
|
-
}
|
|
29
|
-
export async function handleCompare(input) {
|
|
30
|
-
if (!input.before || !input.after) {
|
|
31
|
-
return {
|
|
32
|
-
content: [
|
|
33
|
-
{ type: "text", text: "Error: Both before and after are required." },
|
|
34
|
-
],
|
|
35
|
-
isError: true,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const labelBefore = input.label_before ?? "Before";
|
|
39
|
-
const labelAfter = input.label_after ?? "After";
|
|
40
|
-
try {
|
|
41
|
-
const beforeSrc = resolveImageSrc(input.before);
|
|
42
|
-
const afterSrc = resolveImageSrc(input.after);
|
|
43
|
-
// Inject data into viewer HTML
|
|
44
|
-
const viewerTemplate = getViewerHtml();
|
|
45
|
-
const safeJson = JSON.stringify({
|
|
46
|
-
before: beforeSrc,
|
|
47
|
-
after: afterSrc,
|
|
48
|
-
labelBefore,
|
|
49
|
-
labelAfter,
|
|
50
|
-
}).replace(/</g, "\\u003c");
|
|
51
|
-
const dataScript = `<script>window.__COMPARE_DATA__=${safeJson};</script>`;
|
|
52
|
-
const html = viewerTemplate.replace("</head>", `${dataScript}\n</head>`);
|
|
53
|
-
return {
|
|
54
|
-
content: [
|
|
55
|
-
{
|
|
56
|
-
type: "text",
|
|
57
|
-
text: `Comparing images:\n• Before: ${input.before} (${labelBefore})\n• After: ${input.after} (${labelAfter})\n\nUse the slider to compare, scroll to zoom, double-click to toggle zoom. Keys: 1/2/3 for before/split/after.`,
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
type: "resource",
|
|
61
|
-
resource: {
|
|
62
|
-
uri: "ui://topaz/viewer",
|
|
63
|
-
mimeType: "text/html;profile=mcp-app",
|
|
64
|
-
text: html,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
72
|
-
return {
|
|
73
|
-
content: [
|
|
74
|
-
{ type: "text", text: `Error comparing images: ${message}` },
|
|
75
|
-
],
|
|
76
|
-
isError: true,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=compare.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/tools/compare.ts"],"names":[],"mappings":"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"}
|