@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.
Files changed (40) hide show
  1. package/dist/api/client.js +3 -3
  2. package/dist/api/client.js.map +1 -1
  3. package/dist/api/models.d.ts +2 -2
  4. package/dist/api/models.d.ts.map +1 -1
  5. package/dist/api/models.js +6 -23
  6. package/dist/api/models.js.map +1 -1
  7. package/dist/api/types.d.ts +2 -3
  8. package/dist/api/types.d.ts.map +1 -1
  9. package/dist/lib/errors.d.ts +2 -11
  10. package/dist/lib/errors.d.ts.map +1 -1
  11. package/dist/lib/errors.js +0 -9
  12. package/dist/lib/errors.js.map +1 -1
  13. package/dist/lib/fetch-url.d.ts +4 -4
  14. package/dist/lib/fetch-url.d.ts.map +1 -1
  15. package/dist/lib/fetch-url.js +4 -10
  16. package/dist/lib/fetch-url.js.map +1 -1
  17. package/dist/lib/path-security.d.ts +2 -3
  18. package/dist/lib/path-security.d.ts.map +1 -1
  19. package/dist/lib/path-security.js +22 -11
  20. package/dist/lib/path-security.js.map +1 -1
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +2 -66
  23. package/dist/server.js.map +1 -1
  24. package/dist/tools/enhance.d.ts.map +1 -1
  25. package/dist/tools/enhance.js +2 -25
  26. package/dist/tools/enhance.js.map +1 -1
  27. package/package.json +4 -9
  28. package/dist/apps/viewer.html +0 -51
  29. package/dist/lib/create-main.d.ts +0 -9
  30. package/dist/lib/create-main.d.ts.map +0 -1
  31. package/dist/lib/create-main.js +0 -27
  32. package/dist/lib/create-main.js.map +0 -1
  33. package/dist/lib/http-server.d.ts +0 -18
  34. package/dist/lib/http-server.d.ts.map +0 -1
  35. package/dist/lib/http-server.js +0 -226
  36. package/dist/lib/http-server.js.map +0 -1
  37. package/dist/tools/compare.d.ts +0 -9
  38. package/dist/tools/compare.d.ts.map +0 -1
  39. package/dist/tools/compare.js +0 -80
  40. package/dist/tools/compare.js.map +0 -1
@@ -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(outputDir, { recursive: true });
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;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -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 for all images.
12
+ * Auto-select model. Defaults to Standard V2 with face enhancement.
13
13
  */
14
- export declare function autoSelectModel(_imageWidth: number): {
14
+ export declare function autoSelectModel(): {
15
15
  model: EnhanceModel;
16
16
  faceEnhancement: boolean;
17
17
  };
@@ -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,CAwD1D,CAAC;AAWF,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,CAAC,WAAW,EAAE,MAAM,GAAG;IACpD,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAEA"}
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"}
@@ -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
- "Recovery V2": {
33
- description: "Restores old, damaged, or heavily degraded photos",
27
+ "Recover 3": {
28
+ description: "Upscale low-res images into high-fidelity results with natural detail",
34
29
  type: "generative",
35
- bestFor: "Old photos, damaged images",
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
- "Recovery V2",
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 for all images.
55
+ * Auto-select model. Defaults to Standard V2 with face enhancement.
73
56
  */
74
- export function autoSelectModel(_imageWidth) {
57
+ export function autoSelectModel() {
75
58
  return { model: "Standard V2", faceEnhancement: true };
76
59
  }
77
60
  //# sourceMappingURL=models.js.map
@@ -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,aAAa,EAAE;QACb,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,2CAA2C;KACrD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,iCAAiC;QAC9C,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,2BAA2B;KACrC;IACD,aAAa,EAAE;QACb,WAAW,EAAE,mDAAmD;QAChE,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,MAAM,EAAE;QACN,WAAW,EAAE,2DAA2D;QACxE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,qBAAqB;KAC/B;IACD,UAAU,EAAE;QACV,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,4CAA4C;KACtD;IACD,KAAK,EAAE;QACL,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,wCAAwC;KAClD;CACF,CAAC;AAEF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAS;IAChD,UAAU;IACV,aAAa;IACb,cAAc;IACd,QAAQ;IACR,UAAU;IACV,OAAO;CACR,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,CAAC,WAAmB;IAIjD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC"}
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"}
@@ -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" | "Text Refine";
4
- export type EnhanceGenerativeModel = "Redefine" | "Recovery V2" | "Standard MAX" | "Wonder" | "Wonder 2" | "Bloom";
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;
@@ -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,GAClB,aAAa,CAAC;AAElB,MAAM,MAAM,sBAAsB,GAC9B,UAAU,GACV,aAAa,GACb,cAAc,GACd,QAAQ,GACR,UAAU,GACV,OAAO,CAAC;AAEZ,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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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"}
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"}
@@ -1,16 +1,7 @@
1
1
  /**
2
2
  * Shared MCP tool result helpers.
3
3
  */
4
- export interface ToolResult {
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): ToolResult;
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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKrD;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAInD"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,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;AAED,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC"}
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"}
@@ -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: 30 000) */
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 or local path.
15
- * URLs go through SSRF-safe fetchUrl; paths are validated by the caller.
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(source: string, options?: FetchUrlOptions): Promise<Buffer>;
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,8CAA8C;IAC9C,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,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
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"}
@@ -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 or local path.
228
- * URLs go through SSRF-safe fetchUrl; paths are validated by the caller.
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(source, options) {
231
- if (source.startsWith("http://") || source.startsWith("https://")) {
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":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,SAAS;AACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,CAAC,YAAY;AAChD,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,aAAa;IACb,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,gBAAgB;IAChB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACtE,iBAAiB;IACjB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACtD,yBAAyB;IACzB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAClC,8BAA8B;IAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACtD,YAAY;IACZ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/B,eAAe;IACf,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,iBAAiB;IACjB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,iDAAiD;IACjD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,yBAAyB;IACzB,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,4CAA4C;IAC5C,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,uBAAuB,MAAM,CAAC,QAAQ,kCAAkC,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEjC,kCAAkC;IAClC,IACE,QAAQ,KAAK,WAAW;QACxB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO;IACT,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YAClC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAaD;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,QAAgB;IAEhB,oCAAoC;IACpC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,mCAAmC;IACvD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,0DAA0D;IAC1D,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,UAA2B,EAAE,EAC7B,cAAc,GAAG,CAAC;IAElB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAE1D,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,sDAAsD;IACtD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,uEAAuE;IACvE,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE7D,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;QACtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAC5B,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,UAAU,GAAwB;QACtC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,2BAA2B;QAChE,IAAI;QACJ,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;QACrC,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,8BAA8B;SAClD;QACD,4CAA4C;QAC5C,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU;YAC5C,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,SAAS,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1C,kDAAkD;YAClD,IACE,GAAG,CAAC,UAAU;gBACd,GAAG,CAAC,UAAU,IAAI,GAAG;gBACrB,GAAG,CAAC,UAAU,GAAG,GAAG;gBACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,EACpB,CAAC;gBACD,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,GAAG,CAAC,OAAO,CAAC,QAAQ,EACpB,GAAG,CACJ,CAAC,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CACrD,OAAO,EACP,MAAM,CACP,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtE,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,UAAU,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC1B,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;oBACzB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,CACJ,IAAI,KAAK,CACP,+BAA+B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,CAC/E,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,OAAyB;IAEzB,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -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
- * Translates sandbox paths from Claude Cowork and allows reading from
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
- * Translates sandbox paths and restricts writes to CWD + temp + TOPAZ_ALLOWED_DIRS.
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":"AA0IA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB3D"}
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 = parts[0] === "" ? 1 : 1; i < parts.length; 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
- const home = os.homedir();
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
- * Translates sandbox paths from Claude Cowork and allows reading from
144
- * anywhere except sensitive directories.
155
+ * Expands ~, translates sandbox paths, blocks sensitive directories.
145
156
  */
146
157
  export function validateReadPath(inputPath) {
147
- const translated = translateSandboxPath(inputPath);
148
- const resolved = path.resolve(translated);
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
- * Translates sandbox paths and restricts writes to CWD + temp + TOPAZ_ALLOWED_DIRS.
168
+ * Expands ~, translates sandbox paths, restricts to CWD + temp + TOPAZ_ALLOWED_DIRS.
158
169
  */
159
170
  export function validateWritePath(inputPath) {
160
- const translated = translateSandboxPath(inputPath);
161
- const resolved = path.resolve(translated);
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":"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"}
1
+ {"version":3,"file":"path-security.js","sourceRoot":"","sources":["../../src/lib/path-security.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,wBAAgB,YAAY,IAAI,SAAS,CAqIxC"}
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.0" }, { capabilities: { tools: {}, resources: {} } });
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, Text Refine, Redefine, Recovery V2, Standard MAX, Wonder, Wonder 2, Bloom"),
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
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
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,CAqJzB"}
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"}
@@ -92,7 +92,7 @@ export async function handleEnhance(input, client) {
92
92
  selectedModel = input.model;
93
93
  }
94
94
  else {
95
- const auto = autoSelectModel(origWidth);
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 || undefined,
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.7",
4
- "description": "Topaz Labs MCP server — AI image enhancement and comparison for LLMs",
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:app": "npx --no-install vite 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"
@@ -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"}
@@ -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"}
@@ -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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"}
@@ -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"}
@@ -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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"}