@_davideast/stitch-mcp 0.5.0 → 0.5.1

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 (258) hide show
  1. package/dist/{chunk-hb3c6f6a.js → chunk-001yk06v.js} +2 -2
  2. package/dist/chunk-0cd2xak4.js +31447 -0
  3. package/dist/chunk-0cd2xak4.js.map +245 -0
  4. package/dist/{chunk-9tvppjaf.js → chunk-13mqag7n.js} +8 -10
  5. package/dist/{chunk-9tvppjaf.js.map → chunk-13mqag7n.js.map} +2 -2
  6. package/dist/chunk-1dcffh2w.js +1481 -0
  7. package/dist/chunk-1dcffh2w.js.map +23 -0
  8. package/dist/{chunk-985f11w6.js → chunk-26cgk4dt.js} +6 -8
  9. package/dist/{chunk-8yrtq2qs.js.map → chunk-26cgk4dt.js.map} +1 -1
  10. package/dist/chunk-2kg77g4q.js +167 -0
  11. package/dist/chunk-2kg77g4q.js.map +10 -0
  12. package/dist/chunk-34w2wfyp.js +68 -0
  13. package/dist/chunk-34w2wfyp.js.map +10 -0
  14. package/dist/chunk-44tn9dxb.js +19 -0
  15. package/dist/{chunk-985f11w6.js.map → chunk-44tn9dxb.js.map} +1 -1
  16. package/dist/chunk-5204d23a.js +24 -0
  17. package/dist/{chunk-ezmw2j8c.js.map → chunk-5204d23a.js.map} +1 -1
  18. package/dist/{chunk-mv9ssgmx.js → chunk-54wv5ptt.js} +5 -5
  19. package/dist/{chunk-mv9ssgmx.js.map → chunk-54wv5ptt.js.map} +2 -2
  20. package/dist/chunk-5dghg77b.js +16970 -0
  21. package/dist/chunk-5dghg77b.js.map +26 -0
  22. package/dist/{chunk-r2sg2nxa.js → chunk-5f2htt6r.js} +6 -7
  23. package/dist/chunk-5f2htt6r.js.map +9 -0
  24. package/dist/chunk-6gw9apqb.js +20 -0
  25. package/dist/chunk-6gw9apqb.js.map +10 -0
  26. package/dist/chunk-7bt2055x.js +39 -0
  27. package/dist/chunk-7bt2055x.js.map +10 -0
  28. package/dist/chunk-7egq85x5.js +273 -0
  29. package/dist/chunk-7egq85x5.js.map +10 -0
  30. package/dist/chunk-7pf2vfq9.js +69 -0
  31. package/dist/chunk-7pf2vfq9.js.map +10 -0
  32. package/dist/{chunk-q1nd6g0y.js → chunk-7rrhk07q.js} +76 -53
  33. package/dist/chunk-7rrhk07q.js.map +20 -0
  34. package/dist/{chunk-7xh1y383.js → chunk-7xsar3mr.js} +2 -2
  35. package/dist/{chunk-7xh1y383.js.map → chunk-7xsar3mr.js.map} +1 -1
  36. package/dist/chunk-7y4xzvkz.js +19132 -0
  37. package/dist/chunk-7y4xzvkz.js.map +115 -0
  38. package/dist/chunk-7zy0vdv5.js +761 -0
  39. package/dist/chunk-7zy0vdv5.js.map +18 -0
  40. package/dist/chunk-8rt3pp6g.js +256 -0
  41. package/dist/{chunk-jy2d17pr.js.map → chunk-8rt3pp6g.js.map} +3 -3
  42. package/dist/chunk-98trrxk2.js +40 -0
  43. package/dist/chunk-98trrxk2.js.map +10 -0
  44. package/dist/chunk-a1mk24q9.js +31326 -0
  45. package/dist/chunk-a1mk24q9.js.map +245 -0
  46. package/dist/chunk-a5xra9jn.js +159 -0
  47. package/dist/chunk-a5xra9jn.js.map +11 -0
  48. package/dist/chunk-abf1r0jh.js +2118 -0
  49. package/dist/chunk-abf1r0jh.js.map +44 -0
  50. package/dist/{chunk-25wakzyb.js → chunk-ahw5kfbr.js} +5 -5
  51. package/dist/chunk-akd997ec.js +11061 -0
  52. package/dist/chunk-akd997ec.js.map +238 -0
  53. package/dist/chunk-by28t333.js +19 -0
  54. package/dist/chunk-by28t333.js.map +9 -0
  55. package/dist/{chunk-2k7n0w2x.js → chunk-c6ge431q.js} +2 -2
  56. package/dist/{chunk-2k7n0w2x.js.map → chunk-c6ge431q.js.map} +1 -1
  57. package/dist/{chunk-ycfxp056.js → chunk-cnmspfhx.js} +7 -11
  58. package/dist/chunk-cnmspfhx.js.map +17 -0
  59. package/dist/chunk-cwqdka8y.js +6382 -0
  60. package/dist/chunk-cwqdka8y.js.map +109 -0
  61. package/dist/chunk-dffwrtn3.js +673 -0
  62. package/dist/chunk-dffwrtn3.js.map +17 -0
  63. package/dist/chunk-dyp9t5wf.js +44109 -0
  64. package/dist/chunk-dyp9t5wf.js.map +237 -0
  65. package/dist/chunk-e9881zy4.js +39 -0
  66. package/dist/chunk-e9881zy4.js.map +10 -0
  67. package/dist/chunk-ezs0qz0b.js +24 -0
  68. package/dist/chunk-ezs0qz0b.js.map +9 -0
  69. package/dist/chunk-f6cq8r7x.js +736 -0
  70. package/dist/chunk-f6cq8r7x.js.map +16 -0
  71. package/dist/{chunk-45wx7tn7.js → chunk-gwnmywrp.js} +2 -2
  72. package/dist/chunk-gz78f003.js +94 -0
  73. package/dist/chunk-gz78f003.js.map +10 -0
  74. package/dist/chunk-j0y94q2c.js +10 -0
  75. package/dist/{chunk-nthabjd9.js → chunk-jyem6j6k.js} +1848 -3
  76. package/dist/chunk-jyem6j6k.js.map +65 -0
  77. package/dist/chunk-kad4d9sf.js +11 -0
  78. package/dist/chunk-kad4d9sf.js.map +9 -0
  79. package/dist/{chunk-wz8d5vzb.js → chunk-krfqppg2.js} +32 -2
  80. package/dist/{chunk-wz8d5vzb.js.map → chunk-krfqppg2.js.map} +5 -4
  81. package/dist/chunk-kw62yeqn.js +124 -0
  82. package/dist/chunk-kw62yeqn.js.map +12 -0
  83. package/dist/chunk-mbt1wx7n.js +43 -0
  84. package/dist/chunk-mbt1wx7n.js.map +10 -0
  85. package/dist/chunk-nzv6abbc.js +22 -0
  86. package/dist/chunk-nzv6abbc.js.map +9 -0
  87. package/dist/{chunk-cwkb2wbe.js → chunk-pjpdhh0f.js} +27 -24
  88. package/dist/chunk-pjpdhh0f.js.map +16 -0
  89. package/dist/chunk-py8fhw0k.js +941 -0
  90. package/dist/chunk-py8fhw0k.js.map +27 -0
  91. package/dist/chunk-q6sv0243.js +93 -0
  92. package/dist/chunk-q6sv0243.js.map +13 -0
  93. package/dist/chunk-r8n5m3xq.js +19 -0
  94. package/dist/chunk-r8n5m3xq.js.map +9 -0
  95. package/dist/{chunk-nxpzt33t.js → chunk-rcwtjara.js} +8 -13
  96. package/dist/chunk-rcwtjara.js.map +10 -0
  97. package/dist/{chunk-t85nbjjb.js → chunk-rfrcdsfc.js} +5 -9
  98. package/dist/chunk-rfrcdsfc.js.map +10 -0
  99. package/dist/chunk-rj2gqxxb.js +415 -0
  100. package/dist/chunk-rj2gqxxb.js.map +20 -0
  101. package/dist/{chunk-v7117ywx.js → chunk-rvq1vb70.js} +5 -7
  102. package/dist/{chunk-v7117ywx.js.map → chunk-rvq1vb70.js.map} +2 -2
  103. package/dist/chunk-smvqara3.js +370 -0
  104. package/dist/chunk-smvqara3.js.map +16 -0
  105. package/dist/{chunk-pfyjtfex.js → chunk-sp8zjpbf.js} +7 -12
  106. package/dist/chunk-sp8zjpbf.js.map +10 -0
  107. package/dist/{chunk-48d17n29.js → chunk-ssbg48ec.js} +1 -1
  108. package/dist/chunk-ssbg48ec.js.map +9 -0
  109. package/dist/chunk-st7q66e5.js +109 -0
  110. package/dist/chunk-st7q66e5.js.map +10 -0
  111. package/dist/{chunk-sdp429xd.js → chunk-sw7h7asn.js} +32 -8
  112. package/dist/chunk-sw7h7asn.js.map +27 -0
  113. package/dist/chunk-t092ehvp.js +50 -0
  114. package/dist/chunk-t092ehvp.js.map +9 -0
  115. package/dist/{chunk-2cetsfw4.js → chunk-t0xqfse1.js} +50 -9
  116. package/dist/{chunk-2cetsfw4.js.map → chunk-t0xqfse1.js.map} +8 -3
  117. package/dist/chunk-v1t5vys5.js +124 -0
  118. package/dist/chunk-v1t5vys5.js.map +12 -0
  119. package/dist/chunk-v78rg840.js +137 -0
  120. package/dist/chunk-v78rg840.js.map +10 -0
  121. package/dist/chunk-v7xskyzm.js +19 -0
  122. package/dist/chunk-v7xskyzm.js.map +9 -0
  123. package/dist/{chunk-jy2d17pr.js → chunk-vjshqjmh.js} +12 -8
  124. package/dist/chunk-vjshqjmh.js.map +11 -0
  125. package/dist/chunk-w8075wyx.js +40 -0
  126. package/dist/chunk-w8075wyx.js.map +10 -0
  127. package/dist/chunk-wn8mek6a.js +189 -0
  128. package/dist/chunk-wn8mek6a.js.map +11 -0
  129. package/dist/{chunk-2kyqsrg2.js → chunk-y447ymks.js} +364 -3
  130. package/dist/chunk-y447ymks.js.map +18 -0
  131. package/dist/chunk-yej34vkc.js +247 -0
  132. package/dist/chunk-yej34vkc.js.map +14 -0
  133. package/dist/commands/doctor/command.js +2 -2
  134. package/dist/commands/init/command.js +2 -2
  135. package/dist/commands/logout/command.js +2 -2
  136. package/dist/commands/proxy/command.js +4 -5
  137. package/dist/commands/proxy/command.js.map +3 -3
  138. package/dist/commands/proxy/handler.d.ts +27 -5
  139. package/dist/commands/registry.d.ts +2 -0
  140. package/dist/commands/screens/ScreensView.d.ts +1 -3
  141. package/dist/commands/screens/command.js +8 -10
  142. package/dist/commands/screens/command.js.map +3 -3
  143. package/dist/commands/screens/handler.d.ts +5 -6
  144. package/dist/commands/serve/command.js +60 -10
  145. package/dist/commands/serve/command.js.map +7 -5
  146. package/dist/commands/serve/handler.d.ts +6 -21
  147. package/dist/commands/serve/json-server/handler.d.ts +8 -0
  148. package/dist/commands/serve/json-server/spec.d.ts +32 -0
  149. package/dist/commands/serve/list-screens/handler.d.ts +7 -0
  150. package/dist/commands/serve/list-screens/spec.d.ts +33 -0
  151. package/dist/commands/serve/spec.d.ts +30 -0
  152. package/dist/commands/site/command.js +12 -6
  153. package/dist/commands/site/command.js.map +4 -4
  154. package/dist/commands/site/generate/handler.d.ts +8 -0
  155. package/dist/commands/site/generate/spec.d.ts +44 -0
  156. package/dist/commands/site/hooks/useProjectHydration.d.ts +2 -2
  157. package/dist/commands/site/index.d.ts +5 -3
  158. package/dist/commands/site/list-screens/handler.d.ts +7 -0
  159. package/dist/commands/site/list-screens/spec.d.ts +33 -0
  160. package/dist/commands/site/spec.d.ts +6 -0
  161. package/dist/commands/site/ui/SiteBuilder.d.ts +2 -2
  162. package/dist/commands/site/utils/fetchWithRetry.d.ts +10 -0
  163. package/dist/commands/site/utils/suggestRoute.d.ts +1 -0
  164. package/dist/commands/snapshot/command.js +2 -2
  165. package/dist/commands/tool/command.js +2 -2
  166. package/dist/commands/tool/command.js.map +2 -2
  167. package/dist/commands/tool/context.d.ts +3 -2
  168. package/dist/commands/tool/handler.d.ts +9 -10
  169. package/dist/commands/tool/spec.d.ts +3 -2
  170. package/dist/commands/view/command.js +2 -2
  171. package/dist/index.js +11 -13
  172. package/dist/index.js.map +1 -1
  173. package/dist/platform/browser.d.ts +8 -0
  174. package/dist/services/mcp-client/client.d.ts +5 -0
  175. package/dist/services/mcp-client/spec.d.ts +6 -6
  176. package/dist/services/proxy/spec.d.ts +3 -3
  177. package/dist/services/stitch-sdk/MockStitchSDK.d.ts +18 -0
  178. package/dist/services/view/handler.d.ts +3 -3
  179. package/dist/ui/copy-behaviors/index.d.ts +8 -0
  180. package/dist/ui/navigation-behaviors/index.d.ts +34 -0
  181. package/dist/ui/serve-behaviors/index.d.ts +7 -0
  182. package/package.json +2 -1
  183. package/dist/chunk-2fcdwvrm.js +0 -54
  184. package/dist/chunk-2fcdwvrm.js.map +0 -10
  185. package/dist/chunk-2kyqsrg2.js.map +0 -10
  186. package/dist/chunk-8yrtq2qs.js +0 -18
  187. package/dist/chunk-cwkb2wbe.js.map +0 -16
  188. package/dist/chunk-djhzzcgj.js +0 -362
  189. package/dist/chunk-djhzzcgj.js.map +0 -13
  190. package/dist/chunk-ezmw2j8c.js +0 -14
  191. package/dist/chunk-fwb4fnkp.js +0 -31
  192. package/dist/chunk-fwb4fnkp.js.map +0 -10
  193. package/dist/chunk-h18jrqed.js +0 -9517
  194. package/dist/chunk-h18jrqed.js.map +0 -99
  195. package/dist/chunk-knbnsf6s.js +0 -92
  196. package/dist/chunk-knbnsf6s.js.map +0 -10
  197. package/dist/chunk-nthabjd9.js.map +0 -34
  198. package/dist/chunk-nxpzt33t.js.map +0 -10
  199. package/dist/chunk-pfyjtfex.js.map +0 -10
  200. package/dist/chunk-q1nd6g0y.js.map +0 -20
  201. package/dist/chunk-q4js8r0z.js +0 -4708
  202. package/dist/chunk-q4js8r0z.js.map +0 -29
  203. package/dist/chunk-qv44tmn6.js +0 -289
  204. package/dist/chunk-qv44tmn6.js.map +0 -13
  205. package/dist/chunk-r2sg2nxa.js.map +0 -9
  206. package/dist/chunk-rpxnm86e.js +0 -372
  207. package/dist/chunk-rpxnm86e.js.map +0 -17
  208. package/dist/chunk-sdp429xd.js.map +0 -24
  209. package/dist/chunk-t85nbjjb.js.map +0 -10
  210. package/dist/chunk-wa64nz8b.js +0 -47
  211. package/dist/chunk-wa64nz8b.js.map +0 -10
  212. package/dist/chunk-ycfxp056.js.map +0 -17
  213. package/dist/chunk-z9d2xc83.js +0 -3256
  214. package/dist/chunk-z9d2xc83.js.map +0 -84
  215. package/dist/services/config/handler.d.ts +0 -12
  216. package/dist/services/config/spec.d.ts +0 -82
  217. package/dist/src/cli.d.ts +0 -1
  218. package/dist/src/commands/doctor/handler.d.ts +0 -9
  219. package/dist/src/commands/doctor/handler.test.d.ts +0 -1
  220. package/dist/src/commands/doctor/spec.d.ts +0 -130
  221. package/dist/src/commands/doctor/spec.test.d.ts +0 -1
  222. package/dist/src/commands/init/handler.d.ts +0 -17
  223. package/dist/src/commands/init/handler.test.d.ts +0 -1
  224. package/dist/src/commands/init/spec.d.ts +0 -88
  225. package/dist/src/commands/init/spec.test.d.ts +0 -1
  226. package/dist/src/commands/proxy/handler.d.ts +0 -7
  227. package/dist/src/commands/proxy/handler.test.d.ts +0 -1
  228. package/dist/src/index.d.ts +0 -13
  229. package/dist/src/platform/detector.d.ts +0 -29
  230. package/dist/src/platform/paths.d.ts +0 -20
  231. package/dist/src/platform/shell.d.ts +0 -26
  232. package/dist/src/services/gcloud/handler.d.ts +0 -48
  233. package/dist/src/services/gcloud/handler.test.d.ts +0 -1
  234. package/dist/src/services/gcloud/spec.d.ts +0 -405
  235. package/dist/src/services/mcp-config/handler.d.ts +0 -12
  236. package/dist/src/services/mcp-config/handler.test.d.ts +0 -1
  237. package/dist/src/services/mcp-config/spec.d.ts +0 -88
  238. package/dist/src/services/mcp-config/spec.test.d.ts +0 -1
  239. package/dist/src/services/project/handler.d.ts +0 -11
  240. package/dist/src/services/project/handler.test.d.ts +0 -1
  241. package/dist/src/services/project/spec.d.ts +0 -86
  242. package/dist/src/services/project/spec.test.d.ts +0 -1
  243. package/dist/src/services/proxy/handler.d.ts +0 -15
  244. package/dist/src/services/proxy/handler.test.d.ts +0 -1
  245. package/dist/src/services/proxy/spec.d.ts +0 -83
  246. package/dist/src/services/proxy/spec.test.d.ts +0 -1
  247. package/dist/src/services/stitch/handler.d.ts +0 -15
  248. package/dist/src/services/stitch/handler.test.d.ts +0 -1
  249. package/dist/src/services/stitch/spec.d.ts +0 -262
  250. package/dist/src/services/stitch/spec.test.d.ts +0 -1
  251. package/dist/src/ui/spinner.d.ts +0 -11
  252. package/dist/src/ui/theme.d.ts +0 -18
  253. package/dist/src/ui/wizard.d.ts +0 -24
  254. package/dist/tests/mocks/shell.d.ts +0 -2
  255. /package/dist/{chunk-hb3c6f6a.js.map → chunk-001yk06v.js.map} +0 -0
  256. /package/dist/{chunk-25wakzyb.js.map → chunk-ahw5kfbr.js.map} +0 -0
  257. /package/dist/{chunk-45wx7tn7.js.map → chunk-gwnmywrp.js.map} +0 -0
  258. /package/dist/{chunk-48d17n29.js.map → chunk-j0y94q2c.js.map} +0 -0
@@ -0,0 +1,11 @@
1
+ import {
2
+ clipboardy_default
3
+ } from "./chunk-akd997ec.js";
4
+ import"./chunk-4jygt4d6.js";
5
+ import"./chunk-tz7wnw4s.js";
6
+ import"./chunk-9wyra8hs.js";
7
+ export {
8
+ clipboardy_default as default
9
+ };
10
+
11
+ //# debugId=9B6225CCA3D1906164756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "9B6225CCA3D1906164756E2164756E21",
8
+ "names": []
9
+ }
@@ -229,6 +229,36 @@ var require_jsx_dev_runtime = __commonJS((exports, module) => {
229
229
  }
230
230
  });
231
231
 
232
- export { require_jsx_dev_runtime };
232
+ // src/platform/browser.ts
233
+ import { spawn } from "node:child_process";
234
+ function validateUrl(url) {
235
+ try {
236
+ const parsedUrl = new URL(url);
237
+ if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
238
+ throw new Error("Invalid protocol. Only http and https are allowed.");
239
+ }
240
+ return parsedUrl.toString();
241
+ } catch (error) {
242
+ throw new Error(`Invalid URL: ${error instanceof Error ? error.message : String(error)}`);
243
+ }
244
+ }
245
+ function openUrl(url) {
246
+ const validatedUrl = validateUrl(url);
247
+ if (process.platform === "win32") {
248
+ spawn("cmd", ["/c", "start", '""', `"${validatedUrl}"`], {
249
+ detached: true,
250
+ stdio: "ignore",
251
+ shell: false
252
+ }).unref();
253
+ } else {
254
+ const cmd = process.platform === "darwin" ? "open" : "xdg-open";
255
+ spawn(cmd, [validatedUrl], {
256
+ detached: true,
257
+ stdio: "ignore"
258
+ }).unref();
259
+ }
260
+ }
261
+
262
+ export { openUrl, require_jsx_dev_runtime };
233
263
 
234
- //# debugId=8104A37E07A4B2C364756E2164756E21
264
+ //# debugId=2659200B7D2D7C6E64756E2164756E21
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/react/cjs/react-jsx-dev-runtime.development.js", "../node_modules/react/jsx-dev-runtime.js"],
3
+ "sources": ["../node_modules/react/cjs/react-jsx-dev-runtime.development.js", "../node_modules/react/jsx-dev-runtime.js", "../src/platform/browser.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n",
6
- "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n"
6
+ "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n",
7
+ "import { spawn } from 'node:child_process';\n\n/**\n * Validates a URL to ensure it uses an allowed protocol (http or https).\n */\nexport function validateUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n throw new Error('Invalid protocol. Only http and https are allowed.');\n }\n return parsedUrl.toString();\n } catch (error) {\n throw new Error(`Invalid URL: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Opens a URL in the system's default browser.\n */\nexport function openUrl(url: string): void {\n const validatedUrl = validateUrl(url);\n\n if (process.platform === 'win32') {\n // On Windows, 'start' is a shell builtin. We use 'cmd /c' to invoke it.\n // To prevent ampersand (&) injection, we pass the URL as a single quoted argument.\n // Node's spawn with shell: false (default) will handle basic quoting,\n // but 'cmd /c start' has complex parsing rules.\n // Using '\"\"' as the first argument to 'start' ensures the URL isn't interpreted as a window title.\n // We wrap the URL in double quotes to prevent shell characters like '&' from being interpreted.\n // Since validateUrl ensures no double quotes are in the string, this is safe.\n spawn('cmd', ['/c', 'start', '\"\"', `\"${validatedUrl}\"`], {\n detached: true,\n stdio: 'ignore',\n shell: false,\n }).unref();\n } else {\n const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';\n spawn(cmd, [validatedUrl], {\n detached: true,\n stdio: 'ignore',\n }).unref();\n }\n}\n"
7
8
  ],
8
- "mappings": "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",
9
- "debugId": "8104A37E07A4B2C364756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "2659200B7D2D7C6E64756E2164756E21",
10
11
  "names": []
11
12
  }
@@ -0,0 +1,124 @@
1
+ import {
2
+ JSONRPCMessageSchema,
3
+ StitchProxy
4
+ } from "./chunk-0cd2xak4.js";
5
+ import"./chunk-c6ge431q.js";
6
+ import"./chunk-9wyra8hs.js";
7
+
8
+ // node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
9
+ import process2 from "node:process";
10
+
11
+ // node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js
12
+ class ReadBuffer {
13
+ append(chunk) {
14
+ this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;
15
+ }
16
+ readMessage() {
17
+ if (!this._buffer) {
18
+ return null;
19
+ }
20
+ const index = this._buffer.indexOf(`
21
+ `);
22
+ if (index === -1) {
23
+ return null;
24
+ }
25
+ const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, "");
26
+ this._buffer = this._buffer.subarray(index + 1);
27
+ return deserializeMessage(line);
28
+ }
29
+ clear() {
30
+ this._buffer = undefined;
31
+ }
32
+ }
33
+ function deserializeMessage(line) {
34
+ return JSONRPCMessageSchema.parse(JSON.parse(line));
35
+ }
36
+ function serializeMessage(message) {
37
+ return JSON.stringify(message) + `
38
+ `;
39
+ }
40
+
41
+ // node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js
42
+ class StdioServerTransport {
43
+ constructor(_stdin = process2.stdin, _stdout = process2.stdout) {
44
+ this._stdin = _stdin;
45
+ this._stdout = _stdout;
46
+ this._readBuffer = new ReadBuffer;
47
+ this._started = false;
48
+ this._ondata = (chunk) => {
49
+ this._readBuffer.append(chunk);
50
+ this.processReadBuffer();
51
+ };
52
+ this._onerror = (error) => {
53
+ this.onerror?.(error);
54
+ };
55
+ }
56
+ async start() {
57
+ if (this._started) {
58
+ throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");
59
+ }
60
+ this._started = true;
61
+ this._stdin.on("data", this._ondata);
62
+ this._stdin.on("error", this._onerror);
63
+ }
64
+ processReadBuffer() {
65
+ while (true) {
66
+ try {
67
+ const message = this._readBuffer.readMessage();
68
+ if (message === null) {
69
+ break;
70
+ }
71
+ this.onmessage?.(message);
72
+ } catch (error) {
73
+ this.onerror?.(error);
74
+ }
75
+ }
76
+ }
77
+ async close() {
78
+ this._stdin.off("data", this._ondata);
79
+ this._stdin.off("error", this._onerror);
80
+ const remainingDataListeners = this._stdin.listenerCount("data");
81
+ if (remainingDataListeners === 0) {
82
+ this._stdin.pause();
83
+ }
84
+ this._readBuffer.clear();
85
+ this.onclose?.();
86
+ }
87
+ send(message) {
88
+ return new Promise((resolve) => {
89
+ const json = serializeMessage(message);
90
+ if (this._stdout.write(json)) {
91
+ resolve();
92
+ } else {
93
+ this._stdout.once("drain", resolve);
94
+ }
95
+ });
96
+ }
97
+ }
98
+
99
+ // src/commands/proxy/handler.ts
100
+ class ProxyCommandHandler {
101
+ createProxy;
102
+ createTransport;
103
+ constructor(deps) {
104
+ this.createProxy = deps?.createProxy ?? ((opts) => new StitchProxy(opts));
105
+ this.createTransport = deps?.createTransport ?? (() => new StdioServerTransport);
106
+ }
107
+ async execute(input) {
108
+ try {
109
+ const proxy = this.createProxy({
110
+ apiKey: process.env.STITCH_API_KEY
111
+ });
112
+ const transport = this.createTransport();
113
+ await proxy.start(transport);
114
+ return { success: true, data: { status: "stopped" } };
115
+ } catch (e) {
116
+ return { success: false, error: { code: "PROXY_START_ERROR", message: e.message, recoverable: false } };
117
+ }
118
+ }
119
+ }
120
+ export {
121
+ ProxyCommandHandler
122
+ };
123
+
124
+ //# debugId=BEACF8DA099E305664756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js", "../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js", "../src/commands/proxy/handler.ts"],
4
+ "sourcesContent": [
5
+ "import process from 'node:process';\nimport { ReadBuffer, serializeMessage } from '../shared/stdio.js';\n/**\n * Server transport for stdio: this communicates with an MCP client by reading from the current process' stdin and writing to stdout.\n *\n * This transport is only available in Node.js environments.\n */\nexport class StdioServerTransport {\n constructor(_stdin = process.stdin, _stdout = process.stdout) {\n this._stdin = _stdin;\n this._stdout = _stdout;\n this._readBuffer = new ReadBuffer();\n this._started = false;\n // Arrow functions to bind `this` properly, while maintaining function identity.\n this._ondata = (chunk) => {\n this._readBuffer.append(chunk);\n this.processReadBuffer();\n };\n this._onerror = (error) => {\n this.onerror?.(error);\n };\n }\n /**\n * Starts listening for messages on stdin.\n */\n async start() {\n if (this._started) {\n throw new Error('StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.');\n }\n this._started = true;\n this._stdin.on('data', this._ondata);\n this._stdin.on('error', this._onerror);\n }\n processReadBuffer() {\n while (true) {\n try {\n const message = this._readBuffer.readMessage();\n if (message === null) {\n break;\n }\n this.onmessage?.(message);\n }\n catch (error) {\n this.onerror?.(error);\n }\n }\n }\n async close() {\n // Remove our event listeners first\n this._stdin.off('data', this._ondata);\n this._stdin.off('error', this._onerror);\n // Check if we were the only data listener\n const remainingDataListeners = this._stdin.listenerCount('data');\n if (remainingDataListeners === 0) {\n // Only pause stdin if we were the only listener\n // This prevents interfering with other parts of the application that might be using stdin\n this._stdin.pause();\n }\n // Clear the buffer and notify closure\n this._readBuffer.clear();\n this.onclose?.();\n }\n send(message) {\n return new Promise(resolve => {\n const json = serializeMessage(message);\n if (this._stdout.write(json)) {\n resolve();\n }\n else {\n this._stdout.once('drain', resolve);\n }\n });\n }\n}\n//# sourceMappingURL=stdio.js.map",
6
+ "import { JSONRPCMessageSchema } from '../types.js';\n/**\n * Buffers a continuous stdio stream into discrete JSON-RPC messages.\n */\nexport class ReadBuffer {\n append(chunk) {\n this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;\n }\n readMessage() {\n if (!this._buffer) {\n return null;\n }\n const index = this._buffer.indexOf('\\n');\n if (index === -1) {\n return null;\n }\n const line = this._buffer.toString('utf8', 0, index).replace(/\\r$/, '');\n this._buffer = this._buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n clear() {\n this._buffer = undefined;\n }\n}\nexport function deserializeMessage(line) {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\nexport function serializeMessage(message) {\n return JSON.stringify(message) + '\\n';\n}\n//# sourceMappingURL=stdio.js.map",
7
+ "import { StitchProxy } from '@google/stitch-sdk';\nimport type { StitchProxy as StitchProxyType } from '@google/stitch-sdk';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\n\ninterface ProxyCommandInput {\n port?: number;\n debug?: boolean;\n}\n\ninterface ProxyCommandResult {\n success: boolean;\n data?: { status: string };\n error?: { code: string; message: string; recoverable: boolean };\n}\n\nexport class ProxyCommandHandler {\n private createProxy: (opts: { apiKey?: string }) => StitchProxyType;\n private createTransport: () => StdioServerTransport;\n\n constructor(deps?: {\n createProxy?: (opts: { apiKey?: string }) => StitchProxyType;\n createTransport?: () => StdioServerTransport;\n }) {\n this.createProxy = deps?.createProxy ?? ((opts) => new StitchProxy(opts));\n this.createTransport = deps?.createTransport ?? (() => new StdioServerTransport());\n }\n\n async execute(input: ProxyCommandInput): Promise<ProxyCommandResult> {\n try {\n const proxy = this.createProxy({\n apiKey: process.env.STITCH_API_KEY,\n });\n const transport = this.createTransport();\n await proxy.start(transport);\n return { success: true, data: { status: 'stopped' } };\n } catch (e: any) {\n return { success: false, error: { code: 'PROXY_START_ERROR', message: e.message, recoverable: false } };\n }\n }\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "BEACF8DA099E305664756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,43 @@
1
+ import {
2
+ pLimit
3
+ } from "./chunk-a5xra9jn.js";
4
+ import"./chunk-9wyra8hs.js";
5
+
6
+ // src/commands/screens/handler.ts
7
+ class ScreensHandler {
8
+ stitch;
9
+ constructor(stitch) {
10
+ this.stitch = stitch;
11
+ }
12
+ async execute(projectId) {
13
+ try {
14
+ const project = this.stitch.project(projectId);
15
+ const screens = await project.screens();
16
+ const limit = pLimit(3);
17
+ const mapped = await Promise.all(screens.map((s) => limit(async () => {
18
+ const codeUrl = await s.getHtml().catch(() => null);
19
+ const imageUrl = await s.getImage().catch(() => null);
20
+ return {
21
+ screenId: s.screenId,
22
+ title: s.title ?? s.screenId,
23
+ hasCode: codeUrl !== null,
24
+ codeUrl,
25
+ hasImage: imageUrl !== null
26
+ };
27
+ })));
28
+ const sorted = mapped.sort((a, b) => {
29
+ if (a.hasCode !== b.hasCode)
30
+ return a.hasCode ? -1 : 1;
31
+ return a.title.localeCompare(b.title);
32
+ });
33
+ return { success: true, projectId, projectTitle: project.data?.title ?? projectId, screens: sorted };
34
+ } catch (e) {
35
+ return { success: false, error: e.message };
36
+ }
37
+ }
38
+ }
39
+ export {
40
+ ScreensHandler
41
+ };
42
+
43
+ //# debugId=BA217A050135E6A764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/screens/handler.ts"],
4
+ "sourcesContent": [
5
+ "import type { Stitch } from '@google/stitch-sdk';\nimport pLimit from 'p-limit';\n\ninterface Screen {\n screenId: string;\n title: string;\n hasCode: boolean;\n codeUrl: string | null;\n hasImage: boolean;\n}\n\ntype ScreensResult = {\n success: true;\n projectId: string;\n projectTitle: string;\n screens: Screen[];\n} | {\n success: false;\n error: string;\n};\n\nexport class ScreensHandler {\n constructor(private readonly stitch: Stitch) {}\n\n async execute(projectId: string): Promise<ScreensResult> {\n try {\n const project = this.stitch.project(projectId);\n const screens = await project.screens();\n\n // Throttle concurrent API calls to avoid overwhelming the backend\n const limit = pLimit(3);\n const mapped = await Promise.all(screens.map((s: any) => limit(async () => {\n const codeUrl = await s.getHtml().catch(() => null);\n const imageUrl = await s.getImage().catch(() => null);\n return {\n screenId: s.screenId,\n title: s.title ?? s.screenId,\n hasCode: codeUrl !== null,\n codeUrl,\n hasImage: imageUrl !== null,\n };\n })));\n\n const sorted = mapped.sort((a, b) => {\n if (a.hasCode !== b.hasCode) return a.hasCode ? -1 : 1;\n return a.title.localeCompare(b.title);\n });\n\n return { success: true, projectId, projectTitle: project.data?.title ?? projectId, screens: sorted };\n } catch (e: any) {\n return { success: false, error: e.message };\n }\n }\n}\n"
6
+ ],
7
+ "mappings": ";;;;;;AAqBO,MAAM,eAAe;AAAA,EACG;AAAA,EAA7B,WAAW,CAAkB,QAAgB;AAAA,IAAhB;AAAA;AAAA,OAEvB,QAAO,CAAC,WAA2C;AAAA,IACvD,IAAI;AAAA,MACF,MAAM,UAAU,KAAK,OAAO,QAAQ,SAAS;AAAA,MAC7C,MAAM,UAAU,MAAM,QAAQ,QAAQ;AAAA,MAGtC,MAAM,QAAQ,OAAO,CAAC;AAAA,MACtB,MAAM,SAAS,MAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,MAAW,MAAM,YAAY;AAAA,QACzE,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,MAAM,MAAM,IAAI;AAAA,QAClD,MAAM,WAAW,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,IAAI;AAAA,QACpD,OAAO;AAAA,UACL,UAAU,EAAE;AAAA,UACZ,OAAO,EAAE,SAAS,EAAE;AAAA,UACpB,SAAS,YAAY;AAAA,UACrB;AAAA,UACA,UAAU,aAAa;AAAA,QACzB;AAAA,OACD,CAAC,CAAC;AAAA,MAEH,MAAM,SAAS,OAAO,KAAK,CAAC,GAAG,MAAM;AAAA,QACnC,IAAI,EAAE,YAAY,EAAE;AAAA,UAAS,OAAO,EAAE,UAAU,KAAK;AAAA,QACrD,OAAO,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,OACrC;AAAA,MAED,OAAO,EAAE,SAAS,MAAM,WAAW,cAAc,QAAQ,MAAM,SAAS,WAAW,SAAS,OAAO;AAAA,MACnG,OAAO,GAAQ;AAAA,MACf,OAAO,EAAE,SAAS,OAAO,OAAO,EAAE,QAAQ;AAAA;AAAA;AAGhD;",
8
+ "debugId": "BA217A050135E6A764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ copyJson,
3
+ copyText,
4
+ downloadAndCopyImage,
5
+ downloadAndCopyText,
6
+ downloadImage,
7
+ downloadText
8
+ } from "./chunk-34w2wfyp.js";
9
+ import"./chunk-akd997ec.js";
10
+ import"./chunk-4jygt4d6.js";
11
+ import"./chunk-tz7wnw4s.js";
12
+ import"./chunk-9wyra8hs.js";
13
+ export {
14
+ downloadText,
15
+ downloadImage,
16
+ downloadAndCopyText,
17
+ downloadAndCopyImage,
18
+ copyText,
19
+ copyJson
20
+ };
21
+
22
+ //# debugId=8D766289CB02064164756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "8D766289CB02064164756E2164756E21",
8
+ "names": []
9
+ }
@@ -1,27 +1,29 @@
1
1
  import {
2
+ openUrl,
2
3
  require_jsx_dev_runtime
3
- } from "./chunk-wz8d5vzb.js";
4
+ } from "./chunk-krfqppg2.js";
4
5
  import {
5
6
  Box_default,
6
7
  Text,
7
8
  use_app_default,
8
9
  use_input_default,
9
10
  use_stdout_default
10
- } from "./chunk-2cetsfw4.js";
11
+ } from "./chunk-t0xqfse1.js";
11
12
  import {
12
13
  require_react
13
14
  } from "./chunk-4jwmvjb4.js";
14
15
  import {
15
16
  StitchViteServer
16
- } from "./chunk-7xh1y383.js";
17
- import {
18
- ProjectSyncer,
19
- SiteService,
20
- pLimit
21
- } from "./chunk-qv44tmn6.js";
17
+ } from "./chunk-7xsar3mr.js";
22
18
  import {
23
19
  require_lib
24
20
  } from "./chunk-w8q7nsm7.js";
21
+ import {
22
+ fetchWithRetry
23
+ } from "./chunk-6gw9apqb.js";
24
+ import {
25
+ pLimit
26
+ } from "./chunk-a5xra9jn.js";
25
27
  import {
26
28
  require_cli_spinners
27
29
  } from "./chunk-nq68kghz.js";
@@ -294,7 +296,7 @@ var ScreenList = ({ items, activeIndex }) => {
294
296
 
295
297
  // src/commands/site/hooks/useProjectHydration.ts
296
298
  var import_react3 = __toESM(require_react(), 1);
297
- function useProjectHydration(screens, server, syncer, activeScreenId) {
299
+ function useProjectHydration(screens, server, fetchContent, activeScreenId) {
298
300
  const [hydrationStatus, setHydrationStatus] = import_react3.useState("idle");
299
301
  const [progress, setProgress] = import_react3.useState(0);
300
302
  const contentCache = import_react3.useRef(new Map);
@@ -330,7 +332,7 @@ function useProjectHydration(screens, server, syncer, activeScreenId) {
330
332
  if (!screen.downloadUrl)
331
333
  return;
332
334
  try {
333
- const html = await syncer.fetchContent(screen.downloadUrl);
335
+ const html = await fetchContent(screen.downloadUrl);
334
336
  if (mounted) {
335
337
  contentCache.current.set(screen.id, html);
336
338
  server.mount(`/_preview/${screen.id}`, html);
@@ -356,13 +358,12 @@ function useProjectHydration(screens, server, syncer, activeScreenId) {
356
358
  return () => {
357
359
  mounted = false;
358
360
  };
359
- }, [screens, server, syncer, activeScreenId]);
361
+ }, [screens, server, fetchContent, activeScreenId]);
360
362
  return { hydrationStatus, progress, htmlContent };
361
363
  }
362
364
 
363
365
  // src/commands/site/ui/SiteBuilder.tsx
364
366
  var jsx_dev_runtime3 = __toESM(require_jsx_dev_runtime(), 1);
365
- import { spawn } from "child_process";
366
367
  var SiteBuilder = ({ projectId, client, onExit }) => {
367
368
  const { exit } = use_app_default();
368
369
  const [loading, setLoading] = import_react4.useState(true);
@@ -378,7 +379,6 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
378
379
  const [showAllKeys, setShowAllKeys] = import_react4.useState(false);
379
380
  const [serverUrl, setServerUrl] = import_react4.useState(null);
380
381
  const [server, setServer] = import_react4.useState(null);
381
- const syncer = import_react4.useMemo(() => new ProjectSyncer(client), [client]);
382
382
  import_react4.useEffect(() => {
383
383
  let mounted = true;
384
384
  const srv = new StitchViteServer;
@@ -388,8 +388,15 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
388
388
  const url = await srv.start(0);
389
389
  if (mounted)
390
390
  setServerUrl(url);
391
- const remoteScreens = await syncer.fetchManifest(projectId);
392
- const uiScreens = SiteService.toUIScreens(remoteScreens);
391
+ const project = client.project(projectId);
392
+ const sdkScreens = await project.screens();
393
+ const uiScreens = await Promise.all(sdkScreens.map(async (s) => ({
394
+ id: s.screenId,
395
+ title: s.title ?? s.screenId,
396
+ status: "ignored",
397
+ route: "",
398
+ downloadUrl: await s.getHtml().catch(() => null)
399
+ })));
393
400
  const saved = await siteManifest.load();
394
401
  for (const screen of uiScreens) {
395
402
  const state = saved.get(screen.id);
@@ -412,7 +419,7 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
412
419
  mounted = false;
413
420
  srv.stop();
414
421
  };
415
- }, [projectId, syncer]);
422
+ }, [projectId, client]);
416
423
  const displayList = import_react4.useMemo(() => {
417
424
  let list = screens.map((s, i) => ({ screen: s, sourceIndex: i }));
418
425
  if (viewMode === "discarded") {
@@ -433,7 +440,8 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
433
440
  }, [displayList.length]);
434
441
  const activeItem = displayList[activeIndex];
435
442
  const activeScreenId = activeItem?.screen.id;
436
- const { hydrationStatus, progress, htmlContent } = useProjectHydration(screens, server, syncer, activeScreenId);
443
+ const fetchContent = import_react4.useCallback((url) => fetchWithRetry(url), []);
444
+ const { hydrationStatus, progress, htmlContent } = useProjectHydration(screens, server, fetchContent, activeScreenId);
437
445
  import_react4.useEffect(() => {
438
446
  if (server && followMode && hydrationStatus === "ready" && activeScreenId) {
439
447
  server.navigate(`/_preview/${activeScreenId}`);
@@ -511,13 +519,8 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
511
519
  }
512
520
  if (input === "o") {
513
521
  if (serverUrl && activeScreenId) {
514
- const start = process.platform == "darwin" ? "open" : process.platform == "win32" ? "start" : "xdg-open";
515
522
  const target = `${serverUrl}/_preview/${activeScreenId}`;
516
- if (process.platform === "win32") {
517
- spawn("cmd", ["/c", "start", target], { detached: true, stdio: "ignore" }).unref();
518
- } else {
519
- spawn(start, [target], { detached: true, stdio: "ignore" }).unref();
520
- }
523
+ openUrl(target);
521
524
  }
522
525
  }
523
526
  if (input === "g") {
@@ -730,4 +733,4 @@ var SiteBuilder = ({ projectId, client, onExit }) => {
730
733
 
731
734
  export { SiteManifest, SiteBuilder };
732
735
 
733
- //# debugId=064C634C04DC16A364756E2164756E21
736
+ //# debugId=871FC3A79A136BE664756E2164756E21
@@ -0,0 +1,16 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/site/ui/SiteBuilder.tsx", "../node_modules/ink-spinner/build/index.js", "../node_modules/ink-text-input/build/index.js", "../src/commands/site/utils/SiteManifest.ts", "../src/commands/site/ui/components/StatusIcon.tsx", "../src/commands/site/ui/ScreenList.tsx", "../src/commands/site/hooks/useProjectHydration.ts"],
4
+ "sourcesContent": [
5
+ "import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\nimport Spinner from 'ink-spinner';\nimport TextInput from 'ink-text-input';\nimport { SiteService } from '../../../lib/services/site/SiteService.js';\nimport { StitchViteServer } from '../../../lib/server/vite/StitchViteServer.js';\nimport { openUrl } from '../../../platform/browser.js';\nimport { SiteManifest } from '../utils/SiteManifest.js';\nimport { fetchWithRetry } from '../utils/fetchWithRetry.js';\nimport { ScreenList } from './ScreenList.js';\nimport { useProjectHydration } from '../hooks/useProjectHydration.js';\nimport type { UIScreen, SiteConfig } from '../../../lib/services/site/types.js';\nimport type { Stitch } from '@google/stitch-sdk';\n\ninterface SiteBuilderProps {\n projectId: string;\n client: Stitch;\n onExit: (config: SiteConfig | null, htmlContent?: Map<string, string>) => void;\n}\n\nexport const SiteBuilder: React.FC<SiteBuilderProps> = ({ projectId, client, onExit }) => {\n const { exit } = useApp();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // New state\n const [screens, setScreens] = useState<UIScreen[]>([]);\n const [showSelectedOnly, setShowSelectedOnly] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n const [viewMode, setViewMode] = useState<'default' | 'discarded'>('default');\n\n const siteManifest = useMemo(() => new SiteManifest(projectId), [projectId]);\n\n const [isEditingRoute, setIsEditingRoute] = useState(false);\n const [routeValue, setRouteValue] = useState('');\n\n const [followMode, setFollowMode] = useState(true);\n const [showAllKeys, setShowAllKeys] = useState(false);\n const [serverUrl, setServerUrl] = useState<string | null>(null);\n const [server, setServer] = useState<StitchViteServer | null>(null);\n\n // Initialize\n useEffect(() => {\n let mounted = true;\n const srv = new StitchViteServer();\n setServer(srv);\n\n const init = async () => {\n try {\n // Start server\n const url = await srv.start(0);\n if (mounted) setServerUrl(url);\n\n // Fetch screens\n const project = client.project(projectId);\n const sdkScreens = await project.screens();\n\n // Convert to UIScreen\n const uiScreens = await Promise.all(\n sdkScreens.map(async (s: any) => ({\n id: s.screenId,\n title: s.title ?? s.screenId,\n status: 'ignored' as const,\n route: '',\n downloadUrl: await s.getHtml().catch(() => null)\n }))\n ) as UIScreen[];\n\n // Load saved screen state (status + routes)\n const saved = await siteManifest.load();\n for (const screen of uiScreens) {\n const state = saved.get(screen.id);\n if (state?.status) screen.status = state.status;\n if (state?.route) screen.route = state.route;\n }\n\n if (mounted) {\n setScreens(uiScreens);\n setLoading(false);\n }\n } catch (e: any) {\n if (mounted) setError(e.message);\n }\n };\n\n init();\n\n return () => {\n mounted = false;\n srv.stop();\n };\n }, [projectId, client]);\n\n // Derived display list\n const displayList = useMemo(() => {\n let list = screens.map((s, i) => ({ screen: s, sourceIndex: i }));\n\n if (viewMode === 'discarded') {\n return list.filter(item => item.screen.status === 'discarded');\n }\n\n // Default: hide discarded\n list = list.filter(item => item.screen.status !== 'discarded');\n\n if (showSelectedOnly) {\n list = list.filter(item => item.screen.status === 'included');\n }\n\n return list;\n }, [screens, viewMode, showSelectedOnly]);\n\n // Clamp activeIndex when list changes\n useEffect(() => {\n setActiveIndex(prev => {\n if (displayList.length === 0) return 0;\n return Math.min(prev, Math.max(0, displayList.length - 1));\n });\n }, [displayList.length]);\n\n // Hydration logic\n const activeItem = displayList[activeIndex];\n const activeScreenId = activeItem?.screen.id;\n\n // Stable fetchContent reference using fetchWithRetry directly\n const fetchContent = useCallback((url: string) => fetchWithRetry(url), []);\n\n const { hydrationStatus, progress, htmlContent } = useProjectHydration(screens, server, fetchContent, activeScreenId);\n\n // Navigate effect (Follow Mode)\n useEffect(() => {\n if (server && followMode && hydrationStatus === 'ready' && activeScreenId) {\n server.navigate(`/_preview/${activeScreenId}`);\n }\n }, [activeScreenId, followMode, server, hydrationStatus]);\n\n // Input handling\n useInput((input, key) => {\n if (loading || error) return;\n\n // When editing route, TextInput handles input.\n // We only listen for Escape to cancel or Enter to submit (handled by TextInput onSubmit/onChange logic?)\n // Actually ink-text-input handles value updates, but we need to handle commit/cancel.\n // However, if we use useInput here, it might conflict if not careful.\n // ink-text-input captures input if focused? No, it just renders.\n // We need to capture input here if NOT editing.\n if (isEditingRoute) {\n if (key.escape) {\n setIsEditingRoute(false);\n setRouteValue(''); // Reset or keep? Reset seems better for cancel.\n }\n return;\n }\n\n if (key.upArrow) {\n setActiveIndex(prev => Math.max(0, prev - 1));\n }\n if (key.downArrow) {\n setActiveIndex(prev => Math.min(displayList.length - 1, prev + 1));\n }\n\n if (input === ' ') {\n if (activeItem) {\n const originalIndex = activeItem.sourceIndex;\n setScreens(prev => {\n const next = [...prev];\n const s = next[originalIndex];\n if (s) {\n s.status = s.status === 'included' ? 'ignored' : 'included';\n }\n siteManifest.save(next);\n return next;\n });\n }\n }\n\n if (key.return) {\n if (activeItem) {\n setRouteValue(activeItem.screen.route);\n setIsEditingRoute(true);\n }\n }\n\n if (input === 't') {\n setShowSelectedOnly(prev => !prev);\n }\n\n if (input === 'f') {\n setFollowMode(prev => !prev);\n }\n\n if (input === 'x') {\n const item = displayList[activeIndex];\n if (!item) return;\n\n if (viewMode === 'discarded') {\n // Undiscard → set to 'ignored'\n const idx = item.sourceIndex;\n setScreens(prev => {\n const next = [...prev];\n if (next[idx]) next[idx]!.status = 'ignored';\n siteManifest.save(next);\n return next;\n });\n } else {\n // Discard\n const idx = item.sourceIndex;\n setScreens(prev => {\n const next = [...prev];\n if (next[idx]) next[idx]!.status = 'discarded';\n siteManifest.save(next);\n return next;\n });\n }\n }\n\n if (input === 'd') {\n setViewMode(prev => prev === 'default' ? 'discarded' : 'default');\n setActiveIndex(0);\n }\n\n if (input === 'o') {\n if (serverUrl && activeScreenId) {\n const target = `${serverUrl}/_preview/${activeScreenId}`;\n openUrl(target);\n }\n }\n\n if (input === 'g') {\n // Validate\n const included = screens.filter(s => s.status === 'included');\n const invalid = included.find(s => !s.route || s.route.trim() === '');\n\n if (invalid) {\n // Can't show error easily without new state, maybe console error or alert?\n // For now, maybe just don't generate?\n // Or better, set an error message in UI?\n // Since we don't have a persistent error UI, let's just do nothing or maybe flash?\n // Plan didn't specify error UI.\n // \"Show a warning and refuse to generate.\"\n // I'll reuse 'error' state but that might be blocking.\n // Let's rely on validation during generation or maybe a quick alert line.\n // I'll assume valid for now or maybe just alert if I can.\n // I'll prevent exit.\n return;\n }\n\n const finalConfig: SiteConfig = {\n projectId,\n routes: included.map(s => ({\n screenId: s.id,\n route: s.route,\n status: s.status as 'included' | 'ignored'\n }))\n };\n onExit(finalConfig, htmlContent);\n exit();\n }\n\n if (input === 'e') {\n const included = screens.filter(s => s.status === 'included');\n const exportData = {\n projectId,\n routes: included.map(s => ({\n screenId: s.id,\n route: s.route,\n })),\n };\n process.stdout.write(JSON.stringify(exportData, null, 2) + '\\n');\n }\n\n if (input === '?') {\n setShowAllKeys(prev => !prev);\n }\n\n if (input === 'q') {\n onExit(null);\n exit();\n }\n });\n\n const handleRouteSubmit = (val: string) => {\n if (activeItem) {\n const originalIndex = activeItem.sourceIndex;\n setScreens(prev => {\n const next = [...prev];\n if (next[originalIndex]) {\n next[originalIndex]!.route = val;\n }\n siteManifest.save(next);\n return next;\n });\n setIsEditingRoute(false);\n // Move to next\n setActiveIndex(prev => Math.min(displayList.length - 1, prev + 1));\n }\n };\n\n if (error) {\n return <Text color=\"red\">Error: {error}</Text>;\n }\n\n if (loading) {\n return (\n <Box>\n <Text color=\"green\"><Spinner type=\"dots\" /> Loading project...</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" height=\"100%\">\n {/* Header */}\n <Box borderStyle=\"single\" borderColor=\"cyan\" paddingX={1}>\n <Text>Stitch Site Builder</Text>\n <Box marginLeft={2}>\n <Text color=\"gray\">{serverUrl}</Text>\n </Box>\n <Box marginLeft={2}>\n {viewMode === 'discarded' ? (\n <Text color=\"red\">Viewing Discarded ({displayList.length})</Text>\n ) : (\n <Text>Filter: {showSelectedOnly ? 'Selected' : 'All'} ({displayList.length})</Text>\n )}\n </Box>\n {viewMode === 'default' && screens.filter(s => s.status === 'discarded').length > 0 && (\n <Box marginLeft={2}>\n <Text dimColor>{screens.filter(s => s.status === 'discarded').length} discarded (press d to view)</Text>\n </Box>\n )}\n <Box marginLeft={2}>\n {hydrationStatus === 'downloading' && (\n <Text color=\"yellow\">\n <Spinner type=\"dots\" /> Downloading... {Math.round(progress * 100)}%\n </Text>\n )}\n {hydrationStatus === 'ready' && <Text color=\"green\">Ready</Text>}\n </Box>\n </Box>\n\n {/* List */}\n <ScreenList items={displayList} activeIndex={activeIndex} />\n\n {/* Route Editor */}\n <Box borderStyle=\"single\" borderColor={isEditingRoute ? \"green\" : \"gray\"} paddingX={1} flexDirection=\"column\">\n {activeItem ? (\n <>\n <Text bold>Route for: {activeItem.screen.title}</Text>\n {isEditingRoute ? (\n <Box>\n <Text color=\"green\">{'> '}</Text>\n <TextInput\n value={routeValue}\n onChange={setRouteValue}\n onSubmit={handleRouteSubmit}\n />\n </Box>\n ) : (\n <Box>\n <Text color=\"gray\">{activeItem.screen.route || 'No route defined'}</Text>\n <Box marginLeft={2}>\n <Text dimColor>Press Enter to edit</Text>\n </Box>\n </Box>\n )}\n </>\n ) : (\n <Text color=\"gray\">No screen selected</Text>\n )}\n </Box>\n\n {/* Keymap */}\n <Box borderStyle=\"single\" borderColor=\"gray\" paddingX={1}>\n <Text dimColor>\n {viewMode === 'discarded'\n ? '[x] Undiscard [d] Back to All [q] Quit'\n : showAllKeys\n ? `[Space] Toggle [Enter] Edit Route [x] Discard [d] View Discarded [t] Filter [f] Follow: ${followMode ? 'ON' : 'OFF'} [o] Open [g] Generate [e] Export [q] Quit [?] Less`\n : '[Space] Toggle [Enter] Edit Route [g] Generate [x] Discard [o] Open [q] Quit [?] More'\n }\n </Text>\n </Box>\n </Box>\n );\n};\n",
6
+ "import React, { useState, useEffect } from 'react';\nimport { Text } from 'ink';\nimport spinners from 'cli-spinners';\n/**\n * Spinner.\n */\nfunction Spinner({ type = 'dots' }) {\n const [frame, setFrame] = useState(0);\n const spinner = spinners[type];\n useEffect(() => {\n const timer = setInterval(() => {\n setFrame(previousFrame => {\n const isLastFrame = previousFrame === spinner.frames.length - 1;\n return isLastFrame ? 0 : previousFrame + 1;\n });\n }, spinner.interval);\n return () => {\n clearInterval(timer);\n };\n }, [spinner]);\n return React.createElement(Text, null, spinner.frames[frame]);\n}\nexport default Spinner;\n//# sourceMappingURL=index.js.map",
7
+ "import React, { useState, useEffect } from 'react';\nimport { Text, useInput } from 'ink';\nimport chalk from 'chalk';\nfunction TextInput({ value: originalValue, placeholder = '', focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit, }) {\n const [state, setState] = useState({\n cursorOffset: (originalValue || '').length,\n cursorWidth: 0,\n });\n const { cursorOffset, cursorWidth } = state;\n useEffect(() => {\n setState(previousState => {\n if (!focus || !showCursor) {\n return previousState;\n }\n const newValue = originalValue || '';\n if (previousState.cursorOffset > newValue.length - 1) {\n return {\n cursorOffset: newValue.length,\n cursorWidth: 0,\n };\n }\n return previousState;\n });\n }, [originalValue, focus, showCursor]);\n const cursorActualWidth = highlightPastedText ? cursorWidth : 0;\n const value = mask ? mask.repeat(originalValue.length) : originalValue;\n let renderedValue = value;\n let renderedPlaceholder = placeholder ? chalk.grey(placeholder) : undefined;\n // Fake mouse cursor, because it's too inconvenient to deal with actual cursor and ansi escapes\n if (showCursor && focus) {\n renderedPlaceholder =\n placeholder.length > 0\n ? chalk.inverse(placeholder[0]) + chalk.grey(placeholder.slice(1))\n : chalk.inverse(' ');\n renderedValue = value.length > 0 ? '' : chalk.inverse(' ');\n let i = 0;\n for (const char of value) {\n renderedValue +=\n i >= cursorOffset - cursorActualWidth && i <= cursorOffset\n ? chalk.inverse(char)\n : char;\n i++;\n }\n if (value.length > 0 && cursorOffset === value.length) {\n renderedValue += chalk.inverse(' ');\n }\n }\n useInput((input, key) => {\n if (key.upArrow ||\n key.downArrow ||\n (key.ctrl && input === 'c') ||\n key.tab ||\n (key.shift && key.tab)) {\n return;\n }\n if (key.return) {\n if (onSubmit) {\n onSubmit(originalValue);\n }\n return;\n }\n let nextCursorOffset = cursorOffset;\n let nextValue = originalValue;\n let nextCursorWidth = 0;\n if (key.leftArrow) {\n if (showCursor) {\n nextCursorOffset--;\n }\n }\n else if (key.rightArrow) {\n if (showCursor) {\n nextCursorOffset++;\n }\n }\n else if (key.backspace || key.delete) {\n if (cursorOffset > 0) {\n nextValue =\n originalValue.slice(0, cursorOffset - 1) +\n originalValue.slice(cursorOffset, originalValue.length);\n nextCursorOffset--;\n }\n }\n else {\n nextValue =\n originalValue.slice(0, cursorOffset) +\n input +\n originalValue.slice(cursorOffset, originalValue.length);\n nextCursorOffset += input.length;\n if (input.length > 1) {\n nextCursorWidth = input.length;\n }\n }\n if (cursorOffset < 0) {\n nextCursorOffset = 0;\n }\n if (cursorOffset > originalValue.length) {\n nextCursorOffset = originalValue.length;\n }\n setState({\n cursorOffset: nextCursorOffset,\n cursorWidth: nextCursorWidth,\n });\n if (nextValue !== originalValue) {\n onChange(nextValue);\n }\n }, { isActive: focus });\n return (React.createElement(Text, null, placeholder\n ? value.length > 0\n ? renderedValue\n : renderedPlaceholder\n : renderedValue));\n}\nexport default TextInput;\nexport function UncontrolledTextInput({ initialValue = '', ...props }) {\n const [value, setValue] = useState(initialValue);\n return React.createElement(TextInput, { ...props, value: value, onChange: setValue });\n}\n//# sourceMappingURL=index.js.map",
8
+ "import fs from 'fs-extra';\nimport path from 'path';\nimport os from 'os';\n\ninterface ScreenState {\n status?: 'included' | 'ignored' | 'discarded';\n route?: string;\n}\n\ninterface SiteManifestData {\n screens: Record<string, ScreenState>;\n}\n\ninterface LegacyDiscardData {\n discardedScreenIds: string[];\n}\n\nexport class SiteManifest {\n private filePath: string;\n private legacyPath: string;\n\n constructor(projectId: string) {\n const dir = path.join(os.homedir(), '.stitch-mcp', 'site', projectId);\n this.filePath = path.join(dir, 'site-manifest.json');\n this.legacyPath = path.join(dir, 'discarded.json');\n }\n\n async load(): Promise<Map<string, ScreenState>> {\n try {\n const data: SiteManifestData = await fs.readJson(this.filePath);\n return new Map(Object.entries(data.screens || {}));\n } catch {\n // site-manifest.json doesn't exist or is corrupted — try legacy migration\n }\n\n try {\n const legacy: LegacyDiscardData = await fs.readJson(this.legacyPath);\n const map = new Map<string, ScreenState>();\n for (const id of legacy.discardedScreenIds || []) {\n map.set(id, { status: 'discarded' });\n }\n return map;\n } catch {\n return new Map();\n }\n }\n\n async save(screens: { id: string; status: string; route: string }[]): Promise<void> {\n const record: Record<string, ScreenState> = {};\n for (const screen of screens) {\n const entry: ScreenState = {};\n if (screen.status !== 'ignored') {\n entry.status = screen.status as ScreenState['status'];\n }\n if (screen.route !== '') {\n entry.route = screen.route;\n }\n if (entry.status || entry.route) {\n record[screen.id] = entry;\n }\n }\n await fs.ensureDir(path.dirname(this.filePath));\n const data: SiteManifestData = { screens: record };\n await fs.writeJson(this.filePath, data, { spaces: 2 });\n }\n}\n",
9
+ "import React from 'react';\nimport { Text } from 'ink';\n\ninterface StatusIconProps {\n status: 'included' | 'ignored' | 'discarded';\n}\n\nexport const StatusIcon: React.FC<StatusIconProps> = ({ status }) => {\n if (status === 'included') {\n return <Text color=\"green\">✔ </Text>;\n }\n if (status === 'discarded') {\n return <Text color=\"red\">✖ </Text>;\n }\n return <Text color=\"gray\">- </Text>;\n};\n",
10
+ "import React from 'react';\nimport { Box, Text, useStdout } from 'ink';\nimport type { UIScreen } from './types.js';\nimport { StatusIcon } from './components/StatusIcon.js';\n\ninterface ScreenListProps {\n items: { screen: UIScreen; sourceIndex: number }[];\n activeIndex: number;\n}\n\nexport const ScreenList: React.FC<ScreenListProps> = ({ items, activeIndex }) => {\n const { stdout } = useStdout();\n const height = stdout ? stdout.rows : 20; // Default to 20 if unavailable\n const LIST_HEIGHT = Math.max(5, height - 10); // Reserve space for header/footer\n\n // Adjust start to keep active item in view\n let start = 0;\n if (activeIndex >= LIST_HEIGHT) {\n start = activeIndex - LIST_HEIGHT + 1;\n }\n start = Math.max(0, activeIndex - Math.floor(LIST_HEIGHT / 2));\n const end = Math.min(items.length, start + LIST_HEIGHT);\n\n // Correction if near end\n if (end - start < LIST_HEIGHT && items.length > LIST_HEIGHT) {\n start = Math.max(0, items.length - LIST_HEIGHT);\n }\n\n const visibleItems = items.slice(start, end);\n\n return (\n <Box flexDirection=\"column\" flexGrow={1} borderStyle=\"single\" borderColor=\"blue\">\n {start > 0 && (\n <Box paddingLeft={1}>\n <Text color=\"gray\">... {start} more above ...</Text>\n </Box>\n )}\n\n {visibleItems.map((item, i) => {\n const index = start + i;\n const isActive = index === activeIndex;\n const { screen } = item;\n\n return (\n <Box key={screen.id}>\n <Text color={isActive ? 'cyan' : undefined}>\n {isActive ? '> ' : ' '}\n </Text>\n <StatusIcon status={screen.status} />\n <Text color={isActive ? 'cyan' : undefined} wrap=\"truncate\">\n {screen.title}\n </Text>\n {screen.route && (\n <Text color=\"gray\">{' -> '}{screen.route}</Text>\n )}\n </Box>\n );\n })}\n\n {end < items.length && (\n <Box paddingLeft={1}>\n <Text color=\"gray\">... {items.length - end} more below ...</Text>\n </Box>\n )}\n </Box>\n );\n};\n",
11
+ "import { useState, useEffect, useRef } from 'react';\nimport { StitchViteServer } from '../../../lib/server/vite/StitchViteServer.js';\nimport type { UIScreen } from '../../../lib/services/site/types.js';\nimport pLimit from 'p-limit';\n\nexport type HydrationStatus = 'idle' | 'downloading' | 'ready' | 'error';\n\nexport type FetchContentFn = (url: string) => Promise<string>;\n\nexport function useProjectHydration(\n screens: UIScreen[],\n server: StitchViteServer | null,\n fetchContent: FetchContentFn,\n activeScreenId?: string\n) {\n const [hydrationStatus, setHydrationStatus] = useState<HydrationStatus>('idle');\n const [progress, setProgress] = useState(0);\n const contentCache = useRef<Map<string, string>>(new Map());\n const [htmlContent, setHtmlContent] = useState<Map<string, string>>(new Map());\n\n useEffect(() => {\n if (!server || screens.length === 0) return;\n\n let mounted = true;\n\n const hydrate = async () => {\n // Determine what needs to be downloaded\n // 1. All included screens\n // 2. The active screen (for preview), even if ignored\n const toDownload = screens.filter(s => {\n if (contentCache.current.has(s.id)) return false;\n return s.status === 'included' || s.id === activeScreenId;\n });\n\n if (toDownload.length === 0) {\n // If nothing to download, ensure server has everything mounted\n // (Just in case activeScreenId changed to something already cached but not mounted?\n // Actually server mount is persistent as long as server is running.\n // But if we have cached content, we should ensure it is mounted.)\n\n // Also check if we should update status to ready\n if (hydrationStatus === 'idle' || hydrationStatus === 'downloading') {\n setHydrationStatus('ready');\n setHtmlContent(new Map(contentCache.current));\n }\n\n // Mount cached content to server if not already?\n // It's safer to re-mount or check.\n // For now, let's just mount the active one to be sure if it's cached.\n if (activeScreenId && contentCache.current.has(activeScreenId)) {\n server.mount(`/_preview/${activeScreenId}`, contentCache.current.get(activeScreenId)!);\n }\n\n return;\n }\n\n setHydrationStatus('downloading');\n const limit = pLimit(3);\n let completed = 0;\n const total = toDownload.length;\n\n try {\n await Promise.all(toDownload.map(screen => limit(async () => {\n if (!mounted) return;\n\n if (!screen.downloadUrl) return;\n\n try {\n const html = await fetchContent(screen.downloadUrl);\n if (mounted) {\n contentCache.current.set(screen.id, html);\n server.mount(`/_preview/${screen.id}`, html);\n }\n } catch (e) {\n console.error(`Failed to hydrate ${screen.id}`, e);\n }\n\n if (mounted) {\n completed++;\n setProgress(completed / total);\n }\n })));\n\n if (mounted) {\n setHtmlContent(new Map(contentCache.current));\n setHydrationStatus('ready');\n }\n } catch (e) {\n if (mounted) setHydrationStatus('error');\n }\n };\n\n hydrate();\n\n return () => { mounted = false; };\n }, [screens, server, fetchContent, activeScreenId]);\n\n return { hydrationStatus, progress, htmlContent };\n}\n"
12
+ ],
13
+ "mappings": "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",
14
+ "debugId": "871FC3A79A136BE664756E2164756E21",
15
+ "names": []
16
+ }