@koda-sl/baker-cli 0.542.0 → 0.544.0
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 +56 -9
- package/dist/account-2HJ4GKHN.js +82 -0
- package/dist/account-BGBNYZPA.js +139 -0
- package/dist/account-QG2AFCRO.js +82 -0
- package/dist/account-assets-R3XAVQEB.js +290 -0
- package/dist/account-level-EEXQALNI.js +611 -0
- package/dist/account-reads-2QJQU63B.js +219 -0
- package/dist/account-users-TTWSAGAL.js +64 -0
- package/dist/account-writes-FZ3KCJZY.js +68 -0
- package/dist/accounts-ARO5HAHH.js +115 -0
- package/dist/accounts-CN32WCRF.js +80 -0
- package/dist/accounts-EP5JCI7S.js +76 -0
- package/dist/accounts-ILVWPJBC.js +114 -0
- package/dist/accounts-RFJ4MENH.js +701 -0
- package/dist/actions-SYRCIDHV.js +55 -0
- package/dist/active-entities-5RIKIFLQ.js +103 -0
- package/dist/activecampaign-NASTXUEK.js +938 -0
- package/dist/activities-AZYGCPU3.js +75 -0
- package/dist/ad-group-writes-XGG3WQEO.js +172 -0
- package/dist/ad-groups-GZIPUN64.js +70 -0
- package/dist/ad-writes-2VTRWQLW.js +176 -0
- package/dist/add-3JH2GHSO.js +97 -0
- package/dist/add-GU5YOXPC.js +107 -0
- package/dist/add-IOEWGFPR.js +148 -0
- package/dist/add-KN6SPCY5.js +305 -0
- package/dist/add-LJXJ7RZV.js +81 -0
- package/dist/add-V46WFYNJ.js +80 -0
- package/dist/add-accounts-6ELLH7KV.js +91 -0
- package/dist/ads-I6WMPAO3.js +48 -0
- package/dist/ads-LNWALF6G.js +79 -0
- package/dist/ads-MHHPZ5OB.js +120 -0
- package/dist/ads-SXJTSL3V.js +128 -0
- package/dist/adsets-FARX5YPE.js +182 -0
- package/dist/advertisers-I7UCHETO.js +123 -0
- package/dist/advertisers-XLHC7DD6.js +125 -0
- package/dist/analytics-AWBWIVXW.js +2437 -0
- package/dist/analytics-BG72H654.js +447 -0
- package/dist/animate-DM4OUJMR.js +480 -0
- package/dist/approved-TA5KRDSX.js +73 -0
- package/dist/asset-writes-YTAJAXZX.js +50 -0
- package/dist/assign-2H3AMY7Q.js +80 -0
- package/dist/audience-size-3J4WYUTM.js +76 -0
- package/dist/audience-writes-SHZKH2EI.js +327 -0
- package/dist/audiences-7D5VPOWF.js +280 -0
- package/dist/audiences-MDJ34WFZ.js +85 -0
- package/dist/audiences-TFFWJWAO.js +106 -0
- package/dist/audit-QC4VORTD.js +154 -0
- package/dist/audit-UJUVBE3C.js +88 -0
- package/dist/autocomplete-B7YVYISF.js +114 -0
- package/dist/avatars-LUCFVVCN.js +38 -0
- package/dist/bid-pricing-4BJ4HU3F.js +103 -0
- package/dist/brand-KTM3OQNE.js +22 -0
- package/dist/brief-UVCG76J2.js +543 -0
- package/dist/businesses-TR4S3FWZ.js +54 -0
- package/dist/campaign-groups-FUJEB5LG.js +99 -0
- package/dist/campaign-writes-H22P6YPW.js +176 -0
- package/dist/campaign-writes-Z3CJKYW3.js +168 -0
- package/dist/campaigns-265JXD2Z.js +78 -0
- package/dist/campaigns-AON44UCB.js +130 -0
- package/dist/campaigns-CGYH7I2R.js +113 -0
- package/dist/campaigns-QUZN5AFK.js +111 -0
- package/dist/canvas-2DIDJAD4.js +46 -0
- package/dist/capabilities-VQF723CB.js +147 -0
- package/dist/cards-45GJXE6B.js +85 -0
- package/dist/catalog-DPUQBZZ7.js +66 -0
- package/dist/catalogs-SBXFAD3X.js +130 -0
- package/dist/catalogs-XNFTLYJV.js +781 -0
- package/dist/changes-QVXOKFLJ.js +143 -0
- package/dist/chatgpt-NVMLRIZY.js +47 -0
- package/dist/chats-BWMB3I6F.js +449 -0
- package/dist/chats-BWMB3I6F.js.map +1 -0
- package/dist/check-6B2L74FJ.js +107 -0
- package/dist/chunk-3BI2PHW4.js +249 -0
- package/dist/chunk-3KIRDKVB.js +930 -0
- package/dist/chunk-3TZW2FOS.js +1646 -0
- package/dist/chunk-3W4IORXH.js +166 -0
- package/dist/chunk-464UOCP6.js +94 -0
- package/dist/chunk-4D73PLXU.js +843 -0
- package/dist/chunk-4GLSV5AI.js +455 -0
- package/dist/chunk-4KCYP423.js +106 -0
- package/dist/chunk-4THPTXKA.js +224 -0
- package/dist/chunk-5NGVIBIX.js +334 -0
- package/dist/chunk-5NGVIBIX.js.map +1 -0
- package/dist/chunk-5RX473E3.js +51 -0
- package/dist/chunk-6G6UUR3T.js +138 -0
- package/dist/chunk-6REXNFPV.js +69 -0
- package/dist/chunk-6SM5TZO4.js +191 -0
- package/dist/chunk-7IU4WGGY.js +392 -0
- package/dist/chunk-7RXR34EN.js +89 -0
- package/dist/chunk-AM4WK3UM.js +857 -0
- package/dist/chunk-APCZKTQZ.js +2209 -0
- package/dist/chunk-ATD3QB46.js +163 -0
- package/dist/chunk-B2OHCWYB.js +229 -0
- package/dist/chunk-BGT5ZA4L.js +136 -0
- package/dist/chunk-BKIHYRQL.js +149 -0
- package/dist/chunk-BPFNGLDE.js +225 -0
- package/dist/chunk-BSGVRSNK.js +387 -0
- package/dist/chunk-C4EE6LIF.js +25 -0
- package/dist/chunk-CBQMSX2T.js +685 -0
- package/dist/chunk-CBQMSX2T.js.map +1 -0
- package/dist/chunk-CDKO55S4.js +170 -0
- package/dist/chunk-CMXG4X3S.js +203 -0
- package/dist/chunk-D3LTHRZZ.js +66 -0
- package/dist/chunk-DGUN7FUH.js +333 -0
- package/dist/chunk-DSL33LWI.js +139 -0
- package/dist/chunk-E54435XT.js +476 -0
- package/dist/chunk-E65DQNH6.js +100 -0
- package/dist/chunk-EBWOLUII.js +24026 -0
- package/dist/chunk-EMCTUCCJ.js +97 -0
- package/dist/chunk-F4QA4J2S.js +46 -0
- package/dist/chunk-FMUOZSE2.js +910 -0
- package/dist/chunk-FNGBUOPW.js +61 -0
- package/dist/chunk-FPTEBOB5.js +52 -0
- package/dist/chunk-FWSE7AG6.js +544 -0
- package/dist/chunk-G2PHP2JX.js +19 -0
- package/dist/chunk-GEQUWPAX.js +715 -0
- package/dist/chunk-GEQUWPAX.js.map +1 -0
- package/dist/chunk-GFBEO33K.js +1902 -0
- package/dist/chunk-GI7B47X3.js +76 -0
- package/dist/chunk-GJHN3B2Y.js +297 -0
- package/dist/chunk-GN7K3NPI.js +148 -0
- package/dist/chunk-HBDWE7WK.js +98 -0
- package/dist/chunk-HXQOAJLQ.js +45 -0
- package/dist/chunk-HZO5DOF7.js +156 -0
- package/dist/chunk-I6YWF2RA.js +377 -0
- package/dist/chunk-IARLXACF.js +58 -0
- package/dist/chunk-IDITKLYK.js +66 -0
- package/dist/chunk-IJPIIQAX.js +438 -0
- package/dist/chunk-JELKYZ4L.js +73 -0
- package/dist/chunk-JF2XP76K.js +75 -0
- package/dist/chunk-JFNI5SEG.js +494 -0
- package/dist/chunk-JOXEB2AB.js +547 -0
- package/dist/chunk-JY3OJBKZ.js +3510 -0
- package/dist/chunk-KIXVHP2C.js +1919 -0
- package/dist/chunk-LMB44RJE.js +676 -0
- package/dist/chunk-LUIV5R2Z.js +8954 -0
- package/dist/chunk-MGWAZXY6.js +324 -0
- package/dist/chunk-MVWR7JNJ.js +275 -0
- package/dist/chunk-N57MUA4V.js +288 -0
- package/dist/chunk-NBWZVBDG.js +131 -0
- package/dist/chunk-NFXW6C6I.js +7764 -0
- package/dist/chunk-NFXW6C6I.js.map +1 -0
- package/dist/chunk-NGQ5J4FV.js +97 -0
- package/dist/chunk-NIGDG522.js +207 -0
- package/dist/chunk-NPJRACA2.js +35 -0
- package/dist/chunk-OMW4EUKA.js +125 -0
- package/dist/chunk-P2XBADY3.js +42 -0
- package/dist/chunk-P3VY5JEM.js +274 -0
- package/dist/chunk-PFO26LK5.js +479 -0
- package/dist/chunk-PGXUR32U.js +604 -0
- package/dist/chunk-PKZA7XCB.js +831 -0
- package/dist/chunk-Q7BVIPQF.js +76 -0
- package/dist/chunk-QK3HMAVU.js +5471 -0
- package/dist/chunk-RHEWQB5O.js +638 -0
- package/dist/chunk-RJS47NTI.js +142 -0
- package/dist/chunk-RLAUWWGJ.js +429 -0
- package/dist/chunk-RP36XHWT.js +46 -0
- package/dist/chunk-RW33IGR5.js +217 -0
- package/dist/chunk-RWMPH5DX.js +188 -0
- package/dist/chunk-SDIBQH6Y.js +39 -0
- package/dist/chunk-SPBG6OP7.js +219 -0
- package/dist/chunk-SVSWJ56A.js +169 -0
- package/dist/chunk-SVUFNCOE.js +215 -0
- package/dist/chunk-SYLPRIFM.js +1744 -0
- package/dist/chunk-TARINRA4.js +1518 -0
- package/dist/chunk-TNZUMU55.js +167 -0
- package/dist/chunk-USVTT74J.js +26 -0
- package/dist/chunk-V2SU2SVZ.js +23 -0
- package/dist/chunk-VFL6B6F6.js +57 -0
- package/dist/chunk-VMGPRXW2.js +287 -0
- package/dist/chunk-VOUCQ2YW.js +64 -0
- package/dist/chunk-VWOKPC3T.js +84 -0
- package/dist/chunk-W4W3F3P7.js +98 -0
- package/dist/chunk-WAQPF4XP.js +106 -0
- package/dist/chunk-WCIS4FZH.js +2505 -0
- package/dist/chunk-WCIS4FZH.js.map +1 -0
- package/dist/chunk-WOE4TZHJ.js +285 -0
- package/dist/chunk-WUGTZHFI.js +84 -0
- package/dist/chunk-WV3FKE7F.js +91 -0
- package/dist/chunk-XBR7TSZN.js +296 -0
- package/dist/chunk-XG5VGUJ3.js +69 -0
- package/dist/chunk-XJSEDW63.js +207 -0
- package/dist/chunk-XMOELSW7.js +111 -0
- package/dist/chunk-XPXCXUF4.js +64 -0
- package/dist/chunk-XTZVZHTN.js +91 -0
- package/dist/chunk-XYNQMRNX.js +5368 -0
- package/dist/chunk-Y2AKJYI4.js +191 -0
- package/dist/chunk-YGDRGBII.js +197 -0
- package/dist/chunk-YMLJ2H5C.js +74 -0
- package/dist/chunk-YU55LFZZ.js +56 -0
- package/dist/chunk-Z7BNOHTY.js +344 -0
- package/dist/chunk-ZEUAJAKN.js +225 -0
- package/dist/chunk-ZFAZ2V5P.js +103 -0
- package/dist/cite-G5PPVGTC.js +191 -0
- package/dist/cite-G5PPVGTC.js.map +1 -0
- package/dist/claim-XWJJMUON.js +200 -0
- package/dist/cli.js +45 -45
- package/dist/client-6MXJPWFS.js +19 -0
- package/dist/code-TIM5S232.js +76 -0
- package/dist/companies-KVOWGAFU.js +198 -0
- package/dist/company-OVTBZSTS.js +308 -0
- package/dist/complete-3H62J4CN.js +84 -0
- package/dist/config-3GCILBEL.js +88 -0
- package/dist/connect-EZS7NDMA.js +45 -0
- package/dist/content-5OGEZTXU.js +85 -0
- package/dist/conversation-CCW2J2G6.js +96 -0
- package/dist/conversion-report-RB2MU7UD.js +127 -0
- package/dist/conversion-upload-command-XD5AISWW.js +439 -0
- package/dist/conversion-writes-56AIPXPK.js +122 -0
- package/dist/conversions-NRX76ZIT.js +78 -0
- package/dist/conversions-VFSX6NYO.js +140 -0
- package/dist/copy-writes-VPSNWYVX.js +170 -0
- package/dist/countries-77ULLD74.js +82 -0
- package/dist/create-4RGSS522.js +62 -0
- package/dist/create-C7Z47BYL.js +135 -0
- package/dist/create-GOH2JUIY.js +239 -0
- package/dist/create-YDCC3X5V.js +210 -0
- package/dist/creatives-HJ2R6HRF.js +223 -0
- package/dist/creatives-PVMOUTIW.js +118 -0
- package/dist/creatives-PWUBAVOB.js +58 -0
- package/dist/credentials-45X7PJJK.js +290 -0
- package/dist/critique-4J45TRYU.js +1451 -0
- package/dist/critique-KIPVWRUA.js +232 -0
- package/dist/crm-LSG3A4RY.js +227 -0
- package/dist/crm-ZXHUGF52.js +323 -0
- package/dist/crop-TFU3T7BW.js +113 -0
- package/dist/currency-T7VUQVAZ.js +88 -0
- package/dist/custom-conversions-RO2U5NF4.js +128 -0
- package/dist/customers-7GQW7NND.js +65 -0
- package/dist/decide-65GLJMTU.js +199 -0
- package/dist/delete-C5Z6CJJA.js +67 -0
- package/dist/delete-PUJY4JX6.js +85 -0
- package/dist/delete-T3QRUC5I.js +57 -0
- package/dist/delete-TWABWVPE.js +69 -0
- package/dist/delete-U3ZMLXWY.js +69 -0
- package/dist/delete-YAASRHAU.js +71 -0
- package/dist/demographics-YQRCDSKX.js +141 -0
- package/dist/describe-OOC7Q5S6.js +97 -0
- package/dist/describe-Z7XUOSCC.js +97 -0
- package/dist/dimensions-YEG46EKN.js +101 -0
- package/dist/discard-2FRCNBDP.js +69 -0
- package/dist/discover-HRNBTN4K.js +172 -0
- package/dist/discover-WKHGRR2G.js +93 -0
- package/dist/domain-ND56WWT5.js +101 -0
- package/dist/download-B62FEVDK.js +172 -0
- package/dist/download-QYUPXV7Z.js +299 -0
- package/dist/draft-4BEMU7EY.js +283 -0
- package/dist/draft-6E7EQUCU.js +103 -0
- package/dist/draft-AWTS2LBX.js +396 -0
- package/dist/draft-GIJCJIQ5.js +240 -0
- package/dist/draft-RK3ZAUBF.js +100 -0
- package/dist/draft-TZ2MQ24O.js +335 -0
- package/dist/draft-ZNJHDOJT.js +220 -0
- package/dist/draft-ZTOUHIXC.js +310 -0
- package/dist/engine/index.js +14 -14
- package/dist/env-BL77LHRZ.js +53 -0
- package/dist/experiment-3D4HJ7HL.js +1397 -0
- package/dist/experiments-CQMEMZXO.js +236 -0
- package/dist/export-QB7WA36R.js +168 -0
- package/dist/extract-KY2YOEVW.js +121 -0
- package/dist/facets-FVJHPNQE.js +117 -0
- package/dist/favorites-6GAGZDIR.js +178 -0
- package/dist/feed-IL2SGNQL.js +177 -0
- package/dist/feedback-Q4GYVI7P.js +115 -0
- package/dist/feedback-record-UKZPC3QP.js +269 -0
- package/dist/fetch-CCT6ZZ44.js +139 -0
- package/dist/fetch-SIP2BCYJ.js +204 -0
- package/dist/fetch-SIP2BCYJ.js.map +1 -0
- package/dist/find-SWR3KRRR.js +143 -0
- package/dist/fit-6Y6SHLP5.js +65 -0
- package/dist/flows-6654JFGC.js +250 -0
- package/dist/follow-MKXZKUM6.js +94 -0
- package/dist/follow-competitors-Q62S5O7W.js +112 -0
- package/dist/following-4BYSHU6G.js +113 -0
- package/dist/fonts-SM5HLEP4.js +39 -0
- package/dist/forecast-4TS6PIGA.js +169 -0
- package/dist/forecast-7I6YKTYU.js +121 -0
- package/dist/funding-UZUGMCI4.js +85 -0
- package/dist/funnel-ITXHCKXM.js +397 -0
- package/dist/ga4-SBHUQKGK.js +55 -0
- package/dist/generate-JQIK3UYS.js +263 -0
- package/dist/get-42THE7PC.js +56 -0
- package/dist/get-56NGML76.js +92 -0
- package/dist/get-7QHQMT3F.js +38 -0
- package/dist/get-EJ5Q72W7.js +82 -0
- package/dist/get-FGHRSPZJ.js +59 -0
- package/dist/get-GC34EKMH.js +66 -0
- package/dist/get-SOSR3FVM.js +62 -0
- package/dist/get-VQJIQ4P3.js +59 -0
- package/dist/gif-PPCB3BLX.js +110 -0
- package/dist/google-HSIRHXDB.js +3270 -0
- package/dist/google-XHNZTASN.js +144 -0
- package/dist/google-ads-KC3IMYTU.js +198 -0
- package/dist/group-QGTLBE77.js +43 -0
- package/dist/group-U2WSORDA.js +43 -0
- package/dist/gsc-EQYYXMSJ.js +30 -0
- package/dist/history-AWPJ7C35.js +102 -0
- package/dist/history-F765U4J7.js +153 -0
- package/dist/history-VNLS2TKB.js +69 -0
- package/dist/hubspot-VJOE2XCP.js +782 -0
- package/dist/icon-VMJB2MBO.js +137 -0
- package/dist/ideas-E4AWTXNN.js +45 -0
- package/dist/images-WLAJPXFL.js +92 -0
- package/dist/improve-QYP72NOH.js +86 -0
- package/dist/ingest-43DTZJHV.js +123 -0
- package/dist/ingest-B5OOTIAS.js +27 -0
- package/dist/insights-EOUJJRUH.js +658 -0
- package/dist/insights-XY6II7TX.js +132 -0
- package/dist/inspect-WGGPJUS6.js +192 -0
- package/dist/inspiration-CSN3AXDD.js +53 -0
- package/dist/instant-experiences-YJIVONJA.js +263 -0
- package/dist/intent-5XO232DG.js +95 -0
- package/dist/job-RB7LJI4W.js +202 -0
- package/dist/job-create-OYJCLKZ5.js +109 -0
- package/dist/job-status-NTQWCQBZ.js +74 -0
- package/dist/keep-BUORBI7V.js +78 -0
- package/dist/keyword-gap-ZGMK7SMK.js +130 -0
- package/dist/keyword-metrics-TOUOQ7SS.js +200 -0
- package/dist/keywords-for-site-PJHOSSLF.js +131 -0
- package/dist/knowledge-LQXY6UIX.js +195 -0
- package/dist/landing-ILHRRFYD.js +28 -0
- package/dist/landings-CY2PRE2U.js +151 -0
- package/dist/languages-U4HA5KQC.js +40 -0
- package/dist/languages-XO4FEKOB.js +55 -0
- package/dist/launches-EXKYONGX.js +19 -0
- package/dist/layerize-HD7DU6WE.js +190 -0
- package/dist/lead-routes-HBAMCZI4.js +733 -0
- package/dist/leads-5TYQUSIR.js +540 -0
- package/dist/leads-ZDH4PLRE.js +115 -0
- package/dist/learn-WTREPVV2.js +207 -0
- package/dist/library-BZVAYFPU.js +211 -0
- package/dist/lighthouse-4VL2PH24.js +75 -0
- package/dist/line-item-writes-PYADJHLW.js +211 -0
- package/dist/line-items-OYCJMB6Y.js +107 -0
- package/dist/link-CLG2FSJ3.js +67 -0
- package/dist/linkedin-FTZZWW6D.js +1328 -0
- package/dist/linkedin-person-DVBTOKLI.js +139 -0
- package/dist/list-4IE7K3OE.js +67 -0
- package/dist/list-ES7ZHOBJ.js +57 -0
- package/dist/list-FDYKWCOW.js +76 -0
- package/dist/list-HX4TZ3OW.js +50 -0
- package/dist/list-J4XZ3V4A.js +65 -0
- package/dist/list-OBB6Q2SO.js +154 -0
- package/dist/list-OCHRLITF.js +51 -0
- package/dist/list-SW63CXEC.js +306 -0
- package/dist/list-X6IOR6AS.js +93 -0
- package/dist/locations-64JNCQID.js +69 -0
- package/dist/locations-PYZEJPW3.js +40 -0
- package/dist/log-PKFKZQXD.js +95 -0
- package/dist/logo-2I2S2THP.js +18 -0
- package/dist/lookup-S74NWDKI.js +23 -0
- package/dist/make-5MCL4B3T.js +1367 -0
- package/dist/map-JB2OYS7G.js +436 -0
- package/dist/mcp-GS7AO7K5.js +729 -0
- package/dist/media-4V5IBDKN.js +18 -0
- package/dist/media-KFQ56V4R.js +89 -0
- package/dist/media-sources-JFLZPZAO.js +35 -0
- package/dist/members-E6EJAZZ4.js +47 -0
- package/dist/meme-4KWPQ6UF.js +100 -0
- package/dist/meta-X46LC3GI.js +122 -0
- package/dist/metrics-76BTT3Y3.js +152 -0
- package/dist/models-Z6SUHWKI.js +155 -0
- package/dist/normalize-UQIN6KDH.js +144 -0
- package/dist/normalize-WEVIIPWW.js +806 -0
- package/dist/options-YWD3K4UJ.js +125 -0
- package/dist/organization-ZACAD7FF.js +949 -0
- package/dist/output-E3FDRLRQ.js +24 -0
- package/dist/page-3Q5ZCRPX.js +105 -0
- package/dist/page-photos-ZIRMGE6V.js +118 -0
- package/dist/pages-TK6Y7IYX.js +67 -0
- package/dist/performance-DFQVCUDZ.js +5565 -0
- package/dist/performance-KBH3O4O4.js +27 -0
- package/dist/pinterest-BZ2UFFBC.js +104 -0
- package/dist/pixels-6XRTLCM3.js +109 -0
- package/dist/pixels-H642RPK4.js +62 -0
- package/dist/plan-2Q6SOHMD.js +208 -0
- package/dist/posts-FV62HSKG.js +36 -0
- package/dist/preview-LB73AIG2.js +218 -0
- package/dist/profile-OFG36E72.js +159 -0
- package/dist/promoted-tweet-writes-Q45KVTGM.js +183 -0
- package/dist/promoted-tweets-4PAYET4L.js +119 -0
- package/dist/properties-HHJ2K6YL.js +101 -0
- package/dist/publish-TOOCBLS6.js +344 -0
- package/dist/query-GSBZKWHE.js +62 -0
- package/dist/query-TTNBBIJH.js +231 -0
- package/dist/query-XGPZP5UC.js +236 -0
- package/dist/questionnaire-VIG54QFD.js +94 -0
- package/dist/read-DF3UPNBM.js +141 -0
- package/dist/reddit-2BOIPZLW.js +29 -0
- package/dist/refresh-2YQGTF2Q.js +97 -0
- package/dist/refresh-RFUNCAXM.js +42 -0
- package/dist/release-6SQOFLTQ.js +63 -0
- package/dist/relevant-pages-OMYH3PSP.js +99 -0
- package/dist/remove-HSTBAJL2.js +49 -0
- package/dist/remove-REVQUCGW.js +53 -0
- package/dist/reopen-3JFASZ7Z.js +66 -0
- package/dist/rerun-HAD2SZDF.js +96 -0
- package/dist/research-DT7UTJQT.js +265 -0
- package/dist/research-GTEAD4OK.js +75 -0
- package/dist/research-GTEAD4OK.js.map +1 -0
- package/dist/reset-7VYYVMHY.js +57 -0
- package/dist/reset-TPMUZBN3.js +57 -0
- package/dist/resolve-7DTGRVQ5.js +124 -0
- package/dist/retry-AE76A5JL.js +65 -0
- package/dist/retry-WVVMZBJT.js +63 -0
- package/dist/retry-failed-NH47LEKA.js +45 -0
- package/dist/revenue-TXR2Z3LQ.js +91 -0
- package/dist/rule-writes-ILVWCFKQ.js +525 -0
- package/dist/rules-FDJ5YESR.js +99 -0
- package/dist/rules-YO3EKWCX.js +217 -0
- package/dist/rules-add-T2AQ3C4P.js +465 -0
- package/dist/run-N4A75YWN.js +69 -0
- package/dist/run-VT5OCURD.js +71 -0
- package/dist/scaffold-ad-FINQYGF2.js +1513 -0
- package/dist/scaffold-static-ad-YDDFTTNN.js +1011 -0
- package/dist/scaffold-video-2CCS7CK4.js +885 -0
- package/dist/schedule-XZVUL4CA.js +64 -0
- package/dist/schedule-Y7UN7Q24.js +67 -0
- package/dist/scheduled-agents-35PY445V.js +55 -0
- package/dist/schema-JT3464PC.js +135 -0
- package/dist/schema-NSXMRNWM.js +121 -0
- package/dist/scrape-3PWNMK4D.js +2241 -0
- package/dist/screenshot-CJYM4SF7.js +102 -0
- package/dist/search-5QUBKDL6.js +51 -0
- package/dist/search-BR5KK7BE.js +224 -0
- package/dist/search-CDONEXJY.js +91 -0
- package/dist/search-FMOFSOJ3.js +26 -0
- package/dist/search-VDSV554K.js +177 -0
- package/dist/search-WAD2Z5VU.js +92 -0
- package/dist/search-copy-5IKZTJUP.js +168 -0
- package/dist/seeds-EXTAHRXO.js +101 -0
- package/dist/select-EWUA34ZM.js +110 -0
- package/dist/sends-CSE4LTQU.js +349 -0
- package/dist/sequences-RRUXKL7H.js +146 -0
- package/dist/set-prompt-ZX364V7V.js +199 -0
- package/dist/setup-links-BI6GPN5F.js +144 -0
- package/dist/shared-FBQIX453.js +32 -0
- package/dist/shopify-RALHX5OB.js +3958 -0
- package/dist/site-WKS57PJL.js +180 -0
- package/dist/sitemaps-TMHDYRHR.js +77 -0
- package/dist/sites-AIJPSL7T.js +97 -0
- package/dist/skills-7VRKG7GE.js +47 -0
- package/dist/sources-ECE62RFF.js +30 -0
- package/dist/sources-VUKEO4WE.js +457 -0
- package/dist/stale-PSJNR6EY.js +90 -0
- package/dist/stats-ROWGFLUZ.js +34 -0
- package/dist/status-SJKGPDXC.js +65 -0
- package/dist/sticker-MCJ4IOPJ.js +102 -0
- package/dist/stock-QKI2V3EO.js +187 -0
- package/dist/studies-DUFFDAZS.js +250 -0
- package/dist/studio-6ZXUKA4G.js +49 -0
- package/dist/study-writes-N7AOKA4W.js +470 -0
- package/dist/suggest-534G7JP5.js +66 -0
- package/dist/sync-QY2O4ISM.js +279 -0
- package/dist/sync-TX4FZRLP.js +55 -0
- package/dist/sync-UW5ANNQZ.js +57 -0
- package/dist/sync-definition-3L7K7QWS.js +70 -0
- package/dist/tag-SBOFQW2N.js +57 -0
- package/dist/tag-manager-5ORFHLM4.js +43 -0
- package/dist/tags-2CDXVME5.js +23 -0
- package/dist/tags-6H4JKL2B.js +23 -0
- package/dist/tags-7ZWYNXJD.js +26 -0
- package/dist/tags-BYZCEK5V.js +227 -0
- package/dist/tags-WFN43UES.js +23 -0
- package/dist/targeting-XK7ED2CS.js +762 -0
- package/dist/targeting-constants-6RAE4UMA.js +118 -0
- package/dist/targeting-criteria-QIFK56RP.js +113 -0
- package/dist/targets-OVQQEF6E.js +106 -0
- package/dist/terms-CUIVHWMT.js +102 -0
- package/dist/testimonials-H6SAGYMM.js +32 -0
- package/dist/themes-BQP3HK74.js +95 -0
- package/dist/top-companies-672JEIYA.js +111 -0
- package/dist/transcript-QRDDL4MX.js +165 -0
- package/dist/translate-2IHE5YDI.js +603 -0
- package/dist/triggers-JMMH4YDD.js +144 -0
- package/dist/tweets-HESNCAOU.js +123 -0
- package/dist/unfollow-ZEE4K5EH.js +46 -0
- package/dist/unlink-AYBNJEJP.js +70 -0
- package/dist/unstage-F4GIR4XE.js +96 -0
- package/dist/unstage-XMOGDPZ4.js +88 -0
- package/dist/update-3NNT6EAS.js +155 -0
- package/dist/update-CMJUZH3K.js +101 -0
- package/dist/update-NC2BN6QB.js +81 -0
- package/dist/update-UX6PTFXZ.js +66 -0
- package/dist/update-YIUE3QBL.js +192 -0
- package/dist/upload-OY35RO5V.js +130 -0
- package/dist/upload-XKBJU65H.js +150 -0
- package/dist/upscale-YZVFXJ75.js +109 -0
- package/dist/url-options-5ADN3SYO.js +131 -0
- package/dist/url-params-DUEOK2Y3.js +101 -0
- package/dist/use-7EP5OXPQ.js +111 -0
- package/dist/validate-SFVCHAGI.js +125 -0
- package/dist/variant-QNNTZPLR.js +338 -0
- package/dist/videos-OGMX2BDQ.js +41 -0
- package/dist/view-VFZUL5UL.js +121 -0
- package/dist/viewer-check-K6UC5PCF.js +83 -0
- package/dist/web-JKCYPZK5.js +173 -0
- package/dist/web-JKCYPZK5.js.map +1 -0
- package/dist/winners-LXOFPZOD.js +113 -0
- package/dist/winning-ads-J3WR3ENK.js +86 -0
- package/dist/write-commands-FGWCJHLH.js +713 -0
- package/dist/write-commands-RSN3MPBW.js +1525 -0
- package/dist/write-commands-T5RY54ZT.js +1172 -0
- package/dist/write-commands-UTM7PPK5.js +206 -0
- package/dist/x-F44WG5LV.js +47 -0
- package/package.json +1 -1
- package/dist/account-3IA3PYDJ.js +0 -139
- package/dist/account-JT5DRUNO.js +0 -82
- package/dist/account-V5XHQY2D.js +0 -82
- package/dist/account-assets-BVEEUGDA.js +0 -290
- package/dist/account-level-J37UFQY6.js +0 -611
- package/dist/account-reads-CPL3HLZ5.js +0 -219
- package/dist/account-users-AZBPCE3S.js +0 -64
- package/dist/account-writes-MFKCVMMV.js +0 -68
- package/dist/accounts-CZOZDD5I.js +0 -701
- package/dist/accounts-FX6V37GX.js +0 -115
- package/dist/accounts-GXJPLMHU.js +0 -114
- package/dist/accounts-HNZWMTRM.js +0 -76
- package/dist/accounts-PQZRFWGU.js +0 -80
- package/dist/actions-7ELREPKR.js +0 -55
- package/dist/active-entities-YIOKHGWY.js +0 -103
- package/dist/activecampaign-VOKDHWP7.js +0 -938
- package/dist/activities-OC3CJX4I.js +0 -75
- package/dist/ad-group-writes-WFYPFO7R.js +0 -172
- package/dist/ad-groups-IPY3TJUX.js +0 -70
- package/dist/ad-writes-LDNNN72V.js +0 -176
- package/dist/add-3EEREVFI.js +0 -80
- package/dist/add-FGB7KM6P.js +0 -148
- package/dist/add-FKINXOC2.js +0 -97
- package/dist/add-MTYT3Q4T.js +0 -81
- package/dist/add-NZE6J7AI.js +0 -107
- package/dist/add-RMKXE2ZO.js +0 -305
- package/dist/add-accounts-WCDQRXRO.js +0 -91
- package/dist/ads-CIWS4COT.js +0 -48
- package/dist/ads-HCK2GF2V.js +0 -120
- package/dist/ads-NTDJRTEG.js +0 -79
- package/dist/ads-YRV2YERG.js +0 -128
- package/dist/adsets-TC2VPFXW.js +0 -182
- package/dist/advertisers-663V2F2T.js +0 -125
- package/dist/advertisers-E27BJ2FV.js +0 -123
- package/dist/analytics-PJ7JR4VU.js +0 -447
- package/dist/analytics-TBEIK33Y.js +0 -2437
- package/dist/animate-CQON6SZE.js +0 -480
- package/dist/approved-RFZLJZJH.js +0 -73
- package/dist/asset-writes-ZMSJSFTD.js +0 -50
- package/dist/assign-MTHCAP54.js +0 -80
- package/dist/audience-size-AXULID2E.js +0 -76
- package/dist/audience-writes-BUWFC5W4.js +0 -327
- package/dist/audiences-GD2EPPJJ.js +0 -85
- package/dist/audiences-KRI7E7FY.js +0 -280
- package/dist/audiences-UJCOT423.js +0 -106
- package/dist/audit-DQYC4R74.js +0 -88
- package/dist/audit-YQIL6UGM.js +0 -154
- package/dist/autocomplete-S2WRGXOM.js +0 -114
- package/dist/avatars-H5RIENFM.js +0 -38
- package/dist/bid-pricing-5RTQDTK3.js +0 -103
- package/dist/brand-YCYKIUIL.js +0 -22
- package/dist/brief-AEICFSR7.js +0 -543
- package/dist/businesses-IPSDIWUU.js +0 -54
- package/dist/campaign-groups-PZ4J25O5.js +0 -99
- package/dist/campaign-writes-2OSYV72Z.js +0 -168
- package/dist/campaign-writes-DAL4EFIV.js +0 -176
- package/dist/campaigns-CDPQ2RDY.js +0 -111
- package/dist/campaigns-JCKEU2NC.js +0 -130
- package/dist/campaigns-TKQDXU5H.js +0 -78
- package/dist/campaigns-XFIW7ODL.js +0 -113
- package/dist/canvas-FWG5JGG4.js +0 -46
- package/dist/capabilities-Y2UYDZZO.js +0 -147
- package/dist/cards-TTQTPLCO.js +0 -85
- package/dist/catalog-6CXOEKBI.js +0 -66
- package/dist/catalogs-ETVY5OZ5.js +0 -130
- package/dist/catalogs-LI7NG57R.js +0 -781
- package/dist/changes-2P2P4LAU.js +0 -143
- package/dist/chatgpt-GINMQJBI.js +0 -47
- package/dist/chats-HNOUUEII.js +0 -442
- package/dist/chats-HNOUUEII.js.map +0 -1
- package/dist/check-UHV27GZU.js +0 -107
- package/dist/chunk-24SPBLU4.js +0 -1646
- package/dist/chunk-2AJ5UNOF.js +0 -131
- package/dist/chunk-2OEECI2R.js +0 -51
- package/dist/chunk-2Y3VZILY.js +0 -98
- package/dist/chunk-337ZJ3PX.js +0 -377
- package/dist/chunk-35FLLWSQ.js +0 -100
- package/dist/chunk-35T6LCB2.js +0 -197
- package/dist/chunk-3PG7O3ZW.js +0 -52
- package/dist/chunk-3V4R55B4.js +0 -163
- package/dist/chunk-3YHOU5IA.js +0 -169
- package/dist/chunk-4GQJOHJY.js +0 -69
- package/dist/chunk-4KGQZHCV.js +0 -224
- package/dist/chunk-4OY6SHHM.js +0 -35
- package/dist/chunk-4PWC4KAK.js +0 -843
- package/dist/chunk-4QLVMG63.js +0 -191
- package/dist/chunk-5VVXF3OS.js +0 -676
- package/dist/chunk-6KWPAPFL.js +0 -714
- package/dist/chunk-6KWPAPFL.js.map +0 -1
- package/dist/chunk-7E4S2NBD.js +0 -170
- package/dist/chunk-7Y6CPXM5.js +0 -2209
- package/dist/chunk-7ZYXRMSM.js +0 -188
- package/dist/chunk-A4TWHQEF.js +0 -191
- package/dist/chunk-AGEWPMBR.js +0 -288
- package/dist/chunk-AMHVCMBW.js +0 -3510
- package/dist/chunk-AUGAC2OT.js +0 -319
- package/dist/chunk-AUGAC2OT.js.map +0 -1
- package/dist/chunk-AXSSATJW.js +0 -1744
- package/dist/chunk-B52GKPH2.js +0 -106
- package/dist/chunk-BBGKZJXP.js +0 -69
- package/dist/chunk-BQSDW6FT.js +0 -344
- package/dist/chunk-C35UMKYG.js +0 -229
- package/dist/chunk-C54JXXV3.js +0 -24026
- package/dist/chunk-C6CWI43A.js +0 -392
- package/dist/chunk-CISJ7CUA.js +0 -207
- package/dist/chunk-CKT5SR7F.js +0 -103
- package/dist/chunk-CM2LECNX.js +0 -136
- package/dist/chunk-CTBDVZ5E.js +0 -274
- package/dist/chunk-D2F73AUY.js +0 -64
- package/dist/chunk-DNRXEP4A.js +0 -296
- package/dist/chunk-DR4TIYTE.js +0 -45
- package/dist/chunk-DR7PLON5.js +0 -1902
- package/dist/chunk-EAHBTBVR.js +0 -324
- package/dist/chunk-ELAYD7O3.js +0 -215
- package/dist/chunk-EPW33OQJ.js +0 -203
- package/dist/chunk-F4QYUDXE.js +0 -91
- package/dist/chunk-FKGYEK54.js +0 -387
- package/dist/chunk-FRUOWEWZ.js +0 -97
- package/dist/chunk-FSLSISPI.js +0 -46
- package/dist/chunk-GT76FWES.js +0 -1919
- package/dist/chunk-GTIQUOYC.js +0 -148
- package/dist/chunk-GZN2RP7D.js +0 -494
- package/dist/chunk-H23Q55DS.js +0 -604
- package/dist/chunk-H27R5IVQ.js +0 -64
- package/dist/chunk-HDYJ6YVI.js +0 -930
- package/dist/chunk-HOZI7GOT.js +0 -66
- package/dist/chunk-IJ5DWALA.js +0 -225
- package/dist/chunk-ITKTTDC2.js +0 -225
- package/dist/chunk-JD4DSJPT.js +0 -76
- package/dist/chunk-JEMYDBKC.js +0 -547
- package/dist/chunk-JQSN5K5B.js +0 -94
- package/dist/chunk-JUFABKU4.js +0 -73
- package/dist/chunk-KAJXOGQ2.js +0 -58
- package/dist/chunk-KDDHMKTU.js +0 -217
- package/dist/chunk-KG7WIVNG.js +0 -111
- package/dist/chunk-KGZXQIM5.js +0 -19
- package/dist/chunk-KSECMOHE.js +0 -857
- package/dist/chunk-LBIF6FJY.js +0 -476
- package/dist/chunk-LE33VXJV.js +0 -831
- package/dist/chunk-LE6VTYWQ.js +0 -910
- package/dist/chunk-LXV2U4MI.js +0 -25
- package/dist/chunk-M7FP7DKN.js +0 -39
- package/dist/chunk-MI3J4O42.js +0 -297
- package/dist/chunk-MIOE5IN3.js +0 -479
- package/dist/chunk-MM6CCIL7.js +0 -166
- package/dist/chunk-MMUT4W5L.js +0 -438
- package/dist/chunk-MWJNFGV6.js +0 -42
- package/dist/chunk-N3T4ALXV.js +0 -8954
- package/dist/chunk-NGXZQESA.js +0 -5471
- package/dist/chunk-NPZ5VWFE.js +0 -592
- package/dist/chunk-NPZ5VWFE.js.map +0 -1
- package/dist/chunk-NQ5O2NCJ.js +0 -5368
- package/dist/chunk-NRMJWNX3.js +0 -97
- package/dist/chunk-OQGE5GSP.js +0 -429
- package/dist/chunk-OTGHCGLW.js +0 -125
- package/dist/chunk-OYYAR5TD.js +0 -333
- package/dist/chunk-PEGRQV66.js +0 -106
- package/dist/chunk-PQN4PIC6.js +0 -76
- package/dist/chunk-QIZY55Z6.js +0 -89
- package/dist/chunk-RGSSKOTZ.js +0 -56
- package/dist/chunk-RW32BYY3.js +0 -1518
- package/dist/chunk-RZUXHIRN.js +0 -23
- package/dist/chunk-S4JAHRIW.js +0 -139
- package/dist/chunk-S4PK55OH.js +0 -156
- package/dist/chunk-S6KZ4GDL.js +0 -207
- package/dist/chunk-SBSFCKOC.js +0 -149
- package/dist/chunk-T2JHHSPI.js +0 -142
- package/dist/chunk-TFCZOTQ5.js +0 -249
- package/dist/chunk-TFN7L5H3.js +0 -66
- package/dist/chunk-TML65SGQ.js +0 -455
- package/dist/chunk-TP6QJATO.js +0 -57
- package/dist/chunk-TQDZQT6U.js +0 -167
- package/dist/chunk-TRXGJZDL.js +0 -2503
- package/dist/chunk-TRXGJZDL.js.map +0 -1
- package/dist/chunk-U4CYQMG5.js +0 -138
- package/dist/chunk-UMQCYEAL.js +0 -98
- package/dist/chunk-UREDSNQS.js +0 -7725
- package/dist/chunk-UREDSNQS.js.map +0 -1
- package/dist/chunk-UT4OM34H.js +0 -46
- package/dist/chunk-VPHHCOYS.js +0 -544
- package/dist/chunk-VWKFQ4ZY.js +0 -285
- package/dist/chunk-W3PJ7V4W.js +0 -84
- package/dist/chunk-WDPOXO34.js +0 -91
- package/dist/chunk-WI3TCYEA.js +0 -74
- package/dist/chunk-WQQ7SH3M.js +0 -84
- package/dist/chunk-WTODFKZR.js +0 -219
- package/dist/chunk-YFIWCMVC.js +0 -638
- package/dist/chunk-YFRNONXL.js +0 -275
- package/dist/chunk-Z4BU2JVK.js +0 -287
- package/dist/chunk-ZBP735CV.js +0 -61
- package/dist/chunk-ZI7CLQB5.js +0 -26
- package/dist/chunk-ZPF253G5.js +0 -75
- package/dist/claim-65UCFSNU.js +0 -200
- package/dist/client-SZ4N5NCP.js +0 -19
- package/dist/code-RZXUOVH3.js +0 -76
- package/dist/companies-PUU5HQPO.js +0 -198
- package/dist/company-P64YHCCF.js +0 -308
- package/dist/complete-D7LIEFAQ.js +0 -84
- package/dist/config-7RX352G2.js +0 -88
- package/dist/connect-OJEK3NSN.js +0 -45
- package/dist/content-BOERUNX4.js +0 -85
- package/dist/conversation-S2I75E4X.js +0 -96
- package/dist/conversion-report-JNWBTLA5.js +0 -127
- package/dist/conversion-upload-command-6OKMSO2T.js +0 -439
- package/dist/conversion-writes-2VOWP4RD.js +0 -122
- package/dist/conversions-JGIBYLK5.js +0 -78
- package/dist/conversions-XQLNBKCS.js +0 -140
- package/dist/copy-writes-PVWZEU4S.js +0 -170
- package/dist/countries-Z4IQIMWQ.js +0 -82
- package/dist/create-DXRRIN2L.js +0 -210
- package/dist/create-UBQF3F43.js +0 -239
- package/dist/create-URSL4J7P.js +0 -62
- package/dist/create-WTG4PLR7.js +0 -135
- package/dist/creatives-ARJMZYXM.js +0 -118
- package/dist/creatives-KHU3PAMN.js +0 -223
- package/dist/creatives-MXMQDNL6.js +0 -58
- package/dist/credentials-CMOO7W6D.js +0 -290
- package/dist/critique-455CFJQ2.js +0 -1451
- package/dist/critique-MABDKWHC.js +0 -232
- package/dist/crm-LKQBWL7L.js +0 -227
- package/dist/crm-YAFF2LM2.js +0 -323
- package/dist/crop-JRVHX3PX.js +0 -113
- package/dist/currency-JDAVYMD3.js +0 -88
- package/dist/custom-conversions-OVUDN3HH.js +0 -128
- package/dist/customers-XQJTF7HT.js +0 -59
- package/dist/decide-MPNAZFAK.js +0 -199
- package/dist/delete-7OTBPZGJ.js +0 -67
- package/dist/delete-FWPYWUNU.js +0 -85
- package/dist/delete-JPSIBQXR.js +0 -71
- package/dist/delete-RLLRUSGR.js +0 -69
- package/dist/delete-ROD2G6IL.js +0 -57
- package/dist/delete-ZRMD5TG4.js +0 -69
- package/dist/demographics-HM2TV4T2.js +0 -141
- package/dist/describe-OUYPLJJE.js +0 -97
- package/dist/describe-XQGFIM2Z.js +0 -97
- package/dist/dimensions-MMVCXOFJ.js +0 -101
- package/dist/discard-55OBCTIR.js +0 -69
- package/dist/discover-VEHKBNCY.js +0 -172
- package/dist/discover-Z6NS3BP6.js +0 -93
- package/dist/domain-226C6VIF.js +0 -101
- package/dist/download-3JW2NTQZ.js +0 -299
- package/dist/download-UMEQIQKE.js +0 -172
- package/dist/draft-DSWC37IW.js +0 -103
- package/dist/draft-DUAFRL2G.js +0 -283
- package/dist/draft-KWXV5YOG.js +0 -240
- package/dist/draft-MPSQIDMM.js +0 -310
- package/dist/draft-S2QTWVIA.js +0 -220
- package/dist/draft-TUTXQNHP.js +0 -335
- package/dist/draft-UMNPM5KA.js +0 -100
- package/dist/draft-V7VGPJK4.js +0 -396
- package/dist/env-O2JJK34F.js +0 -53
- package/dist/experiment-2TTMKPVC.js +0 -1397
- package/dist/experiments-6UHDVVII.js +0 -236
- package/dist/export-LRPJXAFA.js +0 -168
- package/dist/extract-7IAAZ6RS.js +0 -121
- package/dist/facets-BZ5AFGHD.js +0 -117
- package/dist/favorites-UXNAI5XW.js +0 -178
- package/dist/feed-OTUTIGJ6.js +0 -177
- package/dist/feedback-A5DR3IMR.js +0 -115
- package/dist/feedback-record-KABFVNHS.js +0 -269
- package/dist/fetch-AG7JJ4BI.js +0 -139
- package/dist/fetch-XNE63FNS.js +0 -179
- package/dist/fetch-XNE63FNS.js.map +0 -1
- package/dist/find-JH5OMTGJ.js +0 -143
- package/dist/fit-T2D4E52B.js +0 -65
- package/dist/flows-P5T4LNJ2.js +0 -250
- package/dist/follow-WHLTIJPM.js +0 -94
- package/dist/follow-competitors-DO7RVQXT.js +0 -112
- package/dist/following-ZL34FZ32.js +0 -113
- package/dist/fonts-U3NGQYJN.js +0 -39
- package/dist/forecast-TG5RS5DG.js +0 -121
- package/dist/forecast-UYBYSH3Y.js +0 -169
- package/dist/funding-55XBHYY6.js +0 -85
- package/dist/funnel-D6YXU7C4.js +0 -397
- package/dist/ga4-WIOBF5HW.js +0 -55
- package/dist/generate-QG7GX6WO.js +0 -263
- package/dist/get-E4VOTCE6.js +0 -59
- package/dist/get-IGXC3JQ5.js +0 -92
- package/dist/get-P5Z274DM.js +0 -38
- package/dist/get-QA333Q5J.js +0 -62
- package/dist/get-TISXCTDV.js +0 -82
- package/dist/get-TXVHONYI.js +0 -59
- package/dist/get-WEWFUNWZ.js +0 -56
- package/dist/get-Z46N7LBR.js +0 -66
- package/dist/gif-TD37CRTZ.js +0 -110
- package/dist/google-6A3YLR3K.js +0 -144
- package/dist/google-PFRI7YIG.js +0 -3270
- package/dist/google-ads-GBX5YHPT.js +0 -198
- package/dist/group-6ENUPDYO.js +0 -43
- package/dist/group-EYF34B3P.js +0 -43
- package/dist/gsc-KDE2DTH2.js +0 -30
- package/dist/history-BRWYSJQL.js +0 -153
- package/dist/history-M2KVZ2E7.js +0 -102
- package/dist/history-XOB23MLX.js +0 -69
- package/dist/hubspot-YEZGTOM2.js +0 -782
- package/dist/icon-N77IGSXP.js +0 -137
- package/dist/ideas-J6GCTQ6U.js +0 -45
- package/dist/images-55KBTRVO.js +0 -92
- package/dist/improve-BKFZOBXI.js +0 -86
- package/dist/ingest-LKGF5E5V.js +0 -27
- package/dist/ingest-QNV3B2ST.js +0 -123
- package/dist/insights-7CQJOBWX.js +0 -132
- package/dist/insights-7NC2JFXU.js +0 -658
- package/dist/inspect-WNPQXU4H.js +0 -192
- package/dist/inspiration-SQUEBO2K.js +0 -53
- package/dist/instant-experiences-3E6RRUHF.js +0 -263
- package/dist/intent-P75BDP4H.js +0 -95
- package/dist/job-B6UEZLTA.js +0 -202
- package/dist/job-create-WM27NOGZ.js +0 -109
- package/dist/job-status-6V7DVVYL.js +0 -74
- package/dist/keep-ACLZB7KL.js +0 -78
- package/dist/keyword-gap-54F6CZLM.js +0 -130
- package/dist/keyword-metrics-SJLYED7I.js +0 -200
- package/dist/keywords-for-site-CY2XUFR4.js +0 -131
- package/dist/knowledge-5VEMAHG7.js +0 -195
- package/dist/landing-DZLICA3P.js +0 -28
- package/dist/landings-Q7T2HSYK.js +0 -151
- package/dist/languages-HWMPAPQN.js +0 -55
- package/dist/languages-PEGOE365.js +0 -40
- package/dist/launches-4HI65M3C.js +0 -19
- package/dist/layerize-HXML3KQX.js +0 -190
- package/dist/lead-routes-Q2T3RQXN.js +0 -733
- package/dist/leads-GZ7RFM7D.js +0 -540
- package/dist/leads-WBZP37CG.js +0 -115
- package/dist/learn-QNOTY4JA.js +0 -207
- package/dist/library-OVX3OUYV.js +0 -211
- package/dist/lighthouse-2TDPDU7J.js +0 -75
- package/dist/line-item-writes-6RNUOFKK.js +0 -211
- package/dist/line-items-YOBU6DYQ.js +0 -107
- package/dist/link-7PEVIIUA.js +0 -67
- package/dist/linkedin-YYNBLBM3.js +0 -1328
- package/dist/linkedin-person-JGQTT54I.js +0 -139
- package/dist/list-AAQISQHE.js +0 -65
- package/dist/list-H2XBHKQK.js +0 -154
- package/dist/list-IFVBO2E2.js +0 -306
- package/dist/list-N5FHLG2Z.js +0 -67
- package/dist/list-QYUU66YV.js +0 -93
- package/dist/list-SDHECXK5.js +0 -57
- package/dist/list-U3ZABSGW.js +0 -76
- package/dist/list-UF7Y4FDE.js +0 -50
- package/dist/list-VO473W6E.js +0 -51
- package/dist/locations-MXWGZIGU.js +0 -69
- package/dist/locations-SHYN5J4Q.js +0 -40
- package/dist/log-HCWZ6C4R.js +0 -95
- package/dist/logo-2NDZ2EVN.js +0 -18
- package/dist/lookup-UFVB2ZZF.js +0 -23
- package/dist/make-VZKIB23N.js +0 -1367
- package/dist/map-RFMJ4AF7.js +0 -436
- package/dist/mcp-VRFT3QJW.js +0 -729
- package/dist/media-3M3PVSEZ.js +0 -89
- package/dist/media-5XRMDMKD.js +0 -18
- package/dist/media-sources-NTZRJGFU.js +0 -35
- package/dist/members-EOIF2XN3.js +0 -47
- package/dist/meme-EOAFE4FS.js +0 -100
- package/dist/meta-6IFYEOZL.js +0 -122
- package/dist/metrics-25LYUEB7.js +0 -152
- package/dist/models-EU3NO4IY.js +0 -155
- package/dist/normalize-NDBXU6UO.js +0 -806
- package/dist/normalize-UQIZEJHT.js +0 -144
- package/dist/options-Y6JI2ZVZ.js +0 -125
- package/dist/organization-TO2V7AWX.js +0 -949
- package/dist/output-KIQWBKKA.js +0 -24
- package/dist/page-GGT3KZ5E.js +0 -105
- package/dist/page-photos-FKWHLNWM.js +0 -118
- package/dist/pages-JALRE36R.js +0 -67
- package/dist/performance-V26JUNGC.js +0 -27
- package/dist/performance-YAUOH75F.js +0 -5565
- package/dist/pinterest-KURR4GJJ.js +0 -104
- package/dist/pixels-6PKYGSQ4.js +0 -109
- package/dist/pixels-NLH2PN6Q.js +0 -62
- package/dist/plan-223DL4HG.js +0 -208
- package/dist/posts-YPW4NHWM.js +0 -36
- package/dist/preview-CD2QADBJ.js +0 -218
- package/dist/profile-7KUWZTJR.js +0 -159
- package/dist/promoted-tweet-writes-3SLFZQDA.js +0 -183
- package/dist/promoted-tweets-3WRSJYKK.js +0 -119
- package/dist/properties-LCZX4UJH.js +0 -101
- package/dist/publish-T6ITLSJA.js +0 -344
- package/dist/query-RKJS3QOS.js +0 -231
- package/dist/query-SRJXJVDY.js +0 -62
- package/dist/query-WX3K7ZDY.js +0 -236
- package/dist/questionnaire-CCDUSEI3.js +0 -94
- package/dist/read-JTJQSEVB.js +0 -141
- package/dist/reddit-O2TNBMD6.js +0 -29
- package/dist/refresh-H4DETVS5.js +0 -42
- package/dist/refresh-N726O36Z.js +0 -97
- package/dist/release-A5HKTUMV.js +0 -63
- package/dist/relevant-pages-VJHTUJMB.js +0 -99
- package/dist/remove-5FMNASGC.js +0 -49
- package/dist/remove-BHUYRNRU.js +0 -53
- package/dist/reopen-TTDYNANZ.js +0 -66
- package/dist/rerun-KFTQ6Y64.js +0 -96
- package/dist/research-FISSUVIK.js +0 -72
- package/dist/research-FISSUVIK.js.map +0 -1
- package/dist/research-YWON4E4H.js +0 -265
- package/dist/reset-SSNHRP5C.js +0 -57
- package/dist/reset-VTNVCE23.js +0 -57
- package/dist/resolve-375FALNN.js +0 -124
- package/dist/retry-PNS6RWJ6.js +0 -63
- package/dist/retry-TLGYZ6RJ.js +0 -65
- package/dist/retry-failed-DSVEAY3T.js +0 -45
- package/dist/revenue-6L2AY7L7.js +0 -91
- package/dist/rule-writes-XSNS3XYK.js +0 -525
- package/dist/rules-F6J4V7PZ.js +0 -99
- package/dist/rules-GHGEVCBQ.js +0 -217
- package/dist/rules-add-7UI5A3MJ.js +0 -465
- package/dist/run-B77D2TGX.js +0 -71
- package/dist/run-UN4HXEGZ.js +0 -69
- package/dist/scaffold-ad-74CEBCRR.js +0 -1513
- package/dist/scaffold-static-ad-2IMVWNYB.js +0 -1011
- package/dist/scaffold-video-JDCX3BIT.js +0 -885
- package/dist/schedule-WK5MRYCJ.js +0 -64
- package/dist/schedule-Z2AQXR7W.js +0 -67
- package/dist/scheduled-agents-2NTFBABN.js +0 -55
- package/dist/schema-BBC6AARZ.js +0 -135
- package/dist/schema-BDZA64GZ.js +0 -121
- package/dist/scrape-CTE5SNQN.js +0 -2241
- package/dist/screenshot-ELJYTIM7.js +0 -102
- package/dist/search-5B5AXN5V.js +0 -91
- package/dist/search-7ELGWNMH.js +0 -26
- package/dist/search-KBIF5NZX.js +0 -224
- package/dist/search-KC4QRMU2.js +0 -177
- package/dist/search-OF6LTOK6.js +0 -51
- package/dist/search-XO5UPSBF.js +0 -92
- package/dist/search-copy-DDRY6HPI.js +0 -168
- package/dist/seeds-HH5E7GCS.js +0 -101
- package/dist/select-SZAJR4QY.js +0 -110
- package/dist/sends-H7WMLJ5H.js +0 -349
- package/dist/sequences-V4STPHGV.js +0 -146
- package/dist/set-prompt-KHB4JJV2.js +0 -199
- package/dist/setup-links-SJVDPNOF.js +0 -144
- package/dist/shared-P2PFNNJF.js +0 -32
- package/dist/shopify-MODNP6LT.js +0 -3958
- package/dist/site-5K73B2MI.js +0 -180
- package/dist/sitemaps-KMRWAKNK.js +0 -77
- package/dist/sites-3QZDCQRG.js +0 -97
- package/dist/skills-KV4X22KQ.js +0 -47
- package/dist/sources-2E6EK6YK.js +0 -457
- package/dist/sources-S7LAV2EP.js +0 -30
- package/dist/stale-3IPYZ7BI.js +0 -90
- package/dist/stats-3TAUG3Q3.js +0 -34
- package/dist/status-6QTJSJN7.js +0 -65
- package/dist/sticker-SH6VUPFR.js +0 -102
- package/dist/stock-IICCY3IQ.js +0 -187
- package/dist/studies-A52C544C.js +0 -250
- package/dist/studio-4QOFG7MQ.js +0 -49
- package/dist/study-writes-3R4D6C3F.js +0 -470
- package/dist/suggest-3CFMURUH.js +0 -66
- package/dist/sync-37P7TZQH.js +0 -57
- package/dist/sync-H4XVXITS.js +0 -55
- package/dist/sync-TJ7MGFIE.js +0 -279
- package/dist/sync-definition-CDQCNCU2.js +0 -70
- package/dist/tag-6WIQLRDW.js +0 -57
- package/dist/tag-manager-KWITWX6Y.js +0 -43
- package/dist/tags-2VZUCNNH.js +0 -26
- package/dist/tags-CBINFGAN.js +0 -227
- package/dist/tags-FVRIF3XS.js +0 -23
- package/dist/tags-OB24PQKE.js +0 -23
- package/dist/tags-SS7FE52N.js +0 -23
- package/dist/targeting-II4CQUPW.js +0 -762
- package/dist/targeting-constants-2EHTMIMX.js +0 -118
- package/dist/targeting-criteria-ECC662DL.js +0 -113
- package/dist/targets-GIRHNZ4W.js +0 -106
- package/dist/terms-URBA2IXT.js +0 -102
- package/dist/testimonials-IEJ24MH7.js +0 -32
- package/dist/themes-JBX6W4SP.js +0 -95
- package/dist/top-companies-POSJMWSB.js +0 -111
- package/dist/transcript-FCKURXTT.js +0 -165
- package/dist/translate-F4B3WEJO.js +0 -603
- package/dist/triggers-DRAKT5QB.js +0 -144
- package/dist/tweets-LECORASF.js +0 -123
- package/dist/unfollow-DBV2F7YP.js +0 -46
- package/dist/unlink-OEUJXG64.js +0 -70
- package/dist/unstage-F362CYM7.js +0 -88
- package/dist/unstage-XCH4VBM2.js +0 -96
- package/dist/update-4CVNP3B5.js +0 -66
- package/dist/update-BAE3BEEW.js +0 -155
- package/dist/update-JDFJPQ3O.js +0 -81
- package/dist/update-UME7HHOC.js +0 -101
- package/dist/update-XOSKQEMK.js +0 -192
- package/dist/upload-B27ZJMMZ.js +0 -150
- package/dist/upload-BABKWQIN.js +0 -130
- package/dist/upscale-QMBV3AGN.js +0 -109
- package/dist/url-options-JSRAMMEM.js +0 -131
- package/dist/url-params-ZVIYOHM2.js +0 -101
- package/dist/use-TBDI3OAN.js +0 -111
- package/dist/validate-DN44TVXS.js +0 -125
- package/dist/variant-2A5GOOJF.js +0 -338
- package/dist/videos-OVVH4LC2.js +0 -41
- package/dist/view-GNNIJGGN.js +0 -121
- package/dist/viewer-check-SOPRTRNX.js +0 -83
- package/dist/web-PLEFETCJ.js +0 -143
- package/dist/web-PLEFETCJ.js.map +0 -1
- package/dist/winners-6CW4CWZI.js +0 -113
- package/dist/winning-ads-HIP6PWPL.js +0 -86
- package/dist/write-commands-3G5WDFH3.js +0 -206
- package/dist/write-commands-TPPJHGMT.js +0 -1172
- package/dist/write-commands-U3JZ6UHG.js +0 -1525
- package/dist/write-commands-UW5LKCAP.js +0 -713
- package/dist/x-ROOD4SQH.js +0 -47
- /package/dist/{account-V5XHQY2D.js.map → account-2HJ4GKHN.js.map} +0 -0
- /package/dist/{account-3IA3PYDJ.js.map → account-BGBNYZPA.js.map} +0 -0
- /package/dist/{account-JT5DRUNO.js.map → account-QG2AFCRO.js.map} +0 -0
- /package/dist/{account-assets-BVEEUGDA.js.map → account-assets-R3XAVQEB.js.map} +0 -0
- /package/dist/{account-level-J37UFQY6.js.map → account-level-EEXQALNI.js.map} +0 -0
- /package/dist/{account-reads-CPL3HLZ5.js.map → account-reads-2QJQU63B.js.map} +0 -0
- /package/dist/{account-users-AZBPCE3S.js.map → account-users-TTWSAGAL.js.map} +0 -0
- /package/dist/{account-writes-MFKCVMMV.js.map → account-writes-FZ3KCJZY.js.map} +0 -0
- /package/dist/{accounts-FX6V37GX.js.map → accounts-ARO5HAHH.js.map} +0 -0
- /package/dist/{accounts-PQZRFWGU.js.map → accounts-CN32WCRF.js.map} +0 -0
- /package/dist/{accounts-HNZWMTRM.js.map → accounts-EP5JCI7S.js.map} +0 -0
- /package/dist/{accounts-GXJPLMHU.js.map → accounts-ILVWPJBC.js.map} +0 -0
- /package/dist/{accounts-CZOZDD5I.js.map → accounts-RFJ4MENH.js.map} +0 -0
- /package/dist/{actions-7ELREPKR.js.map → actions-SYRCIDHV.js.map} +0 -0
- /package/dist/{active-entities-YIOKHGWY.js.map → active-entities-5RIKIFLQ.js.map} +0 -0
- /package/dist/{activecampaign-VOKDHWP7.js.map → activecampaign-NASTXUEK.js.map} +0 -0
- /package/dist/{activities-OC3CJX4I.js.map → activities-AZYGCPU3.js.map} +0 -0
- /package/dist/{ad-group-writes-WFYPFO7R.js.map → ad-group-writes-XGG3WQEO.js.map} +0 -0
- /package/dist/{ad-groups-IPY3TJUX.js.map → ad-groups-GZIPUN64.js.map} +0 -0
- /package/dist/{ad-writes-LDNNN72V.js.map → ad-writes-2VTRWQLW.js.map} +0 -0
- /package/dist/{add-FKINXOC2.js.map → add-3JH2GHSO.js.map} +0 -0
- /package/dist/{add-NZE6J7AI.js.map → add-GU5YOXPC.js.map} +0 -0
- /package/dist/{add-FGB7KM6P.js.map → add-IOEWGFPR.js.map} +0 -0
- /package/dist/{add-RMKXE2ZO.js.map → add-KN6SPCY5.js.map} +0 -0
- /package/dist/{add-MTYT3Q4T.js.map → add-LJXJ7RZV.js.map} +0 -0
- /package/dist/{add-3EEREVFI.js.map → add-V46WFYNJ.js.map} +0 -0
- /package/dist/{add-accounts-WCDQRXRO.js.map → add-accounts-6ELLH7KV.js.map} +0 -0
- /package/dist/{ads-CIWS4COT.js.map → ads-I6WMPAO3.js.map} +0 -0
- /package/dist/{ads-NTDJRTEG.js.map → ads-LNWALF6G.js.map} +0 -0
- /package/dist/{ads-HCK2GF2V.js.map → ads-MHHPZ5OB.js.map} +0 -0
- /package/dist/{ads-YRV2YERG.js.map → ads-SXJTSL3V.js.map} +0 -0
- /package/dist/{adsets-TC2VPFXW.js.map → adsets-FARX5YPE.js.map} +0 -0
- /package/dist/{advertisers-E27BJ2FV.js.map → advertisers-I7UCHETO.js.map} +0 -0
- /package/dist/{advertisers-663V2F2T.js.map → advertisers-XLHC7DD6.js.map} +0 -0
- /package/dist/{analytics-TBEIK33Y.js.map → analytics-AWBWIVXW.js.map} +0 -0
- /package/dist/{analytics-PJ7JR4VU.js.map → analytics-BG72H654.js.map} +0 -0
- /package/dist/{animate-CQON6SZE.js.map → animate-DM4OUJMR.js.map} +0 -0
- /package/dist/{approved-RFZLJZJH.js.map → approved-TA5KRDSX.js.map} +0 -0
- /package/dist/{asset-writes-ZMSJSFTD.js.map → asset-writes-YTAJAXZX.js.map} +0 -0
- /package/dist/{assign-MTHCAP54.js.map → assign-2H3AMY7Q.js.map} +0 -0
- /package/dist/{audience-size-AXULID2E.js.map → audience-size-3J4WYUTM.js.map} +0 -0
- /package/dist/{audience-writes-BUWFC5W4.js.map → audience-writes-SHZKH2EI.js.map} +0 -0
- /package/dist/{audiences-KRI7E7FY.js.map → audiences-7D5VPOWF.js.map} +0 -0
- /package/dist/{audiences-GD2EPPJJ.js.map → audiences-MDJ34WFZ.js.map} +0 -0
- /package/dist/{audiences-UJCOT423.js.map → audiences-TFFWJWAO.js.map} +0 -0
- /package/dist/{audit-YQIL6UGM.js.map → audit-QC4VORTD.js.map} +0 -0
- /package/dist/{audit-DQYC4R74.js.map → audit-UJUVBE3C.js.map} +0 -0
- /package/dist/{autocomplete-S2WRGXOM.js.map → autocomplete-B7YVYISF.js.map} +0 -0
- /package/dist/{avatars-H5RIENFM.js.map → avatars-LUCFVVCN.js.map} +0 -0
- /package/dist/{bid-pricing-5RTQDTK3.js.map → bid-pricing-4BJ4HU3F.js.map} +0 -0
- /package/dist/{brand-YCYKIUIL.js.map → brand-KTM3OQNE.js.map} +0 -0
- /package/dist/{brief-AEICFSR7.js.map → brief-UVCG76J2.js.map} +0 -0
- /package/dist/{businesses-IPSDIWUU.js.map → businesses-TR4S3FWZ.js.map} +0 -0
- /package/dist/{campaign-groups-PZ4J25O5.js.map → campaign-groups-FUJEB5LG.js.map} +0 -0
- /package/dist/{campaign-writes-DAL4EFIV.js.map → campaign-writes-H22P6YPW.js.map} +0 -0
- /package/dist/{campaign-writes-2OSYV72Z.js.map → campaign-writes-Z3CJKYW3.js.map} +0 -0
- /package/dist/{campaigns-TKQDXU5H.js.map → campaigns-265JXD2Z.js.map} +0 -0
- /package/dist/{campaigns-JCKEU2NC.js.map → campaigns-AON44UCB.js.map} +0 -0
- /package/dist/{campaigns-XFIW7ODL.js.map → campaigns-CGYH7I2R.js.map} +0 -0
- /package/dist/{campaigns-CDPQ2RDY.js.map → campaigns-QUZN5AFK.js.map} +0 -0
- /package/dist/{canvas-FWG5JGG4.js.map → canvas-2DIDJAD4.js.map} +0 -0
- /package/dist/{capabilities-Y2UYDZZO.js.map → capabilities-VQF723CB.js.map} +0 -0
- /package/dist/{cards-TTQTPLCO.js.map → cards-45GJXE6B.js.map} +0 -0
- /package/dist/{catalog-6CXOEKBI.js.map → catalog-DPUQBZZ7.js.map} +0 -0
- /package/dist/{catalogs-ETVY5OZ5.js.map → catalogs-SBXFAD3X.js.map} +0 -0
- /package/dist/{catalogs-LI7NG57R.js.map → catalogs-XNFTLYJV.js.map} +0 -0
- /package/dist/{changes-2P2P4LAU.js.map → changes-QVXOKFLJ.js.map} +0 -0
- /package/dist/{chatgpt-GINMQJBI.js.map → chatgpt-NVMLRIZY.js.map} +0 -0
- /package/dist/{check-UHV27GZU.js.map → check-6B2L74FJ.js.map} +0 -0
- /package/dist/{chunk-TFCZOTQ5.js.map → chunk-3BI2PHW4.js.map} +0 -0
- /package/dist/{chunk-HDYJ6YVI.js.map → chunk-3KIRDKVB.js.map} +0 -0
- /package/dist/{chunk-24SPBLU4.js.map → chunk-3TZW2FOS.js.map} +0 -0
- /package/dist/{chunk-MM6CCIL7.js.map → chunk-3W4IORXH.js.map} +0 -0
- /package/dist/{chunk-JQSN5K5B.js.map → chunk-464UOCP6.js.map} +0 -0
- /package/dist/{chunk-4PWC4KAK.js.map → chunk-4D73PLXU.js.map} +0 -0
- /package/dist/{chunk-TML65SGQ.js.map → chunk-4GLSV5AI.js.map} +0 -0
- /package/dist/{chunk-PEGRQV66.js.map → chunk-4KCYP423.js.map} +0 -0
- /package/dist/{chunk-4KGQZHCV.js.map → chunk-4THPTXKA.js.map} +0 -0
- /package/dist/{chunk-2OEECI2R.js.map → chunk-5RX473E3.js.map} +0 -0
- /package/dist/{chunk-U4CYQMG5.js.map → chunk-6G6UUR3T.js.map} +0 -0
- /package/dist/{chunk-BBGKZJXP.js.map → chunk-6REXNFPV.js.map} +0 -0
- /package/dist/{chunk-A4TWHQEF.js.map → chunk-6SM5TZO4.js.map} +0 -0
- /package/dist/{chunk-C6CWI43A.js.map → chunk-7IU4WGGY.js.map} +0 -0
- /package/dist/{chunk-QIZY55Z6.js.map → chunk-7RXR34EN.js.map} +0 -0
- /package/dist/{chunk-KSECMOHE.js.map → chunk-AM4WK3UM.js.map} +0 -0
- /package/dist/{chunk-7Y6CPXM5.js.map → chunk-APCZKTQZ.js.map} +0 -0
- /package/dist/{chunk-3V4R55B4.js.map → chunk-ATD3QB46.js.map} +0 -0
- /package/dist/{chunk-C35UMKYG.js.map → chunk-B2OHCWYB.js.map} +0 -0
- /package/dist/{chunk-CM2LECNX.js.map → chunk-BGT5ZA4L.js.map} +0 -0
- /package/dist/{chunk-SBSFCKOC.js.map → chunk-BKIHYRQL.js.map} +0 -0
- /package/dist/{chunk-ITKTTDC2.js.map → chunk-BPFNGLDE.js.map} +0 -0
- /package/dist/{chunk-FKGYEK54.js.map → chunk-BSGVRSNK.js.map} +0 -0
- /package/dist/{chunk-LXV2U4MI.js.map → chunk-C4EE6LIF.js.map} +0 -0
- /package/dist/{chunk-7E4S2NBD.js.map → chunk-CDKO55S4.js.map} +0 -0
- /package/dist/{chunk-EPW33OQJ.js.map → chunk-CMXG4X3S.js.map} +0 -0
- /package/dist/{chunk-HOZI7GOT.js.map → chunk-D3LTHRZZ.js.map} +0 -0
- /package/dist/{chunk-OYYAR5TD.js.map → chunk-DGUN7FUH.js.map} +0 -0
- /package/dist/{chunk-S4JAHRIW.js.map → chunk-DSL33LWI.js.map} +0 -0
- /package/dist/{chunk-LBIF6FJY.js.map → chunk-E54435XT.js.map} +0 -0
- /package/dist/{chunk-35FLLWSQ.js.map → chunk-E65DQNH6.js.map} +0 -0
- /package/dist/{chunk-C54JXXV3.js.map → chunk-EBWOLUII.js.map} +0 -0
- /package/dist/{chunk-FRUOWEWZ.js.map → chunk-EMCTUCCJ.js.map} +0 -0
- /package/dist/{chunk-UT4OM34H.js.map → chunk-F4QA4J2S.js.map} +0 -0
- /package/dist/{chunk-LE6VTYWQ.js.map → chunk-FMUOZSE2.js.map} +0 -0
- /package/dist/{chunk-ZBP735CV.js.map → chunk-FNGBUOPW.js.map} +0 -0
- /package/dist/{chunk-3PG7O3ZW.js.map → chunk-FPTEBOB5.js.map} +0 -0
- /package/dist/{chunk-VPHHCOYS.js.map → chunk-FWSE7AG6.js.map} +0 -0
- /package/dist/{chunk-KGZXQIM5.js.map → chunk-G2PHP2JX.js.map} +0 -0
- /package/dist/{chunk-DR7PLON5.js.map → chunk-GFBEO33K.js.map} +0 -0
- /package/dist/{chunk-JD4DSJPT.js.map → chunk-GI7B47X3.js.map} +0 -0
- /package/dist/{chunk-MI3J4O42.js.map → chunk-GJHN3B2Y.js.map} +0 -0
- /package/dist/{chunk-GTIQUOYC.js.map → chunk-GN7K3NPI.js.map} +0 -0
- /package/dist/{chunk-2Y3VZILY.js.map → chunk-HBDWE7WK.js.map} +0 -0
- /package/dist/{chunk-DR4TIYTE.js.map → chunk-HXQOAJLQ.js.map} +0 -0
- /package/dist/{chunk-S4PK55OH.js.map → chunk-HZO5DOF7.js.map} +0 -0
- /package/dist/{chunk-337ZJ3PX.js.map → chunk-I6YWF2RA.js.map} +0 -0
- /package/dist/{chunk-KAJXOGQ2.js.map → chunk-IARLXACF.js.map} +0 -0
- /package/dist/{chunk-TFN7L5H3.js.map → chunk-IDITKLYK.js.map} +0 -0
- /package/dist/{chunk-MMUT4W5L.js.map → chunk-IJPIIQAX.js.map} +0 -0
- /package/dist/{chunk-JUFABKU4.js.map → chunk-JELKYZ4L.js.map} +0 -0
- /package/dist/{chunk-ZPF253G5.js.map → chunk-JF2XP76K.js.map} +0 -0
- /package/dist/{chunk-GZN2RP7D.js.map → chunk-JFNI5SEG.js.map} +0 -0
- /package/dist/{chunk-JEMYDBKC.js.map → chunk-JOXEB2AB.js.map} +0 -0
- /package/dist/{chunk-AMHVCMBW.js.map → chunk-JY3OJBKZ.js.map} +0 -0
- /package/dist/{chunk-GT76FWES.js.map → chunk-KIXVHP2C.js.map} +0 -0
- /package/dist/{chunk-5VVXF3OS.js.map → chunk-LMB44RJE.js.map} +0 -0
- /package/dist/{chunk-N3T4ALXV.js.map → chunk-LUIV5R2Z.js.map} +0 -0
- /package/dist/{chunk-EAHBTBVR.js.map → chunk-MGWAZXY6.js.map} +0 -0
- /package/dist/{chunk-YFRNONXL.js.map → chunk-MVWR7JNJ.js.map} +0 -0
- /package/dist/{chunk-AGEWPMBR.js.map → chunk-N57MUA4V.js.map} +0 -0
- /package/dist/{chunk-2AJ5UNOF.js.map → chunk-NBWZVBDG.js.map} +0 -0
- /package/dist/{chunk-NRMJWNX3.js.map → chunk-NGQ5J4FV.js.map} +0 -0
- /package/dist/{chunk-S6KZ4GDL.js.map → chunk-NIGDG522.js.map} +0 -0
- /package/dist/{chunk-4OY6SHHM.js.map → chunk-NPJRACA2.js.map} +0 -0
- /package/dist/{chunk-OTGHCGLW.js.map → chunk-OMW4EUKA.js.map} +0 -0
- /package/dist/{chunk-MWJNFGV6.js.map → chunk-P2XBADY3.js.map} +0 -0
- /package/dist/{chunk-CTBDVZ5E.js.map → chunk-P3VY5JEM.js.map} +0 -0
- /package/dist/{chunk-MIOE5IN3.js.map → chunk-PFO26LK5.js.map} +0 -0
- /package/dist/{chunk-H23Q55DS.js.map → chunk-PGXUR32U.js.map} +0 -0
- /package/dist/{chunk-LE33VXJV.js.map → chunk-PKZA7XCB.js.map} +0 -0
- /package/dist/{chunk-PQN4PIC6.js.map → chunk-Q7BVIPQF.js.map} +0 -0
- /package/dist/{chunk-NGXZQESA.js.map → chunk-QK3HMAVU.js.map} +0 -0
- /package/dist/{chunk-YFIWCMVC.js.map → chunk-RHEWQB5O.js.map} +0 -0
- /package/dist/{chunk-T2JHHSPI.js.map → chunk-RJS47NTI.js.map} +0 -0
- /package/dist/{chunk-OQGE5GSP.js.map → chunk-RLAUWWGJ.js.map} +0 -0
- /package/dist/{chunk-FSLSISPI.js.map → chunk-RP36XHWT.js.map} +0 -0
- /package/dist/{chunk-KDDHMKTU.js.map → chunk-RW33IGR5.js.map} +0 -0
- /package/dist/{chunk-7ZYXRMSM.js.map → chunk-RWMPH5DX.js.map} +0 -0
- /package/dist/{chunk-M7FP7DKN.js.map → chunk-SDIBQH6Y.js.map} +0 -0
- /package/dist/{chunk-WTODFKZR.js.map → chunk-SPBG6OP7.js.map} +0 -0
- /package/dist/{chunk-3YHOU5IA.js.map → chunk-SVSWJ56A.js.map} +0 -0
- /package/dist/{chunk-ELAYD7O3.js.map → chunk-SVUFNCOE.js.map} +0 -0
- /package/dist/{chunk-AXSSATJW.js.map → chunk-SYLPRIFM.js.map} +0 -0
- /package/dist/{chunk-RW32BYY3.js.map → chunk-TARINRA4.js.map} +0 -0
- /package/dist/{chunk-TQDZQT6U.js.map → chunk-TNZUMU55.js.map} +0 -0
- /package/dist/{chunk-ZI7CLQB5.js.map → chunk-USVTT74J.js.map} +0 -0
- /package/dist/{chunk-RZUXHIRN.js.map → chunk-V2SU2SVZ.js.map} +0 -0
- /package/dist/{chunk-TP6QJATO.js.map → chunk-VFL6B6F6.js.map} +0 -0
- /package/dist/{chunk-Z4BU2JVK.js.map → chunk-VMGPRXW2.js.map} +0 -0
- /package/dist/{chunk-H27R5IVQ.js.map → chunk-VOUCQ2YW.js.map} +0 -0
- /package/dist/{chunk-W3PJ7V4W.js.map → chunk-VWOKPC3T.js.map} +0 -0
- /package/dist/{chunk-UMQCYEAL.js.map → chunk-W4W3F3P7.js.map} +0 -0
- /package/dist/{chunk-B52GKPH2.js.map → chunk-WAQPF4XP.js.map} +0 -0
- /package/dist/{chunk-VWKFQ4ZY.js.map → chunk-WOE4TZHJ.js.map} +0 -0
- /package/dist/{chunk-WQQ7SH3M.js.map → chunk-WUGTZHFI.js.map} +0 -0
- /package/dist/{chunk-F4QYUDXE.js.map → chunk-WV3FKE7F.js.map} +0 -0
- /package/dist/{chunk-DNRXEP4A.js.map → chunk-XBR7TSZN.js.map} +0 -0
- /package/dist/{chunk-4GQJOHJY.js.map → chunk-XG5VGUJ3.js.map} +0 -0
- /package/dist/{chunk-CISJ7CUA.js.map → chunk-XJSEDW63.js.map} +0 -0
- /package/dist/{chunk-KG7WIVNG.js.map → chunk-XMOELSW7.js.map} +0 -0
- /package/dist/{chunk-D2F73AUY.js.map → chunk-XPXCXUF4.js.map} +0 -0
- /package/dist/{chunk-WDPOXO34.js.map → chunk-XTZVZHTN.js.map} +0 -0
- /package/dist/{chunk-NQ5O2NCJ.js.map → chunk-XYNQMRNX.js.map} +0 -0
- /package/dist/{chunk-4QLVMG63.js.map → chunk-Y2AKJYI4.js.map} +0 -0
- /package/dist/{chunk-35T6LCB2.js.map → chunk-YGDRGBII.js.map} +0 -0
- /package/dist/{chunk-WI3TCYEA.js.map → chunk-YMLJ2H5C.js.map} +0 -0
- /package/dist/{chunk-RGSSKOTZ.js.map → chunk-YU55LFZZ.js.map} +0 -0
- /package/dist/{chunk-BQSDW6FT.js.map → chunk-Z7BNOHTY.js.map} +0 -0
- /package/dist/{chunk-IJ5DWALA.js.map → chunk-ZEUAJAKN.js.map} +0 -0
- /package/dist/{chunk-CKT5SR7F.js.map → chunk-ZFAZ2V5P.js.map} +0 -0
- /package/dist/{claim-65UCFSNU.js.map → claim-XWJJMUON.js.map} +0 -0
- /package/dist/{client-SZ4N5NCP.js.map → client-6MXJPWFS.js.map} +0 -0
- /package/dist/{code-RZXUOVH3.js.map → code-TIM5S232.js.map} +0 -0
- /package/dist/{companies-PUU5HQPO.js.map → companies-KVOWGAFU.js.map} +0 -0
- /package/dist/{company-P64YHCCF.js.map → company-OVTBZSTS.js.map} +0 -0
- /package/dist/{complete-D7LIEFAQ.js.map → complete-3H62J4CN.js.map} +0 -0
- /package/dist/{config-7RX352G2.js.map → config-3GCILBEL.js.map} +0 -0
- /package/dist/{connect-OJEK3NSN.js.map → connect-EZS7NDMA.js.map} +0 -0
- /package/dist/{content-BOERUNX4.js.map → content-5OGEZTXU.js.map} +0 -0
- /package/dist/{conversation-S2I75E4X.js.map → conversation-CCW2J2G6.js.map} +0 -0
- /package/dist/{conversion-report-JNWBTLA5.js.map → conversion-report-RB2MU7UD.js.map} +0 -0
- /package/dist/{conversion-upload-command-6OKMSO2T.js.map → conversion-upload-command-XD5AISWW.js.map} +0 -0
- /package/dist/{conversion-writes-2VOWP4RD.js.map → conversion-writes-56AIPXPK.js.map} +0 -0
- /package/dist/{conversions-JGIBYLK5.js.map → conversions-NRX76ZIT.js.map} +0 -0
- /package/dist/{conversions-XQLNBKCS.js.map → conversions-VFSX6NYO.js.map} +0 -0
- /package/dist/{copy-writes-PVWZEU4S.js.map → copy-writes-VPSNWYVX.js.map} +0 -0
- /package/dist/{countries-Z4IQIMWQ.js.map → countries-77ULLD74.js.map} +0 -0
- /package/dist/{create-URSL4J7P.js.map → create-4RGSS522.js.map} +0 -0
- /package/dist/{create-WTG4PLR7.js.map → create-C7Z47BYL.js.map} +0 -0
- /package/dist/{create-UBQF3F43.js.map → create-GOH2JUIY.js.map} +0 -0
- /package/dist/{create-DXRRIN2L.js.map → create-YDCC3X5V.js.map} +0 -0
- /package/dist/{creatives-KHU3PAMN.js.map → creatives-HJ2R6HRF.js.map} +0 -0
- /package/dist/{creatives-ARJMZYXM.js.map → creatives-PVMOUTIW.js.map} +0 -0
- /package/dist/{creatives-MXMQDNL6.js.map → creatives-PWUBAVOB.js.map} +0 -0
- /package/dist/{credentials-CMOO7W6D.js.map → credentials-45X7PJJK.js.map} +0 -0
- /package/dist/{critique-455CFJQ2.js.map → critique-4J45TRYU.js.map} +0 -0
- /package/dist/{critique-MABDKWHC.js.map → critique-KIPVWRUA.js.map} +0 -0
- /package/dist/{crm-LKQBWL7L.js.map → crm-LSG3A4RY.js.map} +0 -0
- /package/dist/{crm-YAFF2LM2.js.map → crm-ZXHUGF52.js.map} +0 -0
- /package/dist/{crop-JRVHX3PX.js.map → crop-TFU3T7BW.js.map} +0 -0
- /package/dist/{currency-JDAVYMD3.js.map → currency-T7VUQVAZ.js.map} +0 -0
- /package/dist/{custom-conversions-OVUDN3HH.js.map → custom-conversions-RO2U5NF4.js.map} +0 -0
- /package/dist/{customers-XQJTF7HT.js.map → customers-7GQW7NND.js.map} +0 -0
- /package/dist/{decide-MPNAZFAK.js.map → decide-65GLJMTU.js.map} +0 -0
- /package/dist/{delete-7OTBPZGJ.js.map → delete-C5Z6CJJA.js.map} +0 -0
- /package/dist/{delete-FWPYWUNU.js.map → delete-PUJY4JX6.js.map} +0 -0
- /package/dist/{delete-ROD2G6IL.js.map → delete-T3QRUC5I.js.map} +0 -0
- /package/dist/{delete-RLLRUSGR.js.map → delete-TWABWVPE.js.map} +0 -0
- /package/dist/{delete-ZRMD5TG4.js.map → delete-U3ZMLXWY.js.map} +0 -0
- /package/dist/{delete-JPSIBQXR.js.map → delete-YAASRHAU.js.map} +0 -0
- /package/dist/{demographics-HM2TV4T2.js.map → demographics-YQRCDSKX.js.map} +0 -0
- /package/dist/{describe-OUYPLJJE.js.map → describe-OOC7Q5S6.js.map} +0 -0
- /package/dist/{describe-XQGFIM2Z.js.map → describe-Z7XUOSCC.js.map} +0 -0
- /package/dist/{dimensions-MMVCXOFJ.js.map → dimensions-YEG46EKN.js.map} +0 -0
- /package/dist/{discard-55OBCTIR.js.map → discard-2FRCNBDP.js.map} +0 -0
- /package/dist/{discover-VEHKBNCY.js.map → discover-HRNBTN4K.js.map} +0 -0
- /package/dist/{discover-Z6NS3BP6.js.map → discover-WKHGRR2G.js.map} +0 -0
- /package/dist/{domain-226C6VIF.js.map → domain-ND56WWT5.js.map} +0 -0
- /package/dist/{download-UMEQIQKE.js.map → download-B62FEVDK.js.map} +0 -0
- /package/dist/{download-3JW2NTQZ.js.map → download-QYUPXV7Z.js.map} +0 -0
- /package/dist/{draft-DUAFRL2G.js.map → draft-4BEMU7EY.js.map} +0 -0
- /package/dist/{draft-DSWC37IW.js.map → draft-6E7EQUCU.js.map} +0 -0
- /package/dist/{draft-V7VGPJK4.js.map → draft-AWTS2LBX.js.map} +0 -0
- /package/dist/{draft-KWXV5YOG.js.map → draft-GIJCJIQ5.js.map} +0 -0
- /package/dist/{draft-UMNPM5KA.js.map → draft-RK3ZAUBF.js.map} +0 -0
- /package/dist/{draft-TUTXQNHP.js.map → draft-TZ2MQ24O.js.map} +0 -0
- /package/dist/{draft-S2QTWVIA.js.map → draft-ZNJHDOJT.js.map} +0 -0
- /package/dist/{draft-MPSQIDMM.js.map → draft-ZTOUHIXC.js.map} +0 -0
- /package/dist/{env-O2JJK34F.js.map → env-BL77LHRZ.js.map} +0 -0
- /package/dist/{experiment-2TTMKPVC.js.map → experiment-3D4HJ7HL.js.map} +0 -0
- /package/dist/{experiments-6UHDVVII.js.map → experiments-CQMEMZXO.js.map} +0 -0
- /package/dist/{export-LRPJXAFA.js.map → export-QB7WA36R.js.map} +0 -0
- /package/dist/{extract-7IAAZ6RS.js.map → extract-KY2YOEVW.js.map} +0 -0
- /package/dist/{facets-BZ5AFGHD.js.map → facets-FVJHPNQE.js.map} +0 -0
- /package/dist/{favorites-UXNAI5XW.js.map → favorites-6GAGZDIR.js.map} +0 -0
- /package/dist/{feed-OTUTIGJ6.js.map → feed-IL2SGNQL.js.map} +0 -0
- /package/dist/{feedback-A5DR3IMR.js.map → feedback-Q4GYVI7P.js.map} +0 -0
- /package/dist/{feedback-record-KABFVNHS.js.map → feedback-record-UKZPC3QP.js.map} +0 -0
- /package/dist/{fetch-AG7JJ4BI.js.map → fetch-CCT6ZZ44.js.map} +0 -0
- /package/dist/{find-JH5OMTGJ.js.map → find-SWR3KRRR.js.map} +0 -0
- /package/dist/{fit-T2D4E52B.js.map → fit-6Y6SHLP5.js.map} +0 -0
- /package/dist/{flows-P5T4LNJ2.js.map → flows-6654JFGC.js.map} +0 -0
- /package/dist/{follow-WHLTIJPM.js.map → follow-MKXZKUM6.js.map} +0 -0
- /package/dist/{follow-competitors-DO7RVQXT.js.map → follow-competitors-Q62S5O7W.js.map} +0 -0
- /package/dist/{following-ZL34FZ32.js.map → following-4BYSHU6G.js.map} +0 -0
- /package/dist/{fonts-U3NGQYJN.js.map → fonts-SM5HLEP4.js.map} +0 -0
- /package/dist/{forecast-UYBYSH3Y.js.map → forecast-4TS6PIGA.js.map} +0 -0
- /package/dist/{forecast-TG5RS5DG.js.map → forecast-7I6YKTYU.js.map} +0 -0
- /package/dist/{funding-55XBHYY6.js.map → funding-UZUGMCI4.js.map} +0 -0
- /package/dist/{funnel-D6YXU7C4.js.map → funnel-ITXHCKXM.js.map} +0 -0
- /package/dist/{ga4-WIOBF5HW.js.map → ga4-SBHUQKGK.js.map} +0 -0
- /package/dist/{generate-QG7GX6WO.js.map → generate-JQIK3UYS.js.map} +0 -0
- /package/dist/{get-WEWFUNWZ.js.map → get-42THE7PC.js.map} +0 -0
- /package/dist/{get-IGXC3JQ5.js.map → get-56NGML76.js.map} +0 -0
- /package/dist/{get-P5Z274DM.js.map → get-7QHQMT3F.js.map} +0 -0
- /package/dist/{get-TISXCTDV.js.map → get-EJ5Q72W7.js.map} +0 -0
- /package/dist/{get-TXVHONYI.js.map → get-FGHRSPZJ.js.map} +0 -0
- /package/dist/{get-Z46N7LBR.js.map → get-GC34EKMH.js.map} +0 -0
- /package/dist/{get-QA333Q5J.js.map → get-SOSR3FVM.js.map} +0 -0
- /package/dist/{get-E4VOTCE6.js.map → get-VQJIQ4P3.js.map} +0 -0
- /package/dist/{gif-TD37CRTZ.js.map → gif-PPCB3BLX.js.map} +0 -0
- /package/dist/{google-PFRI7YIG.js.map → google-HSIRHXDB.js.map} +0 -0
- /package/dist/{google-6A3YLR3K.js.map → google-XHNZTASN.js.map} +0 -0
- /package/dist/{google-ads-GBX5YHPT.js.map → google-ads-KC3IMYTU.js.map} +0 -0
- /package/dist/{group-6ENUPDYO.js.map → group-QGTLBE77.js.map} +0 -0
- /package/dist/{group-EYF34B3P.js.map → group-U2WSORDA.js.map} +0 -0
- /package/dist/{gsc-KDE2DTH2.js.map → gsc-EQYYXMSJ.js.map} +0 -0
- /package/dist/{history-M2KVZ2E7.js.map → history-AWPJ7C35.js.map} +0 -0
- /package/dist/{history-BRWYSJQL.js.map → history-F765U4J7.js.map} +0 -0
- /package/dist/{history-XOB23MLX.js.map → history-VNLS2TKB.js.map} +0 -0
- /package/dist/{hubspot-YEZGTOM2.js.map → hubspot-VJOE2XCP.js.map} +0 -0
- /package/dist/{icon-N77IGSXP.js.map → icon-VMJB2MBO.js.map} +0 -0
- /package/dist/{ideas-J6GCTQ6U.js.map → ideas-E4AWTXNN.js.map} +0 -0
- /package/dist/{images-55KBTRVO.js.map → images-WLAJPXFL.js.map} +0 -0
- /package/dist/{improve-BKFZOBXI.js.map → improve-QYP72NOH.js.map} +0 -0
- /package/dist/{ingest-QNV3B2ST.js.map → ingest-43DTZJHV.js.map} +0 -0
- /package/dist/{ingest-LKGF5E5V.js.map → ingest-B5OOTIAS.js.map} +0 -0
- /package/dist/{insights-7NC2JFXU.js.map → insights-EOUJJRUH.js.map} +0 -0
- /package/dist/{insights-7CQJOBWX.js.map → insights-XY6II7TX.js.map} +0 -0
- /package/dist/{inspect-WNPQXU4H.js.map → inspect-WGGPJUS6.js.map} +0 -0
- /package/dist/{inspiration-SQUEBO2K.js.map → inspiration-CSN3AXDD.js.map} +0 -0
- /package/dist/{instant-experiences-3E6RRUHF.js.map → instant-experiences-YJIVONJA.js.map} +0 -0
- /package/dist/{intent-P75BDP4H.js.map → intent-5XO232DG.js.map} +0 -0
- /package/dist/{job-B6UEZLTA.js.map → job-RB7LJI4W.js.map} +0 -0
- /package/dist/{job-create-WM27NOGZ.js.map → job-create-OYJCLKZ5.js.map} +0 -0
- /package/dist/{job-status-6V7DVVYL.js.map → job-status-NTQWCQBZ.js.map} +0 -0
- /package/dist/{keep-ACLZB7KL.js.map → keep-BUORBI7V.js.map} +0 -0
- /package/dist/{keyword-gap-54F6CZLM.js.map → keyword-gap-ZGMK7SMK.js.map} +0 -0
- /package/dist/{keyword-metrics-SJLYED7I.js.map → keyword-metrics-TOUOQ7SS.js.map} +0 -0
- /package/dist/{keywords-for-site-CY2XUFR4.js.map → keywords-for-site-PJHOSSLF.js.map} +0 -0
- /package/dist/{knowledge-5VEMAHG7.js.map → knowledge-LQXY6UIX.js.map} +0 -0
- /package/dist/{landing-DZLICA3P.js.map → landing-ILHRRFYD.js.map} +0 -0
- /package/dist/{landings-Q7T2HSYK.js.map → landings-CY2PRE2U.js.map} +0 -0
- /package/dist/{languages-PEGOE365.js.map → languages-U4HA5KQC.js.map} +0 -0
- /package/dist/{languages-HWMPAPQN.js.map → languages-XO4FEKOB.js.map} +0 -0
- /package/dist/{launches-4HI65M3C.js.map → launches-EXKYONGX.js.map} +0 -0
- /package/dist/{layerize-HXML3KQX.js.map → layerize-HD7DU6WE.js.map} +0 -0
- /package/dist/{lead-routes-Q2T3RQXN.js.map → lead-routes-HBAMCZI4.js.map} +0 -0
- /package/dist/{leads-GZ7RFM7D.js.map → leads-5TYQUSIR.js.map} +0 -0
- /package/dist/{leads-WBZP37CG.js.map → leads-ZDH4PLRE.js.map} +0 -0
- /package/dist/{learn-QNOTY4JA.js.map → learn-WTREPVV2.js.map} +0 -0
- /package/dist/{library-OVX3OUYV.js.map → library-BZVAYFPU.js.map} +0 -0
- /package/dist/{lighthouse-2TDPDU7J.js.map → lighthouse-4VL2PH24.js.map} +0 -0
- /package/dist/{line-item-writes-6RNUOFKK.js.map → line-item-writes-PYADJHLW.js.map} +0 -0
- /package/dist/{line-items-YOBU6DYQ.js.map → line-items-OYCJMB6Y.js.map} +0 -0
- /package/dist/{link-7PEVIIUA.js.map → link-CLG2FSJ3.js.map} +0 -0
- /package/dist/{linkedin-YYNBLBM3.js.map → linkedin-FTZZWW6D.js.map} +0 -0
- /package/dist/{linkedin-person-JGQTT54I.js.map → linkedin-person-DVBTOKLI.js.map} +0 -0
- /package/dist/{list-N5FHLG2Z.js.map → list-4IE7K3OE.js.map} +0 -0
- /package/dist/{list-SDHECXK5.js.map → list-ES7ZHOBJ.js.map} +0 -0
- /package/dist/{list-U3ZABSGW.js.map → list-FDYKWCOW.js.map} +0 -0
- /package/dist/{list-UF7Y4FDE.js.map → list-HX4TZ3OW.js.map} +0 -0
- /package/dist/{list-AAQISQHE.js.map → list-J4XZ3V4A.js.map} +0 -0
- /package/dist/{list-H2XBHKQK.js.map → list-OBB6Q2SO.js.map} +0 -0
- /package/dist/{list-VO473W6E.js.map → list-OCHRLITF.js.map} +0 -0
- /package/dist/{list-IFVBO2E2.js.map → list-SW63CXEC.js.map} +0 -0
- /package/dist/{list-QYUU66YV.js.map → list-X6IOR6AS.js.map} +0 -0
- /package/dist/{locations-MXWGZIGU.js.map → locations-64JNCQID.js.map} +0 -0
- /package/dist/{locations-SHYN5J4Q.js.map → locations-PYZEJPW3.js.map} +0 -0
- /package/dist/{log-HCWZ6C4R.js.map → log-PKFKZQXD.js.map} +0 -0
- /package/dist/{logo-2NDZ2EVN.js.map → logo-2I2S2THP.js.map} +0 -0
- /package/dist/{lookup-UFVB2ZZF.js.map → lookup-S74NWDKI.js.map} +0 -0
- /package/dist/{make-VZKIB23N.js.map → make-5MCL4B3T.js.map} +0 -0
- /package/dist/{map-RFMJ4AF7.js.map → map-JB2OYS7G.js.map} +0 -0
- /package/dist/{mcp-VRFT3QJW.js.map → mcp-GS7AO7K5.js.map} +0 -0
- /package/dist/{media-5XRMDMKD.js.map → media-4V5IBDKN.js.map} +0 -0
- /package/dist/{media-3M3PVSEZ.js.map → media-KFQ56V4R.js.map} +0 -0
- /package/dist/{media-sources-NTZRJGFU.js.map → media-sources-JFLZPZAO.js.map} +0 -0
- /package/dist/{members-EOIF2XN3.js.map → members-E6EJAZZ4.js.map} +0 -0
- /package/dist/{meme-EOAFE4FS.js.map → meme-4KWPQ6UF.js.map} +0 -0
- /package/dist/{meta-6IFYEOZL.js.map → meta-X46LC3GI.js.map} +0 -0
- /package/dist/{metrics-25LYUEB7.js.map → metrics-76BTT3Y3.js.map} +0 -0
- /package/dist/{models-EU3NO4IY.js.map → models-Z6SUHWKI.js.map} +0 -0
- /package/dist/{normalize-UQIZEJHT.js.map → normalize-UQIN6KDH.js.map} +0 -0
- /package/dist/{normalize-NDBXU6UO.js.map → normalize-WEVIIPWW.js.map} +0 -0
- /package/dist/{options-Y6JI2ZVZ.js.map → options-YWD3K4UJ.js.map} +0 -0
- /package/dist/{organization-TO2V7AWX.js.map → organization-ZACAD7FF.js.map} +0 -0
- /package/dist/{output-KIQWBKKA.js.map → output-E3FDRLRQ.js.map} +0 -0
- /package/dist/{page-GGT3KZ5E.js.map → page-3Q5ZCRPX.js.map} +0 -0
- /package/dist/{page-photos-FKWHLNWM.js.map → page-photos-ZIRMGE6V.js.map} +0 -0
- /package/dist/{pages-JALRE36R.js.map → pages-TK6Y7IYX.js.map} +0 -0
- /package/dist/{performance-YAUOH75F.js.map → performance-DFQVCUDZ.js.map} +0 -0
- /package/dist/{performance-V26JUNGC.js.map → performance-KBH3O4O4.js.map} +0 -0
- /package/dist/{pinterest-KURR4GJJ.js.map → pinterest-BZ2UFFBC.js.map} +0 -0
- /package/dist/{pixels-6PKYGSQ4.js.map → pixels-6XRTLCM3.js.map} +0 -0
- /package/dist/{pixels-NLH2PN6Q.js.map → pixels-H642RPK4.js.map} +0 -0
- /package/dist/{plan-223DL4HG.js.map → plan-2Q6SOHMD.js.map} +0 -0
- /package/dist/{posts-YPW4NHWM.js.map → posts-FV62HSKG.js.map} +0 -0
- /package/dist/{preview-CD2QADBJ.js.map → preview-LB73AIG2.js.map} +0 -0
- /package/dist/{profile-7KUWZTJR.js.map → profile-OFG36E72.js.map} +0 -0
- /package/dist/{promoted-tweet-writes-3SLFZQDA.js.map → promoted-tweet-writes-Q45KVTGM.js.map} +0 -0
- /package/dist/{promoted-tweets-3WRSJYKK.js.map → promoted-tweets-4PAYET4L.js.map} +0 -0
- /package/dist/{properties-LCZX4UJH.js.map → properties-HHJ2K6YL.js.map} +0 -0
- /package/dist/{publish-T6ITLSJA.js.map → publish-TOOCBLS6.js.map} +0 -0
- /package/dist/{query-SRJXJVDY.js.map → query-GSBZKWHE.js.map} +0 -0
- /package/dist/{query-RKJS3QOS.js.map → query-TTNBBIJH.js.map} +0 -0
- /package/dist/{query-WX3K7ZDY.js.map → query-XGPZP5UC.js.map} +0 -0
- /package/dist/{questionnaire-CCDUSEI3.js.map → questionnaire-VIG54QFD.js.map} +0 -0
- /package/dist/{read-JTJQSEVB.js.map → read-DF3UPNBM.js.map} +0 -0
- /package/dist/{reddit-O2TNBMD6.js.map → reddit-2BOIPZLW.js.map} +0 -0
- /package/dist/{refresh-N726O36Z.js.map → refresh-2YQGTF2Q.js.map} +0 -0
- /package/dist/{refresh-H4DETVS5.js.map → refresh-RFUNCAXM.js.map} +0 -0
- /package/dist/{release-A5HKTUMV.js.map → release-6SQOFLTQ.js.map} +0 -0
- /package/dist/{relevant-pages-VJHTUJMB.js.map → relevant-pages-OMYH3PSP.js.map} +0 -0
- /package/dist/{remove-5FMNASGC.js.map → remove-HSTBAJL2.js.map} +0 -0
- /package/dist/{remove-BHUYRNRU.js.map → remove-REVQUCGW.js.map} +0 -0
- /package/dist/{reopen-TTDYNANZ.js.map → reopen-3JFASZ7Z.js.map} +0 -0
- /package/dist/{rerun-KFTQ6Y64.js.map → rerun-HAD2SZDF.js.map} +0 -0
- /package/dist/{research-YWON4E4H.js.map → research-DT7UTJQT.js.map} +0 -0
- /package/dist/{reset-SSNHRP5C.js.map → reset-7VYYVMHY.js.map} +0 -0
- /package/dist/{reset-VTNVCE23.js.map → reset-TPMUZBN3.js.map} +0 -0
- /package/dist/{resolve-375FALNN.js.map → resolve-7DTGRVQ5.js.map} +0 -0
- /package/dist/{retry-TLGYZ6RJ.js.map → retry-AE76A5JL.js.map} +0 -0
- /package/dist/{retry-PNS6RWJ6.js.map → retry-WVVMZBJT.js.map} +0 -0
- /package/dist/{retry-failed-DSVEAY3T.js.map → retry-failed-NH47LEKA.js.map} +0 -0
- /package/dist/{revenue-6L2AY7L7.js.map → revenue-TXR2Z3LQ.js.map} +0 -0
- /package/dist/{rule-writes-XSNS3XYK.js.map → rule-writes-ILVWCFKQ.js.map} +0 -0
- /package/dist/{rules-F6J4V7PZ.js.map → rules-FDJ5YESR.js.map} +0 -0
- /package/dist/{rules-GHGEVCBQ.js.map → rules-YO3EKWCX.js.map} +0 -0
- /package/dist/{rules-add-7UI5A3MJ.js.map → rules-add-T2AQ3C4P.js.map} +0 -0
- /package/dist/{run-UN4HXEGZ.js.map → run-N4A75YWN.js.map} +0 -0
- /package/dist/{run-B77D2TGX.js.map → run-VT5OCURD.js.map} +0 -0
- /package/dist/{scaffold-ad-74CEBCRR.js.map → scaffold-ad-FINQYGF2.js.map} +0 -0
- /package/dist/{scaffold-static-ad-2IMVWNYB.js.map → scaffold-static-ad-YDDFTTNN.js.map} +0 -0
- /package/dist/{scaffold-video-JDCX3BIT.js.map → scaffold-video-2CCS7CK4.js.map} +0 -0
- /package/dist/{schedule-WK5MRYCJ.js.map → schedule-XZVUL4CA.js.map} +0 -0
- /package/dist/{schedule-Z2AQXR7W.js.map → schedule-Y7UN7Q24.js.map} +0 -0
- /package/dist/{scheduled-agents-2NTFBABN.js.map → scheduled-agents-35PY445V.js.map} +0 -0
- /package/dist/{schema-BBC6AARZ.js.map → schema-JT3464PC.js.map} +0 -0
- /package/dist/{schema-BDZA64GZ.js.map → schema-NSXMRNWM.js.map} +0 -0
- /package/dist/{scrape-CTE5SNQN.js.map → scrape-3PWNMK4D.js.map} +0 -0
- /package/dist/{screenshot-ELJYTIM7.js.map → screenshot-CJYM4SF7.js.map} +0 -0
- /package/dist/{search-OF6LTOK6.js.map → search-5QUBKDL6.js.map} +0 -0
- /package/dist/{search-KBIF5NZX.js.map → search-BR5KK7BE.js.map} +0 -0
- /package/dist/{search-5B5AXN5V.js.map → search-CDONEXJY.js.map} +0 -0
- /package/dist/{search-7ELGWNMH.js.map → search-FMOFSOJ3.js.map} +0 -0
- /package/dist/{search-KC4QRMU2.js.map → search-VDSV554K.js.map} +0 -0
- /package/dist/{search-XO5UPSBF.js.map → search-WAD2Z5VU.js.map} +0 -0
- /package/dist/{search-copy-DDRY6HPI.js.map → search-copy-5IKZTJUP.js.map} +0 -0
- /package/dist/{seeds-HH5E7GCS.js.map → seeds-EXTAHRXO.js.map} +0 -0
- /package/dist/{select-SZAJR4QY.js.map → select-EWUA34ZM.js.map} +0 -0
- /package/dist/{sends-H7WMLJ5H.js.map → sends-CSE4LTQU.js.map} +0 -0
- /package/dist/{sequences-V4STPHGV.js.map → sequences-RRUXKL7H.js.map} +0 -0
- /package/dist/{set-prompt-KHB4JJV2.js.map → set-prompt-ZX364V7V.js.map} +0 -0
- /package/dist/{setup-links-SJVDPNOF.js.map → setup-links-BI6GPN5F.js.map} +0 -0
- /package/dist/{shared-P2PFNNJF.js.map → shared-FBQIX453.js.map} +0 -0
- /package/dist/{shopify-MODNP6LT.js.map → shopify-RALHX5OB.js.map} +0 -0
- /package/dist/{site-5K73B2MI.js.map → site-WKS57PJL.js.map} +0 -0
- /package/dist/{sitemaps-KMRWAKNK.js.map → sitemaps-TMHDYRHR.js.map} +0 -0
- /package/dist/{sites-3QZDCQRG.js.map → sites-AIJPSL7T.js.map} +0 -0
- /package/dist/{skills-KV4X22KQ.js.map → skills-7VRKG7GE.js.map} +0 -0
- /package/dist/{sources-S7LAV2EP.js.map → sources-ECE62RFF.js.map} +0 -0
- /package/dist/{sources-2E6EK6YK.js.map → sources-VUKEO4WE.js.map} +0 -0
- /package/dist/{stale-3IPYZ7BI.js.map → stale-PSJNR6EY.js.map} +0 -0
- /package/dist/{stats-3TAUG3Q3.js.map → stats-ROWGFLUZ.js.map} +0 -0
- /package/dist/{status-6QTJSJN7.js.map → status-SJKGPDXC.js.map} +0 -0
- /package/dist/{sticker-SH6VUPFR.js.map → sticker-MCJ4IOPJ.js.map} +0 -0
- /package/dist/{stock-IICCY3IQ.js.map → stock-QKI2V3EO.js.map} +0 -0
- /package/dist/{studies-A52C544C.js.map → studies-DUFFDAZS.js.map} +0 -0
- /package/dist/{studio-4QOFG7MQ.js.map → studio-6ZXUKA4G.js.map} +0 -0
- /package/dist/{study-writes-3R4D6C3F.js.map → study-writes-N7AOKA4W.js.map} +0 -0
- /package/dist/{suggest-3CFMURUH.js.map → suggest-534G7JP5.js.map} +0 -0
- /package/dist/{sync-TJ7MGFIE.js.map → sync-QY2O4ISM.js.map} +0 -0
- /package/dist/{sync-H4XVXITS.js.map → sync-TX4FZRLP.js.map} +0 -0
- /package/dist/{sync-37P7TZQH.js.map → sync-UW5ANNQZ.js.map} +0 -0
- /package/dist/{sync-definition-CDQCNCU2.js.map → sync-definition-3L7K7QWS.js.map} +0 -0
- /package/dist/{tag-6WIQLRDW.js.map → tag-SBOFQW2N.js.map} +0 -0
- /package/dist/{tag-manager-KWITWX6Y.js.map → tag-manager-5ORFHLM4.js.map} +0 -0
- /package/dist/{tags-OB24PQKE.js.map → tags-2CDXVME5.js.map} +0 -0
- /package/dist/{tags-SS7FE52N.js.map → tags-6H4JKL2B.js.map} +0 -0
- /package/dist/{tags-2VZUCNNH.js.map → tags-7ZWYNXJD.js.map} +0 -0
- /package/dist/{tags-CBINFGAN.js.map → tags-BYZCEK5V.js.map} +0 -0
- /package/dist/{tags-FVRIF3XS.js.map → tags-WFN43UES.js.map} +0 -0
- /package/dist/{targeting-II4CQUPW.js.map → targeting-XK7ED2CS.js.map} +0 -0
- /package/dist/{targeting-constants-2EHTMIMX.js.map → targeting-constants-6RAE4UMA.js.map} +0 -0
- /package/dist/{targeting-criteria-ECC662DL.js.map → targeting-criteria-QIFK56RP.js.map} +0 -0
- /package/dist/{targets-GIRHNZ4W.js.map → targets-OVQQEF6E.js.map} +0 -0
- /package/dist/{terms-URBA2IXT.js.map → terms-CUIVHWMT.js.map} +0 -0
- /package/dist/{testimonials-IEJ24MH7.js.map → testimonials-H6SAGYMM.js.map} +0 -0
- /package/dist/{themes-JBX6W4SP.js.map → themes-BQP3HK74.js.map} +0 -0
- /package/dist/{top-companies-POSJMWSB.js.map → top-companies-672JEIYA.js.map} +0 -0
- /package/dist/{transcript-FCKURXTT.js.map → transcript-QRDDL4MX.js.map} +0 -0
- /package/dist/{translate-F4B3WEJO.js.map → translate-2IHE5YDI.js.map} +0 -0
- /package/dist/{triggers-DRAKT5QB.js.map → triggers-JMMH4YDD.js.map} +0 -0
- /package/dist/{tweets-LECORASF.js.map → tweets-HESNCAOU.js.map} +0 -0
- /package/dist/{unfollow-DBV2F7YP.js.map → unfollow-ZEE4K5EH.js.map} +0 -0
- /package/dist/{unlink-OEUJXG64.js.map → unlink-AYBNJEJP.js.map} +0 -0
- /package/dist/{unstage-XCH4VBM2.js.map → unstage-F4GIR4XE.js.map} +0 -0
- /package/dist/{unstage-F362CYM7.js.map → unstage-XMOGDPZ4.js.map} +0 -0
- /package/dist/{update-BAE3BEEW.js.map → update-3NNT6EAS.js.map} +0 -0
- /package/dist/{update-UME7HHOC.js.map → update-CMJUZH3K.js.map} +0 -0
- /package/dist/{update-JDFJPQ3O.js.map → update-NC2BN6QB.js.map} +0 -0
- /package/dist/{update-4CVNP3B5.js.map → update-UX6PTFXZ.js.map} +0 -0
- /package/dist/{update-XOSKQEMK.js.map → update-YIUE3QBL.js.map} +0 -0
- /package/dist/{upload-BABKWQIN.js.map → upload-OY35RO5V.js.map} +0 -0
- /package/dist/{upload-B27ZJMMZ.js.map → upload-XKBJU65H.js.map} +0 -0
- /package/dist/{upscale-QMBV3AGN.js.map → upscale-YZVFXJ75.js.map} +0 -0
- /package/dist/{url-options-JSRAMMEM.js.map → url-options-5ADN3SYO.js.map} +0 -0
- /package/dist/{url-params-ZVIYOHM2.js.map → url-params-DUEOK2Y3.js.map} +0 -0
- /package/dist/{use-TBDI3OAN.js.map → use-7EP5OXPQ.js.map} +0 -0
- /package/dist/{validate-DN44TVXS.js.map → validate-SFVCHAGI.js.map} +0 -0
- /package/dist/{variant-2A5GOOJF.js.map → variant-QNNTZPLR.js.map} +0 -0
- /package/dist/{videos-OVVH4LC2.js.map → videos-OGMX2BDQ.js.map} +0 -0
- /package/dist/{view-GNNIJGGN.js.map → view-VFZUL5UL.js.map} +0 -0
- /package/dist/{viewer-check-SOPRTRNX.js.map → viewer-check-K6UC5PCF.js.map} +0 -0
- /package/dist/{winners-6CW4CWZI.js.map → winners-LXOFPZOD.js.map} +0 -0
- /package/dist/{winning-ads-HIP6PWPL.js.map → winning-ads-J3WR3ENK.js.map} +0 -0
- /package/dist/{write-commands-UW5LKCAP.js.map → write-commands-FGWCJHLH.js.map} +0 -0
- /package/dist/{write-commands-U3JZ6UHG.js.map → write-commands-RSN3MPBW.js.map} +0 -0
- /package/dist/{write-commands-TPPJHGMT.js.map → write-commands-T5RY54ZT.js.map} +0 -0
- /package/dist/{write-commands-3G5WDFH3.js.map → write-commands-UTM7PPK5.js.map} +0 -0
- /package/dist/{x-ROOD4SQH.js.map → x-F44WG5LV.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/research/customers.ts","../../api/src/verbatim.ts"],"sourcesContent":["import { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type {\n ResearchFetchRequest,\n ResearchFetchResponse,\n ResearchRedditItem,\n TestimonialsSearchRequest,\n} from \"@baker/api\";\nimport { findVerbatim, foldForComparison } from \"@baker/api/verbatim\";\nimport { CUSTOMER_INSIGHTS_MODEL } from \"@baker/canvas-contract\";\nimport { defineCommand } from \"citty\";\nimport { parse as parseYaml } from \"yaml\";\nimport { z } from \"zod\";\nimport { apiGet, apiPost } from \"../../client.ts\";\nimport { askAboutText, type ReviewUsage } from \"../../engine/nodes/local/lib/render-review.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { holdUnbilledSpend } from \"../canvas/unbilled-spend.ts\";\nimport { findSubreddits, searchReddit } from \"./reddit.ts\";\n\n/**\n * `baker research customers` — what real customers say, kept only where they said it.\n *\n * Ads start from a customer's own words. An agent asked for those words writes plausible ones,\n * and a plausible quote is the one thing an ad must never carry. So nothing here is written by\n * the agent or the model: the model only POINTS at a span of a fetched text, and the code keeps\n * that span only if it is in that text as written (`keepVerbatim`) and the model judged the text a\n * buyer talking about this company (`keepOnTopic`): a real quote from the wrong conversation is\n * as useless to an ad as an invented one. One Knowledge file per insight, `status: observed`.\n */\n\nexport const INSIGHT_TYPES = [\n \"accommodation\",\n \"failed_solution\",\n \"nearly_didnt\",\n \"word\",\n \"moment\",\n \"pain\",\n \"objection\",\n \"desire\",\n \"proof\",\n \"other\",\n] as const;\nexport type InsightType = (typeof INSIGHT_TYPES)[number];\n\nexport const FORCES = [\"push\", \"pull\", \"anxiety\", \"habit\"] as const;\nexport type Force = (typeof FORCES)[number];\n\nexport type SourceKind = \"review\" | \"testimonial\" | \"reddit\" | \"web\";\n\n/**\n * The model's verdict on a span's text. Verbatim is not enough: a real quote from a thread about\n * a mobile game, or from someone the product acts against, is still not this company's customer\n * talking (BAKER-2148, BAKER-2495). on_topic: a buyer or user of this company, its product, its\n * category or a named competitor, about the problem it solves. off_topic: about something else.\n * not_a_buyer: on the subject, but the speaker is not a buyer (someone the product acts against,\n * a seller or the company replying, a marketer).\n */\nexport const FITS = [\"on_topic\", \"off_topic\", \"not_a_buyer\"] as const;\nexport type Fit = (typeof FITS)[number];\n\n/** One text a customer wrote, as the model is shown it and the gate checks it. */\nexport type CustomerSource = {\n /** What the insight cites: a URL, or `testimonials:<id>`. */\n ref: string;\n kind: SourceKind;\n text: string;\n /** One line: who said it, where. */\n context: string;\n /** When it was said, YYYY-MM-DD, when the source knows. */\n saidOn?: string;\n};\n\n/** What the model points at: a span of source number `source` (1-based, as the prompt numbers them). */\nexport type Candidate = {\n source: number;\n quote: string;\n type: InsightType;\n force?: Force;\n persona?: string;\n fit?: Fit;\n /** The model's one-line reason for `fit`. */\n why?: string;\n};\n\n/** A candidate whose quote is in its source as written. */\nexport type VerbatimInsight = Omit<Candidate, \"source\"> & { source: CustomerSource };\n\nexport const MAX_QUOTE_CHARS = 280;\n\n/**\n * The gate: a candidate survives only if its quote is in the source it cites, and what is kept\n * is the source's own spelling of that span, not the model's copy of it. Everything else (a\n * paraphrase, a quote cited to the wrong text, a source that does not exist) is dropped and\n * counted, never repaired; a span longer than MAX_QUOTE_CHARS is counted apart. Pure.\n */\nexport function keepVerbatim(\n candidates: readonly Candidate[],\n sources: readonly CustomerSource[],\n): { kept: VerbatimInsight[]; dropped: number; tooLong: number } {\n const kept: VerbatimInsight[] = [];\n let dropped = 0;\n let tooLong = 0;\n for (const { source: index, ...rest } of candidates) {\n const source = sources[index - 1];\n const quote = source ? findVerbatim(rest.quote, source.text) : null;\n if (!source || !quote) {\n dropped++;\n continue;\n }\n if (quote.length > MAX_QUOTE_CHARS) {\n tooLong++;\n continue;\n }\n kept.push({ ...rest, quote, source });\n }\n return { kept, dropped, tooLong };\n}\n\n/**\n * The second gate: a verbatim span is kept only when the model judged its text on topic AND\n * said why. A missing verdict or reason is off topic, never a pass, so a model that skips the\n * question writes nothing. Off-topic and wrong-speaker spans are counted apart. Pure.\n */\nexport function keepOnTopic(insights: readonly VerbatimInsight[]): {\n kept: VerbatimInsight[];\n offTopic: number;\n notABuyer: number;\n} {\n const kept: VerbatimInsight[] = [];\n let offTopic = 0;\n let notABuyer = 0;\n for (const insight of insights) {\n if (insight.fit === \"not_a_buyer\") notABuyer++;\n else if (insight.fit === \"on_topic\" && insight.why?.trim()) kept.push(insight);\n else offTopic++;\n }\n return { kept, offTopic, notABuyer };\n}\n\nconst SLUG_WORDS = 6;\n\n/** Lowercase ASCII words, accents dropped. */\nfunction asciiWords(text: string): string[] {\n return text\n .normalize(\"NFKD\")\n .replace(/\\p{M}/gu, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .trim()\n .split(\" \")\n .filter(Boolean);\n}\n\n/** The file name an insight gets: its type, then the first words of its quote, kebab-case ASCII. Pure. */\nfunction insightSlug(type: InsightType, quote: string): string {\n return [type.replace(/_/g, \"-\"), ...asciiWords(quote).slice(0, SLUG_WORDS)].join(\"-\");\n}\n\nexport type PlannedInsight = { id: string; insight: VerbatimInsight };\n\n/** An insight on file, as the planner compares it. `source` is absent on a file that names none. */\nexport type FiledInsight = { id: string; quote: string; source?: string };\n\n/**\n * Which insights to write and under what id. The first five types first (they write most of an\n * ad), at most `limit`. A quote already on file (or already planned) is skipped; so is a span\n * that contains, or is contained in, a quote filed from the same source (counted apart as an\n * overlap: the same customer statement filed twice double-counts it, BAKER-2198). An id held by a\n * different quote gets a `-2`, `-3`… so a file is never overwritten. Pure.\n */\nexport function planInsightWrites(\n insights: readonly VerbatimInsight[],\n existing: readonly FiledInsight[],\n limit: number,\n): { writes: PlannedInsight[]; skippedExisting: number; skippedOverlap: number } {\n const filed = existing.map((e) => ({ folded: foldForComparison(e.quote), source: e.source }));\n const quotes = new Set(filed.map((e) => e.folded));\n const ids = new Set(existing.map((e) => e.id));\n const ranked = [...insights].sort((a, b) => INSIGHT_TYPES.indexOf(a.type) - INSIGHT_TYPES.indexOf(b.type));\n const writes: PlannedInsight[] = [];\n let skippedExisting = 0;\n let skippedOverlap = 0;\n for (const insight of ranked) {\n const folded = foldForComparison(insight.quote);\n if (quotes.has(folded)) {\n skippedExisting++;\n continue;\n }\n const overlaps = filed.some(\n (e) => e.source === insight.source.ref && e.folded && (e.folded.includes(folded) || folded.includes(e.folded)),\n );\n if (overlaps) {\n skippedOverlap++;\n continue;\n }\n if (writes.length >= limit) continue;\n const base = insightSlug(insight.type, insight.quote);\n let id = base;\n for (let n = 2; ids.has(id); n++) id = `${base}-${n}`;\n quotes.add(folded);\n filed.push({ folded, source: insight.source.ref });\n ids.add(id);\n writes.push({ id, insight });\n }\n return { writes, skippedExisting, skippedOverlap };\n}\n\n/** A frontmatter string, YAML-safe: a JSON string is a valid double-quoted YAML scalar. */\nfunction yamlScalar(value: string): string {\n return JSON.stringify(value);\n}\n\nconst TITLE_CHARS = 70;\n\n/** The quote's opening words as the entry's title, in quote marks, so the Knowledge list reads as what was said. */\nfunction insightTitle(quote: string): string {\n const text = quote.replace(/[\"“”]/g, \"\").replace(/\\s+/g, \" \").trim();\n if (text.length <= TITLE_CHARS) return `“${text}”`;\n const cut = text.slice(0, TITLE_CHARS);\n return `“${cut.slice(0, cut.lastIndexOf(\" \")).replace(/[,;:.]$/, \"\")}…”`;\n}\n\n/**\n * The insight's Knowledge file (`src/content/insights/<id>.md`): frontmatter per the `insights`\n * collection, `status: observed`, and one line of context as the body. Pure.\n */\nexport function renderInsightFile(insight: VerbatimInsight, opts: { today: string; product?: string }): string {\n const { source } = insight;\n const lines = [\n \"---\",\n `title: ${yamlScalar(insightTitle(insight.quote))}`,\n `type: ${insight.type}`,\n `quote: ${yamlScalar(insight.quote)}`,\n `source: ${yamlScalar(source.ref)}`,\n `sourceKind: ${source.kind}`,\n `seenAt: ${yamlScalar(source.saidOn ?? opts.today)}`,\n \"status: observed\",\n ];\n if (insight.force) lines.push(`force: ${insight.force}`);\n if (insight.persona?.trim()) lines.push(`persona: ${yamlScalar(insight.persona.trim())}`);\n if (opts.product) lines.push(`product: ${yamlScalar(opts.product)}`);\n lines.push(\"---\", \"\", source.context.replace(/\\s+/g, \" \").trim(), \"\");\n return lines.join(\"\\n\");\n}\n\n/** How much of one review or comment the model reads (and the gate checks against). */\nconst MAX_SHORT_SOURCE_CHARS = 1_500;\n\nconst PLATFORM_NAMES: Record<string, string> = {\n google: \"Google\",\n trustpilot: \"Trustpilot\",\n yelp: \"Yelp\",\n tripadvisor: \"Tripadvisor\",\n g2: \"G2\",\n capterra: \"Capterra\",\n amazon: \"Amazon\",\n app_store: \"App Store\",\n google_play: \"Google Play\",\n};\n\n/** One library review as `/api/testimonials` returns it, read loosely so a new field never empties the list. */\nconst LibraryReviewSchema = z.object({\n _id: z.string().min(1),\n reviewText: z.string(),\n sourceType: z.string().optional(),\n rating: z.number().optional(),\n reviewDate: z.number().optional(),\n});\n\nfunction dayOf(ms: number | string): string | undefined {\n const date = new Date(ms);\n return Number.isNaN(date.getTime()) ? undefined : date.toISOString().slice(0, 10);\n}\n\n/** \"A …\" or \"An …\", ending in one full stop. */\nfunction sentence(rest: string): string {\n const line = `${/^[aeiou]/i.test(rest) ? \"An\" : \"A\"} ${rest}`;\n return line.endsWith(\".\") ? line : `${line}.`;\n}\n\n/**\n * \"A 4★ Trustpilot review.\" The kind of source and its rating, never the reviewer: this line is\n * committed to the client's repository and published as Knowledge, and whoever needs the person\n * follows `source` to the library (BAKER-2471).\n */\nfunction reviewContext(review: z.infer<typeof LibraryReviewSchema>): string {\n const platform = review.sourceType ? `${PLATFORM_NAMES[review.sourceType] ?? review.sourceType} ` : \"\";\n const rating = review.rating !== undefined ? `${review.rating}★ ` : \"\";\n return sentence(`${rating}${platform}review`);\n}\n\n/** The company's reviews (a plain list from `/api/testimonials`) as sources, each cited `testimonials:<id>`. Pure. */\nexport function sourcesFromTestimonials(data: unknown): CustomerSource[] {\n const list = Array.isArray(data) ? data : [];\n return list.flatMap((item): CustomerSource[] => {\n const parsed = LibraryReviewSchema.safeParse(item);\n if (!parsed.success) return [];\n const review = parsed.data;\n const text = review.reviewText.trim().slice(0, MAX_SHORT_SOURCE_CHARS);\n if (!text) return [];\n const saidOn = review.reviewDate !== undefined ? dayOf(review.reviewDate) : undefined;\n return [\n {\n ref: `testimonials:${review._id}`,\n kind: \"review\",\n text,\n context: reviewContext(review),\n ...(saidOn ? { saidOn } : {}),\n },\n ];\n });\n}\n\n/** Reddit posts and comments as sources, each cited by its own permalink; a post's title counts as its words. Pure. */\nexport function sourcesFromReddit(items: readonly ResearchRedditItem[]): CustomerSource[] {\n return items.flatMap((item): CustomerSource[] => {\n const words = item.kind === \"post\" ? [item.title ?? \"\", item.text].filter((t) => t.trim()).join(\"\\n\\n\") : item.text;\n const text = words.trim().slice(0, MAX_SHORT_SOURCE_CHARS);\n if (!text) return [];\n const under = item.kind === \"comment\" && item.title ? `, under ${JSON.stringify(item.title)}` : \"\";\n const saidOn = dayOf(item.createdAt);\n return [\n {\n ref: item.permalink,\n kind: \"reddit\",\n text,\n context: `A Reddit ${item.kind} in r/${item.subreddit}${under}.`,\n ...(saidOn ? { saidOn } : {}),\n },\n ];\n });\n}\n\n/** How much of one web page the model reads (and the gate checks against). */\nconst MAX_PAGE_SOURCE_CHARS = 6_000;\n\n/** Pages read with `research fetch` as sources, each cited by where the read landed. Pure. */\nexport function sourcesFromPages(pages: readonly ResearchFetchResponse[]): CustomerSource[] {\n return pages.flatMap((page): CustomerSource[] => {\n const text = page.content.trim().slice(0, MAX_PAGE_SOURCE_CHARS);\n if (!text) return [];\n const host = URL.canParse(page.finalUrl) ? new URL(page.finalUrl).host : page.finalUrl;\n const title = page.title?.trim() ? `, ${JSON.stringify(page.title.trim())}` : \"\";\n return [{ ref: page.finalUrl, kind: \"web\", text, context: `A page on ${host}${title}.` }];\n });\n}\n\n/** What the model judges relevance against: COMPANY.md as written, and the product entries' names. */\nexport type CompanyContext = { about?: string; products: readonly string[] };\n\n/** A source as the model reads it: its number, where it was said, then the text. */\nfunction promptLine(source: CustomerSource, n: number): string {\n const where = source.context.replace(/\\s+/g, \" \").trim();\n const ofCompany = source.kind === \"review\" ? \" A review of this company.\" : \"\";\n return `[${n}] ${where || ofCompany ? `(${`${where}${ofCompany}`.trim()}) ` : \"\"}${source.text}`;\n}\n\n/**\n * The classification prompt: who the company is, numbered texts, and the instruction to point at\n * exact spans of them with a verdict on whether each is about this company's customers. What comes\n * back is only a pointer and a verdict; `keepVerbatim` and `keepOnTopic` decide what is kept. Pure.\n */\nexport function buildCustomersPrompt(\n sources: readonly CustomerSource[],\n opts: { focus?: string; company?: CompanyContext } = {},\n): string {\n const { focus, company } = opts;\n const about = company?.about?.trim();\n const products = company?.products.length ? `Its products: ${company.products.join(\", \")}.` : \"\";\n return [\n `Below are ${sources.length} numbered texts (reviews, testimonials, forum posts and comments, web pages)${focus ? `, gathered about: ${focus}` : \"\"}.`,\n \"Find what this company's customers say in them, the material its ads are written from.\",\n \"\",\n \"The company:\",\n about ? about : \"(no company description on file: judge by the focus and the company's own reviews)\",\n ...(products ? [products] : []),\n \"\",\n \"Rules:\",\n \"- Every quote must be an EXACT substring of the text it cites: the same words, in the same order, with the same spelling and typos. Copy, never paraphrase, translate, summarize, correct or join two passages. Never quote the part in parentheses before a text; that only says where it was said.\",\n `- The shortest span that carries the truth, at most ${MAX_QUOTE_CHARS} characters.`,\n \"- Only the customer's own words: skip a seller's reply, an ad, a page's marketing copy, and a text with no truth in it. Return fewer, or none, rather than invent.\",\n \"- fit, for every quote: on_topic when the speaker is a buyer or user of this company, its product, its category or a named competitor, talking about the problem it solves, in a market it serves; off_topic when the text (or the forum or thread it was said in) is about something else, such as a game, another industry or another country's market; not_a_buyer when it is on the subject but the speaker is not a buyer: someone the product acts against, a seller or the company replying, a marketer. A real quote that is off_topic is worthless here, so judge strictly.\",\n \"- why: one short line on what makes it that fit (who is speaking, about what).\",\n \"- type: accommodation (a workaround they live with), failed_solution (what they tried before that failed them), nearly_didnt (what nearly stopped them buying), word (their own word or phrase for the problem), moment (the moment that started their search), pain, objection, desire, proof (a result they got), other.\",\n \"- force, when it speaks to one: push (what pushes them off the old way), pull (what draws them to the new one), anxiety (what they fear about changing), habit (what keeps them where they are).\",\n '- persona: a few words on who is speaking, only when the text says it (\"restaurant owner\", \"night-shift courier\"). Never a person\\'s name.',\n \"\",\n 'Reply with only this JSON: {\"insights\":[{\"source\":1,\"quote\":\"\",\"fit\":\"\",\"why\":\"\",\"type\":\"\",\"force\":\"\",\"persona\":\"\"}]}',\n \"\",\n \"Texts:\",\n ...sources.map((source, i) => promptLine(source, i + 1)),\n ].join(\"\\n\");\n}\n\nconst AnswerSchema = z.object({ insights: z.array(z.unknown()) });\n\nconst CandidateSchema = z.object({\n source: z.coerce.number().int().positive(),\n quote: z.string().trim().min(1),\n type: z.enum(INSIGHT_TYPES).catch(\"other\"),\n force: z.enum(FORCES).optional().catch(undefined),\n persona: z.string().trim().optional().catch(undefined),\n fit: z.enum(FITS).optional().catch(undefined),\n why: z.string().trim().optional().catch(undefined),\n});\n\n/** The model's spans, or null when the reply is not the asked shape. An item that is not a span is dropped. Pure. */\nexport function candidatesFrom(answer: unknown): Candidate[] | null {\n const parsed = AnswerSchema.safeParse(answer);\n if (!parsed.success) return null;\n return parsed.data.insights.flatMap((item): Candidate[] => {\n const candidate = CandidateSchema.safeParse(item);\n if (!candidate.success) return [];\n const { source, quote, type, force, persona, fit, why } = candidate.data;\n return [\n {\n source,\n quote,\n type,\n ...(force ? { force } : {}),\n ...(persona ? { persona } : {}),\n ...(fit ? { fit } : {}),\n ...(why ? { why } : {}),\n },\n ];\n });\n}\n\n/** Sources in batches of at most `budget` characters of text; a source is never split. Pure. */\nexport function batchSources(sources: readonly CustomerSource[], budget: number): CustomerSource[][] {\n const batches: CustomerSource[][] = [];\n let current: CustomerSource[] = [];\n let size = 0;\n for (const source of sources) {\n if (current.length > 0 && size + source.text.length > budget) {\n batches.push(current);\n current = [];\n size = 0;\n }\n current.push(source);\n size += source.text.length;\n }\n if (current.length > 0) batches.push(current);\n return batches;\n}\n\n/** How many insights answered per source; null when the source was not asked or did not answer. */\nexport type SourceCounts = { testimonials: number | null; reddit: number | null; web: number | null };\n\nconst FEW_OBSERVED = 5;\n\n/** What the agent does next. Pure. */\nexport function customersHints(input: {\n written: number;\n offTopic?: number;\n notABuyer?: number;\n sources: SourceCounts;\n}): string[] {\n const { written, offTopic = 0, notABuyer = 0, sources } = input;\n const widen =\n 'Search in the customers\\' own words with --query \"<the words they write>\" (their phrasing, not a category name), or add --web.';\n const elsewhere =\n offTopic > 0 && offTopic >= written\n ? [\n `${offTopic} real quotes were dropped as not about this company, its product, category or competitors (the forum or thread was about something else). Put the product or category in --query with the customers' words (\"<category> <their words>\"), and check where this company's customers actually talk with \\`baker research reddit subreddits \"<category>\"\\`. Never write the dropped quotes in by hand.`,\n ]\n : [];\n const notBuyers =\n notABuyer > 0 && notABuyer >= written\n ? [\n `${notABuyer} quotes on the subject were dropped because the speakers are not buyers (people the product acts against, sellers replying, marketers). The search reached the right conversations: look for the buyers' side of them — reviews of this company, or --query in a buyer's words (\"I chose\", \"we switched\", \"before we signed\"). Never write the dropped quotes in by hand.`,\n ]\n : [];\n const why = [...elsewhere, ...notBuyers];\n if (written === 0) {\n return [\n ...why,\n \"No customer words were found to keep, so nothing was written. Import where customers already talk: `baker testimonials sources add <review page link>` (Google, Trustpilot, G2, app stores…) brings their reviews into the library; then run this again.\",\n ...(sources.reddit === null\n ? ['Reddit was not read: pass --focus \"<product>\" or --query \"<their words>\".']\n : [widen]),\n \"Until there are observed truths, ad ideas go in as explore bets: an idea with an empty `evidence` list.\",\n ];\n }\n const cite = `Cite these by id in an idea's \\`evidence\\` (src/creatives/_ideas/<idea>.md); write the ad from the quote as said.`;\n return [...why, ...(written < FEW_OBSERVED ? [`Only ${written} observed. ${widen}`, cite] : [cite])];\n}\n\n// ---------------------------------------------------------------------------\n// The command: gather, classify, gate, write\n// ---------------------------------------------------------------------------\n\nconst INSIGHTS_DIR = path.join(\"src\", \"content\", \"insights\");\nconst BATCH_CHARS = 24_000;\nconst MAX_BATCHES = 5;\nconst WEB_PAGES = 3;\nconst DEFAULT_LIMIT = 20;\nconst SHOWN_QUOTE_CHARS = 120;\nconst READ_TIMEOUT_MS = 180_000;\n\nconst DESCRIPTION = `Gather what real customers say and keep it as Knowledge: one file per customer truth in src/content/insights/<id>.md, each a quote found word for word in its source (status: observed). Ads and ideas are written from these.\n\nStart here: baker research customers --focus \"<product or persona>\"\n\nReads the company's review library, Reddit (with --focus or --query) and, with --web, a few web pages. A model only points at spans; a quote is kept only if it appears verbatim in the text it came from AND that text is a buyer talking about this company, its product, category or a competitor (judged against COMPANY.md). Everything else is dropped and counted: dropped_not_verbatim, dropped_off_topic, dropped_not_a_buyer. Never write an insight by hand, and never add back a dropped one.\n\nExamples:\n baker research customers --focus \"payroll app for restaurants\"\n baker research customers --query \"chasing invoices\" --web\n baker research customers --dry-run`;\n\nconst ARGS = {\n focus: {\n type: \"string\",\n required: false,\n description:\n 'The product or persona to listen for, e.g. \"payroll for restaurants\". Also the Reddit search when --query is not given.',\n },\n query: {\n type: \"string\",\n required: false,\n description: 'Search terms in the customers\\' own words, e.g. \"chasing invoices\". Used for Reddit and the web.',\n },\n limit: { type: \"string\", required: false, description: `Most insights written (default ${DEFAULT_LIMIT}).` },\n web: {\n type: \"boolean\",\n required: false,\n default: false,\n description: `Also read up to ${WEB_PAGES} web pages where customers talk about it (slower).`,\n },\n \"dry-run\": {\n type: \"boolean\",\n required: false,\n default: false,\n description: \"Show what would be written; write nothing.\",\n },\n full: {\n type: \"boolean\",\n required: false,\n default: false,\n description: \"Add each insight's whole quote, source and context.\",\n },\n} as const;\n\nregisterSchema({ command: \"research.customers\", description: DESCRIPTION, args: ARGS });\n\nconst InsightFrontmatter = z.object({ quote: z.string(), source: z.string().optional().catch(undefined) });\n\n/** An insight file's `quote` and `source`; quote \"\" when it has none that reads. */\nfunction filedOf(raw: string): { quote: string; source?: string } {\n const front = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---/)?.[1];\n if (!front) return { quote: \"\" };\n try {\n const parsed = InsightFrontmatter.safeParse(parseYaml(front));\n if (!parsed.success) return { quote: \"\" };\n const { quote, source } = parsed.data;\n return source ? { quote, source } : { quote };\n } catch {\n return { quote: \"\" };\n }\n}\n\n/** The insights already on file: id, quote and source. Never throws. */\nasync function readExistingInsights(dir: string): Promise<FiledInsight[]> {\n const files = (await readdir(dir).catch(() => [] as string[])).filter((f) => f.endsWith(\".md\"));\n return await Promise.all(\n files.map(async (file) => ({\n id: file.slice(0, -3),\n ...filedOf(await readFile(path.join(dir, file), \"utf8\").catch(() => \"\")),\n })),\n );\n}\n\n/** How much of COMPANY.md the model reads to judge relevance; the file is meant to stay ~40 lines. */\nconst MAX_COMPANY_CHARS = 4_000;\n\n/** COMPANY.md without its comments, or undefined when it is missing or still the unfilled stub. Never throws. */\nasync function companyAbout(root: string): Promise<string | undefined> {\n const doc = await readFile(path.join(root, \"COMPANY.md\"), \"utf8\").catch(() => \"\");\n const text = doc.replace(/<!--[\\s\\S]*?-->/g, \"\").trim();\n if (!text || /^#\\s*Company\\s*\\n+TODO\\b/i.test(text)) return undefined;\n return text.slice(0, MAX_COMPANY_CHARS);\n}\n\n/** The product entries' names (file slugs). Never throws. */\nasync function productSlugs(root: string): Promise<string[]> {\n const files = await readdir(path.join(root, \"src\", \"content\", \"products\")).catch(() => [] as string[]);\n return files.filter((f) => f.endsWith(\".md\")).map((f) => f.slice(0, -3));\n}\n\n/** The library's reviews: the ones about --focus when given, else the latest. Null when the library did not answer. */\nasync function gatherTestimonials(focus: string | undefined): Promise<CustomerSource[] | null> {\n try {\n const search: TestimonialsSearchRequest = { query: focus ?? \"\", limit: 40 };\n const data = focus\n ? await apiPost<unknown>(\"/api/testimonials/search\", search)\n : await apiGet<unknown>(\"/api/testimonials\", { limit: \"50\" });\n return sourcesFromTestimonials(data);\n } catch {\n return null;\n }\n}\n\n/** Reddit posts and comments matching `query`, in the subreddits where it is talked about. Null when Reddit did not answer. */\nasync function gatherReddit(query: string): Promise<CustomerSource[] | null> {\n const subreddits = await findSubreddits({ query: query.slice(0, 100), limit: 3 })\n .then((r) => r.results.filter((s) => s.access !== \"private\").map((s) => s.name))\n .catch(() => [] as string[]);\n const answers = await Promise.allSettled([\n searchReddit({ query, subreddits, kind: \"posts\", limit: 15 }),\n ...(subreddits.length > 0 ? [searchReddit({ query, subreddits, kind: \"comments\", limit: 25 })] : []),\n ]);\n if (answers.every((a) => a.status === \"rejected\")) return null;\n const seen = new Set<string>();\n const items = answers\n .flatMap((a) => (a.status === \"fulfilled\" ? a.value.results : []))\n .filter((item) => !seen.has(item.id) && Boolean(seen.add(item.id)));\n return sourcesFromReddit(items);\n}\n\nconst ExploreAnswer = z.object({ sources: z.array(z.object({ url: z.string(), resolved: z.boolean().optional() })) });\n\n/**\n * The pages web research named, in its order and once each. The backend follows Google's\n * grounding redirects itself; a link it could not follow (`resolved: false`) names no page a\n * quote could cite, and a Reddit page is read through `research reddit`, never as a web page.\n */\nexport function webPageUrls(sources: readonly { url: string; resolved?: boolean }[]): string[] {\n return sources\n .filter((source) => source.resolved !== false && !/reddit\\.com/i.test(source.url))\n .map((source) => source.url)\n .filter((url, i, all) => all.indexOf(url) === i);\n}\n\n/** A few web pages where customers talk about `topic`, each read whole. Null when the web did not answer. */\nasync function gatherWeb(topic: string): Promise<CustomerSource[] | null> {\n let urls: string[];\n try {\n const found = ExploreAnswer.parse(\n await apiPost<unknown>(\n \"/api/research/explore\",\n {\n question: `Which pages carry first-hand customer comments about ${topic}, in the customers' own words: reviews, complaints, forum threads?`,\n depth: \"medium\",\n },\n { timeoutMs: READ_TIMEOUT_MS },\n ),\n );\n urls = webPageUrls(found.sources.slice(0, WEB_PAGES * 2));\n } catch {\n return null;\n }\n const pages = await Promise.allSettled(\n urls.slice(0, WEB_PAGES).map((url) => {\n const body: ResearchFetchRequest = { url };\n return apiPost<ResearchFetchResponse>(\"/api/research/fetch\", body, { timeoutMs: READ_TIMEOUT_MS });\n }),\n );\n return sourcesFromPages(pages.flatMap((p) => (p.status === \"fulfilled\" ? [p.value] : [])));\n}\n\n/**\n * Pointing at spans and judging each text's subject needs little thought: at the model's default\n * reasoning one 19k-character batch took 143s on dev (2026-10-26) and outran the 60s budget, at\n * low effort 7s with the same verdicts. An extraction asks for JSON at a fixed seed, so the same\n * texts read the same.\n */\nconst CLASSIFY_TIMEOUT_MS = 90_000;\nconst CLASSIFY_REQUEST = { seed: 0, response_format: { type: \"json_object\" }, reasoning: { effort: \"low\" } };\n\n/** One batch's spans, asked at most twice; null when the model never answered in shape. */\nasync function classifyBatch(\n batch: CustomerSource[],\n context: { focus?: string; company: CompanyContext },\n onSpend: (usage: ReviewUsage) => void,\n): Promise<Candidate[] | null> {\n const prompt = buildCustomersPrompt(batch, context);\n for (let attempt = 0; attempt < 2; attempt++) {\n const candidates = candidatesFrom(\n await askAboutText(CUSTOMER_INSIGHTS_MODEL, prompt, onSpend, {\n timeoutMs: CLASSIFY_TIMEOUT_MS,\n request: CLASSIFY_REQUEST,\n }),\n );\n if (candidates) return candidates;\n }\n return null;\n}\n\n/** Sources taken in turn from each list, so every kind reaches the model when there is more than it reads. */\nfunction interleave(lists: readonly CustomerSource[][]): CustomerSource[] {\n const out: CustomerSource[] = [];\n const longest = Math.max(0, ...lists.map((l) => l.length));\n for (let i = 0; i < longest; i++) {\n for (const list of lists) {\n const source = list[i];\n if (source) out.push(source);\n }\n }\n return out;\n}\n\nfunction fail(code: string, message: string, fix: string): never {\n writeJson({ ok: false, error: { code, message, fix } });\n process.exit(1);\n}\n\n/** Every source asked at once; one that does not answer is null and never stops the rest. */\nasync function gatherSources(opts: { focus?: string; topic?: string; web: boolean }) {\n const { focus, topic, web: withWeb } = opts;\n const [testimonials, reddit, web] = await Promise.all([\n gatherTestimonials(focus),\n topic ? gatherReddit(topic) : Promise.resolve(null),\n withWeb && topic ? gatherWeb(topic) : Promise.resolve(null),\n ]);\n const counts: SourceCounts = {\n testimonials: testimonials?.length ?? null,\n reddit: reddit?.length ?? null,\n web: web?.length ?? null,\n };\n return { all: interleave([testimonials ?? [], reddit ?? [], web ?? []]), counts };\n}\n\n/**\n * Every batch classified and gated; null when the model answered no batch at all. The spend\n * waits in the workspace's canvas cache: no run record carries these calls, so the next render\n * of this workspace bills them.\n */\ntype Gated = { kept: VerbatimInsight[]; dropped: number; tooLong: number; offTopic: number; notABuyer: number };\n\nasync function classifyAll(\n sources: readonly CustomerSource[],\n context: { focus?: string; company: CompanyContext },\n root: string,\n): Promise<Gated | null> {\n const batches = batchSources(sources, BATCH_CHARS).slice(0, MAX_BATCHES);\n const spent: ReviewUsage[] = [];\n const answers = await Promise.all(batches.map((batch) => classifyBatch(batch, context, (u) => spent.push(u))));\n await holdUnbilledSpend(path.join(root, \"canvas\", \".cache\"), spent);\n if (batches.length > 0 && answers.every((a) => a === null)) return null;\n const result: Gated = { kept: [], dropped: 0, tooLong: 0, offTopic: 0, notABuyer: 0 };\n batches.forEach((batch, i) => {\n const verbatim = keepVerbatim(answers[i] ?? [], batch);\n const relevant = keepOnTopic(verbatim.kept);\n result.kept.push(...relevant.kept);\n result.dropped += verbatim.dropped;\n result.tooLong += verbatim.tooLong;\n result.offTopic += relevant.offTopic;\n result.notABuyer += relevant.notABuyer;\n });\n return result;\n}\n\n/** Writes each planned file, never over one that appeared since the plan (`wx`); returns what was written. */\nasync function writeInsights(\n dir: string,\n writes: readonly PlannedInsight[],\n opts: { today: string; product?: string },\n): Promise<PlannedInsight[]> {\n if (writes.length === 0) return [];\n await mkdir(dir, { recursive: true });\n const written: PlannedInsight[] = [];\n for (const entry of writes) {\n const file = renderInsightFile(entry.insight, opts);\n const ok = await writeFile(path.join(dir, `${entry.id}.md`), file, { encoding: \"utf8\", flag: \"wx\" }).then(\n () => true,\n () => false,\n );\n if (ok) written.push(entry);\n }\n return written;\n}\n\nfunction writtenRow({ id, insight }: PlannedInsight, full: boolean) {\n const quote =\n insight.quote.length > SHOWN_QUOTE_CHARS ? `${insight.quote.slice(0, SHOWN_QUOTE_CHARS)}…` : insight.quote;\n if (!full) return { id, type: insight.type, quote };\n return {\n id,\n type: insight.type,\n quote,\n full_quote: insight.quote,\n source: insight.source.ref,\n context: insight.source.context,\n ...(insight.force ? { force: insight.force } : {}),\n ...(insight.persona ? { persona: insight.persona } : {}),\n ...(insight.why ? { why: insight.why } : {}),\n };\n}\n\n/** What the run listens for: the product a --focus names, and the words Reddit and the web are searched with. */\nasync function resolveTopic(root: string, focus: string | undefined, query: string | undefined) {\n const products = await productSlugs(root);\n const product = focus ? products.find((slug) => slug === asciiWords(focus).join(\"-\")) : undefined;\n const firstProduct = products[0];\n const topic = query ?? focus ?? (firstProduct ? asciiWords(firstProduct).join(\" \") : undefined);\n return { product, products, topic };\n}\n\n/**\n * Gathers, classifies, gates and writes customer truths into the workspace; null when the model\n * answered no batch. Shared with `baker creatives brief`, which runs it when few quotes are on file.\n */\nexport async function researchCustomers(\n root: string,\n opts: { focus?: string; query?: string; limit?: number; web?: boolean; dryRun?: boolean },\n) {\n const { focus, query, limit = DEFAULT_LIMIT, web = false, dryRun = false } = opts;\n const { product, products, topic } = await resolveTopic(root, focus, query);\n const [{ all, counts }, about] = await Promise.all([gatherSources({ focus, topic, web }), companyAbout(root)]);\n const company: CompanyContext = { products, ...(about ? { about } : {}) };\n const gated = await classifyAll(all, { ...(focus ? { focus } : {}), company }, root);\n if (!gated) return null;\n const dir = path.join(root, INSIGHTS_DIR);\n const plan = planInsightWrites(gated.kept, await readExistingInsights(dir), limit);\n const today = new Date().toISOString().slice(0, 10);\n const shown = dryRun\n ? plan.writes\n : await writeInsights(dir, plan.writes, { today, ...(product ? { product } : {}) });\n return { shown, plan, gated, counts };\n}\n\nexport const customersCommand = defineCommand({\n meta: { name: \"customers\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n const focus = args.focus?.trim() || undefined;\n const query = args.query?.trim() || undefined;\n const limit = args.limit === undefined ? DEFAULT_LIMIT : Number(args.limit);\n if (!Number.isInteger(limit) || limit < 1 || limit > 100) {\n fail(\"VALIDATION_ERROR\", \"--limit must be a whole number from 1 to 100.\", \"Run it again with --limit 20.\");\n }\n const dryRun = Boolean(args[\"dry-run\"]);\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const found = await researchCustomers(root, { focus, query, limit, web: Boolean(args.web), dryRun });\n if (!found) {\n fail(\n \"UNAVAILABLE\",\n \"The model that picks out customer words did not answer (no gateway key here, or it failed twice).\",\n \"Run it again. Do not write insights by hand: an insight is only a quote this command found in its source.\",\n );\n }\n const { shown, plan, gated, counts } = found;\n\n writeJson({\n ok: true,\n data: {\n ...(dryRun ? { dry_run: true } : {}),\n written: shown.map((entry) => writtenRow(entry, Boolean(args.full))),\n skipped_existing: plan.skippedExisting,\n ...(plan.skippedOverlap > 0 ? { skipped_overlap: plan.skippedOverlap } : {}),\n dropped_not_verbatim: gated.dropped,\n dropped_off_topic: gated.offTopic,\n ...(gated.notABuyer > 0 ? { dropped_not_a_buyer: gated.notABuyer } : {}),\n ...(gated.tooLong > 0 ? { dropped_too_long: gated.tooLong } : {}),\n sources: counts,\n },\n hints: customersHints({\n written: shown.length,\n offTopic: gated.offTopic,\n notABuyer: gated.notABuyer,\n sources: counts,\n }),\n });\n },\n});\n","/**\n * Is this span on the page as written? The one comparison every verbatim gate\n * uses — `baker research customers` keeping a customer's words, `baker research\n * cite` proving a quote — so a span that passes one passes the other.\n *\n * \"As written\" forgives what a copy changes without changing the words:\n * curly vs straight quotes, dashes vs hyphens, runs of spacing, letter case and\n * compatibility forms (NFKC). Nothing else: a paraphrase is not the span.\n */\n\n/** Curly and prime quote marks, by code point: single ones read as ', double ones as \". */\nconst SINGLE_QUOTES = new Set([0x2018, 0x2019, 0x201a, 0x201b, 0x2032]);\nconst DOUBLE_QUOTES = new Set([0x201c, 0x201d, 0x201e, 0x201f, 0x2033]);\n/** Hyphen, non-breaking hyphen, figure/en/em dash, horizontal bar, minus: all read as -. */\nconst DASHES = new Set([0x2010, 0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2212]);\n\nfunction foldChar(char: string): string {\n if (/\\s/.test(char)) return \" \";\n const code = char.codePointAt(0) ?? 0;\n if (SINGLE_QUOTES.has(code)) return \"'\";\n if (DOUBLE_QUOTES.has(code)) return '\"';\n if (DASHES.has(code)) return \"-\";\n return char.normalize(\"NFKC\").toLowerCase();\n}\n\n/**\n * A text in the comparison form, with, for each folded character, where it\n * starts in the original.\n */\nfunction foldWithOffsets(text: string): { folded: string; offsets: number[] } {\n let folded = \"\";\n const offsets: number[] = [];\n let at = 0;\n for (const char of text) {\n const out = foldChar(char);\n const collapses = out === \" \" && (folded.length === 0 || folded.endsWith(\" \"));\n if (!collapses) {\n for (const piece of out) {\n folded += piece;\n offsets.push(at);\n }\n }\n at += char.length;\n }\n if (folded.endsWith(\" \")) {\n folded = folded.slice(0, -1);\n offsets.pop();\n }\n return { folded, offsets };\n}\n\n/** A text in the comparison form alone — for comparing two quotes with each other. */\nexport function foldForComparison(text: string): string {\n return foldWithOffsets(text).folded;\n}\n\n/** Where `quote` sits in `text` under the comparison form, as `[start, end)` of the original, or null. */\nexport function findVerbatimSpan(quote: string, text: string): { start: number; end: number } | null {\n const needle = foldWithOffsets(quote).folded;\n if (needle.length === 0) return null;\n const { folded, offsets } = foldWithOffsets(text);\n const at = folded.indexOf(needle);\n if (at < 0) return null;\n const start = offsets[at] ?? 0;\n const last = offsets[at + needle.length - 1] ?? 0;\n const end = last + (String.fromCodePoint(text.codePointAt(last) ?? 0).length || 1);\n return { start, end };\n}\n\n/**\n * The text's own spelling of `quote` (spacing collapsed), or null when it is\n * not there. What a gate keeps is the source's words, never the caller's copy.\n */\nexport function findVerbatim(quote: string, text: string): string | null {\n const span = findVerbatimSpan(quote, text);\n return span ? text.slice(span.start, span.end).replace(/\\s+/g, \" \").trim() : null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import {
|
|
2
|
+
storeProductReads
|
|
3
|
+
} from "./chunk-6REXNFPV.js";
|
|
4
|
+
import {
|
|
5
|
+
coverageOf,
|
|
6
|
+
readCreativeRecords,
|
|
7
|
+
readIdeas,
|
|
8
|
+
readInsights,
|
|
9
|
+
readKnowledgeCorpus,
|
|
10
|
+
readPersonaIds,
|
|
11
|
+
sameMessageRead,
|
|
12
|
+
workspaceIdeasJudge
|
|
13
|
+
} from "./chunk-GN7K3NPI.js";
|
|
14
|
+
import {
|
|
15
|
+
readAllRules
|
|
16
|
+
} from "./chunk-Z7BNOHTY.js";
|
|
17
|
+
import {
|
|
18
|
+
IDEA_ANGLES,
|
|
19
|
+
IDEA_FORMATS,
|
|
20
|
+
checkIdeas
|
|
21
|
+
} from "./chunk-RHEWQB5O.js";
|
|
22
|
+
import {
|
|
23
|
+
findWorkspaceRoot
|
|
24
|
+
} from "./chunk-BGT5ZA4L.js";
|
|
25
|
+
import {
|
|
26
|
+
selectRules
|
|
27
|
+
} from "./chunk-4D73PLXU.js";
|
|
28
|
+
import {
|
|
29
|
+
marketFromCompanyDoc
|
|
30
|
+
} from "./chunk-2WZI36D3.js";
|
|
31
|
+
import {
|
|
32
|
+
registerSchema,
|
|
33
|
+
writeJson
|
|
34
|
+
} from "./chunk-WCIS4FZH.js";
|
|
35
|
+
|
|
36
|
+
// src/commands/creatives/ideas.ts
|
|
37
|
+
import { readFile } from "fs/promises";
|
|
38
|
+
import path from "path";
|
|
39
|
+
import { defineCommand } from "citty";
|
|
40
|
+
var BUILD_NEXT = 3;
|
|
41
|
+
var DESCRIPTION = `Check and rank the ad ideas in src/creatives/_ideas/: is each backed by something a customer said (src/content/insights/), does it claim only what the Knowledge holds, is it a different ad from the others, does it fill a gap the live ads leave. Free and local.
|
|
42
|
+
|
|
43
|
+
Start here, after writing 4-8 idea files (one per file: who, message, evidence, awareness, angle, shows, job, why; format only for a video or a container the person asked for; plus product: <handle> when the ad sells a store product, so the store's prices count as sourced):
|
|
44
|
+
baker creatives ideas # ranked, with problems; build_next names the ones to make
|
|
45
|
+
baker creatives make <idea> # then build each one in build_next
|
|
46
|
+
An idea with a problem is not built until it is fixed. An idea with no evidence is an explore bet: it may be built, and says so.`;
|
|
47
|
+
var ARGS = {
|
|
48
|
+
full: {
|
|
49
|
+
type: "boolean",
|
|
50
|
+
description: "Every idea with its warnings and gaps, and the allowed angle and format values",
|
|
51
|
+
required: false,
|
|
52
|
+
default: false
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
registerSchema({ command: "creatives.ideas", description: DESCRIPTION, args: ARGS });
|
|
56
|
+
function ideasHints(report) {
|
|
57
|
+
const hints = [];
|
|
58
|
+
const toBuild = report.ideas.filter((i) => i.status === "idea");
|
|
59
|
+
if (toBuild.length === 0 && report.unreadable.length === 0) {
|
|
60
|
+
hints.push(
|
|
61
|
+
"No ideas yet. Write 4-8 files in src/creatives/_ideas/<idea>.md (who, message, evidence, awareness, angle, shows, job, why), then run this again."
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
if (report.unreadable.length > 0) {
|
|
65
|
+
hints.push(`Fix ${report.unreadable.map((u) => u.id).join(", ")}: each names what is missing or unknown.`);
|
|
66
|
+
}
|
|
67
|
+
const blocked = toBuild.filter((i) => i.problems.length > 0);
|
|
68
|
+
if (blocked.length > 0) hints.push(`Fix before building: ${blocked.map((i) => i.id).join(", ")}.`);
|
|
69
|
+
if (report.observedCount < 3) {
|
|
70
|
+
hints.push(
|
|
71
|
+
"Few customer quotes on file: run `baker research customers` so ideas stand on what customers said; until then they are explore bets."
|
|
72
|
+
);
|
|
73
|
+
} else if (toBuild.length > 0 && toBuild.every((i) => i.evidence === "explore")) {
|
|
74
|
+
hints.push("No idea cites an insight: put the insight ids that back each one in its `evidence`.");
|
|
75
|
+
}
|
|
76
|
+
const next = buildNext(report.ideas);
|
|
77
|
+
if (next.length === 1) hints.push(`Build: \`baker creatives make ${next[0]}\`.`);
|
|
78
|
+
if (next.length > 1)
|
|
79
|
+
hints.push(
|
|
80
|
+
`Build ${next.join(", ")} at once: one \`creative-producer\` per idea, all spawned in one message in the background, each given its idea id, and handle each as it returns. Never build them one after another: each render takes minutes. Edited an idea after this check? Run \`baker creatives ideas\` again first: a producer cannot build an idea with a problem.`
|
|
81
|
+
);
|
|
82
|
+
return hints;
|
|
83
|
+
}
|
|
84
|
+
function buildNext(ideas, count = BUILD_NEXT) {
|
|
85
|
+
const ready = ideas.filter((i) => i.status === "idea" && i.problems.length === 0);
|
|
86
|
+
const firstBet = ready.find((i) => i.evidence === "explore");
|
|
87
|
+
return ready.filter((i) => i.evidence !== "explore" || i === firstBet).slice(0, count).map((i) => i.id);
|
|
88
|
+
}
|
|
89
|
+
function compactIdea(check) {
|
|
90
|
+
return {
|
|
91
|
+
idea: check.id,
|
|
92
|
+
status: check.status,
|
|
93
|
+
evidence: check.evidence,
|
|
94
|
+
...check.quote ? { quote: check.quote.length > 120 ? `${check.quote.slice(0, 117)}...` : check.quote } : {},
|
|
95
|
+
awareness: check.awareness,
|
|
96
|
+
angle: check.angle,
|
|
97
|
+
...check.shows ? { shows: check.shows } : {},
|
|
98
|
+
...check.format ? { format: check.format } : {},
|
|
99
|
+
platforms: check.platforms ?? "unset",
|
|
100
|
+
...check.problems.length > 0 ? { problems: check.problems } : {},
|
|
101
|
+
...check.warnings.length > 0 ? { warnings: check.warnings } : {}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async function ideasReport(root, opts = {}) {
|
|
105
|
+
const judge = opts.ask ? { ask: opts.ask, done: () => Promise.resolve() } : workspaceIdeasJudge(root);
|
|
106
|
+
const [{ ideas, unreadable }, insights, knowledge, personas, creatives, rules, companyDoc] = await Promise.all([
|
|
107
|
+
readIdeas(root),
|
|
108
|
+
readInsights(root, { ask: judge.ask }),
|
|
109
|
+
readKnowledgeCorpus(root),
|
|
110
|
+
readPersonaIds(root),
|
|
111
|
+
readCreativeRecords(root),
|
|
112
|
+
readAllRules(root).then((all) => selectRules(all, {})),
|
|
113
|
+
readFile(path.join(root, "COMPANY.md"), "utf8").catch(() => null)
|
|
114
|
+
]);
|
|
115
|
+
const language = marketFromCompanyDoc(companyDoc)?.language;
|
|
116
|
+
const [sameMessage, products] = await Promise.all([
|
|
117
|
+
sameMessageRead(ideas, judge.ask),
|
|
118
|
+
storeProductReads(
|
|
119
|
+
ideas.map((i) => i.product),
|
|
120
|
+
opts.readProduct
|
|
121
|
+
)
|
|
122
|
+
]);
|
|
123
|
+
await judge.done();
|
|
124
|
+
const checked = checkIdeas({
|
|
125
|
+
ideas,
|
|
126
|
+
insights,
|
|
127
|
+
knowledge,
|
|
128
|
+
personas,
|
|
129
|
+
sameMessage,
|
|
130
|
+
products,
|
|
131
|
+
rules,
|
|
132
|
+
...language ? { language } : {},
|
|
133
|
+
...coverageOf(ideas, creatives)
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
ideas: checked,
|
|
137
|
+
unreadable,
|
|
138
|
+
insightCount: insights.length,
|
|
139
|
+
observedCount: insights.filter((i) => i.status === "observed").length
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
var ideasCommand = defineCommand({
|
|
143
|
+
meta: { name: "ideas", description: DESCRIPTION },
|
|
144
|
+
args: ARGS,
|
|
145
|
+
async run({ args }) {
|
|
146
|
+
const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
|
|
147
|
+
const report = await ideasReport(root);
|
|
148
|
+
const full = args.full === true;
|
|
149
|
+
writeJson({
|
|
150
|
+
ok: true,
|
|
151
|
+
data: {
|
|
152
|
+
build_next: buildNext(report.ideas),
|
|
153
|
+
ideas: full ? report.ideas : report.ideas.map(compactIdea),
|
|
154
|
+
...report.unreadable.length > 0 ? { unreadable: report.unreadable } : {},
|
|
155
|
+
customer_quotes: { total: report.insightCount, observed: report.observedCount },
|
|
156
|
+
...full ? { allowed: { angle: IDEA_ANGLES, format: IDEA_FORMATS } } : {}
|
|
157
|
+
},
|
|
158
|
+
hints: ideasHints(report)
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
export {
|
|
164
|
+
ideasHints,
|
|
165
|
+
buildNext,
|
|
166
|
+
compactIdea,
|
|
167
|
+
ideasReport,
|
|
168
|
+
ideasCommand
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=chunk-CDKO55S4.js.map
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ACTION_TEMP_ID_PREFIX
|
|
3
|
+
} from "./chunk-NFXW6C6I.js";
|
|
4
|
+
import {
|
|
5
|
+
ApiError
|
|
6
|
+
} from "./chunk-B2OHCWYB.js";
|
|
7
|
+
import {
|
|
8
|
+
MissingChatIdError
|
|
9
|
+
} from "./chunk-E54435XT.js";
|
|
10
|
+
import {
|
|
11
|
+
writeJson
|
|
12
|
+
} from "./chunk-WCIS4FZH.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/actions/tagError.ts
|
|
15
|
+
var UNKNOWN_TAG_RE = /Unknown action tag\(s\): ([^.]+)\. Valid tags: ([^.]+)\./;
|
|
16
|
+
function splitSlugs(list) {
|
|
17
|
+
return list.split(",").map((slug) => slug.trim()).filter((slug) => slug.length > 0);
|
|
18
|
+
}
|
|
19
|
+
function actionTagFix(message) {
|
|
20
|
+
const match = UNKNOWN_TAG_RE.exec(message);
|
|
21
|
+
if (!match) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const [, unknownList, validList] = match;
|
|
25
|
+
const unknownTags = splitSlugs(unknownList ?? "");
|
|
26
|
+
const validTags = splitSlugs(validList ?? "");
|
|
27
|
+
const first = unknownTags[0];
|
|
28
|
+
if (first === void 0 || validTags.length === 0) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
action: "retry_with_a_valid_tag",
|
|
33
|
+
explanation: `The tag(s) ${unknownTags.join(", ")} are not in this company's taxonomy. \`validTags\` below is the complete accepted set \u2014 pick from it and re-run the same command. Only mint a new tag when none of them names this work; a near-duplicate of an existing tag splits the backlog's filter instead of extending it.`,
|
|
34
|
+
unknownTags,
|
|
35
|
+
validTags,
|
|
36
|
+
mintCommand: `baker actions tags create --slug ${first} --description "<what ${first} groups>"`,
|
|
37
|
+
listCommand: "baker actions tags list"
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/commands/actions/shared.ts
|
|
42
|
+
function writeOk(data) {
|
|
43
|
+
writeJson({ ok: true, data: data ?? null });
|
|
44
|
+
}
|
|
45
|
+
function failValidation(message) {
|
|
46
|
+
writeJson({ ok: false, error: { code: "VALIDATION_ERROR", message } });
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
function apiFailure(err) {
|
|
50
|
+
if (err instanceof ApiError) {
|
|
51
|
+
const fix = err.fix ?? actionTagFix(err.message);
|
|
52
|
+
return { ok: false, error: { code: err.code, message: err.message, ...fix ? { fix } : {} } };
|
|
53
|
+
}
|
|
54
|
+
if (err instanceof MissingChatIdError) {
|
|
55
|
+
const explanation = "This command stages its change on the chat this run belongs to, and this run has none. Don't retry: carry on with the rest of the job and tell the user this change couldn't be staged from here.";
|
|
56
|
+
return { ok: false, error: { code: err.code, message: err.message, fix: { action: "reject", explanation } } };
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
error: { code: "INTERNAL_ERROR", message: err instanceof Error ? err.message : "Unexpected error" }
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function failApi(err) {
|
|
64
|
+
writeJson(apiFailure(err));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
function generateTempId() {
|
|
68
|
+
return `${ACTION_TEMP_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
69
|
+
}
|
|
70
|
+
function isTempId(id) {
|
|
71
|
+
return id.startsWith(ACTION_TEMP_ID_PREFIX);
|
|
72
|
+
}
|
|
73
|
+
function parseTagList(value) {
|
|
74
|
+
if (typeof value !== "string") {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
const tags = value.split(",").map((t) => t.trim()).filter((t) => t.length > 0);
|
|
78
|
+
return [...new Set(tags)];
|
|
79
|
+
}
|
|
80
|
+
var ACTION_PRIORITIES = ["urgent", "high", "medium", "low"];
|
|
81
|
+
function parsePriority(value, { allowClear }) {
|
|
82
|
+
if (value === void 0) {
|
|
83
|
+
return void 0;
|
|
84
|
+
}
|
|
85
|
+
if (typeof value !== "string") {
|
|
86
|
+
failValidation(
|
|
87
|
+
`--priority must be one of: ${ACTION_PRIORITIES.join(", ")}${allowClear ? ", or 'none' to clear" : ""}.`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
const trimmed = value.trim().toLowerCase();
|
|
91
|
+
if (trimmed === "") {
|
|
92
|
+
if (allowClear) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return void 0;
|
|
96
|
+
}
|
|
97
|
+
if (allowClear && (trimmed === "none" || trimmed === "clear")) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
if (ACTION_PRIORITIES.includes(trimmed)) {
|
|
101
|
+
return trimmed;
|
|
102
|
+
}
|
|
103
|
+
failValidation(
|
|
104
|
+
`Unknown --priority "${value}". Expected one of: ${ACTION_PRIORITIES.join(", ")}${allowClear ? ", or 'none' to clear" : ""}.`
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
var FAN_OUT_NUDGE_THRESHOLD = 2;
|
|
108
|
+
var FAN_OUT_THRESHOLD = 3;
|
|
109
|
+
function buildCreateHints({
|
|
110
|
+
advisory,
|
|
111
|
+
name,
|
|
112
|
+
description,
|
|
113
|
+
tempId,
|
|
114
|
+
tags,
|
|
115
|
+
prioritySet,
|
|
116
|
+
draftCreateCount
|
|
117
|
+
}) {
|
|
118
|
+
const hints = [];
|
|
119
|
+
const expanded = shellExpandedIn(`${name}
|
|
120
|
+
${description}`);
|
|
121
|
+
if (expanded) {
|
|
122
|
+
hints.push(
|
|
123
|
+
`The text says \u201C${expanded}\u201D: the shell replaced a $ amount (like $0) inside double quotes before Baker saw it. Fix it now: baker actions update ${tempId} --description '<the text, with the amounts as you read them>' (and --name '\u2026' if the name has it) \u2014 single quotes keep $ as written.`
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
if (advisory) {
|
|
127
|
+
hints.push(
|
|
128
|
+
`${advisory.hint} If nothing actually blocks it: baker actions draft remove ${tempId}, then do the work.`
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
if (draftCreateCount >= FAN_OUT_THRESHOLD) {
|
|
132
|
+
hints.push(
|
|
133
|
+
`${draftCreateCount} Tasks are staged in this chat. Re-read them with \`baker actions draft\`: can any be done now with a surface you already have, and do any two touch the same system (same container, same campaign, same page)? Those belong in ONE Task \u2014 fold them together with \`baker actions update\` and drop the extras with \`baker actions draft remove <tempId>\`.`
|
|
134
|
+
);
|
|
135
|
+
} else if (draftCreateCount === FAN_OUT_NUDGE_THRESHOLD) {
|
|
136
|
+
hints.push(
|
|
137
|
+
`Second Task staged in this chat. If these two land on the same system (same container, same campaign, same page) they are ONE Task \u2014 fold them with \`baker actions update\` and drop the extra with \`baker actions draft remove ${tempId}\`.`
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
hints.push(`Link dependencies: baker actions link --blocker <id> --blocked ${tempId}`);
|
|
141
|
+
if (!description) {
|
|
142
|
+
hints.push("Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)");
|
|
143
|
+
}
|
|
144
|
+
if (!tags || tags.length === 0) {
|
|
145
|
+
hints.push(
|
|
146
|
+
"MISSING --tags. This action is invisible to the backlog's tag filter. Re-run with --tags <slug,...> (`baker actions tags list` for the taxonomy, `baker actions tags create --slug <slug>` to mint) \u2014 or `baker actions update <tempId> --tags <slug,...>`."
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
if (!prioritySet) {
|
|
150
|
+
hints.push(
|
|
151
|
+
`MISSING --priority. Without it this action ranks as 'normal' (medium) in the do-first ordering, so urgent/high client work won't surface first. Re-run with --priority ${ACTION_PRIORITIES.join("|")} \u2014 or \`baker actions update <tempId> --priority <level>\`.`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
return hints;
|
|
155
|
+
}
|
|
156
|
+
var SHELL_PATH = /(?:^|[\s(])((?:\/usr)?\/bin\/(?:ba|z|da|k)?sh|-(?:ba|z|da|k)sh)\b/;
|
|
157
|
+
var MONEY_WORD = "spend|spent|spending|budget|revenue|sales|cost|costs|cpa|cpc|cpm|cpl|roas|profit|paid|earned";
|
|
158
|
+
var BARE_SHELL = new RegExp(
|
|
159
|
+
`(?:\\b(?:${MONEY_WORD}|at|to|from|was|were|is)\\s+(bash|zsh)\\b|(?:^|[\\s(])(bash|zsh)(?=\\.\\d|\\s+(?:${MONEY_WORD})\\b))`,
|
|
160
|
+
"gi"
|
|
161
|
+
);
|
|
162
|
+
function shellExpandedIn(text) {
|
|
163
|
+
const path = SHELL_PATH.exec(text)?.[1];
|
|
164
|
+
if (path) return path;
|
|
165
|
+
for (const match of text.matchAll(BARE_SHELL)) {
|
|
166
|
+
const name = match[1] ?? match[2];
|
|
167
|
+
if (name && name === name.toLowerCase()) return name;
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
var ACTIONS_LIST_DEFAULT_LIMIT = 500;
|
|
172
|
+
function buildListHints({ returned, limit }) {
|
|
173
|
+
if (returned < limit) {
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
return [
|
|
177
|
+
`This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog \u2014 re-run with --limit ${limit * 2} (or narrow with --status / --search).`
|
|
178
|
+
];
|
|
179
|
+
}
|
|
180
|
+
function buildGetHints(detail) {
|
|
181
|
+
if (detail?.action.status !== "pending" || detail.activeChat !== null) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
return [
|
|
185
|
+
`If you are working on this Task in this chat, claim it first so the Tasks page shows it in progress: baker actions claim ${detail.action._id}`
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export {
|
|
190
|
+
writeOk,
|
|
191
|
+
failValidation,
|
|
192
|
+
failApi,
|
|
193
|
+
generateTempId,
|
|
194
|
+
isTempId,
|
|
195
|
+
parseTagList,
|
|
196
|
+
ACTION_PRIORITIES,
|
|
197
|
+
parsePriority,
|
|
198
|
+
buildCreateHints,
|
|
199
|
+
ACTIONS_LIST_DEFAULT_LIMIT,
|
|
200
|
+
buildListHints,
|
|
201
|
+
buildGetHints
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=chunk-CMXG4X3S.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
recordIdeaLines
|
|
3
|
+
} from "./chunk-GFBEO33K.js";
|
|
4
|
+
import {
|
|
5
|
+
anchorLines,
|
|
6
|
+
readIdeaAnchor
|
|
7
|
+
} from "./chunk-LUIV5R2Z.js";
|
|
8
|
+
import {
|
|
9
|
+
findWorkspaceRoot
|
|
10
|
+
} from "./chunk-BGT5ZA4L.js";
|
|
11
|
+
|
|
12
|
+
// src/commands/creatives/idea-hint.ts
|
|
13
|
+
import path from "path";
|
|
14
|
+
function present(fields) {
|
|
15
|
+
const said = Object.entries(fields).filter(([, v]) => v !== void 0 && !(Array.isArray(v) && v.length === 0));
|
|
16
|
+
return Object.fromEntries(said);
|
|
17
|
+
}
|
|
18
|
+
function anchorOut(view, full) {
|
|
19
|
+
const reference = view.reference ? {
|
|
20
|
+
...present({ adId: view.reference.adId, advertiser: view.advertiser }),
|
|
21
|
+
carry: view.reference.carry,
|
|
22
|
+
mustKeep: view.reference.mustKeep
|
|
23
|
+
} : void 0;
|
|
24
|
+
const compact = present({
|
|
25
|
+
message: view.message,
|
|
26
|
+
language: view.language,
|
|
27
|
+
reference,
|
|
28
|
+
seriesLead: view.seriesLead,
|
|
29
|
+
accent: view.accent,
|
|
30
|
+
cast: view.cast,
|
|
31
|
+
who: view.who,
|
|
32
|
+
survives: view.survives
|
|
33
|
+
});
|
|
34
|
+
if (!full) return compact;
|
|
35
|
+
return {
|
|
36
|
+
...compact,
|
|
37
|
+
...present({ why: view.why, voices: view.voices, voiceIds: view.voiceIds, route: view.route }),
|
|
38
|
+
changes: view.changes
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function ideaHint(view) {
|
|
42
|
+
return `Its idea: ${anchorLines(view).join(" \xB7 ").replace(
|
|
43
|
+
/[.!?…]+$/u,
|
|
44
|
+
""
|
|
45
|
+
)}. An edit keeps it: change exactly what they named; a change of the idea they asked for is one line under "## Changes" in _definition.md, the reason after the dash.`;
|
|
46
|
+
}
|
|
47
|
+
function withAnchor(response, view, opts) {
|
|
48
|
+
return {
|
|
49
|
+
...response,
|
|
50
|
+
data: { ...response.data, anchor: anchorOut(view, opts.full) },
|
|
51
|
+
hints: [ideaHint(view), ...response.hints ?? []]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function readCreativeIdea(slug) {
|
|
55
|
+
const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();
|
|
56
|
+
const read = await readIdeaAnchor(path.join(root, "src", "creatives", slug));
|
|
57
|
+
if (!read) return null;
|
|
58
|
+
await recordIdeaLines(path.join(root, "canvas"), slug, anchorLines(read.view)).catch(() => void 0);
|
|
59
|
+
return read.view;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export {
|
|
63
|
+
withAnchor,
|
|
64
|
+
readCreativeIdea
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=chunk-D3LTHRZZ.js.map
|