@koda-sl/baker-cli 0.450.0-dev.b454c3dd2 → 0.450.0-dev.d6701597d

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 (443) hide show
  1. package/README.md +10 -11
  2. package/dist/{account-XQXC7BR6.js → account-AL2ZDSR7.js} +4 -5
  3. package/dist/{account-XQXC7BR6.js.map → account-AL2ZDSR7.js.map} +1 -1
  4. package/dist/{accounts-722UY53A.js → accounts-HAFCLSR5.js} +3 -4
  5. package/dist/{accounts-722UY53A.js.map → accounts-HAFCLSR5.js.map} +1 -1
  6. package/dist/{accounts-E67BMK7T.js → accounts-O5MFO3QQ.js} +5 -6
  7. package/dist/{accounts-E67BMK7T.js.map → accounts-O5MFO3QQ.js.map} +1 -1
  8. package/dist/{actions-6TQMSVWD.js → actions-P35MEMGN.js} +18 -18
  9. package/dist/{add-2BEGRHUX.js → add-5GAN6CVO.js} +5 -28
  10. package/dist/add-5GAN6CVO.js.map +1 -0
  11. package/dist/{add-LEMKEOPO.js → add-6DTC6X5G.js} +2 -3
  12. package/dist/{add-LEMKEOPO.js.map → add-6DTC6X5G.js.map} +1 -1
  13. package/dist/{ads-AGYCVD62.js → ads-73PGA4YC.js} +4 -4
  14. package/dist/{advertisers-2VQKAYKG.js → advertisers-AE75CGVE.js} +3 -4
  15. package/dist/{advertisers-2VQKAYKG.js.map → advertisers-AE75CGVE.js.map} +1 -1
  16. package/dist/{analytics-IFELDWLL.js → analytics-FKCXIMPO.js} +20 -24
  17. package/dist/analytics-FKCXIMPO.js.map +1 -0
  18. package/dist/{analytics-OH5QEH7F.js → analytics-FPWQQGRM.js} +3 -4
  19. package/dist/{analytics-OH5QEH7F.js.map → analytics-FPWQQGRM.js.map} +1 -1
  20. package/dist/{assign-PTUJUCEL.js → assign-ABN2AQ4J.js} +3 -4
  21. package/dist/{assign-PTUJUCEL.js.map → assign-ABN2AQ4J.js.map} +1 -1
  22. package/dist/{audience-size-LRI6GJRT.js → audience-size-GNBJY35X.js} +3 -4
  23. package/dist/{audience-size-LRI6GJRT.js.map → audience-size-GNBJY35X.js.map} +1 -1
  24. package/dist/{audit-HWP7OPB7.js → audit-3VS63TBW.js} +3 -4
  25. package/dist/{audit-HWP7OPB7.js.map → audit-3VS63TBW.js.map} +1 -1
  26. package/dist/{autocomplete-J6DHU6MR.js → autocomplete-VS3XG3B7.js} +3 -4
  27. package/dist/{autocomplete-J6DHU6MR.js.map → autocomplete-VS3XG3B7.js.map} +1 -1
  28. package/dist/{avatars-467OSBD6.js → avatars-EKCKHCC3.js} +4 -4
  29. package/dist/{bid-pricing-EO5WLHGV.js → bid-pricing-Q72B65AY.js} +3 -4
  30. package/dist/{bid-pricing-EO5WLHGV.js.map → bid-pricing-Q72B65AY.js.map} +1 -1
  31. package/dist/{brand-YRTEPGBK.js → brand-C6PFGGQN.js} +2 -2
  32. package/dist/{brief-OSFJ2V7F.js → brief-YFJHQ5VQ.js} +7 -8
  33. package/dist/{brief-OSFJ2V7F.js.map → brief-YFJHQ5VQ.js.map} +1 -1
  34. package/dist/{campaign-groups-PQ6KSQJR.js → campaign-groups-KFFYQPU3.js} +8 -9
  35. package/dist/{campaign-groups-PQ6KSQJR.js.map → campaign-groups-KFFYQPU3.js.map} +1 -1
  36. package/dist/{campaign-writes-5OVLUD5E.js → campaign-writes-FHOS5XZY.js} +3 -4
  37. package/dist/{campaign-writes-5OVLUD5E.js.map → campaign-writes-FHOS5XZY.js.map} +1 -1
  38. package/dist/{campaigns-6T3NSUT2.js → campaigns-2NHWBF5C.js} +11 -12
  39. package/dist/{campaigns-6T3NSUT2.js.map → campaigns-2NHWBF5C.js.map} +1 -1
  40. package/dist/{campaigns-OYMXDGWX.js → campaigns-KZYZTXDS.js} +5 -5
  41. package/dist/{canvas-YQFG52IG.js → canvas-5NB27FX2.js} +13 -13
  42. package/dist/{capabilities-PXBKUN2G.js → capabilities-DJFTRJKS.js} +3 -4
  43. package/dist/{capabilities-PXBKUN2G.js.map → capabilities-DJFTRJKS.js.map} +1 -1
  44. package/dist/{catalog-XLXIM7IW.js → catalog-VSSY6FGI.js} +4 -4
  45. package/dist/{chats-UK47UE7C.js → chats-D2CSDX5Q.js} +3 -4
  46. package/dist/{chats-UK47UE7C.js.map → chats-D2CSDX5Q.js.map} +1 -1
  47. package/dist/{chunk-5ZNTADVR.js → chunk-3G3ZDLMI.js} +2 -2
  48. package/dist/{chunk-SJYEY5MV.js → chunk-3HJLHTWP.js} +3 -12
  49. package/dist/{chunk-SJYEY5MV.js.map → chunk-3HJLHTWP.js.map} +1 -1
  50. package/dist/{chunk-ZDMTXQ2Q.js → chunk-3IBYKLXR.js} +2 -2
  51. package/dist/{chunk-CWYAELVG.js → chunk-464O4MT2.js} +2 -2
  52. package/dist/{chunk-NA63BH7V.js → chunk-4AUMTNVB.js} +3 -3
  53. package/dist/{chunk-NDEE6G2J.js → chunk-4BQXAE7Z.js} +2 -2
  54. package/dist/{chunk-2AOE2MZQ.js → chunk-5ZDLTE5T.js} +3 -3
  55. package/dist/{chunk-ULG4QRTV.js → chunk-6NB47MRW.js} +2 -2
  56. package/dist/{chunk-24EB7EDR.js → chunk-7YCRFMXF.js} +3 -3
  57. package/dist/{chunk-WGUQHAJY.js → chunk-A4LOJ2VD.js} +2 -2
  58. package/dist/{chunk-6F7DVPOS.js → chunk-AEOSAVVL.js} +3 -3
  59. package/dist/{chunk-MACCF4JZ.js → chunk-CMPEUZOR.js} +22 -16
  60. package/dist/{chunk-MACCF4JZ.js.map → chunk-CMPEUZOR.js.map} +1 -1
  61. package/dist/{chunk-N4LAYIIN.js → chunk-CSYSX4D2.js} +2 -2
  62. package/dist/{chunk-RX2DKU3W.js → chunk-DGUNI37S.js} +2 -2
  63. package/dist/{chunk-QE7W555R.js → chunk-DWHIOO7E.js} +12 -163
  64. package/dist/chunk-DWHIOO7E.js.map +1 -0
  65. package/dist/{chunk-FPOGPFAG.js → chunk-EBWBG6YV.js} +51 -24
  66. package/dist/chunk-EBWBG6YV.js.map +1 -0
  67. package/dist/{chunk-NYIGXDUG.js → chunk-EDLZGTGN.js} +39 -1
  68. package/dist/chunk-EDLZGTGN.js.map +1 -0
  69. package/dist/{chunk-I3ZR655O.js → chunk-IR6D7K4H.js} +2 -2
  70. package/dist/{chunk-FUHN4MFY.js → chunk-JQJDXPCO.js} +2 -2
  71. package/dist/{chunk-7CTMH5AK.js → chunk-KAUOHQTF.js} +3 -3
  72. package/dist/{chunk-VYQ3QJ3C.js → chunk-KHRXPQID.js} +2 -2
  73. package/dist/{chunk-6Y7ZBENQ.js → chunk-LECGCWT5.js} +6 -6
  74. package/dist/{chunk-5WCSKQ7Z.js → chunk-LZ73CZGP.js} +6 -6
  75. package/dist/{chunk-R25YLW6H.js → chunk-MELOSESI.js} +2 -2
  76. package/dist/{chunk-DCRPXOJJ.js → chunk-MXYBTMKB.js} +2 -2
  77. package/dist/{chunk-54C6YDGJ.js → chunk-NPY4QUMQ.js} +2 -2
  78. package/dist/{chunk-LYQJ4PZW.js → chunk-OQ6663F4.js} +5 -5
  79. package/dist/{chunk-H3427GPU.js → chunk-OZRUJVIQ.js} +2 -2
  80. package/dist/{chunk-KMKEYI37.js → chunk-Q2V6E6SL.js} +3 -3
  81. package/dist/{chunk-VL43TNIP.js → chunk-QRP3PXWN.js} +2 -2
  82. package/dist/{chunk-HDLYPC6K.js → chunk-RPUSTYHL.js} +3 -5
  83. package/dist/{chunk-HDLYPC6K.js.map → chunk-RPUSTYHL.js.map} +1 -1
  84. package/dist/{chunk-C46GUI2S.js → chunk-RZBEK2VE.js} +2 -2
  85. package/dist/{chunk-2VPBIT65.js → chunk-S3A3YOKO.js} +8 -8
  86. package/dist/{chunk-FYGR3I2A.js → chunk-S77PZVYM.js} +3 -3
  87. package/dist/{chunk-VLMBTPXU.js → chunk-SHL7LOC3.js} +3 -3
  88. package/dist/{chunk-HR6IWNKE.js → chunk-SSJK7FEV.js} +1140 -1196
  89. package/dist/chunk-SSJK7FEV.js.map +1 -0
  90. package/dist/{chunk-KS2QY6MK.js → chunk-W3ZHJJVT.js} +4 -4
  91. package/dist/{chunk-7EPXVICM.js → chunk-XF4JUKVF.js} +5 -38
  92. package/dist/chunk-XF4JUKVF.js.map +1 -0
  93. package/dist/{chunk-RL5CP7N6.js → chunk-Y6O7EWYY.js} +5 -5
  94. package/dist/{chunk-6NY2GPR4.js → chunk-Y6ZQXUZ7.js} +3 -3
  95. package/dist/{chunk-HROZYQ5H.js → chunk-YRQYA2LR.js} +5 -63
  96. package/dist/chunk-YRQYA2LR.js.map +1 -0
  97. package/dist/{chunk-ASI4P6X2.js → chunk-YUCLMOEG.js} +6 -6
  98. package/dist/chunk-YUCLMOEG.js.map +1 -0
  99. package/dist/{chunk-WKQG6TER.js → chunk-ZEYEWPK6.js} +2 -2
  100. package/dist/{claim-W6G6VEG5.js → claim-FZ5OQLMU.js} +3 -4
  101. package/dist/{claim-W6G6VEG5.js.map → claim-FZ5OQLMU.js.map} +1 -1
  102. package/dist/cli.js +30 -30
  103. package/dist/{companies-TS6KBATJ.js → companies-DNI634RC.js} +3 -4
  104. package/dist/{companies-TS6KBATJ.js.map → companies-DNI634RC.js.map} +1 -1
  105. package/dist/{complete-LYR2HMQU.js → complete-2FZMGJV5.js} +3 -4
  106. package/dist/{complete-LYR2HMQU.js.map → complete-2FZMGJV5.js.map} +1 -1
  107. package/dist/{connect-FCXNVTXG.js → connect-QCOGEPP4.js} +6 -13
  108. package/dist/{conversation-6ZJGPCXM.js → conversation-6IOGV7B7.js} +3 -4
  109. package/dist/{conversation-6ZJGPCXM.js.map → conversation-6IOGV7B7.js.map} +1 -1
  110. package/dist/{conversions-UHB55MMQ.js → conversions-4SRZPBBX.js} +7 -8
  111. package/dist/{conversions-UHB55MMQ.js.map → conversions-4SRZPBBX.js.map} +1 -1
  112. package/dist/{create-EX6OWLNM.js → create-BJNMO6HT.js} +2 -3
  113. package/dist/{create-EX6OWLNM.js.map → create-BJNMO6HT.js.map} +1 -1
  114. package/dist/{create-JFSK4BOP.js → create-FX4OJ2XF.js} +3 -4
  115. package/dist/{create-JFSK4BOP.js.map → create-FX4OJ2XF.js.map} +1 -1
  116. package/dist/{create-JCA7JPLP.js → create-RM7HV77Y.js} +3 -4
  117. package/dist/{create-JCA7JPLP.js.map → create-RM7HV77Y.js.map} +1 -1
  118. package/dist/{create-WU22YYU2.js → create-VXM34ZWH.js} +3 -4
  119. package/dist/{create-WU22YYU2.js.map → create-VXM34ZWH.js.map} +1 -1
  120. package/dist/{creatives-FXUQ5WSD.js → creatives-B5NTXPUB.js} +10 -10
  121. package/dist/{creatives-KGXUOYPE.js → creatives-JSWBFQ5R.js} +8 -9
  122. package/dist/{creatives-KGXUOYPE.js.map → creatives-JSWBFQ5R.js.map} +1 -1
  123. package/dist/{credentials-MJC7PGKR.js → credentials-C33K6XCJ.js} +3 -4
  124. package/dist/{credentials-MJC7PGKR.js.map → credentials-C33K6XCJ.js.map} +1 -1
  125. package/dist/{critique-GS5VV5ZC.js → critique-4V5SKH7C.js} +6 -7
  126. package/dist/{critique-GS5VV5ZC.js.map → critique-4V5SKH7C.js.map} +1 -1
  127. package/dist/{critique-TPHR27KH.js → critique-ZS4ON3SU.js} +3 -4
  128. package/dist/{critique-TPHR27KH.js.map → critique-ZS4ON3SU.js.map} +1 -1
  129. package/dist/{crm-VK44O3ED.js → crm-52ROSWH5.js} +4 -5
  130. package/dist/{crm-VK44O3ED.js.map → crm-52ROSWH5.js.map} +1 -1
  131. package/dist/{crm-AVCM5D4G.js → crm-R5IXIFIV.js} +4 -5
  132. package/dist/{crm-AVCM5D4G.js.map → crm-R5IXIFIV.js.map} +1 -1
  133. package/dist/{customers-XH2DMTFH.js → customers-A36LOZOB.js} +5 -6
  134. package/dist/{delete-WI5E3DR3.js → delete-AIGE4Y4H.js} +3 -4
  135. package/dist/{delete-WI5E3DR3.js.map → delete-AIGE4Y4H.js.map} +1 -1
  136. package/dist/{delete-KRH2YMSZ.js → delete-HGHXY24R.js} +3 -4
  137. package/dist/{delete-KRH2YMSZ.js.map → delete-HGHXY24R.js.map} +1 -1
  138. package/dist/{delete-E3R3TKIL.js → delete-M2GDLPYN.js} +2 -3
  139. package/dist/{delete-E3R3TKIL.js.map → delete-M2GDLPYN.js.map} +1 -1
  140. package/dist/{demographics-XV5PBA77.js → demographics-NTWB2IMG.js} +3 -4
  141. package/dist/{demographics-XV5PBA77.js.map → demographics-NTWB2IMG.js.map} +1 -1
  142. package/dist/{discard-HTQUUHJR.js → discard-2WWQG6OU.js} +3 -4
  143. package/dist/{discard-HTQUUHJR.js.map → discard-2WWQG6OU.js.map} +1 -1
  144. package/dist/{domain-RECGZXJB.js → domain-Y2LT6JLT.js} +3 -4
  145. package/dist/{domain-RECGZXJB.js.map → domain-Y2LT6JLT.js.map} +1 -1
  146. package/dist/{draft-Q546QPPU.js → draft-EJXNNJ3Y.js} +4 -5
  147. package/dist/{draft-Q546QPPU.js.map → draft-EJXNNJ3Y.js.map} +1 -1
  148. package/dist/{draft-PVTX6QT6.js → draft-FJ7WHIXW.js} +3 -4
  149. package/dist/{draft-PVTX6QT6.js.map → draft-FJ7WHIXW.js.map} +1 -1
  150. package/dist/{draft-2IBSJEKC.js → draft-SLHAKJ2A.js} +3 -4
  151. package/dist/{draft-2IBSJEKC.js.map → draft-SLHAKJ2A.js.map} +1 -1
  152. package/dist/engine/index.js +3 -3
  153. package/dist/{facets-7EVPJMKS.js → facets-U7AQC4H6.js} +3 -4
  154. package/dist/{facets-7EVPJMKS.js.map → facets-U7AQC4H6.js.map} +1 -1
  155. package/dist/{feedback-EIZKS4JU.js → feedback-OLTCHE6C.js} +2 -2
  156. package/dist/{feedback-record-TKO54BOE.js → feedback-record-7WZ4H7EP.js} +8 -9
  157. package/dist/{feedback-record-TKO54BOE.js.map → feedback-record-7WZ4H7EP.js.map} +1 -1
  158. package/dist/{fetch-4BY6HYUM.js → fetch-W7NULDEO.js} +3 -4
  159. package/dist/{fetch-4BY6HYUM.js.map → fetch-W7NULDEO.js.map} +1 -1
  160. package/dist/{find-FRRHAPWX.js → find-OTDIX6V4.js} +4 -4
  161. package/dist/{flows-KTFAML22.js → flows-KABCBS3S.js} +17 -21
  162. package/dist/flows-KABCBS3S.js.map +1 -0
  163. package/dist/{fonts-MXR3ZKDX.js → fonts-EMMX3KII.js} +5 -6
  164. package/dist/{forecast-3QTJYVND.js → forecast-GNODEIIC.js} +3 -4
  165. package/dist/{forecast-3QTJYVND.js.map → forecast-GNODEIIC.js.map} +1 -1
  166. package/dist/{funnel-I6XIAEHG.js → funnel-AAX27NH4.js} +455 -11
  167. package/dist/funnel-AAX27NH4.js.map +1 -0
  168. package/dist/{ga4-DV2AXCSL.js → ga4-UDQ2HA2J.js} +1 -1
  169. package/dist/{get-5PKNKJ5S.js → get-QEYJRLV3.js} +4 -7
  170. package/dist/get-QEYJRLV3.js.map +1 -0
  171. package/dist/{get-72YPHJGV.js → get-RTVUZM6E.js} +3 -4
  172. package/dist/{get-72YPHJGV.js.map → get-RTVUZM6E.js.map} +1 -1
  173. package/dist/{google-QYYYSSXI.js → google-KTO3PLEU.js} +5 -5
  174. package/dist/{google-6OGZX47I.js → google-M7KEXVK5.js} +2 -2
  175. package/dist/{google-ads-QGMQKZQD.js → google-ads-OK6IG3UV.js} +3 -4
  176. package/dist/{google-ads-QGMQKZQD.js.map → google-ads-OK6IG3UV.js.map} +1 -1
  177. package/dist/{gsc-TAKOF7J5.js → gsc-P3QYGDV2.js} +1 -1
  178. package/dist/{history-6AVQX2OQ.js → history-PQUJKK26.js} +3 -4
  179. package/dist/{history-6AVQX2OQ.js.map → history-PQUJKK26.js.map} +1 -1
  180. package/dist/{hubspot-SVEMFK5S.js → hubspot-Y77VLY6Y.js} +8 -9
  181. package/dist/{hubspot-SVEMFK5S.js.map → hubspot-Y77VLY6Y.js.map} +1 -1
  182. package/dist/{icon-L4RSS6PZ.js → icon-I43F77FV.js} +4 -4
  183. package/dist/{ideas-NFOW3HKJ.js → ideas-MIDU7YOA.js} +2 -3
  184. package/dist/{images-2EFFUNNV.js → images-S254MS6O.js} +9 -9
  185. package/dist/{ingest-2SO62RRI.js → ingest-J4I3HKM3.js} +2 -3
  186. package/dist/{ingest-2SO62RRI.js.map → ingest-J4I3HKM3.js.map} +1 -1
  187. package/dist/{ingest-2EIKN4QC.js → ingest-YV2NLDBE.js} +3 -4
  188. package/dist/{inspect-4OOS4APT.js → inspect-Q5NHBBHX.js} +3 -4
  189. package/dist/{inspect-4OOS4APT.js.map → inspect-Q5NHBBHX.js.map} +1 -1
  190. package/dist/{inspiration-S3DU4CMQ.js → inspiration-P265QJ2H.js} +1 -1
  191. package/dist/{keyword-metrics-SF4CSNZ2.js → keyword-metrics-PDY4ZXSP.js} +3 -4
  192. package/dist/{keyword-metrics-SF4CSNZ2.js.map → keyword-metrics-PDY4ZXSP.js.map} +1 -1
  193. package/dist/{keywords-for-site-WDAOPNKC.js → keywords-for-site-GALSCV77.js} +3 -4
  194. package/dist/{keywords-for-site-WDAOPNKC.js.map → keywords-for-site-GALSCV77.js.map} +1 -1
  195. package/dist/{landing-2ZB46LXH.js → landing-CJYGWCK4.js} +3 -3
  196. package/dist/{leads-A4W5KTWB.js → leads-PHKG6CP3.js} +3 -4
  197. package/dist/{leads-A4W5KTWB.js.map → leads-PHKG6CP3.js.map} +1 -1
  198. package/dist/{learn-IPULBCOD.js → learn-FUQSY7DN.js} +4 -5
  199. package/dist/{learn-IPULBCOD.js.map → learn-FUQSY7DN.js.map} +1 -1
  200. package/dist/{line-item-writes-EMYSOJKM.js → line-item-writes-E6MZPIZZ.js} +3 -4
  201. package/dist/{line-item-writes-EMYSOJKM.js.map → line-item-writes-E6MZPIZZ.js.map} +1 -1
  202. package/dist/{line-items-5NECXUZT.js → line-items-7ZGIKEF2.js} +5 -5
  203. package/dist/{link-CI45HWFN.js → link-QYAW6A2W.js} +3 -4
  204. package/dist/{link-CI45HWFN.js.map → link-QYAW6A2W.js.map} +1 -1
  205. package/dist/{linkedin-B7SYR75X.js → linkedin-FFSDSGGS.js} +26 -27
  206. package/dist/{linkedin-B7SYR75X.js.map → linkedin-FFSDSGGS.js.map} +1 -1
  207. package/dist/{list-ZBT3EBVZ.js → list-5IC6KIKO.js} +3 -4
  208. package/dist/{list-ZBT3EBVZ.js.map → list-5IC6KIKO.js.map} +1 -1
  209. package/dist/{list-2BARXOT5.js → list-NVQC5SNY.js} +2 -3
  210. package/dist/{list-2BARXOT5.js.map → list-NVQC5SNY.js.map} +1 -1
  211. package/dist/{list-BIEVLEHS.js → list-SAV3LQHY.js} +3 -4
  212. package/dist/{list-BIEVLEHS.js.map → list-SAV3LQHY.js.map} +1 -1
  213. package/dist/{log-C23OOAJZ.js → log-XZPVOALD.js} +3 -4
  214. package/dist/{log-C23OOAJZ.js.map → log-XZPVOALD.js.map} +1 -1
  215. package/dist/{logo-Q5D7PZY6.js → logo-2IP663QO.js} +3 -3
  216. package/dist/{lookup-ETWY47F7.js → lookup-XK45W2SH.js} +5 -6
  217. package/dist/{make-TPKKJXGL.js → make-BMWRKIIY.js} +20 -18
  218. package/dist/{make-TPKKJXGL.js.map → make-BMWRKIIY.js.map} +1 -1
  219. package/dist/{map-SYZMPHLL.js → map-4J5WIWIG.js} +4 -5
  220. package/dist/{map-SYZMPHLL.js.map → map-4J5WIWIG.js.map} +1 -1
  221. package/dist/{mcp-6FQBVJ6F.js → mcp-XXD7ZQCP.js} +2 -3
  222. package/dist/{mcp-6FQBVJ6F.js.map → mcp-XXD7ZQCP.js.map} +1 -1
  223. package/dist/{media-sources-ZXHEEP6T.js → media-sources-O6ZRUA3N.js} +2 -2
  224. package/dist/{members-UDY4OOJW.js → members-D5ZYLS4Y.js} +3 -4
  225. package/dist/{members-UDY4OOJW.js.map → members-D5ZYLS4Y.js.map} +1 -1
  226. package/dist/{normalize-DAKHYS3V.js → normalize-PCNC6E2N.js} +3 -7
  227. package/dist/{normalize-DAKHYS3V.js.map → normalize-PCNC6E2N.js.map} +1 -1
  228. package/dist/{options-QL3ULED5.js → options-MQ65VEVD.js} +6 -7
  229. package/dist/{options-QL3ULED5.js.map → options-MQ65VEVD.js.map} +1 -1
  230. package/dist/{performance-UF5VTY2U.js → performance-6QW2KEEQ.js} +4 -5
  231. package/dist/{promoted-tweet-writes-7HGESJ46.js → promoted-tweet-writes-JPLHY3GM.js} +3 -4
  232. package/dist/{promoted-tweet-writes-7HGESJ46.js.map → promoted-tweet-writes-JPLHY3GM.js.map} +1 -1
  233. package/dist/{promoted-tweets-LZKS5JIF.js → promoted-tweets-SURKMHFI.js} +3 -3
  234. package/dist/{publish-NPD3SMZL.js → publish-HCQ6MXLB.js} +3 -4
  235. package/dist/{publish-NPD3SMZL.js.map → publish-HCQ6MXLB.js.map} +1 -1
  236. package/dist/{reddit-NU2N3LZD.js → reddit-GIP3ADMS.js} +4 -5
  237. package/dist/{refresh-EBVJ2C6L.js → refresh-UXQSLCR3.js} +2 -3
  238. package/dist/{refresh-EBVJ2C6L.js.map → refresh-UXQSLCR3.js.map} +1 -1
  239. package/dist/{release-V43YB2PY.js → release-5KVLXNP6.js} +3 -4
  240. package/dist/{release-V43YB2PY.js.map → release-5KVLXNP6.js.map} +1 -1
  241. package/dist/{remove-QPSWLFI4.js → remove-6FIVKCJI.js} +2 -3
  242. package/dist/{remove-QPSWLFI4.js.map → remove-6FIVKCJI.js.map} +1 -1
  243. package/dist/{reopen-GQ66NMWF.js → reopen-YM5LNOLB.js} +3 -4
  244. package/dist/{reopen-GQ66NMWF.js.map → reopen-YM5LNOLB.js.map} +1 -1
  245. package/dist/{rerun-PZK275DY.js → rerun-6XZG7BGK.js} +17 -18
  246. package/dist/{rerun-PZK275DY.js.map → rerun-6XZG7BGK.js.map} +1 -1
  247. package/dist/{research-FMM6AWZC.js → research-2BLEISBG.js} +10 -10
  248. package/dist/{research-GEOCUBXB.js → research-YOGE7GT2.js} +2 -3
  249. package/dist/{research-GEOCUBXB.js.map → research-YOGE7GT2.js.map} +1 -1
  250. package/dist/{reset-REXJ6AUK.js → reset-C4UHQ3EU.js} +2 -3
  251. package/dist/{reset-REXJ6AUK.js.map → reset-C4UHQ3EU.js.map} +1 -1
  252. package/dist/{reset-Y72IVESB.js → reset-OLVB6AE6.js} +2 -3
  253. package/dist/{reset-Y72IVESB.js.map → reset-OLVB6AE6.js.map} +1 -1
  254. package/dist/{resolve-OGX7C4TV.js → resolve-XYH2GDAE.js} +3 -4
  255. package/dist/{resolve-OGX7C4TV.js.map → resolve-XYH2GDAE.js.map} +1 -1
  256. package/dist/{retry-TCUBBFR5.js → retry-726GKI6V.js} +2 -3
  257. package/dist/{retry-TCUBBFR5.js.map → retry-726GKI6V.js.map} +1 -1
  258. package/dist/{retry-CD6JAQ3F.js → retry-7EELDEQP.js} +2 -3
  259. package/dist/{retry-CD6JAQ3F.js.map → retry-7EELDEQP.js.map} +1 -1
  260. package/dist/{run-EUO34T2J.js → run-MMEDKJDB.js} +17 -18
  261. package/dist/{run-A5ZDXTOI.js → run-P4KR2MXC.js} +3 -4
  262. package/dist/{run-A5ZDXTOI.js.map → run-P4KR2MXC.js.map} +1 -1
  263. package/dist/{scaffold-ad-SW2HEWM3.js → scaffold-ad-PBTEWDAC.js} +12 -13
  264. package/dist/{scaffold-ad-SW2HEWM3.js.map → scaffold-ad-PBTEWDAC.js.map} +1 -1
  265. package/dist/{scaffold-static-ad-ECTJL54Y.js → scaffold-static-ad-RM4M4X5U.js} +36 -37
  266. package/dist/scaffold-static-ad-RM4M4X5U.js.map +1 -0
  267. package/dist/{scaffold-video-EI7U7RBK.js → scaffold-video-O2TTKZIE.js} +11 -12
  268. package/dist/{scaffold-video-EI7U7RBK.js.map → scaffold-video-O2TTKZIE.js.map} +1 -1
  269. package/dist/{schedule-S5YZJZ5U.js → schedule-RDK4GEPI.js} +2 -3
  270. package/dist/{schedule-S5YZJZ5U.js.map → schedule-RDK4GEPI.js.map} +1 -1
  271. package/dist/{scheduled-agents-N4LJRM4C.js → scheduled-agents-6U44QE76.js} +11 -11
  272. package/dist/{schema-R7JWWOF4.js → schema-CHJDC7GQ.js} +4 -8
  273. package/dist/{schema-R7JWWOF4.js.map → schema-CHJDC7GQ.js.map} +1 -1
  274. package/dist/{search-KHMQH3AT.js → search-PMJRU3C4.js} +2 -3
  275. package/dist/{search-KHMQH3AT.js.map → search-PMJRU3C4.js.map} +1 -1
  276. package/dist/{select-O2FN2JEQ.js → select-OEUKOVZ5.js} +8 -9
  277. package/dist/{select-O2FN2JEQ.js.map → select-OEUKOVZ5.js.map} +1 -1
  278. package/dist/{sends-BQZM5PLS.js → sends-WGJVQUMF.js} +4 -5
  279. package/dist/{sends-BQZM5PLS.js.map → sends-WGJVQUMF.js.map} +1 -1
  280. package/dist/{set-prompt-2HASHGWC.js → set-prompt-5E5I7QAZ.js} +8 -9
  281. package/dist/{set-prompt-2HASHGWC.js.map → set-prompt-5E5I7QAZ.js.map} +1 -1
  282. package/dist/{setup-links-GYSE56GX.js → setup-links-REPREN3C.js} +3 -4
  283. package/dist/{setup-links-GYSE56GX.js.map → setup-links-REPREN3C.js.map} +1 -1
  284. package/dist/{site-4SKM7RKG.js → site-WFSWIA3S.js} +4 -5
  285. package/dist/{site-4SKM7RKG.js.map → site-WFSWIA3S.js.map} +1 -1
  286. package/dist/{sources-R2NKNC6J.js → sources-AMI2AWKZ.js} +9 -10
  287. package/dist/{sources-R2NKNC6J.js.map → sources-AMI2AWKZ.js.map} +1 -1
  288. package/dist/{sources-FQ2UZTHL.js → sources-YBQ6KPFM.js} +6 -6
  289. package/dist/{stale-W756ACKC.js → stale-IGFUKEN2.js} +7 -8
  290. package/dist/{stale-W756ACKC.js.map → stale-IGFUKEN2.js.map} +1 -1
  291. package/dist/{status-SE2VZJJB.js → status-7F2KHFGA.js} +3 -4
  292. package/dist/{status-SE2VZJJB.js.map → status-7F2KHFGA.js.map} +1 -1
  293. package/dist/{stock-KXJ26BY4.js → stock-2YCDN3N6.js} +5 -5
  294. package/dist/{studio-SYKOSNDB.js → studio-RA7QQH4O.js} +1 -1
  295. package/dist/{sync-LJGSODK3.js → sync-GWTLKZTU.js} +2 -3
  296. package/dist/{sync-LJGSODK3.js.map → sync-GWTLKZTU.js.map} +1 -1
  297. package/dist/{sync-definition-QR2N233R.js → sync-definition-UGSDX2SZ.js} +11 -12
  298. package/dist/{tags-PYWFSBTR.js → tags-3WPW6PTV.js} +4 -4
  299. package/dist/{tags-QQU3OKMZ.js → tags-6342FQEB.js} +3 -4
  300. package/dist/{tags-QQU3OKMZ.js.map → tags-6342FQEB.js.map} +1 -1
  301. package/dist/{tags-5SBMRC2A.js → tags-ABHSX6M5.js} +3 -4
  302. package/dist/{tags-5SBMRC2A.js.map → tags-ABHSX6M5.js.map} +1 -1
  303. package/dist/{tags-YYLNF3PK.js → tags-FJIBBBRG.js} +3 -4
  304. package/dist/{tags-YYLNF3PK.js.map → tags-FJIBBBRG.js.map} +1 -1
  305. package/dist/{tags-4BAVFH4S.js → tags-KFYLZLB3.js} +2 -3
  306. package/dist/{tags-4BAVFH4S.js.map → tags-KFYLZLB3.js.map} +1 -1
  307. package/dist/{targeting-criteria-RJFLFICN.js → targeting-criteria-NR47AF5C.js} +3 -3
  308. package/dist/{targets-S2MT2PNB.js → targets-L56KOVQE.js} +3 -4
  309. package/dist/{targets-S2MT2PNB.js.map → targets-L56KOVQE.js.map} +1 -1
  310. package/dist/{templates-ZE5TOGRT.js → templates-B6XGDYUF.js} +3 -4
  311. package/dist/{templates-ZE5TOGRT.js.map → templates-B6XGDYUF.js.map} +1 -1
  312. package/dist/{testimonials-DII5DYLR.js → testimonials-CVC4YIXO.js} +6 -6
  313. package/dist/{top-companies-PGIAEHDF.js → top-companies-45X3DT7Z.js} +3 -4
  314. package/dist/{top-companies-PGIAEHDF.js.map → top-companies-45X3DT7Z.js.map} +1 -1
  315. package/dist/{translate-GXTS633J.js → translate-VP5R67PL.js} +11 -12
  316. package/dist/{translate-GXTS633J.js.map → translate-VP5R67PL.js.map} +1 -1
  317. package/dist/{triggers-2PTONXRU.js → triggers-22EMIVFD.js} +3 -4
  318. package/dist/{triggers-2PTONXRU.js.map → triggers-22EMIVFD.js.map} +1 -1
  319. package/dist/{unlink-XRMYJ6DB.js → unlink-65KUN6ID.js} +3 -4
  320. package/dist/{unlink-XRMYJ6DB.js.map → unlink-65KUN6ID.js.map} +1 -1
  321. package/dist/{unstage-FY7A3YFF.js → unstage-2E3I5SWF.js} +3 -4
  322. package/dist/{unstage-FY7A3YFF.js.map → unstage-2E3I5SWF.js.map} +1 -1
  323. package/dist/{unstage-RM2RLXKD.js → unstage-4ZEULXEQ.js} +4 -5
  324. package/dist/{unstage-RM2RLXKD.js.map → unstage-4ZEULXEQ.js.map} +1 -1
  325. package/dist/{update-S4562V3O.js → update-2S7CSEAW.js} +3 -4
  326. package/dist/{update-S4562V3O.js.map → update-2S7CSEAW.js.map} +1 -1
  327. package/dist/{update-V6YVEUI2.js → update-7NCOTAQZ.js} +3 -4
  328. package/dist/{update-V6YVEUI2.js.map → update-7NCOTAQZ.js.map} +1 -1
  329. package/dist/{update-PJ67D2OG.js → update-D6DJC6T7.js} +2 -3
  330. package/dist/{update-PJ67D2OG.js.map → update-D6DJC6T7.js.map} +1 -1
  331. package/dist/{update-E5SRBXQR.js → update-KREBPGBH.js} +3 -4
  332. package/dist/{update-E5SRBXQR.js.map → update-KREBPGBH.js.map} +1 -1
  333. package/dist/{upload-R6CQVLKF.js → upload-O6NHRPS7.js} +3 -4
  334. package/dist/{upload-R6CQVLKF.js.map → upload-O6NHRPS7.js.map} +1 -1
  335. package/dist/{url-options-JOKU46F2.js → url-options-GGXAL3J4.js} +3 -4
  336. package/dist/{url-options-JOKU46F2.js.map → url-options-GGXAL3J4.js.map} +1 -1
  337. package/dist/{url-params-7U2XMOWF.js → url-params-3EFGVTZZ.js} +3 -4
  338. package/dist/{url-params-7U2XMOWF.js.map → url-params-3EFGVTZZ.js.map} +1 -1
  339. package/dist/{validate-7YPOUKPB.js → validate-CSJM7XZM.js} +9 -10
  340. package/dist/{validate-7YPOUKPB.js.map → validate-CSJM7XZM.js.map} +1 -1
  341. package/dist/{videos-LICG6ACJ.js → videos-YSXYGTBM.js} +5 -5
  342. package/dist/{web-BA2PGTWU.js → web-IGIGVEKS.js} +3 -4
  343. package/dist/{web-BA2PGTWU.js.map → web-IGIGVEKS.js.map} +1 -1
  344. package/dist/{winning-ads-C6S2C5VP.js → winning-ads-2WS7FI4E.js} +2 -2
  345. package/dist/{write-commands-7SJ3BOW5.js → write-commands-5C7FUOVN.js} +4 -5
  346. package/dist/{write-commands-7SJ3BOW5.js.map → write-commands-5C7FUOVN.js.map} +1 -1
  347. package/dist/{x-CZHRC6U7.js → x-BFSKFCZD.js} +6 -6
  348. package/package.json +1 -1
  349. package/dist/add-2BEGRHUX.js.map +0 -1
  350. package/dist/analytics-IFELDWLL.js.map +0 -1
  351. package/dist/chunk-4PDHHHUJ.js +0 -537
  352. package/dist/chunk-4PDHHHUJ.js.map +0 -1
  353. package/dist/chunk-7EPXVICM.js.map +0 -1
  354. package/dist/chunk-ASI4P6X2.js.map +0 -1
  355. package/dist/chunk-FPOGPFAG.js.map +0 -1
  356. package/dist/chunk-HR6IWNKE.js.map +0 -1
  357. package/dist/chunk-HROZYQ5H.js.map +0 -1
  358. package/dist/chunk-NYIGXDUG.js.map +0 -1
  359. package/dist/chunk-QE7W555R.js.map +0 -1
  360. package/dist/flows-KTFAML22.js.map +0 -1
  361. package/dist/funnel-I6XIAEHG.js.map +0 -1
  362. package/dist/get-5PKNKJ5S.js.map +0 -1
  363. package/dist/plan-FT632COT.js +0 -51
  364. package/dist/plan-FT632COT.js.map +0 -1
  365. package/dist/questionnaire-JNGYJTAY.js +0 -37
  366. package/dist/questionnaire-JNGYJTAY.js.map +0 -1
  367. package/dist/scaffold-static-ad-ECTJL54Y.js.map +0 -1
  368. /package/dist/{actions-6TQMSVWD.js.map → actions-P35MEMGN.js.map} +0 -0
  369. /package/dist/{ads-AGYCVD62.js.map → ads-73PGA4YC.js.map} +0 -0
  370. /package/dist/{avatars-467OSBD6.js.map → avatars-EKCKHCC3.js.map} +0 -0
  371. /package/dist/{brand-YRTEPGBK.js.map → brand-C6PFGGQN.js.map} +0 -0
  372. /package/dist/{campaigns-OYMXDGWX.js.map → campaigns-KZYZTXDS.js.map} +0 -0
  373. /package/dist/{canvas-YQFG52IG.js.map → canvas-5NB27FX2.js.map} +0 -0
  374. /package/dist/{catalog-XLXIM7IW.js.map → catalog-VSSY6FGI.js.map} +0 -0
  375. /package/dist/{chunk-5ZNTADVR.js.map → chunk-3G3ZDLMI.js.map} +0 -0
  376. /package/dist/{chunk-ZDMTXQ2Q.js.map → chunk-3IBYKLXR.js.map} +0 -0
  377. /package/dist/{chunk-CWYAELVG.js.map → chunk-464O4MT2.js.map} +0 -0
  378. /package/dist/{chunk-NA63BH7V.js.map → chunk-4AUMTNVB.js.map} +0 -0
  379. /package/dist/{chunk-NDEE6G2J.js.map → chunk-4BQXAE7Z.js.map} +0 -0
  380. /package/dist/{chunk-2AOE2MZQ.js.map → chunk-5ZDLTE5T.js.map} +0 -0
  381. /package/dist/{chunk-ULG4QRTV.js.map → chunk-6NB47MRW.js.map} +0 -0
  382. /package/dist/{chunk-24EB7EDR.js.map → chunk-7YCRFMXF.js.map} +0 -0
  383. /package/dist/{chunk-WGUQHAJY.js.map → chunk-A4LOJ2VD.js.map} +0 -0
  384. /package/dist/{chunk-6F7DVPOS.js.map → chunk-AEOSAVVL.js.map} +0 -0
  385. /package/dist/{chunk-N4LAYIIN.js.map → chunk-CSYSX4D2.js.map} +0 -0
  386. /package/dist/{chunk-RX2DKU3W.js.map → chunk-DGUNI37S.js.map} +0 -0
  387. /package/dist/{chunk-I3ZR655O.js.map → chunk-IR6D7K4H.js.map} +0 -0
  388. /package/dist/{chunk-FUHN4MFY.js.map → chunk-JQJDXPCO.js.map} +0 -0
  389. /package/dist/{chunk-7CTMH5AK.js.map → chunk-KAUOHQTF.js.map} +0 -0
  390. /package/dist/{chunk-VYQ3QJ3C.js.map → chunk-KHRXPQID.js.map} +0 -0
  391. /package/dist/{chunk-6Y7ZBENQ.js.map → chunk-LECGCWT5.js.map} +0 -0
  392. /package/dist/{chunk-5WCSKQ7Z.js.map → chunk-LZ73CZGP.js.map} +0 -0
  393. /package/dist/{chunk-R25YLW6H.js.map → chunk-MELOSESI.js.map} +0 -0
  394. /package/dist/{chunk-DCRPXOJJ.js.map → chunk-MXYBTMKB.js.map} +0 -0
  395. /package/dist/{chunk-54C6YDGJ.js.map → chunk-NPY4QUMQ.js.map} +0 -0
  396. /package/dist/{chunk-LYQJ4PZW.js.map → chunk-OQ6663F4.js.map} +0 -0
  397. /package/dist/{chunk-H3427GPU.js.map → chunk-OZRUJVIQ.js.map} +0 -0
  398. /package/dist/{chunk-KMKEYI37.js.map → chunk-Q2V6E6SL.js.map} +0 -0
  399. /package/dist/{chunk-VL43TNIP.js.map → chunk-QRP3PXWN.js.map} +0 -0
  400. /package/dist/{chunk-C46GUI2S.js.map → chunk-RZBEK2VE.js.map} +0 -0
  401. /package/dist/{chunk-2VPBIT65.js.map → chunk-S3A3YOKO.js.map} +0 -0
  402. /package/dist/{chunk-FYGR3I2A.js.map → chunk-S77PZVYM.js.map} +0 -0
  403. /package/dist/{chunk-VLMBTPXU.js.map → chunk-SHL7LOC3.js.map} +0 -0
  404. /package/dist/{chunk-KS2QY6MK.js.map → chunk-W3ZHJJVT.js.map} +0 -0
  405. /package/dist/{chunk-RL5CP7N6.js.map → chunk-Y6O7EWYY.js.map} +0 -0
  406. /package/dist/{chunk-6NY2GPR4.js.map → chunk-Y6ZQXUZ7.js.map} +0 -0
  407. /package/dist/{chunk-WKQG6TER.js.map → chunk-ZEYEWPK6.js.map} +0 -0
  408. /package/dist/{connect-FCXNVTXG.js.map → connect-QCOGEPP4.js.map} +0 -0
  409. /package/dist/{creatives-FXUQ5WSD.js.map → creatives-B5NTXPUB.js.map} +0 -0
  410. /package/dist/{customers-XH2DMTFH.js.map → customers-A36LOZOB.js.map} +0 -0
  411. /package/dist/{feedback-EIZKS4JU.js.map → feedback-OLTCHE6C.js.map} +0 -0
  412. /package/dist/{find-FRRHAPWX.js.map → find-OTDIX6V4.js.map} +0 -0
  413. /package/dist/{fonts-MXR3ZKDX.js.map → fonts-EMMX3KII.js.map} +0 -0
  414. /package/dist/{ga4-DV2AXCSL.js.map → ga4-UDQ2HA2J.js.map} +0 -0
  415. /package/dist/{google-QYYYSSXI.js.map → google-KTO3PLEU.js.map} +0 -0
  416. /package/dist/{google-6OGZX47I.js.map → google-M7KEXVK5.js.map} +0 -0
  417. /package/dist/{gsc-TAKOF7J5.js.map → gsc-P3QYGDV2.js.map} +0 -0
  418. /package/dist/{icon-L4RSS6PZ.js.map → icon-I43F77FV.js.map} +0 -0
  419. /package/dist/{ideas-NFOW3HKJ.js.map → ideas-MIDU7YOA.js.map} +0 -0
  420. /package/dist/{images-2EFFUNNV.js.map → images-S254MS6O.js.map} +0 -0
  421. /package/dist/{ingest-2EIKN4QC.js.map → ingest-YV2NLDBE.js.map} +0 -0
  422. /package/dist/{inspiration-S3DU4CMQ.js.map → inspiration-P265QJ2H.js.map} +0 -0
  423. /package/dist/{landing-2ZB46LXH.js.map → landing-CJYGWCK4.js.map} +0 -0
  424. /package/dist/{line-items-5NECXUZT.js.map → line-items-7ZGIKEF2.js.map} +0 -0
  425. /package/dist/{logo-Q5D7PZY6.js.map → logo-2IP663QO.js.map} +0 -0
  426. /package/dist/{lookup-ETWY47F7.js.map → lookup-XK45W2SH.js.map} +0 -0
  427. /package/dist/{media-sources-ZXHEEP6T.js.map → media-sources-O6ZRUA3N.js.map} +0 -0
  428. /package/dist/{performance-UF5VTY2U.js.map → performance-6QW2KEEQ.js.map} +0 -0
  429. /package/dist/{promoted-tweets-LZKS5JIF.js.map → promoted-tweets-SURKMHFI.js.map} +0 -0
  430. /package/dist/{reddit-NU2N3LZD.js.map → reddit-GIP3ADMS.js.map} +0 -0
  431. /package/dist/{research-FMM6AWZC.js.map → research-2BLEISBG.js.map} +0 -0
  432. /package/dist/{run-EUO34T2J.js.map → run-MMEDKJDB.js.map} +0 -0
  433. /package/dist/{scheduled-agents-N4LJRM4C.js.map → scheduled-agents-6U44QE76.js.map} +0 -0
  434. /package/dist/{sources-FQ2UZTHL.js.map → sources-YBQ6KPFM.js.map} +0 -0
  435. /package/dist/{stock-KXJ26BY4.js.map → stock-2YCDN3N6.js.map} +0 -0
  436. /package/dist/{studio-SYKOSNDB.js.map → studio-RA7QQH4O.js.map} +0 -0
  437. /package/dist/{sync-definition-QR2N233R.js.map → sync-definition-UGSDX2SZ.js.map} +0 -0
  438. /package/dist/{tags-PYWFSBTR.js.map → tags-3WPW6PTV.js.map} +0 -0
  439. /package/dist/{targeting-criteria-RJFLFICN.js.map → targeting-criteria-NR47AF5C.js.map} +0 -0
  440. /package/dist/{testimonials-DII5DYLR.js.map → testimonials-CVC4YIXO.js.map} +0 -0
  441. /package/dist/{videos-LICG6ACJ.js.map → videos-YSXYGTBM.js.map} +0 -0
  442. /package/dist/{winning-ads-C6S2C5VP.js.map → winning-ads-2WS7FI4E.js.map} +0 -0
  443. /package/dist/{x-CZHRC6U7.js.map → x-BFSKFCZD.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  LINKEDIN_SEARCH_STATUSES,
8
8
  unsupportedLinkedinSearchStatuses
9
- } from "./chunk-7EPXVICM.js";
9
+ } from "./chunk-XF4JUKVF.js";
10
10
  import {
11
11
  ApiError
12
12
  } from "./chunk-XBOK23HI.js";
@@ -172,4 +172,4 @@ export {
172
172
  statusesArgDescription,
173
173
  resolveStatusFilter
174
174
  };
175
- //# sourceMappingURL=chunk-N4LAYIIN.js.map
175
+ //# sourceMappingURL=chunk-CSYSX4D2.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  findSubreddits,
3
3
  searchReddit
4
- } from "./chunk-FYGR3I2A.js";
4
+ } from "./chunk-S77PZVYM.js";
5
5
  import {
6
6
  holdUnbilledSpend
7
7
  } from "./chunk-WTOYCUKH.js";
@@ -589,4 +589,4 @@ export {
589
589
  researchCustomers,
590
590
  customersCommand
591
591
  };
592
- //# sourceMappingURL=chunk-RX2DKU3W.js.map
592
+ //# sourceMappingURL=chunk-DGUNI37S.js.map
@@ -1,20 +1,19 @@
1
1
  import {
2
2
  hubspotRefusal
3
- } from "./chunk-VLMBTPXU.js";
3
+ } from "./chunk-SHL7LOC3.js";
4
4
  import {
5
5
  collectSideEffects,
6
6
  readFlowTree,
7
- readSettings,
8
7
  walkNodes,
9
8
  writeFlowTree
10
- } from "./chunk-HROZYQ5H.js";
9
+ } from "./chunk-YRQYA2LR.js";
11
10
  import {
12
11
  failApi
13
- } from "./chunk-SJYEY5MV.js";
12
+ } from "./chunk-3HJLHTWP.js";
14
13
  import {
15
14
  FLOW_AGENT_DESTINATION_KINDS,
16
15
  FLOW_PROVIDER_TYPE
17
- } from "./chunk-7EPXVICM.js";
16
+ } from "./chunk-XF4JUKVF.js";
18
17
  import {
19
18
  ApiError,
20
19
  apiPost
@@ -54,89 +53,11 @@ function isSet(value) {
54
53
  return typeof value === "string" && value.length > 0;
55
54
  }
56
55
  function unwiredSideEffects(tree, type) {
57
- return collectSideEffects(tree).filter(({ sideEffect }) => sideEffect.type === type).filter(
58
- ({ sideEffect }) => OAUTH_SIDE_EFFECTS.has(type) && !isSet(sideEffect.oauthProviderId) || !isSet(sideEffect.encryptedConfig)
59
- ).map(({ sideEffect }) => String(sideEffect.id));
56
+ return collectSideEffects(tree).filter(({ sideEffect }) => sideEffect.type === type).filter(({ sideEffect }) => !isSet(sideEffect.oauthProviderId) || !isSet(sideEffect.encryptedConfig)).map(({ sideEffect }) => String(sideEffect.id));
60
57
  }
61
58
  function unwiredHubspotForms(tree) {
62
59
  return unwiredSideEffects(tree, "hubspotForm");
63
60
  }
64
- var STATED_KINDS = /* @__PURE__ */ new Set(["email", "httpWebhook"]);
65
- function statedKind(args) {
66
- if (typeof args.email === "string" || typeof args.subject === "string") return "email";
67
- if (typeof args.url === "string") return "httpWebhook";
68
- return void 0;
69
- }
70
- function sealRequestFor(kind, args) {
71
- const text = (key) => typeof args[key] === "string" && args[key].trim() ? args[key].trim() : void 0;
72
- if (kind === "email") {
73
- const email = text("email");
74
- const subject = text("subject");
75
- if (!email || !subject) {
76
- return {
77
- ok: false,
78
- message: "An email destination needs both who receives it and its subject.",
79
- fix: 'Pass --email "a@x.com, b@x.com" --subject "New lead \u2014 <Form name>". Write the subject yourself from the Form; ask the user only for an address you were not given.'
80
- };
81
- }
82
- return { ok: true, request: { type: "email", email, subject } };
83
- }
84
- if (kind === "httpWebhook") {
85
- const apiUrl = text("url");
86
- if (!apiUrl) {
87
- return { ok: false, message: "A webhook destination needs its address.", fix: "Pass --url https://\u2026" };
88
- }
89
- return { ok: true, request: { type: "httpWebhook", apiUrl } };
90
- }
91
- return {
92
- ok: false,
93
- message: `A ${kind} destination holds a credential, so it is not one you can state.`,
94
- fix: "Its token or URL is the user's to enter: request_flow_input."
95
- };
96
- }
97
- var UNREADABLE = "holds settings this chat cannot read";
98
- function keepsWhatTheAgentCannotState(kind, settings) {
99
- if (settings === null) return UNREADABLE;
100
- if (kind === "httpWebhook" && typeof settings?.auth === "string" && settings.auth !== "noAuth") {
101
- return "sends a credential the user entered";
102
- }
103
- if (kind === "email" && settings !== void 0 && "email" in settings && typeof settings.email !== "string") {
104
- return "replies to the visitor's own email answer";
105
- }
106
- return void 0;
107
- }
108
- function restatableTargets(target, settingsById, all, replaceUnreadableEmail = false) {
109
- const kept = target.ids.flatMap((id) => {
110
- if (target.kind === "email" && settingsById[id] === null && replaceUnreadableEmail && !all && target.ids.length === 1) {
111
- return [];
112
- }
113
- const why = keepsWhatTheAgentCannotState(target.kind, settingsById[id]);
114
- return why ? [{ id, why }] : [];
115
- });
116
- const ids = target.ids.filter((id) => !kept.some((entry) => entry.id === id));
117
- if (kept.length > 0 && (!all || ids.length === 0)) {
118
- const [first] = kept;
119
- return {
120
- ok: false,
121
- message: `"${first?.id}" ${first?.why}; restating it would replace that.`,
122
- fix: first?.why === UNREADABLE ? target.kind === "email" ? `Baker cannot read the old recipients or tell whether this replies to a visitor. If the user wants to replace this destination, pass --side-effect ${first?.id} --replace-unreadable --email <complete recipient list> --subject <subject>. This replaces its entire previous setup; never use it to add a recipient to an unknown list. Otherwise leave it as it is and add a separate team email destination.` : "Have the user restate the webhook address and any credential once with request_flow_input; after that this command can change a webhook with no credential." : target.kind === "httpWebhook" ? "A new address for a webhook with a credential is the user's to enter with it: request_flow_input." : "Leave it as it is. Add a separate email destination for the team: baker flows add-side-effect."
123
- };
124
- }
125
- return { ok: true, ids, skipped: kept.map((entry) => entry.id) };
126
- }
127
- function attachSettings(tree, id, encryptedConfig, type) {
128
- const chosen = collectSideEffects(tree).find((entry) => entry.sideEffect.id === id);
129
- if (!chosen || chosen.sideEffect.type !== type) {
130
- const ofType = collectSideEffects(tree).filter((entry) => entry.sideEffect.type === type);
131
- return {
132
- ok: false,
133
- message: chosen ? `Side effect "${id}" is a ${String(chosen.sideEffect.type)}, not a ${type}.` : `No side effect with id "${id}" in this form.`,
134
- fix: `${type} side effects in this form: ${ofType.map((entry) => String(entry.sideEffect.id)).join(", ") || "none"}`
135
- };
136
- }
137
- chosen.sideEffect.encryptedConfig = encryptedConfig;
138
- return { ok: true, nodeId: String(chosen.node.id), sideEffectId: id };
139
- }
140
61
  function stepType(node) {
141
62
  const type = node?.nodeData?.type;
142
63
  return typeof type === "string" ? type : void 0;
@@ -217,13 +138,7 @@ function refuse(message, fix, code = "VALIDATION_ERROR") {
217
138
  function allTargets(tree, kind) {
218
139
  if (!kind) refuse("--all needs --type <kind> to know what to wire.", "e.g. --all --type googleSpreadsheet");
219
140
  const on = STEP_KINDS.has(kind) ? "node" : "sideEffect";
220
- const ids = STATED_KINDS.has(kind) ? collectSideEffects(tree).filter(({ sideEffect }) => sideEffect.type === kind).map(({ sideEffect }) => String(sideEffect.id)) : on === "node" ? unpickedSteps(tree, kind) : unwiredSideEffects(tree, kind);
221
- if (ids.length === 0 && STATED_KINDS.has(kind)) {
222
- refuse(
223
- `This Form has no ${kind} destination.`,
224
- `Add one: baker flows add-side-effect <slug> --node <stepId> --type ${kind}`
225
- );
226
- }
141
+ const ids = on === "node" ? unpickedSteps(tree, kind) : unwiredSideEffects(tree, kind);
227
142
  if (ids.length === 0) {
228
143
  refuse(
229
144
  `Every ${kind} in this Form is already wired.`,
@@ -254,14 +169,12 @@ function targetsFor(tree, args) {
254
169
  refuse("Pass one of --node, --side-effect or --all.", "One target per call; --all for every unwired one.");
255
170
  }
256
171
  if (args.all === true) {
257
- const kind = typeof args.type === "string" ? args.type : args["hubspot-form"] ? "hubspotForm" : statedKind(args);
172
+ const kind = typeof args.type === "string" ? args.type : args["hubspot-form"] ? "hubspotForm" : void 0;
258
173
  return allTargets(tree, kind);
259
174
  }
260
175
  if (node) return stepTarget(tree, node);
261
176
  if (named) return sideEffectTarget(tree, named);
262
177
  if (args["hubspot-form"]) return { kind: "hubspotForm", on: "sideEffect", ids: [onlyOfType(tree, "hubspotForm")] };
263
- const stated = statedKind(args);
264
- if (stated) return { kind: stated, on: "sideEffect", ids: [onlyOfType(tree, stated)] };
265
178
  return refuse(
266
179
  "Name what to fill: --node <stepId>, --side-effect <id>, or --all --type <kind>.",
267
180
  "Ids: baker flows show <slug>"
@@ -356,39 +269,6 @@ function sheetHints(slug, data) {
356
269
  columns ? `Columns: ${columns}. Map by letter: baker flows map ${slug} --side-effect <id> --map A=<value> \u2026 --write.` : `The "${sheet.tab}" tab has no header row. Map by letter anyway, and say which column holds what.`
357
270
  ];
358
271
  }
359
- async function fromStated(tree, target, args) {
360
- const plan = sealRequestFor(target.kind, args);
361
- if (!plan.ok) refuse(plan.message, plan.fix);
362
- const current = await readSettings(tree);
363
- if (current === null) {
364
- refuse(
365
- "Could not read what this Form's destinations hold now, so nothing was overwritten.",
366
- "Try again in a moment; if it keeps failing, carry on with the rest and tell the user this one is not set.",
367
- "NETWORK_ERROR"
368
- );
369
- }
370
- const restatable = restatableTargets(target, current, args.all === true, args["replace-unreadable"] === true);
371
- if (!restatable.ok) refuse(restatable.message, restatable.fix);
372
- const kept = restatable.skipped.length ? [`Left as it was: ${restatable.skipped.join(", ")} (it holds what only the user can set).`] : [];
373
- let sealed;
374
- try {
375
- sealed = (await apiPost("/api/flows/destinations/seal", plan.request)).data;
376
- } catch (err) {
377
- failApi(err);
378
- }
379
- const wired = applyAll(
380
- { ...target, ids: restatable.ids },
381
- (id) => attachSettings(tree, id, sealed.encryptedConfig, target.kind)
382
- );
383
- return {
384
- wired,
385
- destination: sealed.settings,
386
- hints: [
387
- ...kept,
388
- target.kind === "email" ? `Leads from these steps now go to ${String(sealed.settings.email)} with the subject "${String(sealed.settings.subject)}". Tell the user in those words.` : `Submissions now go to ${String(sealed.settings.apiUrl)}.`
389
- ]
390
- };
391
- }
392
272
  async function fromPlatform(tree, target, args, slug) {
393
273
  const kind = target.kind;
394
274
  if (!isAgentKind(kind)) {
@@ -417,7 +297,7 @@ async function fromPlatform(tree, target, args, slug) {
417
297
  }
418
298
  registerSchema({
419
299
  command: "flows.connect",
420
- description: 'Fill a Form\'s step or destination yourself \u2014 no card for the user. Steps: Calendly, SavvyCal, GoHighLevel calendar/form (`--node <id> --resource <id>`). Destinations: HubSpot form (`--hubspot-form <id>`), Google Sheets (`--resource <spreadsheetId>` or `--new-sheet <title> --columns \u2026`), Pipedrive and GoHighLevel contact (no resource: the connected account is the destination), email (`--email "a@x.com, b@x.com" --subject "New lead \u2014 <Form>"`, never a card), webhook without a credential (`--url`). `--same-as <slug>:<id>` copies what another Form already has. `--all --type <kind>` fills every unwired one of that kind at once. Ids come from `baker flows options <kind>`. Fall back to request_flow_input only when nothing is connected, the sheet was never chosen, or several resources plausibly match.',
300
+ description: "Fill a Form's step or destination yourself \u2014 no card for the user. Steps: Calendly, SavvyCal, GoHighLevel calendar/form (`--node <id> --resource <id>`). Destinations: HubSpot form (`--hubspot-form <id>`), Google Sheets (`--resource <spreadsheetId>` or `--new-sheet <title> --columns \u2026`), Pipedrive and GoHighLevel contact (no resource: the connected account is the destination). `--same-as <slug>:<id>` copies what another Form already has. `--all --type <kind>` fills every unwired one of that kind at once. Ids come from `baker flows options <kind>`. Fall back to request_flow_input only when nothing is connected, the sheet was never chosen, or several resources plausibly match.",
421
301
  args: {
422
302
  slug: { type: "positional", description: "Form slug", required: true },
423
303
  node: {
@@ -454,34 +334,13 @@ registerSchema({
454
334
  type: "string",
455
335
  description: "Connection id, when more than one account of the platform is connected",
456
336
  required: false
457
- },
458
- email: {
459
- type: "string",
460
- description: 'Email destination: who receives each lead, comma-separated for several (--email "ana@x.com, luis@x.com"). Never a card: you state it.',
461
- required: false
462
- },
463
- subject: {
464
- type: "string",
465
- description: 'Email destination: the subject line. Write it yourself from the Form ("New lead \u2014 Private events").',
466
- required: false
467
- },
468
- "replace-unreadable": {
469
- type: "boolean",
470
- description: "Email only, one destination: replace unreadable old settings with the complete --email and --subject. Use only when the user intends replacement, never to add to an unknown recipient list. Does not apply with --all.",
471
- required: false,
472
- default: false
473
- },
474
- url: {
475
- type: "string",
476
- description: "Webhook destination with no credential: its https address. One that needs a token goes to request_flow_input.",
477
- required: false
478
337
  }
479
338
  }
480
339
  });
481
340
  var connectCommand = defineCommand({
482
341
  meta: {
483
342
  name: "connect",
484
- description: 'Fill a step or destination yourself. Start here: baker flows options calendly, then baker flows connect contact --node book --resource <id>. Email: --side-effect se-email-1 --email "ana@x.com, luis@x.com" --subject "New lead \u2014 Contact". Sheets: --side-effect se-gsheet-1 --new-sheet "Leads" --columns "Name,Email". Same as another Form: --same-as madrid:se-gsheet-1'
343
+ description: 'Fill a step or destination yourself. Start here: baker flows options calendly, then baker flows connect contact --node book --resource <id>. Sheets: --side-effect se-gsheet-1 --new-sheet "Leads" --columns "Name,Email". Same as another Form: --same-as madrid:se-gsheet-1'
485
344
  },
486
345
  args: {
487
346
  slug: { type: "positional", description: "Form slug", required: true },
@@ -495,20 +354,13 @@ var connectCommand = defineCommand({
495
354
  columns: { type: "string", description: "Header row for --new-sheet, comma-separated" },
496
355
  tab: { type: "string", description: "Sheet tab (default: the first)" },
497
356
  "same-as": { type: "string", description: "<slug>:<id> to copy" },
498
- account: { type: "string", description: "Connection id when several are connected" },
499
- email: { type: "string", description: "Email destination: recipients, comma-separated" },
500
- subject: { type: "string", description: "Email destination: subject line" },
501
- "replace-unreadable": {
502
- type: "boolean",
503
- description: "Replace one unreadable email's entire setup with --email and --subject"
504
- },
505
- url: { type: "string", description: "Webhook destination with no credential: its address" }
357
+ account: { type: "string", description: "Connection id when several are connected" }
506
358
  },
507
359
  run: async ({ args }) => {
508
360
  const slug = String(args.slug);
509
361
  const target = targetsFor(readFlowTree(slug), args);
510
362
  const tree = readFlowTree(slug);
511
- const result = typeof args["same-as"] === "string" ? sameAs(tree, target, args["same-as"]) : typeof args["hubspot-form"] === "string" ? await fromHubspot(tree, target, args["hubspot-form"], slug) : STATED_KINDS.has(target.kind) ? await fromStated(tree, target, args) : await fromPlatform(tree, target, args, slug);
363
+ const result = typeof args["same-as"] === "string" ? sameAs(tree, target, args["same-as"]) : typeof args["hubspot-form"] === "string" ? await fromHubspot(tree, target, args["hubspot-form"], slug) : await fromPlatform(tree, target, args, slug);
512
364
  writeFlowTree(slug, tree);
513
365
  writeJson({
514
366
  ok: true,
@@ -528,9 +380,6 @@ export {
528
380
  attachDestination,
529
381
  unwiredSideEffects,
530
382
  unwiredHubspotForms,
531
- sealRequestFor,
532
- restatableTargets,
533
- attachSettings,
534
383
  attachStep,
535
384
  unpickedSteps,
536
385
  copyDestination,
@@ -538,4 +387,4 @@ export {
538
387
  destinationRefusal,
539
388
  connectCommand
540
389
  };
541
- //# sourceMappingURL=chunk-QE7W555R.js.map
390
+ //# sourceMappingURL=chunk-DWHIOO7E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/flows/connect.ts"],"sourcesContent":["/**\n * `connect`: fill a Form's step or destination yourself once you know which\n * resource is meant, instead of parking the turn on the chat's picker card.\n *\n * Three sources, one write:\n * - `--hubspot-form <id>` — a HubSpot form as a `hubspotForm` destination.\n * - `--resource <id>` / `--new-sheet <title>` / nothing — Calendly, SavvyCal\n * and GoHighLevel steps; Google Sheets, Pipedrive and GoHighLevel\n * destinations. The backend reads the resource through the company's\n * connected account and answers with exactly what the card would write,\n * sealed under the flow key where it is a destination — so this command\n * writes ciphertext it cannot read.\n * - `--same-as <slug>:<id>` — the destination or step another Form already\n * has, copied as-is. No platform is asked anything.\n *\n * `request_flow_input` stays the path when nothing is connected, when a\n * spreadsheet has never been chosen, or when the agent cannot tell which\n * resource is meant.\n */\n\nimport {\n FLOW_AGENT_DESTINATION_KINDS,\n FLOW_PROVIDER_TYPE,\n type FlowAgentDestinationKind,\n type FlowsResolveResponse,\n type HubspotFormsDestinationResponse,\n} from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { ApiError, apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { failApi } from \"../actions/shared.ts\";\nimport { hubspotRefusal } from \"../hubspot/refusal.ts\";\nimport { collectSideEffects, readFlowTree, walkNodes, writeFlowTree } from \"./shared.ts\";\n\ntype AnyRecord = Record<string, unknown>;\n\ntype Sealed = { oauthProviderId: string; encryptedConfig: string };\n\ntype Attached = { ok: true; nodeId: string; sideEffectId: string } | { ok: false; message: string; fix: string };\n\ntype Stepped = { ok: true; nodeId: string; type: string } | { ok: false; message: string; fix: string };\n\nconst STEP_KINDS = new Set([\"calendly\", \"savvycal\", \"highlevel\", \"highlevelForm\", \"hubspot\", \"hubspotMeeting\"]);\nconst OAUTH_SIDE_EFFECTS = new Set([\"hubspotForm\", \"googleSpreadsheet\", \"pipedrive\", \"goHighlevelContact\"]);\n\n/**\n * Put the sealed destination on the side effect `named` picks — or, with no\n * name, on the form's only one of `type`. Mutates `tree`; the caller writes it.\n */\nexport function attachDestination(\n tree: AnyRecord,\n named: string | undefined,\n sealed: Sealed,\n type = \"hubspotForm\",\n): Attached {\n const ofType = collectSideEffects(tree).filter((entry) => entry.sideEffect.type === type);\n const inventory = ofType.map((entry) => String(entry.sideEffect.id)).join(\", \") || \"none\";\n const chosen = named\n ? collectSideEffects(tree).find((entry) => entry.sideEffect.id === named)\n : ofType.length === 1\n ? ofType[0]\n : undefined;\n if (!chosen) {\n return {\n ok: false,\n message: named\n ? `No side effect with id \"${named}\" in this form.`\n : `This form has ${ofType.length} ${type} side effects — name one with --side-effect <id>.`,\n fix:\n ofType.length === 0\n ? `Add one first: baker flows add-side-effect <slug> --node <stepId> --type ${type}`\n : `${type} side effects in this form: ${inventory}`,\n };\n }\n if (chosen.sideEffect.type !== type) {\n return {\n ok: false,\n message: `Side effect \"${named}\" is a ${String(chosen.sideEffect.type)}, not a ${type}.`,\n fix: `${type} side effects in this form: ${inventory}`,\n };\n }\n chosen.sideEffect.oauthProviderId = sealed.oauthProviderId;\n chosen.sideEffect.encryptedConfig = sealed.encryptedConfig;\n return { ok: true, nodeId: String(chosen.node.id), sideEffectId: String(chosen.sideEffect.id) };\n}\n\nfunction isSet(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\n/**\n * Every side effect of `type` that still lacks its account or its config — what\n * `--all` wires. One already wired is left alone, so re-running after a partial\n * setup never repoints a destination someone chose.\n */\nexport function unwiredSideEffects(tree: AnyRecord, type: string): string[] {\n return collectSideEffects(tree)\n .filter(({ sideEffect }) => sideEffect.type === type)\n .filter(({ sideEffect }) => !isSet(sideEffect.oauthProviderId) || !isSet(sideEffect.encryptedConfig))\n .map(({ sideEffect }) => String(sideEffect.id));\n}\n\nexport function unwiredHubspotForms(tree: AnyRecord): string[] {\n return unwiredSideEffects(tree, \"hubspotForm\");\n}\n\nfunction stepType(node: AnyRecord | undefined): string | undefined {\n const type = (node?.nodeData as AnyRecord | undefined)?.type;\n return typeof type === \"string\" ? type : undefined;\n}\n\nfunction findStep(tree: AnyRecord, nodeId: string): AnyRecord | undefined {\n return walkNodes(tree).find((node) => node.id === nodeId);\n}\n\n/** Write a picked resource into a step's `form.external`, keeping what the step autofills. */\nexport function attachStep(tree: AnyRecord, nodeId: string, external: AnyRecord): Stepped {\n const node = findStep(tree, nodeId);\n const type = stepType(node);\n if (!node || !type) {\n return {\n ok: false,\n message: `No step with id \"${nodeId}\" in this form.`,\n fix: \"Step ids: baker flows show <slug>\",\n };\n }\n if (!STEP_KINDS.has(type)) {\n return {\n ok: false,\n message: `Step \"${nodeId}\" is a ${type}, which embeds nothing from another platform.`,\n fix: \"Only calendly, savvycal, highlevel, highlevelForm, hubspot and hubspotMeeting steps take a resource.\",\n };\n }\n const nodeData = node.nodeData as AnyRecord;\n const form = (nodeData.form as AnyRecord | undefined) ?? {};\n nodeData.form = { autofilledFields: {}, ...form, external };\n return { ok: true, nodeId, type };\n}\n\n/** Steps of `type` with nothing picked yet — what `--all` fills for a step kind. */\nexport function unpickedSteps(tree: AnyRecord, type: string): string[] {\n return walkNodes(tree)\n .filter((node) => stepType(node) === type)\n .filter((node) => ((node.nodeData as AnyRecord).form as AnyRecord | undefined)?.external == null)\n .map((node) => String(node.id));\n}\n\n/**\n * Give `targetId` exactly the destination (or picked resource) `sourceId`\n * already has in another Form. Only between the same type: a sheet's sealed\n * config means nothing to Pipedrive.\n */\nexport function copyDestination(source: AnyRecord, sourceId: string, target: AnyRecord, targetId: string): Stepped {\n const from = collectSideEffects(source).find((entry) => entry.sideEffect.id === sourceId);\n if (from) {\n const type = String(from.sideEffect.type);\n if (!isSet(from.sideEffect.oauthProviderId) || !isSet(from.sideEffect.encryptedConfig)) {\n return {\n ok: false,\n message: `\"${sourceId}\" is not wired itself — nothing to copy.`,\n fix: \"Copy from one that is.\",\n };\n }\n const attached = attachDestination(\n target,\n targetId,\n {\n oauthProviderId: String(from.sideEffect.oauthProviderId),\n encryptedConfig: String(from.sideEffect.encryptedConfig),\n },\n type,\n );\n return attached.ok ? { ok: true, nodeId: attached.nodeId, type } : attached;\n }\n const step = findStep(source, sourceId);\n const external = ((step?.nodeData as AnyRecord | undefined)?.form as AnyRecord | undefined)?.external;\n if (!step || external == null || typeof external !== \"object\") {\n return {\n ok: false,\n message: `No wired side effect or picked step \"${sourceId}\" in the source form.`,\n fix: \"Ids: baker flows show <slug>\",\n };\n }\n const targetType = stepType(findStep(target, targetId));\n if (targetType !== stepType(step)) {\n return {\n ok: false,\n message: `\"${sourceId}\" is a ${String(stepType(step))} and \"${targetId}\" a ${String(targetType)} — copy only between the same type.`,\n fix: \"Pick a source of the same type.\",\n };\n }\n return attachStep(target, targetId, structuredClone(external as AnyRecord));\n}\n\nfunction refuse(\n message: string,\n fix: string | { action: string; explanation: string },\n code = \"VALIDATION_ERROR\",\n): never {\n writeJson({ ok: false, error: { code, message, fix } });\n process.exit(1);\n}\n\ntype Target = { kind: string; on: \"node\" | \"sideEffect\"; ids: string[] };\n\nfunction allTargets(tree: AnyRecord, kind: string | undefined): Target {\n if (!kind) refuse(\"--all needs --type <kind> to know what to wire.\", \"e.g. --all --type googleSpreadsheet\");\n const on = STEP_KINDS.has(kind) ? \"node\" : \"sideEffect\";\n const ids = on === \"node\" ? unpickedSteps(tree, kind) : unwiredSideEffects(tree, kind);\n if (ids.length === 0) {\n refuse(\n `Every ${kind} in this Form is already wired.`,\n \"Repoint one by naming it with --node / --side-effect instead of --all.\",\n );\n }\n return { kind, on, ids };\n}\n\nfunction onlyOfType(tree: AnyRecord, type: string): string {\n const probe = attachDestination(tree, undefined, { oauthProviderId: \"\", encryptedConfig: \"\" }, type);\n if (!probe.ok) refuse(probe.message, probe.fix);\n return probe.sideEffectId;\n}\n\nfunction stepTarget(tree: AnyRecord, node: string): Target {\n const type = stepType(findStep(tree, node));\n if (!type) refuse(`No step with id \"${node}\" in this form.`, \"Step ids: baker flows show <slug>\");\n return { kind: type, on: \"node\", ids: [node] };\n}\n\nfunction sideEffectTarget(tree: AnyRecord, named: string): Target {\n const found = collectSideEffects(tree).find((entry) => entry.sideEffect.id === named);\n if (!found) refuse(`No side effect with id \"${named}\" in this form.`, \"Side-effect ids: baker flows show <slug>\");\n return { kind: String(found.sideEffect.type), on: \"sideEffect\", ids: [named] };\n}\n\n/** Which steps or side effects this call fills, resolved before any platform is asked anything. */\nexport function targetsFor(tree: AnyRecord, args: AnyRecord): Target {\n const node = typeof args.node === \"string\" ? args.node : undefined;\n const named = typeof args[\"side-effect\"] === \"string\" ? args[\"side-effect\"] : undefined;\n if ([node, named, args.all === true ? \"all\" : undefined].filter(Boolean).length > 1) {\n refuse(\"Pass one of --node, --side-effect or --all.\", \"One target per call; --all for every unwired one.\");\n }\n if (args.all === true) {\n const kind = typeof args.type === \"string\" ? args.type : args[\"hubspot-form\"] ? \"hubspotForm\" : undefined;\n return allTargets(tree, kind);\n }\n if (node) return stepTarget(tree, node);\n if (named) return sideEffectTarget(tree, named);\n if (args[\"hubspot-form\"]) return { kind: \"hubspotForm\", on: \"sideEffect\", ids: [onlyOfType(tree, \"hubspotForm\")] };\n return refuse(\n \"Name what to fill: --node <stepId>, --side-effect <id>, or --all --type <kind>.\",\n \"Ids: baker flows show <slug>\",\n );\n}\n\nasync function sealHubspotForm(formId: string): Promise<HubspotFormsDestinationResponse[\"data\"]> {\n try {\n return (await apiPost<HubspotFormsDestinationResponse>(\"/api/hubspot/forms/destination\", { formId })).data;\n } catch (err) {\n const refusal = err instanceof ApiError ? hubspotRefusal(err.code, err.message) : null;\n if (err instanceof ApiError && refusal !== null) refuse(err.message, refusal.fix, refusal.code);\n failApi(err);\n }\n}\n\nfunction isAgentKind(kind: string): kind is FlowAgentDestinationKind {\n return (FLOW_AGENT_DESTINATION_KINDS as readonly string[]).includes(kind);\n}\n\n/**\n * The refusals only the user can clear, as the call that clears them: nothing\n * connected is the connect card; two accounts is a question only when the\n * agent cannot tell which one the user means.\n */\nexport function destinationRefusal(\n kind: FlowAgentDestinationKind,\n err: ApiError,\n): { code: string; fix: string } | null {\n if (err.code === \"NOT_FOUND\" && err.message.includes(\"is connected to this company\")) {\n return {\n code: \"NOT_CONNECTED\",\n fix: `AGENT INSTRUCTION: only the user can connect it. Call request_connection with { platform: \"${FLOW_PROVIDER_TYPE[kind]}\", reason } — reason in their words — then run this again. Keep going with the rest of the task meanwhile.`,\n };\n }\n if (err.code === \"CONFLICT\" && err.message.includes(\"--account\")) {\n return {\n code: \"SEVERAL_ACCOUNTS\",\n fix: \"Pass --account <id> when the user or the brief makes clear which one; otherwise ask them which (AskUserQuestion), naming the accounts above.\",\n };\n }\n return null;\n}\n\nfunction resolveBody(kind: FlowAgentDestinationKind, args: AnyRecord): AnyRecord {\n const columns =\n typeof args.columns === \"string\"\n ? args.columns\n .split(\",\")\n .map((column) => column.trim())\n .filter(Boolean)\n : undefined;\n return {\n kind,\n ...(typeof args.account === \"string\" ? { account: args.account } : {}),\n ...(typeof args.resource === \"string\" ? { resourceId: args.resource } : {}),\n ...(typeof args.tab === \"string\" ? { tab: args.tab } : {}),\n ...(typeof args[\"new-sheet\"] === \"string\" ? { newSheet: { title: args[\"new-sheet\"], columns } } : {}),\n };\n}\n\nasync function resolveDestination(\n kind: FlowAgentDestinationKind,\n args: AnyRecord,\n): Promise<FlowsResolveResponse[\"data\"]> {\n try {\n return (await apiPost<FlowsResolveResponse>(\"/api/flows/destinations/resolve\", resolveBody(kind, args))).data;\n } catch (err) {\n const refusal = err instanceof ApiError ? destinationRefusal(kind, err) : null;\n if (err instanceof ApiError && refusal !== null) refuse(err.message, refusal.fix, refusal.code);\n failApi(err);\n }\n}\n\ntype Wired = { wired: { nodeId: string; sideEffectId?: string }[]; destination: unknown; hints: string[] };\n\nfunction applyAll(target: Target, apply: (id: string) => Stepped | Attached): Wired[\"wired\"] {\n return target.ids.map((id) => {\n const done = apply(id);\n if (!done.ok) refuse(done.message, done.fix);\n return \"sideEffectId\" in done ? { nodeId: done.nodeId, sideEffectId: done.sideEffectId } : { nodeId: done.nodeId };\n });\n}\n\nfunction sameAs(tree: AnyRecord, target: Target, ref: string): Wired {\n const [slug, id] = ref.split(\":\");\n if (!slug || !id) refuse(`--same-as takes <slug>:<id>, got \"${ref}\".`, \"e.g. --same-as madrid:se-gsheet-1\");\n const source = readFlowTree(slug);\n const wired = applyAll(target, (targetId) => copyDestination(source, id, tree, targetId));\n return { wired, destination: { sameAs: ref }, hints: [] };\n}\n\nasync function fromHubspot(tree: AnyRecord, target: Target, formId: string, slug: string): Promise<Wired> {\n if (target.kind !== \"hubspotForm\") {\n refuse(\n `--hubspot-form wires a hubspotForm side effect, not a ${target.kind}.`,\n \"A HubSpot step takes `baker hubspot forms view <id> --as-node` (or `meetings view <slug> --as-node`).\",\n );\n }\n const sealed = await sealHubspotForm(formId);\n const wired = applyAll(target, (id) => attachDestination(tree, id, sealed));\n return {\n wired,\n destination: { formGuid: sealed.formGuid, formName: sealed.formName, portalId: sealed.portalId },\n hints: [\n `Now map each step's answers onto it: baker flows map ${slug} --side-effect <id> --hubspot-form ${sealed.formGuid} --map email=<value> … --write. Field names come from \\`baker hubspot forms view ${sealed.formGuid}\\`.`,\n ],\n };\n}\n\nfunction sheetHints(slug: string, data: Extract<FlowsResolveResponse[\"data\"], { target: \"sideEffect\" }>): string[] {\n const sheet = data.destination;\n if (!sheet)\n return [`Now map the fields: baker flows map ${slug} --side-effect <id> --map <fieldKey>=<value> … --write.`];\n const columns = sheet.columns.map((column) => `${column.letter}=${column.header}`).join(\", \");\n return [\n ...(sheet.created\n ? [\n `Created \"${sheet.name}\" in the connected Google account${sheet.url ? ` (${sheet.url})` : \"\"} — tell the user where their leads will land.`,\n ]\n : []),\n columns\n ? `Columns: ${columns}. Map by letter: baker flows map ${slug} --side-effect <id> --map A=<value> … --write.`\n : `The \"${sheet.tab}\" tab has no header row. Map by letter anyway, and say which column holds what.`,\n ];\n}\n\nasync function fromPlatform(tree: AnyRecord, target: Target, args: AnyRecord, slug: string): Promise<Wired> {\n const kind = target.kind;\n if (!isAgentKind(kind)) {\n const hubspotStep = kind === \"hubspot\" || kind === \"hubspotMeeting\";\n refuse(\n `A ${kind} ${target.on === \"node\" ? \"step\" : \"side effect\"} is not something this command can fill from a platform.`,\n hubspotStep\n ? \"Write the blob from `baker hubspot forms view <id> --as-node` (or `meetings view <slug> --as-node`) into the step's form.external.\"\n : OAUTH_SIDE_EFFECTS.has(kind)\n ? \"Pass --hubspot-form <formId>.\"\n : \"It takes typed credentials only the user has: request_flow_input.\",\n );\n }\n const data = await resolveDestination(kind, args);\n if (data.target === \"node\") {\n const wired = applyAll(target, (id) => attachStep(tree, id, data.external));\n return {\n wired,\n destination: { name: data.name, account: data.account },\n hints: [`Picked \"${data.name}\". Autofill its fields from earlier answers in the step's form.autofilledFields.`],\n };\n }\n const sealed = { oauthProviderId: data.oauthProviderId, encryptedConfig: data.encryptedConfig };\n const wired = applyAll(target, (id) => attachDestination(tree, id, sealed, kind));\n return {\n wired,\n destination: data.destination ? { ...data.destination, account: data.account } : { account: data.account },\n hints: sheetHints(slug, data),\n };\n}\n\nregisterSchema({\n command: \"flows.connect\",\n description:\n \"Fill a Form's step or destination yourself — no card for the user. Steps: Calendly, SavvyCal, GoHighLevel calendar/form (`--node <id> --resource <id>`). Destinations: HubSpot form (`--hubspot-form <id>`), Google Sheets (`--resource <spreadsheetId>` or `--new-sheet <title> --columns …`), Pipedrive and GoHighLevel contact (no resource: the connected account is the destination). `--same-as <slug>:<id>` copies what another Form already has. `--all --type <kind>` fills every unwired one of that kind at once. Ids come from `baker flows options <kind>`. Fall back to request_flow_input only when nothing is connected, the sheet was never chosen, or several resources plausibly match.\",\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n node: {\n type: \"string\",\n description: \"Step id to fill (calendly, savvycal, highlevel, highlevelForm)\",\n required: false,\n },\n \"side-effect\": { type: \"string\", description: \"Side-effect id to wire\", required: false },\n all: { type: \"boolean\", description: \"Every unwired one of --type in this Form\", required: false, default: false },\n type: { type: \"string\", description: \"The kind --all wires (e.g. googleSpreadsheet, calendly)\", required: false },\n resource: { type: \"string\", description: \"Option id from `baker flows options <kind>`\", required: false },\n \"hubspot-form\": {\n type: \"string\",\n description: \"HubSpot form id (from `baker hubspot forms list`)\",\n required: false,\n },\n \"new-sheet\": {\n type: \"string\",\n description: \"Create a Google spreadsheet with this title and wire it\",\n required: false,\n },\n columns: {\n type: \"string\",\n description: \"With --new-sheet: header row, comma-separated, from column A\",\n required: false,\n },\n tab: { type: \"string\", description: \"Google Sheets tab to append to (default: the first)\", required: false },\n \"same-as\": {\n type: \"string\",\n description: \"<slug>:<id> — copy another Form's wired destination or picked step\",\n required: false,\n },\n account: {\n type: \"string\",\n description: \"Connection id, when more than one account of the platform is connected\",\n required: false,\n },\n },\n});\n\nexport const connectCommand = defineCommand({\n meta: {\n name: \"connect\",\n description:\n 'Fill a step or destination yourself. Start here: baker flows options calendly, then baker flows connect contact --node book --resource <id>. Sheets: --side-effect se-gsheet-1 --new-sheet \"Leads\" --columns \"Name,Email\". Same as another Form: --same-as madrid:se-gsheet-1',\n },\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n node: { type: \"string\", description: \"Step id to fill\" },\n \"side-effect\": { type: \"string\", description: \"Side-effect id to wire\" },\n all: { type: \"boolean\", description: \"Every unwired one of --type\" },\n type: { type: \"string\", description: \"The kind --all wires\" },\n resource: { type: \"string\", description: \"Option id from baker flows options <kind>\" },\n \"hubspot-form\": { type: \"string\", description: \"HubSpot form id (from baker hubspot forms list)\" },\n \"new-sheet\": { type: \"string\", description: \"Create a spreadsheet with this title\" },\n columns: { type: \"string\", description: \"Header row for --new-sheet, comma-separated\" },\n tab: { type: \"string\", description: \"Sheet tab (default: the first)\" },\n \"same-as\": { type: \"string\", description: \"<slug>:<id> to copy\" },\n account: { type: \"string\", description: \"Connection id when several are connected\" },\n },\n run: async ({ args }) => {\n const slug = String(args.slug);\n const target = targetsFor(readFlowTree(slug), args);\n\n const tree = readFlowTree(slug);\n const result =\n typeof args[\"same-as\"] === \"string\"\n ? sameAs(tree, target, args[\"same-as\"])\n : typeof args[\"hubspot-form\"] === \"string\"\n ? await fromHubspot(tree, target, args[\"hubspot-form\"], slug)\n : await fromPlatform(tree, target, args, slug);\n writeFlowTree(slug, tree);\n\n writeJson({\n ok: true,\n data: {\n slug,\n kind: target.kind,\n [target.on === \"node\" ? \"steps\" : \"sideEffects\"]: result.wired,\n destination: result.destination,\n connected: true,\n },\n hints: [...result.hints, \"Staged like any other edit in this chat: it goes live when the chat is published.\"],\n });\n },\n});\n"],"mappings":"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","names":["wired"]}
@@ -251,11 +251,12 @@ function logoInstruction(p, ctx) {
251
251
  const plate = ctx.plates.length > 0 ? ctx.plates.map((u) => `${u.name} (${u.hex})`).join(" or ") : "white or black";
252
252
  const where = `at least a fifth of the frame wide, on an area it contrasts with or a small ${plate} plate`;
253
253
  if (ctx.short)
254
- return "the brand's real logo. Reproduce it once, exactly as drawn, at least a fifth of the frame wide.";
254
+ return "the brand's real logo. Reproduce it once, apart from the product, exactly as drawn, at least a fifth of the frame wide.";
255
255
  return ctx.flowing ? `the brand's real logo. Reproduce it once, apart from the product${at}, exactly as drawn in Image ${p.index}, ${where}.` : `the brand's real logo. Reproduce it once, never on the product${at}, exactly as drawn, ${where}.`;
256
256
  }
257
- function identityInstruction(p, what, keep, flowing) {
257
+ function identityInstruction(p, what, keep, flowing, short) {
258
258
  if (p.spec && personOrAnimal(p.spec) === "person") {
259
+ if (short) return `${what} Same face, hair, skin tone and build; one person, once.${keep}`;
259
260
  return flowing ? `${what} Keep their facial features, hair, skin tone and build exactly the same as in Image ${p.index}, and show them once; several views in that picture are all this one person.${keep}` : `${what} Keep this exact face, hair, skin tone and build, and show them once; several views in the picture are all this one person.${keep}`;
260
261
  }
261
262
  return flowing ? `${what} Keep its face, markings and colours exactly the same as in Image ${p.index}, and show it once; several views in that picture are all this one animal.${keep}` : `${what} Keep its exact face, markings and colours, and show it once; several views in the picture are all this one animal.${keep}`;
@@ -271,9 +272,9 @@ function pictureInstruction(p, ctx) {
271
272
  const keep = p.spec?.keep ? ` Keep ${plain(p.spec.keep, ctx.clean)}.` : "";
272
273
  switch (p.role) {
273
274
  case "base":
274
- return ctx.job === "fix" ? "the current version of this ad, to edit." : ctx.job === "series" ? "the finished ad this series repeats, to copy exactly with new words." : "the finished ad, to re-lay for this shape.";
275
+ return "screen content takes priority over other references unless explicitly changed.";
275
276
  case "identity":
276
- return identityInstruction(p, what, keep, ctx.flowing);
277
+ return identityInstruction(p, what, keep, ctx.flowing, ctx.short);
277
278
  // The user saw one label come back two ways (E4 gallery, BENCH.md § "E1 v2"): the label is the product's.
278
279
  case "product":
279
280
  return ctx.flowing ? `${what} Keep it and its label, text and design, exactly as in Image ${p.index}.${keep}` : `${what} Reproduce this exact product and its label, text and design unchanged.${keep}`;
@@ -655,7 +656,8 @@ function deliverableSection(c) {
655
656
  return c.flowing ? `Image 1 is a finished ad of this series. Make the next ad of the same series${forBrand}: ${change} Keep everything else in Image 1 exactly the same, preserving its picture, layout, background, shapes, colours, lettering style and logo, each word in the place and style of the one it replaces.` : `Edit: Image 1 is a finished ad of this series. Make the next ad of the same series${forBrand}. ${capitalize(change)} Keep everything else exactly as it is in Image 1: the picture, the layout, the background, the shapes, the colours, the lettering style and the logo, each new line in the place, size and style of the line it replaces.`;
656
657
  }
657
658
  if (c.job === "relay") {
658
- return c.flowing ? `Image 1 is a finished ad. Recompose this same ad as a ${noun}${forBrand}: the same picture, colours, lettering and every word, rearranged for the new shape, with more of the scene revealed at the edges.` : `Deliverable: the same ad as Image 1, re-laid as a finished ${noun}${forBrand}. Keep the same picture, colours, lettering and every word, rearranged for the new shape; show more of the scene rather than cropping it.`;
659
+ const ui = "Keep any depicted app interface exact, with marketing overlays visibly separate from its native controls.";
660
+ return c.flowing ? `Image 1 is a finished ad. Adapt this same ad to a ${noun}${forBrand}: move and scale its existing elements, keeping its picture, background, colours, lettering and every word. Extend only its existing background where needed. ${ui}` : `Deliverable: the same ad as Image 1, re-laid as a finished ${noun}${forBrand}. Move and scale its existing elements; keep its picture, background, colours, lettering and every word. Extend only its existing background where needed. ${ui}`;
659
661
  }
660
662
  const lead = c.flowing ? "Create a finished" : "Deliverable: a finished";
661
663
  return `${lead} ${noun}${forBrand}${audienceText(c.viewer, c.level, c.clean)}.${marketText(c)}${recognitionText(c)}${ideaText(c.spec, c.level, c.clean)}${conceptText(c)}${deviceText(c)}`;
@@ -697,10 +699,11 @@ function conceptText(c) {
697
699
  const layers = [w.disguise, w.voice, w.trigger, w.attention, w.logic].flatMap(
698
700
  (t) => t?.trim() ? [plain(t, c.clean)] : []
699
701
  );
700
- const idea = layers.length > 0 && c.level < LAST_RESORT_LEVEL ? sentence(layers.join("; ")) : "";
702
+ const continuing = c.job !== "generate";
703
+ const idea = layers.length > 0 && (continuing || c.level < LAST_RESORT_LEVEL) ? sentence(layers.join("; ")) : "";
701
704
  const keep = mustKeep(c);
702
705
  const keepLine = keep.length > 0 ? sentence(keep.join("; ")) : "";
703
- const carry = kept.carry && c.level < LAST_RESORT_LEVEL ? CARRIED[kept.carry] : "";
706
+ const carry = kept.carry && (continuing || c.level < LAST_RESORT_LEVEL) ? CARRIED[kept.carry] : "";
704
707
  const parts = [
705
708
  carry,
706
709
  idea ? `The idea: ${idea}` : "",
@@ -710,6 +713,12 @@ function conceptText(c) {
710
713
  return parts.flatMap((part) => part ? [`${separator}${part}`] : []).join("");
711
714
  }
712
715
  function deviceText(c) {
716
+ if (c.job !== "generate") {
717
+ const mechanisms = c.spec.mechanism.map(
718
+ (m) => [plain(m.device, c.clean), m.why_it_works ? plain(m.why_it_works, c.clean) : ""].filter(Boolean).join(": ")
719
+ );
720
+ return mechanisms.length > 0 ? `Keep the persuasion mechanism: ${sentence(mechanisms.join("; "))}` : "";
721
+ }
713
722
  const device = c.spec.mechanism[0]?.device;
714
723
  if (!device || c.level >= 1) return "";
715
724
  const text = plain(device, c.clean);
@@ -818,12 +827,22 @@ var SCREENS = {
818
827
  var SCREENSHOT = /\b(screenshots?|screen ?grabs?|screens?)\b/i;
819
828
  var screenshotOf = (pics) => pics.find((p) => p.spec && p.role !== "identity" && SCREENSHOT.test(p.spec.what));
820
829
  function screensText(c) {
830
+ const laptop = /\b(laptops?|notebook computers?|macbooks?)\b/i.test(c.spec.scene.description);
831
+ const device = laptop ? "laptop" : "phone";
821
832
  const shot = screenshotOf(c.pics);
822
833
  if (shot) {
823
- return c.flowing ? ` Every screen shows Image ${shot.index} exactly as it is, on a real phone, photographed.` : `
824
- Screens: every screen shows Image ${shot.index} exactly as it is, on a real phone, photographed.`;
834
+ return c.flowing ? ` Every screen shows Image ${shot.index} exactly as it is, on a real ${device}, photographed.` : `
835
+ Screens: every screen shows Image ${shot.index} exactly as it is, on a real ${device}, photographed.`;
836
+ }
837
+ if (!showsScreen(c.spec)) return "";
838
+ if (c.level >= EXTRAS_SHORT_LEVEL)
839
+ return c.flowing ? ` Every ${device} or app screen looks like a real ${device} photographed or a real screenshot.` : `
840
+ Screens: a real ${device} photographed, or a real screenshot.`;
841
+ if (laptop) {
842
+ const screen = "a real laptop photographed, or a real screenshot; display, keyboard and hinge in consistent perspective; any words on it from the quoted lines.";
843
+ return c.flowing ? ` Every laptop screen looks like ${screen}` : `
844
+ Screens: ${screen}`;
825
845
  }
826
- if (!showsScreen(c.spec) || c.level >= EXTRAS_SHORT_LEVEL) return "";
827
846
  return c.flowing ? ` ${SCREENS.flowing}` : `
828
847
  ${SCREENS.labelled}`;
829
848
  }
@@ -941,8 +960,11 @@ function constraintsSection(c) {
941
960
  ...logo ? [`Image ${logo.index}`] : [],
942
961
  ...thirdPartyNames(c.spec) ? [thirdPartyNames(c.spec)] : []
943
962
  ];
963
+ const repeatedWordLimit = n > 0 && c.level >= LAST_RESORT_LEVEL;
964
+ const wordLimit = n > 0 ? `any words other than the ${n} quoted lines` : "any words or letters";
944
965
  const avoid = [
945
- n > 0 ? `any words other than the ${n} quoted lines` : "any words or letters",
966
+ // At the final trim level the Text section already states the complete word allow-list.
967
+ ...repeatedWordLimit ? [] : [wordLimit],
946
968
  // A Toyota badge appeared on a car-loan ad's SUV (BENCH.md § "Final"): the allow-list covers the scene's things too.
947
969
  // The words and the identity's "show them once" are said above; brief v2 spends the words on the logo and the button.
948
970
  `${logos.length > 0 ? `any logo, badge, icon, seal or sticker other than ${logos.join(" and ")}` : "any logo or wordmark, badge, icon, seal or sticker"}, on vehicles, packaging and clothing too`,
@@ -954,8 +976,14 @@ function constraintsSection(c) {
954
976
  return `Avoid: ${avoid.join("; ")}.`;
955
977
  }
956
978
  function assemble(c) {
979
+ const continuity = c.job !== "generate" ? (conceptText(c) || deviceText(c)).trim() : "";
957
980
  return [
958
981
  deliverableSection(c),
982
+ "Real-world anatomy, devices, scale, perspective and supports stay plausible. Scale proportionally; reflow text; preserve letter shapes.",
983
+ // A continuation needs the original idea as well as the previous picture. Keep this
984
+ // separate: the per-format adapter replaces the deliverable paragraph.
985
+ ...continuity ? [continuity] : [],
986
+ ...c.job === "fix" || c.job === "series" ? ["Keep any depicted app interface exact, with marketing overlays visibly separate from its native controls."] : [],
959
987
  ...picturesSection(c),
960
988
  ...sceneSection(c),
961
989
  textSection(c),
@@ -1208,12 +1236,13 @@ function adaptNoun(plan) {
1208
1236
  function adaptDeliverable(plan, spec, flowing, ground, short) {
1209
1237
  const brand = spec.brand?.name;
1210
1238
  const noun = `${adaptNoun(plan)}${brand ? ` for ${brand}` : ""}`;
1239
+ const background = "Extend only the background at Image 1's outer edges; textures stay on their existing surfaces.";
1211
1240
  if (short && !flowing) {
1212
1241
  const keep = [
1213
1242
  ...showsPeople2(spec) ? ["each person the same face and clothes"] : [],
1214
1243
  ...isBeforeAfter(spec) ? ["the two states as different"] : []
1215
1244
  ];
1216
- return `Deliverable: the ad in Image 1, re-laid out as a finished ${noun}: the same message, words, people, product, logo, colours and typeface, the scene filling the frame edge to edge, never Image 1 shrunk onto a background. Every person, product and line appears whole and once, as in Image 1${keep.length > 0 ? `, ${keep.join(", ")}` : ""}; add nothing new.`;
1245
+ return `Deliverable: adapt Image 1 to a ${noun}. Move and scale existing elements first; reflow the contents for this frame, keeping its words, people, product, logo, colours and typeface. ${background} Keep any depicted app interface exact, with marketing overlays visibly separate from its native controls. Every person, product and line appears whole and once${keep.length > 0 ? `, ${keep.join(", ")}` : ""}; add nothing new; never Image 1 shrunk onto a background.`;
1217
1246
  }
1218
1247
  const cast = [
1219
1248
  SAME_CAST,
@@ -1221,13 +1250,14 @@ function adaptDeliverable(plan, spec, flowing, ground, short) {
1221
1250
  ...isBeforeAfter(spec) ? [SAME_CHANGE] : [],
1222
1251
  ...ground ? [GROUND_ONLY] : []
1223
1252
  ].join(" ");
1224
- return flowing ? `Image 1 is a finished ad. Re-lay out this exact ad as a ${noun}: the same message, words, people, product, logo, colours and typeface in a new layout for this frame, the scene filling it edge to edge rather than Image 1 set on a background as a card, panel or square. ${cast}` : `Deliverable: the ad in Image 1, re-laid out as a finished ${noun}: the same message, words, people, product, logo, colours and typeface in a new layout for this frame, the scene filling it edge to edge, never Image 1 shrunk onto a background or set as a card, panel or square. ${cast}`;
1253
+ const continuity = `Move and scale existing elements first; reflow the contents for this frame instead of pasting a smaller copy on a backdrop. Keep the visual hierarchy. ${background} Keep any depicted app interface exact, with marketing overlays visibly separate from its native controls.`;
1254
+ return flowing ? `Image 1 is a finished ad. Adapt this same ad to a ${noun}, keeping its message, words, people, product, logo, colours and typeface. ${continuity} ${cast}` : `Deliverable: the ad in Image 1, re-laid out as a finished ${noun}, keeping its message, words, people, product, logo, colours and typeface; never Image 1 shrunk onto a background. ${continuity} ${cast}`;
1225
1255
  }
1226
1256
  var SAME_CAST = "Every person, product and line appears whole and once, the same individuals as in Image 1; add no person, animal, product or object that Image 1 does not show.";
1227
1257
  var SAME_PERSON = "Each person is the same person as in Image 1: same face, same hair, same clothes.";
1228
1258
  var SAME_CHANGE = "The two states it compares stay as clearly different as in Image 1.";
1229
1259
  var showsPeople2 = (spec) => spec.references.some((r) => r.id.startsWith("PERSON_")) || spec.scene.look !== "illustration" && PEOPLE.test(`${spec.scene.description} ${spec.scene.layout ?? ""}`);
1230
- var GROUND_ONLY = "Image 1 shows no people and no product, so the room this frame adds carries more of Image 1's own background and the brand's colours, never a new scene.";
1260
+ var GROUND_ONLY = "Image 1 shows no people and no product, so the room this frame adds carries only Image 1's own background and the brand's colours already present there, never a new scene.";
1231
1261
  function wordsOnly(spec) {
1232
1262
  return spec.references.length === 0 && spec.scene.look !== "photo" && !PEOPLE.test(`${spec.scene.description} ${spec.scene.layout ?? ""}`);
1233
1263
  }
@@ -1248,7 +1278,7 @@ function scaleText(plan, spec, flowing, zoned, short) {
1248
1278
  var COVERED_HEADROOM = { top: 0.06, bottom: 0.08, side: 0.02 };
1249
1279
  var NO_HEADROOM = { top: 0, bottom: 0, side: 0 };
1250
1280
  var pct = (share) => `${Math.round(share * 100)}%`;
1251
- function zonesText(plan, flowing, ground, short) {
1281
+ function zonesText(plan, flowing, short) {
1252
1282
  const covered = staticSafeArea(plan.format, plan.placements).placement !== "feed";
1253
1283
  const room = isTall(plan) && covered ? COVERED_HEADROOM : NO_HEADROOM;
1254
1284
  const top = plan.safe.top + room.top;
@@ -1256,14 +1286,14 @@ function zonesText(plan, flowing, ground, short) {
1256
1286
  const side = Math.max(plan.safe.left, plan.safe.right) + room.side;
1257
1287
  const band = `from ${pct(top)} to ${pct(1 - bottom)} of the height, at least ${pct(side)} in from each side`;
1258
1288
  if (short && !flowing) {
1259
- const around = isTall(plan) && covered ? "only the ad's own picture, larger, never a flat colour, a panel or a square" : "only the ad's own picture";
1289
+ const around = "Image 1's existing background treatment, including any intentional flat colour";
1260
1290
  return `Zones: every word, the logo and the button sit ${band}; around them, ${around}.`;
1261
1291
  }
1262
1292
  if (!(isTall(plan) && covered)) {
1263
1293
  return flowing ? `The logo, every line and the button sit ${band}; around them the frame shows only the ad's own picture.` : `Zones: the logo, every line and the button sit ${band}; around them, only the ad's own picture.`;
1264
1294
  }
1265
- const picture = ground ? "Image 1's background with its shapes and graphics enlarged in the brand's colours" : "Image 1's people, product and setting extended";
1266
- return flowing ? `The words' band runs ${band}, holding the logo, every line and the button. Above and below it the app's interface covers the frame, so there it shows only the ad's own picture, larger: ${picture}, edge to edge.` : `Zones: the app's buttons and captions cover the top and the bottom of this frame, hiding any word there. The logo, every line and the button sit in one band, ${band}: the headline starts below the top fifth, and the button ends directly under the last line, never at the bottom edge where a feed ad puts it. Above and below it, where the app's interface covers the frame, only the ad's own picture, larger: ${picture}, never a flat empty colour, a panel or a square on a background.`;
1295
+ const picture = "Image 1's existing background treatment, including any intentional flat colour";
1296
+ return flowing ? `The words' band runs ${band}, holding the logo, every line and the button. Above and below it the placement's interface covers the frame: continue only ${picture}.` : `Zones: the app's buttons and captions cover the top and the bottom of this frame, hiding any word there. The logo, every line and the button sit in one band, ${band}: the headline starts below the top fifth, and the button ends directly under the last line, never at the bottom edge where a feed ad puts it. Above and below it, where the placement's interface covers the frame, continue only ${picture}.`;
1267
1297
  }
1268
1298
  function adaptBrief(spec, profile, opts) {
1269
1299
  const { plan, images } = opts;
@@ -1298,14 +1328,11 @@ function adaptBrief(spec, profile, opts) {
1298
1328
  const first = spec.copy[0] ? quotedCopy(spec.copy[0].text) : void 0;
1299
1329
  const textAt = first ? paragraphs.findIndex((p) => p.includes(first)) : -1;
1300
1330
  if (textAt >= 0) {
1301
- const added = [
1302
- ...zoned ? [zonesText(plan, flowing, ground, short)] : [],
1303
- scaleText(plan, spec, flowing, zoned, short)
1304
- ];
1331
+ const added = [...zoned ? [zonesText(plan, flowing, short)] : [], scaleText(plan, spec, flowing, zoned, short)];
1305
1332
  paragraphs.splice(textAt + 1, 0, ...added);
1306
1333
  } else if (zoned) {
1307
1334
  const layoutAt = paragraphs.findIndex((p) => p.startsWith("Layout:"));
1308
- paragraphs.splice(layoutAt > 0 ? layoutAt : 1, 0, zonesText(plan, flowing, ground, short));
1335
+ paragraphs.splice(layoutAt > 0 ? layoutAt : 1, 0, zonesText(plan, flowing, short));
1309
1336
  }
1310
1337
  return paragraphs.join("\n\n");
1311
1338
  };
@@ -4380,4 +4407,4 @@ export {
4380
4407
  canSpellNumbers,
4381
4408
  spellNumber
4382
4409
  };
4383
- //# sourceMappingURL=chunk-FPOGPFAG.js.map
4410
+ //# sourceMappingURL=chunk-EBWBG6YV.js.map