@koda-sl/baker-cli 0.447.0-dev.f5788a631 → 0.448.0-dev.0d67e41b9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/dist/{account-PCEZQUK7.js → account-DTHGTZCN.js} +6 -6
- package/dist/{accounts-5AXLYU7P.js → accounts-5RLG6BBA.js} +5 -5
- package/dist/{accounts-OSXDZZLY.js → accounts-6LSBBXKA.js} +7 -7
- package/dist/{actions-HM4VVTGW.js → actions-WH5C6Q7I.js} +18 -18
- package/dist/{add-4J2EF54O.js → add-BZ4QPLK4.js} +4 -4
- package/dist/{add-VZAY57M4.js → add-TRSKOIO6.js} +32 -7
- package/dist/add-TRSKOIO6.js.map +1 -0
- package/dist/{ads-NUME2UXH.js → ads-6UG66KA5.js} +4 -4
- package/dist/{advertisers-WSNHNCBQ.js → advertisers-OABQDELT.js} +12 -8
- package/dist/advertisers-OABQDELT.js.map +1 -0
- package/dist/{analytics-QTR2ZITZ.js → analytics-3YAWQF5K.js} +8 -8
- package/dist/{analytics-PHU7H5VY.js → analytics-BCZGSSXP.js} +5 -5
- package/dist/{animate-3Z7HXOLE.js → animate-AIZ3GS4J.js} +4 -4
- package/dist/{assign-IIAVNATI.js → assign-O6QNAZD5.js} +5 -5
- package/dist/{audience-size-2L7XMYJL.js → audience-size-CXPWERR3.js} +5 -5
- package/dist/{audit-ZCUFJLUG.js → audit-MNOQK3U4.js} +5 -5
- package/dist/{autocomplete-6PYFCOMX.js → autocomplete-TRCMPNW4.js} +10 -6
- package/dist/{autocomplete-6PYFCOMX.js.map → autocomplete-TRCMPNW4.js.map} +1 -1
- package/dist/{avatars-OEK3FYKK.js → avatars-P3WX5TQP.js} +4 -4
- package/dist/{bid-pricing-FDW3IY6G.js → bid-pricing-6XXSM7C2.js} +5 -5
- package/dist/{brand-OXYFSNA5.js → brand-LXU7YNCF.js} +2 -2
- package/dist/{brief-TBSXPEXI.js → brief-Y4F37TH5.js} +21 -22
- package/dist/{brief-TBSXPEXI.js.map → brief-Y4F37TH5.js.map} +1 -1
- package/dist/{campaign-groups-5GCFQT2W.js → campaign-groups-CEAM3WRO.js} +10 -10
- package/dist/{campaign-writes-3SJQSCUK.js → campaign-writes-D6BJAULL.js} +5 -5
- package/dist/{campaigns-SYEOFKFV.js → campaigns-CXOKBCPS.js} +13 -13
- package/dist/{campaigns-7QDDWZ76.js → campaigns-V3SWBM4E.js} +5 -5
- package/dist/{canvas-B6DPRQGN.js → canvas-VH3Q26TK.js} +14 -14
- package/dist/{capabilities-GVHPHH2G.js → capabilities-NZPSSS6T.js} +5 -5
- package/dist/{catalog-TNNG66MH.js → catalog-GWN3WT7J.js} +6 -7
- package/dist/{catalog-TNNG66MH.js.map → catalog-GWN3WT7J.js.map} +1 -1
- package/dist/{changes-6QBJMGJC.js → changes-TP7ZZHB3.js} +4 -4
- package/dist/{chats-54CWM7DL.js → chats-GN3PBFX4.js} +5 -5
- package/dist/{chunk-SKT3SAHG.js → chunk-2BKVVCCV.js} +2 -2
- package/dist/{chunk-YUPRCOEN.js → chunk-2GTYAHDN.js} +2 -2
- package/dist/{chunk-E5IFTZJ3.js → chunk-3OFVFHKT.js} +2 -2
- package/dist/{chunk-5EEDEVOR.js → chunk-4QEY2L6U.js} +2 -2
- package/dist/{chunk-7JUUKYKG.js → chunk-4Z7DEN75.js} +2 -2
- package/dist/{chunk-RCQJHKK5.js → chunk-6Y7SIP2D.js} +33 -24
- package/dist/chunk-6Y7SIP2D.js.map +1 -0
- package/dist/{chunk-GTK46DE3.js → chunk-7ED5TAFP.js} +3 -3
- package/dist/{chunk-654U6NU6.js → chunk-BNCW67EM.js} +2 -2
- package/dist/{chunk-OBDAYP2P.js → chunk-CAMX6OHF.js} +30 -3
- package/dist/chunk-CAMX6OHF.js.map +1 -0
- package/dist/{chunk-J5IU4OX2.js → chunk-CFHIW5QZ.js} +4 -4
- package/dist/{chunk-V2X3KK52.js → chunk-D6744YSX.js} +26 -6
- package/dist/chunk-D6744YSX.js.map +1 -0
- package/dist/{chunk-FGH4Z5K5.js → chunk-DQMZXK27.js} +2 -2
- package/dist/{chunk-XV6XCFF7.js → chunk-E4NCRGY3.js} +2 -2
- package/dist/{chunk-IH4UQ2OK.js → chunk-EAEOPERX.js} +18 -19
- package/dist/chunk-EAEOPERX.js.map +1 -0
- package/dist/{chunk-7FVWIZHM.js → chunk-ESB5DLIP.js} +2 -2
- package/dist/{chunk-NK2UFFVH.js → chunk-FVF5SXTZ.js} +2 -2
- package/dist/{chunk-KWAOTV7F.js → chunk-GX6VAHY7.js} +2 -2
- package/dist/{chunk-6TCDQSM7.js → chunk-GYU7BWEN.js} +3 -3
- package/dist/{chunk-HYCIBVDW.js → chunk-HZUDRKGR.js} +2 -2
- package/dist/{chunk-FYQPB2SS.js → chunk-IGQZ5U3C.js} +6 -6
- package/dist/{chunk-OAQPHP6V.js → chunk-IYU4X5A7.js} +3 -3
- package/dist/{chunk-HYUUH4BE.js → chunk-JVLAV62J.js} +27 -29
- package/dist/{chunk-HYUUH4BE.js.map → chunk-JVLAV62J.js.map} +1 -1
- package/dist/{chunk-6HJAHLLA.js → chunk-K6WVV74H.js} +96 -4
- package/dist/chunk-K6WVV74H.js.map +1 -0
- package/dist/{chunk-EPMN4BK7.js → chunk-L5J3S6B6.js} +47 -4
- package/dist/chunk-L5J3S6B6.js.map +1 -0
- package/dist/{chunk-2SCPDSFN.js → chunk-LIQ4SQ2T.js} +2 -2
- package/dist/{chunk-KMEMA7AZ.js → chunk-LLOOWRBB.js} +2 -2
- package/dist/{chunk-NSA6HRG6.js → chunk-ND5MJ3AA.js} +2 -2
- package/dist/{chunk-XML7AJM3.js → chunk-NE4F3FHN.js} +1 -1
- package/dist/chunk-NE4F3FHN.js.map +1 -0
- package/dist/{chunk-PIWMNKWI.js → chunk-NECTN6N7.js} +45 -3
- package/dist/{chunk-PIWMNKWI.js.map → chunk-NECTN6N7.js.map} +1 -1
- package/dist/{chunk-ACFWVULZ.js → chunk-NIJSXVFT.js} +3 -3
- package/dist/{chunk-H2QNBOPS.js → chunk-NJXNU2G6.js} +3 -3
- package/dist/{chunk-XDNEG2H6.js → chunk-OKJWBB2K.js} +11 -11
- package/dist/{chunk-XDNEG2H6.js.map → chunk-OKJWBB2K.js.map} +1 -1
- package/dist/{chunk-AO5UQQLJ.js → chunk-ORO7VAXB.js} +2 -2
- package/dist/{chunk-V5WSJP5A.js → chunk-OUTF5JFG.js} +3 -3
- package/dist/{chunk-XG3XCHN6.js → chunk-P5T7OZKV.js} +2 -2
- package/dist/{chunk-DE6ANJLU.js → chunk-PTCIM35Y.js} +2 -2
- package/dist/{chunk-VJZHVOA4.js → chunk-PVUZWHNQ.js} +7 -7
- package/dist/{chunk-CLMM6P6B.js → chunk-PZXCWSKV.js} +85 -6
- package/dist/chunk-PZXCWSKV.js.map +1 -0
- package/dist/{chunk-CKU4WYTF.js → chunk-QVJDPOEB.js} +2 -2
- package/dist/{chunk-KV5BCSUR.js → chunk-R5RIH3N5.js} +2 -2
- package/dist/{chunk-RB5DB3WN.js → chunk-RB5CVIK6.js} +2 -2
- package/dist/{chunk-EAHP7L2R.js → chunk-RZT263H7.js} +2 -2
- package/dist/{chunk-WYCVJIHD.js → chunk-TEINLN64.js} +13 -2
- package/dist/{chunk-WYCVJIHD.js.map → chunk-TEINLN64.js.map} +1 -1
- package/dist/{chunk-HDWKLFF5.js → chunk-TUB34FVS.js} +4 -4
- package/dist/{chunk-4SJDDGPV.js → chunk-TX7LZWZD.js} +3 -3
- package/dist/{chunk-6YYEBLYI.js → chunk-V7CTQOHG.js} +4 -4
- package/dist/{chunk-IKYNOT57.js → chunk-VNUNE5AB.js} +36 -7
- package/dist/chunk-VNUNE5AB.js.map +1 -0
- package/dist/{chunk-TBEUMOEL.js → chunk-WNFIJAUO.js} +5 -2
- package/dist/chunk-WNFIJAUO.js.map +1 -0
- package/dist/{chunk-EVYXTT7V.js → chunk-XCM6XWOB.js} +2 -2
- package/dist/{chunk-ZNBDKK4Y.js → chunk-XFGAUP5B.js} +2 -2
- package/dist/{chunk-4SNOWJV7.js → chunk-XQIKDODN.js} +2 -2
- package/dist/{chunk-WRIC2RPQ.js → chunk-XTRAI6CL.js} +2 -2
- package/dist/{chunk-3X3446TG.js → chunk-XVOI4BIS.js} +2 -2
- package/dist/{chunk-NTPXZU3V.js → chunk-ZDNOCKKY.js} +12 -3
- package/dist/{chunk-NTPXZU3V.js.map → chunk-ZDNOCKKY.js.map} +1 -1
- package/dist/{chunk-F46KAIBS.js → chunk-ZGTCZ6H4.js} +3 -3
- package/dist/{chunk-5VC6IK7B.js → chunk-ZJLETAOO.js} +106 -12
- package/dist/chunk-ZJLETAOO.js.map +1 -0
- package/dist/{claim-CIASHKMC.js → claim-25JJM4AG.js} +5 -5
- package/dist/cli.js +29 -29
- package/dist/{companies-ECVMO24S.js → companies-VR5M5PAN.js} +5 -5
- package/dist/{complete-32CPBFIG.js → complete-DRMOTC2W.js} +5 -5
- package/dist/{connect-OJSOM6PY.js → connect-WUDJR2GH.js} +12 -8
- package/dist/{conversation-7FHN5ESN.js → conversation-K6LYF2ZP.js} +5 -5
- package/dist/{conversion-upload-command-BBUXLFT3.js → conversion-upload-command-AUF3LNTH.js} +4 -4
- package/dist/{conversions-7YJDNZ7Y.js → conversions-GF32XOWY.js} +9 -9
- package/dist/{countries-FYHM3IMJ.js → countries-ESAKTQAE.js} +2 -2
- package/dist/{create-OYT76OMJ.js → create-2D7AIFJI.js} +5 -5
- package/dist/{create-ZGRL7YCV.js → create-4TFAD6HY.js} +5 -5
- package/dist/{create-FE5QLW7V.js → create-IXYXYLLE.js} +4 -4
- package/dist/{create-2TBDXHAM.js → create-PKJVFJMO.js} +5 -5
- package/dist/{creatives-IUB57I3T.js → creatives-OHCFHRZ5.js} +10 -10
- package/dist/{creatives-5MUTX4DQ.js → creatives-QLSZFOMB.js} +10 -10
- package/dist/{credentials-AETHKP5T.js → credentials-WSLR5VU4.js} +5 -5
- package/dist/{critique-T7HJ42D4.js → critique-5PCQ2CJH.js} +5 -5
- package/dist/{critique-C53EJDPA.js → critique-WDO6SKK2.js} +13 -14
- package/dist/{critique-C53EJDPA.js.map → critique-WDO6SKK2.js.map} +1 -1
- package/dist/{crm-KH6XX2TT.js → crm-HNUOHXAN.js} +6 -6
- package/dist/{crm-JP4UOPMN.js → crm-SNIUADNK.js} +6 -6
- package/dist/{currency-DJDVIR3C.js → currency-XCGKQ7FE.js} +4 -4
- package/dist/{customers-7I7UY5PS.js → customers-72L2KZHO.js} +9 -9
- package/dist/{delete-6IOUDEWY.js → delete-EVGM5B36.js} +5 -5
- package/dist/{delete-ODFKNHAI.js → delete-PA2GY5EC.js} +5 -5
- package/dist/{delete-RAETUVO2.js → delete-YNNFTFYV.js} +4 -4
- package/dist/{demographics-2FTDKPBD.js → demographics-SYS2E7QC.js} +5 -5
- package/dist/{discard-ZX5TLFYH.js → discard-JS2YJUIM.js} +5 -5
- package/dist/{discover-M3ZKKFEL.js → discover-BJPZNXUQ.js} +4 -4
- package/dist/{domain-TH7KIC2T.js → domain-XKKH5NCL.js} +5 -5
- package/dist/{draft-YHUIFDDR.js → draft-4AO4YH3V.js} +6 -6
- package/dist/{draft-SH25PKST.js → draft-5YAYCEYY.js} +4 -4
- package/dist/{draft-S2FSQOJN.js → draft-GCUXNPVH.js} +5 -5
- package/dist/{draft-CRE2Y24G.js → draft-WWWKSEEE.js} +5 -5
- package/dist/engine/index.js +5 -6
- package/dist/{facets-6B2U4BSM.js → facets-NVBX5WDT.js} +5 -5
- package/dist/{feedback-QGSAJJVC.js → feedback-OGAPR45R.js} +3 -3
- package/dist/feedback-OGAPR45R.js.map +1 -0
- package/dist/{feedback-record-NUAJ6UBL.js → feedback-record-GVXGDY5Y.js} +15 -16
- package/dist/feedback-record-GVXGDY5Y.js.map +1 -0
- package/dist/{fetch-UTTJAOLC.js → fetch-U4TJIHZU.js} +8 -3
- package/dist/{fetch-UTTJAOLC.js.map → fetch-U4TJIHZU.js.map} +1 -1
- package/dist/{fit-FJ5CLQS4.js → fit-BOQL6OK3.js} +7 -5
- package/dist/{flows-OGGSWWGT.js → flows-XVZJ6GOI.js} +39 -19
- package/dist/flows-XVZJ6GOI.js.map +1 -0
- package/dist/{follow-DUIEGDVK.js → follow-FN7LV3WV.js} +2 -2
- package/dist/{follow-competitors-IT5ZVJPE.js → follow-competitors-MKXFHLXB.js} +2 -2
- package/dist/{fonts-GCJRLEGD.js → fonts-64T6KRZS.js} +7 -7
- package/dist/{forecast-2AGTFMXH.js → forecast-YIIGTHRM.js} +5 -5
- package/dist/{funnel-7U55LNJ4.js → funnel-XHDCXXQ5.js} +6 -6
- package/dist/{generate-DMQUS665.js → generate-3XYYITU6.js} +3 -3
- package/dist/{get-N7FR6NFX.js → get-6RQFDAIN.js} +8 -6
- package/dist/get-6RQFDAIN.js.map +1 -0
- package/dist/{get-IRJIHOQK.js → get-XJ3AZX35.js} +5 -5
- package/dist/{google-NYRI2NDZ.js → google-M7KEXVK5.js} +18 -18
- package/dist/{google-NYRI2NDZ.js.map → google-M7KEXVK5.js.map} +1 -1
- package/dist/google-ads-7XAGJVNJ.js +195 -0
- package/dist/google-ads-7XAGJVNJ.js.map +1 -0
- package/dist/{history-PSNJAUTW.js → history-EUG4LE44.js} +5 -5
- package/dist/{hubspot-2NHL47R2.js → hubspot-UULVEYVO.js} +9 -9
- package/dist/{ideas-22MRXKT7.js → ideas-7LXYXS5G.js} +6 -6
- package/dist/{images-LXFWEON7.js → images-3SOTFMJV.js} +4 -4
- package/dist/{ingest-W7VEDEYD.js → ingest-HQUXSBWA.js} +4 -4
- package/dist/{ingest-ZN3DEZHY.js → ingest-HYSZC3EX.js} +5 -5
- package/dist/{inspect-3LBIHMMP.js → inspect-HZQ7GSVM.js} +5 -5
- package/dist/{inspiration-I4MMKAWA.js → inspiration-P265QJ2H.js} +1 -1
- package/dist/{intent-ICKFJRT2.js → intent-E3UIVZBN.js} +5 -5
- package/dist/{keyword-gap-NGPH32FN.js → keyword-gap-BG6M665A.js} +5 -5
- package/dist/{keyword-metrics-PZXFB4NG.js → keyword-metrics-YG3K7MQZ.js} +8 -8
- package/dist/{keywords-for-site-RH47P4GJ.js → keywords-for-site-V4K744TF.js} +10 -6
- package/dist/{keywords-for-site-RH47P4GJ.js.map → keywords-for-site-V4K744TF.js.map} +1 -1
- package/dist/{landing-D7QS42GK.js → landing-3SSX6WK6.js} +3 -3
- package/dist/{languages-JDYL2N5F.js → languages-HORKPDNH.js} +4 -4
- package/dist/{languages-JMVNOHMG.js → languages-JSGWCC7Z.js} +2 -2
- package/dist/{leads-E22XFSX2.js → leads-FAHQ6KJX.js} +5 -5
- package/dist/{learn-Y4KIZNRF.js → learn-XNHGNQE5.js} +13 -14
- package/dist/{learn-Y4KIZNRF.js.map → learn-XNHGNQE5.js.map} +1 -1
- package/dist/{lighthouse-NQBUCHTW.js → lighthouse-6ZC45E53.js} +2 -2
- package/dist/{line-item-writes-KA5PVKFO.js → line-item-writes-A6BPZQPL.js} +5 -5
- package/dist/{line-items-3ZFFZCNH.js → line-items-J7PXJHMD.js} +5 -5
- package/dist/{link-AEU6BV75.js → link-4GGAQAVH.js} +5 -5
- package/dist/{linkedin-WCB2H5NH.js → linkedin-I6JDSTRB.js} +28 -28
- package/dist/{list-OLX7AI3O.js → list-22HZ2S4W.js} +5 -5
- package/dist/{list-TOUUGHMS.js → list-AQMGXI4N.js} +5 -5
- package/dist/{list-PAMYQS4X.js → list-KAJZFHMN.js} +4 -4
- package/dist/{locations-S4U6IJIS.js → locations-J4G5RNPH.js} +4 -4
- package/dist/{log-UGVWSK7Z.js → log-MUPKKYSJ.js} +5 -5
- package/dist/{make-3PZLTEXT.js → make-3FO76LA7.js} +131 -54
- package/dist/make-3FO76LA7.js.map +1 -0
- package/dist/{map-BW4CHSIO.js → map-F4LXTAJV.js} +6 -6
- package/dist/{mcp-JOXKA5HY.js → mcp-NLAQJWG6.js} +4 -4
- package/dist/{media-sources-SJZUOMI2.js → media-sources-W2CQFSVQ.js} +2 -2
- package/dist/{members-VAX6KAFN.js → members-3U6GINDF.js} +5 -5
- package/dist/{metrics-AY4RP54F.js → metrics-SQDJ5NQO.js} +4 -4
- package/dist/{models-5NTC7A5G.js → models-3Z6MDHQW.js} +2 -2
- package/dist/{normalize-IVQ7I54Z.js → normalize-FQ6WP5E4.js} +5 -5
- package/dist/{options-V7C6CU6M.js → options-K6FNT5A3.js} +8 -8
- package/dist/{performance-L6RJZPXX.js → performance-ZA7VCHOU.js} +6 -6
- package/dist/{promoted-tweet-writes-DBATH765.js → promoted-tweet-writes-4H3ZFD6O.js} +5 -5
- package/dist/{promoted-tweets-AU3XF3JD.js → promoted-tweets-MCMKPIHM.js} +3 -3
- package/dist/{publish-G6DYVT4S.js → publish-CW5YSAAL.js} +5 -5
- package/dist/{query-CPZZNMDY.js → query-IEZRY6HV.js} +4 -4
- package/dist/{reddit-S2S6C4RT.js → reddit-P7LLO4TK.js} +7 -7
- package/dist/{refresh-ARJ2SOMY.js → refresh-IGHEOA6Y.js} +4 -4
- package/dist/{release-3WCBAHPO.js → release-C74JOYDA.js} +5 -5
- package/dist/{relevant-pages-MTMFMBPD.js → relevant-pages-OWMNUCP7.js} +5 -5
- package/dist/{remove-FUAARCSC.js → remove-HPN62MPQ.js} +4 -4
- package/dist/{reopen-PZI5H4X2.js → reopen-XI53RP7R.js} +5 -5
- package/dist/{rerun-AUP4XT6T.js → rerun-2ITYGAIT.js} +21 -22
- package/dist/{rerun-AUP4XT6T.js.map → rerun-2ITYGAIT.js.map} +1 -1
- package/dist/{research-SY3QRGOC.js → research-HAHUTFVJ.js} +4 -4
- package/dist/{research-TISR736S.js → research-O6QXFCD7.js} +18 -15
- package/dist/research-O6QXFCD7.js.map +1 -0
- package/dist/{reset-ZWM7DDD7.js → reset-BISRUHT4.js} +4 -4
- package/dist/{reset-E6F5NXOI.js → reset-YMKVEOS4.js} +4 -4
- package/dist/{resolve-I5R5ELMZ.js → resolve-D2VESQ45.js} +5 -5
- package/dist/{retry-JO3JXXT2.js → retry-CGBATPQX.js} +4 -4
- package/dist/{retry-7CFZTKWI.js → retry-SUKRXBHX.js} +4 -4
- package/dist/{run-UKB647DI.js → run-BFERU46Q.js} +5 -5
- package/dist/{run-JR6SILHL.js → run-HSZFWRYZ.js} +21 -22
- package/dist/{scaffold-ad-BYGVU7MT.js → scaffold-ad-BYQYVB2C.js} +21 -22
- package/dist/{scaffold-ad-BYGVU7MT.js.map → scaffold-ad-BYQYVB2C.js.map} +1 -1
- package/dist/{scaffold-static-ad-U57V5UV3.js → scaffold-static-ad-5MXVTMEE.js} +70 -52
- package/dist/scaffold-static-ad-5MXVTMEE.js.map +1 -0
- package/dist/{scaffold-video-POZTINEV.js → scaffold-video-KEIHX3UD.js} +17 -18
- package/dist/{scaffold-video-POZTINEV.js.map → scaffold-video-KEIHX3UD.js.map} +1 -1
- package/dist/{schedule-SOAHLZZF.js → schedule-XJ24PL3K.js} +4 -4
- package/dist/{scheduled-agents-K5WU7SVJ.js → scheduled-agents-HWEKBANT.js} +11 -11
- package/dist/{schema-SOPL6GJP.js → schema-TAAAJHOJ.js} +6 -6
- package/dist/{search-5VUDFOHI.js → search-NVCIIGQS.js} +4 -4
- package/dist/{search-XUIVHGAY.js → search-UO5KJTYS.js} +3 -3
- package/dist/{select-T36UH4HL.js → select-K3EMTTI3.js} +14 -15
- package/dist/{select-T36UH4HL.js.map → select-K3EMTTI3.js.map} +1 -1
- package/dist/{set-prompt-Y4X7GV2Q.js → set-prompt-PY7FWYX6.js} +14 -15
- package/dist/{set-prompt-Y4X7GV2Q.js.map → set-prompt-PY7FWYX6.js.map} +1 -1
- package/dist/{setup-links-KFROCISS.js → setup-links-5ZCASHAL.js} +5 -5
- package/dist/{site-MXPKMRQT.js → site-7PSCHITE.js} +6 -6
- package/dist/{sources-MLDLMEDT.js → sources-GEB6OEGY.js} +8 -8
- package/dist/{sources-FFHNWVLV.js → sources-ICMUQMCJ.js} +6 -6
- package/dist/{stale-UXL4X4AD.js → stale-KBY5WARW.js} +13 -14
- package/dist/{stale-UXL4X4AD.js.map → stale-KBY5WARW.js.map} +1 -1
- package/dist/{status-M47G5HD4.js → status-ZX5WM5PJ.js} +5 -5
- package/dist/{studio-HUEBE6DS.js → studio-RA7QQH4O.js} +4 -4
- package/dist/{sync-HS7VZJ2H.js → sync-TZNIPZRX.js} +4 -4
- package/dist/{sync-definition-PY6REQ4J.js → sync-definition-ADXXWWV5.js} +16 -17
- package/dist/{tag-manager-HREEYGVM.js → tag-manager-DYZUOIAS.js} +1 -1
- package/dist/{tags-WAW6MQAY.js → tags-4OZCALA3.js} +5 -5
- package/dist/{tags-MRG56YOE.js → tags-4PXXFIPU.js} +4 -4
- package/dist/{tags-DYRZTYHD.js → tags-KFVUEPL6.js} +5 -5
- package/dist/{tags-DIXLYB5P.js → tags-TESETZGC.js} +4 -4
- package/dist/{tags-Y4HHJJGE.js → tags-WIMUIZHU.js} +5 -5
- package/dist/{targeting-criteria-5UUESFWC.js → targeting-criteria-VRI7V6C5.js} +3 -3
- package/dist/{targets-COZPVG52.js → targets-ERVS2VEU.js} +5 -5
- package/dist/{templates-75VFYZ3E.js → templates-TE6LBUIP.js} +5 -5
- package/dist/{testimonials-WJBRWLNW.js → testimonials-FV7KPAPK.js} +6 -6
- package/dist/{top-companies-C2R4FG6H.js → top-companies-B5M43KGJ.js} +5 -5
- package/dist/{translate-RYAJAFV7.js → translate-OKADZCBC.js} +19 -20
- package/dist/{translate-RYAJAFV7.js.map → translate-OKADZCBC.js.map} +1 -1
- package/dist/{triggers-5UHVJPBV.js → triggers-JLJQOSKI.js} +5 -5
- package/dist/{unlink-PLOOAGM3.js → unlink-KMWDKVIC.js} +5 -5
- package/dist/{unstage-JIIOTBTF.js → unstage-M4IQKJIO.js} +5 -5
- package/dist/{update-RGVNTA5X.js → update-5MBR4TPK.js} +4 -4
- package/dist/{update-QYM6U7LL.js → update-AHDGHOCP.js} +5 -5
- package/dist/{update-G6R5ZHUI.js → update-K6LFJHNI.js} +5 -5
- package/dist/{update-RCP7F5L5.js → update-PNRNYXUW.js} +5 -5
- package/dist/{upload-EEJ34Q3Y.js → upload-KAQC4AH7.js} +5 -5
- package/dist/{url-options-QEWKRKZ3.js → url-options-GGXAL3J4.js} +4 -4
- package/dist/{url-params-2G5M2B3J.js → url-params-SM32OOXZ.js} +5 -5
- package/dist/{validate-M33VLUG4.js → validate-NCTK5BXD.js} +14 -15
- package/dist/{validate-M33VLUG4.js.map → validate-NCTK5BXD.js.map} +1 -1
- package/dist/{videos-FVVID55J.js → videos-A32DPGHD.js} +5 -5
- package/dist/{viewer-check-2Q3WHSEL.js → viewer-check-L4B4LIAX.js} +4 -5
- package/dist/{web-WUGLSULO.js → web-TZEIFUYY.js} +8 -3
- package/dist/{web-WUGLSULO.js.map → web-TZEIFUYY.js.map} +1 -1
- package/dist/{winning-ads-OSRFHVLV.js → winning-ads-THIR7E5S.js} +6 -6
- package/dist/{write-commands-CLJOD2XF.js → write-commands-CE4FIQ6Y.js} +6 -6
- package/dist/{x-EBKLJJPJ.js → x-YXABYM5U.js} +6 -6
- package/package.json +1 -1
- package/dist/add-VZAY57M4.js.map +0 -1
- package/dist/advertisers-WSNHNCBQ.js.map +0 -1
- package/dist/chunk-5VC6IK7B.js.map +0 -1
- package/dist/chunk-6HJAHLLA.js.map +0 -1
- package/dist/chunk-CLMM6P6B.js.map +0 -1
- package/dist/chunk-EPMN4BK7.js.map +0 -1
- package/dist/chunk-HO3IUJ4K.js +0 -70
- package/dist/chunk-HO3IUJ4K.js.map +0 -1
- package/dist/chunk-IH4UQ2OK.js.map +0 -1
- package/dist/chunk-IKYNOT57.js.map +0 -1
- package/dist/chunk-OBDAYP2P.js.map +0 -1
- package/dist/chunk-RCQJHKK5.js.map +0 -1
- package/dist/chunk-TBEUMOEL.js.map +0 -1
- package/dist/chunk-V2X3KK52.js.map +0 -1
- package/dist/chunk-XML7AJM3.js.map +0 -1
- package/dist/feedback-QGSAJJVC.js.map +0 -1
- package/dist/feedback-record-NUAJ6UBL.js.map +0 -1
- package/dist/flows-OGGSWWGT.js.map +0 -1
- package/dist/get-N7FR6NFX.js.map +0 -1
- package/dist/make-3PZLTEXT.js.map +0 -1
- package/dist/research-TISR736S.js.map +0 -1
- package/dist/scaffold-static-ad-U57V5UV3.js.map +0 -1
- /package/dist/{account-PCEZQUK7.js.map → account-DTHGTZCN.js.map} +0 -0
- /package/dist/{accounts-5AXLYU7P.js.map → accounts-5RLG6BBA.js.map} +0 -0
- /package/dist/{accounts-OSXDZZLY.js.map → accounts-6LSBBXKA.js.map} +0 -0
- /package/dist/{actions-HM4VVTGW.js.map → actions-WH5C6Q7I.js.map} +0 -0
- /package/dist/{add-4J2EF54O.js.map → add-BZ4QPLK4.js.map} +0 -0
- /package/dist/{ads-NUME2UXH.js.map → ads-6UG66KA5.js.map} +0 -0
- /package/dist/{analytics-QTR2ZITZ.js.map → analytics-3YAWQF5K.js.map} +0 -0
- /package/dist/{analytics-PHU7H5VY.js.map → analytics-BCZGSSXP.js.map} +0 -0
- /package/dist/{animate-3Z7HXOLE.js.map → animate-AIZ3GS4J.js.map} +0 -0
- /package/dist/{assign-IIAVNATI.js.map → assign-O6QNAZD5.js.map} +0 -0
- /package/dist/{audience-size-2L7XMYJL.js.map → audience-size-CXPWERR3.js.map} +0 -0
- /package/dist/{audit-ZCUFJLUG.js.map → audit-MNOQK3U4.js.map} +0 -0
- /package/dist/{avatars-OEK3FYKK.js.map → avatars-P3WX5TQP.js.map} +0 -0
- /package/dist/{bid-pricing-FDW3IY6G.js.map → bid-pricing-6XXSM7C2.js.map} +0 -0
- /package/dist/{brand-OXYFSNA5.js.map → brand-LXU7YNCF.js.map} +0 -0
- /package/dist/{campaign-groups-5GCFQT2W.js.map → campaign-groups-CEAM3WRO.js.map} +0 -0
- /package/dist/{campaign-writes-3SJQSCUK.js.map → campaign-writes-D6BJAULL.js.map} +0 -0
- /package/dist/{campaigns-SYEOFKFV.js.map → campaigns-CXOKBCPS.js.map} +0 -0
- /package/dist/{campaigns-7QDDWZ76.js.map → campaigns-V3SWBM4E.js.map} +0 -0
- /package/dist/{canvas-B6DPRQGN.js.map → canvas-VH3Q26TK.js.map} +0 -0
- /package/dist/{capabilities-GVHPHH2G.js.map → capabilities-NZPSSS6T.js.map} +0 -0
- /package/dist/{changes-6QBJMGJC.js.map → changes-TP7ZZHB3.js.map} +0 -0
- /package/dist/{chats-54CWM7DL.js.map → chats-GN3PBFX4.js.map} +0 -0
- /package/dist/{chunk-SKT3SAHG.js.map → chunk-2BKVVCCV.js.map} +0 -0
- /package/dist/{chunk-YUPRCOEN.js.map → chunk-2GTYAHDN.js.map} +0 -0
- /package/dist/{chunk-E5IFTZJ3.js.map → chunk-3OFVFHKT.js.map} +0 -0
- /package/dist/{chunk-5EEDEVOR.js.map → chunk-4QEY2L6U.js.map} +0 -0
- /package/dist/{chunk-7JUUKYKG.js.map → chunk-4Z7DEN75.js.map} +0 -0
- /package/dist/{chunk-GTK46DE3.js.map → chunk-7ED5TAFP.js.map} +0 -0
- /package/dist/{chunk-654U6NU6.js.map → chunk-BNCW67EM.js.map} +0 -0
- /package/dist/{chunk-J5IU4OX2.js.map → chunk-CFHIW5QZ.js.map} +0 -0
- /package/dist/{chunk-FGH4Z5K5.js.map → chunk-DQMZXK27.js.map} +0 -0
- /package/dist/{chunk-XV6XCFF7.js.map → chunk-E4NCRGY3.js.map} +0 -0
- /package/dist/{chunk-7FVWIZHM.js.map → chunk-ESB5DLIP.js.map} +0 -0
- /package/dist/{chunk-NK2UFFVH.js.map → chunk-FVF5SXTZ.js.map} +0 -0
- /package/dist/{chunk-KWAOTV7F.js.map → chunk-GX6VAHY7.js.map} +0 -0
- /package/dist/{chunk-6TCDQSM7.js.map → chunk-GYU7BWEN.js.map} +0 -0
- /package/dist/{chunk-HYCIBVDW.js.map → chunk-HZUDRKGR.js.map} +0 -0
- /package/dist/{chunk-FYQPB2SS.js.map → chunk-IGQZ5U3C.js.map} +0 -0
- /package/dist/{chunk-OAQPHP6V.js.map → chunk-IYU4X5A7.js.map} +0 -0
- /package/dist/{chunk-2SCPDSFN.js.map → chunk-LIQ4SQ2T.js.map} +0 -0
- /package/dist/{chunk-KMEMA7AZ.js.map → chunk-LLOOWRBB.js.map} +0 -0
- /package/dist/{chunk-NSA6HRG6.js.map → chunk-ND5MJ3AA.js.map} +0 -0
- /package/dist/{chunk-ACFWVULZ.js.map → chunk-NIJSXVFT.js.map} +0 -0
- /package/dist/{chunk-H2QNBOPS.js.map → chunk-NJXNU2G6.js.map} +0 -0
- /package/dist/{chunk-AO5UQQLJ.js.map → chunk-ORO7VAXB.js.map} +0 -0
- /package/dist/{chunk-V5WSJP5A.js.map → chunk-OUTF5JFG.js.map} +0 -0
- /package/dist/{chunk-XG3XCHN6.js.map → chunk-P5T7OZKV.js.map} +0 -0
- /package/dist/{chunk-DE6ANJLU.js.map → chunk-PTCIM35Y.js.map} +0 -0
- /package/dist/{chunk-VJZHVOA4.js.map → chunk-PVUZWHNQ.js.map} +0 -0
- /package/dist/{chunk-CKU4WYTF.js.map → chunk-QVJDPOEB.js.map} +0 -0
- /package/dist/{chunk-KV5BCSUR.js.map → chunk-R5RIH3N5.js.map} +0 -0
- /package/dist/{chunk-RB5DB3WN.js.map → chunk-RB5CVIK6.js.map} +0 -0
- /package/dist/{chunk-EAHP7L2R.js.map → chunk-RZT263H7.js.map} +0 -0
- /package/dist/{chunk-HDWKLFF5.js.map → chunk-TUB34FVS.js.map} +0 -0
- /package/dist/{chunk-4SJDDGPV.js.map → chunk-TX7LZWZD.js.map} +0 -0
- /package/dist/{chunk-6YYEBLYI.js.map → chunk-V7CTQOHG.js.map} +0 -0
- /package/dist/{chunk-EVYXTT7V.js.map → chunk-XCM6XWOB.js.map} +0 -0
- /package/dist/{chunk-ZNBDKK4Y.js.map → chunk-XFGAUP5B.js.map} +0 -0
- /package/dist/{chunk-4SNOWJV7.js.map → chunk-XQIKDODN.js.map} +0 -0
- /package/dist/{chunk-WRIC2RPQ.js.map → chunk-XTRAI6CL.js.map} +0 -0
- /package/dist/{chunk-3X3446TG.js.map → chunk-XVOI4BIS.js.map} +0 -0
- /package/dist/{chunk-F46KAIBS.js.map → chunk-ZGTCZ6H4.js.map} +0 -0
- /package/dist/{claim-CIASHKMC.js.map → claim-25JJM4AG.js.map} +0 -0
- /package/dist/{companies-ECVMO24S.js.map → companies-VR5M5PAN.js.map} +0 -0
- /package/dist/{complete-32CPBFIG.js.map → complete-DRMOTC2W.js.map} +0 -0
- /package/dist/{connect-OJSOM6PY.js.map → connect-WUDJR2GH.js.map} +0 -0
- /package/dist/{conversation-7FHN5ESN.js.map → conversation-K6LYF2ZP.js.map} +0 -0
- /package/dist/{conversion-upload-command-BBUXLFT3.js.map → conversion-upload-command-AUF3LNTH.js.map} +0 -0
- /package/dist/{conversions-7YJDNZ7Y.js.map → conversions-GF32XOWY.js.map} +0 -0
- /package/dist/{countries-FYHM3IMJ.js.map → countries-ESAKTQAE.js.map} +0 -0
- /package/dist/{create-OYT76OMJ.js.map → create-2D7AIFJI.js.map} +0 -0
- /package/dist/{create-ZGRL7YCV.js.map → create-4TFAD6HY.js.map} +0 -0
- /package/dist/{create-FE5QLW7V.js.map → create-IXYXYLLE.js.map} +0 -0
- /package/dist/{create-2TBDXHAM.js.map → create-PKJVFJMO.js.map} +0 -0
- /package/dist/{creatives-IUB57I3T.js.map → creatives-OHCFHRZ5.js.map} +0 -0
- /package/dist/{creatives-5MUTX4DQ.js.map → creatives-QLSZFOMB.js.map} +0 -0
- /package/dist/{credentials-AETHKP5T.js.map → credentials-WSLR5VU4.js.map} +0 -0
- /package/dist/{critique-T7HJ42D4.js.map → critique-5PCQ2CJH.js.map} +0 -0
- /package/dist/{crm-KH6XX2TT.js.map → crm-HNUOHXAN.js.map} +0 -0
- /package/dist/{crm-JP4UOPMN.js.map → crm-SNIUADNK.js.map} +0 -0
- /package/dist/{currency-DJDVIR3C.js.map → currency-XCGKQ7FE.js.map} +0 -0
- /package/dist/{customers-7I7UY5PS.js.map → customers-72L2KZHO.js.map} +0 -0
- /package/dist/{delete-6IOUDEWY.js.map → delete-EVGM5B36.js.map} +0 -0
- /package/dist/{delete-ODFKNHAI.js.map → delete-PA2GY5EC.js.map} +0 -0
- /package/dist/{delete-RAETUVO2.js.map → delete-YNNFTFYV.js.map} +0 -0
- /package/dist/{demographics-2FTDKPBD.js.map → demographics-SYS2E7QC.js.map} +0 -0
- /package/dist/{discard-ZX5TLFYH.js.map → discard-JS2YJUIM.js.map} +0 -0
- /package/dist/{discover-M3ZKKFEL.js.map → discover-BJPZNXUQ.js.map} +0 -0
- /package/dist/{domain-TH7KIC2T.js.map → domain-XKKH5NCL.js.map} +0 -0
- /package/dist/{draft-YHUIFDDR.js.map → draft-4AO4YH3V.js.map} +0 -0
- /package/dist/{draft-SH25PKST.js.map → draft-5YAYCEYY.js.map} +0 -0
- /package/dist/{draft-S2FSQOJN.js.map → draft-GCUXNPVH.js.map} +0 -0
- /package/dist/{draft-CRE2Y24G.js.map → draft-WWWKSEEE.js.map} +0 -0
- /package/dist/{facets-6B2U4BSM.js.map → facets-NVBX5WDT.js.map} +0 -0
- /package/dist/{fit-FJ5CLQS4.js.map → fit-BOQL6OK3.js.map} +0 -0
- /package/dist/{follow-DUIEGDVK.js.map → follow-FN7LV3WV.js.map} +0 -0
- /package/dist/{follow-competitors-IT5ZVJPE.js.map → follow-competitors-MKXFHLXB.js.map} +0 -0
- /package/dist/{fonts-GCJRLEGD.js.map → fonts-64T6KRZS.js.map} +0 -0
- /package/dist/{forecast-2AGTFMXH.js.map → forecast-YIIGTHRM.js.map} +0 -0
- /package/dist/{funnel-7U55LNJ4.js.map → funnel-XHDCXXQ5.js.map} +0 -0
- /package/dist/{generate-DMQUS665.js.map → generate-3XYYITU6.js.map} +0 -0
- /package/dist/{get-IRJIHOQK.js.map → get-XJ3AZX35.js.map} +0 -0
- /package/dist/{history-PSNJAUTW.js.map → history-EUG4LE44.js.map} +0 -0
- /package/dist/{hubspot-2NHL47R2.js.map → hubspot-UULVEYVO.js.map} +0 -0
- /package/dist/{ideas-22MRXKT7.js.map → ideas-7LXYXS5G.js.map} +0 -0
- /package/dist/{images-LXFWEON7.js.map → images-3SOTFMJV.js.map} +0 -0
- /package/dist/{ingest-W7VEDEYD.js.map → ingest-HQUXSBWA.js.map} +0 -0
- /package/dist/{ingest-ZN3DEZHY.js.map → ingest-HYSZC3EX.js.map} +0 -0
- /package/dist/{inspect-3LBIHMMP.js.map → inspect-HZQ7GSVM.js.map} +0 -0
- /package/dist/{inspiration-I4MMKAWA.js.map → inspiration-P265QJ2H.js.map} +0 -0
- /package/dist/{intent-ICKFJRT2.js.map → intent-E3UIVZBN.js.map} +0 -0
- /package/dist/{keyword-gap-NGPH32FN.js.map → keyword-gap-BG6M665A.js.map} +0 -0
- /package/dist/{keyword-metrics-PZXFB4NG.js.map → keyword-metrics-YG3K7MQZ.js.map} +0 -0
- /package/dist/{landing-D7QS42GK.js.map → landing-3SSX6WK6.js.map} +0 -0
- /package/dist/{languages-JDYL2N5F.js.map → languages-HORKPDNH.js.map} +0 -0
- /package/dist/{languages-JMVNOHMG.js.map → languages-JSGWCC7Z.js.map} +0 -0
- /package/dist/{leads-E22XFSX2.js.map → leads-FAHQ6KJX.js.map} +0 -0
- /package/dist/{lighthouse-NQBUCHTW.js.map → lighthouse-6ZC45E53.js.map} +0 -0
- /package/dist/{line-item-writes-KA5PVKFO.js.map → line-item-writes-A6BPZQPL.js.map} +0 -0
- /package/dist/{line-items-3ZFFZCNH.js.map → line-items-J7PXJHMD.js.map} +0 -0
- /package/dist/{link-AEU6BV75.js.map → link-4GGAQAVH.js.map} +0 -0
- /package/dist/{linkedin-WCB2H5NH.js.map → linkedin-I6JDSTRB.js.map} +0 -0
- /package/dist/{list-OLX7AI3O.js.map → list-22HZ2S4W.js.map} +0 -0
- /package/dist/{list-TOUUGHMS.js.map → list-AQMGXI4N.js.map} +0 -0
- /package/dist/{list-PAMYQS4X.js.map → list-KAJZFHMN.js.map} +0 -0
- /package/dist/{locations-S4U6IJIS.js.map → locations-J4G5RNPH.js.map} +0 -0
- /package/dist/{log-UGVWSK7Z.js.map → log-MUPKKYSJ.js.map} +0 -0
- /package/dist/{map-BW4CHSIO.js.map → map-F4LXTAJV.js.map} +0 -0
- /package/dist/{mcp-JOXKA5HY.js.map → mcp-NLAQJWG6.js.map} +0 -0
- /package/dist/{media-sources-SJZUOMI2.js.map → media-sources-W2CQFSVQ.js.map} +0 -0
- /package/dist/{members-VAX6KAFN.js.map → members-3U6GINDF.js.map} +0 -0
- /package/dist/{metrics-AY4RP54F.js.map → metrics-SQDJ5NQO.js.map} +0 -0
- /package/dist/{models-5NTC7A5G.js.map → models-3Z6MDHQW.js.map} +0 -0
- /package/dist/{normalize-IVQ7I54Z.js.map → normalize-FQ6WP5E4.js.map} +0 -0
- /package/dist/{options-V7C6CU6M.js.map → options-K6FNT5A3.js.map} +0 -0
- /package/dist/{performance-L6RJZPXX.js.map → performance-ZA7VCHOU.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-DBATH765.js.map → promoted-tweet-writes-4H3ZFD6O.js.map} +0 -0
- /package/dist/{promoted-tweets-AU3XF3JD.js.map → promoted-tweets-MCMKPIHM.js.map} +0 -0
- /package/dist/{publish-G6DYVT4S.js.map → publish-CW5YSAAL.js.map} +0 -0
- /package/dist/{query-CPZZNMDY.js.map → query-IEZRY6HV.js.map} +0 -0
- /package/dist/{reddit-S2S6C4RT.js.map → reddit-P7LLO4TK.js.map} +0 -0
- /package/dist/{refresh-ARJ2SOMY.js.map → refresh-IGHEOA6Y.js.map} +0 -0
- /package/dist/{release-3WCBAHPO.js.map → release-C74JOYDA.js.map} +0 -0
- /package/dist/{relevant-pages-MTMFMBPD.js.map → relevant-pages-OWMNUCP7.js.map} +0 -0
- /package/dist/{remove-FUAARCSC.js.map → remove-HPN62MPQ.js.map} +0 -0
- /package/dist/{reopen-PZI5H4X2.js.map → reopen-XI53RP7R.js.map} +0 -0
- /package/dist/{research-SY3QRGOC.js.map → research-HAHUTFVJ.js.map} +0 -0
- /package/dist/{reset-ZWM7DDD7.js.map → reset-BISRUHT4.js.map} +0 -0
- /package/dist/{reset-E6F5NXOI.js.map → reset-YMKVEOS4.js.map} +0 -0
- /package/dist/{resolve-I5R5ELMZ.js.map → resolve-D2VESQ45.js.map} +0 -0
- /package/dist/{retry-JO3JXXT2.js.map → retry-CGBATPQX.js.map} +0 -0
- /package/dist/{retry-7CFZTKWI.js.map → retry-SUKRXBHX.js.map} +0 -0
- /package/dist/{run-UKB647DI.js.map → run-BFERU46Q.js.map} +0 -0
- /package/dist/{run-JR6SILHL.js.map → run-HSZFWRYZ.js.map} +0 -0
- /package/dist/{schedule-SOAHLZZF.js.map → schedule-XJ24PL3K.js.map} +0 -0
- /package/dist/{scheduled-agents-K5WU7SVJ.js.map → scheduled-agents-HWEKBANT.js.map} +0 -0
- /package/dist/{schema-SOPL6GJP.js.map → schema-TAAAJHOJ.js.map} +0 -0
- /package/dist/{search-5VUDFOHI.js.map → search-NVCIIGQS.js.map} +0 -0
- /package/dist/{search-XUIVHGAY.js.map → search-UO5KJTYS.js.map} +0 -0
- /package/dist/{setup-links-KFROCISS.js.map → setup-links-5ZCASHAL.js.map} +0 -0
- /package/dist/{site-MXPKMRQT.js.map → site-7PSCHITE.js.map} +0 -0
- /package/dist/{sources-MLDLMEDT.js.map → sources-GEB6OEGY.js.map} +0 -0
- /package/dist/{sources-FFHNWVLV.js.map → sources-ICMUQMCJ.js.map} +0 -0
- /package/dist/{status-M47G5HD4.js.map → status-ZX5WM5PJ.js.map} +0 -0
- /package/dist/{studio-HUEBE6DS.js.map → studio-RA7QQH4O.js.map} +0 -0
- /package/dist/{sync-HS7VZJ2H.js.map → sync-TZNIPZRX.js.map} +0 -0
- /package/dist/{sync-definition-PY6REQ4J.js.map → sync-definition-ADXXWWV5.js.map} +0 -0
- /package/dist/{tag-manager-HREEYGVM.js.map → tag-manager-DYZUOIAS.js.map} +0 -0
- /package/dist/{tags-WAW6MQAY.js.map → tags-4OZCALA3.js.map} +0 -0
- /package/dist/{tags-MRG56YOE.js.map → tags-4PXXFIPU.js.map} +0 -0
- /package/dist/{tags-DYRZTYHD.js.map → tags-KFVUEPL6.js.map} +0 -0
- /package/dist/{tags-DIXLYB5P.js.map → tags-TESETZGC.js.map} +0 -0
- /package/dist/{tags-Y4HHJJGE.js.map → tags-WIMUIZHU.js.map} +0 -0
- /package/dist/{targeting-criteria-5UUESFWC.js.map → targeting-criteria-VRI7V6C5.js.map} +0 -0
- /package/dist/{targets-COZPVG52.js.map → targets-ERVS2VEU.js.map} +0 -0
- /package/dist/{templates-75VFYZ3E.js.map → templates-TE6LBUIP.js.map} +0 -0
- /package/dist/{testimonials-WJBRWLNW.js.map → testimonials-FV7KPAPK.js.map} +0 -0
- /package/dist/{top-companies-C2R4FG6H.js.map → top-companies-B5M43KGJ.js.map} +0 -0
- /package/dist/{triggers-5UHVJPBV.js.map → triggers-JLJQOSKI.js.map} +0 -0
- /package/dist/{unlink-PLOOAGM3.js.map → unlink-KMWDKVIC.js.map} +0 -0
- /package/dist/{unstage-JIIOTBTF.js.map → unstage-M4IQKJIO.js.map} +0 -0
- /package/dist/{update-RGVNTA5X.js.map → update-5MBR4TPK.js.map} +0 -0
- /package/dist/{update-QYM6U7LL.js.map → update-AHDGHOCP.js.map} +0 -0
- /package/dist/{update-G6R5ZHUI.js.map → update-K6LFJHNI.js.map} +0 -0
- /package/dist/{update-RCP7F5L5.js.map → update-PNRNYXUW.js.map} +0 -0
- /package/dist/{upload-EEJ34Q3Y.js.map → upload-KAQC4AH7.js.map} +0 -0
- /package/dist/{url-options-QEWKRKZ3.js.map → url-options-GGXAL3J4.js.map} +0 -0
- /package/dist/{url-params-2G5M2B3J.js.map → url-params-SM32OOXZ.js.map} +0 -0
- /package/dist/{videos-FVVID55J.js.map → videos-A32DPGHD.js.map} +0 -0
- /package/dist/{viewer-check-2Q3WHSEL.js.map → viewer-check-L4B4LIAX.js.map} +0 -0
- /package/dist/{winning-ads-OSRFHVLV.js.map → winning-ads-THIR7E5S.js.map} +0 -0
- /package/dist/{write-commands-CLJOD2XF.js.map → write-commands-CE4FIQ6Y.js.map} +0 -0
- /package/dist/{x-EBKLJJPJ.js.map → x-YXABYM5U.js.map} +0 -0
package/README.md
CHANGED
|
@@ -723,7 +723,7 @@ Command groups: `budgets`, `campaigns`, `ad-groups`, `keywords` (add/update/remo
|
|
|
723
723
|
|
|
724
724
|
**A device criterion can be added, but never removed** — `campaign-criteria add` with a device criterion works, but Google then rejects `campaign-criteria remove` on it forever, including on a criterion you added yourself (and Baker refuses the removal before publish). Adjust it instead with `campaign-criteria update customers/<cid>/campaignCriteria/<campaignId>~<criterionId> --bid-modifier <n>`: `1` for no adjustment, `1.25` to bid 25% more, `0.9` to bid 10% less, `0` to stop serving on that device. Locations, languages and ad schedules remove normally.
|
|
725
725
|
|
|
726
|
-
**Images on a Search campaign** — `assets create` with an image publishes it into the advertiser's Google Ads asset library,
|
|
726
|
+
**Images on a Search campaign** — `assets create` with an image publishes it into the advertiser's Google Ads asset library, and `assets attach` with field type `AD_IMAGE` (campaign or ad group level) puts it on a Search campaign. Google opens Search image links per advertiser account, so staging asks Google with a check that changes nothing: an account that takes them stages the link, which applies at publish like a sitelink; one that does not — or that Google could not confirm either way — has the link **skipped** — never stored, the rest of a batch stages normally — and a **Task** is staged instead, "Add N images to <campaign> in Google Ads", which applies with the rest of the chat. An image staged with no accepted link raises that Task too, and it withdraws itself once an accepted link (or a Performance Max `asset-groups attach`) names the image. `MARKETING_IMAGE` and its square/portrait variants are Performance Max asset-group slots and are sent back to `AD_IMAGE`. The image must be 1.91:1 or 1:1; another shape is sent back to be cropped. The advertiser's logo links as `BUSINESS_LOGO`, at campaign or customer level, on a verified account.
|
|
727
727
|
|
|
728
728
|
**Primary vs secondary conversion actions** — `conversions update <id> --primary` makes an action a primary action (automated bidding optimizes toward it); `--no-primary` (or `--primary=false`) demotes it to secondary (reported only) — the spaced form `--primary false` is rejected, since a boolean flag written with a space is set to true and the word dropped. `conversions create` stages a new action as **secondary** unless its `--file` payload sets `"primaryForGoal": true`, so a new action never silently joins the bidding target of a Maximize Conversions or Target CPA campaign. The staged card shows an "Action optimization" row with the before/after role.
|
|
729
729
|
|
|
@@ -1858,7 +1858,7 @@ baker creatives learn [--days <n>] [--dry-run] # what each idea'
|
|
|
1858
1858
|
- `brief` returns a verdict, not raw numbers: `account.bottleneck` is `hook`, `after_click`, `none` or `too_little_data`. A part that cannot be read says `unavailable`; the market searches (the followed brands, and the library for what COMPANY.md's first line says the company sells, in a few words) run at once and get 12 seconds, so a slow ad library leaves them out rather than holding the brief. With few customer quotes on file it runs `research customers` itself alongside the reads (about 30 s) and returns what it wrote; `--no-research` skips that. With no ideas on file, its hint lists the values `awareness`, `angle` and `format` take. `market` says what competitors' ads already say (the followed brands, else the library), how sophisticated the market is, and which awareness stages nobody speaks to.
|
|
1859
1859
|
- `ideas` is local and nearly free: two readings of the words go to the decision model (a fraction of a cent, billed with the workspace's next run, answers kept in `canvas/.cache/`). An insight filed as `observed` reads as `interpreted` when its source cannot be opened or its quote is a statistic about people rather than someone's words ("39% de los propietarios…"), and a new idea is warned when its message says what a failed idea said, however reworded or translated. Without an answer, an insight keeps its status and only the same words count as the same message. An idea's `evidence` resolves to `src/content/insights/` entries, or it is an `explore` bet. Numbers must be in the Knowledge or our own customers' quotes (a Reddit, forum or web quote never sources a claim), no two ideas may share an angle and format, and a review or testimonial format needs a quote from our own customer.
|
|
1860
1860
|
- `learn` pools each built idea's creatives, judges them against the rest of the account's cost per result and writes `status` (`winner`, `failed`, `inconclusive`, `testing`) and a frozen `result` onto the idea. `ideas` then warns when a new idea repeats a failed one.
|
|
1861
|
-
- `make` builds one idea. A static searches the idea's container
|
|
1861
|
+
- `make` builds one idea, on a proven winning ad whenever one fits. A static searches the idea's container on the idea's message for our viewer, then for the container's strongest winners from any category (no query, by winner score), pools the candidates (each ad once, the better search first), checks up to six with `winning-ads fit`, three at a time (the next only once one does not fit), and keeps the best-ranked one that fits as soon as it and every better one have answered. The fit says what made that ad a winner, so what the creative carries of it (`reference.carry`: `whole_ad`, `layout`, `hook` or `angle`); make seeds it into `prompt.json` as `concept`, the canvas keeps the ad as its `original` node, and the renders see it for its structure only at `whole_ad` or `layout`. The first hint names the ad and what it carries (for a `--reference` chosen by hand, only the ad: nothing checked what made it win); if the concept could not be written into `prompt.json`, a hint says so and how to write it from the fit already made. For a new creative it starts scaffolding the best-ranked one while the fits are asked (kept when it fits, stopped and removed whole when another or none is kept). Finding, checking and describing a reference gets 150 seconds; past that the build is stopped and the static starts from the idea (`REFERENCE_SLOW`). A creative whose ad is already written is never built over (`ALREADY_MADE`): edit its `prompt.json`, or pass `--slug` for another ad of the same idea. A video idea takes its beats spec. Either way it records the idea on `_definition.md`, sets `prompt.json`'s `message` and syncs the definition. Drafted copy lines claiming a figure the company never wrote come back first in `hints`. Only when no proven ad fits (or with `--from-idea`) does a static start from the idea itself, and the first hint says why (none in the container, what the ones checked won on that the company lacks, the time ran out, or the proven ad it picked could not be read; a `--reference` chosen by hand that cannot be read fails instead): `prompt.json` holds the message and placeholders, and `canvas run` refuses to render until the scene and copy are written.
|
|
1862
1862
|
- `make --series <lead>` makes a static idea as another ad of a series: several messages in one style. Nothing is searched or rendered; the ad's `_definition.md` names its lead (`series: <lead>`), its `prompt.json` starts as the lead's ready version with the idea's message, and only its `copy` is written. Its canvas is written from the lead's on every run: the lead's finished picture with this ad's words, every other size the lead's own size with the same words. `baker canvas run --series <lead>` renders every ad of the series at once, one reviewed and corrected run each, skipping an ad already ready from the lead's current version.
|
|
1863
1863
|
- `translate --slug <ad> --to <langs>` makes the ad in other languages as ads of the series it leads: one creative per language or country variant, `<ad>-<lang>` (the BCP-47 tag in lowercase: `-es-mx`), whose `_definition.md` says `series: <ad>` and `language: <lang>` (canonical case, `es-MX`, as the spec's market and the dashboard store it; tags are compared without case) and whose `prompt.json` is the ad's as last drawn with its words translated. Every language is translated in one text call (transcreated, each regional tag in that country's own variety and form of address, `es-MX` and `es-CO` two ads, each line keeping its role and about its length, brand names, prices and numbers kept, a customer's quote and the name on it never translated, and the ad's `message` translated with the lines; the spend is billed with the workspace's next run), or read from `--copy-file`: `{"<lang>": ["line 1", …]}` is every line with no model call, `{"<lang>": {"headline": "…", "3": "…"}}` only the lines given (by role or number), the model writing the rest. `--note` is the agent's brief for the translator (tone, form of address, terms to keep). Each made language lists the lines it `kept` as a customer said them, and the answer warns when the ad's `prompt.json` changed after its last render, since translations are made from the version rendered. The ad may itself be an ad of a series (an angle ad), so angles × languages stay one design. A language already made is left as it is, so adding one later re-renders nothing; `--again` translates it again. Then `baker canvas run --series <ad>` renders them; a new version of the ad reaches every language on the next `--series` run.
|
|
1864
1864
|
|
|
@@ -3511,8 +3511,10 @@ baker winning-ads fit a_12345 --platform meta
|
|
|
3511
3511
|
|
|
3512
3512
|
Returns `why_it_wins` in five layers (`disguise`, `voice`, `trigger`, `attention`, `logic`), the `load_bearing`
|
|
3513
3513
|
elements that carry them (each with what it `needs`, whether the company has it: `have` | `adapt` | `missing`, and
|
|
3514
|
-
`ours`, what replaces it),
|
|
3515
|
-
|
|
3514
|
+
`ours`, what replaces it), a `verdict`: `use`, `adapt` or `reject`, and what made the ad a winner, so what an ad built
|
|
3515
|
+
on it carries (`carry`: `whole_ad`, `layout`, `hook` or `angle`, with `carry_why`; renders see the reference's picture
|
|
3516
|
+
only at `whole_ad` or `layout`). The company's Knowledge, reviews and market, and the library's evidence that the ad won
|
|
3517
|
+
(its winner category, angle, hook and composition), ground the answer. `baker canvas scaffold-static-ad --source-ad-id <adId> --source-platform <platform>` reads the cached
|
|
3516
3518
|
answer, writes it into `prompt.json` as `concept`, and refuses a `reject` with `concept_does_not_fit` before anything is
|
|
3517
3519
|
billed; the hint names the platform the fit was asked on, so a TikTok or LinkedIn reference is read from its own library.
|
|
3518
3520
|
|
|
@@ -6081,7 +6083,9 @@ The two scaffold passes are billed (the full `video_deconstruct` is the heavy on
|
|
|
6081
6083
|
|
|
6082
6084
|
Turn a source/inspiration image into a **runnable, self-validated static-ad canvas** — the static counterpart of `scaffold-video`. It runs **billed Gemini passes** up front:
|
|
6083
6085
|
|
|
6084
|
-
|
|
6086
|
+
**A library ad is read once for every company.** With `--source-ad-id` and the library's own picture (no `<image>`, `--context`, `--describe-model` or `--select-model`), both passes below come from `POST /api/ad-library/reference-read`: the backend reads the ad from Ad DNA's picture, grounded in its full DNA, and keeps the read for every company. The first build on an ad pays for it (~40 s); every later one, in any company, gets it at once and free. When the shared read cannot be had, the passes run here as before.
|
|
6087
|
+
|
|
6088
|
+
1. **`image_describe`** (`~google/gemini-flash-latest`) — reverse-engineers the image (layout by what fills each region, copy verbatim, typefaces, capture in words, the `mechanism` and the `audience` it is built for) and writes it next to the canvas as **`prompt.json`**, an **ad spec** (`"schema": "baker-static-ad/3"`; `/2` still reads) you rewrite into the ad you want: `viewer` (who sees it and what they already know), `message` (the one thing it tells them, never printed), `copy` (each line with `lettering`: `in_scene`, written on something in the picture (`on`, `look`), or `designed`, set in the brand's face), `scene` (`description`, `look`: photo | designed | illustration, `capture` in words, `mood`, `layout`), `brand`, `colors` (each tied to an object, from the brand palette), `references` (one picture each, labelled by role: `PERSON_1`, `ANIMAL_1`, `PRODUCT_1`, `BADGE_1`, `PROP_1`), `logo` (and `logo_position`), `third_party_brands` (other brands the offer is about, a car brand on a car loan: `name`, `what`, and `logo` naming the `BADGE_n` reference of its logo; their logos may appear), an optional `direction`, the `mechanism` to rebuild for our brand, and in `/3`: `viewer.market` (`country`, `language`, `currency`), `brand_presence` (`standard` | `native`: a native disguise carries the logo as its sender and no big button), `recognition` (the kind of product a stranger must take it for at a glance, never the format), `native` (the ad is a screen people know, drawn exactly from HTML at every size by the free `static_native` node instead of painted: `x_post` (a post or a thread, with `reply_to`), `whatsapp`, `imessage`, `trustpilot`, `google_reviews`, `notes`, `slack`; on a 9:16 the app is drawn full screen as a phone shows it: status bar and app header pinned at the top, the reply bar and tab bar (or a keyboard under a chat or note) pinned at the bottom, the posts or messages as large as the clear band holds, and the frame's headline, caption and logo a card in the brand's colours under the app's header; a wall of reviews (`trustpilot`, `google_reviews`) takes up to 16 real reviews, the first two (`FEATURED_REVIEWS`) the ad's copy set whole in the safe area and the rest filling the whole frame behind them as large, sharp cards, turned and cut by its edges, because a wall wins on how many there are; a review longer than 160 characters is shown cut at a word with "…", and that cut text is the copy the review reads back; a chat (`whatsapp`, `imessage`) on a 9:16 never shrinks below about 62% of the phone scale: its earliest messages scroll up under the header, as the app does, the node's optional `scrolled` output lists the copy lines scrolled off that size, and the run review expects those lines nowhere on it; a logo file whose drawing runs off its own edge is set aside for a whole one, and a square mark where a wordmark goes is drawn larger; the run review never flags the app's own interface words (status bar, keyboard) as under Reels; those words ("Today", "Verified", "Post your reply") are printed in the viewer's language: Spanish, Portuguese and English as checked against the apps, any other written once by a text model and cached per language (`scripts/interface-words-evals`), English when it cannot; the image model renders only the screen's `photos`, each a plain phone photo of ordinary people of the market; adding the block switches an existing ad on its next run, `--fix` does not apply, an invented brand handle or a rating the Knowledge does not hold (either decimal mark) is refused as `native_screen_invalid`, and a photo of ours goes in as its `image`: a native photo takes no `avatar`, since nothing would cast it), a role on each third-party brand (`partner` | `proof` | `category_signal`), a reference's `image` (wired as a picture of ours) and a person's `avatar` (the company avatar cast), and `concept` (`why_it_wins` in five layers, `load_bearing` elements with `have`/`adapt`/`missing` and `ours`, `verdict` `use`|`adapt`|`reject`, `transfer_note`; seeded from `baker winning-ads fit`). Every render keeps the load-bearing elements; `validate`/`run` refuse a `reject` or a `missing` element with nothing named (`concept_does_not_fit`) and a rating, or a promised price, share, multiple or time, the Knowledge does not hold with that unit, or a superlative it does not make (`proof_without_source`), in any language or several in one ad: a text model reads each claim of the copy and of the Knowledge as a kind, a number and a unit (cached by text, billed with the next run), code compares them exactly, and the decision model (Jev) judges a superlative; with no model, every number the copy writes in digits must be in the Knowledge (`claim-check.ts`, eval: `scripts/claim-check-evals`); a line citing a review platform gets its real badge wired (Trustpilot, G2 and the like by name; Google, Google Play or the App Store when the line shows stars or a score, or the decision model reads it as citing them for reviews in any language, `scripts/review-citation-evals`). **You never write a model prompt**: every render prompt is compiled from this file for the model it runs on (short labelled sections for gpt-image, sentences with reasons for Gemini; each line quoted once; pictures numbered with one role each; colours from the brand; realism as capture cues; the safe area from its one owner; constraints last), on every `validate` and `run`, and shown on its node. A `prompt.json` written before the ad spec (the describe blueprint) is read through an adapter and keeps working. The source's own read (`source`, and the library's `reference`) stays as bookkeeping and is never sent to a model.
|
|
6085
6089
|
2. **element selection** (`~google/gemini-flash-latest`) — picks the **main, identity-critical** elements (the brand logo, a showcased product, a trust badge) **plus any foreground/hero person or animal** — the emotional focal point — even a generic one, because a free-generated face/muzzle reads as AI and grows artifacts; the emotional hero always gets a real-reference slot. When the advertiser's logo appears in **more than one lockup** (a square/icon **mark** and a horizontal **wordmark**), each is emitted as its **own** element (e.g. `LOGO_MARK`, `LOGO_WORDMARK`). The describe pass also records the ad's **typography** (each typeface's classification, a best-guess family, and its weight/case), which seeds the spec's `brand.typeface`. Background extras are dropped. Each element becomes a `references` entry in the spec, named by its role and naming the canvas slot it fills, so the file says which slot grounds which subject.
|
|
6086
6090
|
|
|
6087
6091
|
It then scaffolds a canvas on which **the image model designs the finished ad**, holding only what `prompt.json` holds; no element is mandatory:
|
|
@@ -6672,20 +6676,20 @@ Each creative reports `spend`, `impressions`, `ctr` (percent), `cpc`, `results`,
|
|
|
6672
6676
|
|
|
6673
6677
|
### `baker creatives feedback [--slug <slug>] [--full]`
|
|
6674
6678
|
|
|
6675
|
-
What
|
|
6679
|
+
What people said about creative versions in their chats (an approval, or a rejection with reasons and a note; keeping a version counts as an approval). Compact by default: approved and rejected counts, the top rejection reasons, what approved versions share (format, platform, option) and the 8 latest verdicts, plus `hints[]` saying what to do differently. `--slug` narrows to one creative; `--full` returns every verdict (up to 200) with whole notes.
|
|
6676
6680
|
|
|
6677
6681
|
```bash
|
|
6678
6682
|
baker creatives feedback
|
|
6679
6683
|
baker creatives feedback --slug spring-offer --full
|
|
6680
6684
|
```
|
|
6681
6685
|
|
|
6682
|
-
Each entry carries its `source`: `review` (the buttons
|
|
6686
|
+
Each entry carries its `source`: `review` (the review buttons Baker had before, kept on older verdicts), `selection` (choosing or saving the version) or `chat` (what the person wrote in a chat, recorded with `feedback record`).
|
|
6683
6687
|
|
|
6684
6688
|
When the person asks in the chat for another variant of a version, make every size from it with `baker canvas run --slug <slug> --use-variant <sha256> --from <runId>`; Baker has no control to choose one.
|
|
6685
6689
|
|
|
6686
6690
|
### `baker creatives feedback record`
|
|
6687
6691
|
|
|
6688
|
-
Record what the person said about one version in a chat: an approval, or a rejection with reasons and their own words. It is stored
|
|
6692
|
+
Record what the person said about one version in a chat: an approval, or a rejection with reasons and their own words. It is stored as the verdict of the person who wrote the chat's latest message (`recordedFor: "sender"`), or of the chat itself when nobody has written in it (`"chat"`). One verdict per person per version or option: a later one replaces theirs. Must run from a chat.
|
|
6689
6693
|
|
|
6690
6694
|
```bash
|
|
6691
6695
|
baker creatives feedback record --slug spring-offer --verdict rejected \
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
csvOrJson,
|
|
3
3
|
handleLinkedinError,
|
|
4
4
|
resolveAccountIdArg
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QVJDPOEB.js";
|
|
6
6
|
import {
|
|
7
7
|
writeAdsJson,
|
|
8
8
|
writeAdsOutput
|
|
@@ -10,11 +10,11 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
NO_CACHE_ARG
|
|
12
12
|
} from "./chunk-X7ZODEXJ.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-K6WVV74H.js";
|
|
14
14
|
import "./chunk-GXDLWBOY.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-TEINLN64.js";
|
|
16
16
|
import "./chunk-ZJWUBJYQ.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-NE4F3FHN.js";
|
|
18
18
|
import {
|
|
19
19
|
apiGet
|
|
20
20
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -68,7 +68,7 @@ Examples:
|
|
|
68
68
|
},
|
|
69
69
|
subCommands: {
|
|
70
70
|
detail: accountDetailCommand,
|
|
71
|
-
"url-params": () => import("./write-commands-
|
|
71
|
+
"url-params": () => import("./write-commands-CE4FIQ6Y.js").then((m) => m.accountUrlParamsCommand)
|
|
72
72
|
},
|
|
73
73
|
args: accountDetailCommand.args,
|
|
74
74
|
default: "detail"
|
|
@@ -76,4 +76,4 @@ Examples:
|
|
|
76
76
|
export {
|
|
77
77
|
accountCommand
|
|
78
78
|
};
|
|
79
|
-
//# sourceMappingURL=account-
|
|
79
|
+
//# sourceMappingURL=account-DTHGTZCN.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
csvOrJson,
|
|
3
3
|
handleLinkedinError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QVJDPOEB.js";
|
|
5
5
|
import {
|
|
6
6
|
connectedResourceHints
|
|
7
7
|
} from "./chunk-P4NSJS54.js";
|
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
NO_CACHE_ARG
|
|
18
18
|
} from "./chunk-X7ZODEXJ.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-K6WVV74H.js";
|
|
20
20
|
import "./chunk-GXDLWBOY.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-TEINLN64.js";
|
|
22
22
|
import "./chunk-ZJWUBJYQ.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-NE4F3FHN.js";
|
|
24
24
|
import {
|
|
25
25
|
apiGet
|
|
26
26
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -74,4 +74,4 @@ Examples:
|
|
|
74
74
|
export {
|
|
75
75
|
accountsCommand
|
|
76
76
|
};
|
|
77
|
-
//# sourceMappingURL=accounts-
|
|
77
|
+
//# sourceMappingURL=accounts-5RLG6BBA.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
accountsInfluencedRequestSchema,
|
|
10
10
|
influenceParams,
|
|
11
11
|
warmAccounts
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-RB5CVIK6.js";
|
|
13
13
|
import "./chunk-GRQ2AXDX.js";
|
|
14
14
|
import {
|
|
15
15
|
TABLE_OUTPUT_FORMATS,
|
|
@@ -19,12 +19,12 @@ import {
|
|
|
19
19
|
} from "./chunk-VFIOJD5M.js";
|
|
20
20
|
import {
|
|
21
21
|
failApi
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-ZDNOCKKY.js";
|
|
23
|
+
import "./chunk-K6WVV74H.js";
|
|
24
24
|
import "./chunk-GXDLWBOY.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-TEINLN64.js";
|
|
26
26
|
import "./chunk-ZJWUBJYQ.js";
|
|
27
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-NE4F3FHN.js";
|
|
28
28
|
import {
|
|
29
29
|
ApiError,
|
|
30
30
|
apiPost
|
|
@@ -602,10 +602,10 @@ var accountsCommand = defineCommand({
|
|
|
602
602
|
warm: warmCommand,
|
|
603
603
|
company: companyCommand,
|
|
604
604
|
campaigns: campaignsCommand,
|
|
605
|
-
crm: () => import("./crm-
|
|
605
|
+
crm: () => import("./crm-SNIUADNK.js").then((m) => m.crmCommand)
|
|
606
606
|
}
|
|
607
607
|
});
|
|
608
608
|
export {
|
|
609
609
|
accountsCommand
|
|
610
610
|
};
|
|
611
|
-
//# sourceMappingURL=accounts-
|
|
611
|
+
//# sourceMappingURL=accounts-6LSBBXKA.js.map
|
|
@@ -30,26 +30,26 @@ Examples:
|
|
|
30
30
|
Full guide: __tooling__/docs/tools/baker/actions.md`
|
|
31
31
|
},
|
|
32
32
|
subCommands: {
|
|
33
|
-
list: () => import("./list-
|
|
34
|
-
log: () => import("./log-
|
|
35
|
-
draft: () => import("./draft-
|
|
36
|
-
get: () => import("./get-
|
|
37
|
-
status: () => import("./status-
|
|
38
|
-
claim: () => import("./claim-
|
|
39
|
-
release: () => import("./release-
|
|
40
|
-
create: () => import("./create-
|
|
41
|
-
update: () => import("./update-
|
|
42
|
-
complete: () => import("./complete-
|
|
43
|
-
discard: () => import("./discard-
|
|
44
|
-
reopen: () => import("./reopen-
|
|
45
|
-
assign: () => import("./assign-
|
|
46
|
-
members: () => import("./members-
|
|
47
|
-
link: () => import("./link-
|
|
48
|
-
unlink: () => import("./unlink-
|
|
49
|
-
tags: () => import("./tags-
|
|
33
|
+
list: () => import("./list-AQMGXI4N.js").then((m) => m.listCommand),
|
|
34
|
+
log: () => import("./log-MUPKKYSJ.js").then((m) => m.logCommand),
|
|
35
|
+
draft: () => import("./draft-GCUXNPVH.js").then((m) => m.draftCommand),
|
|
36
|
+
get: () => import("./get-6RQFDAIN.js").then((m) => m.getCommand),
|
|
37
|
+
status: () => import("./status-ZX5WM5PJ.js").then((m) => m.statusCommand),
|
|
38
|
+
claim: () => import("./claim-25JJM4AG.js").then((m) => m.claimCommand),
|
|
39
|
+
release: () => import("./release-C74JOYDA.js").then((m) => m.releaseCommand),
|
|
40
|
+
create: () => import("./create-2D7AIFJI.js").then((m) => m.createCommand),
|
|
41
|
+
update: () => import("./update-PNRNYXUW.js").then((m) => m.updateCommand),
|
|
42
|
+
complete: () => import("./complete-DRMOTC2W.js").then((m) => m.completeCommand),
|
|
43
|
+
discard: () => import("./discard-JS2YJUIM.js").then((m) => m.discardCommand),
|
|
44
|
+
reopen: () => import("./reopen-XI53RP7R.js").then((m) => m.reopenCommand),
|
|
45
|
+
assign: () => import("./assign-O6QNAZD5.js").then((m) => m.assignCommand),
|
|
46
|
+
members: () => import("./members-3U6GINDF.js").then((m) => m.membersCommand),
|
|
47
|
+
link: () => import("./link-4GGAQAVH.js").then((m) => m.linkCommand),
|
|
48
|
+
unlink: () => import("./unlink-KMWDKVIC.js").then((m) => m.unlinkCommand),
|
|
49
|
+
tags: () => import("./tags-4PXXFIPU.js").then((m) => m.tagsCommand)
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
export {
|
|
53
53
|
actionsCommand
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=actions-
|
|
55
|
+
//# sourceMappingURL=actions-WH5C6Q7I.js.map
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
testimonialSourceRefreshIntervalSchema,
|
|
8
8
|
testimonialSourceTypeSchema,
|
|
9
9
|
testimonialSourcesAddRequestSchema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-K6WVV74H.js";
|
|
11
11
|
import "./chunk-GXDLWBOY.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-TEINLN64.js";
|
|
13
13
|
import "./chunk-ZJWUBJYQ.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-NE4F3FHN.js";
|
|
15
15
|
import {
|
|
16
16
|
apiPost
|
|
17
17
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -101,4 +101,4 @@ export {
|
|
|
101
101
|
addCommand,
|
|
102
102
|
addSourceHints
|
|
103
103
|
};
|
|
104
|
-
//# sourceMappingURL=add-
|
|
104
|
+
//# sourceMappingURL=add-BZ4QPLK4.js.map
|
|
@@ -6,16 +6,16 @@ import {
|
|
|
6
6
|
stepNameKey,
|
|
7
7
|
walkNodes,
|
|
8
8
|
writeFlowTree
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-L5J3S6B6.js";
|
|
10
10
|
import {
|
|
11
11
|
flowCatalogEntry,
|
|
12
12
|
flowCatalogTypes,
|
|
13
13
|
flowNodeTriggers
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-K6WVV74H.js";
|
|
15
15
|
import "./chunk-GXDLWBOY.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-TEINLN64.js";
|
|
17
17
|
import "./chunk-ZJWUBJYQ.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-NE4F3FHN.js";
|
|
19
19
|
import {
|
|
20
20
|
registerSchema,
|
|
21
21
|
writeJson
|
|
@@ -149,6 +149,29 @@ function freeSideEffectId(type, taken) {
|
|
|
149
149
|
if (!taken.has(candidate)) return candidate;
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
+
function sameTrackingSideEffect(node, type, triggerId) {
|
|
153
|
+
if (flowCatalogEntry("side-effect", type)?.owners?.tagIds !== "tags") return null;
|
|
154
|
+
const effects = Array.isArray(node.sideEffects) ? node.sideEffects : [];
|
|
155
|
+
for (const raw of effects) {
|
|
156
|
+
const effect = raw;
|
|
157
|
+
if (effect?.type === type && effect.triggerId === triggerId) return effect;
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
function refuseSecondPixel(slug, node, type, triggerId) {
|
|
162
|
+
const already = sameTrackingSideEffect(node, type, triggerId);
|
|
163
|
+
if (!already) return;
|
|
164
|
+
const event = typeof already.eventName === "string" ? ` (event "${already.eventName}")` : "";
|
|
165
|
+
writeJson({
|
|
166
|
+
ok: false,
|
|
167
|
+
error: {
|
|
168
|
+
code: "VALIDATION_ERROR",
|
|
169
|
+
message: `"${String(node.name ?? node.id)}" already reports \`${triggerId}\` to ${type} as "${String(already.id)}"${event}. A second one would count every conversion twice.`,
|
|
170
|
+
fix: `Edit "${String(already.id)}" in ${flowDataPath(slug)} instead of adding another.`
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
152
175
|
function pendingItem(target, nodeId, kind, sideEffectId) {
|
|
153
176
|
return {
|
|
154
177
|
target,
|
|
@@ -167,7 +190,7 @@ function configureHints(slug, nodeId, id, type, needsCard) {
|
|
|
167
190
|
}
|
|
168
191
|
registerSchema({
|
|
169
192
|
command: "flows.add-side-effect",
|
|
170
|
-
description: "Add a side effect to a step with a valid skeleton \u2014 encryptedConfig:null for a CRM, a tagIds slot for a pixel, and no oauthProviderId key.
|
|
193
|
+
description: "Add a side effect to a step with a valid skeleton \u2014 encryptedConfig:null for a CRM, a tagIds slot for a pixel, and no oauthProviderId key. Then set where it sends with `baker flows connect` (an email: --email/--subject, written by you); only a typed secret goes to request_flow_input.",
|
|
171
194
|
args: {
|
|
172
195
|
slug: { type: "positional", description: "Form slug", required: true },
|
|
173
196
|
node: { type: "string", description: "Id of the step that fires it", required: true },
|
|
@@ -239,6 +262,7 @@ var addSideEffectCommand = defineCommand({
|
|
|
239
262
|
process.exit(1);
|
|
240
263
|
}
|
|
241
264
|
const triggerId = trigger.triggerId;
|
|
265
|
+
refuseSecondPixel(slug, node, type, triggerId);
|
|
242
266
|
const sideEffect = concrete(entry.skeleton, { id, triggerId });
|
|
243
267
|
existing.push(sideEffect);
|
|
244
268
|
writeFlowTree(slug, tree);
|
|
@@ -260,7 +284,7 @@ var addSideEffectCommand = defineCommand({
|
|
|
260
284
|
String(node.id),
|
|
261
285
|
id,
|
|
262
286
|
type,
|
|
263
|
-
needsUser.some(([, owner]) => owner === "request_flow_input")
|
|
287
|
+
needsUser.some(([, owner]) => owner === "request_flow_input" || owner === "connect")
|
|
264
288
|
),
|
|
265
289
|
...needsUser.some(([, owner]) => owner === "tags") ? [
|
|
266
290
|
"Fill `tagIds` with a real ref from `baker tags list`, or stage the tag first with the `tags` skill. Never invent one."
|
|
@@ -275,6 +299,7 @@ export {
|
|
|
275
299
|
addSideEffectCommand,
|
|
276
300
|
freeSideEffectId,
|
|
277
301
|
resolveTrigger,
|
|
302
|
+
sameTrackingSideEffect,
|
|
278
303
|
stepNameRefusal
|
|
279
304
|
};
|
|
280
|
-
//# sourceMappingURL=add-
|
|
305
|
+
//# sourceMappingURL=add-TRSKOIO6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/flows/add.ts"],"sourcesContent":["/**\n * `add-node` and `add-side-effect`: emit a valid skeleton and splice it in.\n *\n * The point is not to save typing — it is that the skeleton is right. A node\n * needs a fresh UUID, an explicit `condition: null`, the correct `nodeData`\n * discriminator, and — for a widget — `form.external: null` rather than an\n * invented resource. A side effect needs `encryptedConfig: null` and no\n * `oauthProviderId` key at all. Every one of those is a rule the flow-builder\n * skill used to spend prose on, and each was a real defect when got wrong.\n *\n * Deliberately scoped to creating the skeleton. Copy, conditions, autofill and\n * the `ai` field stay hand-edited: they are judgement, and a flag-based API for\n * them would be worse than JSON.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { type FlowConfigStatus, flowCatalogEntry, flowCatalogTypes, flowNodeTriggers } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport {\n flowDataPath,\n isUsableStepNameKey,\n readFlowTree,\n requestFlowInputCall,\n stepNameKey,\n walkNodes,\n writeFlowTree,\n} from \"./shared.ts\";\n\ntype AnyRecord = Record<string, unknown>;\n\nfunction unknownType(kind: \"node\" | \"side-effect\", type: string): never {\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `No ${kind} type \"${type}\".`,\n fix: `Known types: ${flowCatalogTypes(kind).join(\", \")}. See: baker flows schema ${kind}`,\n },\n });\n process.exit(1);\n}\n\n/** Replace the catalog's `<placeholder>` strings with real values where we have them. */\nfunction concrete(skeleton: AnyRecord, replacements: Record<string, unknown>): AnyRecord {\n return { ...structuredClone(skeleton), ...replacements };\n}\n\n/**\n * Whether this name can be a step in this form, and why not when it cannot.\n *\n * Both answers are about the same fact: the name becomes a constant in the\n * form's generated `_query.ts` (`export const <KEY> = \"<node id>\";`), and\n * `flow-typed.mjs` writes it without checking either that it parses or that no\n * other step already produced it. So both failures land on a generated file\n * rather than on the name that caused them — one as a syntax error, one as\n * `Duplicate flow node name` — and `_query.ts` stops regenerating for the whole\n * form. A name is minted once, here, which makes here the only cheap place to\n * say so.\n *\n * Returns `null` when the name is fine.\n */\nexport function stepNameRefusal(nodes: readonly AnyRecord[], name: string): { message: string; fix: string } | null {\n const key = stepNameKey(name);\n if (!isUsableStepNameKey(key)) {\n return {\n message: `\"${name}\" cannot be a step name: it becomes the constant \\`${key || \"(empty)\"}\\`, which is not a valid identifier.`,\n fix: 'A step name becomes `export const <NAME> = …` in the form\\'s generated code, so it must start with a letter and hold only letters, digits, spaces and dashes. Try \"Your Details\" rather than \"1. Your details\".',\n };\n }\n const clash = nodes.find((node) => typeof node.name === \"string\" && stepNameKey(node.name) === key);\n if (!clash) return null;\n return {\n message: `This form already has a step named \"${clash.name}\", which collides with \"${name}\".`,\n fix: `Both become the constant \\`${key}\\`, and the form's generated code cannot hold it twice. Pick a name that differs by more than case, spacing or punctuation.`,\n };\n}\n\nregisterSchema({\n command: \"flows.add-node\",\n description:\n \"Add a step to a form with a valid skeleton — fresh UUID, explicit condition, correct nodeData discriminator, and form.external:null for a widget. Author its copy and conditions afterwards by editing _data.json.\",\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n type: { type: \"string\", description: \"Node type (see: baker flows schema node)\", required: true },\n name: { type: \"string\", description: \"Step name — unique, Title Case\", required: true },\n parent: { type: \"string\", description: \"Parent node id. Omit to append to the root's children.\", required: false },\n },\n});\n\nexport const addNodeCommand = defineCommand({\n meta: {\n name: \"add-node\",\n description:\n 'Add a step to a form, with the skeleton its type requires. Example: baker flows add-node contact --type customForm --name \"Contact Info\"',\n },\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n type: { type: \"string\", description: \"Node type\", required: true },\n name: { type: \"string\", description: \"Step name — unique, Title Case\", required: true },\n parent: { type: \"string\", description: \"Parent node id (default: the root)\" },\n },\n run: ({ args }) => {\n const slug = String(args.slug);\n const type = String(args.type);\n // Trimmed before anything reads it, because the generator does not trim:\n // ` Contact Info ` becomes the constant `_CONTACT_INFO_`, which is legal,\n // permanent, and not what anyone typed.\n const name = String(args.name).trim();\n const entry = flowCatalogEntry(\"node\", type) ?? unknownType(\"node\", type);\n\n const tree = readFlowTree(slug);\n const nodes = walkNodes(tree);\n\n const refusal = stepNameRefusal(nodes, name);\n if (refusal) {\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: refusal.message.replace(\"This form\", `\"${slug}\"`),\n fix: refusal.fix,\n },\n });\n process.exit(1);\n }\n\n const parent = args.parent ? nodes.find((node) => node.id === String(args.parent)) : tree;\n if (!parent) {\n writeJson({\n ok: false,\n error: {\n code: \"NOT_FOUND\",\n message: `No node with id \"${args.parent}\" in \"${slug}\".`,\n fix: `Nodes in this form: ${nodes.map((node) => `${node.id} (${node.name})`).join(\", \")}`,\n },\n });\n process.exit(1);\n }\n\n const node = concrete(entry.skeleton, { id: randomUUID(), name });\n if (!Array.isArray(parent.children)) parent.children = [];\n (parent.children as AnyRecord[]).push(node);\n writeFlowTree(slug, tree);\n\n writeJson({\n ok: true,\n data: { slug, nodeId: node.id, type, parentId: parent.id ?? null, path: flowDataPath(slug) },\n hints: [\n `Now fill in this step's \\`ai\\` field and its copy by editing ${flowDataPath(slug)}.`,\n // Said on every step added, because the moment a Form's shape changes\n // is the moment its outcome can move — and a Form nobody named an\n // outcome for reports zero conversions rather than an error.\n `Say what this Form counts before you finish: \\`baker analytics conversions --flow ${slug}\\` lists every ending already spelled as an event key, including this step's. Nothing in _data.json decides it.`,\n ...(entry.owners?.[\"nodeData.form.external\"] === \"request_flow_input\"\n ? [\n `Pick this ${type} step's resource: ${requestFlowInputCall(slug, pendingItem(\"node\", String(node.id), type))}.`,\n ]\n : []),\n ...(entry.gotcha ? [entry.gotcha] : []),\n ],\n });\n },\n});\n\n/**\n * The `triggerId` a side effect on this step has to carry.\n *\n * This is the one field on a side effect that is decided by its STEP rather\n * than by its own type, and getting it wrong is silent in every direction:\n * `fireSideEffects` filters on `triggerId` equality, so a mismatch means the\n * side effect never runs — no error, no log, nothing half-written. Every\n * validator in the repo passes, because the file is valid; it just does nothing.\n *\n * Taking the skeleton's default was that failure. `SIDE_EFFECT_ENVELOPE` carries\n * `customForm.onFormSubmitted`, which is right for a `customForm` step and wrong\n * for the five widget types that raise an id of their own — so the command that\n * exists to emit a skeleton the agent cannot get wrong emitted a dead side\n * effect on any booking or embedded-form step.\n */\nexport type TriggerChoice = { ok: true; triggerId: string } | { ok: false; message: string; fix: string };\n\nexport function resolveTrigger(node: AnyRecord, requested: string | undefined): TriggerChoice {\n const triggers = flowNodeTriggers(node.nodeData);\n const where = `Step \"${String(node.name ?? node.id)}\"${triggers.type ? ` (a ${triggers.type} step)` : \"\"}`;\n const raises = triggers.available.length > 0 ? `It raises: ${triggers.available.join(\", \")}.` : (triggers.why ?? \"\");\n const no = (message: string, fix: string): TriggerChoice => ({ ok: false, message, fix });\n\n // A node type the table does not cover is a table that has fallen behind, not\n // a form that is wrong — so an explicit trigger is taken at its word there.\n // Refusing instead would let a stale table reject a form the engine handles.\n if (!triggers.known) {\n return requested\n ? { ok: true, triggerId: requested }\n : no(`${where} is not a node type this command knows, so --trigger is required.`, triggers.why ?? \"\");\n }\n\n if (requested) {\n return triggers.available.includes(requested)\n ? { ok: true, triggerId: requested }\n : no(\n `${where} never raises \\`${requested}\\`, so a side effect carrying it would be written, pass every check, and never run.`,\n raises,\n );\n }\n\n return triggers.completion\n ? { ok: true, triggerId: triggers.completion }\n : no(`${where} has no trigger a side effect can answer.`, raises);\n}\n\n/**\n * The first `se-{type}-{n}` nobody is using.\n *\n * Counting the same-type side effects instead was wrong whenever the numbering\n * had a gap — a form holding `se-hubspotForm-1` and `se-hubspotForm-3`, or one\n * where `se-meta-1` was deleted and `se-meta-2` left behind. The count then\n * names an id that already exists and the command refuses, which is the one\n * outcome a skeleton-minting command should never produce for a form it can see\n * in full.\n */\nexport function freeSideEffectId(type: string, taken: ReadonlySet<string>): string {\n for (let n = 1; ; n++) {\n const candidate = `se-${type}-${n}`;\n if (!taken.has(candidate)) return candidate;\n }\n}\n\n/**\n * The pixel already reporting this step's moment to the same platform, if any.\n *\n * A second one double-counts every conversion, and its own `--id` slips past the\n * id check. Only pixel types (those fed a tag ref) are one-per-moment: two\n * emails or two CRMs on one step are a real need.\n */\nexport function sameTrackingSideEffect(node: AnyRecord, type: string, triggerId: string): AnyRecord | null {\n if (flowCatalogEntry(\"side-effect\", type)?.owners?.tagIds !== \"tags\") return null;\n const effects = Array.isArray(node.sideEffects) ? (node.sideEffects as unknown[]) : [];\n for (const raw of effects) {\n const effect = raw as AnyRecord | null;\n if (effect?.type === type && effect.triggerId === triggerId) return effect;\n }\n return null;\n}\n\n/** Exits when this step already reports the moment to the same platform. */\nfunction refuseSecondPixel(slug: string, node: AnyRecord, type: string, triggerId: string): void {\n const already = sameTrackingSideEffect(node, type, triggerId);\n if (!already) return;\n const event = typeof already.eventName === \"string\" ? ` (event \"${already.eventName}\")` : \"\";\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `\"${String(node.name ?? node.id)}\" already reports \\`${triggerId}\\` to ${type} as \"${String(already.id)}\"${event}. A second one would count every conversion twice.`,\n fix: `Edit \"${String(already.id)}\" in ${flowDataPath(slug)} instead of adding another.`,\n },\n });\n process.exit(1);\n}\n\n/** The one row `requestFlowInputCall` needs, for an item this command just added unconfigured. */\nfunction pendingItem(\n target: \"node\" | \"sideEffect\",\n nodeId: string,\n kind: string,\n sideEffectId?: string,\n): FlowConfigStatus {\n return {\n target,\n nodeId,\n kind,\n status: `${kind} — not configured`,\n needsInput: true,\n ...(sideEffectId ? { sideEffectId } : {}),\n };\n}\n\nfunction configureHints(slug: string, nodeId: string, id: string, type: string, needsCard: boolean): string[] {\n if (!needsCard) return [];\n return [\n `Configure it: ${requestFlowInputCall(slug, pendingItem(\"sideEffect\", nodeId, type, id))}. Read the destination off that call's result.`,\n ];\n}\n\nregisterSchema({\n command: \"flows.add-side-effect\",\n description:\n \"Add a side effect to a step with a valid skeleton — encryptedConfig:null for a CRM, a tagIds slot for a pixel, and no oauthProviderId key. Then set where it sends with `baker flows connect` (an email: --email/--subject, written by you); only a typed secret goes to request_flow_input.\",\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n node: { type: \"string\", description: \"Id of the step that fires it\", required: true },\n type: { type: \"string\", description: \"Side-effect type (see: baker flows schema side-effect)\", required: true },\n id: { type: \"string\", description: \"Side-effect id. Defaults to se-{type}-{n}.\", required: false },\n trigger: {\n type: \"string\",\n description:\n \"triggerId. Defaults to the moment the step named by --node completes, which is a different id per node type. Pass this only for a non-completion moment (a HubSpot form's onFormReady, a Calendly page view, one of several iframe events); an id the step never raises is refused.\",\n required: false,\n },\n },\n});\n\nexport const addSideEffectCommand = defineCommand({\n meta: {\n name: \"add-side-effect\",\n description:\n \"Add a side effect to a step, with the skeleton its type requires. Example: baker flows add-side-effect contact --node <id> --type googleSpreadsheet\",\n },\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n node: { type: \"string\", description: \"Id of the step that fires it\", required: true },\n type: { type: \"string\", description: \"Side-effect type\", required: true },\n id: { type: \"string\", description: \"Side-effect id (default se-{type}-{n})\" },\n trigger: {\n type: \"string\",\n description: \"triggerId, for a non-completion moment. Default: whatever the step named by --node raises\",\n },\n },\n run: ({ args }) => {\n const slug = String(args.slug);\n const type = String(args.type);\n const entry = flowCatalogEntry(\"side-effect\", type) ?? unknownType(\"side-effect\", type);\n\n const tree = readFlowTree(slug);\n const nodes = walkNodes(tree);\n const node = nodes.find((candidate) => candidate.id === String(args.node));\n if (!node) {\n writeJson({\n ok: false,\n error: {\n code: \"NOT_FOUND\",\n message: `No node with id \"${args.node}\" in \"${slug}\".`,\n fix: `Nodes in this form: ${nodes.map((candidate) => `${candidate.id} (${candidate.name})`).join(\", \")}`,\n },\n });\n process.exit(1);\n }\n\n if (!Array.isArray(node.sideEffects)) node.sideEffects = [];\n const existing = node.sideEffects as AnyRecord[];\n const takenIds = new Set(\n nodes.flatMap((n) => ((n.sideEffects as AnyRecord[] | undefined) ?? []).map((se) => String(se?.id ?? \"\"))),\n );\n const id = args.id ? String(args.id) : freeSideEffectId(type, takenIds);\n\n // Only an id the caller chose can still collide — the generated one is free\n // by construction.\n if (takenIds.has(id)) {\n writeJson({\n ok: false,\n error: {\n code: \"VALIDATION_ERROR\",\n message: `\"${slug}\" already has a side effect with id \"${id}\".`,\n fix: `Drop --id to be given a free one (${freeSideEffectId(type, takenIds)}), or pick another.`,\n },\n });\n process.exit(1);\n }\n\n const trigger = resolveTrigger(node, args.trigger ? String(args.trigger) : undefined);\n if (!trigger.ok) {\n writeJson({\n ok: false,\n error: { code: \"VALIDATION_ERROR\", message: trigger.message, ...(trigger.fix ? { fix: trigger.fix } : {}) },\n });\n process.exit(1);\n }\n const triggerId = trigger.triggerId;\n\n refuseSecondPixel(slug, node, type, triggerId);\n\n const sideEffect = concrete(entry.skeleton, { id, triggerId });\n existing.push(sideEffect);\n writeFlowTree(slug, tree);\n\n const needsUser = Object.entries(entry.owners ?? {}).filter(([, owner]) => owner !== \"agent\");\n writeJson({\n ok: true,\n data: { slug, nodeId: node.id, sideEffectId: id, type, triggerId, path: flowDataPath(slug) },\n hints: [\n `Fires on \\`${triggerId}\\` — the moment \"${String(node.name ?? node.id)}\" raises. A side effect only runs when its triggerId is the one its own step raises, so this is set from the step, never from the side-effect type.`,\n // A pixel side effect is the thing most often mistaken for \"setting the\n // conversion\". It tells the ad platform; it tells Baker nothing, and a\n // Form can fire every pixel it has while every Baker report says it\n // converted nobody.\n ...(needsUser.some(([, owner]) => owner === \"tags\")\n ? [\n `This reports the conversion to ${type}. It does NOT make Baker count anything: what Baker counts is a named event, set with \\`baker analytics conversions --flow ${slug}\\`. Do both — they are two different systems asked the same question.`,\n ]\n : []),\n ...configureHints(\n slug,\n String(node.id),\n id,\n type,\n needsUser.some(([, owner]) => owner === \"request_flow_input\" || owner === \"connect\"),\n ),\n ...(needsUser.some(([, owner]) => owner === \"tags\")\n ? [\n \"Fill `tagIds` with a real ref from `baker tags list`, or stage the tag first with the `tags` skill. Never invent one.\",\n ]\n : []),\n ...(entry.gotcha ? [entry.gotcha] : []),\n ],\n });\n },\n});\n"],"mappings":"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","names":["node"]}
|
|
@@ -27,14 +27,14 @@ Examples:
|
|
|
27
27
|
Full guides: __tooling__/docs/tools/baker/ads-<platform>.md (google|meta|linkedin|x|chatgpt)`
|
|
28
28
|
},
|
|
29
29
|
subCommands: {
|
|
30
|
-
google: () => import("./google-
|
|
30
|
+
google: () => import("./google-M7KEXVK5.js").then((m) => m.googleCommand),
|
|
31
31
|
meta: () => import("./meta-A7KM6TF5.js").then((m) => m.metaCommand),
|
|
32
|
-
linkedin: () => import("./linkedin-
|
|
33
|
-
x: () => import("./x-
|
|
32
|
+
linkedin: () => import("./linkedin-I6JDSTRB.js").then((m) => m.linkedinCommand),
|
|
33
|
+
x: () => import("./x-YXABYM5U.js").then((m) => m.xCommand),
|
|
34
34
|
chatgpt: () => import("./chatgpt-7W75X3ER.js").then((m) => m.chatgptCommand)
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
37
|
export {
|
|
38
38
|
adsCommand
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=ads-
|
|
40
|
+
//# sourceMappingURL=ads-6UG66KA5.js.map
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
advertisersHints
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NECTN6N7.js";
|
|
4
4
|
import {
|
|
5
5
|
RESEARCH_DATA_NOTE,
|
|
6
6
|
handleResearchError,
|
|
7
7
|
writeResearchHints,
|
|
8
8
|
writeResearchJson,
|
|
9
9
|
writeResearchOutput
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-WNFIJAUO.js";
|
|
11
11
|
import {
|
|
12
12
|
buildResearchQueryContext,
|
|
13
13
|
warnDefaults
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-LIQ4SQ2T.js";
|
|
15
|
+
import "./chunk-XCM6XWOB.js";
|
|
16
|
+
import "./chunk-K6WVV74H.js";
|
|
17
|
+
import "./chunk-GXDLWBOY.js";
|
|
18
|
+
import "./chunk-TEINLN64.js";
|
|
19
|
+
import "./chunk-ZJWUBJYQ.js";
|
|
20
|
+
import "./chunk-NE4F3FHN.js";
|
|
17
21
|
import {
|
|
18
22
|
apiPost
|
|
19
23
|
} from "./chunk-XBOK23HI.js";
|
|
@@ -28,7 +32,7 @@ import "./chunk-YQSBHWOI.js";
|
|
|
28
32
|
import { defineCommand } from "citty";
|
|
29
33
|
registerSchema({
|
|
30
34
|
command: "research.advertisers",
|
|
31
|
-
description: 'Returns a ranked list of domains competing for one keyword in Google, with avg SERP position, relevance rating, estimated traffic value and visibility \u2014 domain economics, not ad copy. Despite the name it returns no headlines, descriptions or creative of any kind; for a competitor\'s actual ad copy use `baker winning-ads content <adId>` (Meta/LinkedIn
|
|
35
|
+
description: 'Returns a ranked list of domains competing for one keyword in Google, with avg SERP position, relevance rating, estimated traffic value and visibility \u2014 domain economics, not ad copy. Despite the name it returns no headlines, descriptions or creative of any kind; for a competitor\'s actual ad copy use `baker research google-ads <competitor.com> --copy` (Google) or `baker winning-ads content <adId>` (Meta/LinkedIn). Start here: `baker research advertisers "<keyword>" --location <cc> --language <code>` to size up who owns a term. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.',
|
|
32
36
|
args: {
|
|
33
37
|
keyword: {
|
|
34
38
|
type: "string",
|
|
@@ -59,7 +63,7 @@ var FIELDS = {
|
|
|
59
63
|
var advertisersCommand = defineCommand({
|
|
60
64
|
meta: {
|
|
61
65
|
name: "advertisers",
|
|
62
|
-
description: `Domains competing for a keyword in Google SERPs, with position, relevance, traffic value and visibility. Returns NO ad copy \u2014 for a competitor's headlines and body copy use \`baker winning-ads content <adId>\` (Meta/LinkedIn
|
|
66
|
+
description: `Domains competing for a keyword in Google SERPs, with position, relevance, traffic value and visibility. Returns NO ad copy \u2014 for a competitor's headlines and body copy use \`baker research google-ads <competitor.com> --copy\` (Google) or \`baker winning-ads content <adId>\` (Meta/LinkedIn).
|
|
63
67
|
|
|
64
68
|
Examples:
|
|
65
69
|
baker research advertisers "running shoes"
|
|
@@ -113,4 +117,4 @@ Examples:
|
|
|
113
117
|
export {
|
|
114
118
|
advertisersCommand
|
|
115
119
|
};
|
|
116
|
-
//# sourceMappingURL=advertisers-
|
|
120
|
+
//# sourceMappingURL=advertisers-OABQDELT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/research/advertisers.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { buildResearchQueryContext, warnDefaults } from \"../../geo-context.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { advertisersHints } from \"./hints.ts\";\nimport {\n handleResearchError,\n RESEARCH_DATA_NOTE,\n writeResearchHints,\n writeResearchJson,\n writeResearchOutput,\n} from \"./output.ts\";\n\nregisterSchema({\n command: \"research.advertisers\",\n description:\n 'Returns a ranked list of domains competing for one keyword in Google, with avg SERP position, relevance rating, estimated traffic value and visibility — domain economics, not ad copy. Despite the name it returns no headlines, descriptions or creative of any kind; for a competitor\\'s actual ad copy use `baker research google-ads <competitor.com> --copy` (Google) or `baker winning-ads content <adId>` (Meta/LinkedIn). Start here: `baker research advertisers \"<keyword>\" --location <cc> --language <code>` to size up who owns a term. If --location and --language are omitted, defaults to United States (us) and English (en). The response includes a query_context object showing which location/language were used.',\n args: {\n keyword: {\n type: \"string\",\n description:\n \"Keyword to search (positional). One search term, not a brand or a domain — this is a SERP query, not an advertiser lookup\",\n required: true,\n },\n location: {\n type: \"string\",\n description:\n \"Country code (us, uk, es, de...) or DataForSEO location code. Defaults to us (United States) if omitted — always set this for non-US markets\",\n required: false,\n },\n language: {\n type: \"string\",\n description:\n \"Language code or name (en, es, spanish...). Defaults to en (English) if omitted — always set this for non-English markets\",\n required: false,\n },\n limit: { type: \"string\", description: \"Max results (default: 20, max: 100)\", required: false },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n});\n\ninterface Advertiser {\n domain: string;\n avg_position: number;\n rating: number;\n etv: number;\n visibility: number;\n}\n\nconst FIELDS: Record<string, string> = {\n domain: \"Competing domain (no ad copy is returned — see hints)\",\n avg_position: \"Average SERP position (1 = top)\",\n rating: \"Domain relevance rating (0-100)\",\n etv: \"Estimated traffic value (USD)\",\n visibility: \"SERP visibility score (0-1)\",\n};\n\nexport const advertisersCommand = defineCommand({\n meta: {\n name: \"advertisers\",\n description: `Domains competing for a keyword in Google SERPs, with position, relevance, traffic value and visibility. Returns NO ad copy — for a competitor's headlines and body copy use \\`baker research google-ads <competitor.com> --copy\\` (Google) or \\`baker winning-ads content <adId>\\` (Meta/LinkedIn).\n\nExamples:\n baker research advertisers \"running shoes\"\n baker research advertisers \"crm software\" --location uk --limit 10\n baker research advertisers \"zapatos\" --location es --language spanish`,\n },\n args: {\n keyword: { type: \"positional\", description: \"Keyword to search\", required: true },\n location: { type: \"string\", description: \"Country code or location code (default: us)\", required: false },\n language: { type: \"string\", description: \"Language code or name (default: en)\", required: false },\n limit: { type: \"string\", description: \"Max results (default: 20, max: 100)\", required: false },\n output: { type: \"string\", description: \"Format: json|csv|md|jsonl\", required: false, default: \"json\" },\n \"no-cache\": { type: \"boolean\", description: \"Skip server cache, hit API directly\", required: false },\n },\n run: async ({ args }) => {\n const keyword = args.keyword as string;\n const location = (args.location as string) || undefined;\n const language = (args.language as string) || undefined;\n const limit = args.limit ? Number(args.limit) : undefined;\n const skipCache = args[\"no-cache\"] ? true : undefined;\n const queryContext = buildResearchQueryContext(location, language);\n\n try {\n const data = await apiPost<Advertiser[]>(\"/api/research/advertisers\", {\n keyword,\n location,\n language,\n limit,\n skipCache,\n });\n\n warnDefaults(queryContext);\n const format = (args.output as string) || \"json\";\n const hints = advertisersHints(data.length, queryContext);\n if (format !== \"json\") {\n writeResearchOutput(data as unknown as Array<Record<string, unknown>>, format);\n writeResearchHints(hints, format);\n return;\n }\n writeResearchJson({\n ok: true,\n data,\n fields: FIELDS,\n note: RESEARCH_DATA_NOTE,\n query_context: queryContext,\n hints,\n });\n } catch (err) {\n handleResearchError(err);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAa9B,eAAe;AAAA,EACb,SAAS;AAAA,EACT,aACE;AAAA,EACF,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,OAAO,EAAE,MAAM,UAAU,aAAa,uCAAuC,UAAU,MAAM;AAAA,IAC7F,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AACF,CAAC;AAUD,IAAM,SAAiC;AAAA,EACrC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,YAAY;AACd;AAEO,IAAM,qBAAqB,cAAc;AAAA,EAC9C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,EAAE,MAAM,cAAc,aAAa,qBAAqB,UAAU,KAAK;AAAA,IAChF,UAAU,EAAE,MAAM,UAAU,aAAa,+CAA+C,UAAU,MAAM;AAAA,IACxG,UAAU,EAAE,MAAM,UAAU,aAAa,uCAAuC,UAAU,MAAM;AAAA,IAChG,OAAO,EAAE,MAAM,UAAU,aAAa,uCAAuC,UAAU,MAAM;AAAA,IAC7F,QAAQ,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,OAAO,SAAS,OAAO;AAAA,IACrG,YAAY,EAAE,MAAM,WAAW,aAAa,uCAAuC,UAAU,MAAM;AAAA,EACrG;AAAA,EACA,KAAK,OAAO,EAAE,KAAK,MAAM;AACvB,UAAM,UAAU,KAAK;AACrB,UAAM,WAAY,KAAK,YAAuB;AAC9C,UAAM,WAAY,KAAK,YAAuB;AAC9C,UAAM,QAAQ,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI;AAChD,UAAM,YAAY,KAAK,UAAU,IAAI,OAAO;AAC5C,UAAM,eAAe,0BAA0B,UAAU,QAAQ;AAEjE,QAAI;AACF,YAAM,OAAO,MAAM,QAAsB,6BAA6B;AAAA,QACpE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,mBAAa,YAAY;AACzB,YAAM,SAAU,KAAK,UAAqB;AAC1C,YAAM,QAAQ,iBAAiB,KAAK,QAAQ,YAAY;AACxD,UAAI,WAAW,QAAQ;AACrB,4BAAoB,MAAmD,MAAM;AAC7E,2BAAmB,OAAO,MAAM;AAChC;AAAA,MACF;AACA,wBAAkB;AAAA,QAChB,IAAI;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,eAAe;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,0BAAoB,GAAG;AAAA,IACzB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
flowEventKeys,
|
|
3
3
|
flowNodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4Z7DEN75.js";
|
|
5
5
|
import {
|
|
6
6
|
flowDataPath,
|
|
7
7
|
flowExists,
|
|
8
8
|
listFlowSlugs,
|
|
9
9
|
readFlowTree
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-L5J3S6B6.js";
|
|
11
11
|
import {
|
|
12
12
|
peopleArgs,
|
|
13
13
|
peopleLimitError
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
INGEST_ARRIVALS_MAX,
|
|
20
20
|
eventIngestUrl,
|
|
21
21
|
ingestBrief
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-DQMZXK27.js";
|
|
23
23
|
import "./chunk-GRQ2AXDX.js";
|
|
24
24
|
import {
|
|
25
25
|
ConversionArgsError,
|
|
@@ -47,11 +47,11 @@ import {
|
|
|
47
47
|
} from "./chunk-VFIOJD5M.js";
|
|
48
48
|
import {
|
|
49
49
|
flowNodeTriggers
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-K6WVV74H.js";
|
|
51
51
|
import "./chunk-GXDLWBOY.js";
|
|
52
|
-
import "./chunk-
|
|
52
|
+
import "./chunk-TEINLN64.js";
|
|
53
53
|
import "./chunk-ZJWUBJYQ.js";
|
|
54
|
-
import "./chunk-
|
|
54
|
+
import "./chunk-NE4F3FHN.js";
|
|
55
55
|
import {
|
|
56
56
|
ApiError,
|
|
57
57
|
apiPost
|
|
@@ -1941,7 +1941,7 @@ Full guide: __tooling__/docs/tools/baker/analytics.md`
|
|
|
1941
1941
|
tracking: trackingCommand,
|
|
1942
1942
|
arrivals: arrivalsCommand,
|
|
1943
1943
|
"sending-events": sendingEventsCommand,
|
|
1944
|
-
sources: () => import("./sources-
|
|
1944
|
+
sources: () => import("./sources-GEB6OEGY.js").then((m) => m.sourcesCommand),
|
|
1945
1945
|
"website-tag": websiteTagCommand,
|
|
1946
1946
|
sites: sitesCommand,
|
|
1947
1947
|
presets: presetsCommand
|
|
@@ -1955,4 +1955,4 @@ export {
|
|
|
1955
1955
|
requestBody,
|
|
1956
1956
|
sendingEventsAddress
|
|
1957
1957
|
};
|
|
1958
|
-
//# sourceMappingURL=analytics-
|
|
1958
|
+
//# sourceMappingURL=analytics-3YAWQF5K.js.map
|