@_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
@@ -1,372 +0,0 @@
1
- import {
2
- require_main
3
- } from "./chunk-2kyqsrg2.js";
4
- import {
5
- StitchHandler,
6
- createSpinner
7
- } from "./chunk-sdp429xd.js";
8
- import {
9
- ConsoleUI
10
- } from "./chunk-z9d2xc83.js";
11
- import {
12
- runSteps
13
- } from "./chunk-f2hq6bfv.js";
14
- import {
15
- GcloudHandler
16
- } from "./chunk-nthabjd9.js";
17
- import {
18
- icons,
19
- theme
20
- } from "./chunk-kbtqrkwh.js";
21
- import {
22
- __toESM
23
- } from "./chunk-9wyra8hs.js";
24
-
25
- // src/commands/doctor/handler.ts
26
- var import_dotenv = __toESM(require_main(), 1);
27
-
28
- // src/commands/doctor/steps/ApiKeyDetectedStep.ts
29
- class ApiKeyDetectedStep {
30
- id = "api-key-detected";
31
- name = "Checking API Key...";
32
- async shouldRun(context) {
33
- return context.authMode === "apiKey";
34
- }
35
- async run(context) {
36
- const apiKey = context.apiKey;
37
- if (!apiKey || apiKey.trim().length === 0) {
38
- const message2 = "STITCH_API_KEY is set but empty";
39
- context.checks.push({
40
- name: "API Key",
41
- passed: false,
42
- message: message2,
43
- suggestion: "Set a valid API key in STITCH_API_KEY environment variable or in your .env file"
44
- });
45
- return { success: false, error: new Error(message2) };
46
- }
47
- const masked = apiKey.length > 7 ? `${apiKey.slice(0, 4)}...${apiKey.slice(-3)}` : "***";
48
- const message = `Detected (${masked})`;
49
- context.checks.push({
50
- name: "API Key",
51
- passed: true,
52
- message
53
- });
54
- return { success: true, detail: message };
55
- }
56
- }
57
-
58
- // src/commands/doctor/steps/GcloudCheckStep.ts
59
- class GcloudCheckStep {
60
- id = "gcloud-check";
61
- name = "Checking Google Cloud CLI...";
62
- async shouldRun(context) {
63
- return context.authMode === "oauth";
64
- }
65
- async run(context) {
66
- const gcloudResult = await context.gcloudService.ensureInstalled({
67
- minVersion: "400.0.0",
68
- forceLocal: false
69
- });
70
- if (gcloudResult.success) {
71
- const message = `Installed (${gcloudResult.data.location}): v${gcloudResult.data.version}
72
- Path: ${gcloudResult.data.path}`;
73
- context.checks.push({
74
- name: "Google Cloud CLI",
75
- passed: true,
76
- message
77
- });
78
- return { success: true, detail: message };
79
- } else {
80
- const message = "Not found or invalid version";
81
- context.checks.push({
82
- name: "Google Cloud CLI",
83
- passed: false,
84
- message,
85
- suggestion: "Run: npx @_davideast/stitch-mcp init"
86
- });
87
- return { success: false, error: new Error(message) };
88
- }
89
- }
90
- }
91
-
92
- // src/commands/doctor/steps/AuthCheckStep.ts
93
- class AuthCheckStep {
94
- id = "auth-check";
95
- name = "Checking user authentication...";
96
- async shouldRun(context) {
97
- return context.authMode === "oauth";
98
- }
99
- async run(context) {
100
- const authResult = await context.gcloudService.authenticate({ skipIfActive: true });
101
- if (authResult.success) {
102
- const message = `Authenticated: ${authResult.data.account}`;
103
- context.checks.push({
104
- name: "User Authentication",
105
- passed: true,
106
- message
107
- });
108
- return { success: true, detail: message };
109
- } else {
110
- const message = "Not authenticated";
111
- context.checks.push({
112
- name: "User Authentication",
113
- passed: false,
114
- message,
115
- suggestion: "Run: gcloud auth login"
116
- });
117
- return { success: false, error: new Error(message) };
118
- }
119
- }
120
- }
121
-
122
- // src/commands/doctor/steps/AdcCheckStep.ts
123
- class AdcCheckStep {
124
- id = "adc-check";
125
- name = "Checking application credentials...";
126
- async shouldRun(context) {
127
- return context.authMode === "oauth";
128
- }
129
- async run(context) {
130
- const adcResult = await context.gcloudService.authenticateADC({ skipIfActive: true });
131
- if (adcResult.success) {
132
- const message = "Present";
133
- context.checks.push({
134
- name: "Application Credentials",
135
- passed: true,
136
- message
137
- });
138
- return { success: true, detail: message };
139
- } else {
140
- const message = "Not configured";
141
- context.checks.push({
142
- name: "Application Credentials",
143
- passed: false,
144
- message,
145
- suggestion: "Run: gcloud auth application-default login"
146
- });
147
- return { success: false, error: new Error(message) };
148
- }
149
- }
150
- }
151
-
152
- // src/commands/doctor/steps/ProjectCheckStep.ts
153
- class ProjectCheckStep {
154
- id = "project-check";
155
- name = "Checking active project...";
156
- async shouldRun(context) {
157
- return context.authMode === "oauth";
158
- }
159
- async run(context) {
160
- const projectId = await context.gcloudService.getProjectId();
161
- if (projectId) {
162
- const message = `Set: ${projectId}`;
163
- context.checks.push({
164
- name: "Active Project",
165
- passed: true,
166
- message
167
- });
168
- return { success: true, detail: message };
169
- } else {
170
- const message = "No project configured";
171
- context.checks.push({
172
- name: "Active Project",
173
- passed: false,
174
- message,
175
- suggestion: "Run: npx @_davideast/stitch-mcp init"
176
- });
177
- return { success: false, error: new Error(message) };
178
- }
179
- }
180
- }
181
-
182
- // src/commands/doctor/steps/ApiKeyConnectionStep.ts
183
- class ApiKeyConnectionStep {
184
- id = "api-key-connection";
185
- name = "Testing Stitch API...";
186
- async shouldRun(context) {
187
- if (context.authMode !== "apiKey")
188
- return false;
189
- const apiKeyCheck = context.checks.find((c) => c.name === "API Key");
190
- return !!apiKeyCheck && apiKeyCheck.passed;
191
- }
192
- async run(context) {
193
- const testResult = await context.stitchService.testConnectionWithApiKey({
194
- apiKey: context.apiKey
195
- });
196
- if (testResult.success) {
197
- const message = `Healthy (${testResult.data.statusCode})`;
198
- context.checks.push({
199
- name: "Stitch API",
200
- passed: true,
201
- message
202
- });
203
- return { success: true, detail: message };
204
- } else {
205
- const message = testResult.error.message;
206
- context.checks.push({
207
- name: "Stitch API",
208
- passed: false,
209
- message,
210
- suggestion: testResult.error.suggestion,
211
- details: testResult.error.details
212
- });
213
- return { success: false, error: new Error(message) };
214
- }
215
- }
216
- }
217
-
218
- // src/commands/doctor/steps/ApiCheckStep.ts
219
- class ApiCheckStep {
220
- id = "api-check";
221
- name = "Testing Stitch API...";
222
- async shouldRun(context) {
223
- if (context.authMode !== "oauth")
224
- return false;
225
- const projectCheck = context.checks.find((c) => c.name === "Active Project");
226
- return !!projectCheck && projectCheck.passed;
227
- }
228
- async run(context) {
229
- const projectId = await context.gcloudService.getProjectId();
230
- const accessToken = await context.gcloudService.getAccessToken();
231
- if (projectId && accessToken) {
232
- const testResult = await context.stitchService.testConnection({
233
- projectId,
234
- accessToken
235
- });
236
- if (testResult.success) {
237
- const message = `Healthy (${testResult.data.statusCode})`;
238
- context.checks.push({
239
- name: "Stitch API",
240
- passed: true,
241
- message
242
- });
243
- return { success: true, detail: message };
244
- } else {
245
- const message = testResult.error.message;
246
- context.checks.push({
247
- name: "Stitch API",
248
- passed: false,
249
- message,
250
- suggestion: testResult.error.suggestion,
251
- details: testResult.error.details
252
- });
253
- return { success: false, error: new Error(message) };
254
- }
255
- } else {
256
- const message = "Could not obtain access token";
257
- context.checks.push({
258
- name: "Stitch API",
259
- passed: false,
260
- message,
261
- suggestion: "Re-run authentication"
262
- });
263
- return { success: false, error: new Error(message) };
264
- }
265
- }
266
- }
267
-
268
- // src/commands/doctor/handler.ts
269
- class DoctorHandler {
270
- gcloudService;
271
- stitchService;
272
- steps;
273
- ui;
274
- constructor(gcloudService = new GcloudHandler, stitchService = new StitchHandler, ui) {
275
- this.gcloudService = gcloudService;
276
- this.stitchService = stitchService;
277
- this.ui = ui || new ConsoleUI;
278
- this.steps = [
279
- new ApiKeyDetectedStep,
280
- new GcloudCheckStep,
281
- new AuthCheckStep,
282
- new AdcCheckStep,
283
- new ProjectCheckStep,
284
- new ApiKeyConnectionStep,
285
- new ApiCheckStep
286
- ];
287
- }
288
- async execute(input) {
289
- import_dotenv.default.config({ quiet: true });
290
- const apiKey = process.env.STITCH_API_KEY;
291
- const context = {
292
- input,
293
- ui: this.ui,
294
- gcloudService: this.gcloudService,
295
- stitchService: this.stitchService,
296
- authMode: apiKey ? "apiKey" : "oauth",
297
- apiKey: apiKey || undefined,
298
- checks: []
299
- };
300
- console.log(`
301
- ${theme.blue("Stitch Doctor")}
302
- `);
303
- try {
304
- let spinner;
305
- await runSteps(this.steps, context, {
306
- onBeforeStep: (step) => {
307
- spinner = createSpinner();
308
- spinner.start(step.name);
309
- },
310
- onAfterStep: (_step, result) => {
311
- if (result.success) {
312
- spinner.succeed(result.detail || "Passed");
313
- } else {
314
- spinner.fail(result.error?.message || "Failed");
315
- }
316
- return false;
317
- }
318
- });
319
- const allPassed = context.checks.every((c) => c.passed);
320
- console.log(`
321
- ${theme.blue("─".repeat(60))}
322
- `);
323
- console.log(theme.blue(`Health Check Summary
324
- `));
325
- for (const check of context.checks) {
326
- const icon = check.passed ? theme.green(icons.success) : theme.red(icons.error);
327
- console.log(`${icon} ${check.name}: ${check.message}`);
328
- if (check.suggestion && !check.passed) {
329
- console.log(theme.gray(` → ${check.suggestion}`));
330
- }
331
- }
332
- if (input.verbose) {
333
- const failedChecksWithDetails = context.checks.filter((c) => !c.passed && c.details);
334
- if (failedChecksWithDetails.length > 0) {
335
- console.log(`
336
- ${theme.blue("Detailed Error Information")}
337
- `);
338
- for (const check of failedChecksWithDetails) {
339
- console.log(theme.yellow(`${check.name}:`));
340
- console.log(theme.gray(check.details.split(`
341
- `).map((line) => ` ${line}`).join(`
342
- `)));
343
- console.log("");
344
- }
345
- }
346
- }
347
- console.log(`
348
- ${allPassed ? theme.green("All checks passed!") : theme.yellow("Some checks failed")}
349
- `);
350
- return {
351
- success: true,
352
- data: {
353
- checks: context.checks,
354
- allPassed
355
- }
356
- };
357
- } catch (error) {
358
- return {
359
- success: false,
360
- error: {
361
- code: "UNKNOWN_ERROR",
362
- message: error instanceof Error ? error.message : String(error),
363
- recoverable: false
364
- }
365
- };
366
- }
367
- }
368
- }
369
-
370
- export { DoctorHandler };
371
-
372
- //# debugId=FB405D19691F8C2E64756E2164756E21
@@ -1,17 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/commands/doctor/handler.ts", "../src/commands/doctor/steps/ApiKeyDetectedStep.ts", "../src/commands/doctor/steps/GcloudCheckStep.ts", "../src/commands/doctor/steps/AuthCheckStep.ts", "../src/commands/doctor/steps/AdcCheckStep.ts", "../src/commands/doctor/steps/ProjectCheckStep.ts", "../src/commands/doctor/steps/ApiKeyConnectionStep.ts", "../src/commands/doctor/steps/ApiCheckStep.ts"],
4
- "sourcesContent": [
5
- "import { type DoctorCommand, type DoctorInput, type DoctorResult } from './spec.js';\nimport { GcloudHandler } from '../../services/gcloud/handler.js';\nimport { type GcloudService } from '../../services/gcloud/spec.js';\nimport { StitchHandler } from '../../services/stitch/handler.js';\nimport { type StitchService } from '../../services/stitch/spec.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { createSpinner } from '../../ui/spinner.js';\nimport { ConsoleUI } from '../../framework/ConsoleUI.js';\nimport { type UserInterface } from '../../framework/UserInterface.js';\nimport { type DoctorContext } from './context.js';\nimport { type CommandStep } from '../../framework/CommandStep.js';\nimport { runSteps } from '../../framework/StepRunner.js';\nimport dotenv from 'dotenv';\n\nimport { ApiKeyDetectedStep } from './steps/ApiKeyDetectedStep.js';\nimport { GcloudCheckStep } from './steps/GcloudCheckStep.js';\nimport { AuthCheckStep } from './steps/AuthCheckStep.js';\nimport { AdcCheckStep } from './steps/AdcCheckStep.js';\nimport { ProjectCheckStep } from './steps/ProjectCheckStep.js';\nimport { ApiKeyConnectionStep } from './steps/ApiKeyConnectionStep.js';\nimport { ApiCheckStep } from './steps/ApiCheckStep.js';\n\nexport class DoctorHandler implements DoctorCommand {\n private steps: CommandStep<DoctorContext>[];\n private readonly ui: UserInterface;\n\n constructor(\n private readonly gcloudService: GcloudService = new GcloudHandler(),\n private readonly stitchService: StitchService = new StitchHandler(),\n ui?: UserInterface\n ) {\n this.ui = ui || new ConsoleUI();\n this.steps = [\n new ApiKeyDetectedStep(),\n new GcloudCheckStep(),\n new AuthCheckStep(),\n new AdcCheckStep(),\n new ProjectCheckStep(),\n new ApiKeyConnectionStep(),\n new ApiCheckStep(),\n ];\n }\n\n async execute(input: DoctorInput): Promise<DoctorResult> {\n dotenv.config({ quiet: true });\n const apiKey = process.env.STITCH_API_KEY;\n\n const context: DoctorContext = {\n input,\n ui: this.ui,\n gcloudService: this.gcloudService,\n stitchService: this.stitchService,\n authMode: apiKey ? 'apiKey' : 'oauth',\n apiKey: apiKey || undefined,\n checks: []\n };\n\n console.log(`\\n${theme.blue('Stitch Doctor')}\\n`);\n\n try {\n let spinner: ReturnType<typeof createSpinner>;\n await runSteps(this.steps, context, {\n onBeforeStep: (step) => {\n spinner = createSpinner();\n spinner.start(step.name);\n },\n onAfterStep: (_step, result) => {\n if (result.success) {\n spinner.succeed(result.detail || 'Passed');\n } else {\n spinner.fail(result.error?.message || 'Failed');\n }\n return false; // always continue\n },\n });\n\n // Summary\n const allPassed = context.checks.every((c) => c.passed);\n console.log(`\\n${theme.blue('─'.repeat(60))}\\n`);\n console.log(theme.blue('Health Check Summary\\n'));\n\n for (const check of context.checks) {\n const icon = check.passed ? theme.green(icons.success) : theme.red(icons.error);\n console.log(`${icon} ${check.name}: ${check.message}`);\n if (check.suggestion && !check.passed) {\n console.log(theme.gray(` → ${check.suggestion}`));\n }\n }\n\n // Show full error details for failed checks if verbose is enabled\n if (input.verbose) {\n const failedChecksWithDetails = context.checks.filter(c => !c.passed && c.details);\n if (failedChecksWithDetails.length > 0) {\n console.log(`\\n${theme.blue('Detailed Error Information')}\\n`);\n for (const check of failedChecksWithDetails) {\n console.log(theme.yellow(`${check.name}:`));\n console.log(theme.gray(check.details!.split('\\n').map(line => ` ${line}`).join('\\n')));\n console.log('');\n }\n }\n }\n\n console.log(\n `\\n${allPassed ? theme.green('All checks passed!') : theme.yellow('Some checks failed')}\\n`\n );\n\n return {\n success: true,\n data: {\n checks: context.checks,\n allPassed,\n },\n };\n\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'UNKNOWN_ERROR',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n}\n",
6
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class ApiKeyDetectedStep implements CommandStep<DoctorContext> {\n id = 'api-key-detected';\n name = 'Checking API Key...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n return context.authMode === 'apiKey';\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const apiKey = context.apiKey;\n\n if (!apiKey || apiKey.trim().length === 0) {\n const message = 'STITCH_API_KEY is set but empty';\n context.checks.push({\n name: 'API Key',\n passed: false,\n message,\n suggestion: 'Set a valid API key in STITCH_API_KEY environment variable or in your .env file',\n });\n return { success: false, error: new Error(message) };\n }\n\n const masked = apiKey.length > 7\n ? `${apiKey.slice(0, 4)}...${apiKey.slice(-3)}`\n : '***';\n const message = `Detected (${masked})`;\n context.checks.push({\n name: 'API Key',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n }\n}\n",
7
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class GcloudCheckStep implements CommandStep<DoctorContext> {\n id = 'gcloud-check';\n name = 'Checking Google Cloud CLI...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n return context.authMode === 'oauth';\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const gcloudResult = await context.gcloudService.ensureInstalled({\n minVersion: '400.0.0',\n forceLocal: false,\n });\n\n if (gcloudResult.success) {\n const message = `Installed (${gcloudResult.data.location}): v${gcloudResult.data.version}\\n Path: ${gcloudResult.data.path}`;\n context.checks.push({\n name: 'Google Cloud CLI',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = 'Not found or invalid version';\n context.checks.push({\n name: 'Google Cloud CLI',\n passed: false,\n message,\n suggestion: 'Run: npx @_davideast/stitch-mcp init',\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n",
8
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class AuthCheckStep implements CommandStep<DoctorContext> {\n id = 'auth-check';\n name = 'Checking user authentication...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n return context.authMode === 'oauth';\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const authResult = await context.gcloudService.authenticate({ skipIfActive: true });\n\n if (authResult.success) {\n const message = `Authenticated: ${authResult.data.account}`;\n context.checks.push({\n name: 'User Authentication',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = 'Not authenticated';\n context.checks.push({\n name: 'User Authentication',\n passed: false,\n message,\n suggestion: 'Run: gcloud auth login',\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n",
9
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class AdcCheckStep implements CommandStep<DoctorContext> {\n id = 'adc-check';\n name = 'Checking application credentials...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n return context.authMode === 'oauth';\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const adcResult = await context.gcloudService.authenticateADC({ skipIfActive: true });\n\n if (adcResult.success) {\n const message = 'Present';\n context.checks.push({\n name: 'Application Credentials',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = 'Not configured';\n context.checks.push({\n name: 'Application Credentials',\n passed: false,\n message,\n suggestion: 'Run: gcloud auth application-default login',\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n",
10
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class ProjectCheckStep implements CommandStep<DoctorContext> {\n id = 'project-check';\n name = 'Checking active project...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n return context.authMode === 'oauth';\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const projectId = await context.gcloudService.getProjectId();\n\n if (projectId) {\n const message = `Set: ${projectId}`;\n context.checks.push({\n name: 'Active Project',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = 'No project configured';\n context.checks.push({\n name: 'Active Project',\n passed: false,\n message,\n suggestion: 'Run: npx @_davideast/stitch-mcp init',\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n",
11
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class ApiKeyConnectionStep implements CommandStep<DoctorContext> {\n id = 'api-key-connection';\n name = 'Testing Stitch API...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n if (context.authMode !== 'apiKey') return false;\n const apiKeyCheck = context.checks.find(c => c.name === 'API Key');\n return !!apiKeyCheck && apiKeyCheck.passed;\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n const testResult = await context.stitchService.testConnectionWithApiKey({\n apiKey: context.apiKey!,\n });\n\n if (testResult.success) {\n const message = `Healthy (${testResult.data.statusCode})`;\n context.checks.push({\n name: 'Stitch API',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = testResult.error.message;\n context.checks.push({\n name: 'Stitch API',\n passed: false,\n message,\n suggestion: testResult.error.suggestion,\n details: testResult.error.details,\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n",
12
- "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type DoctorContext } from '../context.js';\n\nexport class ApiCheckStep implements CommandStep<DoctorContext> {\n id = 'api-check';\n name = 'Testing Stitch API...';\n\n async shouldRun(context: DoctorContext): Promise<boolean> {\n if (context.authMode !== 'oauth') return false;\n // Only run if we have a project\n const projectCheck = context.checks.find(c => c.name === 'Active Project');\n return !!projectCheck && projectCheck.passed;\n }\n\n async run(context: DoctorContext): Promise<StepResult> {\n // We need to re-fetch project ID because it's not stored in context state (only in checks array)\n const projectId = await context.gcloudService.getProjectId();\n const accessToken = await context.gcloudService.getAccessToken();\n\n if (projectId && accessToken) {\n const testResult = await context.stitchService.testConnection({\n projectId,\n accessToken,\n });\n\n if (testResult.success) {\n const message = `Healthy (${testResult.data.statusCode})`;\n context.checks.push({\n name: 'Stitch API',\n passed: true,\n message,\n });\n return { success: true, detail: message };\n } else {\n const message = testResult.error.message;\n context.checks.push({\n name: 'Stitch API',\n passed: false,\n message,\n suggestion: testResult.error.suggestion,\n details: testResult.error.details,\n });\n return { success: false, error: new Error(message) };\n }\n } else {\n const message = 'Could not obtain access token';\n context.checks.push({\n name: 'Stitch API',\n passed: false,\n message,\n suggestion: 'Re-run authentication',\n });\n return { success: false, error: new Error(message) };\n }\n }\n}\n"
13
- ],
14
- "mappings": "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",
15
- "debugId": "FB405D19691F8C2E64756E2164756E21",
16
- "names": []
17
- }
@@ -1,24 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/stitch/iam.ts", "../src/services/stitch/api.ts", "../src/services/stitch/connection.ts", "../src/services/stitch/handler.ts", "../node_modules/ora/index.js", "../node_modules/ora/node_modules/cli-cursor/index.js", "../node_modules/ora/node_modules/cli-cursor/node_modules/restore-cursor/index.js", "../node_modules/mimic-function/index.js", "../node_modules/onetime/index.js", "../node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported/index.js", "../node_modules/ora/node_modules/log-symbols/index.js", "../node_modules/ora/node_modules/string-width/index.js", "../node_modules/is-interactive/index.js", "../node_modules/stdin-discarder/index.js", "../src/ui/spinner.ts"],
4
- "sourcesContent": [
5
- "import {\n type IAMConfigResult,\n type ConfigureIAMInput,\n} from './spec.js';\nimport type { GcloudExecutor } from '../gcloud/core.js';\n\nexport class StitchIamService {\n constructor(private executor: GcloudExecutor) {}\n\n async configureIAM(input: ConfigureIAMInput): Promise<IAMConfigResult> {\n try {\n const role = 'roles/serviceusage.serviceUsageConsumer';\n const member = `user:${input.userEmail}`;\n\n const result = await this.executor.exec(\n [\n 'projects',\n 'add-iam-policy-binding',\n input.projectId,\n `--member=${member}`,\n `--role=${role}`,\n '--condition=None',\n '--quiet',\n ]\n );\n\n if (!result.success) {\n const errorMsg = result.stderr || result.error || result.stdout || 'Unknown error';\n return {\n success: false,\n error: {\n code: 'IAM_CONFIG_FAILED',\n message: `Failed to configure IAM permissions: ${errorMsg}`,\n suggestion: 'Ensure you have Owner or Editor role on the project',\n recoverable: true,\n details: `Exit code: ${result.exitCode}\\nStderr: ${result.stderr}\\nStdout: ${result.stdout}`,\n },\n };\n }\n\n return {\n success: true,\n data: {\n role,\n member,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'IAM_CONFIG_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n\n async checkIAMRole(input: { projectId: string; userEmail: string }): Promise<boolean> {\n try {\n const role = 'roles/serviceusage.serviceUsageConsumer';\n const member = `user:${input.userEmail}`;\n const result = await this.executor.exec(\n [\n 'projects',\n 'get-iam-policy',\n input.projectId,\n `--flatten=bindings[].members`,\n `--filter=bindings.role=${role} AND bindings.members=${member}`,\n '--format=value(bindings.members)',\n ]\n );\n return result.success && result.stdout.trim().includes(member);\n } catch {\n return false;\n }\n }\n}\n",
6
- "import {\n type APIEnableResult,\n type EnableAPIInput,\n} from './spec.js';\nimport type { GcloudExecutor } from '../gcloud/core.js';\n\nexport class StitchApiService {\n constructor(private executor: GcloudExecutor) {}\n\n async enableAPI(input: EnableAPIInput): Promise<APIEnableResult> {\n try {\n const api = 'stitch.googleapis.com';\n\n const result = await this.executor.exec(\n ['beta', 'services', 'mcp', 'enable', api, `--project=${input.projectId}`, '--quiet']\n );\n\n if (!result.success) {\n const errorMsg = result.stderr || result.error || result.stdout || 'Unknown error';\n return {\n success: false,\n error: {\n code: 'API_ENABLE_FAILED',\n message: `Failed to enable Stitch API: ${errorMsg}`,\n suggestion: 'Ensure the project has billing enabled',\n recoverable: true,\n details: `Exit code: ${result.exitCode}\\nStderr: ${result.stderr}\\nStdout: ${result.stdout}`,\n },\n };\n }\n\n return {\n success: true,\n data: {\n api,\n enabled: true,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'API_ENABLE_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n\n async checkAPIEnabled(input: { projectId: string }): Promise<boolean> {\n try {\n const result = await this.executor.exec(\n [\n 'services',\n 'list',\n `--project=${input.projectId}`,\n '--enabled',\n '--filter=name:stitch.googleapis.com',\n '--format=value(name)',\n ]\n );\n return result.success && result.stdout.trim().includes('stitch.googleapis.com');\n } catch {\n return false;\n }\n }\n}\n",
7
- "import {\n type ConnectionTestResult,\n type TestConnectionInput,\n type TestConnectionWithApiKeyInput,\n} from './spec.js';\n\nexport class StitchConnectionService {\n async testConnectionWithApiKey(input: TestConnectionWithApiKeyInput): Promise<ConnectionTestResult> {\n try {\n const url = process.env.STITCH_HOST || 'https://stitch.googleapis.com/mcp';\n\n const payload = {\n method: 'tools/call',\n jsonrpc: '2.0',\n params: {\n name: 'list_projects',\n arguments: {},\n },\n id: 1,\n };\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'X-Goog-Api-Key': input.apiKey,\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorDetails = '';\n let errorMessage = `API request failed with status ${response.status}`;\n\n try {\n const errorBody = await response.json() as any;\n errorDetails = JSON.stringify(errorBody, null, 2);\n\n if (errorBody?.error?.message) {\n errorMessage = errorBody.error.message;\n }\n } catch {\n try {\n errorDetails = await response.text();\n } catch {\n errorDetails = `Status ${response.status}: ${response.statusText}`;\n }\n }\n\n return {\n success: false,\n error: {\n code: response.status === 403 ? 'PERMISSION_DENIED' : 'CONNECTION_TEST_FAILED',\n message: errorMessage,\n suggestion:\n response.status === 403\n ? 'Check that your API key is valid and has access to the Stitch API'\n : 'Verify API key configuration and try again',\n recoverable: true,\n details: errorDetails,\n },\n };\n }\n\n const data = await response.json();\n\n return {\n success: true,\n data: {\n connected: true,\n statusCode: response.status,\n url,\n response: data,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'CONNECTION_TEST_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n\n async testConnection(input: TestConnectionInput): Promise<ConnectionTestResult> {\n try {\n const url = process.env.STITCH_HOST || 'https://stitch.googleapis.com/mcp';\n\n const payload = {\n method: 'tools/call',\n jsonrpc: '2.0',\n params: {\n name: 'list_projects',\n arguments: {},\n },\n id: 1,\n };\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n Authorization: `Bearer ${input.accessToken}`,\n 'X-Goog-User-Project': input.projectId,\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n // Capture full error response which may contain helpful URLs\n let errorDetails = '';\n let errorMessage = `API request failed with status ${response.status}`;\n\n try {\n const errorBody = await response.json() as any;\n errorDetails = JSON.stringify(errorBody, null, 2);\n\n // Extract error message if available\n if (errorBody?.error?.message) {\n errorMessage = errorBody.error.message;\n }\n } catch {\n // If response isn't JSON, try to get text\n try {\n errorDetails = await response.text();\n } catch {\n errorDetails = `Status ${response.status}: ${response.statusText}`;\n }\n }\n\n return {\n success: false,\n error: {\n code: response.status === 403 ? 'PERMISSION_DENIED' : 'CONNECTION_TEST_FAILED',\n message: errorMessage,\n suggestion:\n response.status === 403\n ? 'Check IAM permissions and ensure API is enabled'\n : 'Verify project configuration and try again',\n recoverable: true,\n details: errorDetails,\n },\n };\n }\n\n const data = await response.json();\n\n return {\n success: true,\n data: {\n connected: true,\n statusCode: response.status,\n url,\n response: data,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'CONNECTION_TEST_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n }\n }\n}\n",
8
- "import {\n type StitchService,\n type ConfigureIAMInput,\n type EnableAPIInput,\n type TestConnectionInput,\n type TestConnectionWithApiKeyInput,\n type IAMConfigResult,\n type APIEnableResult,\n type ConnectionTestResult,\n} from './spec.js';\nimport { GcloudExecutor } from '../gcloud/core.js';\nimport { StitchIamService } from './iam.js';\nimport { StitchApiService } from './api.js';\nimport { StitchConnectionService } from './connection.js';\n\nexport class StitchHandler implements StitchService {\n private executor: GcloudExecutor;\n private iamService: StitchIamService;\n private apiService: StitchApiService;\n private connectionService: StitchConnectionService;\n\n constructor() {\n this.executor = new GcloudExecutor();\n this.iamService = new StitchIamService(this.executor);\n this.apiService = new StitchApiService(this.executor);\n this.connectionService = new StitchConnectionService();\n }\n\n async configureIAM(input: ConfigureIAMInput): Promise<IAMConfigResult> {\n return this.iamService.configureIAM(input);\n }\n\n async enableAPI(input: EnableAPIInput): Promise<APIEnableResult> {\n return this.apiService.enableAPI(input);\n }\n\n async checkIAMRole(input: { projectId: string; userEmail: string }): Promise<boolean> {\n return this.iamService.checkIAMRole(input);\n }\n\n async checkAPIEnabled(input: { projectId: string }): Promise<boolean> {\n return this.apiService.checkAPIEnabled(input);\n }\n\n async testConnectionWithApiKey(input: TestConnectionWithApiKeyInput): Promise<ConnectionTestResult> {\n return this.connectionService.testConnectionWithApiKey(input);\n }\n\n async testConnection(input: TestConnectionInput): Promise<ConnectionTestResult> {\n return this.connectionService.testConnection(input);\n }\n}\n",
9
- "import process from 'node:process';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stripAnsi from 'strip-ansi';\nimport stringWidth from 'string-width';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\nclass Ora {\n\t#linesToClear = 0;\n\t#isDiscardingStdin = false;\n\t#lineCount = 0;\n\t#frameIndex = -1;\n\t#lastSpinnerFrameTime = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#initialInterval;\n\t#isEnabled;\n\t#isSilent;\n\t#indent;\n\t#text;\n\t#prefixText;\n\t#suffixText;\n\tcolor;\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\n\t\tthis.#initialInterval = this.#options.interval;\n\t\tthis.#stream = this.#options.stream;\n\t\tthis.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : isInteractive({stream: this.#stream});\n\t\tthis.#isSilent = typeof this.#options.isSilent === 'boolean' ? this.#options.isSilent : false;\n\n\t\t// Set *after* `this.#stream`.\n\t\t// It's important that these use the public setters.\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.suffixText = this.#options.suffixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#lineCount;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#indent = indent;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget interval() {\n\t\treturn this.#initialInterval ?? this.#spinner.interval ?? 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = -1;\n\t\tthis.#initialInterval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (spinner.frames === undefined) {\n\t\t\t\tthrow new Error('The given spinner must have a `frames` property');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#text;\n\t}\n\n\tset text(value = '') {\n\t\tthis.#text = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget prefixText() {\n\t\treturn this.#prefixText;\n\t}\n\n\tset prefixText(value = '') {\n\t\tthis.#prefixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget suffixText() {\n\t\treturn this.#suffixText;\n\t}\n\n\tset suffixText(value = '') {\n\t\tthis.#suffixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t#getFullPrefixText(prefixText = this.#prefixText, postfix = ' ') {\n\t\tif (typeof prefixText === 'string' && prefixText !== '') {\n\t\t\treturn prefixText + postfix;\n\t\t}\n\n\t\tif (typeof prefixText === 'function') {\n\t\t\treturn prefixText() + postfix;\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#getFullSuffixText(suffixText = this.#suffixText, prefix = ' ') {\n\t\tif (typeof suffixText === 'string' && suffixText !== '') {\n\t\t\treturn prefix + suffixText;\n\t\t}\n\n\t\tif (typeof suffixText === 'function') {\n\t\t\treturn prefix + suffixText();\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#updateLineCount() {\n\t\tconst columns = this.#stream.columns ?? 80;\n\t\tconst fullPrefixText = this.#getFullPrefixText(this.#prefixText, '-');\n\t\tconst fullSuffixText = this.#getFullSuffixText(this.#suffixText, '-');\n\t\tconst fullText = ' '.repeat(this.#indent) + fullPrefixText + '--' + this.#text + '--' + fullSuffixText;\n\n\t\tthis.#lineCount = 0;\n\t\tfor (const line of stripAnsi(fullText).split('\\n')) {\n\t\t\tthis.#lineCount += Math.max(1, Math.ceil(stringWidth(line, {countAnsiEscapeCodes: true}) / columns));\n\t\t}\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#isEnabled && !this.#isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#isSilent = value;\n\t}\n\n\tframe() {\n\t\t// Ensure we only update the spinner frame at the wanted interval,\n\t\t// even if the render method is called more often.\n\t\tconst now = Date.now();\n\t\tif (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {\n\t\t\tthis.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;\n\t\t\tthis.#lastSpinnerFrameTime = now;\n\t\t}\n\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tconst fullPrefixText = (typeof this.#prefixText === 'string' && this.#prefixText !== '') ? this.#prefixText + ' ' : '';\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\t\tconst fullSuffixText = (typeof this.#suffixText === 'string' && this.#suffixText !== '') ? ' ' + this.#suffixText : '';\n\n\t\treturn fullPrefixText + frame + fullText + fullSuffixText;\n\t}\n\n\tclear() {\n\t\tif (!this.#isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.#stream.cursorTo(0);\n\n\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t}\n\n\t\t\tthis.#stream.clearLine(1);\n\t\t}\n\n\t\tif (this.#indent || this.lastIndent !== this.#indent) {\n\t\t\tthis.#stream.cursorTo(this.#indent);\n\t\t}\n\n\t\tthis.lastIndent = this.#indent;\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\trender() {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.clear();\n\t\tthis.#stream.write(this.frame());\n\t\tthis.#linesToClear = this.#lineCount;\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.#isEnabled) {\n\t\t\tif (this.text) {\n\t\t\t\tthis.#stream.write(`- ${this.text}\\n`);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t\tstdinDiscarder.start();\n\t\t}\n\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tif (!this.#isEnabled) {\n\t\t\treturn this;\n\t\t}\n\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = 0;\n\t\tthis.clear();\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.show(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY && this.#isDiscardingStdin) {\n\t\t\tstdinDiscarder.stop();\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst prefixText = options.prefixText ?? this.#prefixText;\n\t\tconst fullPrefixText = this.#getFullPrefixText(prefixText, ' ');\n\n\t\tconst symbolText = options.symbol ?? ' ';\n\n\t\tconst text = options.text ?? this.text;\n\t\tconst separatorText = symbolText ? ' ' : '';\n\t\tconst fullText = (typeof text === 'string') ? separatorText + text : '';\n\n\t\tconst suffixText = options.suffixText ?? this.#suffixText;\n\t\tconst fullSuffixText = this.#getFullSuffixText(suffixText, ' ');\n\n\t\tconst textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + '\\n';\n\n\t\tthis.stop();\n\t\tthis.#stream.write(textToWrite);\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(\n\t\t\tsuccessText === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (typeof successText === 'string' ? successText : successText(result)),\n\t\t);\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(\n\t\t\tfailText === undefined\n\t\t\t\t? undefined\n\t\t\t\t: (typeof failText === 'string' ? failText : failText(error)),\n\t\t);\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n",
10
- "import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n",
11
- "import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n",
12
- "const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n",
13
- "import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n",
14
- "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n",
15
- "import chalk from 'chalk';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst main = {\n\tinfo: chalk.blue('ℹ'),\n\tsuccess: chalk.green('✔'),\n\twarning: chalk.yellow('⚠'),\n\terror: chalk.red('✖'),\n};\n\nconst fallback = {\n\tinfo: chalk.blue('i'),\n\tsuccess: chalk.green('√'),\n\twarning: chalk.yellow('‼'),\n\terror: chalk.red('×'),\n};\n\nconst logSymbols = isUnicodeSupported() ? main : fallback;\n\nexport default logSymbols;\n",
16
- "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n",
17
- "export default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n",
18
- "import process from 'node:process';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code\n\nclass StdinDiscarder {\n\t#activeCount = 0;\n\n\tstart() {\n\t\tthis.#activeCount++;\n\n\t\tif (this.#activeCount === 1) {\n\t\t\tthis.#realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#activeCount <= 0) {\n\t\t\tthrow new Error('`stop` called more times than `start`');\n\t\t}\n\n\t\tthis.#activeCount--;\n\n\t\tif (this.#activeCount === 0) {\n\t\t\tthis.#realStop();\n\t\t}\n\t}\n\n\t#realStart() {\n\t\t// No known way to make it work reliably on Windows.\n\t\tif (process.platform === 'win32' || !process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.setRawMode(true);\n\t\tprocess.stdin.on('data', this.#handleInput);\n\t\tprocess.stdin.resume();\n\t}\n\n\t#realStop() {\n\t\tif (!process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.off('data', this.#handleInput);\n\t\tprocess.stdin.pause();\n\t\tprocess.stdin.setRawMode(false);\n\t}\n\n\t#handleInput(chunk) {\n\t\t// Allow Ctrl+C to gracefully exit.\n\t\tif (chunk[0] === ASCII_ETX_CODE) {\n\t\t\tprocess.emit('SIGINT');\n\t\t}\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default stdinDiscarder;\n",
19
- "import ora, { type Ora } from 'ora';\nimport { theme, icons } from './theme.js';\n\n/**\n * Wrapper for ora spinner with consistent styling\n */\nexport class Spinner {\n private spinner: Ora | null = null;\n\n start(message: string): void {\n this.spinner = ora({\n text: message,\n color: 'blue',\n spinner: 'dots',\n }).start();\n }\n\n succeed(message: string): void {\n if (this.spinner) {\n this.spinner.succeed(message);\n this.spinner = null;\n }\n }\n\n fail(message: string): void {\n if (this.spinner) {\n this.spinner.fail(message);\n this.spinner = null;\n }\n }\n\n stop(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n}\n\nexport function createSpinner(): Spinner {\n return new Spinner();\n}\n"
20
- ],
21
- "mappings": "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",
22
- "debugId": "97879FD05296F9BA64756E2164756E21",
23
- "names": []
24
- }
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/view/handler.ts"],
4
- "sourcesContent": [
5
- "import { type ViewSpec, type ViewInput, type ViewResult } from './spec.js';\nimport { StitchMCPClient } from '../mcp-client/client.js';\n\nexport class ViewHandler implements ViewSpec {\n constructor(private client: StitchMCPClient = new StitchMCPClient()) {}\n\n async execute(input: ViewInput): Promise<ViewResult> {\n try {\n let data: any;\n\n if (input.projects) {\n data = await this.client.callTool('list_projects', {});\n } else if (input.name) {\n // Parse the resource name to determine the correct tool call\n // Format: \"projects/{id}\" or \"projects/{id}/screens/{screenId}\"\n const projectMatch = input.name.match(/^projects\\/([^/]+)$/);\n const screenMatch = input.name.match(/^projects\\/([^/]+)\\/screens\\/([^/]+)$/);\n\n if (screenMatch) {\n data = await this.client.callTool('get_screen', {\n projectId: screenMatch[1],\n screenId: screenMatch[2]\n });\n } else if (projectMatch) {\n data = await this.client.callTool('get_project', {\n name: `projects/${projectMatch[1]}`\n });\n } else {\n throw new Error(`Invalid resource name format: ${input.name}`);\n }\n } else if (input.sourceScreen) {\n const screenMatch = input.sourceScreen.match(/^projects\\/([^/]+)\\/screens\\/([^/]+)$/);\n if (screenMatch) {\n data = await this.client.callTool('get_screen', {\n projectId: screenMatch[1],\n screenId: screenMatch[2]\n });\n } else {\n throw new Error(`Invalid sourceScreen format: ${input.sourceScreen}`);\n }\n } else if (input.project && input.screen) {\n data = await this.client.callTool('get_screen', {\n projectId: input.project,\n screenId: input.screen\n });\n } else if (input.project) {\n data = await this.client.callTool('get_project', {\n name: `projects/${input.project}`\n });\n } else {\n return {\n success: false,\n error: {\n code: 'INVALID_ARGS',\n message: 'No valid view arguments provided. Use --projects, --name, --sourceScreen, or --project.',\n recoverable: false,\n },\n };\n }\n\n // Pre-process data for better viewing experience\n // If it's an MCP ReadResource result, it has a 'contents' array.\n // We try to parse 'text' fields as JSON.\n if (data && data.contents && Array.isArray(data.contents)) {\n const contents = data.contents;\n const chunkSize = 1000;\n const results = [];\n\n for (let i = 0; i < contents.length; i += chunkSize) {\n const chunk = contents.slice(i, i + chunkSize).map((c: any) => {\n if (c.text) {\n try {\n // Try to parse the text as JSON\n const parsed = JSON.parse(c.text);\n // If successful, replace text with the parsed object for the viewer\n // or add it as a new field. Replacing makes the tree view immediate.\n return { ...c, text: undefined, data: parsed };\n } catch {\n // Not JSON, keep as is\n return c;\n }\n }\n return c;\n });\n results.push(...chunk);\n\n // Yield to the event loop between chunks\n if (i + chunkSize < contents.length) {\n await new Promise(resolve => setImmediate(resolve));\n }\n }\n data.contents = results;\n }\n\n return {\n success: true,\n data: data,\n };\n\n } catch (error) {\n return {\n success: false,\n error: {\n code: 'FETCH_FAILED',\n message: error instanceof Error ? error.message : String(error),\n recoverable: false,\n },\n };\n } finally {\n // Ensure we close the client connection\n try {\n await this.client.close();\n } catch {}\n }\n }\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "ADD02BD9097AB7EC64756E2164756E21",
9
- "names": []
10
- }
@@ -1,47 +0,0 @@
1
- import"./chunk-9wyra8hs.js";
2
-
3
- // src/commands/serve/handler.ts
4
- class ServeHandler {
5
- client;
6
- constructor(client) {
7
- this.client = client;
8
- }
9
- async execute(projectId) {
10
- try {
11
- const project = await this.client.callTool("get_project", {
12
- name: `projects/${projectId}`
13
- });
14
- const screensResult = await this.client.callTool("list_screens", {
15
- projectId
16
- });
17
- const screens = (screensResult.screens || []).filter((screen) => !!screen.htmlCode?.downloadUrl).map((screen) => {
18
- const screenId = screen.name?.split("/screens/")[1] || screen.name;
19
- return {
20
- screenId,
21
- title: screen.title || screenId,
22
- codeUrl: screen.htmlCode.downloadUrl
23
- };
24
- });
25
- screens.sort((a, b) => a.title.localeCompare(b.title));
26
- return {
27
- success: true,
28
- projectId,
29
- projectTitle: project.title || projectId,
30
- screens
31
- };
32
- } catch (error) {
33
- return {
34
- success: false,
35
- error: error.message || String(error)
36
- };
37
- }
38
- }
39
- getClient() {
40
- return this.client;
41
- }
42
- }
43
- export {
44
- ServeHandler
45
- };
46
-
47
- //# debugId=E467E501360A240864756E2164756E21