@_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,270 @@
1
+ import {
2
+ openUrl,
3
+ require_jsx_dev_runtime
4
+ } from "./chunk-mp1sf8x6.js";
5
+ import {
6
+ StitchViteServer
7
+ } from "./chunk-tebher8z.js";
8
+ import"./chunk-sqhdg0mf.js";
9
+ import {
10
+ Box_default,
11
+ Text,
12
+ use_app_default,
13
+ use_input_default
14
+ } from "./chunk-5jbenaez.js";
15
+ import {
16
+ require_react
17
+ } from "./chunk-vcp9fp2w.js";
18
+ import {
19
+ copyText,
20
+ downloadText
21
+ } from "./chunk-fkzq5m59.js";
22
+ import"./chunk-543135qd.js";
23
+ import"./chunk-hst78da7.js";
24
+ import"./chunk-3sfn889r.js";
25
+ import {
26
+ __toESM
27
+ } from "./chunk-9wyra8hs.js";
28
+
29
+ // src/commands/screens/ScreensView.tsx
30
+ var import_react = __toESM(require_react(), 1);
31
+ var jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
32
+ function ScreensView({ projectId, projectTitle, screens }) {
33
+ const { exit } = use_app_default();
34
+ const [selectedIndex, setSelectedIndex] = import_react.useState(0);
35
+ const [windowStart, setWindowStart] = import_react.useState(0);
36
+ const [status, setStatus] = import_react.useState("");
37
+ const [serverUrl, setServerUrl] = import_react.useState(null);
38
+ const serverRef = import_react.useRef(null);
39
+ const VIEW_HEIGHT = 10;
40
+ import_react.default.useEffect(() => {
41
+ if (selectedIndex < windowStart) {
42
+ setWindowStart(selectedIndex);
43
+ } else if (selectedIndex >= windowStart + VIEW_HEIGHT) {
44
+ setWindowStart(selectedIndex - VIEW_HEIGHT + 1);
45
+ }
46
+ }, [selectedIndex, windowStart, VIEW_HEIGHT]);
47
+ import_react.useEffect(() => {
48
+ return () => {
49
+ if (serverRef.current)
50
+ serverRef.current.stop();
51
+ };
52
+ }, []);
53
+ async function serveScreen(screen) {
54
+ if (!screen.hasCode || !screen.codeUrl) {
55
+ setStatus("No HTML to serve");
56
+ return;
57
+ }
58
+ setStatus("Preparing server...");
59
+ let srv = serverRef.current;
60
+ let url = serverUrl;
61
+ let justStarted = false;
62
+ if (!srv) {
63
+ srv = new StitchViteServer;
64
+ url = await srv.start(0);
65
+ serverRef.current = srv;
66
+ setServerUrl(url);
67
+ justStarted = true;
68
+ }
69
+ if (!url)
70
+ return;
71
+ try {
72
+ const html = await downloadText(screen.codeUrl);
73
+ const route = `/screens/${screen.screenId}`;
74
+ srv.mount(route, html);
75
+ const fullUrl = `${url}${route}`;
76
+ if (justStarted) {
77
+ openUrl(fullUrl);
78
+ } else {
79
+ srv.navigate(fullUrl);
80
+ }
81
+ setStatus(`Serving at ${fullUrl}`);
82
+ } catch (e) {
83
+ setStatus("Error serving screen");
84
+ }
85
+ }
86
+ use_input_default((input, key) => {
87
+ if (input === "q") {
88
+ exit();
89
+ return;
90
+ }
91
+ if (key.upArrow || input === "k") {
92
+ setSelectedIndex((prev) => Math.max(0, prev - 1));
93
+ setStatus("");
94
+ }
95
+ if (key.downArrow || input === "j") {
96
+ setSelectedIndex((prev) => Math.min(screens.length - 1, prev + 1));
97
+ setStatus("");
98
+ }
99
+ if (input === "c") {
100
+ const screen = screens[selectedIndex];
101
+ if (screen?.hasCode && screen.codeUrl) {
102
+ setStatus("Copying...");
103
+ downloadText(screen.codeUrl).then((code) => {
104
+ copyText(code);
105
+ setStatus("HTML copied!");
106
+ }).catch(() => setStatus("Failed to copy"));
107
+ } else {
108
+ setStatus("No HTML available");
109
+ }
110
+ }
111
+ if (input === "i") {
112
+ const screen = screens[selectedIndex];
113
+ if (screen?.hasImage) {
114
+ setStatus("Image copy not implemented");
115
+ } else {
116
+ setStatus("No image available");
117
+ }
118
+ }
119
+ if (input === "s") {
120
+ const screen = screens[selectedIndex];
121
+ if (screen) {
122
+ serveScreen(screen);
123
+ }
124
+ }
125
+ });
126
+ const visibleScreens = screens.slice(windowStart, windowStart + VIEW_HEIGHT);
127
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
128
+ flexDirection: "column",
129
+ padding: 1,
130
+ children: [
131
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
132
+ bold: true,
133
+ children: [
134
+ projectTitle,
135
+ " (",
136
+ screens.length,
137
+ " screens)"
138
+ ]
139
+ }, undefined, true, undefined, this),
140
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
141
+ dimColor: true,
142
+ children: [
143
+ "projectId: ",
144
+ projectId
145
+ ]
146
+ }, undefined, true, undefined, this),
147
+ serverUrl && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
148
+ dimColor: true,
149
+ children: [
150
+ "Server: ",
151
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
152
+ color: "green",
153
+ children: serverUrl
154
+ }, undefined, false, undefined, this)
155
+ ]
156
+ }, undefined, true, undefined, this),
157
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
158
+ children: " "
159
+ }, undefined, false, undefined, this),
160
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
161
+ flexDirection: "column",
162
+ borderStyle: "single",
163
+ borderColor: "yellow",
164
+ paddingX: 1,
165
+ children: [
166
+ windowStart > 0 && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
167
+ dimColor: true,
168
+ children: [
169
+ "... ",
170
+ windowStart,
171
+ " more above ..."
172
+ ]
173
+ }, undefined, true, undefined, this),
174
+ visibleScreens.map((screen, index) => {
175
+ const absoluteIndex = windowStart + index;
176
+ const isSelected = absoluteIndex === selectedIndex;
177
+ const num = String(absoluteIndex + 1).padStart(2, " ");
178
+ const selector = isSelected ? "▸" : " ";
179
+ return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
180
+ flexDirection: "column",
181
+ children: [
182
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
183
+ justifyContent: "space-between",
184
+ children: [
185
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
186
+ children: [
187
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
188
+ dimColor: true,
189
+ children: num
190
+ }, undefined, false, undefined, this),
191
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
192
+ color: isSelected ? "cyan" : undefined,
193
+ children: [
194
+ " ",
195
+ selector,
196
+ " "
197
+ ]
198
+ }, undefined, true, undefined, this),
199
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
200
+ color: isSelected ? "cyan" : undefined,
201
+ bold: isSelected,
202
+ children: screen.title.slice(0, 28)
203
+ }, undefined, false, undefined, this)
204
+ ]
205
+ }, undefined, true, undefined, this),
206
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
207
+ children: [
208
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
209
+ dimColor: true,
210
+ children: "html"
211
+ }, undefined, false, undefined, this),
212
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
213
+ color: screen.hasCode ? "green" : "gray",
214
+ children: screen.hasCode ? "[✓]" : "[ ]"
215
+ }, undefined, false, undefined, this),
216
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
217
+ children: " "
218
+ }, undefined, false, undefined, this),
219
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
220
+ dimColor: true,
221
+ children: "img"
222
+ }, undefined, false, undefined, this),
223
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
224
+ color: screen.hasImage ? "green" : "gray",
225
+ children: screen.hasImage ? "[✓]" : "[ ]"
226
+ }, undefined, false, undefined, this)
227
+ ]
228
+ }, undefined, true, undefined, this)
229
+ ]
230
+ }, undefined, true, undefined, this),
231
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
232
+ dimColor: true,
233
+ color: "gray",
234
+ children: [
235
+ " screenId: ",
236
+ screen.screenId
237
+ ]
238
+ }, undefined, true, undefined, this),
239
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
240
+ children: " "
241
+ }, undefined, false, undefined, this)
242
+ ]
243
+ }, screen.screenId, true, undefined, this);
244
+ }),
245
+ windowStart + VIEW_HEIGHT < screens.length && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
246
+ dimColor: true,
247
+ children: [
248
+ "... ",
249
+ screens.length - (windowStart + VIEW_HEIGHT),
250
+ " more below ..."
251
+ ]
252
+ }, undefined, true, undefined, this)
253
+ ]
254
+ }, undefined, true, undefined, this),
255
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
256
+ dimColor: true,
257
+ children: "[c]opy html [i]mage [s]erve [q]uit"
258
+ }, undefined, false, undefined, this),
259
+ status && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
260
+ color: "yellow",
261
+ children: status
262
+ }, undefined, false, undefined, this)
263
+ ]
264
+ }, undefined, true, undefined, this);
265
+ }
266
+ export {
267
+ ScreensView
268
+ };
269
+
270
+ //# debugId=960621E15D89B58B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/screens/ScreensView.tsx"],
4
+ "sourcesContent": [
5
+ "import React, { useState, useEffect, useRef } from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\nimport { downloadText, copyText } from '../../ui/copy-behaviors/clipboard.js';\nimport { StitchViteServer } from '../../lib/server/vite/StitchViteServer.js';\nimport { openUrl } from '../../platform/browser.js';\n\ninterface Screen {\n screenId: string;\n title: string;\n hasCode: boolean;\n codeUrl: string | null;\n hasImage: boolean;\n}\n\ninterface ScreensViewProps {\n projectId: string;\n projectTitle: string;\n screens: Screen[];\n}\n\nexport function ScreensView({ projectId, projectTitle, screens }: ScreensViewProps) {\n const { exit } = useApp();\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [windowStart, setWindowStart] = useState(0);\n const [status, setStatus] = useState('');\n const [serverUrl, setServerUrl] = useState<string | null>(null);\n\n const serverRef = useRef<StitchViteServer | null>(null);\n\n const VIEW_HEIGHT = 10;\n\n // Helper to sync window with selection\n React.useEffect(() => {\n if (selectedIndex < windowStart) {\n setWindowStart(selectedIndex);\n } else if (selectedIndex >= windowStart + VIEW_HEIGHT) {\n setWindowStart(selectedIndex - VIEW_HEIGHT + 1);\n }\n }, [selectedIndex, windowStart, VIEW_HEIGHT]);\n\n useEffect(() => {\n return () => {\n if (serverRef.current) serverRef.current.stop();\n };\n }, []);\n\n async function serveScreen(screen: Screen) {\n if (!screen.hasCode || !screen.codeUrl) {\n setStatus('No HTML to serve');\n return;\n }\n\n setStatus('Preparing server...');\n let srv = serverRef.current;\n let url = serverUrl;\n let justStarted = false;\n\n if (!srv) {\n srv = new StitchViteServer();\n url = await srv.start(0);\n serverRef.current = srv;\n setServerUrl(url);\n justStarted = true;\n }\n\n if (!url) return; // Should not happen\n\n try {\n const html = await downloadText(screen.codeUrl);\n const route = `/screens/${screen.screenId}`;\n srv.mount(route, html);\n\n const fullUrl = `${url}${route}`;\n\n if (justStarted) {\n openUrl(fullUrl);\n } else {\n srv.navigate(fullUrl);\n }\n setStatus(`Serving at ${fullUrl}`);\n } catch (e) {\n setStatus('Error serving screen');\n }\n }\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n\n if (key.upArrow || input === 'k') {\n setSelectedIndex(prev => Math.max(0, prev - 1));\n setStatus('');\n }\n\n if (key.downArrow || input === 'j') {\n setSelectedIndex(prev => Math.min(screens.length - 1, prev + 1));\n setStatus('');\n }\n\n // Copy code\n if (input === 'c') {\n const screen = screens[selectedIndex];\n if (screen?.hasCode && screen.codeUrl) {\n setStatus('Copying...');\n downloadText(screen.codeUrl)\n .then(code => {\n copyText(code);\n setStatus('HTML copied!');\n })\n .catch(() => setStatus('Failed to copy'));\n } else {\n setStatus('No HTML available');\n }\n }\n\n // Copy image (placeholder)\n if (input === 'i') {\n const screen = screens[selectedIndex];\n if (screen?.hasImage) {\n setStatus('Image copy not implemented');\n } else {\n setStatus('No image available');\n }\n }\n\n // Serve\n if (input === 's') {\n const screen = screens[selectedIndex];\n if (screen) {\n serveScreen(screen);\n }\n }\n });\n\n const visibleScreens = screens.slice(windowStart, windowStart + VIEW_HEIGHT);\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n {/* Header */}\n <Text bold>{projectTitle} ({screens.length} screens)</Text>\n <Text dimColor>projectId: {projectId}</Text>\n {serverUrl && <Text dimColor>Server: <Text color=\"green\">{serverUrl}</Text></Text>}\n <Text> </Text>\n\n {/* Screen List */}\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"yellow\" paddingX={1}>\n {windowStart > 0 && <Text dimColor>... {windowStart} more above ...</Text>}\n\n {visibleScreens.map((screen, index) => {\n // Adjust index for absolute position\n const absoluteIndex = windowStart + index;\n const isSelected = absoluteIndex === selectedIndex;\n const num = String(absoluteIndex + 1).padStart(2, ' ');\n const selector = isSelected ? '▸' : ' ';\n\n return (\n <Box key={screen.screenId} flexDirection=\"column\">\n {/* Row 1: Title + Checkboxes */}\n <Box justifyContent=\"space-between\">\n <Box>\n <Text dimColor>{num}</Text>\n <Text color={isSelected ? 'cyan' : undefined}> {selector} </Text>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {screen.title.slice(0, 28)}\n </Text>\n </Box>\n <Box>\n <Text dimColor>html</Text>\n <Text color={screen.hasCode ? 'green' : 'gray'}>\n {screen.hasCode ? '[✓]' : '[ ]'}\n </Text>\n <Text> </Text>\n <Text dimColor>img</Text>\n <Text color={screen.hasImage ? 'green' : 'gray'}>\n {screen.hasImage ? '[✓]' : '[ ]'}\n </Text>\n </Box>\n </Box>\n {/* Row 2: screenId */}\n <Text dimColor color=\"gray\"> screenId: {screen.screenId}</Text>\n <Text> </Text>\n </Box>\n );\n })}\n\n {windowStart + VIEW_HEIGHT < screens.length && (\n <Text dimColor>... {screens.length - (windowStart + VIEW_HEIGHT)} more below ...</Text>\n )}\n </Box>\n\n {/* Footer */}\n <Text dimColor>[c]opy html [i]mage [s]erve [q]uit</Text>\n {status && <Text color=\"yellow\">{status}</Text>}\n </Box>\n );\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "960621E15D89B58B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,20 @@
1
+ import {
2
+ SiteBuilder
3
+ } from "./chunk-jfd5md63.js";
4
+ import"./chunk-6gw9apqb.js";
5
+ import"./chunk-a5xra9jn.js";
6
+ import"./chunk-mp1sf8x6.js";
7
+ import"./chunk-tebher8z.js";
8
+ import"./chunk-sqhdg0mf.js";
9
+ import"./chunk-5jbenaez.js";
10
+ import"./chunk-vcp9fp2w.js";
11
+ import"./chunk-543135qd.js";
12
+ import"./chunk-nq68kghz.js";
13
+ import"./chunk-hst78da7.js";
14
+ import"./chunk-3sfn889r.js";
15
+ import"./chunk-9wyra8hs.js";
16
+ export {
17
+ SiteBuilder
18
+ };
19
+
20
+ //# debugId=CDBCAFF7B7D033B964756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "CDBCAFF7B7D033B964756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ DoctorHandler
3
+ } from "./chunk-snv6a65k.js";
4
+ import"./chunk-qnd877d5.js";
5
+ import"./chunk-7ryqstaa.js";
6
+ import"./chunk-nq68kghz.js";
7
+ import"./chunk-q6sv0243.js";
8
+ import"./chunk-f2hq6bfv.js";
9
+ import"./chunk-kbtqrkwh.js";
10
+ import"./chunk-3sfn889r.js";
11
+ import"./chunk-c6ge431q.js";
12
+ import"./chunk-9wyra8hs.js";
13
+ export {
14
+ DoctorHandler
15
+ };
16
+
17
+ //# debugId=7AA9461C2AC3B5F864756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "7AA9461C2AC3B5F864756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ DoctorHandler
3
+ } from "./chunk-xzjkaqe9.js";
4
+ import"./chunk-ef1c6gq5.js";
5
+ import"./chunk-nq68kghz.js";
6
+ import"./chunk-appd0sxm.js";
7
+ import"./chunk-f2hq6bfv.js";
8
+ import"./chunk-hst78da7.js";
9
+ import"./chunk-kbtqrkwh.js";
10
+ import"./chunk-3sfn889r.js";
11
+ import"./chunk-c6ge431q.js";
12
+ import"./chunk-9wyra8hs.js";
13
+ export {
14
+ DoctorHandler
15
+ };
16
+
17
+ //# debugId=7AA9461C2AC3B5F864756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "7AA9461C2AC3B5F864756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,94 @@
1
+ import {
2
+ render_default
3
+ } from "./chunk-5jbenaez.js";
4
+ import"./chunk-vcp9fp2w.js";
5
+ import"./chunk-hst78da7.js";
6
+ import"./chunk-3sfn889r.js";
7
+ import"./chunk-9wyra8hs.js";
8
+
9
+ // node_modules/ink-testing-library/build/index.js
10
+ import { EventEmitter } from "node:events";
11
+ class Stdout extends EventEmitter {
12
+ get columns() {
13
+ return 100;
14
+ }
15
+ frames = [];
16
+ _lastFrame;
17
+ write = (frame) => {
18
+ this.frames.push(frame);
19
+ this._lastFrame = frame;
20
+ };
21
+ lastFrame = () => this._lastFrame;
22
+ }
23
+
24
+ class Stderr extends EventEmitter {
25
+ frames = [];
26
+ _lastFrame;
27
+ write = (frame) => {
28
+ this.frames.push(frame);
29
+ this._lastFrame = frame;
30
+ };
31
+ lastFrame = () => this._lastFrame;
32
+ }
33
+
34
+ class Stdin extends EventEmitter {
35
+ isTTY = true;
36
+ data = null;
37
+ constructor(options = {}) {
38
+ super();
39
+ this.isTTY = options.isTTY ?? true;
40
+ }
41
+ write = (data) => {
42
+ this.data = data;
43
+ this.emit("readable");
44
+ this.emit("data", data);
45
+ };
46
+ setEncoding() {}
47
+ setRawMode() {}
48
+ resume() {}
49
+ pause() {}
50
+ ref() {}
51
+ unref() {}
52
+ read = () => {
53
+ const { data } = this;
54
+ this.data = null;
55
+ return data;
56
+ };
57
+ }
58
+ var instances = [];
59
+ var render = (tree) => {
60
+ const stdout = new Stdout;
61
+ const stderr = new Stderr;
62
+ const stdin = new Stdin;
63
+ const instance = render_default(tree, {
64
+ stdout,
65
+ stderr,
66
+ stdin,
67
+ debug: true,
68
+ exitOnCtrlC: false,
69
+ patchConsole: false
70
+ });
71
+ instances.push(instance);
72
+ return {
73
+ rerender: instance.rerender,
74
+ unmount: instance.unmount,
75
+ cleanup: instance.cleanup,
76
+ stdout,
77
+ stderr,
78
+ stdin,
79
+ frames: stdout.frames,
80
+ lastFrame: stdout.lastFrame
81
+ };
82
+ };
83
+ var cleanup = () => {
84
+ for (const instance of instances) {
85
+ instance.unmount();
86
+ instance.cleanup();
87
+ }
88
+ };
89
+ export {
90
+ render,
91
+ cleanup
92
+ };
93
+
94
+ //# debugId=AB4AFCB358C7E08B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/ink-testing-library/build/index.js"],
4
+ "sourcesContent": [
5
+ "import { EventEmitter } from 'node:events';\nimport { render as inkRender } from 'ink';\nclass Stdout extends EventEmitter {\n get columns() {\n return 100;\n }\n frames = [];\n _lastFrame;\n write = (frame) => {\n this.frames.push(frame);\n this._lastFrame = frame;\n };\n lastFrame = () => this._lastFrame;\n}\nclass Stderr extends EventEmitter {\n frames = [];\n _lastFrame;\n write = (frame) => {\n this.frames.push(frame);\n this._lastFrame = frame;\n };\n lastFrame = () => this._lastFrame;\n}\nclass Stdin extends EventEmitter {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n isTTY = true;\n data = null; // eslint-disable-line @typescript-eslint/ban-types\n constructor(options = {}) {\n super();\n this.isTTY = options.isTTY ?? true;\n }\n write = (data) => {\n this.data = data;\n this.emit('readable');\n this.emit('data', data);\n };\n setEncoding() {\n // Do nothing\n }\n setRawMode() {\n // Do nothing\n }\n resume() {\n // Do nothing\n }\n pause() {\n // Do nothing\n }\n ref() {\n // Do nothing\n }\n unref() {\n // Do nothing\n }\n // eslint-disable-next-line @typescript-eslint/ban-types\n read = () => {\n const { data } = this;\n this.data = null;\n return data;\n };\n}\nconst instances = [];\nexport const render = (tree) => {\n const stdout = new Stdout();\n const stderr = new Stderr();\n const stdin = new Stdin();\n const instance = inkRender(tree, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n stdout: stdout,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n stderr: stderr,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n stdin: stdin,\n debug: true,\n exitOnCtrlC: false,\n patchConsole: false,\n });\n instances.push(instance);\n return {\n rerender: instance.rerender,\n unmount: instance.unmount,\n cleanup: instance.cleanup,\n stdout,\n stderr,\n stdin,\n frames: stdout.frames,\n lastFrame: stdout.lastFrame,\n };\n};\nexport const cleanup = () => {\n for (const instance of instances) {\n instance.unmount();\n instance.cleanup();\n }\n};\n//# sourceMappingURL=index.js.map"
6
+ ],
7
+ "mappings": ";;;;;;;;;AAAA;AAEA,MAAM,eAAe,aAAa;AAAA,MAC1B,OAAO,GAAG;AAAA,IACV,OAAO;AAAA;AAAA,EAEX,SAAS,CAAC;AAAA,EACV;AAAA,EACA,QAAQ,CAAC,UAAU;AAAA,IACf,KAAK,OAAO,KAAK,KAAK;AAAA,IACtB,KAAK,aAAa;AAAA;AAAA,EAEtB,YAAY,MAAM,KAAK;AAC3B;AAAA;AACA,MAAM,eAAe,aAAa;AAAA,EAC9B,SAAS,CAAC;AAAA,EACV;AAAA,EACA,QAAQ,CAAC,UAAU;AAAA,IACf,KAAK,OAAO,KAAK,KAAK;AAAA,IACtB,KAAK,aAAa;AAAA;AAAA,EAEtB,YAAY,MAAM,KAAK;AAC3B;AAAA;AACA,MAAM,cAAc,aAAa;AAAA,EAE7B,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW,CAAC,UAAU,CAAC,GAAG;AAAA,IACtB,MAAM;AAAA,IACN,KAAK,QAAQ,QAAQ,SAAS;AAAA;AAAA,EAElC,QAAQ,CAAC,SAAS;AAAA,IACd,KAAK,OAAO;AAAA,IACZ,KAAK,KAAK,UAAU;AAAA,IACpB,KAAK,KAAK,QAAQ,IAAI;AAAA;AAAA,EAE1B,WAAW,GAAG;AAAA,EAGd,UAAU,GAAG;AAAA,EAGb,MAAM,GAAG;AAAA,EAGT,KAAK,GAAG;AAAA,EAGR,GAAG,GAAG;AAAA,EAGN,KAAK,GAAG;AAAA,EAIR,OAAO,MAAM;AAAA,IACT,QAAQ,SAAS;AAAA,IACjB,KAAK,OAAO;AAAA,IACZ,OAAO;AAAA;AAEf;AACA,IAAM,YAAY,CAAC;AACZ,IAAM,SAAS,CAAC,SAAS;AAAA,EAC5B,MAAM,SAAS,IAAI;AAAA,EACnB,MAAM,SAAS,IAAI;AAAA,EACnB,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,WAAW,eAAU,MAAM;AAAA,IAE7B;AAAA,IAEA;AAAA,IAEA;AAAA,IACA,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,EAClB,CAAC;AAAA,EACD,UAAU,KAAK,QAAQ;AAAA,EACvB,OAAO;AAAA,IACH,UAAU,SAAS;AAAA,IACnB,SAAS,SAAS;AAAA,IAClB,SAAS,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,WAAW,OAAO;AAAA,EACtB;AAAA;AAEG,IAAM,UAAU,MAAM;AAAA,EACzB,WAAW,YAAY,WAAW;AAAA,IAC9B,SAAS,QAAQ;AAAA,IACjB,SAAS,QAAQ;AAAA,EACrB;AAAA;",
8
+ "debugId": "AB4AFCB358C7E08B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,19 @@
1
+ import {
2
+ SiteBuilder
3
+ } from "./chunk-x6bsgeqa.js";
4
+ import"./chunk-x1tt02n9.js";
5
+ import"./chunk-86gwwcyr.js";
6
+ import"./chunk-7vdj1qwb.js";
7
+ import"./chunk-8yfetpqq.js";
8
+ import"./chunk-b43pzs3z.js";
9
+ import"./chunk-6gw9apqb.js";
10
+ import"./chunk-a5xra9jn.js";
11
+ import"./chunk-nq68kghz.js";
12
+ import"./chunk-q6sv0243.js";
13
+ import"./chunk-3sfn889r.js";
14
+ import"./chunk-9wyra8hs.js";
15
+ export {
16
+ SiteBuilder
17
+ };
18
+
19
+ //# debugId=1C4BD3D870A3482964756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "1C4BD3D870A3482964756E2164756E21",
8
+ "names": []
9
+ }
@@ -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-j1v44zzm.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-f5wqd3z3.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-xtcg74kf.js");
60
+ const React = await import("./chunk-94xqpnv4.js");
61
+ const { InteractiveViewer } = await import("./chunk-f0dt9hv8.js");
62
+ const { ViewHandler } = await import("./chunk-j1v44zzm.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