@_davideast/stitch-mcp 0.5.3 → 0.5.5

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 (78) hide show
  1. package/dist/chunk-18nfnnkg.js +947 -0
  2. package/dist/chunk-18nfnnkg.js.map +28 -0
  3. package/dist/chunk-1sgyj1qf.js +256 -0
  4. package/dist/chunk-1sgyj1qf.js.map +11 -0
  5. package/dist/chunk-1tzaa3zn.js +370 -0
  6. package/dist/chunk-1tzaa3zn.js.map +16 -0
  7. package/dist/chunk-2efzz3tw.js +10 -0
  8. package/dist/chunk-2efzz3tw.js.map +9 -0
  9. package/dist/chunk-2eq8thmz.js +31529 -0
  10. package/dist/chunk-2eq8thmz.js.map +245 -0
  11. package/dist/chunk-4xa2a5hb.js +19 -0
  12. package/dist/chunk-4xa2a5hb.js.map +9 -0
  13. package/dist/chunk-7vdj1qwb.js +2121 -0
  14. package/dist/chunk-7vdj1qwb.js.map +44 -0
  15. package/dist/chunk-7zyv8g2t.js +5216 -0
  16. package/dist/chunk-7zyv8g2t.js.map +67 -0
  17. package/dist/chunk-94xqpnv4.js +7 -0
  18. package/dist/chunk-94xqpnv4.js.map +9 -0
  19. package/dist/chunk-b43pzs3z.js +839 -0
  20. package/dist/chunk-b43pzs3z.js.map +11 -0
  21. package/dist/chunk-byzfppa1.js +759 -0
  22. package/dist/chunk-byzfppa1.js.map +19 -0
  23. package/dist/chunk-cjkw69md.js +94 -0
  24. package/dist/chunk-cjkw69md.js.map +10 -0
  25. package/dist/chunk-d92ngrr6.js +680 -0
  26. package/dist/chunk-d92ngrr6.js.map +17 -0
  27. package/dist/chunk-de74byjc.js +19 -0
  28. package/dist/chunk-de74byjc.js.map +9 -0
  29. package/dist/chunk-ewab4gg0.js +17 -0
  30. package/dist/chunk-ewab4gg0.js.map +9 -0
  31. package/dist/chunk-f0phn3y1.js +1495 -0
  32. package/dist/chunk-f0phn3y1.js.map +23 -0
  33. package/dist/chunk-f398cwqb.js +24 -0
  34. package/dist/chunk-f398cwqb.js.map +9 -0
  35. package/dist/chunk-fkzq5m59.js +111 -0
  36. package/dist/chunk-fkzq5m59.js.map +10 -0
  37. package/dist/chunk-gzk8pt16.js +44184 -0
  38. package/dist/chunk-gzk8pt16.js.map +237 -0
  39. package/dist/chunk-kme6y874.js +125 -0
  40. package/dist/chunk-kme6y874.js.map +12 -0
  41. package/dist/chunk-mw5wn97e.js +109 -0
  42. package/dist/chunk-mw5wn97e.js.map +10 -0
  43. package/dist/chunk-mxcybqhd.js +412 -0
  44. package/dist/chunk-mxcybqhd.js.map +20 -0
  45. package/dist/chunk-nep9nerg.js +137 -0
  46. package/dist/chunk-nep9nerg.js.map +10 -0
  47. package/dist/chunk-nrcb494d.js +50 -0
  48. package/dist/chunk-nrcb494d.js.map +9 -0
  49. package/dist/chunk-p9vvygz4.js +736 -0
  50. package/dist/chunk-p9vvygz4.js.map +16 -0
  51. package/dist/chunk-rd2ye9s7.js +17 -0
  52. package/dist/chunk-rd2ye9s7.js.map +9 -0
  53. package/dist/chunk-svk5y62j.js +164 -0
  54. package/dist/chunk-svk5y62j.js.map +10 -0
  55. package/dist/chunk-w3wh3zkf.js +269 -0
  56. package/dist/chunk-w3wh3zkf.js.map +10 -0
  57. package/dist/chunk-x1tt02n9.js +264 -0
  58. package/dist/chunk-x1tt02n9.js.map +12 -0
  59. package/dist/chunk-x7g5p1gv.js +66 -0
  60. package/dist/chunk-x7g5p1gv.js.map +10 -0
  61. package/dist/chunk-z7b1n864.js +246 -0
  62. package/dist/chunk-z7b1n864.js.map +14 -0
  63. package/dist/chunk-zcc6seqb.js +19132 -0
  64. package/dist/chunk-zcc6seqb.js.map +115 -0
  65. package/dist/commands/doctor/command.js +1 -1
  66. package/dist/commands/init/command.js +1 -1
  67. package/dist/commands/logout/command.js +1 -1
  68. package/dist/commands/proxy/command.js +1 -1
  69. package/dist/commands/screens/command.js +4 -4
  70. package/dist/commands/serve/command.js +5 -5
  71. package/dist/commands/site/command.js +1 -1
  72. package/dist/commands/snapshot/command.js +1 -1
  73. package/dist/commands/tool/command.js +1 -1
  74. package/dist/commands/view/command.js +1 -1
  75. package/dist/index.js +5 -7
  76. package/dist/index.js.map +1 -1
  77. package/dist/ui/copy-behaviors/clipboard.d.ts +0 -7
  78. package/package.json +1 -3
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/tool/virtual-tools/get-screen-code.ts", "../src/commands/tool/virtual-tools/get-screen-image.ts", "../src/commands/tool/virtual-tools/build-site.ts", "../src/commands/tool/virtual-tools/list-tools.ts", "../src/commands/tool/virtual-tools/index.ts", "../src/commands/tool/steps/ListToolsStep.ts", "../src/commands/tool/steps/ShowSchemaStep.ts", "../src/commands/tool/steps/ParseArgsStep.ts", "../src/commands/tool/steps/ValidateToolStep.ts", "../src/commands/tool/steps/ExecuteToolStep.ts", "../src/commands/tool/handler.ts"],
4
+ "sourcesContent": [
5
+ "import type { StitchToolClient, Stitch } from '@google/stitch-sdk';\nimport { downloadText } from '../../../ui/copy-behaviors/clipboard.js';\nimport type { VirtualTool } from '../spec.js';\n\nexport const getScreenCodeTool: VirtualTool = {\n name: 'get_screen_code',\n description: '(Virtual) Retrieves a screen and downloads its HTML code content.',\n inputSchema: {\n type: 'object',\n properties: {\n projectId: {\n type: 'string',\n description: 'Required. The project ID of screen to retrieve.',\n },\n screenId: {\n type: 'string',\n description: 'Required. The name of screen to retrieve.',\n },\n },\n required: ['projectId', 'screenId'],\n },\n execute: async (client: StitchToolClient, args: any, stitch?: Stitch) => {\n if (!stitch) throw new Error('get_screen_code requires a Stitch instance');\n const { projectId, screenId } = args;\n\n // 1. Get the screen details using the injected SDK instance\n const screen = await stitch.project(projectId).getScreen(screenId);\n\n // 2. Fetch HTML Code\n let htmlContent: string | null = null;\n try {\n const htmlUrl = await screen.getHtml();\n if (htmlUrl) {\n htmlContent = await downloadText(htmlUrl);\n }\n } catch (e) {\n console.error(`Error downloading HTML code: ${e}`);\n }\n\n // 3. Return screen with code content\n return {\n screenId: screen.screenId,\n projectId: screen.projectId,\n htmlContent,\n };\n },\n};\n",
6
+ "import type { StitchToolClient, Stitch } from '@google/stitch-sdk';\nimport type { VirtualTool } from '../spec.js';\n\nexport const getScreenImageTool: VirtualTool = {\n name: 'get_screen_image',\n description: '(Virtual) Retrieves a screen and downloads its screenshot image content.',\n inputSchema: {\n type: 'object',\n properties: {\n projectId: {\n type: 'string',\n description: 'Required. The project ID of screen to retrieve.',\n },\n screenId: {\n type: 'string',\n description: 'Required. The name of screen to retrieve.',\n },\n },\n required: ['projectId', 'screenId'],\n },\n execute: async (client: StitchToolClient, args: any, stitch?: Stitch) => {\n if (!stitch) throw new Error('get_screen_image requires a Stitch instance');\n const { projectId, screenId } = args;\n\n // 1. Get the screen details using the injected SDK instance\n const screen = await stitch.project(projectId).getScreen(screenId);\n\n // 2. Fetch Image Content\n let imageContent: string | null = null;\n try {\n const imageUrl = await screen.getImage();\n if (imageUrl) {\n const response = await fetch(imageUrl);\n const arrayBuffer = await response.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n imageContent = buffer.toString('base64');\n }\n } catch (e) {\n console.error(`Error downloading screenshot: ${e}`);\n }\n\n // 3. Return screen with image content\n return {\n screenId: screen.screenId,\n projectId: screen.projectId,\n imageContent,\n };\n },\n};\n",
7
+ "import type { StitchToolClient, Stitch } from '@google/stitch-sdk';\nimport type { VirtualTool } from '../spec.js';\nimport pLimit from 'p-limit';\nimport { fetchWithRetry } from '../../site/utils/fetchWithRetry.js';\n\nexport const buildSiteTool: VirtualTool = {\n name: 'build_site',\n description: '(Virtual) Builds a site from a Stitch project by mapping screens to routes. Returns the design HTML for each page to use as context for code generation.',\n inputSchema: {\n type: 'object',\n properties: {\n projectId: {\n type: 'string',\n description: 'Required. The project ID to build a site from.',\n },\n routes: {\n type: 'array',\n description: 'Required. Array of screen-to-route mappings.',\n items: {\n type: 'object',\n properties: {\n screenId: {\n type: 'string',\n description: 'The screen ID to use for this route.',\n },\n route: {\n type: 'string',\n description: 'The route path (e.g. \"/\" or \"/about\").',\n },\n },\n required: ['screenId', 'route'],\n },\n },\n },\n required: ['projectId', 'routes'],\n },\n execute: async (client: StitchToolClient, args: any, stitch?: Stitch) => {\n if (!stitch) throw new Error('build_site requires a Stitch instance');\n const { projectId, routes } = args;\n\n // Validate routes\n if (!Array.isArray(routes)) {\n throw new Error('routes must be an array');\n }\n if (routes.length === 0) {\n throw new Error('routes must be a non-empty array');\n }\n for (const entry of routes) {\n if (!entry.screenId || typeof entry.screenId !== 'string') {\n throw new Error('Each route entry must have a \"screenId\" string');\n }\n if (!entry.route || typeof entry.route !== 'string') {\n throw new Error('Each route entry must have a \"route\" string');\n }\n }\n\n // Check for duplicate routes\n const routePaths = routes.map((r: any) => r.route);\n const uniqueRoutes = new Set(routePaths);\n if (uniqueRoutes.size !== routePaths.length) {\n const duplicates = routePaths.filter((r: string, i: number) => routePaths.indexOf(r) !== i);\n throw new Error(`Duplicate route paths found: ${[...new Set(duplicates)].join(', ')}`);\n }\n\n // Fetch project screens via injected SDK instance\n const project = stitch.project(projectId);\n const sdkScreens = await project.screens();\n const screenMap = new Map(sdkScreens.map((s: any) => [s.screenId, s]));\n\n // Validate all requested screenIds exist\n const missingIds = routes\n .map((r: any) => r.screenId)\n .filter((id: string) => !screenMap.has(id));\n if (missingIds.length > 0) {\n throw new Error(`Screen IDs not found in project: ${missingIds.join(', ')}`);\n }\n\n // Fetch HTML for each screen with concurrency limit\n const limit = pLimit(3);\n const htmlContent = new Map<string, string>();\n const errors: string[] = [];\n\n await Promise.all(\n routes.map((r: any) =>\n limit(async () => {\n const screen = screenMap.get(r.screenId)!;\n try {\n const htmlUrl = await screen.getHtml();\n if (htmlUrl) {\n const html = await fetchWithRetry(htmlUrl);\n htmlContent.set(r.screenId, html);\n } else {\n htmlContent.set(r.screenId, '');\n }\n } catch (e: any) {\n errors.push(`${r.screenId}: ${e.message}`);\n }\n })\n )\n );\n\n if (errors.length > 0) {\n throw new Error(`Failed to fetch HTML for screens: ${errors.join('; ')}`);\n }\n\n // Return raw HTML content for each page\n const pages = routes.map((r: any) => ({\n screenId: r.screenId,\n route: r.route,\n title: screenMap.get(r.screenId)!.title ?? r.screenId,\n html: htmlContent.get(r.screenId)!,\n }));\n\n return {\n success: true,\n pages,\n message: `Built ${pages.length} page(s) with design HTML`,\n };\n },\n};\n",
8
+ "import type { VirtualTool } from '../spec.js';\nimport type { StitchToolClient } from '@google/stitch-sdk';\n\nexport const listToolsTool: VirtualTool = {\n name: 'list_tools',\n description: 'List all available tools with their descriptions and schemas.',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n execute: async (client: StitchToolClient, _args: any) => {\n const result = await client.listTools();\n return result.tools || [];\n },\n};\n",
9
+ "export type { VirtualTool } from '../spec.js';\nexport { getScreenCodeTool } from './get-screen-code.js';\nexport { getScreenImageTool } from './get-screen-image.js';\nexport { buildSiteTool } from './build-site.js';\nexport { listToolsTool } from './list-tools.js';\n\nimport { getScreenCodeTool } from './get-screen-code.js';\nimport { getScreenImageTool } from './get-screen-image.js';\nimport { buildSiteTool } from './build-site.js';\nimport { listToolsTool } from './list-tools.js';\nimport type { VirtualTool } from '../spec.js';\n\nexport const virtualTools: VirtualTool[] = [\n getScreenCodeTool,\n getScreenImageTool,\n buildSiteTool,\n listToolsTool,\n];\n",
10
+ "import type { CommandStep, StepResult } from '../../../framework/CommandStep.js';\nimport type { ToolContext } from '../context.js';\n\nexport class ListToolsStep implements CommandStep<ToolContext> {\n id = 'list-tools';\n name = 'List available tools';\n\n async shouldRun(context: ToolContext): Promise<boolean> {\n const name = context.input.toolName?.toLowerCase();\n return !name || name === 'list' || name === 'listtools' || name === 'list_tools';\n }\n\n async run(context: ToolContext): Promise<StepResult> {\n const result = await context.client.listTools();\n const serverTools = result.tools || [];\n const tools = [\n ...context.virtualTools.map(t => ({ name: t.name, description: t.description, inputSchema: t.inputSchema, virtual: true as const })),\n ...serverTools.map(t => ({ ...t, virtual: false as const })),\n ];\n context.result = { success: true, data: tools };\n return { success: true };\n }\n}\n",
11
+ "import type { CommandStep, StepResult } from '../../../framework/CommandStep.js';\nimport type { ToolContext } from '../context.js';\nimport type { ToolInfo } from '../spec.js';\n\nexport class ShowSchemaStep implements CommandStep<ToolContext> {\n id = 'show-schema';\n name = 'Show tool schema';\n\n async shouldRun(context: ToolContext): Promise<boolean> {\n return !!context.input.toolName && context.input.toolName !== 'list' && context.input.showSchema;\n }\n\n async run(context: ToolContext): Promise<StepResult> {\n const toolName = context.input.toolName!;\n\n // Get all tools to find the one we need\n const result = await context.client.listTools();\n const serverTools = result.tools || [];\n const allTools = [...context.virtualTools, ...serverTools];\n const tool = allTools.find(t => t.name === toolName);\n\n if (!tool) {\n context.result = { success: false, error: `Tool not found: ${toolName}` };\n return { success: false, error: new Error(`Tool not found: ${toolName}`) };\n }\n\n context.result = { success: true, data: this.formatSchema(tool) };\n return { success: true };\n }\n\n private formatSchema(tool: ToolInfo): object {\n const schema = tool.inputSchema;\n const args: Record<string, string> = {};\n\n if (schema?.properties) {\n for (const [key, prop] of Object.entries(schema.properties)) {\n const required = schema.required?.includes(key) ? '(required)' : '(optional)';\n args[key] = `${prop.type} ${required}${prop.description ? ' - ' + prop.description : ''}`;\n }\n }\n\n return {\n name: tool.name,\n description: tool.description,\n virtual: tool.virtual ?? false,\n arguments: args,\n example: this.generateExample(tool),\n };\n }\n\n private generateExample(tool: ToolInfo): string {\n const exampleArgs: Record<string, any> = {};\n if (tool.inputSchema?.properties) {\n for (const [key, prop] of Object.entries(tool.inputSchema.properties)) {\n exampleArgs[key] = prop.type === 'string' ? `<${key}>` : `<${prop.type}>`;\n }\n }\n return `stitch-mcp tool ${tool.name} -d '${JSON.stringify(exampleArgs)}'`;\n }\n}\n",
12
+ "import type { CommandStep, StepResult } from '../../../framework/CommandStep.js';\nimport type { ToolContext } from '../context.js';\n\nexport class ParseArgsStep implements CommandStep<ToolContext> {\n id = 'parse-args';\n name = 'Parse tool arguments';\n\n async shouldRun(context: ToolContext): Promise<boolean> {\n return !!context.input.toolName\n && context.input.toolName !== 'list'\n && !context.input.showSchema;\n }\n\n async run(context: ToolContext): Promise<StepResult> {\n let args: Record<string, any> = {};\n\n if (context.input.data) {\n args = JSON.parse(context.input.data);\n } else if (context.input.dataFile) {\n const content = await Bun.file(context.input.dataFile.replace('@', '')).text();\n args = JSON.parse(content);\n }\n\n context.parsedArgs = args;\n return { success: true };\n }\n}\n",
13
+ "import type { CommandStep, StepResult } from '../../../framework/CommandStep.js';\nimport type { ToolContext } from '../context.js';\n\nexport class ValidateToolStep implements CommandStep<ToolContext> {\n id = 'validate-tool';\n name = 'Validate tool exists';\n\n async shouldRun(context: ToolContext): Promise<boolean> {\n return !!context.input.toolName\n && context.input.toolName !== 'list'\n && !context.input.showSchema\n && context.parsedArgs !== undefined;\n }\n\n async run(context: ToolContext): Promise<StepResult> {\n const toolName = context.input.toolName!;\n\n const result = await context.client.listTools();\n const serverTools = result.tools || [];\n const allTools = [...context.virtualTools, ...serverTools];\n const found = allTools.find(t => t.name === toolName);\n\n if (!found) {\n const availableNames = allTools.map(t => t.name).sort();\n context.result = {\n success: false,\n error: `Tool not found: \"${toolName}\". Use \"list_tools\" to see available tools.`,\n data: {\n requestedTool: toolName,\n availableTools: availableNames,\n hint: 'Call \"list_tools\" to see all available tools with descriptions and schemas.',\n },\n };\n return { success: false, error: new Error(`Tool not found: ${toolName}`) };\n }\n\n return { success: true };\n }\n}\n",
14
+ "import type { CommandStep, StepResult } from '../../../framework/CommandStep.js';\nimport type { ToolContext } from '../context.js';\n\nexport class ExecuteToolStep implements CommandStep<ToolContext> {\n id = 'execute-tool';\n name = 'Execute tool';\n\n async shouldRun(context: ToolContext): Promise<boolean> {\n return context.parsedArgs !== undefined;\n }\n\n async run(context: ToolContext): Promise<StepResult> {\n const toolName = context.input.toolName!;\n const args = context.parsedArgs!;\n\n // Check if it's a virtual tool\n const virtualTool = context.virtualTools.find(t => t.name === toolName);\n if (virtualTool) {\n try {\n const result = await virtualTool.execute(context.client, args, context.stitch);\n context.result = { success: true, data: result };\n return { success: true };\n } catch (e: any) {\n context.result = { success: false, error: `Virtual tool execution failed: ${e.message || String(e)}` };\n return { success: false, error: e };\n }\n }\n\n const result = await context.client.callTool(toolName, args);\n context.result = { success: true, data: result };\n return { success: true };\n }\n}\n",
15
+ "import { StitchToolClient, stitch as defaultStitch } from '@google/stitch-sdk';\nimport type { Stitch } from '@google/stitch-sdk';\nimport type { CommandStep } from '../../framework/CommandStep.js';\nimport { runSteps } from '../../framework/StepRunner.js';\nimport type { ToolCommandInput, ToolCommandResult, VirtualTool } from './spec.js';\n\nimport type { ToolContext } from './context.js';\nimport { virtualTools as defaultVirtualTools } from './virtual-tools/index.js';\nimport { ListToolsStep } from './steps/ListToolsStep.js';\nimport { ShowSchemaStep } from './steps/ShowSchemaStep.js';\nimport { ParseArgsStep } from './steps/ParseArgsStep.js';\nimport { ValidateToolStep } from './steps/ValidateToolStep.js';\nimport { ExecuteToolStep } from './steps/ExecuteToolStep.js';\n\nexport const deps = {\n runSteps,\n ListToolsStep,\n ShowSchemaStep,\n ParseArgsStep,\n ValidateToolStep,\n ExecuteToolStep,\n};\n\nexport class ToolCommandHandler {\n private client: StitchToolClient;\n private stitchInstance: Stitch;\n private tools: VirtualTool[];\n private steps: CommandStep<ToolContext>[];\n\n constructor(client?: StitchToolClient, tools?: VirtualTool[], stitchInstance?: Stitch) {\n this.client = client || new StitchToolClient();\n this.stitchInstance = stitchInstance || defaultStitch;\n this.tools = tools || defaultVirtualTools;\n this.steps = [\n new deps.ListToolsStep(),\n new deps.ShowSchemaStep(),\n new deps.ParseArgsStep(),\n new deps.ValidateToolStep(),\n new deps.ExecuteToolStep(),\n ];\n }\n\n async execute(input: ToolCommandInput): Promise<ToolCommandResult> {\n const context: ToolContext = {\n input,\n client: this.client,\n stitch: this.stitchInstance,\n virtualTools: this.tools,\n };\n\n try {\n await deps.runSteps(this.steps, context, {\n onAfterStep: (_step, _result, ctx) => ctx.result !== undefined,\n });\n } finally {\n await this.client.close();\n }\n\n return context.result ?? { success: false, error: 'No step produced a result' };\n }\n}\n"
16
+ ],
17
+ "mappings": "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",
18
+ "debugId": "20AA1F9BB063957D64756E2164756E21",
19
+ "names": []
20
+ }
@@ -0,0 +1,137 @@
1
+ import {
2
+ icons,
3
+ theme
4
+ } from "./chunk-kbtqrkwh.js";
5
+ import"./chunk-3sfn889r.js";
6
+ import {
7
+ __require
8
+ } from "./chunk-9wyra8hs.js";
9
+
10
+ // src/commands/view/handler.ts
11
+ class ViewCommandHandler {
12
+ async execute(options) {
13
+ if (options.serve) {
14
+ await this.executeServeMode(options);
15
+ } else {
16
+ await this.executeInteractiveMode(options);
17
+ }
18
+ }
19
+ async executeServeMode(options) {
20
+ if (!options.screen && !options.sourceScreen && !options.name) {
21
+ console.error(theme.red("Error: --serve requires a screen to be specified via --screen, --sourceScreen, or --name"));
22
+ process.exit(1);
23
+ }
24
+ const { ViewHandler } = await import("./chunk-mw5wn97e.js");
25
+ const handler = new ViewHandler;
26
+ const execOptions = { projects: false };
27
+ if (options.project)
28
+ execOptions.project = options.project;
29
+ if (options.screen)
30
+ execOptions.screen = options.screen;
31
+ if (options.sourceScreen)
32
+ execOptions.sourceScreen = options.sourceScreen;
33
+ if (options.name)
34
+ execOptions.name = options.name;
35
+ const res = await handler.execute(execOptions);
36
+ if (!res.success)
37
+ throw new Error(res.error.message);
38
+ const resource = res.data;
39
+ if (!resource) {
40
+ throw new Error("Could not find resource");
41
+ }
42
+ if (!resource.htmlCode || !resource.htmlCode.downloadUrl) {
43
+ console.error(theme.red("Error: The specified resource is not a screen or has no HTML code."));
44
+ process.exit(1);
45
+ }
46
+ const { StitchViteServer } = await import("./chunk-2efzz3tw.js");
47
+ const { downloadText } = await import("./chunk-de74byjc.js");
48
+ const server = new StitchViteServer;
49
+ const url = await server.start(0);
50
+ console.log(theme.green(`Starting server at ${url}`));
51
+ console.log("Downloading content...");
52
+ const html = await downloadText(resource.htmlCode.downloadUrl);
53
+ server.mount("/", html);
54
+ console.log(theme.green(`Serving screen "${resource.title || "Screen"}" at ${url}/`));
55
+ console.log("Press Ctrl+C to stop.");
56
+ await new Promise(() => {});
57
+ }
58
+ async executeInteractiveMode(options) {
59
+ const { render } = await import("./chunk-nrcb494d.js");
60
+ const React = await import("./chunk-94xqpnv4.js");
61
+ const { InteractiveViewer } = await import("./chunk-d92ngrr6.js");
62
+ const { ViewHandler } = await import("./chunk-mw5wn97e.js");
63
+ const handler = new ViewHandler;
64
+ const result = await handler.execute({
65
+ projects: options.projects,
66
+ name: options.name,
67
+ sourceScreen: options.sourceScreen,
68
+ project: options.project,
69
+ screen: options.screen
70
+ });
71
+ if (!result.success) {
72
+ console.error(theme.red(`
73
+ ${icons.error} View failed: ${result.error.message}`));
74
+ process.exit(1);
75
+ }
76
+ const createElement = React.createElement || React.default.createElement;
77
+ let rootLabel;
78
+ if (options.sourceScreen) {
79
+ rootLabel = "screen";
80
+ } else if (options.name) {
81
+ rootLabel = "resource";
82
+ }
83
+ const fetchResource = async (resourceName) => {
84
+ if (resourceName.includes("/screens/")) {
85
+ const navResult = await handler.execute({ projects: false, sourceScreen: resourceName });
86
+ if (!navResult.success)
87
+ throw new Error(navResult.error.message);
88
+ return navResult.data;
89
+ } else {
90
+ const navResult = await handler.execute({ projects: false, name: resourceName });
91
+ if (!navResult.success)
92
+ throw new Error(navResult.error.message);
93
+ return navResult.data;
94
+ }
95
+ };
96
+ const initialHistory = [];
97
+ if (options.sourceScreen) {
98
+ const projectMatch = options.sourceScreen.match(/^(projects\/\d+)/);
99
+ if (projectMatch) {
100
+ const projectName = projectMatch[1];
101
+ try {
102
+ const projectsResult = await handler.execute({ projects: true });
103
+ if (projectsResult.success) {
104
+ initialHistory.push({ data: projectsResult.data, rootLabel: undefined });
105
+ }
106
+ } catch (e) {}
107
+ try {
108
+ const projectResult = await handler.execute({ projects: false, name: projectName });
109
+ if (projectResult.success) {
110
+ initialHistory.push({ data: projectResult.data, rootLabel: "resource", resourcePath: projectName });
111
+ }
112
+ } catch (e) {}
113
+ }
114
+ }
115
+ if (options.name && !options.sourceScreen) {
116
+ try {
117
+ const projectsResult = await handler.execute({ projects: true });
118
+ if (projectsResult.success) {
119
+ initialHistory.push({ data: projectsResult.data, rootLabel: undefined });
120
+ }
121
+ } catch (e) {}
122
+ }
123
+ const instance = render(createElement(InteractiveViewer, {
124
+ initialData: result.data,
125
+ initialRootLabel: rootLabel,
126
+ initialHistory: initialHistory.length > 0 ? initialHistory : undefined,
127
+ onFetch: fetchResource
128
+ }));
129
+ await instance.waitUntilExit();
130
+ process.exit(0);
131
+ }
132
+ }
133
+ export {
134
+ ViewCommandHandler
135
+ };
136
+
137
+ //# debugId=FACA0134243A0F2764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/view/handler.ts"],
4
+ "sourcesContent": [
5
+ "import { theme, icons } from '../../ui/theme.js';\n\ninterface ViewOptions {\n projects: boolean;\n name?: string;\n sourceScreen?: string;\n project?: string;\n screen?: string;\n serve: boolean;\n}\n\nexport class ViewCommandHandler {\n async execute(options: ViewOptions): Promise<void> {\n if (options.serve) {\n await this.executeServeMode(options);\n } else {\n await this.executeInteractiveMode(options);\n }\n }\n\n private async executeServeMode(options: ViewOptions): Promise<void> {\n if (!options.screen && !options.sourceScreen && !options.name) {\n console.error(theme.red('Error: --serve requires a screen to be specified via --screen, --sourceScreen, or --name'));\n process.exit(1);\n }\n\n const { ViewHandler } = await import('../../services/view/handler.js');\n const handler = new ViewHandler();\n\n const execOptions: any = { projects: false };\n if (options.project) execOptions.project = options.project;\n if (options.screen) execOptions.screen = options.screen;\n if (options.sourceScreen) execOptions.sourceScreen = options.sourceScreen;\n if (options.name) execOptions.name = options.name;\n\n const res = await handler.execute(execOptions);\n if (!res.success) throw new Error(res.error.message);\n\n const resource = res.data;\n if (!resource) {\n throw new Error('Could not find resource');\n }\n\n if (!resource.htmlCode || !resource.htmlCode.downloadUrl) {\n console.error(theme.red('Error: The specified resource is not a screen or has no HTML code.'));\n process.exit(1);\n }\n\n const { StitchViteServer } = await import('../../lib/server/vite/StitchViteServer.js');\n const { downloadText } = await import('../../ui/copy-behaviors/clipboard.js');\n\n const server = new StitchViteServer();\n const url = await server.start(0);\n console.log(theme.green(`Starting server at ${url}`));\n\n console.log('Downloading content...');\n const html = await downloadText(resource.htmlCode.downloadUrl);\n server.mount('/', html);\n\n console.log(theme.green(`Serving screen \"${resource.title || 'Screen'}\" at ${url}/`));\n console.log('Press Ctrl+C to stop.');\n\n await new Promise(() => {});\n }\n\n private async executeInteractiveMode(options: ViewOptions): Promise<void> {\n const { render } = await import('ink');\n const React = await import('react');\n const { InteractiveViewer } = await import('../../ui/InteractiveViewer.js');\n const { ViewHandler } = await import('../../services/view/handler.js');\n\n const handler = new ViewHandler();\n const result = await handler.execute({\n projects: options.projects,\n name: options.name,\n sourceScreen: options.sourceScreen,\n project: options.project,\n screen: options.screen,\n });\n\n if (!result.success) {\n console.error(theme.red(`\\n${icons.error} View failed: ${result.error.message}`));\n process.exit(1);\n }\n\n const createElement = React.createElement || (React.default as any).createElement;\n\n let rootLabel: string | undefined;\n if (options.sourceScreen) {\n rootLabel = 'screen';\n } else if (options.name) {\n rootLabel = 'resource';\n }\n\n const fetchResource = async (resourceName: string): Promise<any> => {\n if (resourceName.includes('/screens/')) {\n const navResult = await handler.execute({ projects: false, sourceScreen: resourceName });\n if (!navResult.success) throw new Error(navResult.error.message);\n return navResult.data;\n } else {\n const navResult = await handler.execute({ projects: false, name: resourceName });\n if (!navResult.success) throw new Error(navResult.error.message);\n return navResult.data;\n }\n };\n\n const initialHistory: Array<{ data: any; rootLabel?: string; resourcePath?: string }> = [];\n\n if (options.sourceScreen) {\n const projectMatch = options.sourceScreen.match(/^(projects\\/\\d+)/);\n if (projectMatch) {\n const projectName = projectMatch[1];\n try {\n const projectsResult = await handler.execute({ projects: true });\n if (projectsResult.success) {\n initialHistory.push({ data: projectsResult.data, rootLabel: undefined });\n }\n } catch (e) {}\n\n try {\n const projectResult = await handler.execute({ projects: false, name: projectName });\n if (projectResult.success) {\n initialHistory.push({ data: projectResult.data, rootLabel: 'resource', resourcePath: projectName });\n }\n } catch (e) {}\n }\n }\n\n if (options.name && !options.sourceScreen) {\n try {\n const projectsResult = await handler.execute({ projects: true });\n if (projectsResult.success) {\n initialHistory.push({ data: projectsResult.data, rootLabel: undefined });\n }\n } catch (e) {}\n }\n\n const instance = render(createElement(InteractiveViewer, {\n initialData: result.data,\n initialRootLabel: rootLabel,\n initialHistory: initialHistory.length > 0 ? initialHistory : undefined,\n onFetch: fetchResource,\n }));\n await instance.waitUntilExit();\n process.exit(0);\n }\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "FACA0134243A0F2764756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,50 @@
1
+ import {
2
+ Box_default,
3
+ Newline,
4
+ Spacer,
5
+ Static,
6
+ Text,
7
+ Transform,
8
+ kittyFlags,
9
+ kittyModifiers,
10
+ measure_element_default,
11
+ render_default,
12
+ render_to_string_default,
13
+ use_app_default,
14
+ use_cursor_default,
15
+ use_focus_default,
16
+ use_focus_manager_default,
17
+ use_input_default,
18
+ use_is_screen_reader_enabled_default,
19
+ use_stderr_default,
20
+ use_stdin_default,
21
+ use_stdout_default
22
+ } from "./chunk-zcc6seqb.js";
23
+ import"./chunk-b43pzs3z.js";
24
+ import"./chunk-q6sv0243.js";
25
+ import"./chunk-3sfn889r.js";
26
+ import"./chunk-9wyra8hs.js";
27
+ export {
28
+ use_stdout_default as useStdout,
29
+ use_stdin_default as useStdin,
30
+ use_stderr_default as useStderr,
31
+ use_is_screen_reader_enabled_default as useIsScreenReaderEnabled,
32
+ use_input_default as useInput,
33
+ use_focus_manager_default as useFocusManager,
34
+ use_focus_default as useFocus,
35
+ use_cursor_default as useCursor,
36
+ use_app_default as useApp,
37
+ render_to_string_default as renderToString,
38
+ render_default as render,
39
+ measure_element_default as measureElement,
40
+ kittyModifiers,
41
+ kittyFlags,
42
+ Transform,
43
+ Text,
44
+ Static,
45
+ Spacer,
46
+ Newline,
47
+ Box_default as Box
48
+ };
49
+
50
+ //# debugId=DC542304F7E517EE64756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "DC542304F7E517EE64756E2164756E21",
8
+ "names": []
9
+ }