@_davideast/stitch-mcp 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/chunk-25wakzyb.js +137 -0
  2. package/dist/chunk-25wakzyb.js.map +10 -0
  3. package/dist/chunk-2cetsfw4.js +16531 -0
  4. package/dist/chunk-2cetsfw4.js.map +95 -0
  5. package/dist/chunk-2fcdwvrm.js +54 -0
  6. package/dist/chunk-2fcdwvrm.js.map +10 -0
  7. package/dist/chunk-2k7n0w2x.js +3980 -0
  8. package/dist/chunk-2k7n0w2x.js.map +16 -0
  9. package/dist/chunk-2kyqsrg2.js +403 -0
  10. package/dist/chunk-2kyqsrg2.js.map +10 -0
  11. package/dist/chunk-384jmtpy.js +11057 -0
  12. package/dist/chunk-384jmtpy.js.map +238 -0
  13. package/dist/chunk-3at4pjgn.js +22 -0
  14. package/dist/chunk-3at4pjgn.js.map +9 -0
  15. package/dist/chunk-3sfn889r.js +492 -0
  16. package/dist/chunk-3sfn889r.js.map +13 -0
  17. package/dist/chunk-45wx7tn7.js +94 -0
  18. package/dist/chunk-45wx7tn7.js.map +10 -0
  19. package/dist/chunk-48d17n29.js +10 -0
  20. package/dist/chunk-48d17n29.js.map +9 -0
  21. package/dist/chunk-4jwmvjb4.js +839 -0
  22. package/dist/chunk-4jwmvjb4.js.map +11 -0
  23. package/dist/chunk-4jygt4d6.js +14 -0
  24. package/dist/chunk-4jygt4d6.js.map +10 -0
  25. package/dist/chunk-4vxy1qce.js +68 -0
  26. package/dist/chunk-4vxy1qce.js.map +10 -0
  27. package/dist/chunk-7tx0wn04.js +11 -0
  28. package/dist/chunk-7tx0wn04.js.map +9 -0
  29. package/dist/chunk-7xh1y383.js +45188 -0
  30. package/dist/chunk-7xh1y383.js.map +258 -0
  31. package/dist/chunk-8yrtq2qs.js +18 -0
  32. package/dist/chunk-8yrtq2qs.js.map +9 -0
  33. package/dist/chunk-985f11w6.js +21 -0
  34. package/dist/chunk-985f11w6.js.map +9 -0
  35. package/dist/chunk-9tvppjaf.js +250 -0
  36. package/dist/chunk-9tvppjaf.js.map +14 -0
  37. package/dist/chunk-9wyra8hs.js +32 -0
  38. package/dist/chunk-9wyra8hs.js.map +9 -0
  39. package/dist/chunk-cwkb2wbe.js +733 -0
  40. package/dist/chunk-cwkb2wbe.js.map +16 -0
  41. package/dist/chunk-djhzzcgj.js +362 -0
  42. package/dist/chunk-djhzzcgj.js.map +13 -0
  43. package/dist/chunk-edp6faw2.js +7 -0
  44. package/dist/chunk-edp6faw2.js.map +9 -0
  45. package/dist/chunk-ezmw2j8c.js +14 -0
  46. package/dist/chunk-ezmw2j8c.js.map +9 -0
  47. package/dist/chunk-f2hq6bfv.js +22 -0
  48. package/dist/chunk-f2hq6bfv.js.map +10 -0
  49. package/dist/chunk-fwb4fnkp.js +31 -0
  50. package/dist/chunk-fwb4fnkp.js.map +10 -0
  51. package/dist/chunk-h18jrqed.js +9517 -0
  52. package/dist/chunk-h18jrqed.js.map +99 -0
  53. package/dist/chunk-hb3c6f6a.js +42 -0
  54. package/dist/chunk-hb3c6f6a.js.map +9 -0
  55. package/dist/chunk-jy2d17pr.js +252 -0
  56. package/dist/chunk-jy2d17pr.js.map +11 -0
  57. package/dist/chunk-kbtqrkwh.js +24 -0
  58. package/dist/chunk-kbtqrkwh.js.map +10 -0
  59. package/dist/chunk-knbnsf6s.js +92 -0
  60. package/dist/chunk-knbnsf6s.js.map +10 -0
  61. package/dist/chunk-mv9ssgmx.js +446 -0
  62. package/dist/chunk-mv9ssgmx.js.map +17 -0
  63. package/dist/chunk-nq68kghz.js +1647 -0
  64. package/dist/chunk-nq68kghz.js.map +10 -0
  65. package/dist/chunk-nthabjd9.js +3138 -0
  66. package/dist/chunk-nthabjd9.js.map +34 -0
  67. package/dist/chunk-nxpzt33t.js +278 -0
  68. package/dist/chunk-nxpzt33t.js.map +10 -0
  69. package/dist/chunk-pfyjtfex.js +172 -0
  70. package/dist/chunk-pfyjtfex.js.map +10 -0
  71. package/dist/chunk-q1nd6g0y.js +392 -0
  72. package/dist/chunk-q1nd6g0y.js.map +20 -0
  73. package/dist/chunk-q4js8r0z.js +4708 -0
  74. package/dist/chunk-q4js8r0z.js.map +29 -0
  75. package/dist/chunk-qv44tmn6.js +289 -0
  76. package/dist/chunk-qv44tmn6.js.map +13 -0
  77. package/dist/chunk-r2sg2nxa.js +20 -0
  78. package/dist/chunk-r2sg2nxa.js.map +9 -0
  79. package/dist/chunk-rp8wjzht.js +16959 -0
  80. package/dist/chunk-rp8wjzht.js.map +26 -0
  81. package/dist/chunk-rpxnm86e.js +372 -0
  82. package/dist/chunk-rpxnm86e.js.map +17 -0
  83. package/dist/chunk-sdp429xd.js +914 -0
  84. package/dist/chunk-sdp429xd.js.map +24 -0
  85. package/dist/chunk-t85nbjjb.js +113 -0
  86. package/dist/chunk-t85nbjjb.js.map +10 -0
  87. package/dist/chunk-tz7wnw4s.js +211 -0
  88. package/dist/chunk-tz7wnw4s.js.map +11 -0
  89. package/dist/chunk-v7117ywx.js +1477 -0
  90. package/dist/chunk-v7117ywx.js.map +23 -0
  91. package/dist/chunk-w8q7nsm7.js +2098 -0
  92. package/dist/chunk-w8q7nsm7.js.map +44 -0
  93. package/dist/chunk-wa64nz8b.js +47 -0
  94. package/dist/chunk-wa64nz8b.js.map +10 -0
  95. package/dist/chunk-wz8d5vzb.js +234 -0
  96. package/dist/chunk-wz8d5vzb.js.map +11 -0
  97. package/dist/chunk-ycfxp056.js +677 -0
  98. package/dist/chunk-ycfxp056.js.map +17 -0
  99. package/dist/chunk-z9d2xc83.js +3256 -0
  100. package/dist/chunk-z9d2xc83.js.map +84 -0
  101. package/dist/cli.js +111 -126055
  102. package/dist/cli.js.map +19 -0
  103. package/dist/commands/autoload.d.ts +2 -0
  104. package/dist/commands/doctor/command.d.ts +2 -1
  105. package/dist/commands/doctor/command.js +82 -0
  106. package/dist/commands/doctor/command.js.map +11 -0
  107. package/dist/commands/doctor/spec.d.ts +16 -8
  108. package/dist/commands/init/command.d.ts +2 -1
  109. package/dist/commands/init/command.js +98 -0
  110. package/dist/commands/init/command.js.map +11 -0
  111. package/dist/commands/init/spec.d.ts +29 -9
  112. package/dist/commands/logout/command.d.ts +2 -1
  113. package/dist/commands/logout/command.js +79 -0
  114. package/dist/commands/logout/command.js.map +11 -0
  115. package/dist/commands/logout/spec.d.ts +11 -0
  116. package/dist/commands/proxy/command.d.ts +2 -1
  117. package/dist/commands/proxy/command.js +56 -0
  118. package/dist/commands/proxy/command.js.map +11 -0
  119. package/dist/commands/proxy/spec.d.ts +15 -0
  120. package/dist/commands/screens/command.d.ts +2 -1
  121. package/dist/commands/screens/command.js +61 -0
  122. package/dist/commands/screens/command.js.map +11 -0
  123. package/dist/commands/screens/spec.d.ts +9 -0
  124. package/dist/commands/serve/command.d.ts +2 -1
  125. package/dist/commands/serve/command.js +65 -0
  126. package/dist/commands/serve/command.js.map +11 -0
  127. package/dist/commands/serve/spec.d.ts +9 -0
  128. package/dist/commands/site/command.d.ts +2 -1
  129. package/dist/commands/site/command.js +53 -0
  130. package/dist/commands/site/command.js.map +11 -0
  131. package/dist/commands/site/spec.d.ts +15 -0
  132. package/dist/commands/snapshot/command.d.ts +2 -1
  133. package/dist/commands/snapshot/command.js +59 -0
  134. package/dist/commands/snapshot/command.js.map +11 -0
  135. package/dist/commands/tool/command.d.ts +2 -1
  136. package/dist/commands/tool/command.js +79 -0
  137. package/dist/commands/tool/command.js.map +11 -0
  138. package/dist/commands/tool/handler.d.ts +17 -0
  139. package/dist/commands/tool/spec.d.ts +17 -0
  140. package/dist/commands/view/command.d.ts +2 -1
  141. package/dist/commands/view/command.js +52 -0
  142. package/dist/commands/view/command.js.map +11 -0
  143. package/dist/commands/view/spec.d.ts +24 -0
  144. package/dist/framework/CommandDefinition.d.ts +2 -2
  145. package/dist/index.js +26 -21607
  146. package/dist/index.js.map +9 -0
  147. package/dist/lib/services/site/schemas.d.ts +8 -8
  148. package/dist/services/config/handler.d.ts +12 -0
  149. package/dist/services/config/spec.d.ts +82 -0
  150. package/dist/services/gcloud/auth.d.ts +28 -0
  151. package/dist/services/gcloud/core.d.ts +21 -0
  152. package/dist/services/gcloud/handler.d.ts +6 -18
  153. package/dist/services/gcloud/install.d.ts +23 -0
  154. package/dist/services/gcloud/projects.d.ts +15 -0
  155. package/dist/services/gcloud/spec.d.ts +32 -24
  156. package/dist/services/mcp-client/client.d.ts +0 -5
  157. package/dist/services/mcp-client/spec.d.ts +6 -6
  158. package/dist/services/mcp-config/spec.d.ts +12 -12
  159. package/dist/services/project/spec.d.ts +4 -4
  160. package/dist/services/proxy/spec.d.ts +3 -3
  161. package/dist/services/stitch/api.d.ts +10 -0
  162. package/dist/services/stitch/connection.d.ts +5 -0
  163. package/dist/services/stitch/handler.d.ts +5 -3
  164. package/dist/services/stitch/iam.d.ts +11 -0
  165. package/dist/services/stitch/spec.d.ts +6 -6
  166. package/dist/services/view/spec.d.ts +7 -7
  167. package/dist/src/cli.d.ts +1 -0
  168. package/dist/src/commands/doctor/handler.d.ts +9 -0
  169. package/dist/src/commands/doctor/handler.test.d.ts +1 -0
  170. package/dist/src/commands/doctor/spec.d.ts +130 -0
  171. package/dist/src/commands/doctor/spec.test.d.ts +1 -0
  172. package/dist/src/commands/init/handler.d.ts +17 -0
  173. package/dist/src/commands/init/handler.test.d.ts +1 -0
  174. package/dist/src/commands/init/spec.d.ts +88 -0
  175. package/dist/src/commands/init/spec.test.d.ts +1 -0
  176. package/dist/src/commands/proxy/handler.d.ts +7 -0
  177. package/dist/src/commands/proxy/handler.test.d.ts +1 -0
  178. package/dist/src/index.d.ts +13 -0
  179. package/dist/src/platform/detector.d.ts +29 -0
  180. package/dist/src/platform/paths.d.ts +20 -0
  181. package/dist/src/platform/shell.d.ts +26 -0
  182. package/dist/src/services/gcloud/handler.d.ts +48 -0
  183. package/dist/src/services/gcloud/handler.test.d.ts +1 -0
  184. package/dist/src/services/gcloud/spec.d.ts +405 -0
  185. package/dist/src/services/mcp-config/handler.d.ts +12 -0
  186. package/dist/src/services/mcp-config/handler.test.d.ts +1 -0
  187. package/dist/src/services/mcp-config/spec.d.ts +88 -0
  188. package/dist/src/services/mcp-config/spec.test.d.ts +1 -0
  189. package/dist/src/services/project/handler.d.ts +11 -0
  190. package/dist/src/services/project/handler.test.d.ts +1 -0
  191. package/dist/src/services/project/spec.d.ts +86 -0
  192. package/dist/src/services/project/spec.test.d.ts +1 -0
  193. package/dist/src/services/proxy/handler.d.ts +15 -0
  194. package/dist/src/services/proxy/handler.test.d.ts +1 -0
  195. package/dist/src/services/proxy/spec.d.ts +83 -0
  196. package/dist/src/services/proxy/spec.test.d.ts +1 -0
  197. package/dist/src/services/stitch/handler.d.ts +15 -0
  198. package/dist/src/services/stitch/handler.test.d.ts +1 -0
  199. package/dist/src/services/stitch/spec.d.ts +262 -0
  200. package/dist/src/services/stitch/spec.test.d.ts +1 -0
  201. package/dist/src/ui/spinner.d.ts +11 -0
  202. package/dist/src/ui/theme.d.ts +18 -0
  203. package/dist/src/ui/wizard.d.ts +24 -0
  204. package/dist/tests/mocks/shell.d.ts +2 -0
  205. package/dist/ui/JsonTree.d.ts +1 -1
  206. package/package.json +2 -2
  207. package/dist/commands/registry.d.ts +0 -2
  208. package/dist/ui/copy-behaviors/index.d.ts +0 -8
  209. package/dist/ui/serve-behaviors/index.d.ts +0 -7
  210. /package/dist/ui/navigation-behaviors/{index.d.ts → handler.d.ts} +0 -0
@@ -0,0 +1,53 @@
1
+ import {
2
+ icons,
3
+ theme
4
+ } from "../../chunk-kbtqrkwh.js";
5
+ import"../../chunk-3sfn889r.js";
6
+ import {
7
+ exports_external
8
+ } from "../../chunk-2k7n0w2x.js";
9
+ import {
10
+ __require
11
+ } from "../../chunk-9wyra8hs.js";
12
+
13
+ // src/commands/site/spec.ts
14
+ var SiteOptionsSchema = exports_external.object({
15
+ project: exports_external.string(),
16
+ output: exports_external.string().default("."),
17
+ export: exports_external.boolean().default(false)
18
+ });
19
+
20
+ // src/commands/site/command.ts
21
+ var command = {
22
+ name: "site",
23
+ description: "Build a structured site from Stitch screens",
24
+ requiredOptions: [
25
+ { flags: "-p, --project <id>", description: "Project ID" }
26
+ ],
27
+ options: [
28
+ { flags: "-o, --output <dir>", description: "Output directory", defaultValue: "." },
29
+ { flags: "-e, --export", description: "Export screen-to-route config as build_site JSON", defaultValue: false }
30
+ ],
31
+ action: async (_args, options) => {
32
+ try {
33
+ const parsedOptions = SiteOptionsSchema.parse(options);
34
+ const { SiteCommandHandler } = await import("../../chunk-knbnsf6s.js");
35
+ const handler = new SiteCommandHandler;
36
+ await handler.execute({
37
+ projectId: parsedOptions.project,
38
+ outputDir: parsedOptions.output,
39
+ export: parsedOptions.export
40
+ });
41
+ process.exit(0);
42
+ } catch (error) {
43
+ console.error(theme.red(`
44
+ ${icons.error} Unexpected error:`), error);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ };
49
+ export {
50
+ command
51
+ };
52
+
53
+ //# debugId=342A550BDDD9389964756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/site/spec.ts", "../src/commands/site/command.ts"],
4
+ "sourcesContent": [
5
+ "import { z } from 'zod';\n\nexport const SiteOptionsSchema = z.object({\n project: z.string(),\n output: z.string().default('.'),\n export: z.boolean().default(false),\n});\n\nexport type SiteOptions = z.infer<typeof SiteOptionsSchema>;\n",
6
+ "import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { SiteOptionsSchema, type SiteOptions } from './spec.js';\n\nexport const command: CommandDefinition<any, SiteOptions> = {\n name: 'site',\n description: 'Build a structured site from Stitch screens',\n requiredOptions: [\n { flags: '-p, --project <id>', description: 'Project ID' }\n ],\n options: [\n { flags: '-o, --output <dir>', description: 'Output directory', defaultValue: '.' },\n { flags: '-e, --export', description: 'Export screen-to-route config as build_site JSON', defaultValue: false }\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = SiteOptionsSchema.parse(options);\n const { SiteCommandHandler } = await import('./index.js');\n const handler = new SiteCommandHandler();\n await handler.execute({\n projectId: parsedOptions.project,\n outputDir: parsedOptions.output,\n export: parsedOptions.export\n });\n process.exit(0);\n } catch (error) {\n console.error(theme.red(`\\n${icons.error} Unexpected error:`), error);\n process.exit(1);\n }\n }\n};\n"
7
+ ],
8
+ "mappings": ";;;;;;;;;;;;;AAEO,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACxC,SAAS,iBAAE,OAAO;AAAA,EAClB,QAAQ,iBAAE,OAAO,EAAE,QAAQ,GAAG;AAAA,EAC9B,QAAQ,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AACnC,CAAC;;;ACFM,IAAM,UAA+C;AAAA,EAC1D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,IACf,EAAE,OAAO,sBAAsB,aAAa,aAAa;AAAA,EAC3D;AAAA,EACA,SAAS;AAAA,IACP,EAAE,OAAO,sBAAsB,aAAa,oBAAoB,cAAc,IAAI;AAAA,IAClF,EAAE,OAAO,gBAAgB,aAAa,oDAAoD,cAAc,MAAM;AAAA,EAChH;AAAA,EACA,QAAQ,OAAO,OAAO,YAAY;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,gBAAgB,kBAAkB,MAAM,OAAO;AAAA,MACrD,QAAQ,uBAAuB,MAAa;AAAA,MAC5C,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,QAAQ,QAAQ;AAAA,QAClB,WAAW,cAAc;AAAA,QACzB,WAAW,cAAc;AAAA,QACzB,QAAQ,cAAc;AAAA,MAC1B,CAAC;AAAA,MACD,QAAQ,KAAK,CAAC;AAAA,MACd,OAAO,OAAO;AAAA,MACd,QAAQ,MAAM,MAAM,IAAI;AAAA,EAAK,MAAM,yBAAyB,GAAG,KAAK;AAAA,MACpE,QAAQ,KAAK,CAAC;AAAA;AAAA;AAGpB;",
9
+ "debugId": "342A550BDDD9389964756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ export declare const SiteOptionsSchema: z.ZodObject<{
3
+ project: z.ZodString;
4
+ output: z.ZodDefault<z.ZodString>;
5
+ export: z.ZodDefault<z.ZodBoolean>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ project: string;
8
+ output: string;
9
+ export: boolean;
10
+ }, {
11
+ project: string;
12
+ output?: string | undefined;
13
+ export?: boolean | undefined;
14
+ }>;
15
+ export type SiteOptions = z.infer<typeof SiteOptionsSchema>;
@@ -1,2 +1,3 @@
1
1
  import { type CommandDefinition } from '../../framework/CommandDefinition.js';
2
- export declare const command: CommandDefinition;
2
+ import { type SnapshotInput } from './spec.js';
3
+ export declare const command: CommandDefinition<any, SnapshotInput>;
@@ -0,0 +1,59 @@
1
+ import {
2
+ theme
3
+ } from "../../chunk-kbtqrkwh.js";
4
+ import"../../chunk-3sfn889r.js";
5
+ import {
6
+ exports_external
7
+ } from "../../chunk-2k7n0w2x.js";
8
+ import {
9
+ __require
10
+ } from "../../chunk-9wyra8hs.js";
11
+
12
+ // src/commands/snapshot/spec.ts
13
+ var SnapshotInputSchema = exports_external.object({
14
+ command: exports_external.string().optional(),
15
+ data: exports_external.string().optional(),
16
+ schema: exports_external.boolean().default(false)
17
+ });
18
+ var SnapshotResultSchema = exports_external.object({
19
+ success: exports_external.boolean(),
20
+ error: exports_external.object({
21
+ message: exports_external.string()
22
+ }).optional()
23
+ });
24
+
25
+ // src/commands/snapshot/command.ts
26
+ var command = {
27
+ name: "snapshot",
28
+ description: "Create a UI snapshot given a data state",
29
+ options: [
30
+ { flags: "-c, --command <command>", description: "The command to snapshot (e.g. init)" },
31
+ { flags: "-d, --data <file>", description: "Path to JSON data file" },
32
+ { flags: "-s, --schema", description: "Print the data schema for the command", defaultValue: false }
33
+ ],
34
+ action: async (_args, options) => {
35
+ try {
36
+ const parsedOptions = SnapshotInputSchema.parse(options);
37
+ const { SnapshotHandler } = await import("../../chunk-jy2d17pr.js");
38
+ const handler = new SnapshotHandler;
39
+ const result = await handler.execute({
40
+ command: parsedOptions.command,
41
+ data: parsedOptions.data,
42
+ schema: parsedOptions.schema
43
+ });
44
+ if (!result.success) {
45
+ console.error(theme.red(`Error: ${result.error?.message || "Snapshot failed"}`));
46
+ process.exit(1);
47
+ }
48
+ process.exit(0);
49
+ } catch (error) {
50
+ console.error(theme.red("Unexpected error:"), error);
51
+ process.exit(1);
52
+ }
53
+ }
54
+ };
55
+ export {
56
+ command
57
+ };
58
+
59
+ //# debugId=E4F30033EED27EDA64756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/snapshot/spec.ts", "../src/commands/snapshot/command.ts"],
4
+ "sourcesContent": [
5
+ "import { z } from 'zod';\n\nexport const SnapshotInputSchema = z.object({\n command: z.string().optional(),\n data: z.string().optional(),\n schema: z.boolean().default(false),\n});\n\nexport type SnapshotInput = z.infer<typeof SnapshotInputSchema>;\n\nexport const SnapshotResultSchema = z.object({\n success: z.boolean(),\n error: z.object({\n message: z.string(),\n }).optional(),\n});\n\nexport type SnapshotResult = z.infer<typeof SnapshotResultSchema>;\n\nexport interface SnapshotCommand {\n execute(input: SnapshotInput): Promise<SnapshotResult>;\n}\n",
6
+ "import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme } from '../../ui/theme.js';\nimport { SnapshotInputSchema, type SnapshotInput } from './spec.js';\n\nexport const command: CommandDefinition<any, SnapshotInput> = {\n name: 'snapshot',\n description: 'Create a UI snapshot given a data state',\n options: [\n { flags: '-c, --command <command>', description: 'The command to snapshot (e.g. init)' },\n { flags: '-d, --data <file>', description: 'Path to JSON data file' },\n { flags: '-s, --schema', description: 'Print the data schema for the command', defaultValue: false },\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = SnapshotInputSchema.parse(options);\n const { SnapshotHandler } = await import('./handler.js');\n const handler = new SnapshotHandler();\n const result = await handler.execute({\n command: parsedOptions.command,\n data: parsedOptions.data,\n schema: parsedOptions.schema,\n });\n\n if (!result.success) {\n console.error(theme.red(`Error: ${result.error?.message || 'Snapshot failed'}`));\n process.exit(1);\n }\n process.exit(0);\n } catch (error) {\n console.error(theme.red('Unexpected error:'), error);\n process.exit(1);\n }\n }\n};\n"
7
+ ],
8
+ "mappings": ";;;;;;;;;;;;AAEO,IAAM,sBAAsB,iBAAE,OAAO;AAAA,EAC1C,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AACnC,CAAC;AAIM,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EAC3C,SAAS,iBAAE,QAAQ;AAAA,EACnB,OAAO,iBAAE,OAAO;AAAA,IACd,SAAS,iBAAE,OAAO;AAAA,EACpB,CAAC,EAAE,SAAS;AACd,CAAC;;;ACXM,IAAM,UAAiD;AAAA,EAC5D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACP,EAAE,OAAO,2BAA2B,aAAa,sCAAsC;AAAA,IACvF,EAAE,OAAO,qBAAqB,aAAa,yBAAyB;AAAA,IACpE,EAAE,OAAO,gBAAgB,aAAa,yCAAyC,cAAc,MAAM;AAAA,EACrG;AAAA,EACA,QAAQ,OAAO,OAAO,YAAY;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,gBAAgB,oBAAoB,MAAM,OAAO;AAAA,MACvD,QAAQ,oBAAoB,MAAa;AAAA,MACzC,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,SAAS,MAAM,QAAQ,QAAQ;AAAA,QACnC,SAAS,cAAc;AAAA,QACvB,MAAM,cAAc;AAAA,QACpB,QAAQ,cAAc;AAAA,MACxB,CAAC;AAAA,MAED,IAAI,CAAC,OAAO,SAAS;AAAA,QACnB,QAAQ,MAAM,MAAM,IAAI,UAAU,OAAO,OAAO,WAAW,mBAAmB,CAAC;AAAA,QAC/E,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MACA,QAAQ,KAAK,CAAC;AAAA,MACd,OAAO,OAAO;AAAA,MACd,QAAQ,MAAM,MAAM,IAAI,mBAAmB,GAAG,KAAK;AAAA,MACnD,QAAQ,KAAK,CAAC;AAAA;AAAA;AAGpB;",
9
+ "debugId": "E4F30033EED27EDA64756E2164756E21",
10
+ "names": []
11
+ }
@@ -1,2 +1,3 @@
1
1
  import { type CommandDefinition } from '../../framework/CommandDefinition.js';
2
- export declare const command: CommandDefinition;
2
+ import { type ToolOptions } from './spec.js';
3
+ export declare const command: CommandDefinition<string | undefined, ToolOptions>;
@@ -0,0 +1,79 @@
1
+ import {
2
+ exports_external
3
+ } from "../../chunk-2k7n0w2x.js";
4
+ import {
5
+ __require
6
+ } from "../../chunk-9wyra8hs.js";
7
+
8
+ // src/commands/tool/spec.ts
9
+ var ToolCommandInputSchema = exports_external.object({
10
+ toolName: exports_external.string().optional(),
11
+ showSchema: exports_external.boolean().default(false),
12
+ data: exports_external.string().optional(),
13
+ dataFile: exports_external.string().optional(),
14
+ output: exports_external.enum(["json", "pretty", "raw"]).default("pretty")
15
+ });
16
+ var ToolOptionsSchema = exports_external.object({
17
+ schema: exports_external.boolean().default(false),
18
+ data: exports_external.string().optional(),
19
+ dataFile: exports_external.string().optional(),
20
+ output: exports_external.enum(["json", "pretty", "raw"]).default("pretty")
21
+ });
22
+
23
+ // src/commands/tool/command.ts
24
+ var command = {
25
+ name: "tool",
26
+ arguments: "[toolName]",
27
+ description: "Invoke MCP tools directly",
28
+ options: [
29
+ { flags: "-s, --schema", description: "Show tool arguments and schema" },
30
+ { flags: "-d, --data <json>", description: "JSON data (like curl -d)" },
31
+ { flags: "-f, --data-file <path>", description: "Read JSON from file (like curl -d @file)" },
32
+ { flags: "-o, --output <format>", description: "Output format: json, pretty, raw", defaultValue: "pretty" }
33
+ ],
34
+ action: async (toolName, options) => {
35
+ try {
36
+ const parsedOptions = ToolOptionsSchema.parse(options);
37
+ const { ToolCommandHandler } = await import("../../chunk-q1nd6g0y.js");
38
+ const handler = new ToolCommandHandler;
39
+ const result = await handler.execute({
40
+ toolName,
41
+ showSchema: parsedOptions.schema,
42
+ data: parsedOptions.data,
43
+ dataFile: parsedOptions.dataFile,
44
+ output: parsedOptions.output
45
+ });
46
+ if (!result.success) {
47
+ const errorOutput = {
48
+ success: false,
49
+ error: result.error,
50
+ ...result.data && { data: result.data }
51
+ };
52
+ console.error(JSON.stringify(errorOutput, null, 2));
53
+ process.exit(1);
54
+ }
55
+ if (parsedOptions.output === "json") {
56
+ console.log(JSON.stringify(result.data));
57
+ } else if (parsedOptions.output === "raw") {
58
+ console.log(result.data);
59
+ } else {
60
+ console.log(JSON.stringify(result.data, null, 2));
61
+ }
62
+ process.exit(0);
63
+ } catch (error) {
64
+ if (error?.code !== undefined && error?.message) {
65
+ console.error(`Error: ${error.message}`);
66
+ } else if (error instanceof Error) {
67
+ console.error(`Error: ${error.message}`);
68
+ } else {
69
+ console.error("Unexpected error:", error);
70
+ }
71
+ process.exit(1);
72
+ }
73
+ }
74
+ };
75
+ export {
76
+ command
77
+ };
78
+
79
+ //# debugId=B230A8FCE346B17A64756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/tool/spec.ts", "../src/commands/tool/command.ts"],
4
+ "sourcesContent": [
5
+ "import { z } from 'zod';\nimport type { StitchMCPClient } from '../../services/mcp-client/client.js';\n\nexport const ToolCommandInputSchema = z.object({\n toolName: z.string().optional(), // undefined = list tools\n showSchema: z.boolean().default(false), // --schema flag\n data: z.string().optional(), // JSON string like curl -d\n dataFile: z.string().optional(), // @file.json like curl\n output: z.enum(['json', 'pretty', 'raw']).default('pretty'),\n});\n\nexport type ToolCommandInput = z.infer<typeof ToolCommandInputSchema>;\n\nexport interface ToolInfo {\n name: string;\n description?: string;\n inputSchema?: {\n type: string;\n properties?: Record<string, any>;\n required?: string[];\n };\n}\n\nexport interface ToolCommandResult {\n success: boolean;\n data?: any;\n error?: string;\n}\n\nexport interface VirtualTool extends ToolInfo {\n execute: (client: StitchMCPClient, args: any) => Promise<any>;\n}\n\n// Added for CLI validation\nexport const ToolOptionsSchema = z.object({\n schema: z.boolean().default(false),\n data: z.string().optional(),\n dataFile: z.string().optional(),\n output: z.enum(['json', 'pretty', 'raw']).default('pretty'),\n});\n\nexport type ToolOptions = z.infer<typeof ToolOptionsSchema>;\n",
6
+ "import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { ToolOptionsSchema, type ToolOptions } from './spec.js';\n\nexport const command: CommandDefinition<string | undefined, ToolOptions> = {\n name: 'tool',\n arguments: '[toolName]',\n description: 'Invoke MCP tools directly',\n options: [\n { flags: '-s, --schema', description: 'Show tool arguments and schema' },\n { flags: '-d, --data <json>', description: 'JSON data (like curl -d)' },\n { flags: '-f, --data-file <path>', description: 'Read JSON from file (like curl -d @file)' },\n { flags: '-o, --output <format>', description: 'Output format: json, pretty, raw', defaultValue: 'pretty' },\n ],\n action: async (toolName, options) => {\n try {\n const parsedOptions = ToolOptionsSchema.parse(options);\n const { ToolCommandHandler } = await import('./handler.js');\n const handler = new ToolCommandHandler();\n const result = await handler.execute({\n toolName,\n showSchema: parsedOptions.schema,\n data: parsedOptions.data,\n dataFile: parsedOptions.dataFile,\n output: parsedOptions.output,\n });\n\n if (!result.success) {\n const errorOutput = {\n success: false,\n error: result.error,\n ...(result.data && { data: result.data }),\n };\n console.error(JSON.stringify(errorOutput, null, 2));\n process.exit(1);\n }\n\n if (parsedOptions.output === 'json') {\n console.log(JSON.stringify(result.data));\n } else if (parsedOptions.output === 'raw') {\n console.log(result.data);\n } else {\n console.log(JSON.stringify(result.data, null, 2));\n }\n process.exit(0);\n } catch (error: any) {\n // Detect MCP SDK errors and print a clean message\n if (error?.code !== undefined && error?.message) {\n console.error(`Error: ${error.message}`);\n } else if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n } else {\n console.error('Unexpected error:', error);\n }\n process.exit(1);\n }\n }\n};\n"
7
+ ],
8
+ "mappings": ";;;;;;;;AAGO,IAAM,yBAAyB,iBAAE,OAAO;AAAA,EAC7C,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAY,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACrC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,iBAAE,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,EAAE,QAAQ,QAAQ;AAC5D,CAAC;AAyBM,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACxC,QAAQ,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,iBAAE,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,EAAE,QAAQ,QAAQ;AAC5D,CAAC;;;ACpCM,IAAM,UAA8D;AAAA,EACzE,MAAM;AAAA,EACN,WAAW;AAAA,EACX,aAAa;AAAA,EACb,SAAS;AAAA,IACP,EAAE,OAAO,gBAAgB,aAAa,iCAAiC;AAAA,IACvE,EAAE,OAAO,qBAAqB,aAAa,2BAA2B;AAAA,IACtE,EAAE,OAAO,0BAA0B,aAAa,2CAA2C;AAAA,IAC3F,EAAE,OAAO,yBAAyB,aAAa,oCAAoC,cAAc,SAAS;AAAA,EAC5G;AAAA,EACA,QAAQ,OAAO,UAAU,YAAY;AAAA,IACnC,IAAI;AAAA,MACF,MAAM,gBAAgB,kBAAkB,MAAM,OAAO;AAAA,MACrD,QAAQ,uBAAuB,MAAa;AAAA,MAC5C,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,SAAS,MAAM,QAAQ,QAAQ;AAAA,QACnC;AAAA,QACA,YAAY,cAAc;AAAA,QAC1B,MAAM,cAAc;AAAA,QACpB,UAAU,cAAc;AAAA,QACxB,QAAQ,cAAc;AAAA,MACxB,CAAC;AAAA,MAED,IAAI,CAAC,OAAO,SAAS;AAAA,QACnB,MAAM,cAAc;AAAA,UAClB,SAAS;AAAA,UACT,OAAO,OAAO;AAAA,aACV,OAAO,QAAQ,EAAE,MAAM,OAAO,KAAK;AAAA,QACzC;AAAA,QACA,QAAQ,MAAM,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,QAClD,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MAEA,IAAI,cAAc,WAAW,QAAQ;AAAA,QACnC,QAAQ,IAAI,KAAK,UAAU,OAAO,IAAI,CAAC;AAAA,MACzC,EAAO,SAAI,cAAc,WAAW,OAAO;AAAA,QACzC,QAAQ,IAAI,OAAO,IAAI;AAAA,MACzB,EAAO;AAAA,QACL,QAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,MAAM,CAAC,CAAC;AAAA;AAAA,MAElD,QAAQ,KAAK,CAAC;AAAA,MACd,OAAO,OAAY;AAAA,MAEnB,IAAI,OAAO,SAAS,aAAa,OAAO,SAAS;AAAA,QAC/C,QAAQ,MAAM,UAAU,MAAM,SAAS;AAAA,MACzC,EAAO,SAAI,iBAAiB,OAAO;AAAA,QACjC,QAAQ,MAAM,UAAU,MAAM,SAAS;AAAA,MACzC,EAAO;AAAA,QACL,QAAQ,MAAM,qBAAqB,KAAK;AAAA;AAAA,MAE1C,QAAQ,KAAK,CAAC;AAAA;AAAA;AAGpB;",
9
+ "debugId": "B230A8FCE346B17A64756E2164756E21",
10
+ "names": []
11
+ }
@@ -1,5 +1,22 @@
1
1
  import { StitchMCPClient } from '../../services/mcp-client/client.js';
2
+ import { runSteps } from '../../framework/StepRunner.js';
2
3
  import type { ToolCommandInput, ToolCommandResult, VirtualTool } from './spec.js';
4
+ /**
5
+ * Internal dependencies for testing
6
+ */
7
+ export declare const deps: {
8
+ runSteps: typeof runSteps;
9
+ ListToolsStep: typeof ListToolsStep;
10
+ ShowSchemaStep: typeof ShowSchemaStep;
11
+ ParseArgsStep: typeof ParseArgsStep;
12
+ ValidateToolStep: typeof ValidateToolStep;
13
+ ExecuteToolStep: typeof ExecuteToolStep;
14
+ };
15
+ import { ListToolsStep } from './steps/ListToolsStep.js';
16
+ import { ShowSchemaStep } from './steps/ShowSchemaStep.js';
17
+ import { ParseArgsStep } from './steps/ParseArgsStep.js';
18
+ import { ValidateToolStep } from './steps/ValidateToolStep.js';
19
+ import { ExecuteToolStep } from './steps/ExecuteToolStep.js';
3
20
  export declare class ToolCommandHandler {
4
21
  private client;
5
22
  private tools;
@@ -37,3 +37,20 @@ export interface ToolCommandResult {
37
37
  export interface VirtualTool extends ToolInfo {
38
38
  execute: (client: StitchMCPClient, args: any) => Promise<any>;
39
39
  }
40
+ export declare const ToolOptionsSchema: z.ZodObject<{
41
+ schema: z.ZodDefault<z.ZodBoolean>;
42
+ data: z.ZodOptional<z.ZodString>;
43
+ dataFile: z.ZodOptional<z.ZodString>;
44
+ output: z.ZodDefault<z.ZodEnum<["json", "pretty", "raw"]>>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ output: "json" | "pretty" | "raw";
47
+ schema: boolean;
48
+ data?: string | undefined;
49
+ dataFile?: string | undefined;
50
+ }, {
51
+ data?: string | undefined;
52
+ output?: "json" | "pretty" | "raw" | undefined;
53
+ schema?: boolean | undefined;
54
+ dataFile?: string | undefined;
55
+ }>;
56
+ export type ToolOptions = z.infer<typeof ToolOptionsSchema>;
@@ -1,2 +1,3 @@
1
1
  import { type CommandDefinition } from '../../framework/CommandDefinition.js';
2
- export declare const command: CommandDefinition;
2
+ import { type ViewOptions } from './spec.js';
3
+ export declare const command: CommandDefinition<any, ViewOptions>;
@@ -0,0 +1,52 @@
1
+ import {
2
+ icons,
3
+ theme
4
+ } from "../../chunk-kbtqrkwh.js";
5
+ import"../../chunk-3sfn889r.js";
6
+ import {
7
+ exports_external
8
+ } from "../../chunk-2k7n0w2x.js";
9
+ import {
10
+ __require
11
+ } from "../../chunk-9wyra8hs.js";
12
+
13
+ // src/commands/view/spec.ts
14
+ var ViewOptionsSchema = exports_external.object({
15
+ projects: exports_external.boolean().default(false),
16
+ name: exports_external.string().optional(),
17
+ sourceScreen: exports_external.string().optional(),
18
+ project: exports_external.string().optional(),
19
+ screen: exports_external.string().optional(),
20
+ serve: exports_external.boolean().default(false)
21
+ });
22
+
23
+ // src/commands/view/command.ts
24
+ var command = {
25
+ name: "view",
26
+ description: "Interactively view Stitch resources",
27
+ options: [
28
+ { flags: "--projects", description: "List all projects", defaultValue: false },
29
+ { flags: "--name <name>", description: "Resource name to view" },
30
+ { flags: "--sourceScreen <name>", description: "Source screen resource name" },
31
+ { flags: "--project <id>", description: "Project ID" },
32
+ { flags: "--screen <id>", description: "Screen ID" },
33
+ { flags: "--serve", description: "Serve the screen via local server", defaultValue: false }
34
+ ],
35
+ action: async (_args, options) => {
36
+ try {
37
+ const parsedOptions = ViewOptionsSchema.parse(options);
38
+ const { ViewCommandHandler } = await import("../../chunk-25wakzyb.js");
39
+ const handler = new ViewCommandHandler;
40
+ await handler.execute(parsedOptions);
41
+ } catch (error) {
42
+ console.error(theme.red(`
43
+ ${icons.error} Unexpected error:`), error);
44
+ process.exit(1);
45
+ }
46
+ }
47
+ };
48
+ export {
49
+ command
50
+ };
51
+
52
+ //# debugId=D4463A0EEB89E41764756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/view/spec.ts", "../src/commands/view/command.ts"],
4
+ "sourcesContent": [
5
+ "import { z } from 'zod';\n\nexport const ViewOptionsSchema = z.object({\n projects: z.boolean().default(false),\n name: z.string().optional(),\n sourceScreen: z.string().optional(),\n project: z.string().optional(),\n screen: z.string().optional(),\n serve: z.boolean().default(false),\n});\n\nexport type ViewOptions = z.infer<typeof ViewOptionsSchema>;\n",
6
+ "import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { ViewOptionsSchema, type ViewOptions } from './spec.js';\n\nexport const command: CommandDefinition<any, ViewOptions> = {\n name: 'view',\n description: 'Interactively view Stitch resources',\n options: [\n { flags: '--projects', description: 'List all projects', defaultValue: false },\n { flags: '--name <name>', description: 'Resource name to view' },\n { flags: '--sourceScreen <name>', description: 'Source screen resource name' },\n { flags: '--project <id>', description: 'Project ID' },\n { flags: '--screen <id>', description: 'Screen ID' },\n { flags: '--serve', description: 'Serve the screen via local server', defaultValue: false },\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = ViewOptionsSchema.parse(options);\n const { ViewCommandHandler } = await import('./handler.js');\n const handler = new ViewCommandHandler();\n await handler.execute(parsedOptions);\n } catch (error) {\n console.error(theme.red(`\\n${icons.error} Unexpected error:`), error);\n process.exit(1);\n }\n }\n};\n"
7
+ ],
8
+ "mappings": ";;;;;;;;;;;;;AAEO,IAAM,oBAAoB,iBAAE,OAAO;AAAA,EACxC,UAAU,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACnC,MAAM,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,cAAc,iBAAE,OAAO,EAAE,SAAS;AAAA,EAClC,SAAS,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAO,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAClC,CAAC;;;ACLM,IAAM,UAA+C;AAAA,EAC1D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,IACP,EAAE,OAAO,cAAc,aAAa,qBAAqB,cAAc,MAAM;AAAA,IAC7E,EAAE,OAAO,iBAAiB,aAAa,wBAAwB;AAAA,IAC/D,EAAE,OAAO,yBAAyB,aAAa,8BAA8B;AAAA,IAC7E,EAAE,OAAO,kBAAkB,aAAa,aAAa;AAAA,IACrD,EAAE,OAAO,iBAAiB,aAAa,YAAY;AAAA,IACnD,EAAE,OAAO,WAAW,aAAa,qCAAqC,cAAc,MAAM;AAAA,EAC5F;AAAA,EACA,QAAQ,OAAO,OAAO,YAAY;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,gBAAgB,kBAAkB,MAAM,OAAO;AAAA,MACrD,QAAQ,uBAAuB,MAAa;AAAA,MAC5C,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,QAAQ,QAAQ,aAAa;AAAA,MACnC,OAAO,OAAO;AAAA,MACd,QAAQ,MAAM,MAAM,IAAI;AAAA,EAAK,MAAM,yBAAyB,GAAG,KAAK;AAAA,MACpE,QAAQ,KAAK,CAAC;AAAA;AAAA;AAGpB;",
9
+ "debugId": "D4463A0EEB89E41764756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const ViewOptionsSchema: z.ZodObject<{
3
+ projects: z.ZodDefault<z.ZodBoolean>;
4
+ name: z.ZodOptional<z.ZodString>;
5
+ sourceScreen: z.ZodOptional<z.ZodString>;
6
+ project: z.ZodOptional<z.ZodString>;
7
+ screen: z.ZodOptional<z.ZodString>;
8
+ serve: z.ZodDefault<z.ZodBoolean>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ projects: boolean;
11
+ serve: boolean;
12
+ name?: string | undefined;
13
+ project?: string | undefined;
14
+ screen?: string | undefined;
15
+ sourceScreen?: string | undefined;
16
+ }, {
17
+ name?: string | undefined;
18
+ projects?: boolean | undefined;
19
+ project?: string | undefined;
20
+ serve?: boolean | undefined;
21
+ screen?: string | undefined;
22
+ sourceScreen?: string | undefined;
23
+ }>;
24
+ export type ViewOptions = z.infer<typeof ViewOptionsSchema>;
@@ -1,5 +1,5 @@
1
1
  import { type Command } from 'commander';
2
- export interface CommandDefinition {
2
+ export interface CommandDefinition<Args = any, Options = any> {
3
3
  name: string;
4
4
  description: string;
5
5
  options?: Array<{
@@ -14,5 +14,5 @@ export interface CommandDefinition {
14
14
  defaultValue?: any;
15
15
  }>;
16
16
  arguments?: string;
17
- action: (args: any, options: any, command: Command) => Promise<void>;
17
+ action: (args: Args, options: Options, command: Command) => Promise<void>;
18
18
  }