@koda-sl/baker-cli 0.452.0-dev.b7636f278 → 0.452.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.
Files changed (514) hide show
  1. package/README.md +16 -0
  2. package/dist/{account-4H7QVBRK.js → account-F6MHQ64I.js} +3 -3
  3. package/dist/{account-2SVI5OK7.js → account-HS7SDSEB.js} +4 -4
  4. package/dist/{account-writes-AK42HGRM.js → account-writes-ISE4U2FQ.js} +3 -3
  5. package/dist/{accounts-2XAOZX3U.js → accounts-3JKABIGU.js} +3 -3
  6. package/dist/{accounts-U4BGY3QU.js → accounts-ZZONEKPU.js} +5 -5
  7. package/dist/{actions-6EJU7CAQ.js → actions-VKHKHUUC.js} +18 -18
  8. package/dist/{ad-group-writes-QQS4223F.js → ad-group-writes-UU5NNKSO.js} +3 -3
  9. package/dist/{ad-groups-WGPDPUI2.js → ad-groups-CGFXZNIA.js} +7 -7
  10. package/dist/{ad-writes-XE2IE4DS.js → ad-writes-NALDYWOR.js} +3 -3
  11. package/dist/{add-IPGEYQQG.js → add-53DDLTVG.js} +2 -2
  12. package/dist/{add-P7CCVY2J.js → add-ATD4MBOO.js} +3 -3
  13. package/dist/{ads-BCOSQALY.js → ads-PV7GZXPR.js} +8 -8
  14. package/dist/{ads-XQCGFJOE.js → ads-QFAUJCWM.js} +4 -4
  15. package/dist/{advertisers-JG4DZ6SB.js → advertisers-HYUASJAS.js} +3 -3
  16. package/dist/{analytics-RNEUAKC4.js → analytics-RQROMSQ3.js} +3 -3
  17. package/dist/{analytics-IMYVNQIX.js → analytics-WLYXY5OT.js} +37 -19
  18. package/dist/analytics-WLYXY5OT.js.map +1 -0
  19. package/dist/{animate-AIZ3GS4J.js → animate-FWWHSYPL.js} +4 -4
  20. package/dist/{assign-46TXQRT5.js → assign-7332DMG5.js} +3 -3
  21. package/dist/{audience-size-5TNQO3IL.js → audience-size-UYX5RPTA.js} +3 -3
  22. package/dist/{audiences-TGD5US2M.js → audiences-VEKGLWBG.js} +3 -3
  23. package/dist/{audit-XRE7XH3Q.js → audit-ZGTG7VRD.js} +3 -3
  24. package/dist/{autocomplete-2ZWSQ6QQ.js → autocomplete-LPG4WWTY.js} +3 -3
  25. package/dist/{avatars-M6NSD3KS.js → avatars-HTQMIA2F.js} +4 -4
  26. package/dist/{bid-pricing-OIVPZCWW.js → bid-pricing-IK2C2IKE.js} +3 -3
  27. package/dist/{brand-YDNX7LYQ.js → brand-3WCTQWWX.js} +2 -2
  28. package/dist/{brief-PAHJODHS.js → brief-WDKTAKVA.js} +10 -10
  29. package/dist/{campaign-groups-TAP6LK6F.js → campaign-groups-6CJ45XMO.js} +8 -8
  30. package/dist/{campaign-writes-4SWPBZE6.js → campaign-writes-2MLRVFJK.js} +3 -3
  31. package/dist/{campaign-writes-SXLZFYF6.js → campaign-writes-SX52CJYW.js} +3 -3
  32. package/dist/{campaigns-AQAJN23T.js → campaigns-DTH5ADA7.js} +5 -5
  33. package/dist/{campaigns-YS3OGQXO.js → campaigns-X3DPCCSN.js} +7 -7
  34. package/dist/{campaigns-ROMLENHI.js → campaigns-ZVA7SUNN.js} +11 -11
  35. package/dist/{canvas-SMYHQUL5.js → canvas-EJLQ27CK.js} +14 -14
  36. package/dist/{capabilities-GGPTIAFO.js → capabilities-VWJGP43K.js} +3 -3
  37. package/dist/{catalog-GWN3WT7J.js → catalog-BKQOAVR2.js} +7 -7
  38. package/dist/{catalogs-BRXEDE56.js → catalogs-G3YEVG6S.js} +3 -3
  39. package/dist/{chatgpt-7W75X3ER.js → chatgpt-QNUN63YS.js} +13 -13
  40. package/dist/{chats-G343BSVB.js → chats-JOZKLOFU.js} +3 -3
  41. package/dist/chunk-237WE5LX.js +455 -0
  42. package/dist/chunk-237WE5LX.js.map +1 -0
  43. package/dist/{chunk-7J6EHOH6.js → chunk-35XWJEWH.js} +2 -2
  44. package/dist/{chunk-OKJWBB2K.js → chunk-3EUFAONS.js} +8 -8
  45. package/dist/{chunk-YCOP4FGJ.js → chunk-3JCF3NK6.js} +2 -2
  46. package/dist/{chunk-Q4JYX424.js → chunk-3XPFBSD7.js} +6 -6
  47. package/dist/chunk-3XPFBSD7.js.map +1 -0
  48. package/dist/{chunk-UC7VFFXR.js → chunk-4GOS37IA.js} +2 -2
  49. package/dist/{chunk-EIVYFZ4N.js → chunk-4JHUG6Y3.js} +2 -2
  50. package/dist/{chunk-D6744YSX.js → chunk-54UVGFX3.js} +4 -4
  51. package/dist/{chunk-3YOFT3AP.js → chunk-5PKB7LNI.js} +2 -2
  52. package/dist/{chunk-WVIJD2PP.js → chunk-5RPU6KG5.js} +8 -8
  53. package/dist/chunk-5RPU6KG5.js.map +1 -0
  54. package/dist/{chunk-TUB34FVS.js → chunk-5YGBRHO6.js} +4 -4
  55. package/dist/{chunk-YT7SSJFR.js → chunk-6QJLVNGU.js} +5 -5
  56. package/dist/{chunk-NJXNU2G6.js → chunk-7ZHMGXE2.js} +3 -3
  57. package/dist/{chunk-26NULPNS.js → chunk-BBDAVFTG.js} +26 -20
  58. package/dist/{chunk-26NULPNS.js.map → chunk-BBDAVFTG.js.map} +1 -1
  59. package/dist/{chunk-CAMX6OHF.js → chunk-CHSNHVYF.js} +4 -4
  60. package/dist/chunk-CHSNHVYF.js.map +1 -0
  61. package/dist/{chunk-IWP5MA6B.js → chunk-D76QEIFG.js} +6 -6
  62. package/dist/{chunk-F4F3PLN3.js → chunk-DGPLXY37.js} +2 -2
  63. package/dist/{chunk-5ARG3CQG.js → chunk-DTD2IRDA.js} +13 -5
  64. package/dist/chunk-DTD2IRDA.js.map +1 -0
  65. package/dist/{chunk-B6GITCGN.js → chunk-E6KL5ZRN.js} +2 -2
  66. package/dist/{chunk-3URK7DAA.js → chunk-EKCPMVZ3.js} +2 -2
  67. package/dist/{chunk-BAUSWB7O.js → chunk-EUFCY63X.js} +4 -4
  68. package/dist/chunk-EUFCY63X.js.map +1 -0
  69. package/dist/{chunk-4KF5MNHA.js → chunk-F4CUV4FV.js} +9 -9
  70. package/dist/{chunk-VCZOJSBL.js → chunk-G7HYW5TH.js} +3 -3
  71. package/dist/{chunk-P5T7OZKV.js → chunk-HQSCJYZO.js} +2 -2
  72. package/dist/chunk-HTW7FTP4.js +45 -0
  73. package/dist/chunk-HTW7FTP4.js.map +1 -0
  74. package/dist/{chunk-WDZOVF6P.js → chunk-JYWZRDLZ.js} +3 -3
  75. package/dist/{chunk-W2TJIZS2.js → chunk-K46X77UI.js} +3 -3
  76. package/dist/{chunk-TX7LZWZD.js → chunk-KFE3S63W.js} +50 -20
  77. package/dist/chunk-KFE3S63W.js.map +1 -0
  78. package/dist/{chunk-FTWJFDIN.js → chunk-KLBTXETO.js} +169 -169
  79. package/dist/chunk-KLBTXETO.js.map +1 -0
  80. package/dist/{chunk-HZUDRKGR.js → chunk-KQTYTCKQ.js} +2 -2
  81. package/dist/{chunk-VC7IJPTV.js → chunk-KRZV6VS2.js} +2 -2
  82. package/dist/{chunk-W3ZHJJVT.js → chunk-KS2QY6MK.js} +4 -4
  83. package/dist/{chunk-64WGDUXH.js → chunk-LF2PIA67.js} +3 -3
  84. package/dist/{chunk-VNUNE5AB.js → chunk-LYBXCXJB.js} +2 -2
  85. package/dist/{chunk-UX5HYEN3.js → chunk-M4G3NKDB.js} +2 -2
  86. package/dist/{chunk-OVT676K6.js → chunk-MM22NUA6.js} +2 -2
  87. package/dist/{chunk-UNI5AASR.js → chunk-MM5XO4MP.js} +2 -2
  88. package/dist/{chunk-NR2TDASR.js → chunk-MZ3SJ6FV.js} +2 -2
  89. package/dist/{chunk-FJGPG7H2.js → chunk-PROV2XDR.js} +3 -3
  90. package/dist/{chunk-ND5MJ3AA.js → chunk-PZ7EPJRF.js} +2 -2
  91. package/dist/{chunk-355DHOHD.js → chunk-QZOS6FXW.js} +2 -2
  92. package/dist/{chunk-MURPCCLG.js → chunk-RNDPEHCH.js} +2 -2
  93. package/dist/{chunk-TIASGFTA.js → chunk-TJFELVYS.js} +3 -3
  94. package/dist/{chunk-XFGAUP5B.js → chunk-ULJ5RFOV.js} +2 -2
  95. package/dist/{chunk-PZXCWSKV.js → chunk-VB6WJJR3.js} +2 -2
  96. package/dist/{chunk-QJNTI36W.js → chunk-XX53CHKP.js} +3 -3
  97. package/dist/{chunk-TESII3FM.js → chunk-XXHMVDLL.js} +2 -2
  98. package/dist/{chunk-EEEMQ7IY.js → chunk-YIWXHIVZ.js} +3 -3
  99. package/dist/{chunk-LZ73CZGP.js → chunk-YKFEHWHC.js} +2 -2
  100. package/dist/{chunk-W5VGWEAG.js → chunk-YTNJODFK.js} +2 -2
  101. package/dist/{chunk-V4RGDJAN.js → chunk-Z6XEMPOZ.js} +2 -2
  102. package/dist/{chunk-6Y7SIP2D.js → chunk-ZIHEIVJC.js} +54 -27
  103. package/dist/chunk-ZIHEIVJC.js.map +1 -0
  104. package/dist/{chunk-LZSXZB2F.js → chunk-ZWKPXWS5.js} +2 -2
  105. package/dist/{claim-INJHV4FM.js → claim-ITPOQ2I7.js} +3 -3
  106. package/dist/cli.js +31 -31
  107. package/dist/{companies-3REQZWKU.js → companies-Y5HPLJF5.js} +3 -3
  108. package/dist/{complete-DX2DAAEZ.js → complete-SRXMUS4R.js} +3 -3
  109. package/dist/{connect-O4OGKMAK.js → connect-CRHMP3NK.js} +6 -6
  110. package/dist/{conversation-6A2X5W64.js → conversation-BBOPGOMH.js} +3 -3
  111. package/dist/{conversion-report-XQBJ6LG4.js → conversion-report-N4HANYOB.js} +2 -2
  112. package/dist/{conversion-writes-UBCVXP2E.js → conversion-writes-LW4HQKK5.js} +3 -3
  113. package/dist/{conversions-PT6UDIX3.js → conversions-DH3Q6UTJ.js} +7 -7
  114. package/dist/{conversions-D236RTUK.js → conversions-TS723AZV.js} +5 -5
  115. package/dist/{create-I2UB7FWX.js → create-CW5E5Y2S.js} +3 -3
  116. package/dist/{create-EOLNJGAX.js → create-HOIUANHB.js} +2 -2
  117. package/dist/{create-BR3Q4A4C.js → create-M7TK4QUC.js} +3 -3
  118. package/dist/{create-S47CLYXJ.js → create-ZWSKHSPD.js} +3 -3
  119. package/dist/{creatives-ITL2SFA7.js → creatives-LLWNKS47.js} +10 -10
  120. package/dist/{creatives-FBH4DKSX.js → creatives-QQZNCA6V.js} +8 -8
  121. package/dist/{credentials-HKFHC4BR.js → credentials-CFKCUDES.js} +16 -16
  122. package/dist/credentials-CFKCUDES.js.map +1 -0
  123. package/dist/{critique-MCSROATT.js → critique-AQDXRULE.js} +9 -9
  124. package/dist/{critique-LU27A765.js → critique-ORSUUTHE.js} +3 -3
  125. package/dist/{crm-NEI6E2T2.js → crm-EPSZEOD2.js} +4 -4
  126. package/dist/{crm-GOE6ZO5N.js → crm-WNFEWAAM.js} +4 -4
  127. package/dist/{customers-HGBZPL6D.js → customers-NZDE7V3P.js} +6 -6
  128. package/dist/{delete-67XFFHUY.js → delete-6RAKC62Z.js} +2 -2
  129. package/dist/{delete-BT7I3EMN.js → delete-7HMQBDFC.js} +3 -3
  130. package/dist/{delete-ONE22VRX.js → delete-FKXR5ZOP.js} +3 -3
  131. package/dist/{demographics-R4LCQGDJ.js → demographics-PRZS2ZC4.js} +3 -3
  132. package/dist/{discard-BOPTV4V5.js → discard-YLTMCFE6.js} +3 -3
  133. package/dist/{domain-B54ILSOO.js → domain-Z533IR5M.js} +3 -3
  134. package/dist/{draft-BGUJDHXR.js → draft-3ZVCQSAG.js} +2 -2
  135. package/dist/{draft-DWSBVJUF.js → draft-4PURIMDM.js} +3 -3
  136. package/dist/{draft-ROERDGSK.js → draft-7ZWPABVG.js} +4 -4
  137. package/dist/{draft-MNFJ4G3C.js → draft-THPZFASM.js} +3 -3
  138. package/dist/{draft-J4SGNGGW.js → draft-ZXZEQRCL.js} +3 -3
  139. package/dist/engine/index.js +6 -6
  140. package/dist/{facets-FUTIWQXK.js → facets-453OFMAM.js} +3 -3
  141. package/dist/{feedback-XXEGMLPS.js → feedback-JFV6BMJW.js} +2 -2
  142. package/dist/{feedback-record-E3PLIVW7.js → feedback-record-HCOBRTY2.js} +11 -11
  143. package/dist/{fetch-D7JPGEYZ.js → fetch-44PPB6UO.js} +3 -3
  144. package/dist/{find-OTDIX6V4.js → find-FRRHAPWX.js} +4 -4
  145. package/dist/{fit-BOQL6OK3.js → fit-7237F5EB.js} +5 -5
  146. package/dist/{flows-L6BF3TDT.js → flows-N7UZ4ZO5.js} +10 -10
  147. package/dist/{fonts-THAAZY7Z.js → fonts-YW7SU5EY.js} +5 -5
  148. package/dist/{forecast-RYYVMNYT.js → forecast-W57WFVDL.js} +3 -3
  149. package/dist/{funnel-SK7WDPRS.js → funnel-VW542JTE.js} +8 -451
  150. package/dist/funnel-VW542JTE.js.map +1 -0
  151. package/dist/{ga4-UDQ2HA2J.js → ga4-DV2AXCSL.js} +1 -1
  152. package/dist/{generate-3XYYITU6.js → generate-MMBYB44G.js} +3 -3
  153. package/dist/{get-3STPGBX3.js → get-2NA3LPCN.js} +3 -3
  154. package/dist/{get-YBIF3H52.js → get-MEGPYKQR.js} +3 -3
  155. package/dist/{google-KTO3PLEU.js → google-QYYYSSXI.js} +5 -5
  156. package/dist/{google-ads-YD7LYWGY.js → google-ads-G2XD4RMT.js} +3 -3
  157. package/dist/{gsc-P3QYGDV2.js → gsc-TAKOF7J5.js} +1 -1
  158. package/dist/{history-Q3QCT64S.js → history-DBIEYQHY.js} +3 -3
  159. package/dist/{history-RWWBR4TN.js → history-RCKMMUWI.js} +3 -3
  160. package/dist/{hubspot-E65QNOI4.js → hubspot-CKS7F77W.js} +7 -7
  161. package/dist/{icon-I43F77FV.js → icon-L4RSS6PZ.js} +4 -4
  162. package/dist/{ideas-ZB7O7T5I.js → ideas-EYC6K33G.js} +2 -2
  163. package/dist/{images-U4DKZQTE.js → images-2HJ7YKTH.js} +9 -9
  164. package/dist/{ingest-MZXGMFA5.js → ingest-26O5Q462.js} +3 -3
  165. package/dist/{ingest-ROEMTZMG.js → ingest-RR5GAX3G.js} +2 -2
  166. package/dist/{insights-LNAXV2CG.js → insights-ZIU6FJMS.js} +2 -2
  167. package/dist/{inspect-MCMUJPXU.js → inspect-XPDUPSUP.js} +3 -3
  168. package/dist/{inspiration-P265QJ2H.js → inspiration-S3DU4CMQ.js} +1 -1
  169. package/dist/{keyword-metrics-MLFTDAS4.js → keyword-metrics-KOPXTILA.js} +3 -3
  170. package/dist/{keywords-for-site-4WUBJNTI.js → keywords-for-site-PONNELI5.js} +3 -3
  171. package/dist/{landing-5GDWJN4C.js → landing-RYRZ5VZ2.js} +3 -3
  172. package/dist/{leads-LDOOJI5K.js → leads-R7YSJDIG.js} +3 -3
  173. package/dist/{learn-3JPH2EZC.js → learn-IZ6QKTCX.js} +7 -7
  174. package/dist/{line-item-writes-LFDWJBQG.js → line-item-writes-25FE22UX.js} +3 -3
  175. package/dist/{line-items-T3EVXB4M.js → line-items-V522VKSU.js} +5 -5
  176. package/dist/{link-M5ESAD5Y.js → link-ZZZVDSUP.js} +3 -3
  177. package/dist/{linkedin-4FNKZNIR.js → linkedin-HXLYJVGI.js} +26 -26
  178. package/dist/{list-XWUTPJRQ.js → list-HSXOTG5R.js} +2 -2
  179. package/dist/{list-EF6QI4JT.js → list-KYEK3N34.js} +3 -3
  180. package/dist/{list-FNW254C3.js → list-LKHHCQZU.js} +3 -3
  181. package/dist/{locations-2NKBJKBT.js → locations-74TPQWAT.js} +2 -2
  182. package/dist/{log-5MESJJLM.js → log-6ELXS5EJ.js} +3 -3
  183. package/dist/{logo-2IP663QO.js → logo-Q5D7PZY6.js} +3 -3
  184. package/dist/{lookup-XK45W2SH.js → lookup-TCU2ZEZW.js} +3 -3
  185. package/dist/{make-BH5TNJUO.js → make-2PV4B2TT.js} +25 -22
  186. package/dist/{make-BH5TNJUO.js.map → make-2PV4B2TT.js.map} +1 -1
  187. package/dist/{map-5NONUYFP.js → map-SJLRAB5X.js} +4 -4
  188. package/dist/map-SJLRAB5X.js.map +1 -0
  189. package/dist/{mcp-CGITBQQA.js → mcp-W7DBSUF7.js} +2 -2
  190. package/dist/{media-sources-6TFUGPE2.js → media-sources-M35YZQY5.js} +2 -2
  191. package/dist/{members-R2GQVSVA.js → members-QXYMJQWU.js} +3 -3
  192. package/dist/{models-3Z6MDHQW.js → models-7U3GRYHF.js} +2 -2
  193. package/dist/{normalize-L6WBNGQA.js → normalize-DYJLUBQP.js} +3 -3
  194. package/dist/{options-YT2ZGB2Z.js → options-77SHB5KA.js} +6 -6
  195. package/dist/{performance-52IILAFE.js → performance-VVTYUSTW.js} +4 -4
  196. package/dist/{pixels-TZPF746S.js → pixels-45A55MOP.js} +3 -3
  197. package/dist/plan-4QP2G7GV.js +207 -0
  198. package/dist/plan-4QP2G7GV.js.map +1 -0
  199. package/dist/{promoted-tweet-writes-QVIKWEIZ.js → promoted-tweet-writes-QP37NMQC.js} +3 -3
  200. package/dist/{promoted-tweets-2AALRV5O.js → promoted-tweets-WPSM6MGX.js} +3 -3
  201. package/dist/{publish-XFLOZAOQ.js → publish-YF6ESBGQ.js} +3 -3
  202. package/dist/questionnaire-J56AATOX.js +93 -0
  203. package/dist/questionnaire-J56AATOX.js.map +1 -0
  204. package/dist/{read-LSF7DYTG.js → read-G5AC332V.js} +9 -8
  205. package/dist/read-G5AC332V.js.map +1 -0
  206. package/dist/{reddit-HFBAGWNP.js → reddit-VC3IOFNC.js} +4 -4
  207. package/dist/{refresh-INKIU3QV.js → refresh-UXBCTVCG.js} +2 -2
  208. package/dist/{release-C2MFXAPJ.js → release-PP5S5QHD.js} +3 -3
  209. package/dist/{remove-JWSVNUJ4.js → remove-OUWQ7NPN.js} +2 -2
  210. package/dist/{reopen-3GM4OSLZ.js → reopen-KXAM5LVX.js} +3 -3
  211. package/dist/{rerun-7K675UFG.js → rerun-ZVFP4FNN.js} +21 -21
  212. package/dist/{research-HUMDT7T4.js → research-52CURSLR.js} +2 -2
  213. package/dist/{research-ZMYQWEAT.js → research-WEW3TISC.js} +10 -10
  214. package/dist/{reset-3BEGDSBW.js → reset-MVLV7GEB.js} +2 -2
  215. package/dist/{reset-TVDYP2VK.js → reset-RBL2NSDV.js} +2 -2
  216. package/dist/{resolve-OQKUGWEI.js → resolve-JG3TGLCR.js} +3 -3
  217. package/dist/{retry-GUHOWYO2.js → retry-2B3V4CJO.js} +2 -2
  218. package/dist/{retry-EJBF6GBJ.js → retry-Y3VUKOZ3.js} +2 -2
  219. package/dist/{run-3D6QZC6L.js → run-3BCAHPCW.js} +3 -3
  220. package/dist/{run-7VWIB2KF.js → run-FZL7FYTL.js} +21 -21
  221. package/dist/{scaffold-ad-WYSO6VRA.js → scaffold-ad-TL5URKZF.js} +17 -17
  222. package/dist/{scaffold-static-ad-JYKHAAYB.js → scaffold-static-ad-PN6RR3IP.js} +41 -41
  223. package/dist/scaffold-static-ad-PN6RR3IP.js.map +1 -0
  224. package/dist/{scaffold-video-KFBLDBVW.js → scaffold-video-LRTELU5X.js} +15 -15
  225. package/dist/{schedule-QVYVMRIY.js → schedule-7QLWW5HA.js} +2 -2
  226. package/dist/{scheduled-agents-CNIGCLAP.js → scheduled-agents-HDALX27W.js} +11 -11
  227. package/dist/{schema-7UUVQ4RH.js → schema-EY3Y3KFB.js} +4 -4
  228. package/dist/{search-XUGIKFW3.js → search-4XS7AO5R.js} +2 -2
  229. package/dist/{select-FQVDWCMG.js → select-J3QVFWVE.js} +11 -11
  230. package/dist/{set-prompt-XCICIA6U.js → set-prompt-MEMSZEZK.js} +11 -11
  231. package/dist/{setup-links-4VILWID2.js → setup-links-4PCSBEJD.js} +3 -3
  232. package/dist/{site-TLJVSZQF.js → site-IG62FRYT.js} +4 -4
  233. package/dist/{sources-4MKBWFWG.js → sources-5YFONIJP.js} +6 -6
  234. package/dist/{sources-7FCRKPXJ.js → sources-AM7SIZUY.js} +6 -6
  235. package/dist/{stale-TVTZNIB7.js → stale-UMI4XCKX.js} +10 -10
  236. package/dist/{status-WZKAKUG4.js → status-F4XMET7U.js} +3 -3
  237. package/dist/{stock-2YCDN3N6.js → stock-KXJ26BY4.js} +5 -5
  238. package/dist/{studio-RA7QQH4O.js → studio-EKIPLLHD.js} +4 -4
  239. package/dist/{sync-DEWLEMTT.js → sync-LXYAJ7SU.js} +2 -2
  240. package/dist/{sync-definition-LGX25ZTO.js → sync-definition-WU6V5245.js} +14 -14
  241. package/dist/{tag-manager-DYZUOIAS.js → tag-manager-JAAMOUGB.js} +9 -9
  242. package/dist/{tags-RBB4TU7U.js → tags-6WV3PQH5.js} +3 -3
  243. package/dist/{tags-O76MDVID.js → tags-FTOD6CYS.js} +3 -3
  244. package/dist/{tags-V5FR3DYU.js → tags-KXNOWUMN.js} +2 -2
  245. package/dist/{tags-IWN3QPK5.js → tags-PJRNCPQJ.js} +3 -3
  246. package/dist/{tags-ANV54THE.js → tags-R5JCZRAV.js} +4 -4
  247. package/dist/{targeting-criteria-6IOXVE4K.js → targeting-criteria-HJ7YFAB2.js} +3 -3
  248. package/dist/{targets-FFLV6OMF.js → targets-RLZSBUCI.js} +3 -3
  249. package/dist/{templates-Y3ZLB7MK.js → templates-4SWUBLOC.js} +3 -3
  250. package/dist/{testimonials-FCYS4NKB.js → testimonials-YYLALSV4.js} +6 -6
  251. package/dist/{top-companies-BL4F7OPI.js → top-companies-SNOQQFUS.js} +3 -3
  252. package/dist/{translate-6RKX54GS.js → translate-CZRVAEUQ.js} +15 -15
  253. package/dist/{triggers-6Q3YRHZS.js → triggers-MFDFO2Y4.js} +3 -3
  254. package/dist/{unlink-WDSOVBFL.js → unlink-BVDKP7VQ.js} +3 -3
  255. package/dist/{unstage-4ZEULXEQ.js → unstage-V7GMMOWR.js} +2 -2
  256. package/dist/{unstage-JYJIKPB5.js → unstage-ZTOQEWRC.js} +3 -3
  257. package/dist/{update-WSG6RVFX.js → update-R46SJ55S.js} +2 -2
  258. package/dist/{update-IXSCDBM4.js → update-R572VWKO.js} +3 -3
  259. package/dist/{update-FUYXN33G.js → update-SQEWFFFG.js} +3 -3
  260. package/dist/{update-CWZVKOUB.js → update-VVK6SWSI.js} +3 -3
  261. package/dist/{upload-CKV2XS3G.js → upload-TUYWMS6E.js} +3 -3
  262. package/dist/{url-params-UJSNI4XC.js → url-params-CU3KVLI5.js} +3 -3
  263. package/dist/{validate-L76CIYDT.js → validate-WPJXPGWS.js} +12 -12
  264. package/dist/{videos-FAKURRTG.js → videos-KGNLYRUS.js} +5 -5
  265. package/dist/{viewer-check-L4B4LIAX.js → viewer-check-45T2HLAH.js} +4 -4
  266. package/dist/{web-RRGHSAFY.js → web-IEJBIF7U.js} +3 -3
  267. package/dist/{winning-ads-IJTD4TU3.js → winning-ads-GGQ3DZXX.js} +3 -3
  268. package/dist/{write-commands-TAG7DQKT.js → write-commands-CXRXLXX2.js} +4 -4
  269. package/dist/{write-commands-ERKVRHTC.js → write-commands-VWSLDBPT.js} +2 -2
  270. package/dist/{x-FBWHL3PL.js → x-WHE6PSDD.js} +6 -6
  271. package/package.json +1 -1
  272. package/dist/analytics-IMYVNQIX.js.map +0 -1
  273. package/dist/chunk-5ARG3CQG.js.map +0 -1
  274. package/dist/chunk-6Y7SIP2D.js.map +0 -1
  275. package/dist/chunk-BAUSWB7O.js.map +0 -1
  276. package/dist/chunk-CAMX6OHF.js.map +0 -1
  277. package/dist/chunk-FTWJFDIN.js.map +0 -1
  278. package/dist/chunk-MELOSESI.js +0 -20
  279. package/dist/chunk-MELOSESI.js.map +0 -1
  280. package/dist/chunk-Q4JYX424.js.map +0 -1
  281. package/dist/chunk-TX7LZWZD.js.map +0 -1
  282. package/dist/chunk-WVIJD2PP.js.map +0 -1
  283. package/dist/credentials-HKFHC4BR.js.map +0 -1
  284. package/dist/funnel-SK7WDPRS.js.map +0 -1
  285. package/dist/map-5NONUYFP.js.map +0 -1
  286. package/dist/read-LSF7DYTG.js.map +0 -1
  287. package/dist/scaffold-static-ad-JYKHAAYB.js.map +0 -1
  288. /package/dist/{account-4H7QVBRK.js.map → account-F6MHQ64I.js.map} +0 -0
  289. /package/dist/{account-2SVI5OK7.js.map → account-HS7SDSEB.js.map} +0 -0
  290. /package/dist/{account-writes-AK42HGRM.js.map → account-writes-ISE4U2FQ.js.map} +0 -0
  291. /package/dist/{accounts-2XAOZX3U.js.map → accounts-3JKABIGU.js.map} +0 -0
  292. /package/dist/{accounts-U4BGY3QU.js.map → accounts-ZZONEKPU.js.map} +0 -0
  293. /package/dist/{actions-6EJU7CAQ.js.map → actions-VKHKHUUC.js.map} +0 -0
  294. /package/dist/{ad-group-writes-QQS4223F.js.map → ad-group-writes-UU5NNKSO.js.map} +0 -0
  295. /package/dist/{ad-groups-WGPDPUI2.js.map → ad-groups-CGFXZNIA.js.map} +0 -0
  296. /package/dist/{ad-writes-XE2IE4DS.js.map → ad-writes-NALDYWOR.js.map} +0 -0
  297. /package/dist/{add-IPGEYQQG.js.map → add-53DDLTVG.js.map} +0 -0
  298. /package/dist/{add-P7CCVY2J.js.map → add-ATD4MBOO.js.map} +0 -0
  299. /package/dist/{ads-BCOSQALY.js.map → ads-PV7GZXPR.js.map} +0 -0
  300. /package/dist/{ads-XQCGFJOE.js.map → ads-QFAUJCWM.js.map} +0 -0
  301. /package/dist/{advertisers-JG4DZ6SB.js.map → advertisers-HYUASJAS.js.map} +0 -0
  302. /package/dist/{analytics-RNEUAKC4.js.map → analytics-RQROMSQ3.js.map} +0 -0
  303. /package/dist/{animate-AIZ3GS4J.js.map → animate-FWWHSYPL.js.map} +0 -0
  304. /package/dist/{assign-46TXQRT5.js.map → assign-7332DMG5.js.map} +0 -0
  305. /package/dist/{audience-size-5TNQO3IL.js.map → audience-size-UYX5RPTA.js.map} +0 -0
  306. /package/dist/{audiences-TGD5US2M.js.map → audiences-VEKGLWBG.js.map} +0 -0
  307. /package/dist/{audit-XRE7XH3Q.js.map → audit-ZGTG7VRD.js.map} +0 -0
  308. /package/dist/{autocomplete-2ZWSQ6QQ.js.map → autocomplete-LPG4WWTY.js.map} +0 -0
  309. /package/dist/{avatars-M6NSD3KS.js.map → avatars-HTQMIA2F.js.map} +0 -0
  310. /package/dist/{bid-pricing-OIVPZCWW.js.map → bid-pricing-IK2C2IKE.js.map} +0 -0
  311. /package/dist/{brand-YDNX7LYQ.js.map → brand-3WCTQWWX.js.map} +0 -0
  312. /package/dist/{brief-PAHJODHS.js.map → brief-WDKTAKVA.js.map} +0 -0
  313. /package/dist/{campaign-groups-TAP6LK6F.js.map → campaign-groups-6CJ45XMO.js.map} +0 -0
  314. /package/dist/{campaign-writes-4SWPBZE6.js.map → campaign-writes-2MLRVFJK.js.map} +0 -0
  315. /package/dist/{campaign-writes-SXLZFYF6.js.map → campaign-writes-SX52CJYW.js.map} +0 -0
  316. /package/dist/{campaigns-AQAJN23T.js.map → campaigns-DTH5ADA7.js.map} +0 -0
  317. /package/dist/{campaigns-YS3OGQXO.js.map → campaigns-X3DPCCSN.js.map} +0 -0
  318. /package/dist/{campaigns-ROMLENHI.js.map → campaigns-ZVA7SUNN.js.map} +0 -0
  319. /package/dist/{canvas-SMYHQUL5.js.map → canvas-EJLQ27CK.js.map} +0 -0
  320. /package/dist/{capabilities-GGPTIAFO.js.map → capabilities-VWJGP43K.js.map} +0 -0
  321. /package/dist/{catalog-GWN3WT7J.js.map → catalog-BKQOAVR2.js.map} +0 -0
  322. /package/dist/{catalogs-BRXEDE56.js.map → catalogs-G3YEVG6S.js.map} +0 -0
  323. /package/dist/{chatgpt-7W75X3ER.js.map → chatgpt-QNUN63YS.js.map} +0 -0
  324. /package/dist/{chats-G343BSVB.js.map → chats-JOZKLOFU.js.map} +0 -0
  325. /package/dist/{chunk-7J6EHOH6.js.map → chunk-35XWJEWH.js.map} +0 -0
  326. /package/dist/{chunk-OKJWBB2K.js.map → chunk-3EUFAONS.js.map} +0 -0
  327. /package/dist/{chunk-YCOP4FGJ.js.map → chunk-3JCF3NK6.js.map} +0 -0
  328. /package/dist/{chunk-UC7VFFXR.js.map → chunk-4GOS37IA.js.map} +0 -0
  329. /package/dist/{chunk-EIVYFZ4N.js.map → chunk-4JHUG6Y3.js.map} +0 -0
  330. /package/dist/{chunk-D6744YSX.js.map → chunk-54UVGFX3.js.map} +0 -0
  331. /package/dist/{chunk-3YOFT3AP.js.map → chunk-5PKB7LNI.js.map} +0 -0
  332. /package/dist/{chunk-TUB34FVS.js.map → chunk-5YGBRHO6.js.map} +0 -0
  333. /package/dist/{chunk-YT7SSJFR.js.map → chunk-6QJLVNGU.js.map} +0 -0
  334. /package/dist/{chunk-NJXNU2G6.js.map → chunk-7ZHMGXE2.js.map} +0 -0
  335. /package/dist/{chunk-IWP5MA6B.js.map → chunk-D76QEIFG.js.map} +0 -0
  336. /package/dist/{chunk-F4F3PLN3.js.map → chunk-DGPLXY37.js.map} +0 -0
  337. /package/dist/{chunk-B6GITCGN.js.map → chunk-E6KL5ZRN.js.map} +0 -0
  338. /package/dist/{chunk-3URK7DAA.js.map → chunk-EKCPMVZ3.js.map} +0 -0
  339. /package/dist/{chunk-4KF5MNHA.js.map → chunk-F4CUV4FV.js.map} +0 -0
  340. /package/dist/{chunk-VCZOJSBL.js.map → chunk-G7HYW5TH.js.map} +0 -0
  341. /package/dist/{chunk-P5T7OZKV.js.map → chunk-HQSCJYZO.js.map} +0 -0
  342. /package/dist/{chunk-WDZOVF6P.js.map → chunk-JYWZRDLZ.js.map} +0 -0
  343. /package/dist/{chunk-W2TJIZS2.js.map → chunk-K46X77UI.js.map} +0 -0
  344. /package/dist/{chunk-HZUDRKGR.js.map → chunk-KQTYTCKQ.js.map} +0 -0
  345. /package/dist/{chunk-VC7IJPTV.js.map → chunk-KRZV6VS2.js.map} +0 -0
  346. /package/dist/{chunk-W3ZHJJVT.js.map → chunk-KS2QY6MK.js.map} +0 -0
  347. /package/dist/{chunk-64WGDUXH.js.map → chunk-LF2PIA67.js.map} +0 -0
  348. /package/dist/{chunk-VNUNE5AB.js.map → chunk-LYBXCXJB.js.map} +0 -0
  349. /package/dist/{chunk-UX5HYEN3.js.map → chunk-M4G3NKDB.js.map} +0 -0
  350. /package/dist/{chunk-OVT676K6.js.map → chunk-MM22NUA6.js.map} +0 -0
  351. /package/dist/{chunk-UNI5AASR.js.map → chunk-MM5XO4MP.js.map} +0 -0
  352. /package/dist/{chunk-NR2TDASR.js.map → chunk-MZ3SJ6FV.js.map} +0 -0
  353. /package/dist/{chunk-FJGPG7H2.js.map → chunk-PROV2XDR.js.map} +0 -0
  354. /package/dist/{chunk-ND5MJ3AA.js.map → chunk-PZ7EPJRF.js.map} +0 -0
  355. /package/dist/{chunk-355DHOHD.js.map → chunk-QZOS6FXW.js.map} +0 -0
  356. /package/dist/{chunk-MURPCCLG.js.map → chunk-RNDPEHCH.js.map} +0 -0
  357. /package/dist/{chunk-TIASGFTA.js.map → chunk-TJFELVYS.js.map} +0 -0
  358. /package/dist/{chunk-XFGAUP5B.js.map → chunk-ULJ5RFOV.js.map} +0 -0
  359. /package/dist/{chunk-PZXCWSKV.js.map → chunk-VB6WJJR3.js.map} +0 -0
  360. /package/dist/{chunk-QJNTI36W.js.map → chunk-XX53CHKP.js.map} +0 -0
  361. /package/dist/{chunk-TESII3FM.js.map → chunk-XXHMVDLL.js.map} +0 -0
  362. /package/dist/{chunk-EEEMQ7IY.js.map → chunk-YIWXHIVZ.js.map} +0 -0
  363. /package/dist/{chunk-LZ73CZGP.js.map → chunk-YKFEHWHC.js.map} +0 -0
  364. /package/dist/{chunk-W5VGWEAG.js.map → chunk-YTNJODFK.js.map} +0 -0
  365. /package/dist/{chunk-V4RGDJAN.js.map → chunk-Z6XEMPOZ.js.map} +0 -0
  366. /package/dist/{chunk-LZSXZB2F.js.map → chunk-ZWKPXWS5.js.map} +0 -0
  367. /package/dist/{claim-INJHV4FM.js.map → claim-ITPOQ2I7.js.map} +0 -0
  368. /package/dist/{companies-3REQZWKU.js.map → companies-Y5HPLJF5.js.map} +0 -0
  369. /package/dist/{complete-DX2DAAEZ.js.map → complete-SRXMUS4R.js.map} +0 -0
  370. /package/dist/{connect-O4OGKMAK.js.map → connect-CRHMP3NK.js.map} +0 -0
  371. /package/dist/{conversation-6A2X5W64.js.map → conversation-BBOPGOMH.js.map} +0 -0
  372. /package/dist/{conversion-report-XQBJ6LG4.js.map → conversion-report-N4HANYOB.js.map} +0 -0
  373. /package/dist/{conversion-writes-UBCVXP2E.js.map → conversion-writes-LW4HQKK5.js.map} +0 -0
  374. /package/dist/{conversions-PT6UDIX3.js.map → conversions-DH3Q6UTJ.js.map} +0 -0
  375. /package/dist/{conversions-D236RTUK.js.map → conversions-TS723AZV.js.map} +0 -0
  376. /package/dist/{create-I2UB7FWX.js.map → create-CW5E5Y2S.js.map} +0 -0
  377. /package/dist/{create-EOLNJGAX.js.map → create-HOIUANHB.js.map} +0 -0
  378. /package/dist/{create-BR3Q4A4C.js.map → create-M7TK4QUC.js.map} +0 -0
  379. /package/dist/{create-S47CLYXJ.js.map → create-ZWSKHSPD.js.map} +0 -0
  380. /package/dist/{creatives-ITL2SFA7.js.map → creatives-LLWNKS47.js.map} +0 -0
  381. /package/dist/{creatives-FBH4DKSX.js.map → creatives-QQZNCA6V.js.map} +0 -0
  382. /package/dist/{critique-MCSROATT.js.map → critique-AQDXRULE.js.map} +0 -0
  383. /package/dist/{critique-LU27A765.js.map → critique-ORSUUTHE.js.map} +0 -0
  384. /package/dist/{crm-NEI6E2T2.js.map → crm-EPSZEOD2.js.map} +0 -0
  385. /package/dist/{crm-GOE6ZO5N.js.map → crm-WNFEWAAM.js.map} +0 -0
  386. /package/dist/{customers-HGBZPL6D.js.map → customers-NZDE7V3P.js.map} +0 -0
  387. /package/dist/{delete-67XFFHUY.js.map → delete-6RAKC62Z.js.map} +0 -0
  388. /package/dist/{delete-BT7I3EMN.js.map → delete-7HMQBDFC.js.map} +0 -0
  389. /package/dist/{delete-ONE22VRX.js.map → delete-FKXR5ZOP.js.map} +0 -0
  390. /package/dist/{demographics-R4LCQGDJ.js.map → demographics-PRZS2ZC4.js.map} +0 -0
  391. /package/dist/{discard-BOPTV4V5.js.map → discard-YLTMCFE6.js.map} +0 -0
  392. /package/dist/{domain-B54ILSOO.js.map → domain-Z533IR5M.js.map} +0 -0
  393. /package/dist/{draft-BGUJDHXR.js.map → draft-3ZVCQSAG.js.map} +0 -0
  394. /package/dist/{draft-DWSBVJUF.js.map → draft-4PURIMDM.js.map} +0 -0
  395. /package/dist/{draft-ROERDGSK.js.map → draft-7ZWPABVG.js.map} +0 -0
  396. /package/dist/{draft-MNFJ4G3C.js.map → draft-THPZFASM.js.map} +0 -0
  397. /package/dist/{draft-J4SGNGGW.js.map → draft-ZXZEQRCL.js.map} +0 -0
  398. /package/dist/{facets-FUTIWQXK.js.map → facets-453OFMAM.js.map} +0 -0
  399. /package/dist/{feedback-XXEGMLPS.js.map → feedback-JFV6BMJW.js.map} +0 -0
  400. /package/dist/{feedback-record-E3PLIVW7.js.map → feedback-record-HCOBRTY2.js.map} +0 -0
  401. /package/dist/{fetch-D7JPGEYZ.js.map → fetch-44PPB6UO.js.map} +0 -0
  402. /package/dist/{find-OTDIX6V4.js.map → find-FRRHAPWX.js.map} +0 -0
  403. /package/dist/{fit-BOQL6OK3.js.map → fit-7237F5EB.js.map} +0 -0
  404. /package/dist/{flows-L6BF3TDT.js.map → flows-N7UZ4ZO5.js.map} +0 -0
  405. /package/dist/{fonts-THAAZY7Z.js.map → fonts-YW7SU5EY.js.map} +0 -0
  406. /package/dist/{forecast-RYYVMNYT.js.map → forecast-W57WFVDL.js.map} +0 -0
  407. /package/dist/{ga4-UDQ2HA2J.js.map → ga4-DV2AXCSL.js.map} +0 -0
  408. /package/dist/{generate-3XYYITU6.js.map → generate-MMBYB44G.js.map} +0 -0
  409. /package/dist/{get-3STPGBX3.js.map → get-2NA3LPCN.js.map} +0 -0
  410. /package/dist/{get-YBIF3H52.js.map → get-MEGPYKQR.js.map} +0 -0
  411. /package/dist/{google-KTO3PLEU.js.map → google-QYYYSSXI.js.map} +0 -0
  412. /package/dist/{google-ads-YD7LYWGY.js.map → google-ads-G2XD4RMT.js.map} +0 -0
  413. /package/dist/{gsc-P3QYGDV2.js.map → gsc-TAKOF7J5.js.map} +0 -0
  414. /package/dist/{history-Q3QCT64S.js.map → history-DBIEYQHY.js.map} +0 -0
  415. /package/dist/{history-RWWBR4TN.js.map → history-RCKMMUWI.js.map} +0 -0
  416. /package/dist/{hubspot-E65QNOI4.js.map → hubspot-CKS7F77W.js.map} +0 -0
  417. /package/dist/{icon-I43F77FV.js.map → icon-L4RSS6PZ.js.map} +0 -0
  418. /package/dist/{ideas-ZB7O7T5I.js.map → ideas-EYC6K33G.js.map} +0 -0
  419. /package/dist/{images-U4DKZQTE.js.map → images-2HJ7YKTH.js.map} +0 -0
  420. /package/dist/{ingest-MZXGMFA5.js.map → ingest-26O5Q462.js.map} +0 -0
  421. /package/dist/{ingest-ROEMTZMG.js.map → ingest-RR5GAX3G.js.map} +0 -0
  422. /package/dist/{insights-LNAXV2CG.js.map → insights-ZIU6FJMS.js.map} +0 -0
  423. /package/dist/{inspect-MCMUJPXU.js.map → inspect-XPDUPSUP.js.map} +0 -0
  424. /package/dist/{inspiration-P265QJ2H.js.map → inspiration-S3DU4CMQ.js.map} +0 -0
  425. /package/dist/{keyword-metrics-MLFTDAS4.js.map → keyword-metrics-KOPXTILA.js.map} +0 -0
  426. /package/dist/{keywords-for-site-4WUBJNTI.js.map → keywords-for-site-PONNELI5.js.map} +0 -0
  427. /package/dist/{landing-5GDWJN4C.js.map → landing-RYRZ5VZ2.js.map} +0 -0
  428. /package/dist/{leads-LDOOJI5K.js.map → leads-R7YSJDIG.js.map} +0 -0
  429. /package/dist/{learn-3JPH2EZC.js.map → learn-IZ6QKTCX.js.map} +0 -0
  430. /package/dist/{line-item-writes-LFDWJBQG.js.map → line-item-writes-25FE22UX.js.map} +0 -0
  431. /package/dist/{line-items-T3EVXB4M.js.map → line-items-V522VKSU.js.map} +0 -0
  432. /package/dist/{link-M5ESAD5Y.js.map → link-ZZZVDSUP.js.map} +0 -0
  433. /package/dist/{linkedin-4FNKZNIR.js.map → linkedin-HXLYJVGI.js.map} +0 -0
  434. /package/dist/{list-XWUTPJRQ.js.map → list-HSXOTG5R.js.map} +0 -0
  435. /package/dist/{list-EF6QI4JT.js.map → list-KYEK3N34.js.map} +0 -0
  436. /package/dist/{list-FNW254C3.js.map → list-LKHHCQZU.js.map} +0 -0
  437. /package/dist/{locations-2NKBJKBT.js.map → locations-74TPQWAT.js.map} +0 -0
  438. /package/dist/{log-5MESJJLM.js.map → log-6ELXS5EJ.js.map} +0 -0
  439. /package/dist/{logo-2IP663QO.js.map → logo-Q5D7PZY6.js.map} +0 -0
  440. /package/dist/{lookup-XK45W2SH.js.map → lookup-TCU2ZEZW.js.map} +0 -0
  441. /package/dist/{mcp-CGITBQQA.js.map → mcp-W7DBSUF7.js.map} +0 -0
  442. /package/dist/{media-sources-6TFUGPE2.js.map → media-sources-M35YZQY5.js.map} +0 -0
  443. /package/dist/{members-R2GQVSVA.js.map → members-QXYMJQWU.js.map} +0 -0
  444. /package/dist/{models-3Z6MDHQW.js.map → models-7U3GRYHF.js.map} +0 -0
  445. /package/dist/{normalize-L6WBNGQA.js.map → normalize-DYJLUBQP.js.map} +0 -0
  446. /package/dist/{options-YT2ZGB2Z.js.map → options-77SHB5KA.js.map} +0 -0
  447. /package/dist/{performance-52IILAFE.js.map → performance-VVTYUSTW.js.map} +0 -0
  448. /package/dist/{pixels-TZPF746S.js.map → pixels-45A55MOP.js.map} +0 -0
  449. /package/dist/{promoted-tweet-writes-QVIKWEIZ.js.map → promoted-tweet-writes-QP37NMQC.js.map} +0 -0
  450. /package/dist/{promoted-tweets-2AALRV5O.js.map → promoted-tweets-WPSM6MGX.js.map} +0 -0
  451. /package/dist/{publish-XFLOZAOQ.js.map → publish-YF6ESBGQ.js.map} +0 -0
  452. /package/dist/{reddit-HFBAGWNP.js.map → reddit-VC3IOFNC.js.map} +0 -0
  453. /package/dist/{refresh-INKIU3QV.js.map → refresh-UXBCTVCG.js.map} +0 -0
  454. /package/dist/{release-C2MFXAPJ.js.map → release-PP5S5QHD.js.map} +0 -0
  455. /package/dist/{remove-JWSVNUJ4.js.map → remove-OUWQ7NPN.js.map} +0 -0
  456. /package/dist/{reopen-3GM4OSLZ.js.map → reopen-KXAM5LVX.js.map} +0 -0
  457. /package/dist/{rerun-7K675UFG.js.map → rerun-ZVFP4FNN.js.map} +0 -0
  458. /package/dist/{research-HUMDT7T4.js.map → research-52CURSLR.js.map} +0 -0
  459. /package/dist/{research-ZMYQWEAT.js.map → research-WEW3TISC.js.map} +0 -0
  460. /package/dist/{reset-3BEGDSBW.js.map → reset-MVLV7GEB.js.map} +0 -0
  461. /package/dist/{reset-TVDYP2VK.js.map → reset-RBL2NSDV.js.map} +0 -0
  462. /package/dist/{resolve-OQKUGWEI.js.map → resolve-JG3TGLCR.js.map} +0 -0
  463. /package/dist/{retry-GUHOWYO2.js.map → retry-2B3V4CJO.js.map} +0 -0
  464. /package/dist/{retry-EJBF6GBJ.js.map → retry-Y3VUKOZ3.js.map} +0 -0
  465. /package/dist/{run-3D6QZC6L.js.map → run-3BCAHPCW.js.map} +0 -0
  466. /package/dist/{run-7VWIB2KF.js.map → run-FZL7FYTL.js.map} +0 -0
  467. /package/dist/{scaffold-ad-WYSO6VRA.js.map → scaffold-ad-TL5URKZF.js.map} +0 -0
  468. /package/dist/{scaffold-video-KFBLDBVW.js.map → scaffold-video-LRTELU5X.js.map} +0 -0
  469. /package/dist/{schedule-QVYVMRIY.js.map → schedule-7QLWW5HA.js.map} +0 -0
  470. /package/dist/{scheduled-agents-CNIGCLAP.js.map → scheduled-agents-HDALX27W.js.map} +0 -0
  471. /package/dist/{schema-7UUVQ4RH.js.map → schema-EY3Y3KFB.js.map} +0 -0
  472. /package/dist/{search-XUGIKFW3.js.map → search-4XS7AO5R.js.map} +0 -0
  473. /package/dist/{select-FQVDWCMG.js.map → select-J3QVFWVE.js.map} +0 -0
  474. /package/dist/{set-prompt-XCICIA6U.js.map → set-prompt-MEMSZEZK.js.map} +0 -0
  475. /package/dist/{setup-links-4VILWID2.js.map → setup-links-4PCSBEJD.js.map} +0 -0
  476. /package/dist/{site-TLJVSZQF.js.map → site-IG62FRYT.js.map} +0 -0
  477. /package/dist/{sources-4MKBWFWG.js.map → sources-5YFONIJP.js.map} +0 -0
  478. /package/dist/{sources-7FCRKPXJ.js.map → sources-AM7SIZUY.js.map} +0 -0
  479. /package/dist/{stale-TVTZNIB7.js.map → stale-UMI4XCKX.js.map} +0 -0
  480. /package/dist/{status-WZKAKUG4.js.map → status-F4XMET7U.js.map} +0 -0
  481. /package/dist/{stock-2YCDN3N6.js.map → stock-KXJ26BY4.js.map} +0 -0
  482. /package/dist/{studio-RA7QQH4O.js.map → studio-EKIPLLHD.js.map} +0 -0
  483. /package/dist/{sync-DEWLEMTT.js.map → sync-LXYAJ7SU.js.map} +0 -0
  484. /package/dist/{sync-definition-LGX25ZTO.js.map → sync-definition-WU6V5245.js.map} +0 -0
  485. /package/dist/{tag-manager-DYZUOIAS.js.map → tag-manager-JAAMOUGB.js.map} +0 -0
  486. /package/dist/{tags-RBB4TU7U.js.map → tags-6WV3PQH5.js.map} +0 -0
  487. /package/dist/{tags-O76MDVID.js.map → tags-FTOD6CYS.js.map} +0 -0
  488. /package/dist/{tags-V5FR3DYU.js.map → tags-KXNOWUMN.js.map} +0 -0
  489. /package/dist/{tags-IWN3QPK5.js.map → tags-PJRNCPQJ.js.map} +0 -0
  490. /package/dist/{tags-ANV54THE.js.map → tags-R5JCZRAV.js.map} +0 -0
  491. /package/dist/{targeting-criteria-6IOXVE4K.js.map → targeting-criteria-HJ7YFAB2.js.map} +0 -0
  492. /package/dist/{targets-FFLV6OMF.js.map → targets-RLZSBUCI.js.map} +0 -0
  493. /package/dist/{templates-Y3ZLB7MK.js.map → templates-4SWUBLOC.js.map} +0 -0
  494. /package/dist/{testimonials-FCYS4NKB.js.map → testimonials-YYLALSV4.js.map} +0 -0
  495. /package/dist/{top-companies-BL4F7OPI.js.map → top-companies-SNOQQFUS.js.map} +0 -0
  496. /package/dist/{translate-6RKX54GS.js.map → translate-CZRVAEUQ.js.map} +0 -0
  497. /package/dist/{triggers-6Q3YRHZS.js.map → triggers-MFDFO2Y4.js.map} +0 -0
  498. /package/dist/{unlink-WDSOVBFL.js.map → unlink-BVDKP7VQ.js.map} +0 -0
  499. /package/dist/{unstage-4ZEULXEQ.js.map → unstage-V7GMMOWR.js.map} +0 -0
  500. /package/dist/{unstage-JYJIKPB5.js.map → unstage-ZTOQEWRC.js.map} +0 -0
  501. /package/dist/{update-WSG6RVFX.js.map → update-R46SJ55S.js.map} +0 -0
  502. /package/dist/{update-IXSCDBM4.js.map → update-R572VWKO.js.map} +0 -0
  503. /package/dist/{update-FUYXN33G.js.map → update-SQEWFFFG.js.map} +0 -0
  504. /package/dist/{update-CWZVKOUB.js.map → update-VVK6SWSI.js.map} +0 -0
  505. /package/dist/{upload-CKV2XS3G.js.map → upload-TUYWMS6E.js.map} +0 -0
  506. /package/dist/{url-params-UJSNI4XC.js.map → url-params-CU3KVLI5.js.map} +0 -0
  507. /package/dist/{validate-L76CIYDT.js.map → validate-WPJXPGWS.js.map} +0 -0
  508. /package/dist/{videos-FAKURRTG.js.map → videos-KGNLYRUS.js.map} +0 -0
  509. /package/dist/{viewer-check-L4B4LIAX.js.map → viewer-check-45T2HLAH.js.map} +0 -0
  510. /package/dist/{web-RRGHSAFY.js.map → web-IEJBIF7U.js.map} +0 -0
  511. /package/dist/{winning-ads-IJTD4TU3.js.map → winning-ads-GGQ3DZXX.js.map} +0 -0
  512. /package/dist/{write-commands-TAG7DQKT.js.map → write-commands-CXRXLXX2.js.map} +0 -0
  513. /package/dist/{write-commands-ERKVRHTC.js.map → write-commands-VWSLDBPT.js.map} +0 -0
  514. /package/dist/{x-FBWHL3PL.js.map → x-WHE6PSDD.js.map} +0 -0
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  fetchBrandLogo,
3
3
  logoCommand
4
- } from "./chunk-W3ZHJJVT.js";
4
+ } from "./chunk-KS2QY6MK.js";
5
5
  import "./chunk-IVIJJXXT.js";
6
6
  import "./chunk-WS2GMOSG.js";
7
- import "./chunk-Q6ULQMWG.js";
8
7
  import "./chunk-KKJ4KJCW.js";
8
+ import "./chunk-Q6ULQMWG.js";
9
9
  import "./chunk-XBOK23HI.js";
10
10
  import "./chunk-IFWP3ZDO.js";
11
11
  import "./chunk-NAWWC5I3.js";
@@ -15,4 +15,4 @@ export {
15
15
  fetchBrandLogo,
16
16
  logoCommand
17
17
  };
18
- //# sourceMappingURL=logo-2IP663QO.js.map
18
+ //# sourceMappingURL=logo-Q5D7PZY6.js.map
@@ -3,8 +3,8 @@ import {
3
3
  lookupReport,
4
4
  peopleArgs,
5
5
  peopleLimitError
6
- } from "./chunk-LZ73CZGP.js";
7
- import "./chunk-MELOSESI.js";
6
+ } from "./chunk-YKFEHWHC.js";
7
+ import "./chunk-HTW7FTP4.js";
8
8
  import "./chunk-SSJK7FEV.js";
9
9
  import "./chunk-EDLZGTGN.js";
10
10
  import "./chunk-VFIOJD5M.js";
@@ -19,4 +19,4 @@ export {
19
19
  peopleArgs,
20
20
  peopleLimitError
21
21
  };
22
- //# sourceMappingURL=lookup-XK45W2SH.js.map
22
+ //# sourceMappingURL=lookup-TCU2ZEZW.js.map
@@ -1,12 +1,18 @@
1
+ import {
2
+ NO_FIT_HINT,
3
+ conceptFromFit,
4
+ fitReference
5
+ } from "./chunk-54UVGFX3.js";
1
6
  import {
2
7
  makeSeriesAd,
3
8
  seriesMadeEnvelope
4
- } from "./chunk-TIASGFTA.js";
9
+ } from "./chunk-TJFELVYS.js";
5
10
  import "./chunk-ZZQXVYUY.js";
6
11
  import {
7
12
  runBaker
8
- } from "./chunk-4KF5MNHA.js";
9
- import "./chunk-VCZOJSBL.js";
13
+ } from "./chunk-F4CUV4FV.js";
14
+ import "./chunk-G7HYW5TH.js";
15
+ import "./chunk-5PKB7LNI.js";
10
16
  import {
11
17
  definitionFieldsOf,
12
18
  fitsIdea,
@@ -19,15 +25,14 @@ import {
19
25
  setSpecMessage,
20
26
  unsourcedCopyLines,
21
27
  withFitConcept
22
- } from "./chunk-VNUNE5AB.js";
23
- import "./chunk-EEEMQ7IY.js";
28
+ } from "./chunk-LYBXCXJB.js";
29
+ import "./chunk-YIWXHIVZ.js";
24
30
  import {
25
31
  projectStaticBriefs
26
- } from "./chunk-WVIJD2PP.js";
27
- import "./chunk-3YOFT3AP.js";
32
+ } from "./chunk-5RPU6KG5.js";
28
33
  import {
29
34
  liveViewerLookups
30
- } from "./chunk-NJXNU2G6.js";
35
+ } from "./chunk-7ZHMGXE2.js";
31
36
  import {
32
37
  buildSearchBody
33
38
  } from "./chunk-BNCW67EM.js";
@@ -43,29 +48,24 @@ import {
43
48
  readPersonaIds,
44
49
  sourcesClaims
45
50
  } from "./chunk-4QEY2L6U.js";
46
- import {
47
- NO_FIT_HINT,
48
- conceptFromFit,
49
- fitReference
50
- } from "./chunk-D6744YSX.js";
51
- import "./chunk-B6GITCGN.js";
52
- import "./chunk-MURPCCLG.js";
51
+ import "./chunk-E6KL5ZRN.js";
52
+ import "./chunk-RNDPEHCH.js";
53
53
  import "./chunk-NFSLRRIE.js";
54
54
  import "./chunk-F2S5BLPE.js";
55
55
  import "./chunk-WTOYCUKH.js";
56
56
  import {
57
57
  findWorkspaceRoot
58
58
  } from "./chunk-DZSIUEGH.js";
59
- import "./chunk-6Y7SIP2D.js";
60
- import "./chunk-W3B4BHQU.js";
61
- import "./chunk-TX7LZWZD.js";
59
+ import "./chunk-ZIHEIVJC.js";
60
+ import "./chunk-KFE3S63W.js";
62
61
  import "./chunk-DGCUPJZD.js";
62
+ import "./chunk-W3B4BHQU.js";
63
63
  import {
64
64
  SPEC_SHAPES_HINT,
65
65
  readAdSpec,
66
66
  unwrittenProblems
67
- } from "./chunk-PZXCWSKV.js";
68
- import "./chunk-CAMX6OHF.js";
67
+ } from "./chunk-VB6WJJR3.js";
68
+ import "./chunk-CHSNHVYF.js";
69
69
  import "./chunk-RX6F3GEA.js";
70
70
  import {
71
71
  viewerFromKnowledge
@@ -75,7 +75,7 @@ import "./chunk-VAJBWA2U.js";
75
75
  import "./chunk-HRYOZUSK.js";
76
76
  import "./chunk-VVZBBKRC.js";
77
77
  import "./chunk-YBMVHGY3.js";
78
- import "./chunk-BAUSWB7O.js";
78
+ import "./chunk-EUFCY63X.js";
79
79
  import "./chunk-GXDLWBOY.js";
80
80
  import "./chunk-TEINLN64.js";
81
81
  import "./chunk-ZJWUBJYQ.js";
@@ -515,6 +515,9 @@ function makeEnvelope(made) {
515
515
  `Rewrite before running: ${made.unsourcedCopy.map((l) => JSON.stringify(l)).join(", ")} claim a figure nothing the company wrote holds (the reference's promise, not ours).`
516
516
  ] : [],
517
517
  `Write the copy lines and the scene in src/creatives/${made.slug}/prompt.json${made.reference ? ": the drafted lines are the reference's, so keep one only if the Knowledge says it (badges, ratings and guarantees too)" : ""}. Say the message in the customer's words${quote ? ` ("${quote.slice(0, 80)}")` : ""}; keep \`message\` as it is.`,
518
+ ...!made.idea.format.startsWith("video_") ? [
519
+ "Before rendering: read .claude/skills/creative-canvas-ads/references/creative-intent.md and static-image-flow.md. Record the applicable intent, constraints and casting in _definition.md's body; carry them into prompt.json. Follow a direct brief without inventing a winner; for a reference adaptation, state its mechanism, transfer hypothesis and what must survive. Inspect existing Avatars before creating an actor. Keep interfaces native and requested overlays separate. Preserve plausible anatomy, device proportions, scale, perspective and support; reflow text rather than distort it. Honour the requested sizes."
520
+ ] : [],
518
521
  SPEC_SHAPES_HINT,
519
522
  `Then: baker canvas run ${made.canvasPath} (it validates and asks the viewer itself: nothing to run before it).`,
520
523
  // The scaffold's own next steps name a separate validate; the run does it (dev, Oct 2026: five validates before one run).
@@ -590,4 +593,4 @@ export {
590
593
  seedConcept,
591
594
  unbuiltReference
592
595
  };
593
- //# sourceMappingURL=make-BH5TNJUO.js.map
596
+ //# sourceMappingURL=make-2PV4B2TT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/creatives/make.ts"],"sourcesContent":["/**\n * `baker creatives make <idea>`: one idea becomes one creative. For a static it finds a reference\n * for the job itself (the idea's container, made for our viewer), keeps the first whose\n * load-bearing parts we can supply, scaffolds from it, and records the idea on the creative and\n * its message in the ad spec. The agent then writes only the copy lines and the scene, and runs it.\n */\n\nimport { mkdtemp, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { ScopedWinnersSearchResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport type { ConceptCarry } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { readAdSpec, SPEC_SHAPES_HINT, unwrittenProblems } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { projectStaticBriefs } from \"../../engine/scaffold/static-render-briefs.ts\";\nimport { optionalChatId } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { type ViewerTemperature, viewerFromKnowledge } from \"../../viewer-profile.ts\";\nimport { runBaker as baker } from \"../baker-child.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { liveViewerLookups } from \"../canvas/viewer-check.ts\";\nimport { conceptFromFit, type FitAnswer, type FitFailure, fitReference, NO_FIT_HINT } from \"../winning-ads/fit.ts\";\nimport { buildSearchBody } from \"../winning-ads/search.ts\";\nimport { checkIdeas, type EvidenceLevel, type Idea, type IdeaCheck, sourcesClaims } from \"./ideas-model.ts\";\nimport {\n coverageOf,\n IDEAS_DIR,\n readCreativeRecords,\n readIdeas,\n readInsights,\n readKnowledgeCorpus,\n readPersonaIds,\n} from \"./ideas-workspace.ts\";\nimport {\n definitionFieldsOf,\n fitsIdea,\n ideaSpec,\n isVideoIdea,\n missingElements,\n pooledCandidates,\n referenceSearchesFor,\n setDefinitionFields,\n setSpecMessage,\n unsourcedCopyLines,\n withFitConcept,\n} from \"./make-model.ts\";\nimport { makeSeriesAd, seriesMadeEnvelope } from \"./make-series.ts\";\n\n/** Candidates whose fit may be asked (a few cents each, cached per workspace). */\nconst FITS_TRIED = 6;\n/**\n * Fits asked at a time: the best-ranked candidate is usually kept, so the rest wait for a slot that\n * one not fitting frees (six at once billed six fits where one was kept).\n */\nconst FITS_AT_ONCE = 3;\nconst SEARCH_TIMEOUT_MS = 120_000;\n/**\n * How long make looks for, checks and describes a reference before it starts the ad from the idea.\n * Every ad starts from a proven one when it can: dev, Oct 2026, a search took 3-30 s, a fit 20-50 s\n * and the describe ~35 s beside them, so the 50 s this once was sent good references to the idea.\n */\nconst REFERENCE_MS = 150_000;\n\nconst DESCRIPTION = `Build one idea from src/creatives/_ideas/ into a creative. For a static it builds on a proven winning ad in the idea's container: it searches on the idea's message for our viewer, then the container's strongest winners from any category, checks which fit us, scaffolds the creative on the best-ranked one, records the idea on it and sets the ad's message. The fit says what made that ad win, so what ours carries of it (\\`reference.carry\\`: whole_ad, layout, hook or angle); its first hint names the ad: tell the person. When no proven ad fits, it starts the ad from the idea itself and says why (never a dead end, never retry with another format). You then write the copy lines and the scene in prompt.json and run it. Takes up to about two and a half minutes: run it in the foreground, once per idea.\n\nStart here, with an idea from \\`baker creatives ideas\\` build_next:\n baker creatives make phone-payroll # static: reference found and checked for you\n baker creatives make phone-payroll --adset 120210000000 # written for that ad set's viewer\n baker creatives make phone-payroll --reference 1310524137919413 # your own reference instead\n baker creatives make founder-story --spec beats.json # a video idea: from its beats spec\n baker creatives make phone-payroll --slug phone-payroll-h2 # another hook of the same idea\n baker creatives make tiktok-speed --series zernio-live # another message in the style of a ready ad\nThen: edit src/creatives/<slug>/prompt.json (copy + scene; the message is set), and \\`baker canvas run src/creatives/<slug>/<slug>.canvas.json\\`.`;\n\nconst ARGS = {\n idea: { type: \"positional\", required: true, description: \"The idea id (src/creatives/_ideas/<idea>.md)\" },\n slug: { type: \"string\", required: false, description: \"Creative slug (default: the idea id)\" },\n adset: { type: \"string\", required: false, description: \"Meta ad set the ad is for: its viewer and placements\" },\n reference: {\n type: \"string\",\n required: false,\n description: \"A library ad id to build on instead of searching (statics)\",\n },\n platform: {\n type: \"string\",\n required: false,\n description: \"Library platform of --reference: meta|linkedin|tiktok (default meta)\",\n },\n spec: {\n type: \"string\",\n required: false,\n description: \"Video ideas: the beats spec for `baker canvas scaffold-ad --spec`\",\n },\n series: {\n type: \"string\",\n required: false,\n description:\n \"Statics: make this idea as another ad of the series led by this creative (its slug): the same design, only its words changed. No reference is searched; seconds. The lead must have a ready version. Then write its words and run the whole series: baker canvas run --series <lead>\",\n },\n \"from-idea\": {\n type: \"boolean\",\n required: false,\n default: false,\n description:\n \"Statics: skip the reference search and start from the idea (what make does by itself when no proven ad fits)\",\n },\n} as const;\n\nregisterSchema({ command: \"creatives.make\", description: DESCRIPTION, args: ARGS });\n\ntype Failure = { code: string; message: string; fix?: string };\n\nfunction fail(error: Failure): never {\n writeJson({ ok: false, error });\n process.exit(1);\n}\n\nasync function viewerTemperature(\n root: string,\n adSet: string | undefined,\n awareness: string,\n): Promise<ViewerTemperature> {\n if (adSet) {\n const read = await liveViewerLookups(root)\n .adSetViewer(adSet)\n .catch(() => null);\n if (read) return read.temperature;\n }\n return viewerFromKnowledge({ personas: [], awareness: awareness as never }).temperature;\n}\n\ntype Picked = {\n adId: string;\n platform: \"meta\" | \"linkedin\" | \"tiktok\";\n advertiserId?: string;\n why: string;\n tried: number;\n /** The fit that kept it, with what made it win (`carry`); none for a reference chosen by hand. */\n fit?: FitAnswer;\n};\n\nconst asPlatform = (value: unknown): Picked[\"platform\"] =>\n value === \"linkedin\" || value === \"tiktok\" ? value : \"meta\";\n\ntype Candidate = { ad_id?: string | null; platform?: unknown; advertiser_id?: string | null };\ntype FitResult = Awaited<ReturnType<typeof fitReference>>;\n\n/** How references are found and checked; the live library and fit by default, injected in tests. */\nexport type ReferenceDeps = {\n search: (body: Record<string, unknown>) => Promise<Candidate[]>;\n fit: (platform: Picked[\"platform\"], adId: string) => Promise<FitResult>;\n};\n\nfunction liveReferenceDeps(root: string): ReferenceDeps {\n return {\n search: async (body) =>\n (\n await apiPost<ScopedWinnersSearchResponse>(\"/api/ad-library/winners/search\", body, {\n timeoutMs: SEARCH_TIMEOUT_MS,\n }).catch(() => null)\n )?.results ?? [],\n fit: (platform, adId) => fitReference(root, platform, adId),\n };\n}\n\n/** The candidates of every search, the better search's first; every search runs at once. */\nasync function findCandidates(searches: Record<string, unknown>[], deps: ReferenceDeps): Promise<Candidate[]> {\n const results = await Promise.all(searches.map((search) => deps.search(search).catch(() => [] as Candidate[])));\n return pooledCandidates(results, FITS_TRIED);\n}\n\n/**\n * Search the idea's container and keep the best-ranked reference whose load-bearing parts we can\n * supply. Three fits run at once (a few cents each): one after another, one make took 109 s.\n */\n/**\n * What building on a reference started before its fit was known left behind: `prepared` when the\n * reference kept is the one built on, `discarded` (to wait for before building over it) when not.\n */\ntype Speculated<T> = { prepared?: Promise<T>; discarded?: Promise<T> };\n\n/** The reference a build starts on, as `prepare` is handed it before its fit is known. */\nexport type ReferenceCandidate = Pick<Picked, \"adId\" | \"platform\" | \"advertiserId\">;\n\nconst candidateOf = (c: Candidate): ReferenceCandidate => ({\n adId: String(c.ad_id),\n platform: asPlatform(c.platform),\n ...(c.advertiser_id ? { advertiserId: c.advertiser_id } : {}),\n});\n\nexport async function pickReference<T = never>(\n root: string,\n searches: Record<string, unknown>[],\n deps: ReferenceDeps = liveReferenceDeps(root),\n /**\n * Building on the best-ranked reference, started while the fits are asked: it is usually the one\n * kept, and its scaffold (a 35 s describe) then no longer waits ~25 s for them (dev, Oct 2026).\n */\n prepare?: (candidate: ReferenceCandidate, signal: AbortSignal) => Promise<T>,\n /** Aborted when the time for a reference is out: no reference is kept, and the build started is stopped. */\n within?: AbortSignal,\n): Promise<(Picked & Speculated<T>) | (Failure & Speculated<T>)> {\n const out = whenAborted(within);\n const found = await Promise.race([findCandidates(searches, deps), out]);\n if (found === \"out\") return slowReference();\n const candidates = found.slice(0, FITS_TRIED);\n const first = candidates[0];\n // A build on a reference that is not kept is stopped, not waited for (dev: 50 s for nothing).\n const stop = new AbortController();\n const building = first && prepare ? prepare(candidateOf(first), stop.signal) : undefined;\n // A failed speculative build is never this pick's failure: the kept reference is built again.\n void building?.catch(() => undefined);\n // Three fits are asked at once, and one that does not fit asks the next; the best-ranked one that\n // fits is kept as soon as it and every better-ranked one have answered, never waiting on slower\n // fits below it. Once the pick is made, no further fit is asked.\n let settled = false;\n const asked: Promise<FitResult>[] = [];\n const askNext = () => {\n const index = asked.length;\n const candidate = candidates[index];\n if (settled || !candidate) return;\n asked.push(\n askFit(deps, candidate).then((fit) => {\n if (!(fit.ok && fitsIdea(fit.fit))) askNext();\n return fit;\n }),\n );\n };\n for (let slot = 0; slot < FITS_AT_ONCE; slot++) askNext();\n const kept = await Promise.race([firstFitting(candidates, asked), out]);\n settled = true;\n if (kept === \"out\") {\n stop.abort();\n return { ...slowReference(), ...(building ? { discarded: building } : {}) };\n }\n if (kept.index !== 0) stop.abort();\n const speculated = building ? (kept.index === 0 ? { prepared: building } : { discarded: building }) : {};\n return { ...kept.picked, ...speculated };\n}\n\n/**\n * One candidate's fit, a throw read as a fit not made: it is handled when asked, since the fits\n * below the one awaited can fail while it is awaited.\n */\nconst askFit = (deps: ReferenceDeps, c: Candidate): Promise<FitResult> =>\n Promise.resolve()\n .then(() => deps.fit(asPlatform(c.platform), String(c.ad_id)))\n .catch((e): FitResult => ({ ok: false, error: { code: \"UNAVAILABLE\", message: String(e), fix: \"\" } }));\n\n/** Resolves \"out\" once `signal` aborts (never without one). */\nconst whenAborted = (signal: AbortSignal | undefined) =>\n new Promise<\"out\">((resolve) => {\n if (signal?.aborted) resolve(\"out\");\n signal?.addEventListener(\"abort\", () => resolve(\"out\"), { once: true });\n });\n\n/** The best-ranked candidate whose fit keeps it, with its rank; else why none was kept (index -1). */\nasync function firstFitting(\n candidates: readonly Candidate[],\n fits: readonly Promise<FitResult>[],\n): Promise<{ picked: Picked | Failure; index: number }> {\n let unchecked: FitFailure | null = null;\n let checked = 0;\n const lacking: string[] = [];\n for (const [index, candidate] of candidates.entries()) {\n const fit = await fits[index];\n if (!fit) continue;\n if (!fit.ok) unchecked = fit.error;\n else checked += 1;\n if (fit.ok && !fitsIdea(fit.fit)) lacking.push(...missingElements(fit.fit));\n if (!(fit.ok && fitsIdea(fit.fit))) continue;\n const layers = fit.fit.why_it_wins;\n return {\n picked: {\n ...candidateOf(candidate),\n why: [layers.disguise, layers.trigger, layers.logic].filter(Boolean).join(\"; \"),\n tried: index + 1,\n fit: fit.fit,\n },\n index,\n };\n }\n return { picked: noReference(candidates.length, checked, unchecked, lacking), index: -1 };\n}\n\n/** What the rejected references won on that we lack, each once, at most three. Pure. */\nconst lackingText = (lacking: readonly string[]) => {\n const named = [...new Set(lacking.map((l) => l.trim()).filter(Boolean))].slice(0, 3);\n return named.length > 0 ? ` (they won on ${named.join(\", \")})` : \"\";\n};\n\nconst slowReference = (): Failure => ({\n code: \"REFERENCE_SLOW\",\n message: `Finding and checking a proven ad took longer than ${REFERENCE_MS / 1000} s.`,\n fix: \"Nothing to do: the ad starts from the idea. To build on a proven ad anyway, run make again (the checks already made are kept) or pass --reference <adId>.\",\n});\n\n/**\n * Why no reference was kept: none found, none fits (naming what the ones checked won on that we\n * lack), or the fit could not be checked. Pure.\n */\nexport function noReference(\n found: number,\n checked: number,\n unchecked: { message: string } | null,\n lacking: readonly string[] = [],\n): Failure {\n if (found > 0 && checked === 0 && unchecked) {\n return {\n code: \"FIT_UNAVAILABLE\",\n message: `Could not check whether the references fit (${unchecked.message})`,\n fix: \"Run make again in a moment. To build now, pass --reference <adId> with one you looked at yourself (`baker winning-ads search`).\",\n };\n }\n return {\n code: \"NO_REFERENCE_FITS\",\n message:\n found === 0\n ? \"The library has no proven ad in this idea's format.\"\n : `None of the ${found} proven ads checked in this format wins on something this company has${lackingText(lacking)}.`,\n fix: \"Nothing to do to go on: the ad starts from the idea. To build on a proven ad instead, pass --reference <adId> for one you looked at (`baker winning-ads search --format static --format-pattern <the idea's format>`). Do not stop the batch: build the other ideas.\",\n };\n}\n\n/**\n * Refused when the creative's ad is already written: building again would put the idea's\n * placeholders over it (dev, Oct 2026: a chat agent re-ran make on a re-formatted idea and lost the\n * ad it had shown). Nothing there, or a failed make's placeholders, lets the build go ahead. Pure.\n */\nexport function alreadyWritten(promptJson: unknown, slug: string): Failure | null {\n if (promptJson === null || promptJson === undefined) return null;\n try {\n if (unwrittenProblems(readAdSpec(promptJson)).length > 0) return null;\n } catch {\n // Unreadable is still someone's work: refuse rather than overwrite it.\n }\n return {\n code: \"ALREADY_MADE\",\n message: `\"${slug}\" is already made and its ad is written: building it again would replace that ad with placeholders.`,\n fix: `To change this ad, edit src/creatives/${slug}/prompt.json and run \\`baker canvas run\\` on it. For another ad of the same idea, run make again with --slug <new-slug>.`,\n };\n}\n\ntype MakeArgs = {\n slug?: string;\n adset?: string;\n reference?: string;\n platform?: string;\n spec?: string;\n /** The lead ad of the series this idea is made in (`--series`). */\n series?: string;\n fromIdea?: boolean;\n};\n\nconst flag = (value: unknown): string | undefined => (typeof value === \"string\" && value ? value : undefined);\n\n/** The idea, checked: refused when unreadable, missing, or with a problem `creatives ideas` names. */\nasync function loadIdea(root: string, ideaId: string) {\n const { ideas, unreadable } = await readIdeas(root);\n const bad = unreadable.find((u) => u.id === ideaId);\n if (bad) {\n fail({\n code: \"INVALID_IDEA\",\n message: bad.problems.join(\"; \"),\n fix: `Fix ${IDEAS_DIR}/${ideaId}.md, then run make again.`,\n });\n }\n const idea = ideas.find((i) => i.id === ideaId);\n if (!idea) {\n fail({\n code: \"NOT_FOUND\",\n message: `No idea \"${ideaId}\" in ${IDEAS_DIR}/.`,\n fix: `Ideas on file: ${ideas.map((i) => i.id).join(\", \") || \"none\"}. Write it there first.`,\n });\n }\n const [insights, knowledge, personas, creatives] = await Promise.all([\n readInsights(root),\n readKnowledgeCorpus(root),\n readPersonaIds(root),\n readCreativeRecords(root),\n ]);\n const check = checkIdeas({ ideas, insights, knowledge, personas, ...coverageOf(ideas, creatives) }).find(\n (c) => c.id === idea.id,\n );\n if (check && check.problems.length > 0) {\n fail({\n code: \"IDEA_HAS_PROBLEMS\",\n message: check.problems.join(\"; \"),\n fix: \"Fix the idea file and run `baker creatives ideas` again.\",\n });\n }\n return { idea, check };\n}\n\ntype Scaffolded = {\n scaffold: Record<string, unknown>;\n reference: Picked | null;\n fromIdea?: string;\n /** Why the kept reference's concept could not be seeded: the render does not see it yet. */\n conceptUnseeded?: string;\n};\n\n/** Scaffold the creative: a video from its beats, a static from a reference that fits. */\nasync function scaffoldIdea(\n root: string,\n idea: Idea,\n args: MakeArgs,\n slug: string,\n temperature: ViewerTemperature,\n): Promise<Scaffolded> {\n const viewerFlags = args.adset ? [\"--target-adset\", args.adset] : [\"--viewer-temperature\", temperature];\n if (isVideoIdea(idea)) {\n if (!args.spec) {\n fail({\n code: \"SPEC_REQUIRED\",\n message: `\"${idea.id}\" is a video idea (${idea.format}): it is built from its beats.`,\n fix: `Write the beats spec (one spoken line plus one shot each; references/video-flow.md), message first, then: baker creatives make ${idea.id} --spec <file>.`,\n });\n }\n return {\n scaffold: await baker([\"canvas\", \"scaffold-ad\", \"--spec\", args.spec, \"--slug\", slug, ...viewerFlags]),\n reference: null,\n };\n }\n return await scaffoldStatic(root, idea, args, slug, temperature, viewerFlags);\n}\n\n/** A static from a reference that fits, found within `REFERENCE_MS`; else from the idea itself. */\nasync function scaffoldStatic(\n root: string,\n idea: Idea,\n args: MakeArgs,\n slug: string,\n temperature: ViewerTemperature,\n viewerFlags: string[],\n): Promise<Scaffolded> {\n const onReference = (c: ReferenceCandidate, signal?: AbortSignal) =>\n baker(\n [\n \"canvas\",\n \"scaffold-static-ad\",\n \"--source-ad-id\",\n c.adId,\n \"--source-platform\",\n c.platform,\n ...(c.advertiserId ? [\"--source-advertiser-id\", c.advertiserId] : []),\n \"--slug\",\n slug,\n \"--title\",\n idea.message.slice(0, 120),\n ...viewerFlags,\n ],\n signal,\n );\n // Built on the best-ranked reference while the fits are asked, only into a new creative: a build\n // that is not kept is then removed whole, leaving nothing of that reference on the creative.\n const dir = path.join(root, \"src\", \"creatives\", slug);\n const fresh = !(await stat(dir).catch(() => null));\n // A reference found by make has its time: past it, the ad starts from the idea (`REFERENCE_MS`).\n const budget = AbortSignal.timeout(REFERENCE_MS);\n const reference = args.reference\n ? { adId: args.reference, platform: asPlatform(args.platform), why: \"chosen by hand\", tried: 0 }\n : args.fromIdea\n ? { code: \"FROM_IDEA\", message: \"Asked to start from the idea.\" }\n : await pickReference(\n root,\n referenceSearchesFor(idea, temperature).map(buildSearchBody),\n undefined,\n fresh ? (c, signal) => onReference(c, AbortSignal.any([signal, budget])) : undefined,\n budget,\n );\n if (\"discarded\" in reference && reference.discarded) {\n await reference.discarded.catch(() => undefined);\n await rm(dir, { recursive: true, force: true });\n }\n if (\"code\" in reference) {\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: reference.message };\n }\n const prepared = \"prepared\" in reference ? await reference.prepared?.catch(() => null) : null;\n if (prepared?.ok !== true && budget.aborted && !args.reference) {\n await rm(dir, { recursive: true, force: true });\n const slow = slowReference().message;\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: slow };\n }\n const scaffold = prepared?.ok === true ? prepared : await onReference(reference);\n const unbuilt = unbuiltReference(scaffold, { adId: reference.adId, byHand: Boolean(args.reference) });\n if (!unbuilt) return await withKeptConcept(dir, slug, scaffold, reference);\n // What the failed build left of a new creative goes, so the idea's build starts clean.\n if (fresh) await rm(dir, { recursive: true, force: true });\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: unbuilt };\n}\n\n/**\n * Why the ad starts from the idea when the proven ad make picked could not be built on (its picture\n * not described, dev Oct 2026: twice running for one ad), else null: a build that went through, or a\n * reference chosen by hand, whose failure is the agent's to see. Pure.\n */\nexport function unbuiltReference(\n scaffold: Record<string, unknown>,\n reference: { adId: string; byHand: boolean },\n): string | null {\n if (scaffold.ok === true || reference.byHand) return null;\n return `The proven ad ${reference.adId} could not be read to build on.`;\n}\n\n/** The creative built on a reference, its fit's concept seeded, else why it could not be. */\nasync function withKeptConcept(\n dir: string,\n slug: string,\n scaffold: Record<string, unknown>,\n reference: Picked,\n): Promise<Scaffolded> {\n if (scaffold.ok !== true || !reference.fit) return { scaffold, reference };\n const unseeded = await seedConcept(dir, slug, conceptFromFit(reference.fit, reference.adId));\n return { scaffold, reference, ...(unseeded ? { conceptUnseeded: unseeded } : {}) };\n}\n\n/**\n * Seed the kept reference's concept into a creative built before its fit answered, and compile the\n * canvas from it: the render then sees the reference at the level that won (`concept.carry`).\n * Dev, Oct 2026: every build started on the best-ranked reference had no concept. Why it could not\n * be seeded, else null.\n */\nexport async function seedConcept(dir: string, slug: string, seeded: Record<string, unknown>): Promise<string | null> {\n const promptPath = path.join(dir, \"prompt.json\");\n const canvasPath = path.join(dir, `${slug}.canvas.json`);\n let prompt: string;\n try {\n prompt = withFitConcept(await readFile(promptPath, \"utf8\"), seeded);\n await writeFile(promptPath, prompt, \"utf8\");\n } catch (e) {\n return `prompt.json could not take the proven ad's concept (${e instanceof Error ? e.message : String(e)})`;\n }\n try {\n const canvas: unknown = JSON.parse(await readFile(canvasPath, \"utf8\"));\n if (projectStaticBriefs(canvas, JSON.parse(prompt)) > 0) {\n await writeFile(canvasPath, `${JSON.stringify(canvas, null, 2)}\\n`, \"utf8\");\n }\n } catch {\n // prompt.json holds the concept: the run compiles the canvas from it.\n }\n return null;\n}\n\n/** The static started from the idea's own spec: no reference picture, nothing described or billed. */\nasync function scaffoldFromIdea(idea: Idea, slug: string, viewerFlags: string[]): Promise<Record<string, unknown>> {\n const dir = await mkdtemp(path.join(tmpdir(), \"idea-spec-\"));\n const specPath = path.join(dir, \"prompt.json\");\n await writeFile(specPath, JSON.stringify(ideaSpec(idea, idea.who.replace(/[-_]/g, \" \")), null, 2), \"utf8\");\n try {\n return await baker([\n \"canvas\",\n \"scaffold-static-ad\",\n \"--spec\",\n specPath,\n \"--slug\",\n slug,\n \"--title\",\n idea.message.slice(0, 120),\n ...viewerFlags,\n ]);\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\n/** Record the idea on the creative and its message as the ad's one message; mark the idea built. */\nasync function recordIdea(\n root: string,\n slug: string,\n idea: Idea,\n evidence: EvidenceLevel | \"explore\",\n): Promise<{ dir: string; unsourcedCopy: string[] }> {\n const dir = path.join(root, \"src\", \"creatives\", slug);\n const definitionPath = path.join(dir, \"_definition.md\");\n const definition = await readFile(definitionPath, \"utf8\").catch(() => null);\n if (definition !== null) {\n await writeFile(definitionPath, setDefinitionFields(definition, { ...definitionFieldsOf(idea, evidence) }), \"utf8\");\n }\n const promptPath = path.join(dir, \"prompt.json\");\n const prompt = isVideoIdea(idea) ? null : await readFile(promptPath, \"utf8\").catch(() => null);\n // A spec that does not parse is the scaffold's to report; the message is set by hand then.\n if (prompt !== null) await writeFile(promptPath, setSpecMessage(prompt, idea.message), \"utf8\").catch(() => undefined);\n const unsourcedCopy = prompt === null ? [] : await draftedClaims(root, prompt);\n if (idea.status === \"idea\") {\n const ideaPath = path.join(root, IDEAS_DIR, `${idea.id}.md`);\n await writeFile(ideaPath, setDefinitionFields(await readFile(ideaPath, \"utf8\"), { status: \"built\" }), \"utf8\");\n }\n // The dashboard learns the idea now, not at Publish (where most verdicts are given already).\n await baker([\"canvas\", \"sync-definition\", dir]);\n return { dir, unsourcedCopy };\n}\n\n/** The drafted lines claiming what neither the Knowledge nor our own customers said. */\nasync function draftedClaims(root: string, prompt: string): Promise<string[]> {\n const [knowledge, insights] = await Promise.all([readKnowledgeCorpus(root), readInsights(root)]);\n const own = insights.filter(sourcesClaims).map((i) => i.quote);\n try {\n return unsourcedCopyLines(prompt, `${knowledge}\\n${own.join(\"\\n\")}`);\n } catch {\n return [];\n }\n}\n\nfunction makeArgsOf(args: Record<string, unknown>): MakeArgs {\n const opts: MakeArgs = {};\n for (const key of [\"slug\", \"adset\", \"reference\", \"platform\", \"spec\", \"series\"] as const) {\n const value = flag(args[key]);\n if (value) opts[key] = value;\n }\n if (args[\"from-idea\"] === true) opts.fromIdea = true;\n return opts;\n}\n\nfunction scaffoldFailure(scaffold: Record<string, unknown>): Failure {\n const error = (scaffold.error ?? {}) as Partial<Failure>;\n return {\n code: error.code ?? \"SCAFFOLD_FAILED\",\n message: error.message ?? \"The creative could not be scaffolded.\",\n ...(error.fix ? { fix: error.fix } : {}),\n };\n}\n\ntype Made = {\n slug: string;\n idea: Idea;\n check: IdeaCheck | undefined;\n reference: Picked | null;\n /** Why the static starts from the idea itself: no proven ad fits (or `--from-idea`). */\n fromIdea?: string;\n conceptUnseeded?: string;\n viewer: { adset: string } | { temperature: ViewerTemperature };\n canvasPath: string;\n scaffoldHints: string[];\n /** Drafted copy lines claiming a figure the company never wrote (often the reference's own promise). */\n unsourcedCopy: string[];\n};\n\nconst CARRY_WORDS: Record<ConceptCarry, string> = {\n whole_ad: \"the whole ad (its disguise, layout and hook)\",\n layout: \"its layout\",\n hook: \"its hook\",\n angle: \"its angle\",\n};\n\n/** What the agent tells the person about the proven ad a creative is built on. Pure. */\nfunction builtOnHint(reference: Picked): string {\n const tell = \"Tell the person which proven ad this builds on\";\n const ours = \"the words, brand, people and claims stay ours.\";\n if (!reference.fit) {\n // Chosen by hand: no fit read what made it win, so nothing is said of it.\n return `Built on proven ad ${reference.adId}, the one chosen for it; no check read what made it win. The canvas shows that ad as \\`original\\`. ${tell}; ${ours}`;\n }\n const carried = CARRY_WORDS[reference.fit.carry ?? \"whole_ad\"];\n const why = reference.fit.carry_why ? ` (${reference.fit.carry_why})` : \"\";\n const won = reference.why ? ` It won on: ${reference.why}.` : \"\";\n return `Built on proven ad ${reference.adId}: it carries ${carried}${why}.${won} The canvas shows that ad as \\`original\\`. ${tell} and what it takes from it; ${ours}`;\n}\n\n/** The fix for a concept make could not seed: the fit already made, written in by hand. Pure. */\nconst unseededHint = (reference: Picked, slug: string, why: string) =>\n `${why}, so the render does not see proven ad ${reference.adId} yet. \\`baker winning-ads fit ${reference.adId} --platform ${reference.platform} --full\\` prints the check already made (free): write its \\`read\\` into src/creatives/${slug}/prompt.json as \\`concept\\`, with \\`reference_ad_id: \"${reference.adId}\"\\`.`;\n\n/** What `make` prints: the creative, the idea it carries, and the two steps left to the agent. Pure. */\nexport function makeEnvelope(made: Made) {\n const quote = made.check?.quote;\n return {\n ok: true as const,\n data: {\n creative: made.slug,\n idea: made.idea.id,\n message: made.idea.message,\n evidence: made.check?.evidence ?? \"explore\",\n ...(quote ? { customer_quote: quote } : {}),\n ...(made.fromIdea ? { built_from: \"idea\" } : {}),\n ...(made.reference\n ? {\n reference: {\n ad_id: made.reference.adId,\n platform: made.reference.platform,\n why_it_wins: made.reference.why,\n ...(made.reference.fit?.carry ? { carry: made.reference.fit.carry } : {}),\n },\n }\n : {}),\n viewer: made.viewer,\n canvas_path: made.canvasPath,\n },\n hints: [\n ...(made.reference ? [builtOnHint(made.reference)] : []),\n ...(made.reference && made.conceptUnseeded\n ? [unseededHint(made.reference, made.slug, made.conceptUnseeded)]\n : []),\n ...(made.fromIdea\n ? [\n `${made.fromIdea} So this ad starts from the idea: write the scene and every line of copy in src/creatives/${made.slug}/prompt.json (a placeholder refuses to run). Tell the person this ad is not built on a proven ad, and why, in plain words.`,\n ]\n : []),\n ...(made.unsourcedCopy.length > 0\n ? [\n `Rewrite before running: ${made.unsourcedCopy.map((l) => JSON.stringify(l)).join(\", \")} claim a figure nothing the company wrote holds (the reference's promise, not ours).`,\n ]\n : []),\n `Write the copy lines and the scene in src/creatives/${made.slug}/prompt.json${made.reference ? \": the drafted lines are the reference's, so keep one only if the Knowledge says it (badges, ratings and guarantees too)\" : \"\"}. Say the message in the customer's words${quote ? ` (\"${quote.slice(0, 80)}\")` : \"\"}; keep \\`message\\` as it is.`,\n SPEC_SHAPES_HINT,\n `Then: baker canvas run ${made.canvasPath} (it validates and asks the viewer itself: nothing to run before it).`,\n // The scaffold's own next steps name a separate validate; the run does it (dev, Oct 2026: five validates before one run).\n ...made.scaffoldHints\n .filter((h) => !/canvas (?:validate|viewer-check)/.test(h))\n // make checked the reference and seeded its concept: the scaffold ran before the fit answered.\n .filter((h) => !(made.reference?.fit && h.startsWith(NO_FIT_HINT)))\n .slice(0, 4),\n ],\n };\n}\n\n/** `--series <lead>`: the idea made as another ad of the lead's series, printed or refused. */\nasync function makeInSeries(\n root: string,\n idea: Idea,\n slug: string,\n lead: string,\n evidence: EvidenceLevel | \"explore\",\n): Promise<void> {\n if (isVideoIdea(idea)) {\n fail({\n code: \"SERIES_STATIC_ONLY\",\n message: `\"${idea.id}\" is a video idea: a series repeats one static ad with other words.`,\n fix: `Make it on its own: baker creatives make ${idea.id} --spec <beats file>.`,\n });\n }\n const made = await makeSeriesAd(root, idea, slug, lead, evidence, {\n sync: (dir) => baker([\"canvas\", \"sync-definition\", dir, \"--title\"]),\n chatId: optionalChatId() ?? null,\n });\n if (\"code\" in made) fail(made);\n writeJson(seriesMadeEnvelope({ ...made, canvasPath: path.relative(root, made.canvasPath) }, idea));\n}\n\nexport const makeCommand = defineCommand({\n meta: { name: \"make\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const opts = makeArgsOf(args);\n const { idea, check } = await loadIdea(root, String(args.idea));\n const slug = opts.slug ?? idea.id;\n const written = await readFile(path.join(root, \"src\", \"creatives\", slug, \"prompt.json\"), \"utf8\").then(\n (text): unknown => {\n try {\n return JSON.parse(text);\n } catch {\n return {};\n }\n },\n (err: NodeJS.ErrnoException) => (err.code === \"ENOENT\" ? null : {}),\n );\n const refused = alreadyWritten(written, slug);\n if (refused) fail(refused);\n if (opts.series) {\n await makeInSeries(root, idea, slug, opts.series, check?.evidence ?? \"explore\");\n return;\n }\n const temperature = await viewerTemperature(root, opts.adset, idea.awareness);\n const { scaffold, reference, fromIdea, conceptUnseeded } = await scaffoldIdea(root, idea, opts, slug, temperature);\n if (scaffold.ok !== true) fail(scaffoldFailure(scaffold));\n const { dir, unsourcedCopy } = await recordIdea(root, slug, idea, check?.evidence ?? \"explore\");\n writeJson(\n makeEnvelope({\n slug,\n idea,\n check,\n reference,\n ...(fromIdea ? { fromIdea } : {}),\n ...(conceptUnseeded ? { conceptUnseeded } : {}),\n viewer: opts.adset ? { adset: opts.adset } : { temperature },\n canvasPath: path.relative(root, String(scaffold.canvas_path ?? path.join(dir, `${slug}.canvas.json`))),\n scaffoldHints: Array.isArray(scaffold.hints) ? (scaffold.hints as string[]) : [],\n unsourcedCopy,\n }),\n );\n },\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/creatives/make.ts"],"sourcesContent":["/**\n * `baker creatives make <idea>`: one idea becomes one creative. For a static it finds a reference\n * for the job itself (the idea's container, made for our viewer), keeps the first whose\n * load-bearing parts we can supply, scaffolds from it, and records the idea on the creative and\n * its message in the ad spec. The agent then writes only the copy lines and the scene, and runs it.\n */\n\nimport { mkdtemp, readFile, rm, stat, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { ScopedWinnersSearchResponse } from \"@baker/api/ad-library\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport type { ConceptCarry } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { readAdSpec, SPEC_SHAPES_HINT, unwrittenProblems } from \"../../engine/scaffold/static-ad-spec.ts\";\nimport { projectStaticBriefs } from \"../../engine/scaffold/static-render-briefs.ts\";\nimport { optionalChatId } from \"../../env.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport { type ViewerTemperature, viewerFromKnowledge } from \"../../viewer-profile.ts\";\nimport { runBaker as baker } from \"../baker-child.ts\";\nimport { findWorkspaceRoot } from \"../canvas/normalize-paths.ts\";\nimport { liveViewerLookups } from \"../canvas/viewer-check.ts\";\nimport { conceptFromFit, type FitAnswer, type FitFailure, fitReference, NO_FIT_HINT } from \"../winning-ads/fit.ts\";\nimport { buildSearchBody } from \"../winning-ads/search.ts\";\nimport { checkIdeas, type EvidenceLevel, type Idea, type IdeaCheck, sourcesClaims } from \"./ideas-model.ts\";\nimport {\n coverageOf,\n IDEAS_DIR,\n readCreativeRecords,\n readIdeas,\n readInsights,\n readKnowledgeCorpus,\n readPersonaIds,\n} from \"./ideas-workspace.ts\";\nimport {\n definitionFieldsOf,\n fitsIdea,\n ideaSpec,\n isVideoIdea,\n missingElements,\n pooledCandidates,\n referenceSearchesFor,\n setDefinitionFields,\n setSpecMessage,\n unsourcedCopyLines,\n withFitConcept,\n} from \"./make-model.ts\";\nimport { makeSeriesAd, seriesMadeEnvelope } from \"./make-series.ts\";\n\n/** Candidates whose fit may be asked (a few cents each, cached per workspace). */\nconst FITS_TRIED = 6;\n/**\n * Fits asked at a time: the best-ranked candidate is usually kept, so the rest wait for a slot that\n * one not fitting frees (six at once billed six fits where one was kept).\n */\nconst FITS_AT_ONCE = 3;\nconst SEARCH_TIMEOUT_MS = 120_000;\n/**\n * How long make looks for, checks and describes a reference before it starts the ad from the idea.\n * Every ad starts from a proven one when it can: dev, Oct 2026, a search took 3-30 s, a fit 20-50 s\n * and the describe ~35 s beside them, so the 50 s this once was sent good references to the idea.\n */\nconst REFERENCE_MS = 150_000;\n\nconst DESCRIPTION = `Build one idea from src/creatives/_ideas/ into a creative. For a static it builds on a proven winning ad in the idea's container: it searches on the idea's message for our viewer, then the container's strongest winners from any category, checks which fit us, scaffolds the creative on the best-ranked one, records the idea on it and sets the ad's message. The fit says what made that ad win, so what ours carries of it (\\`reference.carry\\`: whole_ad, layout, hook or angle); its first hint names the ad: tell the person. When no proven ad fits, it starts the ad from the idea itself and says why (never a dead end, never retry with another format). You then write the copy lines and the scene in prompt.json and run it. Takes up to about two and a half minutes: run it in the foreground, once per idea.\n\nStart here, with an idea from \\`baker creatives ideas\\` build_next:\n baker creatives make phone-payroll # static: reference found and checked for you\n baker creatives make phone-payroll --adset 120210000000 # written for that ad set's viewer\n baker creatives make phone-payroll --reference 1310524137919413 # your own reference instead\n baker creatives make founder-story --spec beats.json # a video idea: from its beats spec\n baker creatives make phone-payroll --slug phone-payroll-h2 # another hook of the same idea\n baker creatives make tiktok-speed --series zernio-live # another message in the style of a ready ad\nThen: edit src/creatives/<slug>/prompt.json (copy + scene; the message is set), and \\`baker canvas run src/creatives/<slug>/<slug>.canvas.json\\`.`;\n\nconst ARGS = {\n idea: { type: \"positional\", required: true, description: \"The idea id (src/creatives/_ideas/<idea>.md)\" },\n slug: { type: \"string\", required: false, description: \"Creative slug (default: the idea id)\" },\n adset: { type: \"string\", required: false, description: \"Meta ad set the ad is for: its viewer and placements\" },\n reference: {\n type: \"string\",\n required: false,\n description: \"A library ad id to build on instead of searching (statics)\",\n },\n platform: {\n type: \"string\",\n required: false,\n description: \"Library platform of --reference: meta|linkedin|tiktok (default meta)\",\n },\n spec: {\n type: \"string\",\n required: false,\n description: \"Video ideas: the beats spec for `baker canvas scaffold-ad --spec`\",\n },\n series: {\n type: \"string\",\n required: false,\n description:\n \"Statics: make this idea as another ad of the series led by this creative (its slug): the same design, only its words changed. No reference is searched; seconds. The lead must have a ready version. Then write its words and run the whole series: baker canvas run --series <lead>\",\n },\n \"from-idea\": {\n type: \"boolean\",\n required: false,\n default: false,\n description:\n \"Statics: skip the reference search and start from the idea (what make does by itself when no proven ad fits)\",\n },\n} as const;\n\nregisterSchema({ command: \"creatives.make\", description: DESCRIPTION, args: ARGS });\n\ntype Failure = { code: string; message: string; fix?: string };\n\nfunction fail(error: Failure): never {\n writeJson({ ok: false, error });\n process.exit(1);\n}\n\nasync function viewerTemperature(\n root: string,\n adSet: string | undefined,\n awareness: string,\n): Promise<ViewerTemperature> {\n if (adSet) {\n const read = await liveViewerLookups(root)\n .adSetViewer(adSet)\n .catch(() => null);\n if (read) return read.temperature;\n }\n return viewerFromKnowledge({ personas: [], awareness: awareness as never }).temperature;\n}\n\ntype Picked = {\n adId: string;\n platform: \"meta\" | \"linkedin\" | \"tiktok\";\n advertiserId?: string;\n why: string;\n tried: number;\n /** The fit that kept it, with what made it win (`carry`); none for a reference chosen by hand. */\n fit?: FitAnswer;\n};\n\nconst asPlatform = (value: unknown): Picked[\"platform\"] =>\n value === \"linkedin\" || value === \"tiktok\" ? value : \"meta\";\n\ntype Candidate = { ad_id?: string | null; platform?: unknown; advertiser_id?: string | null };\ntype FitResult = Awaited<ReturnType<typeof fitReference>>;\n\n/** How references are found and checked; the live library and fit by default, injected in tests. */\nexport type ReferenceDeps = {\n search: (body: Record<string, unknown>) => Promise<Candidate[]>;\n fit: (platform: Picked[\"platform\"], adId: string) => Promise<FitResult>;\n};\n\nfunction liveReferenceDeps(root: string): ReferenceDeps {\n return {\n search: async (body) =>\n (\n await apiPost<ScopedWinnersSearchResponse>(\"/api/ad-library/winners/search\", body, {\n timeoutMs: SEARCH_TIMEOUT_MS,\n }).catch(() => null)\n )?.results ?? [],\n fit: (platform, adId) => fitReference(root, platform, adId),\n };\n}\n\n/** The candidates of every search, the better search's first; every search runs at once. */\nasync function findCandidates(searches: Record<string, unknown>[], deps: ReferenceDeps): Promise<Candidate[]> {\n const results = await Promise.all(searches.map((search) => deps.search(search).catch(() => [] as Candidate[])));\n return pooledCandidates(results, FITS_TRIED);\n}\n\n/**\n * Search the idea's container and keep the best-ranked reference whose load-bearing parts we can\n * supply. Three fits run at once (a few cents each): one after another, one make took 109 s.\n */\n/**\n * What building on a reference started before its fit was known left behind: `prepared` when the\n * reference kept is the one built on, `discarded` (to wait for before building over it) when not.\n */\ntype Speculated<T> = { prepared?: Promise<T>; discarded?: Promise<T> };\n\n/** The reference a build starts on, as `prepare` is handed it before its fit is known. */\nexport type ReferenceCandidate = Pick<Picked, \"adId\" | \"platform\" | \"advertiserId\">;\n\nconst candidateOf = (c: Candidate): ReferenceCandidate => ({\n adId: String(c.ad_id),\n platform: asPlatform(c.platform),\n ...(c.advertiser_id ? { advertiserId: c.advertiser_id } : {}),\n});\n\nexport async function pickReference<T = never>(\n root: string,\n searches: Record<string, unknown>[],\n deps: ReferenceDeps = liveReferenceDeps(root),\n /**\n * Building on the best-ranked reference, started while the fits are asked: it is usually the one\n * kept, and its scaffold (a 35 s describe) then no longer waits ~25 s for them (dev, Oct 2026).\n */\n prepare?: (candidate: ReferenceCandidate, signal: AbortSignal) => Promise<T>,\n /** Aborted when the time for a reference is out: no reference is kept, and the build started is stopped. */\n within?: AbortSignal,\n): Promise<(Picked & Speculated<T>) | (Failure & Speculated<T>)> {\n const out = whenAborted(within);\n const found = await Promise.race([findCandidates(searches, deps), out]);\n if (found === \"out\") return slowReference();\n const candidates = found.slice(0, FITS_TRIED);\n const first = candidates[0];\n // A build on a reference that is not kept is stopped, not waited for (dev: 50 s for nothing).\n const stop = new AbortController();\n const building = first && prepare ? prepare(candidateOf(first), stop.signal) : undefined;\n // A failed speculative build is never this pick's failure: the kept reference is built again.\n void building?.catch(() => undefined);\n // Three fits are asked at once, and one that does not fit asks the next; the best-ranked one that\n // fits is kept as soon as it and every better-ranked one have answered, never waiting on slower\n // fits below it. Once the pick is made, no further fit is asked.\n let settled = false;\n const asked: Promise<FitResult>[] = [];\n const askNext = () => {\n const index = asked.length;\n const candidate = candidates[index];\n if (settled || !candidate) return;\n asked.push(\n askFit(deps, candidate).then((fit) => {\n if (!(fit.ok && fitsIdea(fit.fit))) askNext();\n return fit;\n }),\n );\n };\n for (let slot = 0; slot < FITS_AT_ONCE; slot++) askNext();\n const kept = await Promise.race([firstFitting(candidates, asked), out]);\n settled = true;\n if (kept === \"out\") {\n stop.abort();\n return { ...slowReference(), ...(building ? { discarded: building } : {}) };\n }\n if (kept.index !== 0) stop.abort();\n const speculated = building ? (kept.index === 0 ? { prepared: building } : { discarded: building }) : {};\n return { ...kept.picked, ...speculated };\n}\n\n/**\n * One candidate's fit, a throw read as a fit not made: it is handled when asked, since the fits\n * below the one awaited can fail while it is awaited.\n */\nconst askFit = (deps: ReferenceDeps, c: Candidate): Promise<FitResult> =>\n Promise.resolve()\n .then(() => deps.fit(asPlatform(c.platform), String(c.ad_id)))\n .catch((e): FitResult => ({ ok: false, error: { code: \"UNAVAILABLE\", message: String(e), fix: \"\" } }));\n\n/** Resolves \"out\" once `signal` aborts (never without one). */\nconst whenAborted = (signal: AbortSignal | undefined) =>\n new Promise<\"out\">((resolve) => {\n if (signal?.aborted) resolve(\"out\");\n signal?.addEventListener(\"abort\", () => resolve(\"out\"), { once: true });\n });\n\n/** The best-ranked candidate whose fit keeps it, with its rank; else why none was kept (index -1). */\nasync function firstFitting(\n candidates: readonly Candidate[],\n fits: readonly Promise<FitResult>[],\n): Promise<{ picked: Picked | Failure; index: number }> {\n let unchecked: FitFailure | null = null;\n let checked = 0;\n const lacking: string[] = [];\n for (const [index, candidate] of candidates.entries()) {\n const fit = await fits[index];\n if (!fit) continue;\n if (!fit.ok) unchecked = fit.error;\n else checked += 1;\n if (fit.ok && !fitsIdea(fit.fit)) lacking.push(...missingElements(fit.fit));\n if (!(fit.ok && fitsIdea(fit.fit))) continue;\n const layers = fit.fit.why_it_wins;\n return {\n picked: {\n ...candidateOf(candidate),\n why: [layers.disguise, layers.trigger, layers.logic].filter(Boolean).join(\"; \"),\n tried: index + 1,\n fit: fit.fit,\n },\n index,\n };\n }\n return { picked: noReference(candidates.length, checked, unchecked, lacking), index: -1 };\n}\n\n/** What the rejected references won on that we lack, each once, at most three. Pure. */\nconst lackingText = (lacking: readonly string[]) => {\n const named = [...new Set(lacking.map((l) => l.trim()).filter(Boolean))].slice(0, 3);\n return named.length > 0 ? ` (they won on ${named.join(\", \")})` : \"\";\n};\n\nconst slowReference = (): Failure => ({\n code: \"REFERENCE_SLOW\",\n message: `Finding and checking a proven ad took longer than ${REFERENCE_MS / 1000} s.`,\n fix: \"Nothing to do: the ad starts from the idea. To build on a proven ad anyway, run make again (the checks already made are kept) or pass --reference <adId>.\",\n});\n\n/**\n * Why no reference was kept: none found, none fits (naming what the ones checked won on that we\n * lack), or the fit could not be checked. Pure.\n */\nexport function noReference(\n found: number,\n checked: number,\n unchecked: { message: string } | null,\n lacking: readonly string[] = [],\n): Failure {\n if (found > 0 && checked === 0 && unchecked) {\n return {\n code: \"FIT_UNAVAILABLE\",\n message: `Could not check whether the references fit (${unchecked.message})`,\n fix: \"Run make again in a moment. To build now, pass --reference <adId> with one you looked at yourself (`baker winning-ads search`).\",\n };\n }\n return {\n code: \"NO_REFERENCE_FITS\",\n message:\n found === 0\n ? \"The library has no proven ad in this idea's format.\"\n : `None of the ${found} proven ads checked in this format wins on something this company has${lackingText(lacking)}.`,\n fix: \"Nothing to do to go on: the ad starts from the idea. To build on a proven ad instead, pass --reference <adId> for one you looked at (`baker winning-ads search --format static --format-pattern <the idea's format>`). Do not stop the batch: build the other ideas.\",\n };\n}\n\n/**\n * Refused when the creative's ad is already written: building again would put the idea's\n * placeholders over it (dev, Oct 2026: a chat agent re-ran make on a re-formatted idea and lost the\n * ad it had shown). Nothing there, or a failed make's placeholders, lets the build go ahead. Pure.\n */\nexport function alreadyWritten(promptJson: unknown, slug: string): Failure | null {\n if (promptJson === null || promptJson === undefined) return null;\n try {\n if (unwrittenProblems(readAdSpec(promptJson)).length > 0) return null;\n } catch {\n // Unreadable is still someone's work: refuse rather than overwrite it.\n }\n return {\n code: \"ALREADY_MADE\",\n message: `\"${slug}\" is already made and its ad is written: building it again would replace that ad with placeholders.`,\n fix: `To change this ad, edit src/creatives/${slug}/prompt.json and run \\`baker canvas run\\` on it. For another ad of the same idea, run make again with --slug <new-slug>.`,\n };\n}\n\ntype MakeArgs = {\n slug?: string;\n adset?: string;\n reference?: string;\n platform?: string;\n spec?: string;\n /** The lead ad of the series this idea is made in (`--series`). */\n series?: string;\n fromIdea?: boolean;\n};\n\nconst flag = (value: unknown): string | undefined => (typeof value === \"string\" && value ? value : undefined);\n\n/** The idea, checked: refused when unreadable, missing, or with a problem `creatives ideas` names. */\nasync function loadIdea(root: string, ideaId: string) {\n const { ideas, unreadable } = await readIdeas(root);\n const bad = unreadable.find((u) => u.id === ideaId);\n if (bad) {\n fail({\n code: \"INVALID_IDEA\",\n message: bad.problems.join(\"; \"),\n fix: `Fix ${IDEAS_DIR}/${ideaId}.md, then run make again.`,\n });\n }\n const idea = ideas.find((i) => i.id === ideaId);\n if (!idea) {\n fail({\n code: \"NOT_FOUND\",\n message: `No idea \"${ideaId}\" in ${IDEAS_DIR}/.`,\n fix: `Ideas on file: ${ideas.map((i) => i.id).join(\", \") || \"none\"}. Write it there first.`,\n });\n }\n const [insights, knowledge, personas, creatives] = await Promise.all([\n readInsights(root),\n readKnowledgeCorpus(root),\n readPersonaIds(root),\n readCreativeRecords(root),\n ]);\n const check = checkIdeas({ ideas, insights, knowledge, personas, ...coverageOf(ideas, creatives) }).find(\n (c) => c.id === idea.id,\n );\n if (check && check.problems.length > 0) {\n fail({\n code: \"IDEA_HAS_PROBLEMS\",\n message: check.problems.join(\"; \"),\n fix: \"Fix the idea file and run `baker creatives ideas` again.\",\n });\n }\n return { idea, check };\n}\n\ntype Scaffolded = {\n scaffold: Record<string, unknown>;\n reference: Picked | null;\n fromIdea?: string;\n /** Why the kept reference's concept could not be seeded: the render does not see it yet. */\n conceptUnseeded?: string;\n};\n\n/** Scaffold the creative: a video from its beats, a static from a reference that fits. */\nasync function scaffoldIdea(\n root: string,\n idea: Idea,\n args: MakeArgs,\n slug: string,\n temperature: ViewerTemperature,\n): Promise<Scaffolded> {\n const viewerFlags = args.adset ? [\"--target-adset\", args.adset] : [\"--viewer-temperature\", temperature];\n if (isVideoIdea(idea)) {\n if (!args.spec) {\n fail({\n code: \"SPEC_REQUIRED\",\n message: `\"${idea.id}\" is a video idea (${idea.format}): it is built from its beats.`,\n fix: `Write the beats spec (one spoken line plus one shot each; references/video-flow.md), message first, then: baker creatives make ${idea.id} --spec <file>.`,\n });\n }\n return {\n scaffold: await baker([\"canvas\", \"scaffold-ad\", \"--spec\", args.spec, \"--slug\", slug, ...viewerFlags]),\n reference: null,\n };\n }\n return await scaffoldStatic(root, idea, args, slug, temperature, viewerFlags);\n}\n\n/** A static from a reference that fits, found within `REFERENCE_MS`; else from the idea itself. */\nasync function scaffoldStatic(\n root: string,\n idea: Idea,\n args: MakeArgs,\n slug: string,\n temperature: ViewerTemperature,\n viewerFlags: string[],\n): Promise<Scaffolded> {\n const onReference = (c: ReferenceCandidate, signal?: AbortSignal) =>\n baker(\n [\n \"canvas\",\n \"scaffold-static-ad\",\n \"--source-ad-id\",\n c.adId,\n \"--source-platform\",\n c.platform,\n ...(c.advertiserId ? [\"--source-advertiser-id\", c.advertiserId] : []),\n \"--slug\",\n slug,\n \"--title\",\n idea.message.slice(0, 120),\n ...viewerFlags,\n ],\n signal,\n );\n // Built on the best-ranked reference while the fits are asked, only into a new creative: a build\n // that is not kept is then removed whole, leaving nothing of that reference on the creative.\n const dir = path.join(root, \"src\", \"creatives\", slug);\n const fresh = !(await stat(dir).catch(() => null));\n // A reference found by make has its time: past it, the ad starts from the idea (`REFERENCE_MS`).\n const budget = AbortSignal.timeout(REFERENCE_MS);\n const reference = args.reference\n ? { adId: args.reference, platform: asPlatform(args.platform), why: \"chosen by hand\", tried: 0 }\n : args.fromIdea\n ? { code: \"FROM_IDEA\", message: \"Asked to start from the idea.\" }\n : await pickReference(\n root,\n referenceSearchesFor(idea, temperature).map(buildSearchBody),\n undefined,\n fresh ? (c, signal) => onReference(c, AbortSignal.any([signal, budget])) : undefined,\n budget,\n );\n if (\"discarded\" in reference && reference.discarded) {\n await reference.discarded.catch(() => undefined);\n await rm(dir, { recursive: true, force: true });\n }\n if (\"code\" in reference) {\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: reference.message };\n }\n const prepared = \"prepared\" in reference ? await reference.prepared?.catch(() => null) : null;\n if (prepared?.ok !== true && budget.aborted && !args.reference) {\n await rm(dir, { recursive: true, force: true });\n const slow = slowReference().message;\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: slow };\n }\n const scaffold = prepared?.ok === true ? prepared : await onReference(reference);\n const unbuilt = unbuiltReference(scaffold, { adId: reference.adId, byHand: Boolean(args.reference) });\n if (!unbuilt) return await withKeptConcept(dir, slug, scaffold, reference);\n // What the failed build left of a new creative goes, so the idea's build starts clean.\n if (fresh) await rm(dir, { recursive: true, force: true });\n return { scaffold: await scaffoldFromIdea(idea, slug, viewerFlags), reference: null, fromIdea: unbuilt };\n}\n\n/**\n * Why the ad starts from the idea when the proven ad make picked could not be built on (its picture\n * not described, dev Oct 2026: twice running for one ad), else null: a build that went through, or a\n * reference chosen by hand, whose failure is the agent's to see. Pure.\n */\nexport function unbuiltReference(\n scaffold: Record<string, unknown>,\n reference: { adId: string; byHand: boolean },\n): string | null {\n if (scaffold.ok === true || reference.byHand) return null;\n return `The proven ad ${reference.adId} could not be read to build on.`;\n}\n\n/** The creative built on a reference, its fit's concept seeded, else why it could not be. */\nasync function withKeptConcept(\n dir: string,\n slug: string,\n scaffold: Record<string, unknown>,\n reference: Picked,\n): Promise<Scaffolded> {\n if (scaffold.ok !== true || !reference.fit) return { scaffold, reference };\n const unseeded = await seedConcept(dir, slug, conceptFromFit(reference.fit, reference.adId));\n return { scaffold, reference, ...(unseeded ? { conceptUnseeded: unseeded } : {}) };\n}\n\n/**\n * Seed the kept reference's concept into a creative built before its fit answered, and compile the\n * canvas from it: the render then sees the reference at the level that won (`concept.carry`).\n * Dev, Oct 2026: every build started on the best-ranked reference had no concept. Why it could not\n * be seeded, else null.\n */\nexport async function seedConcept(dir: string, slug: string, seeded: Record<string, unknown>): Promise<string | null> {\n const promptPath = path.join(dir, \"prompt.json\");\n const canvasPath = path.join(dir, `${slug}.canvas.json`);\n let prompt: string;\n try {\n prompt = withFitConcept(await readFile(promptPath, \"utf8\"), seeded);\n await writeFile(promptPath, prompt, \"utf8\");\n } catch (e) {\n return `prompt.json could not take the proven ad's concept (${e instanceof Error ? e.message : String(e)})`;\n }\n try {\n const canvas: unknown = JSON.parse(await readFile(canvasPath, \"utf8\"));\n if (projectStaticBriefs(canvas, JSON.parse(prompt)) > 0) {\n await writeFile(canvasPath, `${JSON.stringify(canvas, null, 2)}\\n`, \"utf8\");\n }\n } catch {\n // prompt.json holds the concept: the run compiles the canvas from it.\n }\n return null;\n}\n\n/** The static started from the idea's own spec: no reference picture, nothing described or billed. */\nasync function scaffoldFromIdea(idea: Idea, slug: string, viewerFlags: string[]): Promise<Record<string, unknown>> {\n const dir = await mkdtemp(path.join(tmpdir(), \"idea-spec-\"));\n const specPath = path.join(dir, \"prompt.json\");\n await writeFile(specPath, JSON.stringify(ideaSpec(idea, idea.who.replace(/[-_]/g, \" \")), null, 2), \"utf8\");\n try {\n return await baker([\n \"canvas\",\n \"scaffold-static-ad\",\n \"--spec\",\n specPath,\n \"--slug\",\n slug,\n \"--title\",\n idea.message.slice(0, 120),\n ...viewerFlags,\n ]);\n } finally {\n await rm(dir, { recursive: true, force: true });\n }\n}\n\n/** Record the idea on the creative and its message as the ad's one message; mark the idea built. */\nasync function recordIdea(\n root: string,\n slug: string,\n idea: Idea,\n evidence: EvidenceLevel | \"explore\",\n): Promise<{ dir: string; unsourcedCopy: string[] }> {\n const dir = path.join(root, \"src\", \"creatives\", slug);\n const definitionPath = path.join(dir, \"_definition.md\");\n const definition = await readFile(definitionPath, \"utf8\").catch(() => null);\n if (definition !== null) {\n await writeFile(definitionPath, setDefinitionFields(definition, { ...definitionFieldsOf(idea, evidence) }), \"utf8\");\n }\n const promptPath = path.join(dir, \"prompt.json\");\n const prompt = isVideoIdea(idea) ? null : await readFile(promptPath, \"utf8\").catch(() => null);\n // A spec that does not parse is the scaffold's to report; the message is set by hand then.\n if (prompt !== null) await writeFile(promptPath, setSpecMessage(prompt, idea.message), \"utf8\").catch(() => undefined);\n const unsourcedCopy = prompt === null ? [] : await draftedClaims(root, prompt);\n if (idea.status === \"idea\") {\n const ideaPath = path.join(root, IDEAS_DIR, `${idea.id}.md`);\n await writeFile(ideaPath, setDefinitionFields(await readFile(ideaPath, \"utf8\"), { status: \"built\" }), \"utf8\");\n }\n // The dashboard learns the idea now, not at Publish (where most verdicts are given already).\n await baker([\"canvas\", \"sync-definition\", dir]);\n return { dir, unsourcedCopy };\n}\n\n/** The drafted lines claiming what neither the Knowledge nor our own customers said. */\nasync function draftedClaims(root: string, prompt: string): Promise<string[]> {\n const [knowledge, insights] = await Promise.all([readKnowledgeCorpus(root), readInsights(root)]);\n const own = insights.filter(sourcesClaims).map((i) => i.quote);\n try {\n return unsourcedCopyLines(prompt, `${knowledge}\\n${own.join(\"\\n\")}`);\n } catch {\n return [];\n }\n}\n\nfunction makeArgsOf(args: Record<string, unknown>): MakeArgs {\n const opts: MakeArgs = {};\n for (const key of [\"slug\", \"adset\", \"reference\", \"platform\", \"spec\", \"series\"] as const) {\n const value = flag(args[key]);\n if (value) opts[key] = value;\n }\n if (args[\"from-idea\"] === true) opts.fromIdea = true;\n return opts;\n}\n\nfunction scaffoldFailure(scaffold: Record<string, unknown>): Failure {\n const error = (scaffold.error ?? {}) as Partial<Failure>;\n return {\n code: error.code ?? \"SCAFFOLD_FAILED\",\n message: error.message ?? \"The creative could not be scaffolded.\",\n ...(error.fix ? { fix: error.fix } : {}),\n };\n}\n\ntype Made = {\n slug: string;\n idea: Idea;\n check: IdeaCheck | undefined;\n reference: Picked | null;\n /** Why the static starts from the idea itself: no proven ad fits (or `--from-idea`). */\n fromIdea?: string;\n conceptUnseeded?: string;\n viewer: { adset: string } | { temperature: ViewerTemperature };\n canvasPath: string;\n scaffoldHints: string[];\n /** Drafted copy lines claiming a figure the company never wrote (often the reference's own promise). */\n unsourcedCopy: string[];\n};\n\nconst CARRY_WORDS: Record<ConceptCarry, string> = {\n whole_ad: \"the whole ad (its disguise, layout and hook)\",\n layout: \"its layout\",\n hook: \"its hook\",\n angle: \"its angle\",\n};\n\n/** What the agent tells the person about the proven ad a creative is built on. Pure. */\nfunction builtOnHint(reference: Picked): string {\n const tell = \"Tell the person which proven ad this builds on\";\n const ours = \"the words, brand, people and claims stay ours.\";\n if (!reference.fit) {\n // Chosen by hand: no fit read what made it win, so nothing is said of it.\n return `Built on proven ad ${reference.adId}, the one chosen for it; no check read what made it win. The canvas shows that ad as \\`original\\`. ${tell}; ${ours}`;\n }\n const carried = CARRY_WORDS[reference.fit.carry ?? \"whole_ad\"];\n const why = reference.fit.carry_why ? ` (${reference.fit.carry_why})` : \"\";\n const won = reference.why ? ` It won on: ${reference.why}.` : \"\";\n return `Built on proven ad ${reference.adId}: it carries ${carried}${why}.${won} The canvas shows that ad as \\`original\\`. ${tell} and what it takes from it; ${ours}`;\n}\n\n/** The fix for a concept make could not seed: the fit already made, written in by hand. Pure. */\nconst unseededHint = (reference: Picked, slug: string, why: string) =>\n `${why}, so the render does not see proven ad ${reference.adId} yet. \\`baker winning-ads fit ${reference.adId} --platform ${reference.platform} --full\\` prints the check already made (free): write its \\`read\\` into src/creatives/${slug}/prompt.json as \\`concept\\`, with \\`reference_ad_id: \"${reference.adId}\"\\`.`;\n\n/** What `make` prints: the creative, the idea it carries, and the two steps left to the agent. Pure. */\nexport function makeEnvelope(made: Made) {\n const quote = made.check?.quote;\n return {\n ok: true as const,\n data: {\n creative: made.slug,\n idea: made.idea.id,\n message: made.idea.message,\n evidence: made.check?.evidence ?? \"explore\",\n ...(quote ? { customer_quote: quote } : {}),\n ...(made.fromIdea ? { built_from: \"idea\" } : {}),\n ...(made.reference\n ? {\n reference: {\n ad_id: made.reference.adId,\n platform: made.reference.platform,\n why_it_wins: made.reference.why,\n ...(made.reference.fit?.carry ? { carry: made.reference.fit.carry } : {}),\n },\n }\n : {}),\n viewer: made.viewer,\n canvas_path: made.canvasPath,\n },\n hints: [\n ...(made.reference ? [builtOnHint(made.reference)] : []),\n ...(made.reference && made.conceptUnseeded\n ? [unseededHint(made.reference, made.slug, made.conceptUnseeded)]\n : []),\n ...(made.fromIdea\n ? [\n `${made.fromIdea} So this ad starts from the idea: write the scene and every line of copy in src/creatives/${made.slug}/prompt.json (a placeholder refuses to run). Tell the person this ad is not built on a proven ad, and why, in plain words.`,\n ]\n : []),\n ...(made.unsourcedCopy.length > 0\n ? [\n `Rewrite before running: ${made.unsourcedCopy.map((l) => JSON.stringify(l)).join(\", \")} claim a figure nothing the company wrote holds (the reference's promise, not ours).`,\n ]\n : []),\n `Write the copy lines and the scene in src/creatives/${made.slug}/prompt.json${made.reference ? \": the drafted lines are the reference's, so keep one only if the Knowledge says it (badges, ratings and guarantees too)\" : \"\"}. Say the message in the customer's words${quote ? ` (\"${quote.slice(0, 80)}\")` : \"\"}; keep \\`message\\` as it is.`,\n ...(!made.idea.format.startsWith(\"video_\")\n ? [\n \"Before rendering: read .claude/skills/creative-canvas-ads/references/creative-intent.md and static-image-flow.md. Record the applicable intent, constraints and casting in _definition.md's body; carry them into prompt.json. Follow a direct brief without inventing a winner; for a reference adaptation, state its mechanism, transfer hypothesis and what must survive. Inspect existing Avatars before creating an actor. Keep interfaces native and requested overlays separate. Preserve plausible anatomy, device proportions, scale, perspective and support; reflow text rather than distort it. Honour the requested sizes.\",\n ]\n : []),\n SPEC_SHAPES_HINT,\n `Then: baker canvas run ${made.canvasPath} (it validates and asks the viewer itself: nothing to run before it).`,\n // The scaffold's own next steps name a separate validate; the run does it (dev, Oct 2026: five validates before one run).\n ...made.scaffoldHints\n .filter((h) => !/canvas (?:validate|viewer-check)/.test(h))\n // make checked the reference and seeded its concept: the scaffold ran before the fit answered.\n .filter((h) => !(made.reference?.fit && h.startsWith(NO_FIT_HINT)))\n .slice(0, 4),\n ],\n };\n}\n\n/** `--series <lead>`: the idea made as another ad of the lead's series, printed or refused. */\nasync function makeInSeries(\n root: string,\n idea: Idea,\n slug: string,\n lead: string,\n evidence: EvidenceLevel | \"explore\",\n): Promise<void> {\n if (isVideoIdea(idea)) {\n fail({\n code: \"SERIES_STATIC_ONLY\",\n message: `\"${idea.id}\" is a video idea: a series repeats one static ad with other words.`,\n fix: `Make it on its own: baker creatives make ${idea.id} --spec <beats file>.`,\n });\n }\n const made = await makeSeriesAd(root, idea, slug, lead, evidence, {\n sync: (dir) => baker([\"canvas\", \"sync-definition\", dir, \"--title\"]),\n chatId: optionalChatId() ?? null,\n });\n if (\"code\" in made) fail(made);\n writeJson(seriesMadeEnvelope({ ...made, canvasPath: path.relative(root, made.canvasPath) }, idea));\n}\n\nexport const makeCommand = defineCommand({\n meta: { name: \"make\", description: DESCRIPTION },\n args: ARGS,\n async run({ args }) {\n const root = findWorkspaceRoot(process.cwd()) ?? process.cwd();\n const opts = makeArgsOf(args);\n const { idea, check } = await loadIdea(root, String(args.idea));\n const slug = opts.slug ?? idea.id;\n const written = await readFile(path.join(root, \"src\", \"creatives\", slug, \"prompt.json\"), \"utf8\").then(\n (text): unknown => {\n try {\n return JSON.parse(text);\n } catch {\n return {};\n }\n },\n (err: NodeJS.ErrnoException) => (err.code === \"ENOENT\" ? null : {}),\n );\n const refused = alreadyWritten(written, slug);\n if (refused) fail(refused);\n if (opts.series) {\n await makeInSeries(root, idea, slug, opts.series, check?.evidence ?? \"explore\");\n return;\n }\n const temperature = await viewerTemperature(root, opts.adset, idea.awareness);\n const { scaffold, reference, fromIdea, conceptUnseeded } = await scaffoldIdea(root, idea, opts, slug, temperature);\n if (scaffold.ok !== true) fail(scaffoldFailure(scaffold));\n const { dir, unsourcedCopy } = await recordIdea(root, slug, idea, check?.evidence ?? \"explore\");\n writeJson(\n makeEnvelope({\n slug,\n idea,\n check,\n reference,\n ...(fromIdea ? { fromIdea } : {}),\n ...(conceptUnseeded ? { conceptUnseeded } : {}),\n viewer: opts.adset ? { adset: opts.adset } : { temperature },\n canvasPath: path.relative(root, String(scaffold.canvas_path ?? path.join(dir, `${slug}.canvas.json`))),\n scaffoldHints: Array.isArray(scaffold.hints) ? (scaffold.hints as string[]) : [],\n unsourcedCopy,\n }),\n );\n },\n});\n"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  namesComeFromAccount,
6
6
  otherSlots,
7
7
  shapeFor
8
- } from "./chunk-LZSXZB2F.js";
8
+ } from "./chunk-ZWKPXWS5.js";
9
9
  import {
10
10
  collectConfigStatus,
11
11
  collectSideEffects,
@@ -14,11 +14,11 @@ import {
14
14
  requestFlowInputCall,
15
15
  sideEffectNeedsInput,
16
16
  writeFlowTree
17
- } from "./chunk-Q4JYX424.js";
17
+ } from "./chunk-3XPFBSD7.js";
18
18
  import {
19
19
  repeatedFlagValues
20
20
  } from "./chunk-ERSX3MKH.js";
21
- import "./chunk-BAUSWB7O.js";
21
+ import "./chunk-EUFCY63X.js";
22
22
  import "./chunk-GXDLWBOY.js";
23
23
  import "./chunk-TEINLN64.js";
24
24
  import "./chunk-ZJWUBJYQ.js";
@@ -401,4 +401,4 @@ export {
401
401
  mapSpecsFrom,
402
402
  specsFromFile
403
403
  };
404
- //# sourceMappingURL=map-5NONUYFP.js.map
404
+ //# sourceMappingURL=map-SJLRAB5X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/flows/map.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { HubspotFormsViewResponse } from \"@baker/api\";\nimport { defineCommand } from \"citty\";\nimport { apiPost } from \"../../client.ts\";\nimport { repeatedFlagValues } from \"../../lib/repeatedFlags.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport { registerSchema } from \"../../schemas.ts\";\nimport {\n type BuiltMapping,\n buildFieldMapping,\n type DestinationField,\n describeSlots,\n type MapOptions,\n MappingError,\n namesComeFromAccount,\n otherSlots,\n shapeFor,\n} from \"./mapping.ts\";\nimport {\n collectConfigStatus,\n collectSideEffects,\n flowDataPath,\n readFlowTree,\n requestFlowInputCall,\n sideEffectNeedsInput,\n writeFlowTree,\n} from \"./shared.ts\";\n\nregisterSchema({\n command: \"flows.map\",\n description:\n \"Map form fields onto any named value a side effect sends: a CRM fieldMapping, a sheet columnMapping, a webhook payloadKeys, a pixel eventParams, or a platform matching block. Emits the mapping and splices it in with --write. Configure the destination through request_flow_input FIRST — the destination-side names come from the connected account, not from you.\",\n args: {\n slug: { type: \"positional\", description: \"Form slug (folder under flows/)\", required: true },\n map: {\n type: \"string\",\n description:\n \"<destField>[:<fieldType>]=<value>, repeatable. Omit both this and --from to be told what the side effect accepts instead. Sheet: A=name. HubSpot with --hubspot-form: firstname=nombre (the type is read off the form). Where a destination cannot be read, state the type on the LEFT — c0ffee:varchar=email — because `:` on the right belongs to the value grammar.\",\n required: false,\n },\n from: {\n type: \"string\",\n description:\n 'The whole mapping as a JSON file, or `-` for stdin: { \"sideEffect\": \"…\", \"map\": { \"<destField>\": \"<value>\", … } }. Past ~3 fields prefer this over repeated --map.',\n required: false,\n },\n \"side-effect\": { type: \"string\", description: \"Side-effect id, when the form has more than one\", required: false },\n \"hubspot-form\": {\n type: \"string\",\n description:\n \"HubSpot formGuid of the configured destination. Fills every mapping's fieldType and objectTypeId from the form itself, so you write no types at all. The guid is the `formGuid` in the `destination` request_flow_input returned.\",\n required: false,\n },\n into: {\n type: \"string\",\n description:\n \"Slot to map into when the type has more than one: meta/tiktok/pinterest take eventParams (default) or their matching record; googleAds takes enhancedConversions or value/currency/transactionId.\",\n required: false,\n },\n entity: {\n type: \"string\",\n description: \"Destination object (pipedrive: person|organization|lead, …)\",\n required: false,\n },\n custom: { type: \"boolean\", description: \"The destination fields are custom fields\", required: false },\n standard: { type: \"boolean\", description: \"The destination fields are standard fields\", required: false },\n \"object-type\": { type: \"string\", description: \"HubSpot objectTypeId (default 0-1, contact)\", required: false },\n \"prune-missing\": {\n type: \"boolean\",\n description:\n \"Drop the mappings whose destination field no longer exists on the account, and nothing else. The repair for a deleted HubSpot property: HubSpot refuses the WHOLE submission when it names a field it does not have, so one dead mapping loses every lead. Needs --hubspot-form so the live field list can be read. Runs on its own — no --map required. Prefer this to --replace, which drops everything this call does not name.\",\n required: false,\n },\n replace: {\n type: \"boolean\",\n description:\n \"Make the slot exactly what this call passes, dropping every mapping already in it. Without it, mappings MERGE by destination name — re-mapping a name overwrites it, a new name is appended, and the rest are left alone. To REMOVE a dead mapping, reach for --prune-missing instead: this one also deletes every mapping you did not re-state.\",\n required: false,\n },\n write: {\n type: \"boolean\",\n description: \"Splice the mapping into the form. Without it, prints and changes nothing\",\n required: false,\n },\n },\n});\n\n/**\n * Every `--map` on the command line.\n *\n * Read from `rawArgs`, not `args.map`: citty collapses a repeated flag to its\n * LAST value, so `--map A=name --map B=email` arrives as the single string\n * `\"B=email\"`. Taken from `args`, this command would map one field, report\n * success, and leave the other silently unmapped — which is the exact\n * failure mode it exists to prevent, one level up.\n */\nexport function mapSpecsFrom(rawArgs: readonly string[]): string[] {\n return repeatedFlagValues(rawArgs, \"map\");\n}\n\n/**\n * A whole mapping in one file, which is what a real one looks like.\n *\n * A CRM mapping is eight to fifteen fields. As repeated `--map` flags that is a\n * fifteen-flag command line whose shell quoting is its own hazard — an\n * improvement on hand-writing 230 lines of ProseMirror, but not much of one.\n * The JSON form is what the agent is actually holding in its head, and it is one\n * Write plus one command however many fields there are.\n *\n * {\n * \"sideEffect\": \"se-hubspotForm-1\",\n * \"hubspotForm\": \"8b1f…\",\n * \"map\": {\n * \"email\": \"email\",\n * \"firstname\": \"nombre\",\n * \"hs_lead_source\": \"tracking:utm_source\",\n * \"full_name\": \"nombre + \\\" \\\" + apellido\"\n * }\n * }\n *\n * `\"firstname\": { \"type\": \"…\", \"value\": \"…\" }` is still accepted for a\n * destination this command cannot read, but naming the destination once\n * (`hubspotForm` here, `--hubspot-form` on the command line) is strictly better:\n * the types then come from the account instead of from memory.\n */\ntype MapSpecFile = {\n sideEffect?: string;\n into?: string;\n entity?: string;\n custom?: boolean;\n objectType?: string;\n /**\n * Treat this file as the WHOLE mapping: anything in the slot it does not name\n * is dropped. Off by default so a file that lists three fields cannot delete\n * the five that were mapped before it.\n */\n replace?: boolean;\n /** Drop the mappings the destination no longer has. See `MapOptions.pruneMissing`. */\n pruneMissing?: boolean;\n /** HubSpot formGuid of the configured destination, so its field types can be read. */\n hubspotForm?: string;\n map?: Record<string, string | { type?: string; value?: string }>;\n};\n\n/** Flatten the JSON form into the same `<dest>[:<type>]=<value>` specs the flags produce. */\nexport function specsFromFile(parsed: MapSpecFile): string[] {\n return Object.entries(parsed.map ?? {}).map(([destField, entry]) => {\n if (typeof entry === \"string\") return `${destField}=${entry}`;\n const type = entry?.type ? `:${entry.type}` : \"\";\n return `${destField}${type}=${entry?.value ?? \"\"}`;\n });\n}\n\nfunction readSpecFile(path: string): MapSpecFile {\n let raw: string;\n try {\n raw = path === \"-\" ? readFileSync(0, \"utf-8\") : readFileSync(path, \"utf-8\");\n } catch (error) {\n refuse(\n `Could not read ${path === \"-\" ? \"the mapping from stdin\" : `\"${path}\"`}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n refuse(\n `${path === \"-\" ? \"stdin\" : `\"${path}\"`} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n 'Expected { \"map\": { \"<destField>\": \"<value>\", … } }',\n );\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n refuse(\"A mapping file must be a JSON object.\", 'Expected { \"map\": { \"<destField>\": \"<value>\", … } }');\n }\n const spec = parsed as MapSpecFile;\n if (!spec.map || typeof spec.map !== \"object\" || Object.keys(spec.map).length === 0) {\n refuse(\"A mapping file needs a non-empty `map` object.\", 'Expected { \"map\": { \"firstname\": \"nombre\", … } }');\n }\n return spec;\n}\n\n/** Refuse with the same envelope shape everywhere, so the agent parses one thing. */\nfunction refuse(message: string, fix?: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n}\n\n/**\n * The destination's own field catalog, read off the connected account.\n *\n * This is the whole reason a HubSpot mapping no longer needs a type per field.\n * `fieldType` and `objectTypeId` are HubSpot's answers about its own properties,\n * not the agent's — the engine concatenates them into\n * `<objectTypeId>.<fieldType>.<fieldName>`, which is byte-for-byte the key the\n * dashboard's picker writes. Asking the agent to remember them is both more work\n * and less accurate than asking HubSpot, and a plausible-but-wrong one is the\n * silent kind: on a date property the engine skips the YYYY-MM-DD coercion and\n * HubSpot drops the value.\n *\n * One call for the whole mapping, and only when a destination was named. A\n * failure refuses rather than falling back to writing types nobody verified.\n */\nasync function hubspotFieldCatalog(\n formId: string,\n): Promise<{ fields: Map<string, DestinationField>; captchaEnabled: boolean }> {\n let response: HubspotFormsViewResponse;\n try {\n response = await apiPost<HubspotFormsViewResponse>(\"/api/hubspot/forms/view\", { formId });\n } catch (error) {\n refuse(\n `Could not read HubSpot form \"${formId}\": ${error instanceof Error ? error.message : String(error)}`,\n \"Check the guid against the `destination` request_flow_input returned, or `baker hubspot forms list`. Drop --hubspot-form and write `<field>:<fieldType>=<value>` per mapping only if HubSpot is unreachable.\",\n );\n }\n const fields = response.data.form?.fields ?? [];\n if (fields.length === 0) {\n refuse(\n `HubSpot form \"${formId}\" reports no fields, so nothing can be mapped against it.`,\n \"Confirm the guid names the form this side effect submits to: baker hubspot forms list\",\n );\n }\n return {\n fields: new Map(\n fields.map((field) => [\n field.name,\n { fieldType: field.fieldType, ...(field.objectTypeId ? { objectTypeId: field.objectTypeId } : {}) },\n ]),\n ),\n // Read while the form is already open, because this is the moment a\n // delivery is being wired: HubSpot refuses every submission sent to a form\n // with spam prevention on, so a mapping written against one is correct and\n // will still never arrive. Reported, not refused — the mapping is not the\n // mistake, and the client can switch it off without the work being redone.\n captchaEnabled: response.data.form?.captchaEnabled === true,\n };\n}\n\n/**\n * Answer the bare `baker flows map <slug> --side-effect <id>` probe.\n *\n * The left of a mapping is a different question per slot — a closed platform\n * set, a name the agent picks, or a name that only exists in the connected\n * account — and none of it was readable without guessing wrong first.\n */\nfunction describeDestination(chosen: Located): void {\n const type = String(chosen.sideEffect.type ?? \"\");\n const slots = describeSlots(type);\n if (slots.length === 0) {\n refuse(\n `A ${type} side effect has no mappable field.`,\n `Nothing on it addresses named values. \\`baker flows schema side-effect ${type}\\` shows what it does take.`,\n );\n }\n writeJson({\n ok: true,\n data: { sideEffectId: chosen.sideEffect.id, type, mappable: slots },\n hints: [\n `Nothing mapped — this is what a ${type} side effect accepts. Add --map <key>=<value> to build one.`,\n ...slots.map((slot) =>\n slot.keys\n ? `${slot.slot}: ${slot.keys.join(\", \")}`\n : `${slot.slot}: ${slot.keysFrom === \"account\" ? \"keys come from the connected account (request_flow_input returns them)\" : \"keys are yours to choose — whatever the receiving system expects\"}`,\n ),\n // Named separately from the key hint above: the key and its field type are\n // two different questions with two different answers, and the type is the\n // one an agent does not know it is being asked until a mapping is refused.\n ...slots.flatMap((slot) => (slot.fieldTypes ? [`${slot.slot} field types — ${slot.fieldTypes}`] : [])),\n 'Values (right of the `=`) are the same for every slot: a form field, tracking:<var>, global:<name>, code:<name>, a \"literal\", or those joined with +. A field may also be written as the file stores it, {{<stepId>.customForm.<field>}}. A value cannot run code (no .split(), .slice(), [0]).',\n ],\n });\n}\n\n/**\n * `shapeFor` as a refusal rather than a throw.\n *\n * `assertDestinationReady` is the one place `shapeFor` is reached BEFORE the\n * try/catch around `buildFieldMapping`, so an uncaught error here would escape\n * the `{ ok: false }` envelope every other path emits and reach the agent as a\n * stack trace.\n *\n * In practice the live case is an unrecognised `--into`, because only a type in\n * `FLOW_DELIVERY_SIDE_EFFECT_TYPES` gets this far (everything else returns at the\n * `sideEffectNeedsInput` check above) and every one of those has a slot. So\n * `--into eventParams` on an unconfigured `googleSpreadsheet` is enough to hit\n * it, and the message it would lose — the list of slots that type does have —\n * is exactly the one that answers it.\n */\nfunction shapeOrRefuse(type: string, into: string | undefined): ReturnType<typeof shapeFor> {\n try {\n return shapeFor(type, into);\n } catch (error) {\n if (error instanceof MappingError) refuse(error.message, error.fix);\n throw error;\n }\n}\n\n/**\n * Stop a mapping written against a destination nobody has picked yet.\n *\n * This is the failure the whole command exists to prevent, one level up: the\n * column letters and field keys live in an account only `request_flow_input`\n * can see, so before that call has run they can only be guesses — and a guessed\n * destination is structurally valid, passes every check here, ships, and sends\n * nothing forever. `verify` does catch it later (`flow-schema-unconfigured-oauth`),\n * but by then the mapping is written and the agent has moved on.\n *\n * Only for slots whose names come from the account. A webhook body or a pixel\n * parameter is the agent's to name, so an unset endpoint is a note, not a block.\n */\nfunction assertDestinationReady(\n slug: string,\n tree: Record<string, unknown>,\n chosen: Located,\n into: string | undefined,\n): void {\n if (!sideEffectNeedsInput(chosen.sideEffect)) return;\n\n const type = String(chosen.sideEffect.type ?? \"\");\n const status = collectConfigStatusFor(tree, slug, String(chosen.sideEffect.id ?? \"\"));\n const call = status ? requestFlowInputCall(slug, status) : `request_flow_input for the ${type} side effect`;\n\n if (!namesComeFromAccount(shapeOrRefuse(type, into))) return;\n\n refuse(\n `The ${type} destination is not configured yet, so its field names cannot be anything but a guess.`,\n `Configure it first, then map against the names that call returns: ${call}`,\n );\n}\n\n/** The config row for one side effect, so the refusal can carry a ready-to-issue call. */\nfunction collectConfigStatusFor(tree: Record<string, unknown>, _slug: string, sideEffectId: string) {\n const rows: Parameters<typeof requestFlowInputCall>[1][] = [];\n collectConfigStatus(tree, rows);\n return rows.find((row) => row.sideEffectId === sideEffectId);\n}\n\n/**\n * Name the slots this side effect has and this call did not use.\n *\n * A `meta` side effect has both `eventParams` and `advancedMatching`, and the\n * one an agent most often needs — advanced matching, which decides whether Meta\n * can attribute the conversion at all — is not the default. Saying so on every\n * response is cheaper than the agent finding out from a reference file it may\n * not open.\n */\nfunction slotHintFor(type: string, into: string | undefined): string[] {\n const others = otherSlots(type, shapeFor(type, into));\n if (others.length === 0) return [];\n return [`This side effect also takes ${others.join(\" and \")} — pass --into <slot> to map into one of those instead.`];\n}\n\n/**\n * What happened to the mappings this call did NOT name.\n *\n * Said out loud in both directions, because a slot whose size moved without\n * being mentioned is exactly how the loss stays silent: \"kept\" answers the\n * question a merge raises (\"did it drop the others?\"), and `--replace` has to\n * state its drop or it is the same bug with a flag on it.\n */\nfunction survivorHint(built: BuiltMapping, replacing: boolean): string[] {\n if (built.kept > 0) {\n return [`${built.kept} mapping${built.kept === 1 ? \"\" : \"s\"} already in ${built.key} kept — this merged by name.`];\n }\n if (!replacing) return [];\n return [`--replace: ${built.key} is now exactly these ${built.count}; anything else it held is gone.`];\n}\n\n/**\n * Every mapping `--prune-missing` removed, named one by one.\n *\n * A count would be the same mistake this whole repair exists to undo: the drift\n * Task that nobody could act on said \"an answer HubSpot no longer accepts\" and\n * named none of them, and six Forms were closed as false positives off that\n * sentence. A removal the agent cannot repeat back to the user is a removal\n * nobody can check.\n */\nfunction droppedHint(built: BuiltMapping): string[] {\n if (built.dropped.length === 0) return [];\n return [\n `--prune-missing dropped ${built.dropped.length} mapping${built.dropped.length === 1 ? \"\" : \"s\"} the destination no longer has: ${built.dropped.join(\", \")}. Every other mapping in ${built.key} was left alone.`,\n ];\n}\n\n/**\n * A note, not a block: these keys are the agent's to choose, but the endpoint\n * they are posted to is still the user's to supply, and nothing later in this\n * command will mention it.\n */\nfunction pendingEndpointHint(slug: string, tree: Record<string, unknown>, chosen: Located): string[] {\n if (!sideEffectNeedsInput(chosen.sideEffect)) return [];\n const status = collectConfigStatusFor(tree, slug, String(chosen.sideEffect.id ?? \"\"));\n if (!status) return [];\n return [`The mapping is written, but this destination still needs the user: ${requestFlowInputCall(slug, status)}`];\n}\n\ntype Located = { node: Record<string, unknown>; sideEffect: Record<string, unknown> };\n\n/** The side effect to map into: the named one, or the only one. Never a guess between several. */\nfunction pickSideEffect(slug: string, found: Located[], named: string | undefined): Located {\n if (found.length === 0) {\n refuse(\n `\"${slug}\" has no side effects — author the side effect first, then map into it.`,\n `baker flows add-side-effect ${slug} --node <nodeId> --type <type>`,\n );\n }\n const chosen = named\n ? found.find((entry) => entry.sideEffect.id === named)\n : found.length === 1\n ? found[0]\n : undefined;\n if (chosen) return chosen;\n\n const inventory = found.map((entry) => `${entry.sideEffect.id} (${entry.sideEffect.type})`).join(\", \");\n refuse(\n named\n ? `No side effect with id \"${named}\" in \"${slug}\".`\n : `\"${slug}\" has ${found.length} side effects — name one with --side-effect <id>.`,\n `Side effects in this form: ${inventory}`,\n );\n}\n\n/**\n * `--custom` and `--standard` answer the same question, and the answer decides\n * whether the write lands or is silently dropped. Taking the last flag would\n * pick one of two contradictory instructions at random.\n */\nfunction customFlag(custom: unknown, standard: unknown): boolean | undefined {\n if (custom === true && standard === true) {\n refuse(\"--custom and --standard contradict each other. Pass one.\");\n }\n if (custom === true) return true;\n if (standard === true) return false;\n return undefined;\n}\n\n/**\n * The destination-side options, from the flags and the mapping file together.\n *\n * A flag beats the file, so a saved mapping can be retargeted without editing\n * it. The destination catalog is read HERE, before anything is built, so every\n * mapping's field type is derived from the account rather than remembered —\n * and only when a destination was actually named: without one the build still\n * runs, and refuses per mapping if it turns out a type was needed.\n */\nasync function mapOptions(\n args: Record<string, unknown>,\n fromFile: MapSpecFile | undefined,\n into: string | undefined,\n): Promise<{ options: MapOptions; hints: string[] }> {\n const hubspotForm = args[\"hubspot-form\"] ? String(args[\"hubspot-form\"]) : fromFile?.hubspotForm;\n const catalog = hubspotForm ? await hubspotFieldCatalog(hubspotForm) : undefined;\n return {\n options: {\n into,\n entity: args.entity ? String(args.entity) : fromFile?.entity,\n isCustomField: customFlag(args.custom, args.standard) ?? fromFile?.custom,\n objectType: args[\"object-type\"] ? String(args[\"object-type\"]) : fromFile?.objectType,\n replace: args.replace === true || fromFile?.replace === true,\n pruneMissing: args[\"prune-missing\"] === true || fromFile?.pruneMissing === true,\n destinationFields: catalog?.fields,\n },\n hints: catalog?.captchaEnabled\n ? [\n \"WARNING: this HubSpot form has spam prevention (captcha) on. HubSpot refuses every submission sent to a form with it on, so nothing mapped here will arrive — the mapping is fine, the destination is not. Only the user can switch it off, on the form in HubSpot. Tell them that, and do not swap the destination yourself.\",\n ]\n : [],\n };\n}\n\nexport const mapCommand = defineCommand({\n meta: {\n name: \"map\",\n description:\n \"Map form fields onto any value a side effect sends — never hand-write a mapping. Start here: baker flows map contact --from map.json --write\",\n },\n args: {\n slug: { type: \"positional\", description: \"Form slug\", required: true },\n map: { type: \"string\", description: \"<destField>[:<fieldType>]=<value> (repeatable)\" },\n from: { type: \"string\", description: \"Read the whole mapping from a JSON file, or `-` for stdin\" },\n \"side-effect\": { type: \"string\", description: \"Side-effect id, when the form has more than one\" },\n \"hubspot-form\": {\n type: \"string\",\n description: \"HubSpot formGuid — reads every field's type off the form so you write none\",\n },\n into: {\n type: \"string\",\n description: \"Which slot to map into, for a type with more than one (e.g. meta: eventParams | advancedMatching)\",\n },\n entity: { type: \"string\", description: \"Destination object (person, contact, lead, …)\" },\n custom: { type: \"boolean\", description: \"Destination fields are custom fields\" },\n standard: { type: \"boolean\", description: \"Destination fields are standard fields\" },\n \"object-type\": { type: \"string\", description: \"HubSpot objectTypeId (default 0-1)\" },\n \"prune-missing\": {\n type: \"boolean\",\n description: \"Drop only the mappings the destination no longer has — the repair for a deleted HubSpot field\",\n },\n replace: {\n type: \"boolean\",\n description: \"Drop every mapping already in the slot. Default merges by destination name\",\n },\n write: { type: \"boolean\", description: \"Splice the mapping into the form\" },\n },\n run: async ({ args, rawArgs }) => {\n const slug = String(args.slug);\n const fromFile = args.from ? readSpecFile(String(args.from)) : undefined;\n const specs = fromFile ? specsFromFile(fromFile) : mapSpecsFrom(rawArgs);\n const into = args.into ? String(args.into) : fromFile?.into;\n const replacing = args.replace === true || fromFile?.replace === true;\n const pruning = args[\"prune-missing\"] === true || fromFile?.pruneMissing === true;\n\n const tree = readFlowTree(slug);\n // A flag beats the file, so a saved mapping can be retargeted without editing it.\n const chosen = pickSideEffect(\n slug,\n collectSideEffects(tree),\n args[\"side-effect\"] ? String(args[\"side-effect\"]) : fromFile?.sideEffect,\n );\n\n // No mappings given: answer \"what can I map here, and where do the key names\n // come from\" rather than printing usage. The command already holds the side\n // effect, so refusing threw the answer away and left the only discovery path\n // a wrong guess — name a key outside a closed set and read it off the refusal.\n // `--prune-missing` is a whole call on its own: the repair for a deleted\n // destination field is a removal, and requiring a `--map` alongside it would\n // mean inventing a mapping to make a deletion legal.\n if (specs.length === 0 && !pruning) {\n describeDestination(chosen);\n return;\n }\n\n assertDestinationReady(slug, tree, chosen, into);\n\n const { options, hints: destinationHints } = await mapOptions(args, fromFile, into);\n\n let built: ReturnType<typeof buildFieldMapping>;\n try {\n built = buildFieldMapping(tree, chosen.sideEffect, specs, options);\n } catch (error) {\n if (error instanceof MappingError) {\n refuse(error.message, error.fix);\n }\n throw error;\n }\n\n const slotHint = [\n ...destinationHints,\n ...droppedHint(built),\n ...survivorHint(built, replacing),\n ...slotHintFor(String(chosen.sideEffect.type ?? \"\"), into),\n ...pendingEndpointHint(slug, tree, chosen),\n ];\n\n if (args.write !== true) {\n emitDryRun(slug, chosen, built, slotHint);\n return;\n }\n\n Object.assign(chosen.sideEffect, built.patch);\n writeFlowTree(slug, tree);\n emitWritten(slug, chosen, built, slotHint);\n },\n});\n\n/**\n * The first line of the answer: what this call did, or would do.\n *\n * It has to survive a call that only REMOVES. `--prune-missing` on its own\n * writes nothing and drops something, and \"Wrote 0 fieldMapping mappings\"\n * describes the opposite of what happened — it reads as a no-op, which is the\n * one reading that sends an agent looking for a different command after the\n * repair has already landed. The drops are named by `droppedHint` two lines\n * further down, and that is not where anybody looks to find out whether a\n * command worked.\n *\n * Exported for its own test, because this sentence is the whole report.\n */\nexport function mapHeadline(built: BuiltMapping, phase: \"written\" | \"dry-run\", slug = \"\"): string {\n const wrote = `${built.count} ${built.key} mapping${built.count === 1 ? \"\" : \"s\"}`;\n const drops = `${built.dropped.length} dead mapping${built.dropped.length === 1 ? \"\" : \"s\"}`;\n\n if (phase === \"dry-run\") {\n if (built.count === 0 && built.dropped.length > 0) {\n return `Nothing written. Re-run with --write to drop ${drops} from ${slug}.`;\n }\n return `Nothing written. Re-run with --write to splice ${wrote} into ${slug}.`;\n }\n\n if (built.dropped.length === 0) return `Wrote ${wrote}.`;\n if (built.count === 0) return `Dropped ${drops} from ${built.key}; nothing else changed.`;\n return `Wrote ${wrote} and dropped ${drops}.`;\n}\n\n/** What the call WOULD do, plus the one sentence saying how to make it happen. */\nfunction emitDryRun(slug: string, chosen: Located, built: BuiltMapping, slotHint: string[]): void {\n writeJson({\n ok: true,\n data: {\n sideEffectId: chosen.sideEffect.id,\n type: chosen.sideEffect.type,\n key: built.key,\n patch: built.patch,\n },\n hints: [mapHeadline(built, \"dry-run\", slug), ...slotHint],\n });\n}\n\nfunction emitWritten(slug: string, chosen: Located, built: BuiltMapping, slotHint: string[]): void {\n writeJson({\n ok: true,\n data: {\n sideEffectId: chosen.sideEffect.id,\n type: chosen.sideEffect.type,\n key: built.key,\n written: built.count,\n kept: built.kept,\n dropped: built.dropped,\n path: flowDataPath(slug),\n },\n hints: [\n mapHeadline(built, \"written\"),\n `A mapping is only real once the destination is set — check with: baker flows show ${slug}`,\n ...slotHint,\n ],\n });\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-ERSX3MKH.js";
4
4
  import {
5
5
  customMcpServerNameRequestSchema
6
- } from "./chunk-BAUSWB7O.js";
6
+ } from "./chunk-EUFCY63X.js";
7
7
  import "./chunk-GXDLWBOY.js";
8
8
  import "./chunk-TEINLN64.js";
9
9
  import "./chunk-ZJWUBJYQ.js";
@@ -473,4 +473,4 @@ Full guide: __tooling__/docs/tools/baker/mcp.md`
473
473
  export {
474
474
  mcpCommand
475
475
  };
476
- //# sourceMappingURL=mcp-CGITBQQA.js.map
476
+ //# sourceMappingURL=mcp-W7DBSUF7.js.map
@@ -22,11 +22,11 @@ Full guide: __tooling__/docs/tools/baker/media-sources.md`
22
22
  list: () => import("./list-AL7N6X2P.js").then((m) => m.listCommand),
23
23
  sync: () => import("./sync-CF7FVUQJ.js").then((m) => m.syncCommand),
24
24
  schedule: () => import("./schedule-O2K6M43V.js").then((m) => m.scheduleCommand),
25
- reset: () => import("./reset-TVDYP2VK.js").then((m) => m.resetCommand),
25
+ reset: () => import("./reset-RBL2NSDV.js").then((m) => m.resetCommand),
26
26
  remove: () => import("./remove-6LGGKMLJ.js").then((m) => m.removeCommand)
27
27
  }
28
28
  });
29
29
  export {
30
30
  mediaSourcesCommand
31
31
  };
32
- //# sourceMappingURL=media-sources-6TFUGPE2.js.map
32
+ //# sourceMappingURL=media-sources-M35YZQY5.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  failApi
3
- } from "./chunk-EIVYFZ4N.js";
4
- import "./chunk-BAUSWB7O.js";
3
+ } from "./chunk-4JHUG6Y3.js";
4
+ import "./chunk-EUFCY63X.js";
5
5
  import "./chunk-GXDLWBOY.js";
6
6
  import "./chunk-TEINLN64.js";
7
7
  import "./chunk-ZJWUBJYQ.js";
@@ -41,4 +41,4 @@ var membersCommand = defineCommand({
41
41
  export {
42
42
  membersCommand
43
43
  };
44
- //# sourceMappingURL=members-R2GQVSVA.js.map
44
+ //# sourceMappingURL=members-QXYMJQWU.js.map
@@ -8,7 +8,7 @@ import {
8
8
  maxInputSlot,
9
9
  promptMaxLength,
10
10
  supportsReferenceToVideo
11
- } from "./chunk-CAMX6OHF.js";
11
+ } from "./chunk-CHSNHVYF.js";
12
12
  import {
13
13
  registerSchema,
14
14
  writeJson
@@ -152,4 +152,4 @@ export {
152
152
  buildModelCards,
153
153
  modelsCommand
154
154
  };
155
- //# sourceMappingURL=models-3Z6MDHQW.js.map
155
+ //# sourceMappingURL=models-7U3GRYHF.js.map
@@ -4,11 +4,11 @@ import {
4
4
  readFlowTree,
5
5
  walkNodes,
6
6
  writeFlowTree
7
- } from "./chunk-Q4JYX424.js";
7
+ } from "./chunk-3XPFBSD7.js";
8
8
  import {
9
9
  looksLikeUnresolvedVariable,
10
10
  parseEmailRecipients
11
- } from "./chunk-BAUSWB7O.js";
11
+ } from "./chunk-EUFCY63X.js";
12
12
  import "./chunk-GXDLWBOY.js";
13
13
  import "./chunk-TEINLN64.js";
14
14
  import "./chunk-ZJWUBJYQ.js";
@@ -138,4 +138,4 @@ export {
138
138
  normalizeCommand,
139
139
  normalizeFlowTree
140
140
  };
141
- //# sourceMappingURL=normalize-L6WBNGQA.js.map
141
+ //# sourceMappingURL=normalize-DYJLUBQP.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  destinationRefusal
3
- } from "./chunk-YT7SSJFR.js";
4
- import "./chunk-W2TJIZS2.js";
5
- import "./chunk-Q4JYX424.js";
3
+ } from "./chunk-6QJLVNGU.js";
4
+ import "./chunk-K46X77UI.js";
5
+ import "./chunk-3XPFBSD7.js";
6
6
  import {
7
7
  failApi
8
- } from "./chunk-EIVYFZ4N.js";
8
+ } from "./chunk-4JHUG6Y3.js";
9
9
  import {
10
10
  FLOW_AGENT_DESTINATION_KINDS
11
- } from "./chunk-BAUSWB7O.js";
11
+ } from "./chunk-EUFCY63X.js";
12
12
  import "./chunk-GXDLWBOY.js";
13
13
  import "./chunk-TEINLN64.js";
14
14
  import "./chunk-ZJWUBJYQ.js";
@@ -118,4 +118,4 @@ export {
118
118
  optionsCommand,
119
119
  optionsHints
120
120
  };
121
- //# sourceMappingURL=options-YT2ZGB2Z.js.map
121
+ //# sourceMappingURL=options-77SHB5KA.js.map