@_davideast/stitch-mcp 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-hb3c6f6a.js → chunk-001yk06v.js} +2 -2
- package/dist/chunk-0cd2xak4.js +31447 -0
- package/dist/chunk-0cd2xak4.js.map +245 -0
- package/dist/{chunk-9tvppjaf.js → chunk-13mqag7n.js} +8 -10
- package/dist/{chunk-9tvppjaf.js.map → chunk-13mqag7n.js.map} +2 -2
- package/dist/chunk-1dcffh2w.js +1481 -0
- package/dist/chunk-1dcffh2w.js.map +23 -0
- package/dist/{chunk-985f11w6.js → chunk-26cgk4dt.js} +6 -8
- package/dist/{chunk-8yrtq2qs.js.map → chunk-26cgk4dt.js.map} +1 -1
- package/dist/chunk-2kg77g4q.js +167 -0
- package/dist/chunk-2kg77g4q.js.map +10 -0
- package/dist/chunk-34w2wfyp.js +68 -0
- package/dist/chunk-34w2wfyp.js.map +10 -0
- package/dist/chunk-44tn9dxb.js +19 -0
- package/dist/{chunk-985f11w6.js.map → chunk-44tn9dxb.js.map} +1 -1
- package/dist/chunk-5204d23a.js +24 -0
- package/dist/{chunk-ezmw2j8c.js.map → chunk-5204d23a.js.map} +1 -1
- package/dist/{chunk-mv9ssgmx.js → chunk-54wv5ptt.js} +5 -5
- package/dist/{chunk-mv9ssgmx.js.map → chunk-54wv5ptt.js.map} +2 -2
- package/dist/chunk-5dghg77b.js +16970 -0
- package/dist/chunk-5dghg77b.js.map +26 -0
- package/dist/{chunk-r2sg2nxa.js → chunk-5f2htt6r.js} +6 -7
- package/dist/chunk-5f2htt6r.js.map +9 -0
- package/dist/chunk-6gw9apqb.js +20 -0
- package/dist/chunk-6gw9apqb.js.map +10 -0
- package/dist/chunk-7bt2055x.js +39 -0
- package/dist/chunk-7bt2055x.js.map +10 -0
- package/dist/chunk-7egq85x5.js +273 -0
- package/dist/chunk-7egq85x5.js.map +10 -0
- package/dist/chunk-7pf2vfq9.js +69 -0
- package/dist/chunk-7pf2vfq9.js.map +10 -0
- package/dist/{chunk-q1nd6g0y.js → chunk-7rrhk07q.js} +76 -53
- package/dist/chunk-7rrhk07q.js.map +20 -0
- package/dist/{chunk-7xh1y383.js → chunk-7xsar3mr.js} +2 -2
- package/dist/{chunk-7xh1y383.js.map → chunk-7xsar3mr.js.map} +1 -1
- package/dist/chunk-7y4xzvkz.js +19132 -0
- package/dist/chunk-7y4xzvkz.js.map +115 -0
- package/dist/chunk-7zy0vdv5.js +761 -0
- package/dist/chunk-7zy0vdv5.js.map +18 -0
- package/dist/chunk-8rt3pp6g.js +256 -0
- package/dist/{chunk-jy2d17pr.js.map → chunk-8rt3pp6g.js.map} +3 -3
- package/dist/chunk-98trrxk2.js +40 -0
- package/dist/chunk-98trrxk2.js.map +10 -0
- package/dist/chunk-a1mk24q9.js +31326 -0
- package/dist/chunk-a1mk24q9.js.map +245 -0
- package/dist/chunk-a5xra9jn.js +159 -0
- package/dist/chunk-a5xra9jn.js.map +11 -0
- package/dist/chunk-abf1r0jh.js +2118 -0
- package/dist/chunk-abf1r0jh.js.map +44 -0
- package/dist/{chunk-25wakzyb.js → chunk-ahw5kfbr.js} +5 -5
- package/dist/chunk-akd997ec.js +11061 -0
- package/dist/chunk-akd997ec.js.map +238 -0
- package/dist/chunk-by28t333.js +19 -0
- package/dist/chunk-by28t333.js.map +9 -0
- package/dist/{chunk-2k7n0w2x.js → chunk-c6ge431q.js} +2 -2
- package/dist/{chunk-2k7n0w2x.js.map → chunk-c6ge431q.js.map} +1 -1
- package/dist/{chunk-ycfxp056.js → chunk-cnmspfhx.js} +7 -11
- package/dist/chunk-cnmspfhx.js.map +17 -0
- package/dist/chunk-cwqdka8y.js +6382 -0
- package/dist/chunk-cwqdka8y.js.map +109 -0
- package/dist/chunk-dffwrtn3.js +673 -0
- package/dist/chunk-dffwrtn3.js.map +17 -0
- package/dist/chunk-dyp9t5wf.js +44109 -0
- package/dist/chunk-dyp9t5wf.js.map +237 -0
- package/dist/chunk-e9881zy4.js +39 -0
- package/dist/chunk-e9881zy4.js.map +10 -0
- package/dist/chunk-ezs0qz0b.js +24 -0
- package/dist/chunk-ezs0qz0b.js.map +9 -0
- package/dist/chunk-f6cq8r7x.js +736 -0
- package/dist/chunk-f6cq8r7x.js.map +16 -0
- package/dist/{chunk-45wx7tn7.js → chunk-gwnmywrp.js} +2 -2
- package/dist/chunk-gz78f003.js +94 -0
- package/dist/chunk-gz78f003.js.map +10 -0
- package/dist/chunk-j0y94q2c.js +10 -0
- package/dist/{chunk-nthabjd9.js → chunk-jyem6j6k.js} +1848 -3
- package/dist/chunk-jyem6j6k.js.map +65 -0
- package/dist/chunk-kad4d9sf.js +11 -0
- package/dist/chunk-kad4d9sf.js.map +9 -0
- package/dist/{chunk-wz8d5vzb.js → chunk-krfqppg2.js} +32 -2
- package/dist/{chunk-wz8d5vzb.js.map → chunk-krfqppg2.js.map} +5 -4
- package/dist/chunk-kw62yeqn.js +124 -0
- package/dist/chunk-kw62yeqn.js.map +12 -0
- package/dist/chunk-mbt1wx7n.js +43 -0
- package/dist/chunk-mbt1wx7n.js.map +10 -0
- package/dist/chunk-nzv6abbc.js +22 -0
- package/dist/chunk-nzv6abbc.js.map +9 -0
- package/dist/{chunk-cwkb2wbe.js → chunk-pjpdhh0f.js} +27 -24
- package/dist/chunk-pjpdhh0f.js.map +16 -0
- package/dist/chunk-py8fhw0k.js +941 -0
- package/dist/chunk-py8fhw0k.js.map +27 -0
- package/dist/chunk-q6sv0243.js +93 -0
- package/dist/chunk-q6sv0243.js.map +13 -0
- package/dist/chunk-r8n5m3xq.js +19 -0
- package/dist/chunk-r8n5m3xq.js.map +9 -0
- package/dist/{chunk-nxpzt33t.js → chunk-rcwtjara.js} +8 -13
- package/dist/chunk-rcwtjara.js.map +10 -0
- package/dist/{chunk-t85nbjjb.js → chunk-rfrcdsfc.js} +5 -9
- package/dist/chunk-rfrcdsfc.js.map +10 -0
- package/dist/chunk-rj2gqxxb.js +415 -0
- package/dist/chunk-rj2gqxxb.js.map +20 -0
- package/dist/{chunk-v7117ywx.js → chunk-rvq1vb70.js} +5 -7
- package/dist/{chunk-v7117ywx.js.map → chunk-rvq1vb70.js.map} +2 -2
- package/dist/chunk-smvqara3.js +370 -0
- package/dist/chunk-smvqara3.js.map +16 -0
- package/dist/{chunk-pfyjtfex.js → chunk-sp8zjpbf.js} +7 -12
- package/dist/chunk-sp8zjpbf.js.map +10 -0
- package/dist/{chunk-48d17n29.js → chunk-ssbg48ec.js} +1 -1
- package/dist/chunk-ssbg48ec.js.map +9 -0
- package/dist/chunk-st7q66e5.js +109 -0
- package/dist/chunk-st7q66e5.js.map +10 -0
- package/dist/{chunk-sdp429xd.js → chunk-sw7h7asn.js} +32 -8
- package/dist/chunk-sw7h7asn.js.map +27 -0
- package/dist/chunk-t092ehvp.js +50 -0
- package/dist/chunk-t092ehvp.js.map +9 -0
- package/dist/{chunk-2cetsfw4.js → chunk-t0xqfse1.js} +50 -9
- package/dist/{chunk-2cetsfw4.js.map → chunk-t0xqfse1.js.map} +8 -3
- package/dist/chunk-v1t5vys5.js +124 -0
- package/dist/chunk-v1t5vys5.js.map +12 -0
- package/dist/chunk-v78rg840.js +137 -0
- package/dist/chunk-v78rg840.js.map +10 -0
- package/dist/chunk-v7xskyzm.js +19 -0
- package/dist/chunk-v7xskyzm.js.map +9 -0
- package/dist/{chunk-jy2d17pr.js → chunk-vjshqjmh.js} +12 -8
- package/dist/chunk-vjshqjmh.js.map +11 -0
- package/dist/chunk-w8075wyx.js +40 -0
- package/dist/chunk-w8075wyx.js.map +10 -0
- package/dist/chunk-wn8mek6a.js +189 -0
- package/dist/chunk-wn8mek6a.js.map +11 -0
- package/dist/{chunk-2kyqsrg2.js → chunk-y447ymks.js} +364 -3
- package/dist/chunk-y447ymks.js.map +18 -0
- package/dist/chunk-yej34vkc.js +247 -0
- package/dist/chunk-yej34vkc.js.map +14 -0
- package/dist/commands/doctor/command.js +2 -2
- package/dist/commands/init/command.js +2 -2
- package/dist/commands/logout/command.js +2 -2
- package/dist/commands/proxy/command.js +4 -5
- package/dist/commands/proxy/command.js.map +3 -3
- package/dist/commands/proxy/handler.d.ts +27 -5
- package/dist/commands/registry.d.ts +2 -0
- package/dist/commands/screens/ScreensView.d.ts +1 -3
- package/dist/commands/screens/command.js +8 -10
- package/dist/commands/screens/command.js.map +3 -3
- package/dist/commands/screens/handler.d.ts +5 -6
- package/dist/commands/serve/command.js +60 -10
- package/dist/commands/serve/command.js.map +7 -5
- package/dist/commands/serve/handler.d.ts +6 -21
- package/dist/commands/serve/json-server/handler.d.ts +8 -0
- package/dist/commands/serve/json-server/spec.d.ts +32 -0
- package/dist/commands/serve/list-screens/handler.d.ts +7 -0
- package/dist/commands/serve/list-screens/spec.d.ts +33 -0
- package/dist/commands/serve/spec.d.ts +30 -0
- package/dist/commands/site/command.js +12 -6
- package/dist/commands/site/command.js.map +4 -4
- package/dist/commands/site/generate/handler.d.ts +8 -0
- package/dist/commands/site/generate/spec.d.ts +44 -0
- package/dist/commands/site/hooks/useProjectHydration.d.ts +2 -2
- package/dist/commands/site/index.d.ts +5 -3
- package/dist/commands/site/list-screens/handler.d.ts +7 -0
- package/dist/commands/site/list-screens/spec.d.ts +33 -0
- package/dist/commands/site/spec.d.ts +6 -0
- package/dist/commands/site/ui/SiteBuilder.d.ts +2 -2
- package/dist/commands/site/utils/fetchWithRetry.d.ts +10 -0
- package/dist/commands/site/utils/suggestRoute.d.ts +1 -0
- package/dist/commands/snapshot/command.js +2 -2
- package/dist/commands/tool/command.js +2 -2
- package/dist/commands/tool/command.js.map +2 -2
- package/dist/commands/tool/context.d.ts +3 -2
- package/dist/commands/tool/handler.d.ts +9 -10
- package/dist/commands/tool/spec.d.ts +3 -2
- package/dist/commands/view/command.js +2 -2
- package/dist/index.js +11 -13
- package/dist/index.js.map +1 -1
- package/dist/platform/browser.d.ts +8 -0
- package/dist/services/mcp-client/client.d.ts +5 -0
- package/dist/services/mcp-client/spec.d.ts +6 -6
- package/dist/services/proxy/spec.d.ts +3 -3
- package/dist/services/stitch-sdk/MockStitchSDK.d.ts +18 -0
- package/dist/services/view/handler.d.ts +3 -3
- package/dist/ui/copy-behaviors/index.d.ts +8 -0
- package/dist/ui/navigation-behaviors/index.d.ts +34 -0
- package/dist/ui/serve-behaviors/index.d.ts +7 -0
- package/package.json +2 -1
- package/dist/chunk-2fcdwvrm.js +0 -54
- package/dist/chunk-2fcdwvrm.js.map +0 -10
- package/dist/chunk-2kyqsrg2.js.map +0 -10
- package/dist/chunk-8yrtq2qs.js +0 -18
- package/dist/chunk-cwkb2wbe.js.map +0 -16
- package/dist/chunk-djhzzcgj.js +0 -362
- package/dist/chunk-djhzzcgj.js.map +0 -13
- package/dist/chunk-ezmw2j8c.js +0 -14
- package/dist/chunk-fwb4fnkp.js +0 -31
- package/dist/chunk-fwb4fnkp.js.map +0 -10
- package/dist/chunk-h18jrqed.js +0 -9517
- package/dist/chunk-h18jrqed.js.map +0 -99
- package/dist/chunk-knbnsf6s.js +0 -92
- package/dist/chunk-knbnsf6s.js.map +0 -10
- package/dist/chunk-nthabjd9.js.map +0 -34
- package/dist/chunk-nxpzt33t.js.map +0 -10
- package/dist/chunk-pfyjtfex.js.map +0 -10
- package/dist/chunk-q1nd6g0y.js.map +0 -20
- package/dist/chunk-q4js8r0z.js +0 -4708
- package/dist/chunk-q4js8r0z.js.map +0 -29
- package/dist/chunk-qv44tmn6.js +0 -289
- package/dist/chunk-qv44tmn6.js.map +0 -13
- package/dist/chunk-r2sg2nxa.js.map +0 -9
- package/dist/chunk-rpxnm86e.js +0 -372
- package/dist/chunk-rpxnm86e.js.map +0 -17
- package/dist/chunk-sdp429xd.js.map +0 -24
- package/dist/chunk-t85nbjjb.js.map +0 -10
- package/dist/chunk-wa64nz8b.js +0 -47
- package/dist/chunk-wa64nz8b.js.map +0 -10
- package/dist/chunk-ycfxp056.js.map +0 -17
- package/dist/chunk-z9d2xc83.js +0 -3256
- package/dist/chunk-z9d2xc83.js.map +0 -84
- package/dist/services/config/handler.d.ts +0 -12
- package/dist/services/config/spec.d.ts +0 -82
- package/dist/src/cli.d.ts +0 -1
- package/dist/src/commands/doctor/handler.d.ts +0 -9
- package/dist/src/commands/doctor/handler.test.d.ts +0 -1
- package/dist/src/commands/doctor/spec.d.ts +0 -130
- package/dist/src/commands/doctor/spec.test.d.ts +0 -1
- package/dist/src/commands/init/handler.d.ts +0 -17
- package/dist/src/commands/init/handler.test.d.ts +0 -1
- package/dist/src/commands/init/spec.d.ts +0 -88
- package/dist/src/commands/init/spec.test.d.ts +0 -1
- package/dist/src/commands/proxy/handler.d.ts +0 -7
- package/dist/src/commands/proxy/handler.test.d.ts +0 -1
- package/dist/src/index.d.ts +0 -13
- package/dist/src/platform/detector.d.ts +0 -29
- package/dist/src/platform/paths.d.ts +0 -20
- package/dist/src/platform/shell.d.ts +0 -26
- package/dist/src/services/gcloud/handler.d.ts +0 -48
- package/dist/src/services/gcloud/handler.test.d.ts +0 -1
- package/dist/src/services/gcloud/spec.d.ts +0 -405
- package/dist/src/services/mcp-config/handler.d.ts +0 -12
- package/dist/src/services/mcp-config/handler.test.d.ts +0 -1
- package/dist/src/services/mcp-config/spec.d.ts +0 -88
- package/dist/src/services/mcp-config/spec.test.d.ts +0 -1
- package/dist/src/services/project/handler.d.ts +0 -11
- package/dist/src/services/project/handler.test.d.ts +0 -1
- package/dist/src/services/project/spec.d.ts +0 -86
- package/dist/src/services/project/spec.test.d.ts +0 -1
- package/dist/src/services/proxy/handler.d.ts +0 -15
- package/dist/src/services/proxy/handler.test.d.ts +0 -1
- package/dist/src/services/proxy/spec.d.ts +0 -83
- package/dist/src/services/proxy/spec.test.d.ts +0 -1
- package/dist/src/services/stitch/handler.d.ts +0 -15
- package/dist/src/services/stitch/handler.test.d.ts +0 -1
- package/dist/src/services/stitch/spec.d.ts +0 -262
- package/dist/src/services/stitch/spec.test.d.ts +0 -1
- package/dist/src/ui/spinner.d.ts +0 -11
- package/dist/src/ui/theme.d.ts +0 -18
- package/dist/src/ui/wizard.d.ts +0 -24
- package/dist/tests/mocks/shell.d.ts +0 -2
- /package/dist/{chunk-hb3c6f6a.js.map → chunk-001yk06v.js.map} +0 -0
- /package/dist/{chunk-25wakzyb.js.map → chunk-ahw5kfbr.js.map} +0 -0
- /package/dist/{chunk-45wx7tn7.js.map → chunk-gwnmywrp.js.map} +0 -0
- /package/dist/{chunk-48d17n29.js.map → chunk-j0y94q2c.js.map} +0 -0
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../src/commands/screens/spec.ts", "../src/commands/screens/command.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { z } from 'zod';\n\nexport const ScreensOptionsSchema = z.object({\n project: z.string(),\n});\n\nexport type ScreensOptions = z.infer<typeof ScreensOptionsSchema>;\n",
|
|
6
|
-
"import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { ScreensOptionsSchema, type ScreensOptions } from './spec.js';\n\nexport const command: CommandDefinition<any, ScreensOptions> = {\n name: 'screens',\n description: 'Explore all screens in a project',\n requiredOptions: [\n { flags: '-p, --project <id>', description: 'Project ID' }\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = ScreensOptionsSchema.parse(options);\n const { ScreensHandler } = await import('./handler.js');\n const { ScreensView } = await import('./ScreensView.js');\n const {
|
|
6
|
+
"import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { ScreensOptionsSchema, type ScreensOptions } from './spec.js';\n\nexport const command: CommandDefinition<any, ScreensOptions> = {\n name: 'screens',\n description: 'Explore all screens in a project',\n requiredOptions: [\n { flags: '-p, --project <id>', description: 'Project ID' }\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = ScreensOptionsSchema.parse(options);\n const { ScreensHandler } = await import('./handler.js');\n const { ScreensView } = await import('./ScreensView.js');\n const { stitch } = await import('@google/stitch-sdk');\n const { render } = await import('ink');\n const React = await import('react');\n\n const handler = new ScreensHandler(stitch);\n const result = await handler.execute(parsedOptions.project);\n\n if (!result.success) {\n console.error(theme.red(`\\n${icons.error} Failed: ${result.error}`));\n process.exit(1);\n }\n\n const createElement = React.createElement || (React.default as any).createElement;\n const instance = render(createElement(ScreensView, {\n projectId: result.projectId,\n projectTitle: result.projectTitle,\n screens: result.screens,\n }));\n await instance.waitUntilExit();\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
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;AAEO,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EAC3C,SAAS,iBAAE,OAAO;AACpB,CAAC;;;ACAM,IAAM,UAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,IACf,EAAE,OAAO,sBAAsB,aAAa,aAAa;AAAA,EAC3D;AAAA,EACA,QAAQ,OAAO,OAAO,YAAY;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,gBAAgB,qBAAqB,MAAM,OAAO;AAAA,MACxD,QAAQ,mBAAmB,MAAa;AAAA,MACxC,QAAQ,gBAAgB,MAAa;AAAA,MACrC,QAAQ,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;AAEO,IAAM,uBAAuB,iBAAE,OAAO;AAAA,EAC3C,SAAS,iBAAE,OAAO;AACpB,CAAC;;;ACAM,IAAM,UAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,IACf,EAAE,OAAO,sBAAsB,aAAa,aAAa;AAAA,EAC3D;AAAA,EACA,QAAQ,OAAO,OAAO,YAAY;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,gBAAgB,qBAAqB,MAAM,OAAO;AAAA,MACxD,QAAQ,mBAAmB,MAAa;AAAA,MACxC,QAAQ,gBAAgB,MAAa;AAAA,MACrC,QAAQ,WAAW,MAAa;AAAA,MAChC,QAAQ,WAAW,MAAa;AAAA,MAChC,MAAM,QAAQ,MAAa;AAAA,MAE3B,MAAM,UAAU,IAAI,eAAe,MAAM;AAAA,MACzC,MAAM,SAAS,MAAM,QAAQ,QAAQ,cAAc,OAAO;AAAA,MAE1D,IAAI,CAAC,OAAO,SAAS;AAAA,QACnB,QAAQ,MAAM,MAAM,IAAI;AAAA,EAAK,MAAM,iBAAiB,OAAO,OAAO,CAAC;AAAA,QACnE,QAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,MAEA,MAAM,gBAAgB,MAAM,iBAAkB,MAAM,QAAgB;AAAA,MACpE,MAAM,WAAW,OAAO,cAAc,aAAa;AAAA,QACjD,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,QACrB,SAAS,OAAO;AAAA,MAClB,CAAC,CAAC;AAAA,MACF,MAAM,SAAS,cAAc;AAAA,MAC7B,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": "0A4B8195BA49A89164756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
2
|
interface Screen {
|
|
3
3
|
screenId: string;
|
|
4
4
|
title: string;
|
|
@@ -6,7 +6,7 @@ interface Screen {
|
|
|
6
6
|
codeUrl: string | null;
|
|
7
7
|
hasImage: boolean;
|
|
8
8
|
}
|
|
9
|
-
type
|
|
9
|
+
type ScreensResult = {
|
|
10
10
|
success: true;
|
|
11
11
|
projectId: string;
|
|
12
12
|
projectTitle: string;
|
|
@@ -16,9 +16,8 @@ type ScreensHandlerResult = {
|
|
|
16
16
|
error: string;
|
|
17
17
|
};
|
|
18
18
|
export declare class ScreensHandler {
|
|
19
|
-
private
|
|
20
|
-
constructor(
|
|
21
|
-
execute(projectId: string): Promise<
|
|
22
|
-
getClient(): StitchMCPClient;
|
|
19
|
+
private readonly stitch;
|
|
20
|
+
constructor(stitch: Stitch);
|
|
21
|
+
execute(projectId: string): Promise<ScreensResult>;
|
|
23
22
|
}
|
|
24
23
|
export {};
|
|
@@ -5,15 +5,37 @@ import {
|
|
|
5
5
|
import"../../chunk-3sfn889r.js";
|
|
6
6
|
import {
|
|
7
7
|
exports_external
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-c6ge431q.js";
|
|
9
9
|
import {
|
|
10
10
|
__require
|
|
11
11
|
} from "../../chunk-9wyra8hs.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/serve/spec.ts
|
|
14
14
|
var ServeOptionsSchema = exports_external.object({
|
|
15
|
-
project: exports_external.string()
|
|
15
|
+
project: exports_external.string(),
|
|
16
|
+
listScreens: exports_external.boolean().default(false),
|
|
17
|
+
json: exports_external.boolean().default(false)
|
|
16
18
|
});
|
|
19
|
+
var ServeErrorCode = exports_external.enum([
|
|
20
|
+
"SCREENS_FETCH_FAILED"
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
// src/commands/serve/list-screens/spec.ts
|
|
24
|
+
var ListScreensInputSchema = exports_external.object({
|
|
25
|
+
projectId: exports_external.string().min(1, "projectId is required")
|
|
26
|
+
});
|
|
27
|
+
var ListScreensErrorCode = exports_external.enum([
|
|
28
|
+
"SCREENS_FETCH_FAILED"
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
// src/commands/serve/json-server/spec.ts
|
|
32
|
+
var JsonServerInputSchema = exports_external.object({
|
|
33
|
+
projectId: exports_external.string().min(1, "projectId is required")
|
|
34
|
+
});
|
|
35
|
+
var JsonServerErrorCode = exports_external.enum([
|
|
36
|
+
"SCREENS_FETCH_FAILED",
|
|
37
|
+
"SERVER_START_FAILED"
|
|
38
|
+
]);
|
|
17
39
|
|
|
18
40
|
// src/commands/serve/command.ts
|
|
19
41
|
var command = {
|
|
@@ -22,20 +44,48 @@ var command = {
|
|
|
22
44
|
requiredOptions: [
|
|
23
45
|
{ flags: "-p, --project <id>", description: "Project ID" }
|
|
24
46
|
],
|
|
47
|
+
options: [
|
|
48
|
+
{ flags: "-l, --list-screens", description: "List all screens with their server paths as JSON", defaultValue: false },
|
|
49
|
+
{ flags: "--json", description: "Start server in non-interactive mode and output JSON when ready", defaultValue: false }
|
|
50
|
+
],
|
|
25
51
|
action: async (_args, options) => {
|
|
26
52
|
try {
|
|
27
53
|
const parsedOptions = ServeOptionsSchema.parse(options);
|
|
28
|
-
const {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
54
|
+
const { stitch } = await import("../../chunk-ezs0qz0b.js");
|
|
55
|
+
if (parsedOptions.listScreens) {
|
|
56
|
+
const input = ListScreensInputSchema.safeParse({ projectId: parsedOptions.project });
|
|
57
|
+
if (!input.success) {
|
|
58
|
+
console.log(JSON.stringify({ success: false, error: { code: "INVALID_INPUT", message: input.error.issues[0]?.message } }, null, 2));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const { ListScreensHandler } = await import("../../chunk-e9881zy4.js");
|
|
62
|
+
const result2 = await new ListScreensHandler(stitch).execute(input.data);
|
|
63
|
+
console.log(JSON.stringify(result2, null, 2));
|
|
64
|
+
process.exit(result2.success ? 0 : 1);
|
|
65
|
+
}
|
|
66
|
+
if (parsedOptions.json) {
|
|
67
|
+
const input = JsonServerInputSchema.safeParse({ projectId: parsedOptions.project });
|
|
68
|
+
if (!input.success) {
|
|
69
|
+
console.log(JSON.stringify({ success: false, error: { code: "INVALID_INPUT", message: input.error.issues[0]?.message } }, null, 2));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const { JsonServerHandler } = await import("../../chunk-7pf2vfq9.js");
|
|
73
|
+
const result2 = await new JsonServerHandler(stitch).execute(input.data);
|
|
74
|
+
console.log(JSON.stringify(result2, null, 2));
|
|
75
|
+
if (!result2.success)
|
|
76
|
+
process.exit(1);
|
|
77
|
+
await new Promise(() => {});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const { ServeHandler } = await import("../../chunk-w8075wyx.js");
|
|
81
|
+
const { ServeView } = await import("../../chunk-2kg77g4q.js");
|
|
82
|
+
const { render } = await import("../../chunk-t092ehvp.js");
|
|
32
83
|
const React = await import("../../chunk-edp6faw2.js");
|
|
33
|
-
const
|
|
34
|
-
const handler = new ServeHandler(client);
|
|
84
|
+
const handler = new ServeHandler(stitch);
|
|
35
85
|
const result = await handler.execute(parsedOptions.project);
|
|
36
86
|
if (!result.success) {
|
|
37
87
|
console.error(theme.red(`
|
|
38
|
-
${icons.error} Failed: ${result.error}`));
|
|
88
|
+
${icons.error} Failed: ${result.error.message}`));
|
|
39
89
|
process.exit(1);
|
|
40
90
|
}
|
|
41
91
|
if (result.screens.length === 0) {
|
|
@@ -62,4 +112,4 @@ export {
|
|
|
62
112
|
command
|
|
63
113
|
};
|
|
64
114
|
|
|
65
|
-
//# debugId=
|
|
115
|
+
//# debugId=858784717F8E4F8B64756E2164756E21
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/commands/serve/spec.ts", "../src/commands/serve/command.ts"],
|
|
3
|
+
"sources": ["../src/commands/serve/spec.ts", "../src/commands/serve/list-screens/spec.ts", "../src/commands/serve/json-server/spec.ts", "../src/commands/serve/command.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { z } from 'zod';\n\nexport const ServeOptionsSchema = z.object({\n project: z.string(),\n});\
|
|
6
|
-
"import {
|
|
5
|
+
"import { z } from 'zod';\n\n// 1. INPUT\nexport const ServeOptionsSchema = z.object({\n project: z.string(),\n listScreens: z.boolean().default(false),\n json: z.boolean().default(false),\n});\nexport type ServeOptions = z.infer<typeof ServeOptionsSchema>;\n\n// 2. ERROR CODES\nexport const ServeErrorCode = z.enum([\n 'SCREENS_FETCH_FAILED',\n]);\nexport type ServeErrorCode = z.infer<typeof ServeErrorCode>;\n\n// 3. RESULT\nexport type ServeSuccess = {\n success: true;\n projectId: string;\n projectTitle: string;\n screens: Array<{ screenId: string; title: string; codeUrl: string }>;\n};\n\nexport type ServeFailure = {\n success: false;\n error: {\n code: ServeErrorCode;\n message: string;\n recoverable: boolean;\n };\n};\n\nexport type ServeResult = ServeSuccess | ServeFailure;\n\n// 4. INTERFACE\nexport interface ServeSpec {\n execute(projectId: string): Promise<ServeResult>;\n}\n",
|
|
6
|
+
"import { z } from 'zod';\n\n// 1. INPUT\nexport const ListScreensInputSchema = z.object({\n projectId: z.string().min(1, 'projectId is required'),\n});\nexport type ListScreensInput = z.infer<typeof ListScreensInputSchema>;\n\n// 2. ERROR CODES\nexport const ListScreensErrorCode = z.enum([\n 'SCREENS_FETCH_FAILED',\n]);\nexport type ListScreensErrorCode = z.infer<typeof ListScreensErrorCode>;\n\n// 3. RESULT\nexport type ListScreensSuccess = {\n success: true;\n projectId: string;\n screens: Array<{\n screenId: string;\n title: string;\n path: string;\n hasHtml: boolean;\n }>;\n};\n\nexport type ListScreensFailure = {\n success: false;\n error: {\n code: ListScreensErrorCode;\n message: string;\n recoverable: boolean;\n };\n};\n\nexport type ListScreensResult = ListScreensSuccess | ListScreensFailure;\n\n// 4. INTERFACE\nexport interface ListScreensSpec {\n execute(input: ListScreensInput): Promise<ListScreensResult>;\n}\n",
|
|
7
|
+
"import { z } from 'zod';\n\n// 1. INPUT\nexport const JsonServerInputSchema = z.object({\n projectId: z.string().min(1, 'projectId is required'),\n});\nexport type JsonServerInput = z.infer<typeof JsonServerInputSchema>;\n\n// 2. ERROR CODES\nexport const JsonServerErrorCode = z.enum([\n 'SCREENS_FETCH_FAILED',\n 'SERVER_START_FAILED',\n]);\nexport type JsonServerErrorCode = z.infer<typeof JsonServerErrorCode>;\n\n// 3. RESULT — emitted once to stdout when server is ready\nexport type JsonServerReady = {\n success: true;\n url: string;\n screens: Array<{ screenId: string; title: string; url: string }>;\n};\n\nexport type JsonServerFailure = {\n success: false;\n error: {\n code: JsonServerErrorCode;\n message: string;\n recoverable: boolean;\n };\n};\n\nexport type JsonServerResult = JsonServerReady | JsonServerFailure;\n\n// 4. INTERFACE\nexport interface JsonServerSpec {\n execute(input: JsonServerInput): Promise<JsonServerResult>;\n}\n",
|
|
8
|
+
"import { type CommandDefinition } from '../../framework/CommandDefinition.js';\nimport { theme, icons } from '../../ui/theme.js';\nimport { ServeOptionsSchema, type ServeOptions } from './spec.js';\nimport { ListScreensInputSchema } from './list-screens/spec.js';\nimport { JsonServerInputSchema } from './json-server/spec.js';\n\nexport const command: CommandDefinition<any, ServeOptions> = {\n name: 'serve',\n description: 'Serve project HTML screens via local web server',\n requiredOptions: [\n { flags: '-p, --project <id>', description: 'Project ID' }\n ],\n options: [\n { flags: '-l, --list-screens', description: 'List all screens with their server paths as JSON', defaultValue: false },\n { flags: '--json', description: 'Start server in non-interactive mode and output JSON when ready', defaultValue: false },\n ],\n action: async (_args, options) => {\n try {\n const parsedOptions = ServeOptionsSchema.parse(options);\n const { stitch } = await import('@google/stitch-sdk');\n\n if (parsedOptions.listScreens) {\n const input = ListScreensInputSchema.safeParse({ projectId: parsedOptions.project });\n if (!input.success) {\n console.log(JSON.stringify({ success: false, error: { code: 'INVALID_INPUT', message: input.error.issues[0]?.message } }, null, 2));\n process.exit(1);\n }\n const { ListScreensHandler } = await import('./list-screens/handler.js');\n const result = await new ListScreensHandler(stitch).execute(input.data);\n console.log(JSON.stringify(result, null, 2));\n process.exit(result.success ? 0 : 1);\n }\n\n if (parsedOptions.json) {\n const input = JsonServerInputSchema.safeParse({ projectId: parsedOptions.project });\n if (!input.success) {\n console.log(JSON.stringify({ success: false, error: { code: 'INVALID_INPUT', message: input.error.issues[0]?.message } }, null, 2));\n process.exit(1);\n }\n const { JsonServerHandler } = await import('./json-server/handler.js');\n const result = await new JsonServerHandler(stitch).execute(input.data);\n console.log(JSON.stringify(result, null, 2));\n if (!result.success) process.exit(1);\n // Keep process alive — server runs until killed\n await new Promise(() => {});\n return;\n }\n\n const { ServeHandler } = await import('./handler.js');\n const { ServeView } = await import('./ServeView.js');\n const { render } = await import('ink');\n const React = await import('react');\n\n const handler = new ServeHandler(stitch);\n const result = await handler.execute(parsedOptions.project);\n\n if (!result.success) {\n console.error(theme.red(`\\n${icons.error} Failed: ${result.error.message}`));\n process.exit(1);\n }\n\n if (result.screens.length === 0) {\n console.log(theme.yellow(`\\n${icons.warning} No screens with HTML code found in this project.`));\n process.exit(0);\n }\n\n const createElement = React.createElement || (React.default as any).createElement;\n const instance = render(createElement(ServeView, {\n projectId: result.projectId,\n projectTitle: result.projectTitle,\n screens: result.screens,\n }));\n await instance.waitUntilExit();\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
9
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;;;
|
|
9
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "858784717F8E4F8B64756E2164756E21",
|
|
10
12
|
"names": []
|
|
11
13
|
}
|
|
@@ -1,22 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
|
+
import type { ServeSpec, ServeResult } from './spec.js';
|
|
3
|
+
export declare class ServeHandler implements ServeSpec {
|
|
4
|
+
private readonly stitch;
|
|
5
|
+
constructor(stitch: Stitch);
|
|
6
|
+
execute(projectId: string): Promise<ServeResult>;
|
|
6
7
|
}
|
|
7
|
-
type ServeHandlerResult = {
|
|
8
|
-
success: true;
|
|
9
|
-
projectId: string;
|
|
10
|
-
projectTitle: string;
|
|
11
|
-
screens: CodeScreen[];
|
|
12
|
-
} | {
|
|
13
|
-
success: false;
|
|
14
|
-
error: string;
|
|
15
|
-
};
|
|
16
|
-
export declare class ServeHandler {
|
|
17
|
-
private client;
|
|
18
|
-
constructor(client: StitchMCPClient);
|
|
19
|
-
execute(projectId: string): Promise<ServeHandlerResult>;
|
|
20
|
-
getClient(): StitchMCPClient;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
|
+
import type { JsonServerSpec, JsonServerInput, JsonServerResult } from './spec.js';
|
|
3
|
+
export declare class JsonServerHandler implements JsonServerSpec {
|
|
4
|
+
private readonly client;
|
|
5
|
+
private readonly downloadHtml;
|
|
6
|
+
constructor(client: Stitch, downloadHtml?: (url: string) => Promise<string>);
|
|
7
|
+
execute(input: JsonServerInput): Promise<JsonServerResult>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const JsonServerInputSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
projectId: string;
|
|
6
|
+
}, {
|
|
7
|
+
projectId: string;
|
|
8
|
+
}>;
|
|
9
|
+
export type JsonServerInput = z.infer<typeof JsonServerInputSchema>;
|
|
10
|
+
export declare const JsonServerErrorCode: z.ZodEnum<["SCREENS_FETCH_FAILED", "SERVER_START_FAILED"]>;
|
|
11
|
+
export type JsonServerErrorCode = z.infer<typeof JsonServerErrorCode>;
|
|
12
|
+
export type JsonServerReady = {
|
|
13
|
+
success: true;
|
|
14
|
+
url: string;
|
|
15
|
+
screens: Array<{
|
|
16
|
+
screenId: string;
|
|
17
|
+
title: string;
|
|
18
|
+
url: string;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
export type JsonServerFailure = {
|
|
22
|
+
success: false;
|
|
23
|
+
error: {
|
|
24
|
+
code: JsonServerErrorCode;
|
|
25
|
+
message: string;
|
|
26
|
+
recoverable: boolean;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export type JsonServerResult = JsonServerReady | JsonServerFailure;
|
|
30
|
+
export interface JsonServerSpec {
|
|
31
|
+
execute(input: JsonServerInput): Promise<JsonServerResult>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
|
+
import type { ListScreensSpec, ListScreensInput, ListScreensResult } from './spec.js';
|
|
3
|
+
export declare class ListScreensHandler implements ListScreensSpec {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Stitch);
|
|
6
|
+
execute(input: ListScreensInput): Promise<ListScreensResult>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ListScreensInputSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
projectId: string;
|
|
6
|
+
}, {
|
|
7
|
+
projectId: string;
|
|
8
|
+
}>;
|
|
9
|
+
export type ListScreensInput = z.infer<typeof ListScreensInputSchema>;
|
|
10
|
+
export declare const ListScreensErrorCode: z.ZodEnum<["SCREENS_FETCH_FAILED"]>;
|
|
11
|
+
export type ListScreensErrorCode = z.infer<typeof ListScreensErrorCode>;
|
|
12
|
+
export type ListScreensSuccess = {
|
|
13
|
+
success: true;
|
|
14
|
+
projectId: string;
|
|
15
|
+
screens: Array<{
|
|
16
|
+
screenId: string;
|
|
17
|
+
title: string;
|
|
18
|
+
path: string;
|
|
19
|
+
hasHtml: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
export type ListScreensFailure = {
|
|
23
|
+
success: false;
|
|
24
|
+
error: {
|
|
25
|
+
code: ListScreensErrorCode;
|
|
26
|
+
message: string;
|
|
27
|
+
recoverable: boolean;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type ListScreensResult = ListScreensSuccess | ListScreensFailure;
|
|
31
|
+
export interface ListScreensSpec {
|
|
32
|
+
execute(input: ListScreensInput): Promise<ListScreensResult>;
|
|
33
|
+
}
|
|
@@ -1,9 +1,39 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const ServeOptionsSchema: z.ZodObject<{
|
|
3
3
|
project: z.ZodString;
|
|
4
|
+
listScreens: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
json: z.ZodDefault<z.ZodBoolean>;
|
|
4
6
|
}, "strip", z.ZodTypeAny, {
|
|
5
7
|
project: string;
|
|
8
|
+
json: boolean;
|
|
9
|
+
listScreens: boolean;
|
|
6
10
|
}, {
|
|
7
11
|
project: string;
|
|
12
|
+
json?: boolean | undefined;
|
|
13
|
+
listScreens?: boolean | undefined;
|
|
8
14
|
}>;
|
|
9
15
|
export type ServeOptions = z.infer<typeof ServeOptionsSchema>;
|
|
16
|
+
export declare const ServeErrorCode: z.ZodEnum<["SCREENS_FETCH_FAILED"]>;
|
|
17
|
+
export type ServeErrorCode = z.infer<typeof ServeErrorCode>;
|
|
18
|
+
export type ServeSuccess = {
|
|
19
|
+
success: true;
|
|
20
|
+
projectId: string;
|
|
21
|
+
projectTitle: string;
|
|
22
|
+
screens: Array<{
|
|
23
|
+
screenId: string;
|
|
24
|
+
title: string;
|
|
25
|
+
codeUrl: string;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
export type ServeFailure = {
|
|
29
|
+
success: false;
|
|
30
|
+
error: {
|
|
31
|
+
code: ServeErrorCode;
|
|
32
|
+
message: string;
|
|
33
|
+
recoverable: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export type ServeResult = ServeSuccess | ServeFailure;
|
|
37
|
+
export interface ServeSpec {
|
|
38
|
+
execute(projectId: string): Promise<ServeResult>;
|
|
39
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import"../../chunk-3sfn889r.js";
|
|
6
6
|
import {
|
|
7
7
|
exports_external
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-c6ge431q.js";
|
|
9
9
|
import {
|
|
10
10
|
__require
|
|
11
11
|
} from "../../chunk-9wyra8hs.js";
|
|
@@ -14,7 +14,9 @@ import {
|
|
|
14
14
|
var SiteOptionsSchema = exports_external.object({
|
|
15
15
|
project: exports_external.string(),
|
|
16
16
|
output: exports_external.string().default("."),
|
|
17
|
-
export: exports_external.boolean().default(false)
|
|
17
|
+
export: exports_external.boolean().default(false),
|
|
18
|
+
listScreens: exports_external.boolean().default(false),
|
|
19
|
+
routes: exports_external.string().optional()
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
// src/commands/site/command.ts
|
|
@@ -26,17 +28,21 @@ var command = {
|
|
|
26
28
|
],
|
|
27
29
|
options: [
|
|
28
30
|
{ flags: "-o, --output <dir>", description: "Output directory", defaultValue: "." },
|
|
29
|
-
{ flags: "-e, --export", description: "Export screen-to-route config as build_site JSON", defaultValue: false }
|
|
31
|
+
{ flags: "-e, --export", description: "Export screen-to-route config as build_site JSON", defaultValue: false },
|
|
32
|
+
{ flags: "-l, --list-screens", description: "List all screens with suggested routes as JSON", defaultValue: false },
|
|
33
|
+
{ flags: "-r, --routes <json>", description: "JSON array of {screenId,route} mappings — generates site without TUI" }
|
|
30
34
|
],
|
|
31
35
|
action: async (_args, options) => {
|
|
32
36
|
try {
|
|
33
37
|
const parsedOptions = SiteOptionsSchema.parse(options);
|
|
34
|
-
const { SiteCommandHandler } = await import("../../chunk-
|
|
38
|
+
const { SiteCommandHandler } = await import("../../chunk-smvqara3.js");
|
|
35
39
|
const handler = new SiteCommandHandler;
|
|
36
40
|
await handler.execute({
|
|
37
41
|
projectId: parsedOptions.project,
|
|
38
42
|
outputDir: parsedOptions.output,
|
|
39
|
-
export: parsedOptions.export
|
|
43
|
+
export: parsedOptions.export,
|
|
44
|
+
listScreens: parsedOptions.listScreens,
|
|
45
|
+
routes: parsedOptions.routes
|
|
40
46
|
});
|
|
41
47
|
process.exit(0);
|
|
42
48
|
} catch (error) {
|
|
@@ -50,4 +56,4 @@ export {
|
|
|
50
56
|
command
|
|
51
57
|
};
|
|
52
58
|
|
|
53
|
-
//# debugId=
|
|
59
|
+
//# debugId=CF45C32F9225794964756E2164756E21
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/commands/site/spec.ts", "../src/commands/site/command.ts"],
|
|
4
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 }
|
|
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 listScreens: z.boolean().default(false),\n routes: z.string().optional(),\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 { flags: '-l, --list-screens', description: 'List all screens with suggested routes as JSON', defaultValue: false },\n { flags: '-r, --routes <json>', description: 'JSON array of {screenId,route} mappings — generates site without TUI' },\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 listScreens: parsedOptions.listScreens,\n routes: parsedOptions.routes,\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
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;
|
|
9
|
-
"debugId": "
|
|
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;AAAA,EACjC,aAAa,iBAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACtC,QAAQ,iBAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;;;ACJM,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,IAC9G,EAAE,OAAO,sBAAsB,aAAa,kDAAkD,cAAc,MAAM;AAAA,IAClH,EAAE,OAAO,uBAAuB,aAAa,uEAAsE;AAAA,EACrH;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,QACpB,WAAW,cAAc;AAAA,QACzB,WAAW,cAAc;AAAA,QACzB,QAAQ,cAAc;AAAA,QACtB,aAAa,cAAc;AAAA,QAC3B,QAAQ,cAAc;AAAA,MACxB,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": "CF45C32F9225794964756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
|
+
import type { GenerateSpec, GenerateInput, GenerateResult } from './spec.js';
|
|
3
|
+
export declare class GenerateHandler implements GenerateSpec {
|
|
4
|
+
private readonly client;
|
|
5
|
+
private readonly fetchHtml;
|
|
6
|
+
constructor(client: Stitch, fetchHtml?: (url: string) => Promise<string>);
|
|
7
|
+
execute(input: GenerateInput): Promise<GenerateResult>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const GenerateInputSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
routesJson: z.ZodEffects<z.ZodString, {
|
|
5
|
+
screenId: string;
|
|
6
|
+
route: string;
|
|
7
|
+
}[], string>;
|
|
8
|
+
outputDir: z.ZodDefault<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
projectId: string;
|
|
11
|
+
routesJson: {
|
|
12
|
+
screenId: string;
|
|
13
|
+
route: string;
|
|
14
|
+
}[];
|
|
15
|
+
outputDir: string;
|
|
16
|
+
}, {
|
|
17
|
+
projectId: string;
|
|
18
|
+
routesJson: string;
|
|
19
|
+
outputDir?: string | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type GenerateInput = z.infer<typeof GenerateInputSchema>;
|
|
22
|
+
export declare const GenerateErrorCode: z.ZodEnum<["INVALID_ROUTES", "SCREEN_NOT_FOUND", "HTML_FETCH_FAILED", "GENERATE_FAILED"]>;
|
|
23
|
+
export type GenerateErrorCode = z.infer<typeof GenerateErrorCode>;
|
|
24
|
+
export type GenerateSuccess = {
|
|
25
|
+
success: true;
|
|
26
|
+
outputDir: string;
|
|
27
|
+
pages: Array<{
|
|
28
|
+
screenId: string;
|
|
29
|
+
route: string;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
export type GenerateFailure = {
|
|
33
|
+
success: false;
|
|
34
|
+
error: {
|
|
35
|
+
code: GenerateErrorCode;
|
|
36
|
+
message: string;
|
|
37
|
+
hint?: string;
|
|
38
|
+
recoverable: boolean;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export type GenerateResult = GenerateSuccess | GenerateFailure;
|
|
42
|
+
export interface GenerateSpec {
|
|
43
|
+
execute(input: GenerateInput): Promise<GenerateResult>;
|
|
44
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { StitchViteServer } from '../../../lib/server/vite/StitchViteServer.js';
|
|
2
|
-
import { ProjectSyncer } from '../utils/ProjectSyncer.js';
|
|
3
2
|
import type { UIScreen } from '../../../lib/services/site/types.js';
|
|
4
3
|
export type HydrationStatus = 'idle' | 'downloading' | 'ready' | 'error';
|
|
5
|
-
export
|
|
4
|
+
export type FetchContentFn = (url: string) => Promise<string>;
|
|
5
|
+
export declare function useProjectHydration(screens: UIScreen[], server: StitchViteServer | null, fetchContent: FetchContentFn, activeScreenId?: string): {
|
|
6
6
|
hydrationStatus: HydrationStatus;
|
|
7
7
|
progress: number;
|
|
8
8
|
htmlContent: Map<string, string>;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
2
|
interface SiteCommandOptions {
|
|
3
3
|
projectId: string;
|
|
4
4
|
outputDir?: string;
|
|
5
5
|
export?: boolean;
|
|
6
|
+
listScreens?: boolean;
|
|
7
|
+
routes?: string;
|
|
6
8
|
}
|
|
7
9
|
export declare class SiteCommandHandler {
|
|
8
|
-
private client
|
|
9
|
-
constructor(client?:
|
|
10
|
+
private client;
|
|
11
|
+
constructor(client?: Stitch);
|
|
10
12
|
execute(options: SiteCommandOptions): Promise<void>;
|
|
11
13
|
}
|
|
12
14
|
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
2
|
+
import type { ListScreensSpec, ListScreensInput, ListScreensResult } from './spec.js';
|
|
3
|
+
export declare class ListScreensHandler implements ListScreensSpec {
|
|
4
|
+
private readonly client;
|
|
5
|
+
constructor(client: Stitch);
|
|
6
|
+
execute(input: ListScreensInput): Promise<ListScreensResult>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ListScreensInputSchema: z.ZodObject<{
|
|
3
|
+
projectId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
projectId: string;
|
|
6
|
+
}, {
|
|
7
|
+
projectId: string;
|
|
8
|
+
}>;
|
|
9
|
+
export type ListScreensInput = z.infer<typeof ListScreensInputSchema>;
|
|
10
|
+
export declare const ListScreensErrorCode: z.ZodEnum<["PROJECT_NOT_FOUND", "SCREENS_FETCH_FAILED"]>;
|
|
11
|
+
export type ListScreensErrorCode = z.infer<typeof ListScreensErrorCode>;
|
|
12
|
+
export type ListScreensSuccess = {
|
|
13
|
+
success: true;
|
|
14
|
+
projectId: string;
|
|
15
|
+
screens: Array<{
|
|
16
|
+
screenId: string;
|
|
17
|
+
title: string;
|
|
18
|
+
suggestedRoute: string;
|
|
19
|
+
hasHtml: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
export type ListScreensFailure = {
|
|
23
|
+
success: false;
|
|
24
|
+
error: {
|
|
25
|
+
code: ListScreensErrorCode;
|
|
26
|
+
message: string;
|
|
27
|
+
recoverable: boolean;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export type ListScreensResult = ListScreensSuccess | ListScreensFailure;
|
|
31
|
+
export interface ListScreensSpec {
|
|
32
|
+
execute(input: ListScreensInput): Promise<ListScreensResult>;
|
|
33
|
+
}
|
|
@@ -3,13 +3,19 @@ export declare const SiteOptionsSchema: z.ZodObject<{
|
|
|
3
3
|
project: z.ZodString;
|
|
4
4
|
output: z.ZodDefault<z.ZodString>;
|
|
5
5
|
export: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
+
listScreens: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
routes: z.ZodOptional<z.ZodString>;
|
|
6
8
|
}, "strip", z.ZodTypeAny, {
|
|
7
9
|
project: string;
|
|
8
10
|
output: string;
|
|
11
|
+
listScreens: boolean;
|
|
9
12
|
export: boolean;
|
|
13
|
+
routes?: string | undefined;
|
|
10
14
|
}, {
|
|
11
15
|
project: string;
|
|
12
16
|
output?: string | undefined;
|
|
17
|
+
listScreens?: boolean | undefined;
|
|
13
18
|
export?: boolean | undefined;
|
|
19
|
+
routes?: string | undefined;
|
|
14
20
|
}>;
|
|
15
21
|
export type SiteOptions = z.infer<typeof SiteOptionsSchema>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { StitchMCPClient } from '../../../services/mcp-client/client.js';
|
|
3
2
|
import type { SiteConfig } from '../../../lib/services/site/types.js';
|
|
3
|
+
import type { Stitch } from '@google/stitch-sdk';
|
|
4
4
|
interface SiteBuilderProps {
|
|
5
5
|
projectId: string;
|
|
6
|
-
client:
|
|
6
|
+
client: Stitch;
|
|
7
7
|
onExit: (config: SiteConfig | null, htmlContent?: Map<string, string>) => void;
|
|
8
8
|
}
|
|
9
9
|
export declare const SiteBuilder: React.FC<SiteBuilderProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches text content from a URL with exponential backoff retry on 429 (Too Many Requests).
|
|
3
|
+
* Non-429 errors are thrown immediately without retrying.
|
|
4
|
+
*
|
|
5
|
+
* @param url - The URL to fetch
|
|
6
|
+
* @param maxRetries - Maximum number of retries (default: 4, so 5 total attempts)
|
|
7
|
+
* @param maxBackoffMs - Maximum backoff delay in ms (default: 8000)
|
|
8
|
+
* @returns The response body as text
|
|
9
|
+
*/
|
|
10
|
+
export declare function fetchWithRetry(url: string, maxRetries?: number, maxBackoffMs?: number): Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function suggestRoute(title: string): string;
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import"../../chunk-3sfn889r.js";
|
|
5
5
|
import {
|
|
6
6
|
exports_external
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-c6ge431q.js";
|
|
8
8
|
import {
|
|
9
9
|
__require
|
|
10
10
|
} from "../../chunk-9wyra8hs.js";
|
|
@@ -34,7 +34,7 @@ var command = {
|
|
|
34
34
|
action: async (_args, options) => {
|
|
35
35
|
try {
|
|
36
36
|
const parsedOptions = SnapshotInputSchema.parse(options);
|
|
37
|
-
const { SnapshotHandler } = await import("../../chunk-
|
|
37
|
+
const { SnapshotHandler } = await import("../../chunk-8rt3pp6g.js");
|
|
38
38
|
const handler = new SnapshotHandler;
|
|
39
39
|
const result = await handler.execute({
|
|
40
40
|
command: parsedOptions.command,
|