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.
Files changed (531) hide show
  1. package/README.md +14 -4
  2. package/bin/shipscreens.js +352 -18
  3. package/cli/commands/captureScreenshots.js +409 -0
  4. package/cli/commands/importScreenshots.js +377 -0
  5. package/cli/commands/inspectReleaseContext.js +607 -0
  6. package/cli/commands/planRelease.js +324 -0
  7. package/cli/commands/writeStarterConfig.js +233 -0
  8. package/cli/mcpServer.js +172 -3
  9. package/dist/.well-known/ai-agents.json +58 -11
  10. package/dist/.well-known/llms-full.txt +80 -17
  11. package/dist/.well-known/llms.txt +38 -12
  12. package/dist/.well-known/mcp-server.json +4 -4
  13. package/dist/ai-agents.json +58 -11
  14. package/dist/app/assets/AgentCli-nIqgOG-i.js +17 -0
  15. package/dist/app/assets/AgentCli-nIqgOG-i.js.map +1 -0
  16. package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
  17. package/dist/app/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
  18. package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
  19. package/dist/app/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
  20. package/dist/app/assets/App-BRKxkubQ.css +1 -0
  21. package/dist/app/assets/App-CZiyX8-L.js +14 -0
  22. package/dist/app/assets/App-CZiyX8-L.js.map +1 -0
  23. package/dist/app/assets/AppReviewAso-DYOCuqgV.js +4 -0
  24. package/dist/app/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
  25. package/dist/app/assets/Cancelled-CP6V6uDb.js +2 -0
  26. package/dist/app/assets/Cancelled-CP6V6uDb.js.map +1 -0
  27. package/dist/app/assets/CopyButton-BFCx6EPg.js +2 -0
  28. package/dist/app/assets/CopyButton-BFCx6EPg.js.map +1 -0
  29. package/dist/app/assets/DesignPartner-B4J7f0Bx.js +4 -0
  30. package/dist/app/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
  31. package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
  32. package/dist/app/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
  33. package/dist/app/assets/FirstExport-qfY7uE8r.js +6 -0
  34. package/dist/app/assets/FirstExport-qfY7uE8r.js.map +1 -0
  35. package/dist/app/assets/FitPanel-B1J0V1jK.js +2 -0
  36. package/dist/app/assets/FitPanel-B1J0V1jK.js.map +1 -0
  37. package/dist/app/assets/FivePanelFramework-C4yq58kM.js +62 -0
  38. package/dist/app/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
  39. package/dist/app/assets/ForgotPassword-KF_HFGyb.js +2 -0
  40. package/dist/app/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
  41. package/dist/app/assets/Landing-B_CvZDXJ.js +2 -0
  42. package/dist/app/assets/Landing-B_CvZDXJ.js.map +1 -0
  43. package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
  44. package/dist/app/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
  45. package/dist/app/assets/Legal-BwGbEjDk.js +2 -0
  46. package/dist/app/assets/Legal-BwGbEjDk.js.map +1 -0
  47. package/dist/app/assets/NotFound-Ba1Bw7uu.js +2 -0
  48. package/dist/app/assets/NotFound-Ba1Bw7uu.js.map +1 -0
  49. package/dist/app/assets/Pricing-Dt-V4Gqc.js +20 -0
  50. package/dist/app/assets/Pricing-Dt-V4Gqc.js.map +1 -0
  51. package/dist/app/assets/Privacy-C6MrXYPO.js +2 -0
  52. package/dist/app/assets/Privacy-C6MrXYPO.js.map +1 -0
  53. package/dist/app/assets/Proof-C3DDFAhm.js +20 -0
  54. package/dist/app/assets/Proof-C3DDFAhm.js.map +1 -0
  55. package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
  56. package/dist/app/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
  57. package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
  58. package/dist/app/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
  59. package/dist/app/assets/Security-C1OmAgom.js +2 -0
  60. package/dist/app/assets/Security-C1OmAgom.js.map +1 -0
  61. package/dist/app/assets/SignIn-C_wwnmvu.js +2 -0
  62. package/dist/app/assets/SignIn-C_wwnmvu.js.map +1 -0
  63. package/dist/app/assets/SignUp-Dm5HalC6.js +2 -0
  64. package/dist/app/assets/SignUp-Dm5HalC6.js.map +1 -0
  65. package/dist/app/assets/SiteHeader-CJqQ0pL3.js +2 -0
  66. package/dist/app/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
  67. package/dist/app/assets/StickyMobileCta-REC3DROG.js +2 -0
  68. package/dist/app/assets/StickyMobileCta-REC3DROG.js.map +1 -0
  69. package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
  70. package/dist/app/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
  71. package/dist/app/assets/Success-D6b4wLPD.js +2 -0
  72. package/dist/app/assets/Success-D6b4wLPD.js.map +1 -0
  73. package/dist/app/assets/Terms-BMt39FQK.js +2 -0
  74. package/dist/app/assets/Terms-BMt39FQK.js.map +1 -0
  75. package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
  76. package/dist/app/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
  77. package/dist/app/assets/ToolsIndex-d1szo5bn.js +6 -0
  78. package/dist/app/assets/ToolsIndex-d1szo5bn.js.map +1 -0
  79. package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
  80. package/dist/app/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
  81. package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
  82. package/dist/app/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
  83. package/dist/app/assets/agentHandoff-BGmHqDwv.js +2 -0
  84. package/dist/app/assets/agentHandoff-BGmHqDwv.js.map +1 -0
  85. package/dist/app/assets/apiClient-3WVm94VW.js +2 -0
  86. package/dist/app/assets/apiClient-3WVm94VW.js.map +1 -0
  87. package/dist/app/assets/calculator-CofuwQa8.js +2 -0
  88. package/dist/app/assets/calculator-CofuwQa8.js.map +1 -0
  89. package/dist/app/assets/check-Fm2iQO64.js +2 -0
  90. package/dist/app/assets/check-Fm2iQO64.js.map +1 -0
  91. package/dist/app/assets/chevron-down-BIXHKpnf.js +2 -0
  92. package/dist/app/assets/chevron-down-BIXHKpnf.js.map +1 -0
  93. package/dist/app/assets/chunk-BHe-jwch.js +1 -0
  94. package/dist/app/assets/circle-check-X08qqy40.js +2 -0
  95. package/dist/app/assets/circle-check-X08qqy40.js.map +1 -0
  96. package/dist/app/assets/copy-KD-LYJ0z.js +2 -0
  97. package/dist/app/assets/copy-KD-LYJ0z.js.map +1 -0
  98. package/dist/app/assets/crop-K1LOmRty.js +2 -0
  99. package/dist/app/assets/crop-K1LOmRty.js.map +1 -0
  100. package/dist/app/assets/designPartnerRequest-DYqMElJd.js +2 -0
  101. package/dist/app/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
  102. package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
  103. package/dist/app/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
  104. package/dist/app/assets/download-BXzoc-Y3.js +2 -0
  105. package/dist/app/assets/download-BXzoc-Y3.js.map +1 -0
  106. package/dist/app/assets/eye-CHvLhG2r.js +2 -0
  107. package/dist/app/assets/eye-CHvLhG2r.js.map +1 -0
  108. package/dist/app/assets/file-text-CU-ETLz1.js +2 -0
  109. package/dist/app/assets/file-text-CU-ETLz1.js.map +1 -0
  110. package/dist/app/assets/folder-tree-raVH0Y5V.js +2 -0
  111. package/dist/app/assets/folder-tree-raVH0Y5V.js.map +1 -0
  112. package/dist/app/assets/grid-3x3-cWuhGQfz.js +2 -0
  113. package/dist/app/assets/grid-3x3-cWuhGQfz.js.map +1 -0
  114. package/dist/app/assets/hardeningOffer-tkjlPDU-.js +2 -0
  115. package/dist/app/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
  116. package/dist/app/assets/hero/agent-starter-workflow.png +0 -0
  117. package/dist/app/assets/hero/agent-starter-workflow.webp +0 -0
  118. package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
  119. package/dist/app/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
  120. package/dist/app/assets/index-BW_YmKvl.css +2 -0
  121. package/dist/app/assets/index-D7D6ZRCW.js +212 -0
  122. package/dist/app/assets/index-D7D6ZRCW.js.map +1 -0
  123. package/dist/app/assets/jszip.min-XyfP2hUJ.js +3 -0
  124. package/dist/app/assets/jszip.min-XyfP2hUJ.js.map +1 -0
  125. package/dist/app/assets/layout-grid-Cq_e979G.js +2 -0
  126. package/dist/app/assets/layout-grid-Cq_e979G.js.map +1 -0
  127. package/dist/app/assets/lock-Di7P18Ts.js +2 -0
  128. package/dist/app/assets/lock-Di7P18Ts.js.map +1 -0
  129. package/dist/app/assets/rocket-DHdrCHKD.js +2 -0
  130. package/dist/app/assets/rocket-DHdrCHKD.js.map +1 -0
  131. package/dist/app/assets/shield-check-CxpHNdp0.js +2 -0
  132. package/dist/app/assets/shield-check-CxpHNdp0.js.map +1 -0
  133. package/dist/app/assets/smartphone-DXKiqu57.js +2 -0
  134. package/dist/app/assets/smartphone-DXKiqu57.js.map +1 -0
  135. package/dist/app/assets/stripeClient-CuZgvzca.js +2 -0
  136. package/dist/app/assets/stripeClient-CuZgvzca.js.map +1 -0
  137. package/dist/app/assets/terminal-J0iyJTv2.js +2 -0
  138. package/dist/app/assets/terminal-J0iyJTv2.js.map +1 -0
  139. package/dist/app/assets/triangle-alert-BA0HP6zD.js +2 -0
  140. package/dist/app/assets/triangle-alert-BA0HP6zD.js.map +1 -0
  141. package/dist/app/assets/useAuth-CoS4r8yi.js +22 -0
  142. package/dist/app/assets/useAuth-CoS4r8yi.js.map +1 -0
  143. package/dist/app/assets/users-C-fz7pbn.js +2 -0
  144. package/dist/app/assets/users-C-fz7pbn.js.map +1 -0
  145. package/dist/app/index.html +9 -8
  146. package/dist/assets/AgentCli-nIqgOG-i.js +17 -0
  147. package/dist/assets/AgentCli-nIqgOG-i.js.map +1 -0
  148. package/dist/assets/AgentHandoffPanel-Bf_AJepG.js +2 -0
  149. package/dist/assets/AgentHandoffPanel-Bf_AJepG.js.map +1 -0
  150. package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js +2 -0
  151. package/dist/assets/AgentStarterWorkflowFigure-DW4SMMy7.js.map +1 -0
  152. package/dist/assets/App-BRKxkubQ.css +1 -0
  153. package/dist/assets/App-CZiyX8-L.js +14 -0
  154. package/dist/assets/App-CZiyX8-L.js.map +1 -0
  155. package/dist/assets/AppReviewAso-DYOCuqgV.js +4 -0
  156. package/dist/assets/AppReviewAso-DYOCuqgV.js.map +1 -0
  157. package/dist/assets/Cancelled-CP6V6uDb.js +2 -0
  158. package/dist/assets/Cancelled-CP6V6uDb.js.map +1 -0
  159. package/dist/assets/CopyButton-BFCx6EPg.js +2 -0
  160. package/dist/assets/CopyButton-BFCx6EPg.js.map +1 -0
  161. package/dist/assets/DesignPartner-B4J7f0Bx.js +4 -0
  162. package/dist/assets/DesignPartner-B4J7f0Bx.js.map +1 -0
  163. package/dist/assets/FastlaneScreenshots-cdZE6cGY.js +90 -0
  164. package/dist/assets/FastlaneScreenshots-cdZE6cGY.js.map +1 -0
  165. package/dist/assets/FirstExport-qfY7uE8r.js +6 -0
  166. package/dist/assets/FirstExport-qfY7uE8r.js.map +1 -0
  167. package/dist/assets/FitPanel-B1J0V1jK.js +2 -0
  168. package/dist/assets/FitPanel-B1J0V1jK.js.map +1 -0
  169. package/dist/assets/FivePanelFramework-C4yq58kM.js +62 -0
  170. package/dist/assets/FivePanelFramework-C4yq58kM.js.map +1 -0
  171. package/dist/assets/ForgotPassword-KF_HFGyb.js +2 -0
  172. package/dist/assets/ForgotPassword-KF_HFGyb.js.map +1 -0
  173. package/dist/assets/Landing-B_CvZDXJ.js +2 -0
  174. package/dist/assets/Landing-B_CvZDXJ.js.map +1 -0
  175. package/dist/assets/LanguageSwitcher-hFv9zl1u.js +2 -0
  176. package/dist/assets/LanguageSwitcher-hFv9zl1u.js.map +1 -0
  177. package/dist/assets/Legal-BwGbEjDk.js +2 -0
  178. package/dist/assets/Legal-BwGbEjDk.js.map +1 -0
  179. package/dist/assets/NotFound-Ba1Bw7uu.js +2 -0
  180. package/dist/assets/NotFound-Ba1Bw7uu.js.map +1 -0
  181. package/dist/assets/Pricing-Dt-V4Gqc.js +20 -0
  182. package/dist/assets/Pricing-Dt-V4Gqc.js.map +1 -0
  183. package/dist/assets/Privacy-C6MrXYPO.js +2 -0
  184. package/dist/assets/Privacy-C6MrXYPO.js.map +1 -0
  185. package/dist/assets/Proof-C3DDFAhm.js +20 -0
  186. package/dist/assets/Proof-C3DDFAhm.js.map +1 -0
  187. package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js +27 -0
  188. package/dist/assets/ReleaseFitIntake-DBeb9AFJ.js.map +1 -0
  189. package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js +2 -0
  190. package/dist/assets/SalesEntryQuickRequestCard-Bfa93AYu.js.map +1 -0
  191. package/dist/assets/Security-C1OmAgom.js +2 -0
  192. package/dist/assets/Security-C1OmAgom.js.map +1 -0
  193. package/dist/assets/SignIn-C_wwnmvu.js +2 -0
  194. package/dist/assets/SignIn-C_wwnmvu.js.map +1 -0
  195. package/dist/assets/SignUp-Dm5HalC6.js +2 -0
  196. package/dist/assets/SignUp-Dm5HalC6.js.map +1 -0
  197. package/dist/assets/SiteHeader-CJqQ0pL3.js +2 -0
  198. package/dist/assets/SiteHeader-CJqQ0pL3.js.map +1 -0
  199. package/dist/assets/StickyMobileCta-REC3DROG.js +2 -0
  200. package/dist/assets/StickyMobileCta-REC3DROG.js.map +1 -0
  201. package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js +6 -0
  202. package/dist/assets/StoreAssetsPipeline-DNnnBp0D.js.map +1 -0
  203. package/dist/assets/Success-D6b4wLPD.js +2 -0
  204. package/dist/assets/Success-D6b4wLPD.js.map +1 -0
  205. package/dist/assets/Terms-BMt39FQK.js +2 -0
  206. package/dist/assets/Terms-BMt39FQK.js.map +1 -0
  207. package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js +2 -0
  208. package/dist/assets/ToolGuardrailsPanel-Cclxwdrb.js.map +1 -0
  209. package/dist/assets/ToolsIndex-d1szo5bn.js +6 -0
  210. package/dist/assets/ToolsIndex-d1szo5bn.js.map +1 -0
  211. package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js +2 -0
  212. package/dist/assets/TrustSalesEntryPanel-DuncpgMs.js.map +1 -0
  213. package/dist/assets/WorkloadCalculator-BbFWF2Ls.js +5 -0
  214. package/dist/assets/WorkloadCalculator-BbFWF2Ls.js.map +1 -0
  215. package/dist/assets/agentHandoff-BGmHqDwv.js +2 -0
  216. package/dist/assets/agentHandoff-BGmHqDwv.js.map +1 -0
  217. package/dist/assets/apiClient-3WVm94VW.js +2 -0
  218. package/dist/assets/apiClient-3WVm94VW.js.map +1 -0
  219. package/dist/assets/calculator-CofuwQa8.js +2 -0
  220. package/dist/assets/calculator-CofuwQa8.js.map +1 -0
  221. package/dist/assets/check-Fm2iQO64.js +2 -0
  222. package/dist/assets/check-Fm2iQO64.js.map +1 -0
  223. package/dist/assets/chevron-down-BIXHKpnf.js +2 -0
  224. package/dist/assets/chevron-down-BIXHKpnf.js.map +1 -0
  225. package/dist/assets/chunk-BHe-jwch.js +1 -0
  226. package/dist/assets/circle-check-X08qqy40.js +2 -0
  227. package/dist/assets/circle-check-X08qqy40.js.map +1 -0
  228. package/dist/assets/copy-KD-LYJ0z.js +2 -0
  229. package/dist/assets/copy-KD-LYJ0z.js.map +1 -0
  230. package/dist/assets/crop-K1LOmRty.js +2 -0
  231. package/dist/assets/crop-K1LOmRty.js.map +1 -0
  232. package/dist/assets/designPartnerRequest-DYqMElJd.js +2 -0
  233. package/dist/assets/designPartnerRequest-DYqMElJd.js.map +1 -0
  234. package/dist/assets/designPartnerSalesEntry-BpRINg3I.js +2 -0
  235. package/dist/assets/designPartnerSalesEntry-BpRINg3I.js.map +1 -0
  236. package/dist/assets/download-BXzoc-Y3.js +2 -0
  237. package/dist/assets/download-BXzoc-Y3.js.map +1 -0
  238. package/dist/assets/eye-CHvLhG2r.js +2 -0
  239. package/dist/assets/eye-CHvLhG2r.js.map +1 -0
  240. package/dist/assets/file-text-CU-ETLz1.js +2 -0
  241. package/dist/assets/file-text-CU-ETLz1.js.map +1 -0
  242. package/dist/assets/folder-tree-raVH0Y5V.js +2 -0
  243. package/dist/assets/folder-tree-raVH0Y5V.js.map +1 -0
  244. package/dist/assets/grid-3x3-cWuhGQfz.js +2 -0
  245. package/dist/assets/grid-3x3-cWuhGQfz.js.map +1 -0
  246. package/dist/assets/hardeningOffer-tkjlPDU-.js +2 -0
  247. package/dist/assets/hardeningOffer-tkjlPDU-.js.map +1 -0
  248. package/dist/assets/hero/agent-starter-workflow.png +0 -0
  249. package/dist/assets/hero/agent-starter-workflow.webp +0 -0
  250. package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js +6 -0
  251. package/dist/assets/html2canvas-pro.esm-OQkwCdu_.js.map +1 -0
  252. package/dist/assets/index-BW_YmKvl.css +2 -0
  253. package/dist/assets/index-D7D6ZRCW.js +212 -0
  254. package/dist/assets/index-D7D6ZRCW.js.map +1 -0
  255. package/dist/assets/jszip.min-XyfP2hUJ.js +3 -0
  256. package/dist/assets/jszip.min-XyfP2hUJ.js.map +1 -0
  257. package/dist/assets/layout-grid-Cq_e979G.js +2 -0
  258. package/dist/assets/layout-grid-Cq_e979G.js.map +1 -0
  259. package/dist/assets/lock-Di7P18Ts.js +2 -0
  260. package/dist/assets/lock-Di7P18Ts.js.map +1 -0
  261. package/dist/assets/rocket-DHdrCHKD.js +2 -0
  262. package/dist/assets/rocket-DHdrCHKD.js.map +1 -0
  263. package/dist/assets/shield-check-CxpHNdp0.js +2 -0
  264. package/dist/assets/shield-check-CxpHNdp0.js.map +1 -0
  265. package/dist/assets/smartphone-DXKiqu57.js +2 -0
  266. package/dist/assets/smartphone-DXKiqu57.js.map +1 -0
  267. package/dist/assets/stripeClient-CuZgvzca.js +2 -0
  268. package/dist/assets/stripeClient-CuZgvzca.js.map +1 -0
  269. package/dist/assets/terminal-J0iyJTv2.js +2 -0
  270. package/dist/assets/terminal-J0iyJTv2.js.map +1 -0
  271. package/dist/assets/triangle-alert-BA0HP6zD.js +2 -0
  272. package/dist/assets/triangle-alert-BA0HP6zD.js.map +1 -0
  273. package/dist/assets/useAuth-CoS4r8yi.js +22 -0
  274. package/dist/assets/useAuth-CoS4r8yi.js.map +1 -0
  275. package/dist/assets/users-C-fz7pbn.js +2 -0
  276. package/dist/assets/users-C-fz7pbn.js.map +1 -0
  277. package/dist/cancelled/index.html +3 -2
  278. package/dist/design-partner/index.html +6 -5
  279. package/dist/downloads/shipscreens-github-actions-template.yml +1 -1
  280. package/dist/forgot-password/index.html +3 -2
  281. package/dist/index.html +9 -8
  282. package/dist/legal/index.html +3 -2
  283. package/dist/llms-full.txt +80 -17
  284. package/dist/llms.txt +38 -12
  285. package/dist/mcp-server.json +4 -4
  286. package/dist/pricing/index.html +6 -5
  287. package/dist/privacy/index.html +3 -2
  288. package/dist/proof/index.html +6 -5
  289. package/dist/security/index.html +3 -2
  290. package/dist/signin/index.html +3 -2
  291. package/dist/signup/index.html +3 -2
  292. package/dist/success/index.html +3 -2
  293. package/dist/terms/index.html +3 -2
  294. package/dist/tools/5-panel-screenshot-framework/index.html +6 -5
  295. package/dist/tools/agent-cli/index.html +8 -7
  296. package/dist/tools/app-review-aso/index.html +6 -5
  297. package/dist/tools/app-store-localization-screenshot-automation/index.html +8 -7
  298. package/dist/tools/app-store-screenshot-automation/index.html +8 -7
  299. package/dist/tools/app-store-screenshot-requirements-checklist/index.html +8 -7
  300. package/dist/tools/claude-code-mcp-screenshot-automation/index.html +8 -7
  301. package/dist/tools/cursor-mcp-screenshot-automation/index.html +8 -7
  302. package/dist/tools/deterministic-screenshot-reruns/index.html +8 -7
  303. package/dist/tools/device-locale-screenshot-matrix/index.html +8 -7
  304. package/dist/tools/fastlane-screenshot-folder-structure/index.html +8 -7
  305. package/dist/tools/fastlane-screenshot-pipeline/index.html +8 -7
  306. package/dist/tools/fastlane-screenshots/index.html +6 -5
  307. package/dist/tools/first-export/index.html +6 -5
  308. package/dist/tools/gemini-cli-mcp-screenshot-automation/index.html +8 -7
  309. package/dist/tools/google-play-screenshot-automation/index.html +8 -7
  310. package/dist/tools/google-play-screenshot-requirements-checklist/index.html +8 -7
  311. package/dist/tools/index.html +6 -5
  312. package/dist/tools/ipad-screenshot-review-requirements/index.html +8 -7
  313. package/dist/tools/openai-responses-tool-screenshot-automation/index.html +8 -7
  314. package/dist/tools/screenshot-ci-pipeline/index.html +8 -7
  315. package/dist/tools/screenshot-naming-order-drift/index.html +8 -7
  316. package/dist/tools/screenshot-workload-calculator/index.html +6 -5
  317. package/dist/tools/store-assets-pipeline/index.html +3 -2
  318. package/dist/tools/vscode-copilot-mcp-screenshot-automation/index.html +8 -7
  319. package/package.json +7 -7
  320. package/dist/app/assets/AgentCli-xKYtzL3B.js +0 -17
  321. package/dist/app/assets/AgentCli-xKYtzL3B.js.map +0 -1
  322. package/dist/app/assets/App-C1cNw_fn.js +0 -13
  323. package/dist/app/assets/App-C1cNw_fn.js.map +0 -1
  324. package/dist/app/assets/App-oQfE_p3A.css +0 -1
  325. package/dist/app/assets/AppReviewAso-CaIT-L7Z.js +0 -4
  326. package/dist/app/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
  327. package/dist/app/assets/Cancelled-Dmw7PTD-.js +0 -2
  328. package/dist/app/assets/Cancelled-Dmw7PTD-.js.map +0 -1
  329. package/dist/app/assets/CopyButton-CPRHmu8l.js +0 -2
  330. package/dist/app/assets/CopyButton-CPRHmu8l.js.map +0 -1
  331. package/dist/app/assets/DesignPartner-Ckp1GhNv.js +0 -4
  332. package/dist/app/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
  333. package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
  334. package/dist/app/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
  335. package/dist/app/assets/FirstExport-RXbvVQdK.js +0 -6
  336. package/dist/app/assets/FirstExport-RXbvVQdK.js.map +0 -1
  337. package/dist/app/assets/FitPanel-ic91y-49.js +0 -2
  338. package/dist/app/assets/FitPanel-ic91y-49.js.map +0 -1
  339. package/dist/app/assets/FivePanelFramework-BZKNcycb.js +0 -62
  340. package/dist/app/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
  341. package/dist/app/assets/ForgotPassword-CKOfAvWk.js +0 -2
  342. package/dist/app/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
  343. package/dist/app/assets/Landing-D0cuDDUk.js +0 -2
  344. package/dist/app/assets/Landing-D0cuDDUk.js.map +0 -1
  345. package/dist/app/assets/LanguageSwitcher-BrToLEgF.js +0 -2
  346. package/dist/app/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
  347. package/dist/app/assets/Legal-Cm-hVzjY.js +0 -2
  348. package/dist/app/assets/Legal-Cm-hVzjY.js.map +0 -1
  349. package/dist/app/assets/NotFound-B0I6I440.js +0 -2
  350. package/dist/app/assets/NotFound-B0I6I440.js.map +0 -1
  351. package/dist/app/assets/Pricing-p-NIjjtK.js +0 -29
  352. package/dist/app/assets/Pricing-p-NIjjtK.js.map +0 -1
  353. package/dist/app/assets/Privacy-BhfPkK0y.js +0 -2
  354. package/dist/app/assets/Privacy-BhfPkK0y.js.map +0 -1
  355. package/dist/app/assets/Proof-D-7QbTGX.js +0 -20
  356. package/dist/app/assets/Proof-D-7QbTGX.js.map +0 -1
  357. package/dist/app/assets/Security-DFafJQIT.js +0 -2
  358. package/dist/app/assets/Security-DFafJQIT.js.map +0 -1
  359. package/dist/app/assets/SignIn--6nNsUCm.js +0 -2
  360. package/dist/app/assets/SignIn--6nNsUCm.js.map +0 -1
  361. package/dist/app/assets/SignUp-yh5ydmFf.js +0 -2
  362. package/dist/app/assets/SignUp-yh5ydmFf.js.map +0 -1
  363. package/dist/app/assets/SiteHeader-NTK-cM9O.js +0 -2
  364. package/dist/app/assets/SiteHeader-NTK-cM9O.js.map +0 -1
  365. package/dist/app/assets/StickyMobileCta-DVXAyhaH.js +0 -2
  366. package/dist/app/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
  367. package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
  368. package/dist/app/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
  369. package/dist/app/assets/Success-C3n0m1XU.js +0 -2
  370. package/dist/app/assets/Success-C3n0m1XU.js.map +0 -1
  371. package/dist/app/assets/Terms-C72ybAwA.js +0 -2
  372. package/dist/app/assets/Terms-C72ybAwA.js.map +0 -1
  373. package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
  374. package/dist/app/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
  375. package/dist/app/assets/ToolsIndex-CnvNTvyW.js +0 -6
  376. package/dist/app/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
  377. package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
  378. package/dist/app/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
  379. package/dist/app/assets/arrow-right-Dglia5EE.js +0 -2
  380. package/dist/app/assets/arrow-right-Dglia5EE.js.map +0 -1
  381. package/dist/app/assets/calculator-CAgtsVuH.js +0 -2
  382. package/dist/app/assets/calculator-CAgtsVuH.js.map +0 -1
  383. package/dist/app/assets/check-B5h9hATV.js +0 -2
  384. package/dist/app/assets/check-B5h9hATV.js.map +0 -1
  385. package/dist/app/assets/chevron-down-By2Ts8dG.js +0 -2
  386. package/dist/app/assets/chevron-down-By2Ts8dG.js.map +0 -1
  387. package/dist/app/assets/circle-check-DaJ6APMi.js +0 -2
  388. package/dist/app/assets/circle-check-DaJ6APMi.js.map +0 -1
  389. package/dist/app/assets/clipboard-copy-IDfWU9SE.js +0 -2
  390. package/dist/app/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
  391. package/dist/app/assets/copy-KSn4Rc2b.js +0 -2
  392. package/dist/app/assets/copy-KSn4Rc2b.js.map +0 -1
  393. package/dist/app/assets/crop-C9hwiw0i.js +0 -2
  394. package/dist/app/assets/crop-C9hwiw0i.js.map +0 -1
  395. package/dist/app/assets/download-eqwxO8bs.js +0 -2
  396. package/dist/app/assets/download-eqwxO8bs.js.map +0 -1
  397. package/dist/app/assets/eye-Dg61f0nU.js +0 -2
  398. package/dist/app/assets/eye-Dg61f0nU.js.map +0 -1
  399. package/dist/app/assets/file-text-BQPKCil3.js +0 -2
  400. package/dist/app/assets/file-text-BQPKCil3.js.map +0 -1
  401. package/dist/app/assets/folder-tree-9hq6oigy.js +0 -2
  402. package/dist/app/assets/folder-tree-9hq6oigy.js.map +0 -1
  403. package/dist/app/assets/grid-3x3-BHXRyOIx.js +0 -2
  404. package/dist/app/assets/grid-3x3-BHXRyOIx.js.map +0 -1
  405. package/dist/app/assets/index-my6BmN7T.js +0 -204
  406. package/dist/app/assets/index-my6BmN7T.js.map +0 -1
  407. package/dist/app/assets/index-rv91vbLH.css +0 -1
  408. package/dist/app/assets/layout-grid-DDQvnEgx.js +0 -2
  409. package/dist/app/assets/layout-grid-DDQvnEgx.js.map +0 -1
  410. package/dist/app/assets/rocket-0KMviRpJ.js +0 -2
  411. package/dist/app/assets/rocket-0KMviRpJ.js.map +0 -1
  412. package/dist/app/assets/shield-check-BvKEQ2hc.js +0 -2
  413. package/dist/app/assets/shield-check-BvKEQ2hc.js.map +0 -1
  414. package/dist/app/assets/signIn-Ckla1_0O.js +0 -2
  415. package/dist/app/assets/signIn-Ckla1_0O.js.map +0 -1
  416. package/dist/app/assets/smartphone-I0w1b2DV.js +0 -2
  417. package/dist/app/assets/smartphone-I0w1b2DV.js.map +0 -1
  418. package/dist/app/assets/terminal-CLpUSQqd.js +0 -2
  419. package/dist/app/assets/terminal-CLpUSQqd.js.map +0 -1
  420. package/dist/app/assets/triangle-alert-w7TZ0yy2.js +0 -2
  421. package/dist/app/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
  422. package/dist/app/assets/useAuth-N3hsUaDj.js +0 -4
  423. package/dist/app/assets/useAuth-N3hsUaDj.js.map +0 -1
  424. package/dist/app/assets/users-DsQdkuR3.js +0 -2
  425. package/dist/app/assets/users-DsQdkuR3.js.map +0 -1
  426. package/dist/assets/AgentCli-xKYtzL3B.js +0 -17
  427. package/dist/assets/AgentCli-xKYtzL3B.js.map +0 -1
  428. package/dist/assets/App-C1cNw_fn.js +0 -13
  429. package/dist/assets/App-C1cNw_fn.js.map +0 -1
  430. package/dist/assets/App-oQfE_p3A.css +0 -1
  431. package/dist/assets/AppReviewAso-CaIT-L7Z.js +0 -4
  432. package/dist/assets/AppReviewAso-CaIT-L7Z.js.map +0 -1
  433. package/dist/assets/Cancelled-Dmw7PTD-.js +0 -2
  434. package/dist/assets/Cancelled-Dmw7PTD-.js.map +0 -1
  435. package/dist/assets/CopyButton-CPRHmu8l.js +0 -2
  436. package/dist/assets/CopyButton-CPRHmu8l.js.map +0 -1
  437. package/dist/assets/DesignPartner-Ckp1GhNv.js +0 -4
  438. package/dist/assets/DesignPartner-Ckp1GhNv.js.map +0 -1
  439. package/dist/assets/FastlaneScreenshots-CB-zv5Us.js +0 -100
  440. package/dist/assets/FastlaneScreenshots-CB-zv5Us.js.map +0 -1
  441. package/dist/assets/FirstExport-RXbvVQdK.js +0 -6
  442. package/dist/assets/FirstExport-RXbvVQdK.js.map +0 -1
  443. package/dist/assets/FitPanel-ic91y-49.js +0 -2
  444. package/dist/assets/FitPanel-ic91y-49.js.map +0 -1
  445. package/dist/assets/FivePanelFramework-BZKNcycb.js +0 -62
  446. package/dist/assets/FivePanelFramework-BZKNcycb.js.map +0 -1
  447. package/dist/assets/ForgotPassword-CKOfAvWk.js +0 -2
  448. package/dist/assets/ForgotPassword-CKOfAvWk.js.map +0 -1
  449. package/dist/assets/Landing-D0cuDDUk.js +0 -2
  450. package/dist/assets/Landing-D0cuDDUk.js.map +0 -1
  451. package/dist/assets/LanguageSwitcher-BrToLEgF.js +0 -2
  452. package/dist/assets/LanguageSwitcher-BrToLEgF.js.map +0 -1
  453. package/dist/assets/Legal-Cm-hVzjY.js +0 -2
  454. package/dist/assets/Legal-Cm-hVzjY.js.map +0 -1
  455. package/dist/assets/NotFound-B0I6I440.js +0 -2
  456. package/dist/assets/NotFound-B0I6I440.js.map +0 -1
  457. package/dist/assets/Pricing-p-NIjjtK.js +0 -29
  458. package/dist/assets/Pricing-p-NIjjtK.js.map +0 -1
  459. package/dist/assets/Privacy-BhfPkK0y.js +0 -2
  460. package/dist/assets/Privacy-BhfPkK0y.js.map +0 -1
  461. package/dist/assets/Proof-D-7QbTGX.js +0 -20
  462. package/dist/assets/Proof-D-7QbTGX.js.map +0 -1
  463. package/dist/assets/Security-DFafJQIT.js +0 -2
  464. package/dist/assets/Security-DFafJQIT.js.map +0 -1
  465. package/dist/assets/SignIn--6nNsUCm.js +0 -2
  466. package/dist/assets/SignIn--6nNsUCm.js.map +0 -1
  467. package/dist/assets/SignUp-yh5ydmFf.js +0 -2
  468. package/dist/assets/SignUp-yh5ydmFf.js.map +0 -1
  469. package/dist/assets/SiteHeader-NTK-cM9O.js +0 -2
  470. package/dist/assets/SiteHeader-NTK-cM9O.js.map +0 -1
  471. package/dist/assets/StickyMobileCta-DVXAyhaH.js +0 -2
  472. package/dist/assets/StickyMobileCta-DVXAyhaH.js.map +0 -1
  473. package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js +0 -6
  474. package/dist/assets/StoreAssetsPipeline-Cbs1bNK5.js.map +0 -1
  475. package/dist/assets/Success-C3n0m1XU.js +0 -2
  476. package/dist/assets/Success-C3n0m1XU.js.map +0 -1
  477. package/dist/assets/Terms-C72ybAwA.js +0 -2
  478. package/dist/assets/Terms-C72ybAwA.js.map +0 -1
  479. package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js +0 -2
  480. package/dist/assets/ToolGuardrailsPanel-meKxUeSB.js.map +0 -1
  481. package/dist/assets/ToolsIndex-CnvNTvyW.js +0 -6
  482. package/dist/assets/ToolsIndex-CnvNTvyW.js.map +0 -1
  483. package/dist/assets/WorkloadCalculator-CK4qVUcQ.js +0 -5
  484. package/dist/assets/WorkloadCalculator-CK4qVUcQ.js.map +0 -1
  485. package/dist/assets/arrow-right-Dglia5EE.js +0 -2
  486. package/dist/assets/arrow-right-Dglia5EE.js.map +0 -1
  487. package/dist/assets/calculator-CAgtsVuH.js +0 -2
  488. package/dist/assets/calculator-CAgtsVuH.js.map +0 -1
  489. package/dist/assets/check-B5h9hATV.js +0 -2
  490. package/dist/assets/check-B5h9hATV.js.map +0 -1
  491. package/dist/assets/chevron-down-By2Ts8dG.js +0 -2
  492. package/dist/assets/chevron-down-By2Ts8dG.js.map +0 -1
  493. package/dist/assets/circle-check-DaJ6APMi.js +0 -2
  494. package/dist/assets/circle-check-DaJ6APMi.js.map +0 -1
  495. package/dist/assets/clipboard-copy-IDfWU9SE.js +0 -2
  496. package/dist/assets/clipboard-copy-IDfWU9SE.js.map +0 -1
  497. package/dist/assets/copy-KSn4Rc2b.js +0 -2
  498. package/dist/assets/copy-KSn4Rc2b.js.map +0 -1
  499. package/dist/assets/crop-C9hwiw0i.js +0 -2
  500. package/dist/assets/crop-C9hwiw0i.js.map +0 -1
  501. package/dist/assets/download-eqwxO8bs.js +0 -2
  502. package/dist/assets/download-eqwxO8bs.js.map +0 -1
  503. package/dist/assets/eye-Dg61f0nU.js +0 -2
  504. package/dist/assets/eye-Dg61f0nU.js.map +0 -1
  505. package/dist/assets/file-text-BQPKCil3.js +0 -2
  506. package/dist/assets/file-text-BQPKCil3.js.map +0 -1
  507. package/dist/assets/folder-tree-9hq6oigy.js +0 -2
  508. package/dist/assets/folder-tree-9hq6oigy.js.map +0 -1
  509. package/dist/assets/grid-3x3-BHXRyOIx.js +0 -2
  510. package/dist/assets/grid-3x3-BHXRyOIx.js.map +0 -1
  511. package/dist/assets/index-my6BmN7T.js +0 -204
  512. package/dist/assets/index-my6BmN7T.js.map +0 -1
  513. package/dist/assets/index-rv91vbLH.css +0 -1
  514. package/dist/assets/layout-grid-DDQvnEgx.js +0 -2
  515. package/dist/assets/layout-grid-DDQvnEgx.js.map +0 -1
  516. package/dist/assets/rocket-0KMviRpJ.js +0 -2
  517. package/dist/assets/rocket-0KMviRpJ.js.map +0 -1
  518. package/dist/assets/shield-check-BvKEQ2hc.js +0 -2
  519. package/dist/assets/shield-check-BvKEQ2hc.js.map +0 -1
  520. package/dist/assets/signIn-Ckla1_0O.js +0 -2
  521. package/dist/assets/signIn-Ckla1_0O.js.map +0 -1
  522. package/dist/assets/smartphone-I0w1b2DV.js +0 -2
  523. package/dist/assets/smartphone-I0w1b2DV.js.map +0 -1
  524. package/dist/assets/terminal-CLpUSQqd.js +0 -2
  525. package/dist/assets/terminal-CLpUSQqd.js.map +0 -1
  526. package/dist/assets/triangle-alert-w7TZ0yy2.js +0 -2
  527. package/dist/assets/triangle-alert-w7TZ0yy2.js.map +0 -1
  528. package/dist/assets/useAuth-N3hsUaDj.js +0 -4
  529. package/dist/assets/useAuth-N3hsUaDj.js.map +0 -1
  530. package/dist/assets/users-DsQdkuR3.js +0 -2
  531. 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 screenshot reruns as a build step.
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 build --out out --zip
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)
@@ -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
- --from <dir> Source output root for staging (default: config dir)
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 wizard
127
- shipscreens build --mode raw --zip --out out
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 build --mode raw --zip --out out\n` +
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
- ['Screenshots as a build step', 'wizard -> build -> verify -> tree'],
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
- ['Screenshots as a build step', 'wizard -> build -> verify -> tree'],
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 build --mode raw --zip --out out\n` +
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
  );