@_davideast/stitch-mcp 0.5.5 → 0.7.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 (168) hide show
  1. package/dist/chunk-0xbbvsve.js +370 -0
  2. package/dist/chunk-0xbbvsve.js.map +16 -0
  3. package/dist/chunk-11ab03kg.js +137 -0
  4. package/dist/chunk-11ab03kg.js.map +10 -0
  5. package/dist/chunk-17cs61t4.js +270 -0
  6. package/dist/chunk-17cs61t4.js.map +10 -0
  7. package/dist/chunk-1mz7188j.js +20 -0
  8. package/dist/chunk-1mz7188j.js.map +9 -0
  9. package/dist/chunk-1txb8kjb.js +17 -0
  10. package/dist/chunk-1txb8kjb.js.map +9 -0
  11. package/dist/chunk-1v5q6d3n.js +17 -0
  12. package/dist/chunk-1v5q6d3n.js.map +9 -0
  13. package/dist/chunk-1wcg0pjg.js +94 -0
  14. package/dist/chunk-1wcg0pjg.js.map +10 -0
  15. package/dist/chunk-2zp03jky.js +19 -0
  16. package/dist/chunk-2zp03jky.js.map +9 -0
  17. package/dist/chunk-441ntz7a.js +137 -0
  18. package/dist/chunk-441ntz7a.js.map +10 -0
  19. package/dist/chunk-543135qd.js +43679 -0
  20. package/dist/chunk-543135qd.js.map +234 -0
  21. package/dist/chunk-564wpgj7.js +246 -0
  22. package/dist/chunk-564wpgj7.js.map +14 -0
  23. package/dist/chunk-5jbenaez.js +19185 -0
  24. package/dist/chunk-5jbenaez.js.map +115 -0
  25. package/dist/chunk-633ma50k.js +371 -0
  26. package/dist/chunk-633ma50k.js.map +16 -0
  27. package/dist/chunk-7ryqstaa.js +7065 -0
  28. package/dist/chunk-7ryqstaa.js.map +115 -0
  29. package/dist/chunk-7z5z40ar.js +165 -0
  30. package/dist/chunk-7z5z40ar.js.map +10 -0
  31. package/dist/chunk-86gwwcyr.js +46325 -0
  32. package/dist/chunk-86gwwcyr.js.map +261 -0
  33. package/dist/chunk-8gegrmmt.js +256 -0
  34. package/dist/chunk-8gegrmmt.js.map +11 -0
  35. package/dist/chunk-8hgrrc49.js +17 -0
  36. package/dist/chunk-8hgrrc49.js.map +9 -0
  37. package/dist/chunk-8w97w2wa.js +50 -0
  38. package/dist/chunk-8w97w2wa.js.map +9 -0
  39. package/dist/chunk-8yfetpqq.js +19132 -0
  40. package/dist/chunk-8yfetpqq.js.map +115 -0
  41. package/dist/chunk-94knm2sw.js +1495 -0
  42. package/dist/chunk-94knm2sw.js.map +23 -0
  43. package/dist/chunk-9ckyz47q.js +518 -0
  44. package/dist/chunk-9ckyz47q.js.map +12 -0
  45. package/dist/chunk-appd0sxm.js +5217 -0
  46. package/dist/chunk-appd0sxm.js.map +67 -0
  47. package/dist/chunk-b9atzag0.js +67 -0
  48. package/dist/chunk-b9atzag0.js.map +10 -0
  49. package/dist/chunk-c08qy4ty.js +67 -0
  50. package/dist/chunk-c08qy4ty.js.map +10 -0
  51. package/dist/chunk-c5dtqvff.js +11 -0
  52. package/dist/chunk-c5dtqvff.js.map +9 -0
  53. package/dist/chunk-d1ea3tmp.js +17 -0
  54. package/dist/chunk-d1ea3tmp.js.map +9 -0
  55. package/dist/chunk-ecn1ca83.js +34253 -0
  56. package/dist/chunk-ecn1ca83.js.map +261 -0
  57. package/dist/chunk-ef1c6gq5.js +947 -0
  58. package/dist/chunk-ef1c6gq5.js.map +28 -0
  59. package/dist/chunk-ef355a3f.js +20 -0
  60. package/dist/chunk-ef355a3f.js.map +9 -0
  61. package/dist/chunk-f0dt9hv8.js +680 -0
  62. package/dist/chunk-f0dt9hv8.js.map +17 -0
  63. package/dist/chunk-f2aj8ff8.js +11 -0
  64. package/dist/chunk-f2aj8ff8.js.map +9 -0
  65. package/dist/chunk-f3wp07zw.js +24 -0
  66. package/dist/chunk-f3wp07zw.js.map +9 -0
  67. package/dist/chunk-f5wqd3z3.js +10 -0
  68. package/dist/chunk-f5wqd3z3.js.map +9 -0
  69. package/dist/chunk-g8hwy0wx.js +504 -0
  70. package/dist/chunk-g8hwy0wx.js.map +21 -0
  71. package/dist/chunk-gcx3c3yc.js +680 -0
  72. package/dist/chunk-gcx3c3yc.js.map +17 -0
  73. package/dist/chunk-gq6vxp70.js +202 -0
  74. package/dist/chunk-gq6vxp70.js.map +13 -0
  75. package/dist/chunk-gw64p5pg.js +164 -0
  76. package/dist/chunk-gw64p5pg.js.map +10 -0
  77. package/dist/chunk-hgv5frj1.js +256 -0
  78. package/dist/chunk-hgv5frj1.js.map +11 -0
  79. package/dist/chunk-hst78da7.js +87 -0
  80. package/dist/chunk-hst78da7.js.map +13 -0
  81. package/dist/chunk-hsxpgjyd.js +256 -0
  82. package/dist/chunk-hsxpgjyd.js.map +11 -0
  83. package/dist/chunk-j1v44zzm.js +109 -0
  84. package/dist/chunk-j1v44zzm.js.map +10 -0
  85. package/dist/chunk-jfd5md63.js +736 -0
  86. package/dist/chunk-jfd5md63.js.map +16 -0
  87. package/dist/chunk-jn5pcnz9.js +270 -0
  88. package/dist/chunk-jn5pcnz9.js.map +10 -0
  89. package/dist/chunk-jvhzgyhy.js +62 -0
  90. package/dist/chunk-jvhzgyhy.js.map +10 -0
  91. package/dist/chunk-k86st2r8.js +7 -0
  92. package/dist/chunk-k86st2r8.js.map +9 -0
  93. package/dist/chunk-kztccppz.js +606 -0
  94. package/dist/chunk-kztccppz.js.map +15 -0
  95. package/dist/chunk-m2vk15q9.js +503 -0
  96. package/dist/chunk-m2vk15q9.js.map +21 -0
  97. package/dist/chunk-mk40f3ka.js +31529 -0
  98. package/dist/chunk-mk40f3ka.js.map +245 -0
  99. package/dist/chunk-mp1sf8x6.js +264 -0
  100. package/dist/chunk-mp1sf8x6.js.map +12 -0
  101. package/dist/chunk-mzyqavzd.js +736 -0
  102. package/dist/chunk-mzyqavzd.js.map +16 -0
  103. package/dist/chunk-n9fs543g.js +94 -0
  104. package/dist/chunk-n9fs543g.js.map +10 -0
  105. package/dist/chunk-nbbwjw90.js +165 -0
  106. package/dist/chunk-nbbwjw90.js.map +10 -0
  107. package/dist/chunk-nh14pn95.js +137 -0
  108. package/dist/chunk-nh14pn95.js.map +10 -0
  109. package/dist/chunk-qnd877d5.js +947 -0
  110. package/dist/chunk-qnd877d5.js.map +28 -0
  111. package/dist/chunk-rng2ypf7.js +538 -0
  112. package/dist/chunk-rng2ypf7.js.map +15 -0
  113. package/dist/chunk-sjq10wbw.js +39 -0
  114. package/dist/chunk-sjq10wbw.js.map +9 -0
  115. package/dist/chunk-snv6a65k.js +759 -0
  116. package/dist/chunk-snv6a65k.js.map +19 -0
  117. package/dist/chunk-sqhdg0mf.js +2138 -0
  118. package/dist/chunk-sqhdg0mf.js.map +44 -0
  119. package/dist/chunk-tebher8z.js +514 -0
  120. package/dist/chunk-tebher8z.js.map +12 -0
  121. package/dist/chunk-v0wtyr4k.js +66 -0
  122. package/dist/chunk-v0wtyr4k.js.map +10 -0
  123. package/dist/chunk-v20274k8.js +246 -0
  124. package/dist/chunk-v20274k8.js.map +14 -0
  125. package/dist/chunk-vcp9fp2w.js +839 -0
  126. package/dist/chunk-vcp9fp2w.js.map +11 -0
  127. package/dist/chunk-vz737k5f.js +269 -0
  128. package/dist/chunk-vz737k5f.js.map +10 -0
  129. package/dist/chunk-x6bsgeqa.js +736 -0
  130. package/dist/chunk-x6bsgeqa.js.map +16 -0
  131. package/dist/chunk-xg9kcbp1.js +371 -0
  132. package/dist/chunk-xg9kcbp1.js.map +16 -0
  133. package/dist/chunk-xhad5b8x.js +110 -0
  134. package/dist/chunk-xhad5b8x.js.map +10 -0
  135. package/dist/chunk-xkwa1mn5.js +203 -0
  136. package/dist/chunk-xkwa1mn5.js.map +13 -0
  137. package/dist/chunk-xtcg74kf.js +50 -0
  138. package/dist/chunk-xtcg74kf.js.map +9 -0
  139. package/dist/chunk-xzjkaqe9.js +759 -0
  140. package/dist/chunk-xzjkaqe9.js.map +19 -0
  141. package/dist/chunk-y65xgj69.js +1495 -0
  142. package/dist/chunk-y65xgj69.js.map +23 -0
  143. package/dist/commands/doctor/command.js +1 -1
  144. package/dist/commands/init/command.js +1 -1
  145. package/dist/commands/logout/command.js +1 -1
  146. package/dist/commands/proxy/LoggingCallToolHandler.d.ts +11 -0
  147. package/dist/commands/proxy/command.js +1 -1
  148. package/dist/commands/screens/command.js +4 -4
  149. package/dist/commands/serve/command.js +5 -5
  150. package/dist/commands/site/command.js +1 -1
  151. package/dist/commands/snapshot/command.js +1 -1
  152. package/dist/commands/tool/command.js +1 -1
  153. package/dist/commands/tool/steps/LogExecuteToolStep.d.ts +19 -0
  154. package/dist/commands/upload/command.d.ts +2 -0
  155. package/dist/commands/upload/command.js +77 -0
  156. package/dist/commands/upload/command.js.map +11 -0
  157. package/dist/commands/upload/handler.d.ts +20 -0
  158. package/dist/commands/upload/spec.d.ts +38 -0
  159. package/dist/commands/view/command.js +1 -1
  160. package/dist/index.js +9 -9
  161. package/dist/index.js.map +1 -1
  162. package/dist/lib/log/append.d.ts +12 -0
  163. package/dist/lib/log/blob-store/handler.d.ts +10 -0
  164. package/dist/lib/log/blob-store/spec.d.ts +251 -0
  165. package/dist/lib/log/capture/handler.d.ts +10 -0
  166. package/dist/lib/log/capture/spec.d.ts +1504 -0
  167. package/dist/lib/log/factory.d.ts +4 -0
  168. package/package.json +2 -2
@@ -0,0 +1,246 @@
1
+ import {
2
+ ConsoleUI,
3
+ GcloudHandler,
4
+ execCommand,
5
+ getGcloudConfigPath
6
+ } from "./chunk-appd0sxm.js";
7
+ import {
8
+ runSteps
9
+ } from "./chunk-f2hq6bfv.js";
10
+ import {
11
+ icons,
12
+ theme
13
+ } from "./chunk-kbtqrkwh.js";
14
+ import"./chunk-3sfn889r.js";
15
+ import"./chunk-c6ge431q.js";
16
+ import"./chunk-9wyra8hs.js";
17
+
18
+ // src/commands/logout/steps/PrepareStep.ts
19
+ class PrepareStep {
20
+ id = "prepare";
21
+ name = "Preparation";
22
+ async shouldRun(context) {
23
+ return true;
24
+ }
25
+ async run(context) {
26
+ const result = await context.gcloudService.ensureInstalled({
27
+ minVersion: "400.0.0",
28
+ forceLocal: false
29
+ });
30
+ if (!result.success) {
31
+ return {
32
+ success: false,
33
+ error: new Error("Google Cloud CLI not found"),
34
+ errorCode: "GCLOUD_NOT_FOUND",
35
+ shouldExit: true
36
+ };
37
+ }
38
+ context.gcloudPath = result.data.path;
39
+ if (!context.input.force) {
40
+ const shouldLogout = await context.ui.promptConfirm("Are you sure you want to log out? This will revoke all credentials.", false);
41
+ if (!shouldLogout) {
42
+ context.ui.log(`
43
+ Logout cancelled.
44
+ `);
45
+ return { success: true, shouldExit: true, detail: "Cancelled" };
46
+ }
47
+ }
48
+ return { success: true };
49
+ }
50
+ }
51
+
52
+ // src/commands/logout/steps/RevokeUserStep.ts
53
+ class RevokeUserStep {
54
+ id = "revoke-user";
55
+ name = "Revoke user authentication";
56
+ async shouldRun(context) {
57
+ if (!context.gcloudPath) {
58
+ const result = await context.gcloudService.ensureInstalled({ minVersion: "400.0.0", forceLocal: false });
59
+ if (result.success)
60
+ context.gcloudPath = result.data.path;
61
+ else
62
+ return false;
63
+ }
64
+ return true;
65
+ }
66
+ async run(context) {
67
+ const activeAccount = await context.gcloudService.getActiveAccount();
68
+ if (activeAccount) {
69
+ context.ui.log(theme.gray("Revoking user authentication..."));
70
+ const userResult = await execCommand([context.gcloudPath, "auth", "revoke", "--all"], { env: this.getEnvironment() });
71
+ if (userResult.success || userResult.stderr?.includes("No credentialed accounts")) {
72
+ context.ui.log(theme.green(`${icons.success} User authentication revoked`));
73
+ context.userRevoked = true;
74
+ } else {
75
+ context.ui.log(theme.yellow(`${icons.warning} Failed to revoke user authentication`));
76
+ }
77
+ } else {
78
+ context.ui.log(theme.gray("No active user authentication found"));
79
+ context.userRevoked = true;
80
+ }
81
+ return { success: true };
82
+ }
83
+ getEnvironment() {
84
+ const configPath = getGcloudConfigPath();
85
+ const env = { ...process.env };
86
+ env.CLOUDSDK_CONFIG = configPath;
87
+ env.CLOUDSDK_CORE_DISABLE_PROMPTS = "1";
88
+ return env;
89
+ }
90
+ }
91
+
92
+ // src/commands/logout/steps/RevokeAdcStep.ts
93
+ class RevokeAdcStep {
94
+ id = "revoke-adc";
95
+ name = "Revoke Application Default Credentials";
96
+ async shouldRun(context) {
97
+ if (!context.gcloudPath) {
98
+ const result = await context.gcloudService.ensureInstalled({ minVersion: "400.0.0", forceLocal: false });
99
+ if (result.success)
100
+ context.gcloudPath = result.data.path;
101
+ else
102
+ return false;
103
+ }
104
+ return true;
105
+ }
106
+ async run(context) {
107
+ const hasADC = await context.gcloudService.hasADC();
108
+ if (hasADC) {
109
+ context.ui.log(theme.gray("Revoking Application Default Credentials..."));
110
+ const adcResult = await execCommand([context.gcloudPath, "auth", "application-default", "revoke"], { env: this.getEnvironment() });
111
+ if (adcResult.success || adcResult.stderr?.includes("No credentials")) {
112
+ context.ui.log(theme.green(`${icons.success} Application Default Credentials revoked`));
113
+ context.adcRevoked = true;
114
+ } else {
115
+ context.ui.log(theme.yellow(`${icons.warning} Failed to revoke Application Default Credentials`));
116
+ }
117
+ } else {
118
+ context.ui.log(theme.gray("No Application Default Credentials found"));
119
+ context.adcRevoked = true;
120
+ }
121
+ return { success: true };
122
+ }
123
+ getEnvironment() {
124
+ const configPath = getGcloudConfigPath();
125
+ const env = { ...process.env };
126
+ env.CLOUDSDK_CONFIG = configPath;
127
+ env.CLOUDSDK_CORE_DISABLE_PROMPTS = "1";
128
+ return env;
129
+ }
130
+ }
131
+
132
+ // src/commands/logout/steps/ClearConfigStep.ts
133
+ import fs from "node:fs";
134
+
135
+ class ClearConfigStep {
136
+ id = "clear-config";
137
+ name = "Clear configuration directory";
138
+ async shouldRun(context) {
139
+ return context.input.clearConfig;
140
+ }
141
+ async run(context) {
142
+ context.ui.log(theme.gray("Clearing gcloud configuration directory..."));
143
+ const configPath = getGcloudConfigPath();
144
+ try {
145
+ if (fs.existsSync(configPath)) {
146
+ fs.rmSync(configPath, { recursive: true, force: true });
147
+ context.ui.log(theme.green(`${icons.success} Configuration directory cleared`));
148
+ context.configCleared = true;
149
+ } else {
150
+ context.ui.log(theme.gray("Configuration directory does not exist"));
151
+ context.configCleared = true;
152
+ }
153
+ } catch (error) {
154
+ context.ui.log(theme.yellow(`${icons.warning} Failed to clear configuration directory`));
155
+ context.ui.log(theme.gray(` ${error instanceof Error ? error.message : String(error)}`));
156
+ }
157
+ return { success: true };
158
+ }
159
+ }
160
+
161
+ // src/commands/logout/handler.ts
162
+ class LogoutHandler {
163
+ gcloudService;
164
+ steps;
165
+ constructor(gcloudService = new GcloudHandler) {
166
+ this.gcloudService = gcloudService;
167
+ this.steps = [
168
+ new PrepareStep,
169
+ new RevokeUserStep,
170
+ new RevokeAdcStep,
171
+ new ClearConfigStep
172
+ ];
173
+ }
174
+ async execute(input) {
175
+ const context = {
176
+ input,
177
+ ui: new ConsoleUI,
178
+ gcloudService: this.gcloudService,
179
+ userRevoked: false,
180
+ adcRevoked: false,
181
+ configCleared: false
182
+ };
183
+ console.log(`
184
+ ${theme.blue("Logout from Google Cloud")}
185
+ `);
186
+ try {
187
+ const { stoppedAt } = await runSteps(this.steps, context, {
188
+ onAfterStep: (_step, result) => {
189
+ if (!result.success && result.errorCode === "GCLOUD_NOT_FOUND")
190
+ return true;
191
+ if (result.shouldExit)
192
+ return true;
193
+ return false;
194
+ }
195
+ });
196
+ if (stoppedAt) {
197
+ if (stoppedAt.result.errorCode === "GCLOUD_NOT_FOUND") {
198
+ return {
199
+ success: false,
200
+ error: {
201
+ code: "GCLOUD_NOT_FOUND",
202
+ message: stoppedAt.result.error?.message || "Gcloud not found",
203
+ recoverable: true
204
+ }
205
+ };
206
+ }
207
+ return {
208
+ success: true,
209
+ data: {
210
+ userRevoked: context.userRevoked,
211
+ adcRevoked: context.adcRevoked,
212
+ configCleared: context.configCleared
213
+ }
214
+ };
215
+ }
216
+ console.log(`
217
+ ${theme.green("Successfully logged out!")}
218
+ `);
219
+ console.log(theme.gray("To log back in, run:"));
220
+ console.log(theme.cyan(` stitch-mcp init
221
+ `));
222
+ return {
223
+ success: true,
224
+ data: {
225
+ userRevoked: context.userRevoked,
226
+ adcRevoked: context.adcRevoked,
227
+ configCleared: context.configCleared
228
+ }
229
+ };
230
+ } catch (error) {
231
+ return {
232
+ success: false,
233
+ error: {
234
+ code: "UNKNOWN_ERROR",
235
+ message: error instanceof Error ? error.message : String(error),
236
+ recoverable: false
237
+ }
238
+ };
239
+ }
240
+ }
241
+ }
242
+ export {
243
+ LogoutHandler
244
+ };
245
+
246
+ //# debugId=32B390669514CAC064756E2164756E21
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/logout/steps/PrepareStep.ts", "../src/commands/logout/steps/RevokeUserStep.ts", "../src/commands/logout/steps/RevokeAdcStep.ts", "../src/commands/logout/steps/ClearConfigStep.ts", "../src/commands/logout/handler.ts"],
4
+ "sourcesContent": [
5
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\n\nexport class PrepareStep implements CommandStep<LogoutContext> {\n id = 'prepare';\n name = 'Preparation';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n // Check for gcloud availability\n const result = await context.gcloudService.ensureInstalled({\n minVersion: '400.0.0',\n forceLocal: false,\n });\n\n if (!result.success) {\n return {\n success: false,\n error: new Error('Google Cloud CLI not found'),\n errorCode: 'GCLOUD_NOT_FOUND',\n shouldExit: true\n };\n }\n context.gcloudPath = result.data.path;\n\n if (!context.input.force) {\n const shouldLogout = await context.ui.promptConfirm(\n 'Are you sure you want to log out? This will revoke all credentials.',\n false\n );\n\n if (!shouldLogout) {\n context.ui.log('\\nLogout cancelled.\\n');\n return { success: true, shouldExit: true, detail: 'Cancelled' };\n }\n }\n\n return { success: true };\n }\n}\n",
6
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { execCommand } from '../../../platform/shell.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\n\nexport class RevokeUserStep implements CommandStep<LogoutContext> {\n id = 'revoke-user';\n name = 'Revoke user authentication';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n // If force is true, we might not have set gcloudPath yet in ConfirmStep\n if (!context.gcloudPath) {\n const result = await context.gcloudService.ensureInstalled({ minVersion: '400.0.0', forceLocal: false });\n if (result.success) context.gcloudPath = result.data.path;\n else return false;\n }\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n const activeAccount = await context.gcloudService.getActiveAccount();\n\n if (activeAccount) {\n context.ui.log(theme.gray('Revoking user authentication...'));\n const userResult = await execCommand(\n [context.gcloudPath!, 'auth', 'revoke', '--all'],\n { env: this.getEnvironment() }\n );\n\n if (userResult.success || userResult.stderr?.includes('No credentialed accounts')) {\n context.ui.log(theme.green(`${icons.success} User authentication revoked`));\n context.userRevoked = true;\n } else {\n context.ui.log(theme.yellow(`${icons.warning} Failed to revoke user authentication`));\n }\n } else {\n context.ui.log(theme.gray('No active user authentication found'));\n context.userRevoked = true;\n }\n\n return { success: true };\n }\n\n private getEnvironment(): Record<string, string> {\n const configPath = getGcloudConfigPath();\n const env: Record<string, string> = { ...process.env as Record<string, string> };\n env.CLOUDSDK_CONFIG = configPath;\n env.CLOUDSDK_CORE_DISABLE_PROMPTS = '1';\n return env;\n }\n}\n",
7
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { execCommand } from '../../../platform/shell.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\n\nexport class RevokeAdcStep implements CommandStep<LogoutContext> {\n id = 'revoke-adc';\n name = 'Revoke Application Default Credentials';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n if (!context.gcloudPath) {\n const result = await context.gcloudService.ensureInstalled({ minVersion: '400.0.0', forceLocal: false });\n if (result.success) context.gcloudPath = result.data.path;\n else return false;\n }\n return true;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n const hasADC = await context.gcloudService.hasADC();\n if (hasADC) {\n context.ui.log(theme.gray('Revoking Application Default Credentials...'));\n const adcResult = await execCommand(\n [context.gcloudPath!, 'auth', 'application-default', 'revoke'],\n { env: this.getEnvironment() }\n );\n\n if (adcResult.success || adcResult.stderr?.includes('No credentials')) {\n context.ui.log(theme.green(`${icons.success} Application Default Credentials revoked`));\n context.adcRevoked = true;\n } else {\n context.ui.log(theme.yellow(`${icons.warning} Failed to revoke Application Default Credentials`));\n }\n } else {\n context.ui.log(theme.gray('No Application Default Credentials found'));\n context.adcRevoked = true;\n }\n return { success: true };\n }\n\n private getEnvironment(): Record<string, string> {\n const configPath = getGcloudConfigPath();\n const env: Record<string, string> = { ...process.env as Record<string, string> };\n env.CLOUDSDK_CONFIG = configPath;\n env.CLOUDSDK_CORE_DISABLE_PROMPTS = '1';\n return env;\n }\n}\n",
8
+ "import { type CommandStep, type StepResult } from '../../../framework/CommandStep.js';\nimport { type LogoutContext } from '../context.js';\nimport { theme, icons } from '../../../ui/theme.js';\nimport { getGcloudConfigPath } from '../../../platform/detector.js';\nimport fs from 'node:fs';\n\nexport class ClearConfigStep implements CommandStep<LogoutContext> {\n id = 'clear-config';\n name = 'Clear configuration directory';\n\n async shouldRun(context: LogoutContext): Promise<boolean> {\n return context.input.clearConfig;\n }\n\n async run(context: LogoutContext): Promise<StepResult> {\n context.ui.log(theme.gray('Clearing gcloud configuration directory...'));\n const configPath = getGcloudConfigPath();\n\n try {\n if (fs.existsSync(configPath)) {\n fs.rmSync(configPath, { recursive: true, force: true });\n context.ui.log(theme.green(`${icons.success} Configuration directory cleared`));\n context.configCleared = true;\n } else {\n context.ui.log(theme.gray('Configuration directory does not exist'));\n context.configCleared = true;\n }\n } catch (error) {\n context.ui.log(theme.yellow(`${icons.warning} Failed to clear configuration directory`));\n context.ui.log(theme.gray(` ${error instanceof Error ? error.message : String(error)}`));\n }\n return { success: true };\n }\n}\n",
9
+ "import { type LogoutCommand, type LogoutInput, type LogoutResult } from './spec.js';\nimport { GcloudHandler } from '../../services/gcloud/handler.js';\nimport { type GcloudService } from '../../services/gcloud/spec.js';\nimport { theme } from '../../ui/theme.js';\nimport { ConsoleUI } from '../../framework/ConsoleUI.js';\nimport { type LogoutContext } from './context.js';\nimport { type CommandStep } from '../../framework/CommandStep.js';\nimport { runSteps } from '../../framework/StepRunner.js';\n\nimport { PrepareStep } from './steps/PrepareStep.js';\nimport { RevokeUserStep } from './steps/RevokeUserStep.js';\nimport { RevokeAdcStep } from './steps/RevokeAdcStep.js';\nimport { ClearConfigStep } from './steps/ClearConfigStep.js';\n\nexport class LogoutHandler implements LogoutCommand {\n private steps: CommandStep<LogoutContext>[];\n\n constructor(private readonly gcloudService: GcloudService = new GcloudHandler()) {\n this.steps = [\n new PrepareStep(),\n new RevokeUserStep(),\n new RevokeAdcStep(),\n new ClearConfigStep(),\n ];\n }\n\n async execute(input: LogoutInput): Promise<LogoutResult> {\n const context: LogoutContext = {\n input,\n ui: new ConsoleUI(),\n gcloudService: this.gcloudService,\n userRevoked: false,\n adcRevoked: false,\n configCleared: false,\n };\n\n console.log(`\\n${theme.blue('Logout from Google Cloud')}\\n`);\n\n try {\n const { stoppedAt } = await runSteps(this.steps, context, {\n onAfterStep: (_step, result) => {\n if (!result.success && result.errorCode === 'GCLOUD_NOT_FOUND') return true;\n if (result.shouldExit) return true;\n return false;\n },\n });\n\n if (stoppedAt) {\n if (stoppedAt.result.errorCode === 'GCLOUD_NOT_FOUND') {\n return {\n success: false,\n error: {\n code: 'GCLOUD_NOT_FOUND',\n message: stoppedAt.result.error?.message || 'Gcloud not found',\n recoverable: true,\n },\n };\n }\n // shouldExit case — successful early exit\n return {\n success: true,\n data: {\n userRevoked: context.userRevoked,\n adcRevoked: context.adcRevoked,\n configCleared: context.configCleared,\n },\n };\n }\n\n console.log(`\\n${theme.green('Successfully logged out!')}\\n`);\n console.log(theme.gray('To log back in, run:'));\n console.log(theme.cyan(' stitch-mcp init\\n'));\n\n return {\n success: true,\n data: {\n userRevoked: context.userRevoked,\n adcRevoked: context.adcRevoked,\n configCleared: context.configCleared,\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"
10
+ ],
11
+ "mappings": "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",
12
+ "debugId": "32B390669514CAC064756E2164756E21",
13
+ "names": []
14
+ }