@cloudinary/asset-management-mcp 0.9.0 → 0.9.2
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 +12 -15
- package/bin/mcp-server.js +269 -379
- package/bin/mcp-server.js.map +17 -17
- package/esm/funcs/searchSearchAssets.d.ts +46 -2
- package/esm/funcs/searchSearchAssets.d.ts.map +1 -1
- package/esm/funcs/searchSearchAssets.js +46 -2
- package/esm/funcs/searchSearchAssets.js.map +1 -1
- package/esm/landing-page.d.ts.map +1 -1
- package/esm/landing-page.js +9 -3
- package/esm/landing-page.js.map +1 -1
- package/esm/lib/config.d.ts +4 -4
- package/esm/lib/config.js +4 -4
- package/esm/mcp-server/apps/app-shared.d.ts +5 -4
- package/esm/mcp-server/apps/app-shared.d.ts.map +1 -1
- package/esm/mcp-server/apps/app-shared.js +79 -12
- package/esm/mcp-server/apps/app-shared.js.map +1 -1
- package/esm/mcp-server/apps/asset-details-app.d.ts.map +1 -1
- package/esm/mcp-server/apps/asset-details-app.js +7 -14
- package/esm/mcp-server/apps/asset-details-app.js.map +1 -1
- package/esm/mcp-server/apps/asset-gallery-app.d.ts.map +1 -1
- package/esm/mcp-server/apps/asset-gallery-app.js +75 -298
- package/esm/mcp-server/apps/asset-gallery-app.js.map +1 -1
- package/esm/mcp-server/apps/asset-upload-app.d.ts.map +1 -1
- package/esm/mcp-server/apps/asset-upload-app.js +29 -24
- package/esm/mcp-server/apps/asset-upload-app.js.map +1 -1
- package/esm/mcp-server/apps/config.d.ts.map +1 -1
- package/esm/mcp-server/apps/config.js +1 -2
- package/esm/mcp-server/apps/config.js.map +1 -1
- package/esm/mcp-server/apps/extensions.d.ts.map +1 -1
- package/esm/mcp-server/apps/extensions.js +6 -1
- package/esm/mcp-server/apps/extensions.js.map +1 -1
- package/esm/mcp-server/cli/serve/impl.js +1 -1
- package/esm/mcp-server/cli/serve/impl.js.map +1 -1
- package/esm/mcp-server/mcp-server.js +1 -1
- package/esm/mcp-server/server.js +1 -1
- package/esm/mcp-server/tools/searchSearchAssets.d.ts.map +1 -1
- package/esm/mcp-server/tools/searchSearchAssets.js +46 -2
- package/esm/mcp-server/tools/searchSearchAssets.js.map +1 -1
- package/esm/models/searchparameters.d.ts +4 -1
- package/esm/models/searchparameters.d.ts.map +1 -1
- package/esm/models/searchparameters.js +9 -8
- package/esm/models/searchparameters.js.map +1 -1
- package/esm/tool-names.js +1 -1
- package/esm/tool-names.js.map +1 -1
- package/esm/types/bigint.d.ts.map +1 -1
- package/esm/types/bigint.js +4 -3
- package/esm/types/bigint.js.map +1 -1
- package/package.json +1 -1
- package/src/funcs/searchSearchAssets.ts +46 -2
- package/src/landing-page.ts +9 -3
- package/src/lib/config.ts +4 -4
- package/src/mcp-server/apps/app-shared.ts +80 -12
- package/src/mcp-server/apps/asset-details-app.ts +7 -13
- package/src/mcp-server/apps/asset-gallery-app.ts +75 -297
- package/src/mcp-server/apps/asset-upload-app.ts +29 -23
- package/src/mcp-server/apps/config.ts +1 -2
- package/src/mcp-server/apps/extensions.ts +6 -1
- package/src/mcp-server/cli/serve/impl.ts +1 -1
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/server.ts +1 -1
- package/src/mcp-server/tools/searchSearchAssets.ts +46 -2
- package/src/models/searchparameters.ts +25 -9
- package/src/tool-names.ts +1 -1
- package/src/types/bigint.ts +18 -17
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Shares CLDS tokens, MCPApp client, helpers, and detail renderers
|
|
6
6
|
* with the gallery app via app-shared.ts.
|
|
7
7
|
*/
|
|
8
|
-
import { SHARED_CSS_TOKENS, SHARED_CSS_COMPONENTS, SHARED_JS_MCP_CLIENT, SHARED_JS_HELPERS, SHARED_JS_TOOLTIPS, SHARED_JS_MODAL, SHARED_JS_DETAIL_RENDERERS, SHARED_JS_HOST_CONTEXT, } from "./app-shared.js";
|
|
8
|
+
import { SHARED_CSS_TOKENS, SHARED_CSS_COMPONENTS, SHARED_JS_ICONS, SHARED_JS_MCP_CLIENT, SHARED_JS_HELPERS, SHARED_JS_TOOLTIPS, SHARED_JS_MODAL, SHARED_JS_DETAIL_RENDERERS, SHARED_JS_HOST_CONTEXT, } from "./app-shared.js";
|
|
9
9
|
import { injectToolName } from "./uri.js";
|
|
10
10
|
export function getAssetDetailsHtml(toolName) {
|
|
11
11
|
return injectToolName(ASSET_DETAILS_HTML, toolName);
|
|
@@ -47,16 +47,6 @@ const ASSET_DETAILS_CSS = /* css */ `
|
|
|
47
47
|
padding: 2px 7px; border-radius: 4px; border: 1px solid var(--cld-border);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
.open-link {
|
|
51
|
-
padding: 6px 14px; border-radius: var(--cld-radius-sm);
|
|
52
|
-
font-size: 12px; font-weight: 500; cursor: pointer;
|
|
53
|
-
border: 1px solid var(--cld-accent); background: transparent;
|
|
54
|
-
color: var(--cld-accent); font-family: inherit;
|
|
55
|
-
transition: background 0.15s;
|
|
56
|
-
white-space: nowrap; flex-shrink: 0;
|
|
57
|
-
}
|
|
58
|
-
.open-link:hover { background: var(--cld-accent-bg); }
|
|
59
|
-
|
|
60
50
|
.hero-container {
|
|
61
51
|
position: relative; margin-bottom: var(--cld-sp-md);
|
|
62
52
|
border-radius: var(--cld-radius); overflow: hidden;
|
|
@@ -118,9 +108,9 @@ function renderPage(r) {
|
|
|
118
108
|
if (dur) h += '<span class="pill">' + dur + "</span>";
|
|
119
109
|
if (size) h += '<span class="pill">' + size + "</span>";
|
|
120
110
|
h += "</div></div>";
|
|
121
|
-
h += '<div style="display:flex;gap:
|
|
122
|
-
h += '<button class="
|
|
123
|
-
|
|
111
|
+
h += '<div id="header-actions" style="display:flex;gap:8px;flex-shrink:0;align-items:center">';
|
|
112
|
+
if (url) h += '<button class="icon-btn" id="open-asset">Open</button>';
|
|
113
|
+
h += '<button class="icon-btn icon-only" id="refresh-asset" title="Refresh">' + IC.refresh + '</button>';
|
|
124
114
|
h += "</div>";
|
|
125
115
|
h += "</div>";
|
|
126
116
|
|
|
@@ -162,6 +152,7 @@ function renderPage(r) {
|
|
|
162
152
|
h += "</div>";
|
|
163
153
|
|
|
164
154
|
root.innerHTML = h;
|
|
155
|
+
renderThemeToggle();
|
|
165
156
|
|
|
166
157
|
// Event delegation
|
|
167
158
|
root.addEventListener("click", function handler(e) {
|
|
@@ -207,6 +198,7 @@ function showFetchPrompt() {
|
|
|
207
198
|
h += '<button class="prompt-btn prompt-btn-primary" id="fetch-direct-btn">Fetch Directly</button>';
|
|
208
199
|
h += "</div></div>";
|
|
209
200
|
root.innerHTML = h;
|
|
201
|
+
renderThemeToggle();
|
|
210
202
|
document.getElementById("fetch-direct-btn").addEventListener("click", function() { fetchDirect(); });
|
|
211
203
|
}
|
|
212
204
|
|
|
@@ -286,6 +278,7 @@ ${ASSET_DETAILS_CSS}
|
|
|
286
278
|
<div id="app"><div class="status">Loading asset details…</div></div>
|
|
287
279
|
|
|
288
280
|
<script>
|
|
281
|
+
${SHARED_JS_ICONS}
|
|
289
282
|
${SHARED_JS_MCP_CLIENT}
|
|
290
283
|
${SHARED_JS_HELPERS}
|
|
291
284
|
${SHARED_JS_TOOLTIPS}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-details-app.js","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-details-app.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"asset-details-app.js","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-details-app.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DnC,CAAC;AAEF,MAAM,gBAAgB,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8LjC,CAAC;AAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;EAOpC,iBAAiB;EACjB,qBAAqB;EACrB,iBAAiB;;;;;;;EAOjB,eAAe;EACf,oBAAoB;EACpB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,0BAA0B;EAC1B,sBAAsB;EACtB,gBAAgB;;;QAGV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-gallery-app.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-gallery-app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asset-gallery-app.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-gallery-app.ts"],"names":[],"mappings":"AAsBA,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Shares CLDS tokens, MCPApp client, helpers, and detail renderers
|
|
7
7
|
* with the details app via app-shared.ts.
|
|
8
8
|
*/
|
|
9
|
-
import { SHARED_CSS_TOKENS, SHARED_CSS_COMPONENTS, SHARED_JS_MCP_CLIENT, SHARED_JS_HELPERS, SHARED_JS_TOOLTIPS, SHARED_JS_MODAL, SHARED_JS_DETAIL_RENDERERS, SHARED_JS_HOST_CONTEXT, } from "./app-shared.js";
|
|
9
|
+
import { SHARED_CSS_TOKENS, SHARED_CSS_COMPONENTS, SHARED_JS_ICONS, SHARED_JS_MCP_CLIENT, SHARED_JS_HELPERS, SHARED_JS_TOOLTIPS, SHARED_JS_MODAL, SHARED_JS_DETAIL_RENDERERS, SHARED_JS_HOST_CONTEXT, } from "./app-shared.js";
|
|
10
10
|
import { injectToolName } from "./uri.js";
|
|
11
11
|
export function getAssetGalleryHtml(toolName) {
|
|
12
12
|
return injectToolName(ASSET_GALLERY_HTML, toolName);
|
|
@@ -25,90 +25,10 @@ const GALLERY_CSS = /* css */ `
|
|
|
25
25
|
font-size: var(--cld-font-xxs); color: var(--cld-text3); background: var(--cld-bg3);
|
|
26
26
|
padding: 2px 8px; border-radius: 20px; font-weight: 500;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
transition: color 0.15s, border-color 0.15s;
|
|
33
|
-
}
|
|
34
|
-
.select-all-btn:hover { color: var(--cld-accent); border-color: var(--cld-accent); }
|
|
35
|
-
.refresh-btn {
|
|
36
|
-
background: none; border: 1px solid var(--cld-border); border-radius: var(--cld-radius-sm);
|
|
37
|
-
color: var(--cld-text2); cursor: pointer; font-size: 14px; padding: 2px 7px;
|
|
38
|
-
line-height: 1; transition: background 0.15s, color 0.15s;
|
|
39
|
-
}
|
|
40
|
-
.refresh-btn:hover { background: var(--cld-bg3); color: var(--cld-text); }
|
|
41
|
-
|
|
42
|
-
/* ── Filter bar ── */
|
|
43
|
-
.filter-row {
|
|
44
|
-
margin-bottom: var(--cld-sp-md); display: flex; gap: 8px; align-items: center;
|
|
45
|
-
}
|
|
46
|
-
.filter-text-wrap { position: relative; flex: 1; }
|
|
47
|
-
.filter-input {
|
|
48
|
-
width: 100%; height: 36px; padding: 0 12px 0 34px;
|
|
49
|
-
border: 1px solid var(--cld-border); border-radius: var(--cld-radius);
|
|
50
|
-
background: var(--cld-bg); font-size: 12.5px; color: var(--cld-text);
|
|
51
|
-
outline: none; font-family: inherit;
|
|
52
|
-
transition: border-color 0.18s, box-shadow 0.18s;
|
|
53
|
-
}
|
|
54
|
-
.filter-input::placeholder { color: var(--cld-text3); }
|
|
55
|
-
.filter-input:focus {
|
|
56
|
-
border-color: var(--cld-accent);
|
|
57
|
-
box-shadow: 0 0 0 3px rgba(52,72,197,0.1);
|
|
58
|
-
}
|
|
59
|
-
[data-theme="dark"] .filter-input:focus { box-shadow: 0 0 0 3px rgba(13,154,255,0.15); }
|
|
60
|
-
.filter-icon {
|
|
61
|
-
position: absolute; left: 11px; top: 50%; transform: translateY(-50%);
|
|
62
|
-
color: var(--cld-text3); pointer-events: none; display: flex; align-items: center;
|
|
63
|
-
}
|
|
64
|
-
.filter-clear {
|
|
65
|
-
position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
|
|
66
|
-
background: none; border: none; color: var(--cld-text3); cursor: pointer;
|
|
67
|
-
font-size: 14px; line-height: 1; padding: 2px 4px; border-radius: 4px;
|
|
68
|
-
display: none; font-family: inherit;
|
|
69
|
-
}
|
|
70
|
-
.filter-clear:hover { color: var(--cld-text); background: var(--cld-border); }
|
|
71
|
-
.filter-clear.visible { display: block; }
|
|
72
|
-
|
|
73
|
-
/* Aspect-ratio dropdown */
|
|
74
|
-
.aspect-dropdown { position: relative; flex-shrink: 0; user-select: none; }
|
|
75
|
-
.aspect-btn {
|
|
76
|
-
height: 36px; padding: 0 10px; border: 1px solid var(--cld-border);
|
|
77
|
-
border-radius: var(--cld-radius); background: var(--cld-bg);
|
|
78
|
-
font-size: 12.5px; color: var(--cld-text); cursor: pointer;
|
|
79
|
-
display: flex; align-items: center; gap: 6px; white-space: nowrap;
|
|
80
|
-
transition: border-color 0.18s, box-shadow 0.18s, background 0.18s;
|
|
81
|
-
font-family: inherit; outline: none;
|
|
82
|
-
}
|
|
83
|
-
.aspect-btn:hover { border-color: var(--cld-border2); }
|
|
84
|
-
.aspect-btn.active {
|
|
85
|
-
border-color: var(--cld-accent); background: var(--cld-accent-bg);
|
|
86
|
-
color: var(--cld-accent); font-weight: 600;
|
|
87
|
-
}
|
|
88
|
-
.aspect-btn-chevron { color: var(--cld-text3); flex-shrink: 0; transition: transform 0.18s; }
|
|
89
|
-
.aspect-btn.open .aspect-btn-chevron { transform: rotate(180deg); }
|
|
90
|
-
.aspect-menu {
|
|
91
|
-
position: absolute; top: calc(100% + 6px); right: 0;
|
|
92
|
-
background: var(--cld-bg); border: 1px solid var(--cld-border);
|
|
93
|
-
border-radius: 10px; box-shadow: var(--cld-shadow-md);
|
|
94
|
-
padding: 4px; min-width: 160px; z-index: 50; display: none;
|
|
95
|
-
}
|
|
96
|
-
.aspect-menu.open { display: block; }
|
|
97
|
-
.aspect-option {
|
|
98
|
-
display: flex; align-items: center; gap: 10px;
|
|
99
|
-
padding: 7px 10px; border-radius: 6px; font-size: 12.5px;
|
|
100
|
-
color: var(--cld-text); cursor: pointer; transition: background 0.18s;
|
|
101
|
-
}
|
|
102
|
-
.aspect-option:hover { background: var(--cld-bg3); }
|
|
103
|
-
.aspect-option.selected { color: var(--cld-accent); font-weight: 600; }
|
|
104
|
-
.aspect-opt-icon { color: var(--cld-text3); display: flex; align-items: center; flex-shrink: 0; }
|
|
105
|
-
.aspect-option.selected .aspect-opt-icon { color: var(--cld-accent); }
|
|
106
|
-
.aspect-check { margin-left: auto; color: var(--cld-accent); opacity: 0; }
|
|
107
|
-
.aspect-option.selected .aspect-check { opacity: 1; }
|
|
108
|
-
.no-results {
|
|
109
|
-
grid-column: 1 / -1; padding: 60px 20px;
|
|
110
|
-
text-align: center; color: var(--cld-text3); font-size: 13px;
|
|
111
|
-
}
|
|
28
|
+
/* action-btn svg sizing */
|
|
29
|
+
.action-btn svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
|
|
30
|
+
/* select bar svg */
|
|
31
|
+
.bar-btn svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
|
|
112
32
|
|
|
113
33
|
/* ── Grid ── */
|
|
114
34
|
.grid {
|
|
@@ -167,18 +87,11 @@ const GALLERY_CSS = /* css */ `
|
|
|
167
87
|
opacity: 0; transition: opacity 0.18s; z-index: 4; pointer-events: none;
|
|
168
88
|
}
|
|
169
89
|
.card:hover .tags-overlay { opacity: 1; }
|
|
170
|
-
.grid.filtering .tags-overlay { opacity: 1; }
|
|
171
90
|
.tag-overlay {
|
|
172
91
|
font-size: 10px; color: white;
|
|
173
92
|
background: rgba(10, 12, 18, 0.55); padding: 2px 7px; border-radius: 20px;
|
|
174
93
|
backdrop-filter: blur(6px); font-weight: 600; letter-spacing: 0.02em;
|
|
175
94
|
}
|
|
176
|
-
.tag-overlay.tag-match { background: rgba(52, 72, 197, 0.82); }
|
|
177
|
-
.tag-overlay mark {
|
|
178
|
-
background: rgba(255, 213, 79, 0.5); color: white;
|
|
179
|
-
border-radius: 2px; padding: 0 1px;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
95
|
/* Floating action buttons */
|
|
183
96
|
.card-actions {
|
|
184
97
|
position: absolute; bottom: 10px; left: 0; right: 0;
|
|
@@ -253,7 +166,6 @@ const GALLERY_CSS = /* css */ `
|
|
|
253
166
|
opacity: 0; pointer-events: none; z-index: 100; white-space: nowrap;
|
|
254
167
|
}
|
|
255
168
|
.select-bar.visible { transform: translateX(-50%) translateY(0); opacity: 1; pointer-events: all; }
|
|
256
|
-
.select-bar-spacer { height: 72px; }
|
|
257
169
|
.select-count { font-size: 13px; font-weight: 600; margin-right: 8px; }
|
|
258
170
|
.bar-btn {
|
|
259
171
|
height: 36px; padding: 0 14px; border: none; border-radius: 30px;
|
|
@@ -293,8 +205,6 @@ var pendingCall = {
|
|
|
293
205
|
args: null,
|
|
294
206
|
};
|
|
295
207
|
var selected = new Set();
|
|
296
|
-
var filterQuery = "";
|
|
297
|
-
var aspectFilter = "";
|
|
298
208
|
var app = new MCPApp({ name: "Cloudinary Asset Gallery", version: "1.0.0" });
|
|
299
209
|
setupHostContext(app);
|
|
300
210
|
|
|
@@ -318,24 +228,6 @@ function showToast(msg) {
|
|
|
318
228
|
_toastTimer = setTimeout(function() { t.classList.remove("show"); }, 2000);
|
|
319
229
|
}
|
|
320
230
|
|
|
321
|
-
function getAspect(r) {
|
|
322
|
-
if (!r.width || !r.height) return "";
|
|
323
|
-
var ratio = r.width / r.height;
|
|
324
|
-
if (ratio > 1.1) return "landscape";
|
|
325
|
-
if (ratio < 0.9) return "portrait";
|
|
326
|
-
return "square";
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
function highlightText(text, query) {
|
|
330
|
-
if (!query) return esc(text);
|
|
331
|
-
var lo = text.toLowerCase();
|
|
332
|
-
var idx = lo.indexOf(query);
|
|
333
|
-
if (idx === -1) return esc(text);
|
|
334
|
-
return esc(text.slice(0, idx))
|
|
335
|
-
+ "<mark>" + esc(text.slice(idx, idx + query.length)) + "</mark>"
|
|
336
|
-
+ esc(text.slice(idx + query.length));
|
|
337
|
-
}
|
|
338
|
-
|
|
339
231
|
function updateSelectBar() {
|
|
340
232
|
var bar = document.getElementById("select-bar");
|
|
341
233
|
var countEl = document.getElementById("select-count");
|
|
@@ -343,8 +235,6 @@ function updateSelectBar() {
|
|
|
343
235
|
var n = selected.size;
|
|
344
236
|
countEl.textContent = n + " selected";
|
|
345
237
|
bar.classList.toggle("visible", n > 0);
|
|
346
|
-
var spacer = document.getElementById("select-bar-spacer");
|
|
347
|
-
if (spacer) spacer.style.display = n > 0 ? "" : "none";
|
|
348
238
|
var btn = document.getElementById("select-all-btn");
|
|
349
239
|
if (btn) {
|
|
350
240
|
var visible = getVisibleIndices();
|
|
@@ -411,11 +301,9 @@ function copyAssetUrl(type, idx) {
|
|
|
411
301
|
var url = r.secure_url || r.url || "";
|
|
412
302
|
var copyUrl = type === "optimized" ? optimizedUrl(url, r) : url;
|
|
413
303
|
if (!copyUrl) return;
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
});
|
|
418
|
-
} catch(e) { showError("Copy Failed", String(e)); }
|
|
304
|
+
copyText(copyUrl).then(function() {
|
|
305
|
+
showToast(type === "optimized" ? "\\u2728 Optimized URL copied" : "URL copied");
|
|
306
|
+
}).catch(function(e) { showError("Copy Failed", e && e.message ? e.message : String(e)); });
|
|
419
307
|
}
|
|
420
308
|
|
|
421
309
|
function downloadOne(idx) {
|
|
@@ -437,134 +325,74 @@ function copySelectedUrls(type) {
|
|
|
437
325
|
urls.push(type === "optimized" ? optimizedUrl(url, r) : url);
|
|
438
326
|
});
|
|
439
327
|
if (!urls.length) return;
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
});
|
|
444
|
-
} catch(e) { showError("Copy Failed", String(e)); }
|
|
328
|
+
copyText(urls.join("\\n")).then(function() {
|
|
329
|
+
showToast(urls.length + " " + (type === "optimized" ? "optimized " : "") + "URLs copied");
|
|
330
|
+
}).catch(function(e) { showError("Copy Failed", e && e.message ? e.message : String(e)); });
|
|
445
331
|
}
|
|
446
332
|
|
|
447
|
-
function downloadSelected() {
|
|
448
|
-
|
|
333
|
+
async function downloadSelected() {
|
|
334
|
+
if (selected.size === 0) return;
|
|
335
|
+
|
|
336
|
+
var picks = [];
|
|
449
337
|
selected.forEach(function(i) {
|
|
450
338
|
var r = allResources[i];
|
|
451
|
-
if (
|
|
452
|
-
var url = r.secure_url || r.url || "";
|
|
453
|
-
var dl = downloadUrl(url, r);
|
|
454
|
-
if (dl) { app._rpc("ui/open-link", { url: dl }); count++; }
|
|
339
|
+
if (r && r.public_id) picks.push(r);
|
|
455
340
|
});
|
|
456
|
-
if (
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
341
|
+
if (!picks.length) return;
|
|
342
|
+
|
|
343
|
+
var requestBody = {
|
|
344
|
+
mode: "create",
|
|
345
|
+
target_format: "zip",
|
|
346
|
+
keep_derived: true,
|
|
347
|
+
target_public_id: "mcp-gallery-archive-" + Date.now(),
|
|
348
|
+
fully_qualified_public_ids: picks.map(function(r) {
|
|
349
|
+
return (r.resource_type || "image") + "/" + (r.type || "upload") + "/" + r.public_id;
|
|
350
|
+
}),
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
var btn = document.getElementById("bar-download");
|
|
354
|
+
var origLabel = btn ? btn.innerHTML : "";
|
|
355
|
+
if (btn) { btn.innerHTML = "Creating archive\\u2026"; btn.disabled = true; }
|
|
462
356
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
if (grid) grid.classList.toggle("filtering", anyFilter);
|
|
472
|
-
|
|
473
|
-
var visibleCount = 0;
|
|
474
|
-
for (var i = 0; i < allResources.length; i++) {
|
|
475
|
-
var r = allResources[i];
|
|
476
|
-
var card = document.getElementById("card-" + i);
|
|
477
|
-
if (!card) continue;
|
|
357
|
+
try {
|
|
358
|
+
var res = await app.callServerTool({
|
|
359
|
+
name: "generate-archive",
|
|
360
|
+
arguments: {
|
|
361
|
+
resource_type: "all",
|
|
362
|
+
RequestBody: requestBody,
|
|
363
|
+
},
|
|
364
|
+
});
|
|
478
365
|
|
|
479
|
-
var
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|| tags.some(function(t) { return t.toLowerCase().indexOf(filterQuery) !== -1; });
|
|
484
|
-
|
|
485
|
-
var aspectMatch = !aspectFilter || getAspect(r) === aspectFilter;
|
|
486
|
-
var match = textMatch && aspectMatch;
|
|
487
|
-
card.style.display = match ? "" : "none";
|
|
488
|
-
|
|
489
|
-
var tagsEl = document.getElementById("tags-overlay-" + i);
|
|
490
|
-
if (tagsEl && tags.length) {
|
|
491
|
-
var maxOv = 3;
|
|
492
|
-
var matchedTags = [];
|
|
493
|
-
var otherTags = [];
|
|
494
|
-
for (var ti = 0; ti < tags.length; ti++) {
|
|
495
|
-
var isMatch = filterQuery && tags[ti].toLowerCase().indexOf(filterQuery) !== -1;
|
|
496
|
-
if (isMatch) matchedTags.push(tags[ti]);
|
|
497
|
-
else otherTags.push(tags[ti]);
|
|
498
|
-
}
|
|
499
|
-
var shown = matchedTags.slice();
|
|
500
|
-
var remaining = maxOv - shown.length;
|
|
501
|
-
if (remaining > 0) shown = shown.concat(otherTags.slice(0, remaining));
|
|
502
|
-
var hidden = tags.length - shown.length;
|
|
503
|
-
var hiddenTags = tags.filter(function(t) { return shown.indexOf(t) === -1; });
|
|
504
|
-
tagsEl.innerHTML = shown.map(function(t) {
|
|
505
|
-
var matched = filterQuery && t.toLowerCase().indexOf(filterQuery) !== -1;
|
|
506
|
-
return '<span class="tag-overlay' + (matched ? ' tag-match' : '') + '">' + highlightText(t, filterQuery) + '</span>';
|
|
507
|
-
}).join("") + (hidden > 0 ? '<span class="tag-overlay" title="' + esc(hiddenTags.join(", ")) + '">+' + hidden + '</span>' : '');
|
|
366
|
+
var data = ingestResult(res);
|
|
367
|
+
if (data && (data._error || data._parseError)) {
|
|
368
|
+
showError("Archive Failed", unwrapApiError(data._message));
|
|
369
|
+
return;
|
|
508
370
|
}
|
|
509
|
-
|
|
510
|
-
if (
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
var badge = document.getElementById("count-badge");
|
|
514
|
-
if (badge) {
|
|
515
|
-
badge.textContent = anyFilter
|
|
516
|
-
? visibleCount + " of " + allResources.length
|
|
517
|
-
: allResources.length + (lastCursor ? "+" : "") + " items";
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
var noRes = document.getElementById("no-results");
|
|
521
|
-
if (visibleCount === 0 && anyFilter) {
|
|
522
|
-
if (!noRes && grid) {
|
|
523
|
-
noRes = document.createElement("div");
|
|
524
|
-
noRes.id = "no-results";
|
|
525
|
-
noRes.className = "no-results";
|
|
526
|
-
grid.appendChild(noRes);
|
|
371
|
+
var archiveUrl = data && (data.secure_url || data.url);
|
|
372
|
+
if (!archiveUrl) {
|
|
373
|
+
showError("Archive Failed", "No delivery URL returned.");
|
|
374
|
+
return;
|
|
527
375
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
376
|
+
try { await copyText(archiveUrl); } catch (e) { /* ignore */ }
|
|
377
|
+
app._rpc("ui/open-link", { url: archiveUrl });
|
|
378
|
+
showToast("Archive saved as raw in Cloudinary \\u2014 opening URL (" + picks.length + " asset" + (picks.length > 1 ? "s" : "") + ")");
|
|
379
|
+
} catch (e) {
|
|
380
|
+
showError("Archive Failed", unwrapApiError(e && e.message ? e.message : String(e)));
|
|
381
|
+
} finally {
|
|
382
|
+
if (btn) { btn.innerHTML = origLabel; btn.disabled = false; }
|
|
531
383
|
}
|
|
532
384
|
}
|
|
533
385
|
|
|
534
|
-
function
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
})
|
|
543
|
-
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
function toggleAspectMenu(e) {
|
|
547
|
-
e.stopPropagation();
|
|
548
|
-
var btn = document.getElementById("aspect-btn");
|
|
549
|
-
var menu = document.getElementById("aspect-menu");
|
|
550
|
-
if (!btn || !menu) return;
|
|
551
|
-
var open = menu.classList.toggle("open");
|
|
552
|
-
btn.classList.toggle("open", open);
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
function selectAspect(val) {
|
|
556
|
-
aspectFilter = val;
|
|
557
|
-
var labels = { "": "All orientations", landscape: "Landscape", portrait: "Portrait", square: "Square" };
|
|
558
|
-
var label = document.getElementById("aspect-btn-label");
|
|
559
|
-
if (label) label.textContent = labels[aspectFilter] || "All orientations";
|
|
560
|
-
document.querySelectorAll(".aspect-option").forEach(function(o) {
|
|
561
|
-
o.classList.toggle("selected", o.getAttribute("data-value") === aspectFilter);
|
|
562
|
-
});
|
|
563
|
-
var menu = document.getElementById("aspect-menu");
|
|
564
|
-
var btn = document.getElementById("aspect-btn");
|
|
565
|
-
if (menu) menu.classList.remove("open");
|
|
566
|
-
if (btn) btn.classList.remove("open");
|
|
567
|
-
handleFilter();
|
|
386
|
+
function unwrapApiError(raw) {
|
|
387
|
+
if (!raw) return "Unknown error.";
|
|
388
|
+
var msg = String(raw);
|
|
389
|
+
try {
|
|
390
|
+
if (msg.charAt(0) === "{") {
|
|
391
|
+
var parsed = JSON.parse(msg);
|
|
392
|
+
msg = (parsed && parsed.error && parsed.error.message) || msg;
|
|
393
|
+
}
|
|
394
|
+
} catch (e) { /* keep raw */ }
|
|
395
|
+
return msg;
|
|
568
396
|
}
|
|
569
397
|
|
|
570
398
|
function render() {
|
|
@@ -584,40 +412,11 @@ function render() {
|
|
|
584
412
|
h += '<h1>Results</h1>';
|
|
585
413
|
h += '<span class="count-badge" id="count-badge">' + allResources.length + (lastCursor ? "+" : "") + ' items</span>';
|
|
586
414
|
h += '</div>';
|
|
587
|
-
h += '<div style="display:flex;align-items:center;gap:8px">';
|
|
588
|
-
h += '<button class="
|
|
589
|
-
h += '<button class="
|
|
590
|
-
h += '</div>';
|
|
415
|
+
h += '<div id="header-actions" style="display:flex;align-items:center;gap:8px">';
|
|
416
|
+
h += '<button class="icon-btn" id="select-all-btn">Select all</button>';
|
|
417
|
+
h += '<button class="icon-btn icon-only" id="refresh-gallery" title="Refresh">' + IC.refresh + '</button>';
|
|
591
418
|
h += '</div>';
|
|
592
|
-
|
|
593
|
-
// Filter bar
|
|
594
|
-
h += '<div class="filter-row">';
|
|
595
|
-
h += '<div class="filter-text-wrap">';
|
|
596
|
-
h += '<span class="filter-icon"><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="6.5" cy="6.5" r="4.5"/><path d="M10.5 10.5l3 3"/></svg></span>';
|
|
597
|
-
h += '<input class="filter-input" id="filter-input" type="text" placeholder="Filter by filename or tag\\u2026" autocomplete="off" spellcheck="false">';
|
|
598
|
-
h += '<button class="filter-clear" id="filter-clear">\\u2715</button>';
|
|
599
419
|
h += '</div>';
|
|
600
|
-
h += '<div class="aspect-dropdown" id="aspect-dropdown">';
|
|
601
|
-
h += '<button class="aspect-btn" id="aspect-btn">';
|
|
602
|
-
h += '<span id="aspect-btn-label">All orientations</span>';
|
|
603
|
-
h += '<svg class="aspect-btn-chevron" width="11" height="11" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="2,4 6,8 10,4"/></svg>';
|
|
604
|
-
h += '</button>';
|
|
605
|
-
h += '<div class="aspect-menu" id="aspect-menu">';
|
|
606
|
-
var aspects = [
|
|
607
|
-
{ val: "", label: "All orientations", icon: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="1" y="1" width="12" height="12" rx="1.5"/></svg>' },
|
|
608
|
-
{ val: "landscape", label: "Landscape", icon: '<svg width="14" height="10" viewBox="0 0 14 10" fill="none" stroke="currentColor" stroke-width="1.5"><rect x=".75" y=".75" width="12.5" height="8.5" rx="1.5"/></svg>' },
|
|
609
|
-
{ val: "portrait", label: "Portrait", icon: '<svg width="10" height="14" viewBox="0 0 10 14" fill="none" stroke="currentColor" stroke-width="1.5"><rect x=".75" y=".75" width="8.5" height="12.5" rx="1.5"/></svg>' },
|
|
610
|
-
{ val: "square", label: "Square", icon: '<svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.5"><rect x=".75" y=".75" width="10.5" height="10.5" rx="1.5"/></svg>' },
|
|
611
|
-
];
|
|
612
|
-
for (var ai = 0; ai < aspects.length; ai++) {
|
|
613
|
-
var ao = aspects[ai];
|
|
614
|
-
h += '<div class="aspect-option' + (ao.val === aspectFilter ? ' selected' : '') + '" data-value="' + ao.val + '">';
|
|
615
|
-
h += '<span class="aspect-opt-icon">' + ao.icon + '</span>';
|
|
616
|
-
h += ao.label;
|
|
617
|
-
h += '<svg class="aspect-check" width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><polyline points="2,6 5,9 10,3"/></svg>';
|
|
618
|
-
h += '</div>';
|
|
619
|
-
}
|
|
620
|
-
h += '</div></div></div>';
|
|
621
420
|
|
|
622
421
|
// Grid
|
|
623
422
|
h += '<div class="grid" id="gallery-grid">';
|
|
@@ -667,8 +466,8 @@ function render() {
|
|
|
667
466
|
if (url) {
|
|
668
467
|
h += '<div class="card-actions">';
|
|
669
468
|
h += '<button class="action-btn act-original" data-copy-original="' + i + '">Copy URL</button>';
|
|
670
|
-
if (rt !== "raw") h += '<button class="action-btn act-optimized" data-copy-optimized="' + i + '"
|
|
671
|
-
h += '<button class="action-btn act-download" data-download="' + i + '" title="Download"
|
|
469
|
+
if (rt !== "raw") h += '<button class="action-btn act-optimized" data-copy-optimized="' + i + '">' + IC.zap + ' Optimized</button>';
|
|
470
|
+
h += '<button class="action-btn act-download" data-download="' + i + '" title="Download">' + IC.arrowDown + '</button>';
|
|
672
471
|
h += '</div>';
|
|
673
472
|
}
|
|
674
473
|
|
|
@@ -715,24 +514,22 @@ function render() {
|
|
|
715
514
|
h += "</div>";
|
|
716
515
|
}
|
|
717
516
|
|
|
718
|
-
// Spacer so select bar doesn't cover Load More
|
|
719
|
-
h += '<div class="select-bar-spacer" id="select-bar-spacer" style="display:none"></div>';
|
|
720
|
-
|
|
721
517
|
// Multi-select bar
|
|
722
518
|
h += '<div class="select-bar" id="select-bar">';
|
|
723
519
|
h += '<span class="select-count" id="select-count">0 selected</span>';
|
|
724
520
|
h += '<div class="bar-divider"></div>';
|
|
725
|
-
h += '<button class="bar-btn bar-primary" id="bar-copy-optimized" style="display:none"
|
|
521
|
+
h += '<button class="bar-btn bar-primary" id="bar-copy-optimized" style="display:none">' + IC.zap + ' Copy Optimized</button>';
|
|
726
522
|
h += '<button class="bar-btn bar-secondary" id="bar-copy-original">Copy Original</button>';
|
|
727
|
-
h += '<button class="bar-btn bar-secondary" id="bar-download"
|
|
523
|
+
h += '<button class="bar-btn bar-secondary" id="bar-download">' + IC.arrowDown + ' Download Selected</button>';
|
|
728
524
|
h += '<div class="bar-divider"></div>';
|
|
729
|
-
h += '<button class="bar-btn bar-ghost" id="bar-clear"
|
|
525
|
+
h += '<button class="bar-btn bar-ghost" id="bar-clear">' + IC.x + '</button>';
|
|
730
526
|
h += '</div>';
|
|
731
527
|
|
|
732
528
|
// Toast
|
|
733
529
|
h += '<div class="gallery-toast" id="gallery-toast"></div>';
|
|
734
530
|
|
|
735
531
|
root.innerHTML = h;
|
|
532
|
+
renderThemeToggle();
|
|
736
533
|
|
|
737
534
|
// Re-apply selection state
|
|
738
535
|
selected.forEach(function(i) {
|
|
@@ -766,37 +563,16 @@ function attachEvents() {
|
|
|
766
563
|
_eventsAttached = true;
|
|
767
564
|
var root = document.getElementById("app");
|
|
768
565
|
|
|
769
|
-
root.addEventListener("input", function(e) {
|
|
770
|
-
if (e.target && e.target.id === "filter-input") handleFilter();
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
document.addEventListener("click", function(e) {
|
|
774
|
-
var dd = document.getElementById("aspect-dropdown");
|
|
775
|
-
if (dd && !dd.contains(e.target)) {
|
|
776
|
-
var menu = document.getElementById("aspect-menu");
|
|
777
|
-
var btn = document.getElementById("aspect-btn");
|
|
778
|
-
if (menu) menu.classList.remove("open");
|
|
779
|
-
if (btn) btn.classList.remove("open");
|
|
780
|
-
}
|
|
781
|
-
});
|
|
782
|
-
|
|
783
566
|
root.addEventListener("click", function(e) {
|
|
784
567
|
var el = e.target;
|
|
785
568
|
while (el && el !== root) {
|
|
786
569
|
if (el.id === "load-more-btn") { loadMore(); return; }
|
|
787
570
|
if (el.id === "refresh-gallery") { refreshGallery(); return; }
|
|
788
571
|
if (el.id === "select-all-btn") { toggleSelectAll(); return; }
|
|
789
|
-
if (el.id === "filter-clear") { clearFilter(); return; }
|
|
790
572
|
if (el.id === "bar-copy-optimized") { copySelectedUrls("optimized"); return; }
|
|
791
573
|
if (el.id === "bar-copy-original") { copySelectedUrls("original"); return; }
|
|
792
574
|
if (el.id === "bar-download") { downloadSelected(); return; }
|
|
793
575
|
if (el.id === "bar-clear") { clearSelection(); return; }
|
|
794
|
-
if (el.id === "aspect-btn" || el.parentElement && el.parentElement.id === "aspect-btn") {
|
|
795
|
-
toggleAspectMenu(e); return;
|
|
796
|
-
}
|
|
797
|
-
if (el.classList && el.classList.contains("aspect-option")) {
|
|
798
|
-
selectAspect(el.getAttribute("data-value") || ""); return;
|
|
799
|
-
}
|
|
800
576
|
if (el.dataset && el.dataset.copyOriginal != null) {
|
|
801
577
|
e.stopPropagation();
|
|
802
578
|
copyAssetUrl("original", parseInt(el.dataset.copyOriginal, 10)); return;
|
|
@@ -957,6 +733,7 @@ function showFetchPrompt() {
|
|
|
957
733
|
h += '<button class="prompt-btn prompt-btn-primary" id="fetch-direct-btn">Fetch Directly</button>';
|
|
958
734
|
h += "</div></div>";
|
|
959
735
|
root.innerHTML = h;
|
|
736
|
+
renderThemeToggle();
|
|
960
737
|
document.getElementById("fetch-direct-btn").addEventListener("click", function() { fetchDirect(); });
|
|
961
738
|
}
|
|
962
739
|
|
|
@@ -1034,7 +811,6 @@ function refreshGallery() {
|
|
|
1034
811
|
document.addEventListener("keydown", function(e) {
|
|
1035
812
|
if (e.key === "Escape") {
|
|
1036
813
|
if (document.querySelector(".modal-overlay")) { closeModal(); return; }
|
|
1037
|
-
if (filterQuery || aspectFilter) { clearFilter(); return; }
|
|
1038
814
|
if (selected.size > 0) { clearSelection(); return; }
|
|
1039
815
|
}
|
|
1040
816
|
});
|
|
@@ -1064,6 +840,7 @@ ${GALLERY_CSS}
|
|
|
1064
840
|
<div class="gallery-toast" id="gallery-toast"></div>
|
|
1065
841
|
|
|
1066
842
|
<script>
|
|
843
|
+
${SHARED_JS_ICONS}
|
|
1067
844
|
${SHARED_JS_MCP_CLIENT}
|
|
1068
845
|
${SHARED_JS_HELPERS}
|
|
1069
846
|
${SHARED_JS_TOOLTIPS}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-gallery-app.js","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-gallery-app.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,WAAW,GAAG,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"asset-gallery-app.js","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-gallery-app.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,WAAW,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuL7B,CAAC;AAEF,MAAM,UAAU,GAAG,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmnB3B,CAAC;AAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;EAOpC,iBAAiB;EACjB,qBAAqB;EACrB,WAAW;;;;;;;;EAQX,eAAe;EACf,oBAAoB;EACpB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,0BAA0B;EAC1B,sBAAsB;EACtB,UAAU;;;QAGJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-upload-app.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-upload-app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"asset-upload-app.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/apps/asset-upload-app.ts"],"names":[],"mappings":"AAgCA,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|