mcp-stitch 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -0
- package/dist/config/stitch.d.ts +11 -0
- package/dist/config/stitch.d.ts.map +1 -0
- package/dist/config/stitch.js +38 -0
- package/dist/config/stitch.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/models/stitch.d.ts +20 -0
- package/dist/models/stitch.d.ts.map +1 -0
- package/dist/models/stitch.js +2 -0
- package/dist/models/stitch.js.map +1 -0
- package/dist/services/stitchClient.d.ts +8 -0
- package/dist/services/stitchClient.d.ts.map +1 -0
- package/dist/services/stitchClient.js +189 -0
- package/dist/services/stitchClient.js.map +1 -0
- package/dist/tools/status.d.ts +3 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +50 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/stitchDesignSystems.d.ts +3 -0
- package/dist/tools/stitchDesignSystems.d.ts.map +1 -0
- package/dist/tools/stitchDesignSystems.js +340 -0
- package/dist/tools/stitchDesignSystems.js.map +1 -0
- package/dist/tools/stitchExport.d.ts +3 -0
- package/dist/tools/stitchExport.d.ts.map +1 -0
- package/dist/tools/stitchExport.js +923 -0
- package/dist/tools/stitchExport.js.map +1 -0
- package/dist/tools/stitchProjects.d.ts +3 -0
- package/dist/tools/stitchProjects.d.ts.map +1 -0
- package/dist/tools/stitchProjects.js +125 -0
- package/dist/tools/stitchProjects.js.map +1 -0
- package/dist/tools/stitchScreens.d.ts +3 -0
- package/dist/tools/stitchScreens.d.ts.map +1 -0
- package/dist/tools/stitchScreens.js +320 -0
- package/dist/tools/stitchScreens.js.map +1 -0
- package/dist/utils/redact.d.ts +3 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +14 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/safePath.d.ts +3 -0
- package/dist/utils/safePath.d.ts.map +1 -0
- package/dist/utils/safePath.js +81 -0
- package/dist/utils/safePath.js.map +1 -0
- package/dist/utils/stitchIds.d.ts +12 -0
- package/dist/utils/stitchIds.d.ts.map +1 -0
- package/dist/utils/stitchIds.js +48 -0
- package/dist/utils/stitchIds.js.map +1 -0
- package/dist/utils/stitchResponse.d.ts +11 -0
- package/dist/utils/stitchResponse.d.ts.map +1 -0
- package/dist/utils/stitchResponse.js +71 -0
- package/dist/utils/stitchResponse.js.map +1 -0
- package/dist/utils/stitchScreenResolver.d.ts +26 -0
- package/dist/utils/stitchScreenResolver.d.ts.map +1 -0
- package/dist/utils/stitchScreenResolver.js +159 -0
- package/dist/utils/stitchScreenResolver.js.map +1 -0
- package/dist/utils/stitchToolHelpers.d.ts +6 -0
- package/dist/utils/stitchToolHelpers.d.ts.map +1 -0
- package/dist/utils/stitchToolHelpers.js +25 -0
- package/dist/utils/stitchToolHelpers.js.map +1 -0
- package/docs/stitch-tools.md +389 -0
- package/package.json +40 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { lstat, mkdir, realpath } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
function normalizeForCompare(input) {
|
|
4
|
+
return process.platform === "win32" ? input.toLowerCase() : input;
|
|
5
|
+
}
|
|
6
|
+
export function sanitizeFileName(name) {
|
|
7
|
+
const cleaned = name.replace(/[^a-zA-Z0-9._-]/g, "_").replace(/_+/g, "_");
|
|
8
|
+
return cleaned.length > 0 ? cleaned : "artifact";
|
|
9
|
+
}
|
|
10
|
+
function isPathInside(baseDir, targetPath) {
|
|
11
|
+
const baseCmp = normalizeForCompare(path.resolve(baseDir) + path.sep);
|
|
12
|
+
const targetCmp = normalizeForCompare(path.resolve(targetPath));
|
|
13
|
+
return targetCmp.startsWith(baseCmp) || targetCmp === normalizeForCompare(path.resolve(baseDir));
|
|
14
|
+
}
|
|
15
|
+
function validateRelativePath(relativeFilePath) {
|
|
16
|
+
if (!relativeFilePath || relativeFilePath.trim().length === 0) {
|
|
17
|
+
throw new Error("Invalid output path: relative path cannot be empty.");
|
|
18
|
+
}
|
|
19
|
+
if (path.isAbsolute(relativeFilePath)) {
|
|
20
|
+
throw new Error("Invalid output path: absolute paths are not allowed.");
|
|
21
|
+
}
|
|
22
|
+
const segments = relativeFilePath.split(/[\\/]+/);
|
|
23
|
+
for (const segment of segments) {
|
|
24
|
+
if (!segment || segment === "." || segment === "..") {
|
|
25
|
+
throw new Error("Invalid output path: path traversal segments are not allowed.");
|
|
26
|
+
}
|
|
27
|
+
if (segment.includes(":")) {
|
|
28
|
+
throw new Error("Invalid output path: suspicious path segment detected.");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function pathExists(pathname) {
|
|
33
|
+
try {
|
|
34
|
+
await lstat(pathname);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function assertNoSymlinkSegments(baseDir, relativeFilePath) {
|
|
42
|
+
const base = path.resolve(baseDir);
|
|
43
|
+
const parts = relativeFilePath.split(/[\\/]+/);
|
|
44
|
+
const parentParts = parts.slice(0, -1);
|
|
45
|
+
let current = base;
|
|
46
|
+
for (const part of parentParts) {
|
|
47
|
+
current = path.join(current, part);
|
|
48
|
+
if (!(await pathExists(current))) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const stats = await lstat(current);
|
|
52
|
+
if (stats.isSymbolicLink()) {
|
|
53
|
+
throw new Error("Invalid output path: symlink directories are not allowed in output path.");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function prepareSafeOutputPath(baseDir, relativeFilePath) {
|
|
58
|
+
validateRelativePath(relativeFilePath);
|
|
59
|
+
const base = path.resolve(baseDir);
|
|
60
|
+
await mkdir(base, { recursive: true });
|
|
61
|
+
const baseReal = await realpath(base);
|
|
62
|
+
const fullPath = path.resolve(baseReal, relativeFilePath);
|
|
63
|
+
if (!isPathInside(baseReal, fullPath)) {
|
|
64
|
+
throw new Error("Invalid output path: file must stay within the output directory.");
|
|
65
|
+
}
|
|
66
|
+
await assertNoSymlinkSegments(baseReal, relativeFilePath);
|
|
67
|
+
const parent = path.dirname(fullPath);
|
|
68
|
+
await mkdir(parent, { recursive: true });
|
|
69
|
+
const parentReal = await realpath(parent);
|
|
70
|
+
if (!isPathInside(baseReal, parentReal)) {
|
|
71
|
+
throw new Error("Invalid output path: resolved parent path escapes output directory.");
|
|
72
|
+
}
|
|
73
|
+
if (await pathExists(fullPath)) {
|
|
74
|
+
const fileStats = await lstat(fullPath);
|
|
75
|
+
if (fileStats.isSymbolicLink()) {
|
|
76
|
+
throw new Error("Invalid output path: target file cannot be a symlink.");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return fullPath;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=safePath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePath.js","sourceRoot":"","sources":["../../src/utils/safePath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function toBareProjectId(projectIdOrName: string): string;
|
|
2
|
+
export declare function toProjectName(projectIdOrName: string): string;
|
|
3
|
+
export declare function toBareAssetId(assetIdOrName: string): string;
|
|
4
|
+
export declare function toAssetName(assetIdOrName: string): string;
|
|
5
|
+
export declare function toBareScreenId(screenIdOrName: string): string;
|
|
6
|
+
export type StitchScreenIdentifier = {
|
|
7
|
+
name: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
screenId: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function toScreenIdentifier(screenIdOrName: string, projectIdOrName?: string): StitchScreenIdentifier | null;
|
|
12
|
+
//# sourceMappingURL=stitchIds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchIds.d.ts","sourceRoot":"","sources":["../../src/utils/stitchIds.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,wBAAgB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,wBAAgB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,MAAM,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB,sBAAsB,GAAG,IAAI,CAoB/B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const PROJECT_PREFIX = "projects/";
|
|
2
|
+
const SCREEN_SEPARATOR = "/screens/";
|
|
3
|
+
const ASSET_PREFIX = "assets/";
|
|
4
|
+
export function toBareProjectId(projectIdOrName) {
|
|
5
|
+
return projectIdOrName.startsWith(PROJECT_PREFIX)
|
|
6
|
+
? projectIdOrName.slice(PROJECT_PREFIX.length)
|
|
7
|
+
: projectIdOrName;
|
|
8
|
+
}
|
|
9
|
+
export function toProjectName(projectIdOrName) {
|
|
10
|
+
return projectIdOrName.startsWith(PROJECT_PREFIX)
|
|
11
|
+
? projectIdOrName
|
|
12
|
+
: `${PROJECT_PREFIX}${projectIdOrName}`;
|
|
13
|
+
}
|
|
14
|
+
export function toBareAssetId(assetIdOrName) {
|
|
15
|
+
return assetIdOrName.startsWith(ASSET_PREFIX)
|
|
16
|
+
? assetIdOrName.slice(ASSET_PREFIX.length)
|
|
17
|
+
: assetIdOrName;
|
|
18
|
+
}
|
|
19
|
+
export function toAssetName(assetIdOrName) {
|
|
20
|
+
return assetIdOrName.startsWith(ASSET_PREFIX)
|
|
21
|
+
? assetIdOrName
|
|
22
|
+
: `${ASSET_PREFIX}${assetIdOrName}`;
|
|
23
|
+
}
|
|
24
|
+
export function toBareScreenId(screenIdOrName) {
|
|
25
|
+
const index = screenIdOrName.indexOf(SCREEN_SEPARATOR);
|
|
26
|
+
return index >= 0 ? screenIdOrName.slice(index + SCREEN_SEPARATOR.length) : screenIdOrName;
|
|
27
|
+
}
|
|
28
|
+
export function toScreenIdentifier(screenIdOrName, projectIdOrName) {
|
|
29
|
+
if (screenIdOrName.includes(SCREEN_SEPARATOR)) {
|
|
30
|
+
const [projectName, screenId] = screenIdOrName.split(SCREEN_SEPARATOR);
|
|
31
|
+
if (!projectName || !screenId)
|
|
32
|
+
return null;
|
|
33
|
+
return {
|
|
34
|
+
name: screenIdOrName,
|
|
35
|
+
projectId: toBareProjectId(projectName),
|
|
36
|
+
screenId,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (!projectIdOrName)
|
|
40
|
+
return null;
|
|
41
|
+
const projectId = toBareProjectId(projectIdOrName);
|
|
42
|
+
return {
|
|
43
|
+
name: `${toProjectName(projectId)}/screens/${screenIdOrName}`,
|
|
44
|
+
projectId,
|
|
45
|
+
screenId: screenIdOrName,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=stitchIds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchIds.js","sourceRoot":"","sources":["../../src/utils/stitchIds.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,WAAW,CAAC;AACnC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AACrC,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,UAAU,eAAe,CAAC,eAAuB;IACrD,OAAO,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC;QAC/C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,eAAe,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,eAAuB;IACnD,OAAO,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC;QAC/C,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,GAAG,cAAc,GAAG,eAAe,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,OAAO,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC;QAC3C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;QAC1C,CAAC,CAAC,aAAa,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAqB;IAC/C,OAAO,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC;QAC3C,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,GAAG,YAAY,GAAG,aAAa,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,cAAsB;IACnD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;AAC7F,CAAC;AAQD,MAAM,UAAU,kBAAkB,CAChC,cAAsB,EACtB,eAAwB;IAExB,IAAI,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC;YACvC,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,SAAS,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO;QACL,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,YAAY,cAAc,EAAE;QAC7D,SAAS;QACT,QAAQ,EAAE,cAAc;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type SummaryOptions = {
|
|
2
|
+
title: string;
|
|
3
|
+
data: unknown;
|
|
4
|
+
itemKeys?: string[];
|
|
5
|
+
idKeys?: string[];
|
|
6
|
+
maxPreviewChars?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function safeJsonPreview(value: unknown, maxChars?: number): string;
|
|
9
|
+
export declare function formatStitchSummary(options: SummaryOptions): string;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=stitchResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchResponse.d.ts","sourceRoot":"","sources":["../../src/utils/stitchResponse.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAKF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAO,GAAG,MAAM,CAQvE;AAuDD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAyBnE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const DEFAULT_ITEM_KEYS = ["projects", "screens", "items", "results"];
|
|
2
|
+
const DEFAULT_ID_KEYS = ["name", "id", "project", "projectId", "screenId", "title"];
|
|
3
|
+
export function safeJsonPreview(value, maxChars = 1200) {
|
|
4
|
+
const text = JSON.stringify(value, null, 2) ?? "null";
|
|
5
|
+
if (text.length <= maxChars) {
|
|
6
|
+
return text;
|
|
7
|
+
}
|
|
8
|
+
return `${text.slice(0, maxChars)}\n... [truncated ${text.length - maxChars} chars]`;
|
|
9
|
+
}
|
|
10
|
+
function findItems(data, itemKeys) {
|
|
11
|
+
if (Array.isArray(data)) {
|
|
12
|
+
return data;
|
|
13
|
+
}
|
|
14
|
+
if (!data || typeof data !== "object") {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const obj = data;
|
|
18
|
+
for (const key of itemKeys) {
|
|
19
|
+
const value = obj[key];
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
for (const value of Object.values(obj)) {
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function pickSampleIds(items, idKeys) {
|
|
32
|
+
const ids = [];
|
|
33
|
+
for (const item of items) {
|
|
34
|
+
if (!item || typeof item !== "object") {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const obj = item;
|
|
38
|
+
for (const key of idKeys) {
|
|
39
|
+
const value = obj[key];
|
|
40
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
41
|
+
ids.push(value.trim());
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (ids.length >= 5) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return ids;
|
|
50
|
+
}
|
|
51
|
+
export function formatStitchSummary(options) {
|
|
52
|
+
const itemKeys = options.itemKeys ?? DEFAULT_ITEM_KEYS;
|
|
53
|
+
const idKeys = options.idKeys ?? DEFAULT_ID_KEYS;
|
|
54
|
+
const maxPreviewChars = options.maxPreviewChars ?? 1200;
|
|
55
|
+
const items = findItems(options.data, itemKeys);
|
|
56
|
+
const ids = items ? pickSampleIds(items, idKeys) : [];
|
|
57
|
+
const lines = [options.title, ""];
|
|
58
|
+
if (items) {
|
|
59
|
+
lines.push(`Item count: ${items.length}`);
|
|
60
|
+
}
|
|
61
|
+
if (ids.length > 0) {
|
|
62
|
+
lines.push(`Sample ids: ${ids.join(", ")}`);
|
|
63
|
+
}
|
|
64
|
+
if (options.data && typeof options.data === "object" && !Array.isArray(options.data)) {
|
|
65
|
+
const keys = Object.keys(options.data);
|
|
66
|
+
lines.push(`Top-level keys: ${keys.slice(0, 10).join(", ") || "(none)"}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push("", "Preview:", safeJsonPreview(options.data, maxPreviewChars));
|
|
69
|
+
return lines.join("\n");
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=stitchResponse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchResponse.js","sourceRoot":"","sources":["../../src/utils/stitchResponse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { StitchClient } from "../services/stitchClient.js";
|
|
2
|
+
import type { JsonObject } from "../models/stitch.js";
|
|
3
|
+
type ResolveScreenSuccess = {
|
|
4
|
+
ok: true;
|
|
5
|
+
input: JsonObject;
|
|
6
|
+
resolver: {
|
|
7
|
+
requested: string;
|
|
8
|
+
projectId?: string;
|
|
9
|
+
strategy: "full-resource-name" | "list-screens-match";
|
|
10
|
+
matchedName: string;
|
|
11
|
+
matchedScreenId: string;
|
|
12
|
+
matchedTitle?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
type ResolveScreenFailure = {
|
|
16
|
+
ok: false;
|
|
17
|
+
error: string;
|
|
18
|
+
};
|
|
19
|
+
export type ResolveScreenResult = ResolveScreenSuccess | ResolveScreenFailure;
|
|
20
|
+
export declare function resolveScreenInput(options: {
|
|
21
|
+
client: StitchClient;
|
|
22
|
+
screenIdOrName: string;
|
|
23
|
+
projectIdOrName?: string | undefined;
|
|
24
|
+
}): Promise<ResolveScreenResult>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=stitchScreenResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchScreenResolver.d.ts","sourceRoot":"","sources":["../../src/utils/stitchScreenResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAatD,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;QACtD,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AAoH9E,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyE/B"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { toBareProjectId, toScreenIdentifier, } from "./stitchIds.js";
|
|
2
|
+
function normalizeLookupText(value) {
|
|
3
|
+
return value.trim().replace(/\s+/g, " ").toLowerCase();
|
|
4
|
+
}
|
|
5
|
+
function getString(obj, key) {
|
|
6
|
+
const value = obj[key];
|
|
7
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
8
|
+
}
|
|
9
|
+
function toScreenId(name) {
|
|
10
|
+
const marker = "/screens/";
|
|
11
|
+
const index = name.indexOf(marker);
|
|
12
|
+
return index >= 0 ? name.slice(index + marker.length) : name;
|
|
13
|
+
}
|
|
14
|
+
function toScreenSummary(value) {
|
|
15
|
+
if (!value || typeof value !== "object")
|
|
16
|
+
return null;
|
|
17
|
+
const obj = value;
|
|
18
|
+
const name = getString(obj, "name") ?? getString(obj, "sourceScreen");
|
|
19
|
+
if (!name)
|
|
20
|
+
return null;
|
|
21
|
+
const title = getString(obj, "title");
|
|
22
|
+
return {
|
|
23
|
+
name,
|
|
24
|
+
screenId: getString(obj, "screenId") ?? getString(obj, "id") ?? toScreenId(name),
|
|
25
|
+
...(title ? { title } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function parseContentJson(data) {
|
|
29
|
+
const content = data.content;
|
|
30
|
+
if (!Array.isArray(content))
|
|
31
|
+
return null;
|
|
32
|
+
for (const item of content) {
|
|
33
|
+
if (!item || typeof item !== "object")
|
|
34
|
+
continue;
|
|
35
|
+
const text = item.text;
|
|
36
|
+
if (typeof text !== "string")
|
|
37
|
+
continue;
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(text);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
function extractScreens(data) {
|
|
48
|
+
if (!data || typeof data !== "object")
|
|
49
|
+
return [];
|
|
50
|
+
const obj = data;
|
|
51
|
+
const structuredContent = obj.structuredContent;
|
|
52
|
+
const source = structuredContent && typeof structuredContent === "object"
|
|
53
|
+
? structuredContent
|
|
54
|
+
: parseContentJson(obj);
|
|
55
|
+
if (!source || typeof source !== "object")
|
|
56
|
+
return [];
|
|
57
|
+
const screens = source.screens;
|
|
58
|
+
if (!Array.isArray(screens))
|
|
59
|
+
return [];
|
|
60
|
+
return screens
|
|
61
|
+
.map((screen) => toScreenSummary(screen))
|
|
62
|
+
.filter((screen) => Boolean(screen));
|
|
63
|
+
}
|
|
64
|
+
function toIdentifier(screen) {
|
|
65
|
+
return toScreenIdentifier(screen.name);
|
|
66
|
+
}
|
|
67
|
+
function formatScreen(screen) {
|
|
68
|
+
const title = screen.title ? ` title="${screen.title}"` : "";
|
|
69
|
+
return `- ${screen.name} (screenId: ${screen.screenId}${title})`;
|
|
70
|
+
}
|
|
71
|
+
function ambiguityError(lookup, matches) {
|
|
72
|
+
return [
|
|
73
|
+
`Ambiguous screen lookup: "${lookup}" matched ${matches.length} screens.`,
|
|
74
|
+
"Use a full screen resource name or one of these screen ids:",
|
|
75
|
+
...matches.map((match) => formatScreen(match)),
|
|
76
|
+
].join("\n");
|
|
77
|
+
}
|
|
78
|
+
function notFoundError(lookup, projectId) {
|
|
79
|
+
return `No screen matched "${lookup}" in project ${projectId}. Use stitch_list_screens to inspect available screens, then retry with a full screen resource name or exact screen id.`;
|
|
80
|
+
}
|
|
81
|
+
function identifierFieldsForMatch(screen) {
|
|
82
|
+
return [screen.name, screen.screenId];
|
|
83
|
+
}
|
|
84
|
+
function lookupFieldsForMatch(screen) {
|
|
85
|
+
return [screen.name, screen.screenId, screen.title ?? ""].filter((value) => value.length > 0);
|
|
86
|
+
}
|
|
87
|
+
function findMatches(lookup, screens) {
|
|
88
|
+
const normalizedLookup = normalizeLookupText(lookup);
|
|
89
|
+
const exactIdentifierMatches = screens.filter((screen) => identifierFieldsForMatch(screen).some((field) => normalizeLookupText(field) === normalizedLookup));
|
|
90
|
+
if (exactIdentifierMatches.length > 0) {
|
|
91
|
+
return exactIdentifierMatches;
|
|
92
|
+
}
|
|
93
|
+
return screens.filter((screen) => lookupFieldsForMatch(screen).some((field) => normalizeLookupText(field).includes(normalizedLookup)));
|
|
94
|
+
}
|
|
95
|
+
export async function resolveScreenInput(options) {
|
|
96
|
+
const directIdentifier = toScreenIdentifier(options.screenIdOrName);
|
|
97
|
+
if (directIdentifier) {
|
|
98
|
+
return {
|
|
99
|
+
ok: true,
|
|
100
|
+
input: directIdentifier,
|
|
101
|
+
resolver: {
|
|
102
|
+
requested: options.screenIdOrName,
|
|
103
|
+
projectId: directIdentifier.projectId,
|
|
104
|
+
strategy: "full-resource-name",
|
|
105
|
+
matchedName: directIdentifier.name,
|
|
106
|
+
matchedScreenId: directIdentifier.screenId,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (!options.projectIdOrName) {
|
|
111
|
+
return {
|
|
112
|
+
ok: false,
|
|
113
|
+
error: "Invalid screen lookup: provide a full screen resource name, or provide projectId with a screen id/title fragment.",
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
const projectId = toBareProjectId(options.projectIdOrName);
|
|
117
|
+
const listResult = await options.client.callTool({
|
|
118
|
+
toolName: "list_screens",
|
|
119
|
+
input: { projectId },
|
|
120
|
+
});
|
|
121
|
+
if (!listResult.ok) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
error: `Failed to resolve screen lookup because list_screens failed.\n\n${listResult.error}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const screens = extractScreens(listResult.data);
|
|
128
|
+
const matches = findMatches(options.screenIdOrName, screens);
|
|
129
|
+
if (matches.length === 0) {
|
|
130
|
+
return { ok: false, error: notFoundError(options.screenIdOrName, projectId) };
|
|
131
|
+
}
|
|
132
|
+
if (matches.length > 1) {
|
|
133
|
+
return { ok: false, error: ambiguityError(options.screenIdOrName, matches) };
|
|
134
|
+
}
|
|
135
|
+
const match = matches[0];
|
|
136
|
+
if (!match) {
|
|
137
|
+
return { ok: false, error: notFoundError(options.screenIdOrName, projectId) };
|
|
138
|
+
}
|
|
139
|
+
const identifier = toIdentifier(match);
|
|
140
|
+
if (!identifier) {
|
|
141
|
+
return {
|
|
142
|
+
ok: false,
|
|
143
|
+
error: `Matched screen "${match.name}" but could not build a get_screen identifier.`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
ok: true,
|
|
148
|
+
input: identifier,
|
|
149
|
+
resolver: {
|
|
150
|
+
requested: options.screenIdOrName,
|
|
151
|
+
projectId,
|
|
152
|
+
strategy: "list-screens-match",
|
|
153
|
+
matchedName: identifier.name,
|
|
154
|
+
matchedScreenId: identifier.screenId,
|
|
155
|
+
...(match.title ? { matchedTitle: match.title } : {}),
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=stitchScreenResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchScreenResolver.js","sourceRoot":"","sources":["../../src/utils/stitchScreenResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { JsonObject, StitchCallResponse } from "../models/stitch.js";
|
|
2
|
+
export declare function toErrorText(prefix: string, message: string): string;
|
|
3
|
+
export declare function requireConfirmation(action: string, confirm?: boolean): string | null;
|
|
4
|
+
export declare function compactStitchResult(title: string, result: StitchCallResponse): string;
|
|
5
|
+
export declare function jsonObjectFromRaw(rawInput: JsonObject | undefined): JsonObject | undefined;
|
|
6
|
+
//# sourceMappingURL=stitchToolHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchToolHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/stitchToolHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAYrF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAE1F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { formatStitchSummary } from "./stitchResponse.js";
|
|
2
|
+
export function toErrorText(prefix, message) {
|
|
3
|
+
return `${prefix}\n\n${message}`;
|
|
4
|
+
}
|
|
5
|
+
export function requireConfirmation(action, confirm) {
|
|
6
|
+
return confirm === true
|
|
7
|
+
? null
|
|
8
|
+
: `${action} is a mutating Stitch operation. Re-run with confirm: true to proceed.`;
|
|
9
|
+
}
|
|
10
|
+
export function compactStitchResult(title, result) {
|
|
11
|
+
if (!result.ok) {
|
|
12
|
+
return toErrorText(`${title} failed.`, result.error);
|
|
13
|
+
}
|
|
14
|
+
return formatStitchSummary({
|
|
15
|
+
title,
|
|
16
|
+
data: result.data,
|
|
17
|
+
itemKeys: ["projects", "screens", "assets", "designSystems", "items", "results", "outputComponents"],
|
|
18
|
+
idKeys: ["name", "id", "projectId", "screenId", "assetId", "title", "displayName"],
|
|
19
|
+
maxPreviewChars: 900,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function jsonObjectFromRaw(rawInput) {
|
|
23
|
+
return rawInput;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=stitchToolHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stitchToolHelpers.js","sourceRoot":"","sources":["../../src/utils/stitchToolHelpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe;IACzD,OAAO,GAAG,MAAM,OAAO,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAiB;IACnE,OAAO,OAAO,KAAK,IAAI;QACrB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,MAAM,wEAAwE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAA0B;IAC3E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,mBAAmB,CAAC;QACzB,KAAK;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC;QACpG,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;QAClF,eAAe,EAAE,GAAG;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|