shipscreens 0.1.6 → 0.1.7
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/README.md +14 -4
- package/bin/shipscreens.js +352 -18
- package/cli/commands/captureScreenshots.js +409 -0
- package/cli/commands/importScreenshots.js +377 -0
- package/cli/commands/inspectReleaseContext.js +607 -0
- package/cli/commands/planRelease.js +324 -0
- package/cli/commands/writeStarterConfig.js +233 -0
- package/cli/mcpServer.js +172 -3
- package/dist/.well-known/ai-agents.json +58 -11
- package/dist/.well-known/llms-full.txt +80 -17
- package/dist/.well-known/llms.txt +38 -12
- package/dist/.well-known/mcp-server.json +4 -4
- package/dist/ai-agents.json +58 -11
- package/dist/app/assets/AgentCli-nIqgOG-i.js +17 -0
- package/dist/app/assets/AgentCli-nIqgOG-i.js.map +1 -0
- package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
- package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
- package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
- package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
- package/dist/app/assets/App-BRKxkubQ.css +1 -0
- package/dist/app/assets/App-CZiyX8-L.js +14 -0
- package/dist/app/assets/App-CZiyX8-L.js.map +1 -0
- package/dist/app/assets/AppReviewAso-DYOCuqgV.js +4 -0
- package/dist/app/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
- package/dist/app/assets/Cancelled-CP6V6uDb.js +2 -0
- package/dist/app/assets/Cancelled-CP6V6uDb.js.map +1 -0
- package/dist/app/assets/CopyButton-BFCx6EPg.js +2 -0
- package/dist/app/assets/CopyButton-BFCx6EPg.js.map +1 -0
- package/dist/app/assets/DesignPartner-B4J7f0Bx.js +4 -0
- package/dist/app/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
- package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
- package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
- package/dist/app/assets/FirstExport-qfY7uE8r.js +6 -0
- package/dist/app/assets/FirstExport-qfY7uE8r.js.map +1 -0
- package/dist/app/assets/FitPanel-B1J0V1jK.js +2 -0
- package/dist/app/assets/FitPanel-B1J0V1jK.js.map +1 -0
- package/dist/app/assets/FivePanelFramework-C4yq58kM.js +62 -0
- package/dist/app/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
- package/dist/app/assets/ForgotPassword-KF_HFGyb.js +2 -0
- package/dist/app/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
- package/dist/app/assets/Landing-B_CvZDXJ.js +2 -0
- package/dist/app/assets/Landing-B_CvZDXJ.js.map +1 -0
- package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
- package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
- package/dist/app/assets/Legal-BwGbEjDk.js +2 -0
- package/dist/app/assets/Legal-BwGbEjDk.js.map +1 -0
- package/dist/app/assets/NotFound-Ba1Bw7uu.js +2 -0
- package/dist/app/assets/NotFound-Ba1Bw7uu.js.map +1 -0
- package/dist/app/assets/Pricing-Dt-V4Gqc.js +20 -0
- package/dist/app/assets/Pricing-Dt-V4Gqc.js.map +1 -0
- package/dist/app/assets/Privacy-C6MrXYPO.js +2 -0
- package/dist/app/assets/Privacy-C6MrXYPO.js.map +1 -0
- package/dist/app/assets/Proof-C3DDFAhm.js +20 -0
- package/dist/app/assets/Proof-C3DDFAhm.js.map +1 -0
- package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
- package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
- package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
- package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
- package/dist/app/assets/Security-C1OmAgom.js +2 -0
- package/dist/app/assets/Security-C1OmAgom.js.map +1 -0
- package/dist/app/assets/SignIn-C_wwnmvu.js +2 -0
- package/dist/app/assets/SignIn-C_wwnmvu.js.map +1 -0
- package/dist/app/assets/SignUp-Dm5HalC6.js +2 -0
- package/dist/app/assets/SignUp-Dm5HalC6.js.map +1 -0
- package/dist/app/assets/SiteHeader-CJqQ0pL3.js +2 -0
- package/dist/app/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
- package/dist/app/assets/StickyMobileCta-REC3DROG.js +2 -0
- package/dist/app/assets/StickyMobileCta-REC3DROG.js.map +1 -0
- package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
- package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
- package/dist/app/assets/Success-D6b4wLPD.js +2 -0
- package/dist/app/assets/Success-D6b4wLPD.js.map +1 -0
- package/dist/app/assets/Terms-BMt39FQK.js +2 -0
- package/dist/app/assets/Terms-BMt39FQK.js.map +1 -0
- package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
- package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
- package/dist/app/assets/ToolsIndex-d1szo5bn.js +6 -0
- package/dist/app/assets/ToolsIndex-d1szo5bn.js.map +1 -0
- package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
- package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
- package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
- package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
- package/dist/app/assets/agentHandoff-BGmHqDwv.js +2 -0
- package/dist/app/assets/agentHandoff-BGmHqDwv.js.map +1 -0
- package/dist/app/assets/apiClient-3WVm94VW.js +2 -0
- package/dist/app/assets/apiClient-3WVm94VW.js.map +1 -0
- package/dist/app/assets/calculator-CofuwQa8.js +2 -0
- package/dist/app/assets/calculator-CofuwQa8.js.map +1 -0
- package/dist/app/assets/check-Fm2iQO64.js +2 -0
- package/dist/app/assets/check-Fm2iQO64.js.map +1 -0
- package/dist/app/assets/chevron-down-BIXHKpnf.js +2 -0
- package/dist/app/assets/chevron-down-BIXHKpnf.js.map +1 -0
- package/dist/app/assets/chunk-BHe-jwch.js +1 -0
- package/dist/app/assets/circle-check-X08qqy40.js +2 -0
- package/dist/app/assets/circle-check-X08qqy40.js.map +1 -0
- package/dist/app/assets/copy-KD-LYJ0z.js +2 -0
- package/dist/app/assets/copy-KD-LYJ0z.js.map +1 -0
- package/dist/app/assets/crop-K1LOmRty.js +2 -0
- package/dist/app/assets/crop-K1LOmRty.js.map +1 -0
- package/dist/app/assets/designPartnerRequest-DYqMElJd.js +2 -0
- package/dist/app/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
- package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
- package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
- package/dist/app/assets/download-BXzoc-Y3.js +2 -0
- package/dist/app/assets/download-BXzoc-Y3.js.map +1 -0
- package/dist/app/assets/eye-CHvLhG2r.js +2 -0
- package/dist/app/assets/eye-CHvLhG2r.js.map +1 -0
- package/dist/app/assets/file-text-CU-ETLz1.js +2 -0
- package/dist/app/assets/file-text-CU-ETLz1.js.map +1 -0
- package/dist/app/assets/folder-tree-raVH0Y5V.js +2 -0
- package/dist/app/assets/folder-tree-raVH0Y5V.js.map +1 -0
- package/dist/app/assets/grid-3x3-cWuhGQfz.js +2 -0
- package/dist/app/assets/grid-3x3-cWuhGQfz.js.map +1 -0
- package/dist/app/assets/hardeningOffer-tkjlPDU-.js +2 -0
- package/dist/app/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
- package/dist/app/assets/hero/agent-starter-workflow.png +0 -0
- package/dist/app/assets/hero/agent-starter-workflow.webp +0 -0
- package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
- package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
- package/dist/app/assets/index-BW_YmKvl.css +2 -0
- package/dist/app/assets/index-D7D6ZRCW.js +212 -0
- package/dist/app/assets/index-D7D6ZRCW.js.map +1 -0
- package/dist/app/assets/jszip.min-XyfP2hUJ.js +3 -0
- package/dist/app/assets/jszip.min-XyfP2hUJ.js.map +1 -0
- package/dist/app/assets/layout-grid-Cq_e979G.js +2 -0
- package/dist/app/assets/layout-grid-Cq_e979G.js.map +1 -0
- package/dist/app/assets/lock-Di7P18Ts.js +2 -0
- package/dist/app/assets/lock-Di7P18Ts.js.map +1 -0
- package/dist/app/assets/rocket-DHdrCHKD.js +2 -0
- package/dist/app/assets/rocket-DHdrCHKD.js.map +1 -0
- package/dist/app/assets/shield-check-CxpHNdp0.js +2 -0
- package/dist/app/assets/shield-check-CxpHNdp0.js.map +1 -0
- package/dist/app/assets/smartphone-DXKiqu57.js +2 -0
- package/dist/app/assets/smartphone-DXKiqu57.js.map +1 -0
- package/dist/app/assets/stripeClient-CuZgvzca.js +2 -0
- package/dist/app/assets/stripeClient-CuZgvzca.js.map +1 -0
- package/dist/app/assets/terminal-J0iyJTv2.js +2 -0
- package/dist/app/assets/terminal-J0iyJTv2.js.map +1 -0
- package/dist/app/assets/triangle-alert-BA0HP6zD.js +2 -0
- package/dist/app/assets/triangle-alert-BA0HP6zD.js.map +1 -0
- package/dist/app/assets/useAuth-CoS4r8yi.js +22 -0
- package/dist/app/assets/useAuth-CoS4r8yi.js.map +1 -0
- package/dist/app/assets/users-C-fz7pbn.js +2 -0
- package/dist/app/assets/users-C-fz7pbn.js.map +1 -0
- package/dist/app/index.html +9 -8
- package/dist/assets/AgentCli-nIqgOG-i.js +17 -0
- package/dist/assets/AgentCli-nIqgOG-i.js.map +1 -0
- package/dist/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
- package/dist/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
- package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
- package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
- package/dist/assets/App-BRKxkubQ.css +1 -0
- package/dist/assets/App-CZiyX8-L.js +14 -0
- package/dist/assets/App-CZiyX8-L.js.map +1 -0
- package/dist/assets/AppReviewAso-DYOCuqgV.js +4 -0
- package/dist/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
- package/dist/assets/Cancelled-CP6V6uDb.js +2 -0
- package/dist/assets/Cancelled-CP6V6uDb.js.map +1 -0
- package/dist/assets/CopyButton-BFCx6EPg.js +2 -0
- package/dist/assets/CopyButton-BFCx6EPg.js.map +1 -0
- package/dist/assets/DesignPartner-B4J7f0Bx.js +4 -0
- package/dist/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
- package/dist/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
- package/dist/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
- package/dist/assets/FirstExport-qfY7uE8r.js +6 -0
- package/dist/assets/FirstExport-qfY7uE8r.js.map +1 -0
- package/dist/assets/FitPanel-B1J0V1jK.js +2 -0
- package/dist/assets/FitPanel-B1J0V1jK.js.map +1 -0
- package/dist/assets/FivePanelFramework-C4yq58kM.js +62 -0
- package/dist/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
- package/dist/assets/ForgotPassword-KF_HFGyb.js +2 -0
- package/dist/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
- package/dist/assets/Landing-B_CvZDXJ.js +2 -0
- package/dist/assets/Landing-B_CvZDXJ.js.map +1 -0
- package/dist/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
- package/dist/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
- package/dist/assets/Legal-BwGbEjDk.js +2 -0
- package/dist/assets/Legal-BwGbEjDk.js.map +1 -0
- package/dist/assets/NotFound-Ba1Bw7uu.js +2 -0
- package/dist/assets/NotFound-Ba1Bw7uu.js.map +1 -0
- package/dist/assets/Pricing-Dt-V4Gqc.js +20 -0
- package/dist/assets/Pricing-Dt-V4Gqc.js.map +1 -0
- package/dist/assets/Privacy-C6MrXYPO.js +2 -0
- package/dist/assets/Privacy-C6MrXYPO.js.map +1 -0
- package/dist/assets/Proof-C3DDFAhm.js +20 -0
- package/dist/assets/Proof-C3DDFAhm.js.map +1 -0
- package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
- package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
- package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
- package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
- package/dist/assets/Security-C1OmAgom.js +2 -0
- package/dist/assets/Security-C1OmAgom.js.map +1 -0
- package/dist/assets/SignIn-C_wwnmvu.js +2 -0
- package/dist/assets/SignIn-C_wwnmvu.js.map +1 -0
- package/dist/assets/SignUp-Dm5HalC6.js +2 -0
- package/dist/assets/SignUp-Dm5HalC6.js.map +1 -0
- package/dist/assets/SiteHeader-CJqQ0pL3.js +2 -0
- package/dist/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
- package/dist/assets/StickyMobileCta-REC3DROG.js +2 -0
- package/dist/assets/StickyMobileCta-REC3DROG.js.map +1 -0
- package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
- package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
- package/dist/assets/Success-D6b4wLPD.js +2 -0
- package/dist/assets/Success-D6b4wLPD.js.map +1 -0
- package/dist/assets/Terms-BMt39FQK.js +2 -0
- package/dist/assets/Terms-BMt39FQK.js.map +1 -0
- package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
- package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
- package/dist/assets/ToolsIndex-d1szo5bn.js +6 -0
- package/dist/assets/ToolsIndex-d1szo5bn.js.map +1 -0
- package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
- package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
- package/dist/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
- package/dist/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
- package/dist/assets/agentHandoff-BGmHqDwv.js +2 -0
- package/dist/assets/agentHandoff-BGmHqDwv.js.map +1 -0
- package/dist/assets/apiClient-3WVm94VW.js +2 -0
- package/dist/assets/apiClient-3WVm94VW.js.map +1 -0
- package/dist/assets/calculator-CofuwQa8.js +2 -0
- package/dist/assets/calculator-CofuwQa8.js.map +1 -0
- package/dist/assets/check-Fm2iQO64.js +2 -0
- package/dist/assets/check-Fm2iQO64.js.map +1 -0
- package/dist/assets/chevron-down-BIXHKpnf.js +2 -0
- package/dist/assets/chevron-down-BIXHKpnf.js.map +1 -0
- package/dist/assets/chunk-BHe-jwch.js +1 -0
- package/dist/assets/circle-check-X08qqy40.js +2 -0
- package/dist/assets/circle-check-X08qqy40.js.map +1 -0
- package/dist/assets/copy-KD-LYJ0z.js +2 -0
- package/dist/assets/copy-KD-LYJ0z.js.map +1 -0
- package/dist/assets/crop-K1LOmRty.js +2 -0
- package/dist/assets/crop-K1LOmRty.js.map +1 -0
- package/dist/assets/designPartnerRequest-DYqMElJd.js +2 -0
- package/dist/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
- package/dist/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
- package/dist/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
- package/dist/assets/download-BXzoc-Y3.js +2 -0
- package/dist/assets/download-BXzoc-Y3.js.map +1 -0
- package/dist/assets/eye-CHvLhG2r.js +2 -0
- package/dist/assets/eye-CHvLhG2r.js.map +1 -0
- package/dist/assets/file-text-CU-ETLz1.js +2 -0
- package/dist/assets/file-text-CU-ETLz1.js.map +1 -0
- package/dist/assets/folder-tree-raVH0Y5V.js +2 -0
- package/dist/assets/folder-tree-raVH0Y5V.js.map +1 -0
- package/dist/assets/grid-3x3-cWuhGQfz.js +2 -0
- package/dist/assets/grid-3x3-cWuhGQfz.js.map +1 -0
- package/dist/assets/hardeningOffer-tkjlPDU-.js +2 -0
- package/dist/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
- package/dist/assets/hero/agent-starter-workflow.png +0 -0
- package/dist/assets/hero/agent-starter-workflow.webp +0 -0
- package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
- package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
- package/dist/assets/index-BW_YmKvl.css +2 -0
- package/dist/assets/index-D7D6ZRCW.js +212 -0
- package/dist/assets/index-D7D6ZRCW.js.map +1 -0
- package/dist/assets/jszip.min-XyfP2hUJ.js +3 -0
- package/dist/assets/jszip.min-XyfP2hUJ.js.map +1 -0
- package/dist/assets/layout-grid-Cq_e979G.js +2 -0
- package/dist/assets/layout-grid-Cq_e979G.js.map +1 -0
- package/dist/assets/lock-Di7P18Ts.js +2 -0
- package/dist/assets/lock-Di7P18Ts.js.map +1 -0
- package/dist/assets/rocket-DHdrCHKD.js +2 -0
- package/dist/assets/rocket-DHdrCHKD.js.map +1 -0
- package/dist/assets/shield-check-CxpHNdp0.js +2 -0
- package/dist/assets/shield-check-CxpHNdp0.js.map +1 -0
- package/dist/assets/smartphone-DXKiqu57.js +2 -0
- package/dist/assets/smartphone-DXKiqu57.js.map +1 -0
- package/dist/assets/stripeClient-CuZgvzca.js +2 -0
- package/dist/assets/stripeClient-CuZgvzca.js.map +1 -0
- package/dist/assets/terminal-J0iyJTv2.js +2 -0
- package/dist/assets/terminal-J0iyJTv2.js.map +1 -0
- package/dist/assets/triangle-alert-BA0HP6zD.js +2 -0
- package/dist/assets/triangle-alert-BA0HP6zD.js.map +1 -0
- package/dist/assets/useAuth-CoS4r8yi.js +22 -0
- package/dist/assets/useAuth-CoS4r8yi.js.map +1 -0
- package/dist/assets/users-C-fz7pbn.js +2 -0
- package/dist/assets/users-C-fz7pbn.js.map +1 -0
- package/dist/cancelled/index.html +3 -2
- package/dist/design-partner/index.html +6 -5
- package/dist/downloads/shipscreens-github-actions-template.yml +1 -1
- package/dist/forgot-password/index.html +3 -2
- package/dist/index.html +9 -8
- package/dist/legal/index.html +3 -2
- package/dist/llms-full.txt +80 -17
- package/dist/llms.txt +38 -12
- package/dist/mcp-server.json +4 -4
- package/dist/pricing/index.html +6 -5
- package/dist/privacy/index.html +3 -2
- package/dist/proof/index.html +6 -5
- package/dist/security/index.html +3 -2
- package/dist/signin/index.html +3 -2
- package/dist/signup/index.html +3 -2
- package/dist/success/index.html +3 -2
- package/dist/terms/index.html +3 -2
- package/dist/tools/5-panel-screenshot-framework/index.html +6 -5
- package/dist/tools/agent-cli/index.html +8 -7
- package/dist/tools/app-review-aso/index.html +6 -5
- package/dist/tools/app-store-localization-screenshot-automation/index.html +8 -7
- package/dist/tools/app-store-screenshot-automation/index.html +8 -7
- package/dist/tools/app-store-screenshot-requirements-checklist/index.html +8 -7
- package/dist/tools/claude-code-mcp-screenshot-automation/index.html +8 -7
- package/dist/tools/cursor-mcp-screenshot-automation/index.html +8 -7
- package/dist/tools/deterministic-screenshot-reruns/index.html +8 -7
- package/dist/tools/device-locale-screenshot-matrix/index.html +8 -7
- package/dist/tools/fastlane-screenshot-folder-structure/index.html +8 -7
- package/dist/tools/fastlane-screenshot-pipeline/index.html +8 -7
- package/dist/tools/fastlane-screenshots/index.html +6 -5
- package/dist/tools/first-export/index.html +6 -5
- package/dist/tools/gemini-cli-mcp-screenshot-automation/index.html +8 -7
- package/dist/tools/google-play-screenshot-automation/index.html +8 -7
- package/dist/tools/google-play-screenshot-requirements-checklist/index.html +8 -7
- package/dist/tools/index.html +6 -5
- package/dist/tools/ipad-screenshot-review-requirements/index.html +8 -7
- package/dist/tools/openai-responses-tool-screenshot-automation/index.html +8 -7
- package/dist/tools/screenshot-ci-pipeline/index.html +8 -7
- package/dist/tools/screenshot-naming-order-drift/index.html +8 -7
- package/dist/tools/screenshot-workload-calculator/index.html +6 -5
- package/dist/tools/store-assets-pipeline/index.html +3 -2
- package/dist/tools/vscode-copilot-mcp-screenshot-automation/index.html +8 -7
- package/package.json +7 -7
- package/dist/app/assets/AgentCli-xKYtzL3B.js +0 -17
- package/dist/app/assets/AgentCli-xKYtzL3B.js.map +0 -1
- package/dist/app/assets/App-C1cNw_fn.js +0 -13
- package/dist/app/assets/App-C1cNw_fn.js.map +0 -1
- package/dist/app/assets/App-oQfE_p3A.css +0 -1
- package/dist/app/assets/AppReviewAso-CaIT-L7Z.js +0 -4
- package/dist/app/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
- package/dist/app/assets/Cancelled-Dmw7PTD-.js +0 -2
- package/dist/app/assets/Cancelled-Dmw7PTD-.js.map +0 -1
- package/dist/app/assets/CopyButton-CPRHmu8l.js +0 -2
- package/dist/app/assets/CopyButton-CPRHmu8l.js.map +0 -1
- package/dist/app/assets/DesignPartner-Ckp1GhNv.js +0 -4
- package/dist/app/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
- package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
- package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
- package/dist/app/assets/FirstExport-RXbvVQdK.js +0 -6
- package/dist/app/assets/FirstExport-RXbvVQdK.js.map +0 -1
- package/dist/app/assets/FitPanel-ic91y-49.js +0 -2
- package/dist/app/assets/FitPanel-ic91y-49.js.map +0 -1
- package/dist/app/assets/FivePanelFramework-BZKNcycb.js +0 -62
- package/dist/app/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
- package/dist/app/assets/ForgotPassword-CKOfAvWk.js +0 -2
- package/dist/app/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
- package/dist/app/assets/Landing-D0cuDDUk.js +0 -2
- package/dist/app/assets/Landing-D0cuDDUk.js.map +0 -1
- package/dist/app/assets/LanguageSwitcher-BrToLEgF.js +0 -2
- package/dist/app/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
- package/dist/app/assets/Legal-Cm-hVzjY.js +0 -2
- package/dist/app/assets/Legal-Cm-hVzjY.js.map +0 -1
- package/dist/app/assets/NotFound-B0I6I440.js +0 -2
- package/dist/app/assets/NotFound-B0I6I440.js.map +0 -1
- package/dist/app/assets/Pricing-p-NIjjtK.js +0 -29
- package/dist/app/assets/Pricing-p-NIjjtK.js.map +0 -1
- package/dist/app/assets/Privacy-BhfPkK0y.js +0 -2
- package/dist/app/assets/Privacy-BhfPkK0y.js.map +0 -1
- package/dist/app/assets/Proof-D-7QbTGX.js +0 -20
- package/dist/app/assets/Proof-D-7QbTGX.js.map +0 -1
- package/dist/app/assets/Security-DFafJQIT.js +0 -2
- package/dist/app/assets/Security-DFafJQIT.js.map +0 -1
- package/dist/app/assets/SignIn--6nNsUCm.js +0 -2
- package/dist/app/assets/SignIn--6nNsUCm.js.map +0 -1
- package/dist/app/assets/SignUp-yh5ydmFf.js +0 -2
- package/dist/app/assets/SignUp-yh5ydmFf.js.map +0 -1
- package/dist/app/assets/SiteHeader-NTK-cM9O.js +0 -2
- package/dist/app/assets/SiteHeader-NTK-cM9O.js.map +0 -1
- package/dist/app/assets/StickyMobileCta-DVXAyhaH.js +0 -2
- package/dist/app/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
- package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
- package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
- package/dist/app/assets/Success-C3n0m1XU.js +0 -2
- package/dist/app/assets/Success-C3n0m1XU.js.map +0 -1
- package/dist/app/assets/Terms-C72ybAwA.js +0 -2
- package/dist/app/assets/Terms-C72ybAwA.js.map +0 -1
- package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
- package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
- package/dist/app/assets/ToolsIndex-CnvNTvyW.js +0 -6
- package/dist/app/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
- package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
- package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
- package/dist/app/assets/arrow-right-Dglia5EE.js +0 -2
- package/dist/app/assets/arrow-right-Dglia5EE.js.map +0 -1
- package/dist/app/assets/calculator-CAgtsVuH.js +0 -2
- package/dist/app/assets/calculator-CAgtsVuH.js.map +0 -1
- package/dist/app/assets/check-B5h9hATV.js +0 -2
- package/dist/app/assets/check-B5h9hATV.js.map +0 -1
- package/dist/app/assets/chevron-down-By2Ts8dG.js +0 -2
- package/dist/app/assets/chevron-down-By2Ts8dG.js.map +0 -1
- package/dist/app/assets/circle-check-DaJ6APMi.js +0 -2
- package/dist/app/assets/circle-check-DaJ6APMi.js.map +0 -1
- package/dist/app/assets/clipboard-copy-IDfWU9SE.js +0 -2
- package/dist/app/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
- package/dist/app/assets/copy-KSn4Rc2b.js +0 -2
- package/dist/app/assets/copy-KSn4Rc2b.js.map +0 -1
- package/dist/app/assets/crop-C9hwiw0i.js +0 -2
- package/dist/app/assets/crop-C9hwiw0i.js.map +0 -1
- package/dist/app/assets/download-eqwxO8bs.js +0 -2
- package/dist/app/assets/download-eqwxO8bs.js.map +0 -1
- package/dist/app/assets/eye-Dg61f0nU.js +0 -2
- package/dist/app/assets/eye-Dg61f0nU.js.map +0 -1
- package/dist/app/assets/file-text-BQPKCil3.js +0 -2
- package/dist/app/assets/file-text-BQPKCil3.js.map +0 -1
- package/dist/app/assets/folder-tree-9hq6oigy.js +0 -2
- package/dist/app/assets/folder-tree-9hq6oigy.js.map +0 -1
- package/dist/app/assets/grid-3x3-BHXRyOIx.js +0 -2
- package/dist/app/assets/grid-3x3-BHXRyOIx.js.map +0 -1
- package/dist/app/assets/index-my6BmN7T.js +0 -204
- package/dist/app/assets/index-my6BmN7T.js.map +0 -1
- package/dist/app/assets/index-rv91vbLH.css +0 -1
- package/dist/app/assets/layout-grid-DDQvnEgx.js +0 -2
- package/dist/app/assets/layout-grid-DDQvnEgx.js.map +0 -1
- package/dist/app/assets/rocket-0KMviRpJ.js +0 -2
- package/dist/app/assets/rocket-0KMviRpJ.js.map +0 -1
- package/dist/app/assets/shield-check-BvKEQ2hc.js +0 -2
- package/dist/app/assets/shield-check-BvKEQ2hc.js.map +0 -1
- package/dist/app/assets/signIn-Ckla1_0O.js +0 -2
- package/dist/app/assets/signIn-Ckla1_0O.js.map +0 -1
- package/dist/app/assets/smartphone-I0w1b2DV.js +0 -2
- package/dist/app/assets/smartphone-I0w1b2DV.js.map +0 -1
- package/dist/app/assets/terminal-CLpUSQqd.js +0 -2
- package/dist/app/assets/terminal-CLpUSQqd.js.map +0 -1
- package/dist/app/assets/triangle-alert-w7TZ0yy2.js +0 -2
- package/dist/app/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
- package/dist/app/assets/useAuth-N3hsUaDj.js +0 -4
- package/dist/app/assets/useAuth-N3hsUaDj.js.map +0 -1
- package/dist/app/assets/users-DsQdkuR3.js +0 -2
- package/dist/app/assets/users-DsQdkuR3.js.map +0 -1
- package/dist/assets/AgentCli-xKYtzL3B.js +0 -17
- package/dist/assets/AgentCli-xKYtzL3B.js.map +0 -1
- package/dist/assets/App-C1cNw_fn.js +0 -13
- package/dist/assets/App-C1cNw_fn.js.map +0 -1
- package/dist/assets/App-oQfE_p3A.css +0 -1
- package/dist/assets/AppReviewAso-CaIT-L7Z.js +0 -4
- package/dist/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
- package/dist/assets/Cancelled-Dmw7PTD-.js +0 -2
- package/dist/assets/Cancelled-Dmw7PTD-.js.map +0 -1
- package/dist/assets/CopyButton-CPRHmu8l.js +0 -2
- package/dist/assets/CopyButton-CPRHmu8l.js.map +0 -1
- package/dist/assets/DesignPartner-Ckp1GhNv.js +0 -4
- package/dist/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
- package/dist/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
- package/dist/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
- package/dist/assets/FirstExport-RXbvVQdK.js +0 -6
- package/dist/assets/FirstExport-RXbvVQdK.js.map +0 -1
- package/dist/assets/FitPanel-ic91y-49.js +0 -2
- package/dist/assets/FitPanel-ic91y-49.js.map +0 -1
- package/dist/assets/FivePanelFramework-BZKNcycb.js +0 -62
- package/dist/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
- package/dist/assets/ForgotPassword-CKOfAvWk.js +0 -2
- package/dist/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
- package/dist/assets/Landing-D0cuDDUk.js +0 -2
- package/dist/assets/Landing-D0cuDDUk.js.map +0 -1
- package/dist/assets/LanguageSwitcher-BrToLEgF.js +0 -2
- package/dist/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
- package/dist/assets/Legal-Cm-hVzjY.js +0 -2
- package/dist/assets/Legal-Cm-hVzjY.js.map +0 -1
- package/dist/assets/NotFound-B0I6I440.js +0 -2
- package/dist/assets/NotFound-B0I6I440.js.map +0 -1
- package/dist/assets/Pricing-p-NIjjtK.js +0 -29
- package/dist/assets/Pricing-p-NIjjtK.js.map +0 -1
- package/dist/assets/Privacy-BhfPkK0y.js +0 -2
- package/dist/assets/Privacy-BhfPkK0y.js.map +0 -1
- package/dist/assets/Proof-D-7QbTGX.js +0 -20
- package/dist/assets/Proof-D-7QbTGX.js.map +0 -1
- package/dist/assets/Security-DFafJQIT.js +0 -2
- package/dist/assets/Security-DFafJQIT.js.map +0 -1
- package/dist/assets/SignIn--6nNsUCm.js +0 -2
- package/dist/assets/SignIn--6nNsUCm.js.map +0 -1
- package/dist/assets/SignUp-yh5ydmFf.js +0 -2
- package/dist/assets/SignUp-yh5ydmFf.js.map +0 -1
- package/dist/assets/SiteHeader-NTK-cM9O.js +0 -2
- package/dist/assets/SiteHeader-NTK-cM9O.js.map +0 -1
- package/dist/assets/StickyMobileCta-DVXAyhaH.js +0 -2
- package/dist/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
- package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
- package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
- package/dist/assets/Success-C3n0m1XU.js +0 -2
- package/dist/assets/Success-C3n0m1XU.js.map +0 -1
- package/dist/assets/Terms-C72ybAwA.js +0 -2
- package/dist/assets/Terms-C72ybAwA.js.map +0 -1
- package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
- package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
- package/dist/assets/ToolsIndex-CnvNTvyW.js +0 -6
- package/dist/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
- package/dist/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
- package/dist/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
- package/dist/assets/arrow-right-Dglia5EE.js +0 -2
- package/dist/assets/arrow-right-Dglia5EE.js.map +0 -1
- package/dist/assets/calculator-CAgtsVuH.js +0 -2
- package/dist/assets/calculator-CAgtsVuH.js.map +0 -1
- package/dist/assets/check-B5h9hATV.js +0 -2
- package/dist/assets/check-B5h9hATV.js.map +0 -1
- package/dist/assets/chevron-down-By2Ts8dG.js +0 -2
- package/dist/assets/chevron-down-By2Ts8dG.js.map +0 -1
- package/dist/assets/circle-check-DaJ6APMi.js +0 -2
- package/dist/assets/circle-check-DaJ6APMi.js.map +0 -1
- package/dist/assets/clipboard-copy-IDfWU9SE.js +0 -2
- package/dist/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
- package/dist/assets/copy-KSn4Rc2b.js +0 -2
- package/dist/assets/copy-KSn4Rc2b.js.map +0 -1
- package/dist/assets/crop-C9hwiw0i.js +0 -2
- package/dist/assets/crop-C9hwiw0i.js.map +0 -1
- package/dist/assets/download-eqwxO8bs.js +0 -2
- package/dist/assets/download-eqwxO8bs.js.map +0 -1
- package/dist/assets/eye-Dg61f0nU.js +0 -2
- package/dist/assets/eye-Dg61f0nU.js.map +0 -1
- package/dist/assets/file-text-BQPKCil3.js +0 -2
- package/dist/assets/file-text-BQPKCil3.js.map +0 -1
- package/dist/assets/folder-tree-9hq6oigy.js +0 -2
- package/dist/assets/folder-tree-9hq6oigy.js.map +0 -1
- package/dist/assets/grid-3x3-BHXRyOIx.js +0 -2
- package/dist/assets/grid-3x3-BHXRyOIx.js.map +0 -1
- package/dist/assets/index-my6BmN7T.js +0 -204
- package/dist/assets/index-my6BmN7T.js.map +0 -1
- package/dist/assets/index-rv91vbLH.css +0 -1
- package/dist/assets/layout-grid-DDQvnEgx.js +0 -2
- package/dist/assets/layout-grid-DDQvnEgx.js.map +0 -1
- package/dist/assets/rocket-0KMviRpJ.js +0 -2
- package/dist/assets/rocket-0KMviRpJ.js.map +0 -1
- package/dist/assets/shield-check-BvKEQ2hc.js +0 -2
- package/dist/assets/shield-check-BvKEQ2hc.js.map +0 -1
- package/dist/assets/signIn-Ckla1_0O.js +0 -2
- package/dist/assets/signIn-Ckla1_0O.js.map +0 -1
- package/dist/assets/smartphone-I0w1b2DV.js +0 -2
- package/dist/assets/smartphone-I0w1b2DV.js.map +0 -1
- package/dist/assets/terminal-CLpUSQqd.js +0 -2
- package/dist/assets/terminal-CLpUSQqd.js.map +0 -1
- package/dist/assets/triangle-alert-w7TZ0yy2.js +0 -2
- package/dist/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
- package/dist/assets/useAuth-N3hsUaDj.js +0 -4
- package/dist/assets/useAuth-N3hsUaDj.js.map +0 -1
- package/dist/assets/users-DsQdkuR3.js +0 -2
- package/dist/assets/users-DsQdkuR3.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# ShipScreens CLI
|
|
2
2
|
|
|
3
|
-
Use this when app-dev CI or MCP-enabled agents need deterministic store
|
|
3
|
+
Best UX: treat screenshots as a build step. Keep the current Figma/Fastlane/manual screenshot workflow, tell your coding agent to ship release-safe screenshots, and let it inspect, plan, write a starter config when needed, capture connected device/emulator screens when no PNG folder exists, import existing screenshots when placeholders remain, build, verify, stage, and report via MCP or CLI. Use this package when app-dev CI or MCP-enabled agents need deterministic store-screenshot release ops that prevent Fastlane path churn, naming drift, and release-week rerun failures.
|
|
4
|
+
|
|
5
|
+
## Tell your coding agent
|
|
6
|
+
```text
|
|
7
|
+
Use ShipScreens as the build step for our mobile release screenshots. Keep our current design workflow, inspect this repo, choose workspace-local MCP if available otherwise CLI, capture current device/emulator screens if no screenshot folder exists, generate deterministic Fastlane-ready outputs, run verify/stage, and return a short report with output paths, warnings, and next steps. Only ask me if device or locale scope, panel #1 messaging, or store-upload approval is unclear.
|
|
8
|
+
```
|
|
4
9
|
|
|
5
10
|
## Quickstart
|
|
6
11
|
```bash
|
|
@@ -17,14 +22,19 @@ npx playwright install --with-deps chromium
|
|
|
17
22
|
|
|
18
23
|
## CI pipeline (copy/paste)
|
|
19
24
|
```bash
|
|
25
|
+
npx --yes shipscreens@latest inspect-release-context --json
|
|
26
|
+
npx --yes shipscreens@latest plan-release --json
|
|
27
|
+
npx --yes shipscreens@latest write-starter-config --profile appstore --json
|
|
28
|
+
npx --yes shipscreens@latest capture-screenshots --platform auto --out screenshots --slot 1 --profile appstore --json
|
|
29
|
+
npx --yes shipscreens@latest import-screenshots --from screenshots --profile appstore --json
|
|
20
30
|
npx --yes shipscreens@latest validate
|
|
21
31
|
npx --yes shipscreens@latest lock
|
|
22
32
|
npx --yes shipscreens@latest copy check --strict --write-pseudo-csv out/copy-pseudo.csv --write-report-json out/copy-check-report.json
|
|
23
|
-
npx --yes shipscreens@latest
|
|
24
|
-
npx --yes shipscreens@latest verify --out out --zip --profile appstore
|
|
25
|
-
npx --yes shipscreens@latest stage --from out --out out/stage --profile appstore
|
|
33
|
+
npx --yes shipscreens@latest agent-run --out out --zip --stage --profile appstore --json
|
|
26
34
|
```
|
|
27
35
|
|
|
36
|
+
With `--stage`, `agent-run` writes `out-stage`, `out/shipscreens.agent-report.json`, and `out/shipscreens.agent-summary.md` by default.
|
|
37
|
+
|
|
28
38
|
Docs: https://shipscreens.com/tools/agent-cli/
|
|
29
39
|
|
|
30
40
|
## MCP server (stdio)
|
package/bin/shipscreens.js
CHANGED
|
@@ -12,6 +12,17 @@ import { runExportFramefile } from '../cli/commands/exportFramefile.js';
|
|
|
12
12
|
import { runVerify } from '../cli/commands/verify.js';
|
|
13
13
|
import { runStage } from '../cli/commands/stage.js';
|
|
14
14
|
import { runPlan } from '../cli/commands/plan.js';
|
|
15
|
+
import {
|
|
16
|
+
renderInspectReleaseContextSummary,
|
|
17
|
+
runInspectReleaseContext,
|
|
18
|
+
} from '../cli/commands/inspectReleaseContext.js';
|
|
19
|
+
import { renderPlanReleaseSummary, runPlanRelease } from '../cli/commands/planRelease.js';
|
|
20
|
+
import {
|
|
21
|
+
renderWriteStarterConfigSummary,
|
|
22
|
+
runWriteStarterConfig,
|
|
23
|
+
} from '../cli/commands/writeStarterConfig.js';
|
|
24
|
+
import { renderImportScreenshotsSummary, runImportScreenshots } from '../cli/commands/importScreenshots.js';
|
|
25
|
+
import { renderCaptureScreenshotsSummary, runCaptureScreenshots } from '../cli/commands/captureScreenshots.js';
|
|
15
26
|
import { runAuth } from '../cli/commands/auth.js';
|
|
16
27
|
import { runInit } from '../cli/commands/init.js';
|
|
17
28
|
import { runWizard } from '../cli/commands/wizard.js';
|
|
@@ -41,7 +52,7 @@ Usage:
|
|
|
41
52
|
shipscreens init [--dir <path>] [--slides <n>] [--locales <id,id>] [--devices <id,id>] [--force] [--wizard] [--style <value>] [--template <id>]
|
|
42
53
|
shipscreens wizard [--dir <path>] [--force] [--style <value>] [--template <id>] [--defaults]
|
|
43
54
|
shipscreens demo [--out <dir>] [--slides <n>] [--locales <id,id>] [--devices <id,id>] [--template <id>] [--mode <raw|rendered>] [--zip-out <path>] [--profile <appstore|playstore|any>] [--variant <id>] [--force]
|
|
44
|
-
shipscreens agent-run [--dir <path>] [--slides <n>] [--locales <id,id>] [--devices <id,id>] [--style <value>] [--template <id>] [--mode <raw|rendered>] [--out <dir>] [--zip] [--profile <appstore|playstore|any>] [--variant <id>] [--require-pro] [--force]
|
|
55
|
+
shipscreens agent-run [--dir <path>] [--slides <n>] [--locales <id,id>] [--devices <id,id>] [--style <value>] [--template <id>] [--mode <raw|rendered>] [--out <dir>] [--zip] [--profile <appstore|playstore|any>] [--variant <id>] [--stage] [--stage-out <dir>] [--report-json <path>] [--report-md <path>] [--require-pro] [--force]
|
|
45
56
|
shipscreens devices [--json]
|
|
46
57
|
shipscreens templates [--json]
|
|
47
58
|
shipscreens validate [-c shipscreens.config.yml]
|
|
@@ -49,6 +60,11 @@ Usage:
|
|
|
49
60
|
shipscreens build [-c shipscreens.config.yml] [--mode shipscreens|rendered|raw|frameit] [--format dir|zip] [--out <dir>] [--zip] [--zip-out <path>] [--variant <id>] [--clean]
|
|
50
61
|
shipscreens verify [-c shipscreens.config.yml] [--out <dir>] [--zip] [--zip-out <path>] [--profile appstore|playstore|any] [--variant <id>]
|
|
51
62
|
shipscreens stage [-c shipscreens.config.yml] [--from <dir>] --out <dir> [--profile appstore|playstore|any] [--variant <id>]
|
|
63
|
+
shipscreens inspect-release-context [--dir <path>] [-c shipscreens.config.yml] [--json]
|
|
64
|
+
shipscreens plan-release [--dir <path>] [-c shipscreens.config.yml] [--profile appstore|playstore|any] [--mode raw|rendered] [--out <dir>] [--stage-out <dir>] [--json]
|
|
65
|
+
shipscreens write-starter-config [--dir <path>] [--profile appstore|playstore|any] [--slides <n>] [--locales <id,id>] [--devices <id,id>] [--template <id>] [--out <dir>] [--stage-out <dir>] [--force] [--json]
|
|
66
|
+
shipscreens capture-screenshots [--dir <path>] [--platform auto|android|ios-simulator|ios-device] [--device <id>] [--out screenshots] [--locale <id>] [--slot <n>] [--name <file.png>] [--profile appstore|playstore|any] [--list] [--json]
|
|
67
|
+
shipscreens import-screenshots [--dir <path>] [-c shipscreens.config.yml] [--from <dir>] [--locale <id|all>] [--profile appstore|playstore|any] [--out <dir>] [--stage-out <dir>] [--force] [--allow-partial] [--json]
|
|
52
68
|
shipscreens export framefile [-c shipscreens.config.yml] [--ios-dir fastlane/screenshots] [--strings-encoding utf8|utf16le|utf16be] [--framefile-strategy merge|overwrite] [--check]
|
|
53
69
|
shipscreens plan [-c shipscreens.config.yml] [--out <dir>] [--zip-out <path>] [--profile appstore|playstore|any] [--variant <id>] [--json]
|
|
54
70
|
shipscreens copy import [-c shipscreens.config.yml] [--csv <path>] [--import-mode merge|replace]
|
|
@@ -61,14 +77,19 @@ Commands:
|
|
|
61
77
|
init Create a starter config + placeholder PNGs + copy.csv
|
|
62
78
|
wizard Step-by-step setup (locales/devices/template)
|
|
63
79
|
demo Create a demo project + export (no assets required)
|
|
64
|
-
agent-run Non-interactive end-to-end flow (init -> validate -> build -> verify)
|
|
80
|
+
agent-run Non-interactive end-to-end flow (init -> validate -> build -> verify -> optional stage/report)
|
|
65
81
|
devices List device ids (for shipscreens.config.yml)
|
|
66
|
-
templates List style template ids (for init/wizard/agent-run)
|
|
82
|
+
templates List style template ids (for init/wizard/write-starter-config/agent-run)
|
|
67
83
|
validate Validate shipscreens.config.yml (schema + asset paths)
|
|
68
84
|
lock Generate shipscreens.lock.json with sha256 hashes
|
|
69
85
|
build Generate Fastlane-ready outputs (headless Chromium, zero-padded filenames)
|
|
70
86
|
verify Verify Fastlane outputs (dir and/or zip)
|
|
71
87
|
stage Copy only upload-ready files into a new root
|
|
88
|
+
inspect-release-context Inspect config, Fastlane roots, devices/locales, and missing assets
|
|
89
|
+
plan-release Turn inspection into the next safe agent/CLI command sequence
|
|
90
|
+
write-starter-config Non-interactively create config + copy.csv + placeholder PNGs for agents
|
|
91
|
+
capture-screenshots Capture the currently visible connected device/emulator screen into a local source folder
|
|
92
|
+
import-screenshots Copy existing screenshots into configured asset paths
|
|
72
93
|
export Export helper files for other tools
|
|
73
94
|
plan Print a deterministic build/stage plan (JSON)
|
|
74
95
|
copy Import locale copy from copy.csv into shipscreens.config.yml
|
|
@@ -78,11 +99,11 @@ Commands:
|
|
|
78
99
|
|
|
79
100
|
Options:
|
|
80
101
|
-c, --config <path> Path to shipscreens.config.yml (default: ./shipscreens.config.yml)
|
|
81
|
-
--dir <path> Output directory for init (default: .)
|
|
82
|
-
--slides <n> Number of slides to scaffold (init, default: 5, max: 10)
|
|
83
|
-
--locales <list> Comma-separated locales for init (default: en-US)
|
|
84
|
-
--devices <list> Comma-separated device ids for init (default: iphone69,pixel8)
|
|
85
|
-
--force Overwrite files when running init
|
|
102
|
+
--dir <path> Output directory for init/write-starter-config (default: .)
|
|
103
|
+
--slides <n> Number of slides to scaffold (init/write-starter-config, default: 5, max: 10)
|
|
104
|
+
--locales <list> Comma-separated locales for init/write-starter-config (default: en-US)
|
|
105
|
+
--devices <list> Comma-separated device ids for init/write-starter-config (default: iphone69,pixel8)
|
|
106
|
+
--force Overwrite files when running init/write-starter-config
|
|
86
107
|
--wizard Run step-by-step init prompts
|
|
87
108
|
--style <value> Style preset: default | template:<id> | <template-id>
|
|
88
109
|
--template <id> Template preset (alias for --style template:<id>)
|
|
@@ -101,13 +122,24 @@ Options:
|
|
|
101
122
|
--zip-out <path> ZIP output file path (default: <out>/fastlane_assets.zip)
|
|
102
123
|
--profile <appstore|playstore|any> Strict verification/staging rules per store (default: any)
|
|
103
124
|
--variant <id> ASO experiment variant scope (writes under variants/<id>/...).
|
|
104
|
-
--
|
|
125
|
+
--platform <value> Capture source: auto|android|ios-simulator|ios-device (default: auto)
|
|
126
|
+
--device <id> Device serial/UDID/name for capture-screenshots
|
|
127
|
+
--from <dir> Source output root for staging, or source screenshots for import-screenshots
|
|
128
|
+
--locale <id|all> Locale target for import-screenshots (default: primary config locale)
|
|
129
|
+
--slot <n> Slot number for capture filename (01.png..99.png)
|
|
130
|
+
--name <file.png> Explicit capture filename
|
|
131
|
+
--list List capturable devices instead of writing a screenshot
|
|
132
|
+
--allow-partial Let import-screenshots copy fewer images than configured targets
|
|
105
133
|
--check Verify outputs are valid/up-to-date (no write)
|
|
106
134
|
--json Emit machine-readable JSON (most commands; plan always emits JSON)
|
|
107
135
|
--mode <shipscreens|rendered|raw|frameit> Build mode (default: rendered). shipscreens=rendered alias, frameit runs raw + export framefile --check
|
|
108
136
|
--format <dir|zip> Output format (default: dir)
|
|
109
137
|
--zip Also write a ZIP (same as --format zip)
|
|
110
138
|
--clean Delete existing outputs for the current locale/device/bucket before writing
|
|
139
|
+
--stage For agent-run, also create a clean upload root after verify
|
|
140
|
+
--stage-out <dir> For agent-run, staged upload root (default: <out>-stage; implies --stage)
|
|
141
|
+
--report-json <path> For agent-run, write a machine-readable proof report (default with --stage: <out>/shipscreens.agent-report.json)
|
|
142
|
+
--report-md <path> For agent-run, write a short Markdown proof summary (default with --stage: <out>/shipscreens.agent-summary.md)
|
|
111
143
|
--require-pro Fail the build if Pro access is not available
|
|
112
144
|
--manual Print a login URL instead of starting a local callback server
|
|
113
145
|
--redirect-url <url> Full redirect URL after manual login (for auth finish)
|
|
@@ -123,9 +155,8 @@ Options:
|
|
|
123
155
|
-h, --help Show help
|
|
124
156
|
|
|
125
157
|
Quickstart (no browser):
|
|
126
|
-
shipscreens
|
|
127
|
-
shipscreens
|
|
128
|
-
shipscreens verify --out out --zip --profile appstore
|
|
158
|
+
shipscreens write-starter-config --profile appstore
|
|
159
|
+
shipscreens agent-run --mode raw --zip --out out/agent --stage --profile appstore
|
|
129
160
|
|
|
130
161
|
MCP quickstart:
|
|
131
162
|
shipscreens mcp init --client cursor
|
|
@@ -253,6 +284,172 @@ async function findPlaceholderAssets({ configPath }) {
|
|
|
253
284
|
return matches;
|
|
254
285
|
}
|
|
255
286
|
|
|
287
|
+
function defaultAgentStageOutDir(outDir) {
|
|
288
|
+
const raw = String(outDir || 'out/agent').trim() || 'out/agent';
|
|
289
|
+
const trimmed = raw.replace(/[\\/]+$/, '');
|
|
290
|
+
return `${trimmed || 'out/agent'}-stage`;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function resolveAgentArtifactPath({ baseDir, filePath }) {
|
|
294
|
+
const raw = String(filePath || '').trim();
|
|
295
|
+
if (!raw) return null;
|
|
296
|
+
return path.isAbsolute(raw) ? raw : path.resolve(baseDir, raw);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function writeAgentArtifact(filePath, content) {
|
|
300
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
301
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function coalesceCount(...values) {
|
|
305
|
+
for (const value of values) {
|
|
306
|
+
if (Number.isFinite(Number(value))) return Number(value);
|
|
307
|
+
}
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function createAgentReport({
|
|
312
|
+
configPath,
|
|
313
|
+
targetDir,
|
|
314
|
+
outDir,
|
|
315
|
+
stageOutDir,
|
|
316
|
+
zipOut,
|
|
317
|
+
format,
|
|
318
|
+
mode,
|
|
319
|
+
profile,
|
|
320
|
+
variant,
|
|
321
|
+
requirePro,
|
|
322
|
+
build,
|
|
323
|
+
verify,
|
|
324
|
+
stage,
|
|
325
|
+
releaseContext,
|
|
326
|
+
reportPaths,
|
|
327
|
+
}) {
|
|
328
|
+
const warnings = [];
|
|
329
|
+
if (!requirePro) {
|
|
330
|
+
warnings.push('Free CLI run may include a watermark. Run shipscreens auth login and rerun with --require-pro before production export.');
|
|
331
|
+
}
|
|
332
|
+
if (!stage) {
|
|
333
|
+
warnings.push('No staged upload root was requested. Pass --stage to create a clean deliver/supply root.');
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const nextSteps = [];
|
|
337
|
+
if (stage) {
|
|
338
|
+
nextSteps.push('Review the staged upload root before store submission.');
|
|
339
|
+
} else {
|
|
340
|
+
nextSteps.push('Rerun agent-run with --stage to create a clean upload root.');
|
|
341
|
+
}
|
|
342
|
+
if (!requirePro) {
|
|
343
|
+
nextSteps.push('Unlock Pro, then rerun with --require-pro to fail closed if watermark-free export is unavailable.');
|
|
344
|
+
} else {
|
|
345
|
+
nextSteps.push('Keep --require-pro in CI so paid export failures stop the release before upload.');
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return {
|
|
349
|
+
schemaVersion: 1,
|
|
350
|
+
generatedAt: new Date().toISOString(),
|
|
351
|
+
command: 'agent-run',
|
|
352
|
+
status: 'ok',
|
|
353
|
+
workspace: targetDir,
|
|
354
|
+
configPath,
|
|
355
|
+
mode,
|
|
356
|
+
format,
|
|
357
|
+
profile,
|
|
358
|
+
variant: variant || null,
|
|
359
|
+
requirePro: Boolean(requirePro),
|
|
360
|
+
outputs: {
|
|
361
|
+
buildRoot: outDir,
|
|
362
|
+
zipPath: build?.zipPath || verify?.zipPath || zipOut || null,
|
|
363
|
+
iosDir: verify?.iosDir || build?.iosDir || null,
|
|
364
|
+
androidDir: verify?.androidDir || build?.androidDir || null,
|
|
365
|
+
stageRoot: stage?.out || stageOutDir || null,
|
|
366
|
+
stagedIosDir: stage?.iosDir || null,
|
|
367
|
+
stagedAndroidDir: stage?.androidDir || null,
|
|
368
|
+
reportJson: reportPaths.json || null,
|
|
369
|
+
reportMarkdown: reportPaths.markdown || null,
|
|
370
|
+
},
|
|
371
|
+
counts: {
|
|
372
|
+
locales: coalesceCount(verify?.locales, stage?.locales, build?.locales),
|
|
373
|
+
slides: coalesceCount(verify?.slides, stage?.slides, build?.slides),
|
|
374
|
+
iosDevices: coalesceCount(verify?.iosDevices, stage?.iosDevices, build?.iosDevices),
|
|
375
|
+
androidDevices: coalesceCount(verify?.androidDevices, stage?.androidDevices, build?.androidDevices),
|
|
376
|
+
stagedFiles: stage ? coalesceCount(stage.files) : null,
|
|
377
|
+
},
|
|
378
|
+
warnings,
|
|
379
|
+
nextSteps,
|
|
380
|
+
releaseContext: releaseContext
|
|
381
|
+
? {
|
|
382
|
+
storeTarget: releaseContext.storeTarget,
|
|
383
|
+
config: releaseContext.config,
|
|
384
|
+
missingAssets: releaseContext.missingAssets,
|
|
385
|
+
screenshotRoots: releaseContext.screenshotRoots,
|
|
386
|
+
warnings: releaseContext.warnings,
|
|
387
|
+
questions: releaseContext.questions,
|
|
388
|
+
agentHandoff: releaseContext.agentHandoff,
|
|
389
|
+
}
|
|
390
|
+
: null,
|
|
391
|
+
build,
|
|
392
|
+
verify,
|
|
393
|
+
stage: stage || null,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function renderAgentSummaryMarkdown(report) {
|
|
398
|
+
const releaseContextLines = report.releaseContext
|
|
399
|
+
? [
|
|
400
|
+
'## Release Context',
|
|
401
|
+
`- Store target: ${report.releaseContext.storeTarget?.profile || 'unknown'} (${report.releaseContext.storeTarget?.confidence || 'unknown'})`,
|
|
402
|
+
`- Config: ${report.releaseContext.config?.relativePath || 'unknown'} (${report.releaseContext.config?.valid ? 'valid' : 'not ready'})`,
|
|
403
|
+
`- Missing assets: ${report.releaseContext.missingAssets?.length || 0}`,
|
|
404
|
+
`- Open questions: ${report.releaseContext.questions?.length || 0}`,
|
|
405
|
+
'',
|
|
406
|
+
]
|
|
407
|
+
: ['## Release Context', '- Not inspected', ''];
|
|
408
|
+
const lines = [
|
|
409
|
+
'# ShipScreens Agent Report',
|
|
410
|
+
'',
|
|
411
|
+
`Generated: ${report.generatedAt}`,
|
|
412
|
+
`Status: ${report.status}`,
|
|
413
|
+
'',
|
|
414
|
+
'## Scope',
|
|
415
|
+
`- Workspace: ${report.workspace}`,
|
|
416
|
+
`- Config: ${report.configPath}`,
|
|
417
|
+
`- Mode: ${report.mode}`,
|
|
418
|
+
`- Format: ${report.format}`,
|
|
419
|
+
`- Profile: ${report.profile}`,
|
|
420
|
+
`- Variant: ${report.variant || 'none'}`,
|
|
421
|
+
`- Require Pro: ${report.requirePro ? 'yes' : 'no'}`,
|
|
422
|
+
'',
|
|
423
|
+
...releaseContextLines,
|
|
424
|
+
'## Outputs',
|
|
425
|
+
`- Build root: ${report.outputs.buildRoot}`,
|
|
426
|
+
`- ZIP: ${report.outputs.zipPath || 'not requested'}`,
|
|
427
|
+
`- iOS dir: ${report.outputs.iosDir || 'not generated'}`,
|
|
428
|
+
`- Android dir: ${report.outputs.androidDir || 'not generated'}`,
|
|
429
|
+
`- Stage root: ${report.outputs.stageRoot || 'not requested'}`,
|
|
430
|
+
'',
|
|
431
|
+
'## Verification',
|
|
432
|
+
`- Locales: ${report.counts.locales}`,
|
|
433
|
+
`- Slides: ${report.counts.slides}`,
|
|
434
|
+
`- iOS devices: ${report.counts.iosDevices}`,
|
|
435
|
+
`- Android devices: ${report.counts.androidDevices}`,
|
|
436
|
+
'',
|
|
437
|
+
'## Stage',
|
|
438
|
+
report.stage
|
|
439
|
+
? `- Staged files: ${report.counts.stagedFiles}\n- Staged iOS dir: ${report.outputs.stagedIosDir || 'none'}\n- Staged Android dir: ${report.outputs.stagedAndroidDir || 'none'}`
|
|
440
|
+
: '- Not requested',
|
|
441
|
+
'',
|
|
442
|
+
'## Warnings',
|
|
443
|
+
...(report.warnings.length ? report.warnings.map((item) => `- ${item}`) : ['- None']),
|
|
444
|
+
'',
|
|
445
|
+
'## Next Steps',
|
|
446
|
+
...report.nextSteps.map((item) => `- ${item}`),
|
|
447
|
+
'',
|
|
448
|
+
];
|
|
449
|
+
|
|
450
|
+
return `${lines.join('\n')}\n`;
|
|
451
|
+
}
|
|
452
|
+
|
|
256
453
|
async function main() {
|
|
257
454
|
const { positionals, values } = parseArgs({
|
|
258
455
|
args: process.argv.slice(2),
|
|
@@ -266,13 +463,23 @@ async function main() {
|
|
|
266
463
|
zip: { type: 'boolean' },
|
|
267
464
|
'zip-out': { type: 'string' },
|
|
268
465
|
clean: { type: 'boolean' },
|
|
466
|
+
stage: { type: 'boolean' },
|
|
467
|
+
'stage-out': { type: 'string' },
|
|
468
|
+
'report-json': { type: 'string' },
|
|
469
|
+
'report-md': { type: 'string' },
|
|
269
470
|
'ios-dir': { type: 'string' },
|
|
270
471
|
'android-dir': { type: 'string' },
|
|
271
472
|
'strings-encoding': { type: 'string' },
|
|
272
473
|
'framefile-strategy': { type: 'string' },
|
|
273
474
|
profile: { type: 'string' },
|
|
274
475
|
variant: { type: 'string' },
|
|
476
|
+
platform: { type: 'string' },
|
|
477
|
+
device: { type: 'string' },
|
|
275
478
|
from: { type: 'string' },
|
|
479
|
+
locale: { type: 'string' },
|
|
480
|
+
slot: { type: 'string' },
|
|
481
|
+
name: { type: 'string' },
|
|
482
|
+
list: { type: 'boolean' },
|
|
276
483
|
json: { type: 'boolean' },
|
|
277
484
|
'require-pro': { type: 'boolean' },
|
|
278
485
|
manual: { type: 'boolean' },
|
|
@@ -305,6 +512,7 @@ async function main() {
|
|
|
305
512
|
client: { type: 'string' },
|
|
306
513
|
'package-spec': { type: 'string' },
|
|
307
514
|
'windows-cmd-shim': { type: 'boolean' },
|
|
515
|
+
'allow-partial': { type: 'boolean' },
|
|
308
516
|
help: { type: 'boolean', short: 'h' },
|
|
309
517
|
},
|
|
310
518
|
});
|
|
@@ -378,6 +586,78 @@ async function main() {
|
|
|
378
586
|
return;
|
|
379
587
|
}
|
|
380
588
|
|
|
589
|
+
if (command === 'inspect-release-context') {
|
|
590
|
+
const result = await runInspectReleaseContext({
|
|
591
|
+
dir: values.dir,
|
|
592
|
+
configPath: values.config,
|
|
593
|
+
});
|
|
594
|
+
emitPayload('inspect-release-context', result, renderInspectReleaseContextSummary(result));
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
if (command === 'plan-release') {
|
|
599
|
+
const result = await runPlanRelease({
|
|
600
|
+
dir: values.dir,
|
|
601
|
+
configPath: values.config,
|
|
602
|
+
profile: values.profile,
|
|
603
|
+
mode: values.mode,
|
|
604
|
+
outDir: values.out,
|
|
605
|
+
stageOutDir: values['stage-out'],
|
|
606
|
+
});
|
|
607
|
+
emitPayload('plan-release', result, renderPlanReleaseSummary(result));
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
if (command === 'write-starter-config') {
|
|
612
|
+
const stylePreset = resolveStylePreset({ styleFlag: values.style, templateFlag: values.template });
|
|
613
|
+
const result = await runWriteStarterConfig({
|
|
614
|
+
dir: values.dir,
|
|
615
|
+
profile: values.profile,
|
|
616
|
+
slides: values.slides,
|
|
617
|
+
locales: values.locales,
|
|
618
|
+
devices: values.devices,
|
|
619
|
+
assets: stylePreset.presetAssets,
|
|
620
|
+
style: stylePreset.presetStyle,
|
|
621
|
+
force: values.force,
|
|
622
|
+
outDir: values.out,
|
|
623
|
+
stageOutDir: values['stage-out'],
|
|
624
|
+
});
|
|
625
|
+
emitPayload('write-starter-config', result, renderWriteStarterConfigSummary(result));
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
if (command === 'capture-screenshots') {
|
|
630
|
+
const result = await runCaptureScreenshots({
|
|
631
|
+
dir: values.dir,
|
|
632
|
+
platform: values.platform,
|
|
633
|
+
device: values.device,
|
|
634
|
+
outDir: values.out,
|
|
635
|
+
name: values.name,
|
|
636
|
+
slot: values.slot,
|
|
637
|
+
locale: values.locale,
|
|
638
|
+
profile: values.profile,
|
|
639
|
+
list: values.list,
|
|
640
|
+
});
|
|
641
|
+
emitPayload('capture-screenshots', result, renderCaptureScreenshotsSummary(result));
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
if (command === 'import-screenshots') {
|
|
646
|
+
const result = await runImportScreenshots({
|
|
647
|
+
dir: values.dir,
|
|
648
|
+
configPath: values.config,
|
|
649
|
+
fromDir: values.from,
|
|
650
|
+
locale: values.locale,
|
|
651
|
+
profile: values.profile,
|
|
652
|
+
outDir: values.out,
|
|
653
|
+
stageOutDir: values['stage-out'],
|
|
654
|
+
force: values.force,
|
|
655
|
+
allowPartial: values['allow-partial'],
|
|
656
|
+
});
|
|
657
|
+
emitPayload('import-screenshots', result, renderImportScreenshotsSummary(result));
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
|
|
381
661
|
if (command === 'auth') {
|
|
382
662
|
await runAuth({ subcommand: positionals[1], values });
|
|
383
663
|
return;
|
|
@@ -435,8 +715,7 @@ async function main() {
|
|
|
435
715
|
`- ${result.configPath}\n` +
|
|
436
716
|
`- ${result.csvPath}\n` +
|
|
437
717
|
`Next: replace placeholder PNGs in assets/, then run:\n` +
|
|
438
|
-
` shipscreens
|
|
439
|
-
` shipscreens verify --out out --zip --profile appstore\n` +
|
|
718
|
+
` shipscreens agent-run --mode raw --zip --out out/agent --stage --profile appstore\n` +
|
|
440
719
|
`Pro unlock (remove watermark):\n` +
|
|
441
720
|
` shipscreens auth login`
|
|
442
721
|
);
|
|
@@ -499,7 +778,7 @@ async function main() {
|
|
|
499
778
|
const demoCopyByLocale = {
|
|
500
779
|
// Keep demo copy ASCII-only so it renders consistently across environments/fonts.
|
|
501
780
|
'en-US': [
|
|
502
|
-
['
|
|
781
|
+
['Tell your coding agent', 'keep flow -> verify -> stage'],
|
|
503
782
|
['Fastlane-ready outputs', 'deliver (iOS) + supply (Android)'],
|
|
504
783
|
['Reproducible exports', 'same inputs -> same outputs'],
|
|
505
784
|
['Verify before upload', 'catch mixed folders early'],
|
|
@@ -507,7 +786,7 @@ async function main() {
|
|
|
507
786
|
],
|
|
508
787
|
// If the demo includes non-English locales, reuse the same copy to avoid implying translation is built-in.
|
|
509
788
|
'ja-JP': [
|
|
510
|
-
['
|
|
789
|
+
['Tell your coding agent', 'keep flow -> verify -> stage'],
|
|
511
790
|
['Fastlane-ready outputs', 'deliver (iOS) + supply (Android)'],
|
|
512
791
|
['Reproducible exports', 'same inputs -> same outputs'],
|
|
513
792
|
['Verify before upload', 'catch mixed folders early'],
|
|
@@ -641,8 +920,7 @@ async function main() {
|
|
|
641
920
|
`- ${result.configPath}\n` +
|
|
642
921
|
`- ${result.csvPath}\n` +
|
|
643
922
|
`Next: replace placeholder PNGs in assets/, then run:\n` +
|
|
644
|
-
` shipscreens
|
|
645
|
-
` shipscreens verify --out out --zip --profile appstore\n` +
|
|
923
|
+
` shipscreens agent-run --mode raw --zip --out out/agent --stage --profile appstore\n` +
|
|
646
924
|
`Pro unlock (remove watermark):\n` +
|
|
647
925
|
` shipscreens auth login`
|
|
648
926
|
);
|
|
@@ -691,12 +969,22 @@ async function main() {
|
|
|
691
969
|
const outDir = values.out || 'out/agent';
|
|
692
970
|
const zipOut = rawZipOut || undefined;
|
|
693
971
|
const zip = format === 'zip' || Boolean(zipOut);
|
|
972
|
+
const stageRequested = Boolean(values.stage || values['stage-out']);
|
|
973
|
+
const rawStageOutDir = typeof values['stage-out'] === 'string' ? values['stage-out'].trim() : '';
|
|
974
|
+
const stageOutDir = stageRequested ? rawStageOutDir || defaultAgentStageOutDir(outDir) : null;
|
|
975
|
+
const rawReportJsonPath = typeof values['report-json'] === 'string' ? values['report-json'].trim() : '';
|
|
976
|
+
const rawReportMdPath = typeof values['report-md'] === 'string' ? values['report-md'].trim() : '';
|
|
977
|
+
const reportJsonPathValue =
|
|
978
|
+
rawReportJsonPath || (stageRequested ? path.join(outDir, 'shipscreens.agent-report.json') : '');
|
|
979
|
+
const reportMdPathValue =
|
|
980
|
+
rawReportMdPath || (stageRequested ? path.join(outDir, 'shipscreens.agent-summary.md') : '');
|
|
694
981
|
const { config } = await loadShipScreensConfig(configPath);
|
|
695
982
|
const hasAndroid = (config.devices || []).some((device) => device.platform === 'android');
|
|
696
983
|
const hasIos = (config.devices || []).some((device) => device.platform !== 'android');
|
|
697
984
|
const defaultProfile = hasIos && !hasAndroid ? 'appstore' : !hasIos && hasAndroid ? 'playstore' : 'any';
|
|
698
985
|
const profile = values.profile || defaultProfile;
|
|
699
986
|
const requirePro = Boolean(values['require-pro']);
|
|
987
|
+
const releaseContext = await runInspectReleaseContext({ dir: targetDir, configPath });
|
|
700
988
|
const { token: cliAuthToken, profile: cliAuthProfile } = await resolveCliAuth({ requirePro });
|
|
701
989
|
|
|
702
990
|
const result = await runBuild({
|
|
@@ -726,6 +1014,44 @@ async function main() {
|
|
|
726
1014
|
variant: values.variant,
|
|
727
1015
|
});
|
|
728
1016
|
|
|
1017
|
+
const stageResult = stageRequested
|
|
1018
|
+
? await runStage({
|
|
1019
|
+
configPath,
|
|
1020
|
+
fromDir: outDir,
|
|
1021
|
+
outDir: stageOutDir,
|
|
1022
|
+
profile,
|
|
1023
|
+
variant: values.variant,
|
|
1024
|
+
})
|
|
1025
|
+
: null;
|
|
1026
|
+
|
|
1027
|
+
const reportPaths = {
|
|
1028
|
+
json: resolveAgentArtifactPath({ baseDir: targetDir, filePath: reportJsonPathValue }),
|
|
1029
|
+
markdown: resolveAgentArtifactPath({ baseDir: targetDir, filePath: reportMdPathValue }),
|
|
1030
|
+
};
|
|
1031
|
+
const agentReport = createAgentReport({
|
|
1032
|
+
configPath,
|
|
1033
|
+
targetDir,
|
|
1034
|
+
outDir,
|
|
1035
|
+
stageOutDir,
|
|
1036
|
+
zipOut,
|
|
1037
|
+
format,
|
|
1038
|
+
mode,
|
|
1039
|
+
profile,
|
|
1040
|
+
variant: values.variant,
|
|
1041
|
+
requirePro,
|
|
1042
|
+
build: result,
|
|
1043
|
+
verify: verifyResult,
|
|
1044
|
+
stage: stageResult,
|
|
1045
|
+
releaseContext,
|
|
1046
|
+
reportPaths,
|
|
1047
|
+
});
|
|
1048
|
+
if (reportPaths.json) {
|
|
1049
|
+
await writeAgentArtifact(reportPaths.json, `${JSON.stringify(agentReport, null, 2)}\n`);
|
|
1050
|
+
}
|
|
1051
|
+
if (reportPaths.markdown) {
|
|
1052
|
+
await writeAgentArtifact(reportPaths.markdown, renderAgentSummaryMarkdown(agentReport));
|
|
1053
|
+
}
|
|
1054
|
+
|
|
729
1055
|
const summary = [
|
|
730
1056
|
`OK: agent-run completed`,
|
|
731
1057
|
`${verifyResult.locales} locale(s)`,
|
|
@@ -734,12 +1060,16 @@ async function main() {
|
|
|
734
1060
|
`${verifyResult.androidDevices} Android device(s) -> ${verifyResult.androidDir}`,
|
|
735
1061
|
];
|
|
736
1062
|
if (result.zipPath || verifyResult.zipPath) summary.push(`zip -> ${result.zipPath || verifyResult.zipPath}`);
|
|
1063
|
+
if (stageResult) summary.push(`stage -> ${stageResult.out}`);
|
|
1064
|
+
if (reportPaths.json) summary.push(`report json -> ${reportPaths.json}`);
|
|
1065
|
+
if (reportPaths.markdown) summary.push(`report md -> ${reportPaths.markdown}`);
|
|
737
1066
|
emitPayload(
|
|
738
1067
|
'agent-run',
|
|
739
1068
|
{
|
|
740
1069
|
configPath,
|
|
741
1070
|
outDir,
|
|
742
1071
|
zipOut: zipOut || null,
|
|
1072
|
+
stageOutDir,
|
|
743
1073
|
format,
|
|
744
1074
|
mode,
|
|
745
1075
|
profile,
|
|
@@ -747,6 +1077,10 @@ async function main() {
|
|
|
747
1077
|
requirePro,
|
|
748
1078
|
build: result,
|
|
749
1079
|
verify: verifyResult,
|
|
1080
|
+
stage: stageResult,
|
|
1081
|
+
agentReport,
|
|
1082
|
+
releaseContext,
|
|
1083
|
+
reportPaths,
|
|
750
1084
|
},
|
|
751
1085
|
summary.join(', ')
|
|
752
1086
|
);
|