@koda-sl/baker-cli 0.449.0 → 0.450.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 (379) hide show
  1. package/README.md +5 -2
  2. package/dist/{account-AL2ZDSR7.js → account-2SVI5OK7.js} +4 -4
  3. package/dist/{accounts-HAFCLSR5.js → accounts-2XAOZX3U.js} +3 -3
  4. package/dist/{accounts-O5MFO3QQ.js → accounts-U4BGY3QU.js} +5 -5
  5. package/dist/{actions-P35MEMGN.js → actions-6EJU7CAQ.js} +18 -18
  6. package/dist/{add-6DTC6X5G.js → add-IPGEYQQG.js} +2 -2
  7. package/dist/{add-5GAN6CVO.js → add-P7CCVY2J.js} +27 -5
  8. package/dist/add-P7CCVY2J.js.map +1 -0
  9. package/dist/{ads-C47NA2HH.js → ads-6MXVIV62.js} +3 -3
  10. package/dist/{advertisers-AE75CGVE.js → advertisers-JG4DZ6SB.js} +3 -3
  11. package/dist/{analytics-FKCXIMPO.js → analytics-IMYVNQIX.js} +6 -6
  12. package/dist/{analytics-FPWQQGRM.js → analytics-RNEUAKC4.js} +3 -3
  13. package/dist/{assign-ABN2AQ4J.js → assign-46TXQRT5.js} +3 -3
  14. package/dist/{audience-size-GNBJY35X.js → audience-size-5TNQO3IL.js} +3 -3
  15. package/dist/{audit-3VS63TBW.js → audit-XRE7XH3Q.js} +3 -3
  16. package/dist/{autocomplete-VS3XG3B7.js → autocomplete-2ZWSQ6QQ.js} +3 -3
  17. package/dist/{avatars-EKCKHCC3.js → avatars-M6NSD3KS.js} +4 -4
  18. package/dist/{bid-pricing-Q72B65AY.js → bid-pricing-OIVPZCWW.js} +3 -3
  19. package/dist/{brand-C6PFGGQN.js → brand-YDNX7LYQ.js} +2 -2
  20. package/dist/{brief-UO52ZHFI.js → brief-EK6ULGXD.js} +7 -7
  21. package/dist/{campaign-groups-KFFYQPU3.js → campaign-groups-TAP6LK6F.js} +8 -8
  22. package/dist/{campaign-writes-FHOS5XZY.js → campaign-writes-4SWPBZE6.js} +3 -3
  23. package/dist/{campaigns-KZYZTXDS.js → campaigns-AQAJN23T.js} +5 -5
  24. package/dist/{campaigns-2NHWBF5C.js → campaigns-ROMLENHI.js} +11 -11
  25. package/dist/{canvas-DPCBGW7K.js → canvas-XYCDLDRS.js} +12 -12
  26. package/dist/{capabilities-DJFTRJKS.js → capabilities-GGPTIAFO.js} +3 -3
  27. package/dist/{chats-D2CSDX5Q.js → chats-G343BSVB.js} +3 -3
  28. package/dist/{chunk-OZRUJVIQ.js → chunk-355DHOHD.js} +2 -2
  29. package/dist/{chunk-CSYSX4D2.js → chunk-3URK7DAA.js} +2 -2
  30. package/dist/{chunk-A4LOJ2VD.js → chunk-3YOFT3AP.js} +2 -2
  31. package/dist/{chunk-647RO73Q.js → chunk-542XAHNT.js} +2 -2
  32. package/dist/{chunk-5ZDLTE5T.js → chunk-64WGDUXH.js} +3 -3
  33. package/dist/{chunk-HBTF25YG.js → chunk-7WD2RW2R.js} +2 -2
  34. package/dist/{chunk-QRP3PXWN.js → chunk-B6GITCGN.js} +2 -2
  35. package/dist/{chunk-XF4JUKVF.js → chunk-BAUSWB7O.js} +30 -3
  36. package/dist/chunk-BAUSWB7O.js.map +1 -0
  37. package/dist/{chunk-IBURXTL4.js → chunk-D5XAVXUZ.js} +5 -5
  38. package/dist/{chunk-3HJLHTWP.js → chunk-EIVYFZ4N.js} +12 -3
  39. package/dist/{chunk-3HJLHTWP.js.map → chunk-EIVYFZ4N.js.map} +1 -1
  40. package/dist/{chunk-JQJDXPCO.js → chunk-F4F3PLN3.js} +2 -2
  41. package/dist/{chunk-NPY4QUMQ.js → chunk-LZSXZB2F.js} +2 -2
  42. package/dist/{chunk-3IBYKLXR.js → chunk-MURPCCLG.js} +2 -2
  43. package/dist/{chunk-2QHODRR6.js → chunk-NEXCBTBZ.js} +2 -2
  44. package/dist/{chunk-AEOSAVVL.js → chunk-NR2TDASR.js} +2 -2
  45. package/dist/{chunk-KHRXPQID.js → chunk-OVT676K6.js} +2 -2
  46. package/dist/{chunk-FD27ZDVP.js → chunk-P2RE52V7.js} +2 -2
  47. package/dist/{chunk-Z2EOC6PL.js → chunk-P6ICBEE4.js} +4 -4
  48. package/dist/{chunk-TT5R35PJ.js → chunk-PLGIETFZ.js} +3 -3
  49. package/dist/{chunk-YRQYA2LR.js → chunk-Q4JYX424.js} +63 -5
  50. package/dist/chunk-Q4JYX424.js.map +1 -0
  51. package/dist/{chunk-4AUMTNVB.js → chunk-QJNTI36W.js} +3 -3
  52. package/dist/{chunk-5Y5UAJWD.js → chunk-TD6GIMV6.js} +3 -3
  53. package/dist/{chunk-ZEYEWPK6.js → chunk-TESII3FM.js} +2 -2
  54. package/dist/{chunk-GBMP4F45.js → chunk-TXI5OWCF.js} +5 -5
  55. package/dist/{chunk-IR6D7K4H.js → chunk-UC7VFFXR.js} +2 -2
  56. package/dist/{chunk-7YCRFMXF.js → chunk-UNI5AASR.js} +2 -2
  57. package/dist/{chunk-3G3ZDLMI.js → chunk-UX5HYEN3.js} +2 -2
  58. package/dist/{chunk-MXYBTMKB.js → chunk-V4RGDJAN.js} +2 -2
  59. package/dist/{chunk-SHL7LOC3.js → chunk-W2TJIZS2.js} +3 -3
  60. package/dist/{chunk-4BQXAE7Z.js → chunk-W5VGWEAG.js} +2 -2
  61. package/dist/{chunk-S77PZVYM.js → chunk-WDZOVF6P.js} +3 -3
  62. package/dist/{chunk-Y6O7EWYY.js → chunk-YCOP4FGJ.js} +2 -2
  63. package/dist/{chunk-DWHIOO7E.js → chunk-YT7SSJFR.js} +163 -12
  64. package/dist/chunk-YT7SSJFR.js.map +1 -0
  65. package/dist/{claim-FZ5OQLMU.js → claim-INJHV4FM.js} +3 -3
  66. package/dist/cli.js +27 -27
  67. package/dist/{companies-DNI634RC.js → companies-3REQZWKU.js} +3 -3
  68. package/dist/{complete-2FZMGJV5.js → complete-DX2DAAEZ.js} +3 -3
  69. package/dist/{connect-QCOGEPP4.js → connect-O4OGKMAK.js} +12 -6
  70. package/dist/{conversation-6IOGV7B7.js → conversation-6A2X5W64.js} +3 -3
  71. package/dist/{conversions-4SRZPBBX.js → conversions-PT6UDIX3.js} +7 -7
  72. package/dist/{create-VXM34ZWH.js → create-BR3Q4A4C.js} +3 -3
  73. package/dist/{create-BJNMO6HT.js → create-EOLNJGAX.js} +2 -2
  74. package/dist/{create-FX4OJ2XF.js → create-I2UB7FWX.js} +3 -3
  75. package/dist/{create-RM7HV77Y.js → create-S47CLYXJ.js} +3 -3
  76. package/dist/{creatives-SJTJU6VT.js → creatives-D3NXWVUF.js} +10 -10
  77. package/dist/{creatives-JSWBFQ5R.js → creatives-FBH4DKSX.js} +8 -8
  78. package/dist/{credentials-VOZTILFO.js → credentials-4BPEXA3E.js} +3 -3
  79. package/dist/{critique-65W63MFZ.js → critique-3XJG44NG.js} +5 -5
  80. package/dist/{critique-ZS4ON3SU.js → critique-LU27A765.js} +3 -3
  81. package/dist/{crm-52ROSWH5.js → crm-GOE6ZO5N.js} +4 -4
  82. package/dist/{crm-R5IXIFIV.js → crm-NEI6E2T2.js} +4 -4
  83. package/dist/{customers-4AWBFDUF.js → customers-USB6VCMU.js} +5 -5
  84. package/dist/{delete-M2GDLPYN.js → delete-67XFFHUY.js} +2 -2
  85. package/dist/{delete-HGHXY24R.js → delete-BT7I3EMN.js} +3 -3
  86. package/dist/{delete-AIGE4Y4H.js → delete-ONE22VRX.js} +3 -3
  87. package/dist/{demographics-NTWB2IMG.js → demographics-R4LCQGDJ.js} +3 -3
  88. package/dist/{discard-2WWQG6OU.js → discard-BOPTV4V5.js} +3 -3
  89. package/dist/{domain-Y2LT6JLT.js → domain-B54ILSOO.js} +3 -3
  90. package/dist/{draft-SLHAKJ2A.js → draft-DWSBVJUF.js} +3 -3
  91. package/dist/{draft-FJ7WHIXW.js → draft-J4SGNGGW.js} +3 -3
  92. package/dist/{draft-EJXNNJ3Y.js → draft-ROERDGSK.js} +4 -4
  93. package/dist/{facets-U7AQC4H6.js → facets-FUTIWQXK.js} +3 -3
  94. package/dist/{feedback-XNJQ63DS.js → feedback-C6CBUUDA.js} +2 -2
  95. package/dist/{feedback-record-FDLMWMDG.js → feedback-record-FM5MW2YV.js} +7 -7
  96. package/dist/{fetch-W7NULDEO.js → fetch-D7JPGEYZ.js} +3 -3
  97. package/dist/{flows-KABCBS3S.js → flows-L6BF3TDT.js} +20 -17
  98. package/dist/flows-L6BF3TDT.js.map +1 -0
  99. package/dist/{fonts-EMMX3KII.js → fonts-THAAZY7Z.js} +5 -5
  100. package/dist/{forecast-GNODEIIC.js → forecast-RYYVMNYT.js} +3 -3
  101. package/dist/{funnel-AAX27NH4.js → funnel-SK7WDPRS.js} +4 -4
  102. package/dist/{get-RTVUZM6E.js → get-3STPGBX3.js} +3 -3
  103. package/dist/{get-QEYJRLV3.js → get-YBIF3H52.js} +6 -4
  104. package/dist/get-YBIF3H52.js.map +1 -0
  105. package/dist/{google-ads-OK6IG3UV.js → google-ads-YD7LYWGY.js} +3 -3
  106. package/dist/{history-PQUJKK26.js → history-RWWBR4TN.js} +3 -3
  107. package/dist/{hubspot-Y77VLY6Y.js → hubspot-E65QNOI4.js} +7 -7
  108. package/dist/{ideas-MIDU7YOA.js → ideas-ZB7O7T5I.js} +2 -2
  109. package/dist/{images-S254MS6O.js → images-U4DKZQTE.js} +4 -4
  110. package/dist/{ingest-YV2NLDBE.js → ingest-MZXGMFA5.js} +3 -3
  111. package/dist/{ingest-J4I3HKM3.js → ingest-ROEMTZMG.js} +2 -2
  112. package/dist/{inspect-Q5NHBBHX.js → inspect-MCMUJPXU.js} +3 -3
  113. package/dist/{keyword-metrics-PDY4ZXSP.js → keyword-metrics-MLFTDAS4.js} +3 -3
  114. package/dist/{keywords-for-site-GALSCV77.js → keywords-for-site-4WUBJNTI.js} +3 -3
  115. package/dist/{landing-CJYGWCK4.js → landing-5GDWJN4C.js} +2 -2
  116. package/dist/{leads-PHKG6CP3.js → leads-LDOOJI5K.js} +3 -3
  117. package/dist/{learn-3VO6DXUX.js → learn-MMIGRLCP.js} +4 -4
  118. package/dist/{line-item-writes-E6MZPIZZ.js → line-item-writes-LFDWJBQG.js} +3 -3
  119. package/dist/{line-items-7ZGIKEF2.js → line-items-T3EVXB4M.js} +5 -5
  120. package/dist/{link-QYAW6A2W.js → link-M5ESAD5Y.js} +3 -3
  121. package/dist/{linkedin-FFSDSGGS.js → linkedin-4FNKZNIR.js} +26 -26
  122. package/dist/{list-SAV3LQHY.js → list-EF6QI4JT.js} +3 -3
  123. package/dist/{list-5IC6KIKO.js → list-FNW254C3.js} +3 -3
  124. package/dist/{list-NVQC5SNY.js → list-XWUTPJRQ.js} +2 -2
  125. package/dist/{log-XZPVOALD.js → log-5MESJJLM.js} +3 -3
  126. package/dist/{make-LCNP76OF.js → make-ATEHKECL.js} +10 -10
  127. package/dist/{map-4J5WIWIG.js → map-5NONUYFP.js} +4 -4
  128. package/dist/{mcp-XXD7ZQCP.js → mcp-CGITBQQA.js} +2 -2
  129. package/dist/{media-sources-O6ZRUA3N.js → media-sources-6TFUGPE2.js} +2 -2
  130. package/dist/{members-D5ZYLS4Y.js → members-R2GQVSVA.js} +3 -3
  131. package/dist/{normalize-PCNC6E2N.js → normalize-L6WBNGQA.js} +6 -3
  132. package/dist/{normalize-PCNC6E2N.js.map → normalize-L6WBNGQA.js.map} +1 -1
  133. package/dist/{options-MQ65VEVD.js → options-YT2ZGB2Z.js} +6 -6
  134. package/dist/{performance-6QW2KEEQ.js → performance-52IILAFE.js} +4 -4
  135. package/dist/{promoted-tweet-writes-JPLHY3GM.js → promoted-tweet-writes-QVIKWEIZ.js} +3 -3
  136. package/dist/{promoted-tweets-SURKMHFI.js → promoted-tweets-2AALRV5O.js} +3 -3
  137. package/dist/{publish-HCQ6MXLB.js → publish-XFLOZAOQ.js} +3 -3
  138. package/dist/{reddit-GIP3ADMS.js → reddit-HFBAGWNP.js} +4 -4
  139. package/dist/{refresh-UXQSLCR3.js → refresh-INKIU3QV.js} +2 -2
  140. package/dist/{release-5KVLXNP6.js → release-C2MFXAPJ.js} +3 -3
  141. package/dist/{remove-6FIVKCJI.js → remove-JWSVNUJ4.js} +2 -2
  142. package/dist/{reopen-YM5LNOLB.js → reopen-3GM4OSLZ.js} +3 -3
  143. package/dist/{rerun-CET74VPF.js → rerun-FCZRSS3H.js} +10 -10
  144. package/dist/{research-EY7C7JJY.js → research-EBQ5KWOS.js} +10 -10
  145. package/dist/{research-YOGE7GT2.js → research-HUMDT7T4.js} +2 -2
  146. package/dist/{reset-OLVB6AE6.js → reset-3BEGDSBW.js} +2 -2
  147. package/dist/{reset-C4UHQ3EU.js → reset-TVDYP2VK.js} +2 -2
  148. package/dist/{resolve-XYH2GDAE.js → resolve-OQKUGWEI.js} +3 -3
  149. package/dist/{retry-726GKI6V.js → retry-EJBF6GBJ.js} +2 -2
  150. package/dist/{retry-7EELDEQP.js → retry-GUHOWYO2.js} +2 -2
  151. package/dist/{run-P4KR2MXC.js → run-3D6QZC6L.js} +3 -3
  152. package/dist/{run-XQ7EM3JT.js → run-CUUAWKAZ.js} +10 -10
  153. package/dist/{scaffold-ad-U2KSHKBC.js → scaffold-ad-AYKWASWY.js} +8 -8
  154. package/dist/{scaffold-static-ad-63LQKUSO.js → scaffold-static-ad-IEZEQW4N.js} +12 -12
  155. package/dist/{scaffold-video-MUS6LHJQ.js → scaffold-video-YMN7AJS4.js} +7 -7
  156. package/dist/{schedule-RDK4GEPI.js → schedule-QVYVMRIY.js} +2 -2
  157. package/dist/{scheduled-agents-6U44QE76.js → scheduled-agents-CNIGCLAP.js} +11 -11
  158. package/dist/{schema-CHJDC7GQ.js → schema-7UUVQ4RH.js} +7 -4
  159. package/dist/{schema-CHJDC7GQ.js.map → schema-7UUVQ4RH.js.map} +1 -1
  160. package/dist/{search-PMJRU3C4.js → search-XUGIKFW3.js} +2 -2
  161. package/dist/{select-4Z7BW5RH.js → select-LSS7ZJSB.js} +7 -7
  162. package/dist/{set-prompt-OB2V3XJP.js → set-prompt-P3WR2TZX.js} +5 -5
  163. package/dist/{setup-links-REPREN3C.js → setup-links-4VILWID2.js} +3 -3
  164. package/dist/{site-WFSWIA3S.js → site-TLJVSZQF.js} +4 -4
  165. package/dist/{sources-YBQ6KPFM.js → sources-4MKBWFWG.js} +6 -6
  166. package/dist/{sources-AMI2AWKZ.js → sources-7FCRKPXJ.js} +6 -6
  167. package/dist/{stale-DAYXOY3Z.js → stale-7VJECYYJ.js} +6 -6
  168. package/dist/{status-7F2KHFGA.js → status-WZKAKUG4.js} +3 -3
  169. package/dist/{sync-GWTLKZTU.js → sync-DEWLEMTT.js} +2 -2
  170. package/dist/{sync-definition-ILS2B2BJ.js → sync-definition-ARIX5XWM.js} +7 -7
  171. package/dist/{tags-3WPW6PTV.js → tags-ANV54THE.js} +4 -4
  172. package/dist/{tags-FJIBBBRG.js → tags-IWN3QPK5.js} +3 -3
  173. package/dist/{tags-ABHSX6M5.js → tags-O76MDVID.js} +3 -3
  174. package/dist/{tags-6342FQEB.js → tags-RBB4TU7U.js} +3 -3
  175. package/dist/{tags-KFYLZLB3.js → tags-V5FR3DYU.js} +2 -2
  176. package/dist/{targeting-criteria-NR47AF5C.js → targeting-criteria-6IOXVE4K.js} +3 -3
  177. package/dist/{targets-L56KOVQE.js → targets-FFLV6OMF.js} +3 -3
  178. package/dist/{templates-B6XGDYUF.js → templates-Y3ZLB7MK.js} +3 -3
  179. package/dist/{testimonials-CVC4YIXO.js → testimonials-FCYS4NKB.js} +6 -6
  180. package/dist/{top-companies-45X3DT7Z.js → top-companies-BL4F7OPI.js} +3 -3
  181. package/dist/{translate-TA5KQIU7.js → translate-GGONJG62.js} +10 -10
  182. package/dist/{triggers-22EMIVFD.js → triggers-6Q3YRHZS.js} +3 -3
  183. package/dist/{unlink-65KUN6ID.js → unlink-WDSOVBFL.js} +3 -3
  184. package/dist/{unstage-2E3I5SWF.js → unstage-JYJIKPB5.js} +3 -3
  185. package/dist/{update-2S7CSEAW.js → update-CWZVKOUB.js} +3 -3
  186. package/dist/{update-7NCOTAQZ.js → update-FUYXN33G.js} +3 -3
  187. package/dist/{update-KREBPGBH.js → update-IXSCDBM4.js} +3 -3
  188. package/dist/{update-D6DJC6T7.js → update-WSG6RVFX.js} +2 -2
  189. package/dist/{upload-O6NHRPS7.js → upload-CKV2XS3G.js} +3 -3
  190. package/dist/{url-params-3EFGVTZZ.js → url-params-UJSNI4XC.js} +3 -3
  191. package/dist/{validate-LDBAAXQO.js → validate-FSFELDFZ.js} +5 -5
  192. package/dist/{videos-YSXYGTBM.js → videos-FAKURRTG.js} +5 -5
  193. package/dist/{web-IGIGVEKS.js → web-RRGHSAFY.js} +3 -3
  194. package/dist/{winning-ads-ASH5DSV3.js → winning-ads-HRSCX6O2.js} +2 -2
  195. package/dist/{write-commands-5C7FUOVN.js → write-commands-TAG7DQKT.js} +4 -4
  196. package/dist/{x-BFSKFCZD.js → x-FBWHL3PL.js} +6 -6
  197. package/package.json +1 -1
  198. package/dist/add-5GAN6CVO.js.map +0 -1
  199. package/dist/chunk-DWHIOO7E.js.map +0 -1
  200. package/dist/chunk-XF4JUKVF.js.map +0 -1
  201. package/dist/chunk-YRQYA2LR.js.map +0 -1
  202. package/dist/flows-KABCBS3S.js.map +0 -1
  203. package/dist/get-QEYJRLV3.js.map +0 -1
  204. /package/dist/{account-AL2ZDSR7.js.map → account-2SVI5OK7.js.map} +0 -0
  205. /package/dist/{accounts-HAFCLSR5.js.map → accounts-2XAOZX3U.js.map} +0 -0
  206. /package/dist/{accounts-O5MFO3QQ.js.map → accounts-U4BGY3QU.js.map} +0 -0
  207. /package/dist/{actions-P35MEMGN.js.map → actions-6EJU7CAQ.js.map} +0 -0
  208. /package/dist/{add-6DTC6X5G.js.map → add-IPGEYQQG.js.map} +0 -0
  209. /package/dist/{ads-C47NA2HH.js.map → ads-6MXVIV62.js.map} +0 -0
  210. /package/dist/{advertisers-AE75CGVE.js.map → advertisers-JG4DZ6SB.js.map} +0 -0
  211. /package/dist/{analytics-FKCXIMPO.js.map → analytics-IMYVNQIX.js.map} +0 -0
  212. /package/dist/{analytics-FPWQQGRM.js.map → analytics-RNEUAKC4.js.map} +0 -0
  213. /package/dist/{assign-ABN2AQ4J.js.map → assign-46TXQRT5.js.map} +0 -0
  214. /package/dist/{audience-size-GNBJY35X.js.map → audience-size-5TNQO3IL.js.map} +0 -0
  215. /package/dist/{audit-3VS63TBW.js.map → audit-XRE7XH3Q.js.map} +0 -0
  216. /package/dist/{autocomplete-VS3XG3B7.js.map → autocomplete-2ZWSQ6QQ.js.map} +0 -0
  217. /package/dist/{avatars-EKCKHCC3.js.map → avatars-M6NSD3KS.js.map} +0 -0
  218. /package/dist/{bid-pricing-Q72B65AY.js.map → bid-pricing-OIVPZCWW.js.map} +0 -0
  219. /package/dist/{brand-C6PFGGQN.js.map → brand-YDNX7LYQ.js.map} +0 -0
  220. /package/dist/{brief-UO52ZHFI.js.map → brief-EK6ULGXD.js.map} +0 -0
  221. /package/dist/{campaign-groups-KFFYQPU3.js.map → campaign-groups-TAP6LK6F.js.map} +0 -0
  222. /package/dist/{campaign-writes-FHOS5XZY.js.map → campaign-writes-4SWPBZE6.js.map} +0 -0
  223. /package/dist/{campaigns-KZYZTXDS.js.map → campaigns-AQAJN23T.js.map} +0 -0
  224. /package/dist/{campaigns-2NHWBF5C.js.map → campaigns-ROMLENHI.js.map} +0 -0
  225. /package/dist/{canvas-DPCBGW7K.js.map → canvas-XYCDLDRS.js.map} +0 -0
  226. /package/dist/{capabilities-DJFTRJKS.js.map → capabilities-GGPTIAFO.js.map} +0 -0
  227. /package/dist/{chats-D2CSDX5Q.js.map → chats-G343BSVB.js.map} +0 -0
  228. /package/dist/{chunk-OZRUJVIQ.js.map → chunk-355DHOHD.js.map} +0 -0
  229. /package/dist/{chunk-CSYSX4D2.js.map → chunk-3URK7DAA.js.map} +0 -0
  230. /package/dist/{chunk-A4LOJ2VD.js.map → chunk-3YOFT3AP.js.map} +0 -0
  231. /package/dist/{chunk-647RO73Q.js.map → chunk-542XAHNT.js.map} +0 -0
  232. /package/dist/{chunk-5ZDLTE5T.js.map → chunk-64WGDUXH.js.map} +0 -0
  233. /package/dist/{chunk-HBTF25YG.js.map → chunk-7WD2RW2R.js.map} +0 -0
  234. /package/dist/{chunk-QRP3PXWN.js.map → chunk-B6GITCGN.js.map} +0 -0
  235. /package/dist/{chunk-IBURXTL4.js.map → chunk-D5XAVXUZ.js.map} +0 -0
  236. /package/dist/{chunk-JQJDXPCO.js.map → chunk-F4F3PLN3.js.map} +0 -0
  237. /package/dist/{chunk-NPY4QUMQ.js.map → chunk-LZSXZB2F.js.map} +0 -0
  238. /package/dist/{chunk-3IBYKLXR.js.map → chunk-MURPCCLG.js.map} +0 -0
  239. /package/dist/{chunk-2QHODRR6.js.map → chunk-NEXCBTBZ.js.map} +0 -0
  240. /package/dist/{chunk-AEOSAVVL.js.map → chunk-NR2TDASR.js.map} +0 -0
  241. /package/dist/{chunk-KHRXPQID.js.map → chunk-OVT676K6.js.map} +0 -0
  242. /package/dist/{chunk-FD27ZDVP.js.map → chunk-P2RE52V7.js.map} +0 -0
  243. /package/dist/{chunk-Z2EOC6PL.js.map → chunk-P6ICBEE4.js.map} +0 -0
  244. /package/dist/{chunk-TT5R35PJ.js.map → chunk-PLGIETFZ.js.map} +0 -0
  245. /package/dist/{chunk-4AUMTNVB.js.map → chunk-QJNTI36W.js.map} +0 -0
  246. /package/dist/{chunk-5Y5UAJWD.js.map → chunk-TD6GIMV6.js.map} +0 -0
  247. /package/dist/{chunk-ZEYEWPK6.js.map → chunk-TESII3FM.js.map} +0 -0
  248. /package/dist/{chunk-GBMP4F45.js.map → chunk-TXI5OWCF.js.map} +0 -0
  249. /package/dist/{chunk-IR6D7K4H.js.map → chunk-UC7VFFXR.js.map} +0 -0
  250. /package/dist/{chunk-7YCRFMXF.js.map → chunk-UNI5AASR.js.map} +0 -0
  251. /package/dist/{chunk-3G3ZDLMI.js.map → chunk-UX5HYEN3.js.map} +0 -0
  252. /package/dist/{chunk-MXYBTMKB.js.map → chunk-V4RGDJAN.js.map} +0 -0
  253. /package/dist/{chunk-SHL7LOC3.js.map → chunk-W2TJIZS2.js.map} +0 -0
  254. /package/dist/{chunk-4BQXAE7Z.js.map → chunk-W5VGWEAG.js.map} +0 -0
  255. /package/dist/{chunk-S77PZVYM.js.map → chunk-WDZOVF6P.js.map} +0 -0
  256. /package/dist/{chunk-Y6O7EWYY.js.map → chunk-YCOP4FGJ.js.map} +0 -0
  257. /package/dist/{claim-FZ5OQLMU.js.map → claim-INJHV4FM.js.map} +0 -0
  258. /package/dist/{companies-DNI634RC.js.map → companies-3REQZWKU.js.map} +0 -0
  259. /package/dist/{complete-2FZMGJV5.js.map → complete-DX2DAAEZ.js.map} +0 -0
  260. /package/dist/{connect-QCOGEPP4.js.map → connect-O4OGKMAK.js.map} +0 -0
  261. /package/dist/{conversation-6IOGV7B7.js.map → conversation-6A2X5W64.js.map} +0 -0
  262. /package/dist/{conversions-4SRZPBBX.js.map → conversions-PT6UDIX3.js.map} +0 -0
  263. /package/dist/{create-VXM34ZWH.js.map → create-BR3Q4A4C.js.map} +0 -0
  264. /package/dist/{create-BJNMO6HT.js.map → create-EOLNJGAX.js.map} +0 -0
  265. /package/dist/{create-FX4OJ2XF.js.map → create-I2UB7FWX.js.map} +0 -0
  266. /package/dist/{create-RM7HV77Y.js.map → create-S47CLYXJ.js.map} +0 -0
  267. /package/dist/{creatives-SJTJU6VT.js.map → creatives-D3NXWVUF.js.map} +0 -0
  268. /package/dist/{creatives-JSWBFQ5R.js.map → creatives-FBH4DKSX.js.map} +0 -0
  269. /package/dist/{credentials-VOZTILFO.js.map → credentials-4BPEXA3E.js.map} +0 -0
  270. /package/dist/{critique-65W63MFZ.js.map → critique-3XJG44NG.js.map} +0 -0
  271. /package/dist/{critique-ZS4ON3SU.js.map → critique-LU27A765.js.map} +0 -0
  272. /package/dist/{crm-52ROSWH5.js.map → crm-GOE6ZO5N.js.map} +0 -0
  273. /package/dist/{crm-R5IXIFIV.js.map → crm-NEI6E2T2.js.map} +0 -0
  274. /package/dist/{customers-4AWBFDUF.js.map → customers-USB6VCMU.js.map} +0 -0
  275. /package/dist/{delete-M2GDLPYN.js.map → delete-67XFFHUY.js.map} +0 -0
  276. /package/dist/{delete-HGHXY24R.js.map → delete-BT7I3EMN.js.map} +0 -0
  277. /package/dist/{delete-AIGE4Y4H.js.map → delete-ONE22VRX.js.map} +0 -0
  278. /package/dist/{demographics-NTWB2IMG.js.map → demographics-R4LCQGDJ.js.map} +0 -0
  279. /package/dist/{discard-2WWQG6OU.js.map → discard-BOPTV4V5.js.map} +0 -0
  280. /package/dist/{domain-Y2LT6JLT.js.map → domain-B54ILSOO.js.map} +0 -0
  281. /package/dist/{draft-SLHAKJ2A.js.map → draft-DWSBVJUF.js.map} +0 -0
  282. /package/dist/{draft-FJ7WHIXW.js.map → draft-J4SGNGGW.js.map} +0 -0
  283. /package/dist/{draft-EJXNNJ3Y.js.map → draft-ROERDGSK.js.map} +0 -0
  284. /package/dist/{facets-U7AQC4H6.js.map → facets-FUTIWQXK.js.map} +0 -0
  285. /package/dist/{feedback-XNJQ63DS.js.map → feedback-C6CBUUDA.js.map} +0 -0
  286. /package/dist/{feedback-record-FDLMWMDG.js.map → feedback-record-FM5MW2YV.js.map} +0 -0
  287. /package/dist/{fetch-W7NULDEO.js.map → fetch-D7JPGEYZ.js.map} +0 -0
  288. /package/dist/{fonts-EMMX3KII.js.map → fonts-THAAZY7Z.js.map} +0 -0
  289. /package/dist/{forecast-GNODEIIC.js.map → forecast-RYYVMNYT.js.map} +0 -0
  290. /package/dist/{funnel-AAX27NH4.js.map → funnel-SK7WDPRS.js.map} +0 -0
  291. /package/dist/{get-RTVUZM6E.js.map → get-3STPGBX3.js.map} +0 -0
  292. /package/dist/{google-ads-OK6IG3UV.js.map → google-ads-YD7LYWGY.js.map} +0 -0
  293. /package/dist/{history-PQUJKK26.js.map → history-RWWBR4TN.js.map} +0 -0
  294. /package/dist/{hubspot-Y77VLY6Y.js.map → hubspot-E65QNOI4.js.map} +0 -0
  295. /package/dist/{ideas-MIDU7YOA.js.map → ideas-ZB7O7T5I.js.map} +0 -0
  296. /package/dist/{images-S254MS6O.js.map → images-U4DKZQTE.js.map} +0 -0
  297. /package/dist/{ingest-YV2NLDBE.js.map → ingest-MZXGMFA5.js.map} +0 -0
  298. /package/dist/{ingest-J4I3HKM3.js.map → ingest-ROEMTZMG.js.map} +0 -0
  299. /package/dist/{inspect-Q5NHBBHX.js.map → inspect-MCMUJPXU.js.map} +0 -0
  300. /package/dist/{keyword-metrics-PDY4ZXSP.js.map → keyword-metrics-MLFTDAS4.js.map} +0 -0
  301. /package/dist/{keywords-for-site-GALSCV77.js.map → keywords-for-site-4WUBJNTI.js.map} +0 -0
  302. /package/dist/{landing-CJYGWCK4.js.map → landing-5GDWJN4C.js.map} +0 -0
  303. /package/dist/{leads-PHKG6CP3.js.map → leads-LDOOJI5K.js.map} +0 -0
  304. /package/dist/{learn-3VO6DXUX.js.map → learn-MMIGRLCP.js.map} +0 -0
  305. /package/dist/{line-item-writes-E6MZPIZZ.js.map → line-item-writes-LFDWJBQG.js.map} +0 -0
  306. /package/dist/{line-items-7ZGIKEF2.js.map → line-items-T3EVXB4M.js.map} +0 -0
  307. /package/dist/{link-QYAW6A2W.js.map → link-M5ESAD5Y.js.map} +0 -0
  308. /package/dist/{linkedin-FFSDSGGS.js.map → linkedin-4FNKZNIR.js.map} +0 -0
  309. /package/dist/{list-SAV3LQHY.js.map → list-EF6QI4JT.js.map} +0 -0
  310. /package/dist/{list-5IC6KIKO.js.map → list-FNW254C3.js.map} +0 -0
  311. /package/dist/{list-NVQC5SNY.js.map → list-XWUTPJRQ.js.map} +0 -0
  312. /package/dist/{log-XZPVOALD.js.map → log-5MESJJLM.js.map} +0 -0
  313. /package/dist/{make-LCNP76OF.js.map → make-ATEHKECL.js.map} +0 -0
  314. /package/dist/{map-4J5WIWIG.js.map → map-5NONUYFP.js.map} +0 -0
  315. /package/dist/{mcp-XXD7ZQCP.js.map → mcp-CGITBQQA.js.map} +0 -0
  316. /package/dist/{media-sources-O6ZRUA3N.js.map → media-sources-6TFUGPE2.js.map} +0 -0
  317. /package/dist/{members-D5ZYLS4Y.js.map → members-R2GQVSVA.js.map} +0 -0
  318. /package/dist/{options-MQ65VEVD.js.map → options-YT2ZGB2Z.js.map} +0 -0
  319. /package/dist/{performance-6QW2KEEQ.js.map → performance-52IILAFE.js.map} +0 -0
  320. /package/dist/{promoted-tweet-writes-JPLHY3GM.js.map → promoted-tweet-writes-QVIKWEIZ.js.map} +0 -0
  321. /package/dist/{promoted-tweets-SURKMHFI.js.map → promoted-tweets-2AALRV5O.js.map} +0 -0
  322. /package/dist/{publish-HCQ6MXLB.js.map → publish-XFLOZAOQ.js.map} +0 -0
  323. /package/dist/{reddit-GIP3ADMS.js.map → reddit-HFBAGWNP.js.map} +0 -0
  324. /package/dist/{refresh-UXQSLCR3.js.map → refresh-INKIU3QV.js.map} +0 -0
  325. /package/dist/{release-5KVLXNP6.js.map → release-C2MFXAPJ.js.map} +0 -0
  326. /package/dist/{remove-6FIVKCJI.js.map → remove-JWSVNUJ4.js.map} +0 -0
  327. /package/dist/{reopen-YM5LNOLB.js.map → reopen-3GM4OSLZ.js.map} +0 -0
  328. /package/dist/{rerun-CET74VPF.js.map → rerun-FCZRSS3H.js.map} +0 -0
  329. /package/dist/{research-EY7C7JJY.js.map → research-EBQ5KWOS.js.map} +0 -0
  330. /package/dist/{research-YOGE7GT2.js.map → research-HUMDT7T4.js.map} +0 -0
  331. /package/dist/{reset-OLVB6AE6.js.map → reset-3BEGDSBW.js.map} +0 -0
  332. /package/dist/{reset-C4UHQ3EU.js.map → reset-TVDYP2VK.js.map} +0 -0
  333. /package/dist/{resolve-XYH2GDAE.js.map → resolve-OQKUGWEI.js.map} +0 -0
  334. /package/dist/{retry-726GKI6V.js.map → retry-EJBF6GBJ.js.map} +0 -0
  335. /package/dist/{retry-7EELDEQP.js.map → retry-GUHOWYO2.js.map} +0 -0
  336. /package/dist/{run-P4KR2MXC.js.map → run-3D6QZC6L.js.map} +0 -0
  337. /package/dist/{run-XQ7EM3JT.js.map → run-CUUAWKAZ.js.map} +0 -0
  338. /package/dist/{scaffold-ad-U2KSHKBC.js.map → scaffold-ad-AYKWASWY.js.map} +0 -0
  339. /package/dist/{scaffold-static-ad-63LQKUSO.js.map → scaffold-static-ad-IEZEQW4N.js.map} +0 -0
  340. /package/dist/{scaffold-video-MUS6LHJQ.js.map → scaffold-video-YMN7AJS4.js.map} +0 -0
  341. /package/dist/{schedule-RDK4GEPI.js.map → schedule-QVYVMRIY.js.map} +0 -0
  342. /package/dist/{scheduled-agents-6U44QE76.js.map → scheduled-agents-CNIGCLAP.js.map} +0 -0
  343. /package/dist/{search-PMJRU3C4.js.map → search-XUGIKFW3.js.map} +0 -0
  344. /package/dist/{select-4Z7BW5RH.js.map → select-LSS7ZJSB.js.map} +0 -0
  345. /package/dist/{set-prompt-OB2V3XJP.js.map → set-prompt-P3WR2TZX.js.map} +0 -0
  346. /package/dist/{setup-links-REPREN3C.js.map → setup-links-4VILWID2.js.map} +0 -0
  347. /package/dist/{site-WFSWIA3S.js.map → site-TLJVSZQF.js.map} +0 -0
  348. /package/dist/{sources-YBQ6KPFM.js.map → sources-4MKBWFWG.js.map} +0 -0
  349. /package/dist/{sources-AMI2AWKZ.js.map → sources-7FCRKPXJ.js.map} +0 -0
  350. /package/dist/{stale-DAYXOY3Z.js.map → stale-7VJECYYJ.js.map} +0 -0
  351. /package/dist/{status-7F2KHFGA.js.map → status-WZKAKUG4.js.map} +0 -0
  352. /package/dist/{sync-GWTLKZTU.js.map → sync-DEWLEMTT.js.map} +0 -0
  353. /package/dist/{sync-definition-ILS2B2BJ.js.map → sync-definition-ARIX5XWM.js.map} +0 -0
  354. /package/dist/{tags-3WPW6PTV.js.map → tags-ANV54THE.js.map} +0 -0
  355. /package/dist/{tags-FJIBBBRG.js.map → tags-IWN3QPK5.js.map} +0 -0
  356. /package/dist/{tags-ABHSX6M5.js.map → tags-O76MDVID.js.map} +0 -0
  357. /package/dist/{tags-6342FQEB.js.map → tags-RBB4TU7U.js.map} +0 -0
  358. /package/dist/{tags-KFYLZLB3.js.map → tags-V5FR3DYU.js.map} +0 -0
  359. /package/dist/{targeting-criteria-NR47AF5C.js.map → targeting-criteria-6IOXVE4K.js.map} +0 -0
  360. /package/dist/{targets-L56KOVQE.js.map → targets-FFLV6OMF.js.map} +0 -0
  361. /package/dist/{templates-B6XGDYUF.js.map → templates-Y3ZLB7MK.js.map} +0 -0
  362. /package/dist/{testimonials-CVC4YIXO.js.map → testimonials-FCYS4NKB.js.map} +0 -0
  363. /package/dist/{top-companies-45X3DT7Z.js.map → top-companies-BL4F7OPI.js.map} +0 -0
  364. /package/dist/{translate-TA5KQIU7.js.map → translate-GGONJG62.js.map} +0 -0
  365. /package/dist/{triggers-22EMIVFD.js.map → triggers-6Q3YRHZS.js.map} +0 -0
  366. /package/dist/{unlink-65KUN6ID.js.map → unlink-WDSOVBFL.js.map} +0 -0
  367. /package/dist/{unstage-2E3I5SWF.js.map → unstage-JYJIKPB5.js.map} +0 -0
  368. /package/dist/{update-2S7CSEAW.js.map → update-CWZVKOUB.js.map} +0 -0
  369. /package/dist/{update-7NCOTAQZ.js.map → update-FUYXN33G.js.map} +0 -0
  370. /package/dist/{update-KREBPGBH.js.map → update-IXSCDBM4.js.map} +0 -0
  371. /package/dist/{update-D6DJC6T7.js.map → update-WSG6RVFX.js.map} +0 -0
  372. /package/dist/{upload-O6NHRPS7.js.map → upload-CKV2XS3G.js.map} +0 -0
  373. /package/dist/{url-params-3EFGVTZZ.js.map → url-params-UJSNI4XC.js.map} +0 -0
  374. /package/dist/{validate-LDBAAXQO.js.map → validate-FSFELDFZ.js.map} +0 -0
  375. /package/dist/{videos-YSXYGTBM.js.map → videos-FAKURRTG.js.map} +0 -0
  376. /package/dist/{web-IGIGVEKS.js.map → web-RRGHSAFY.js.map} +0 -0
  377. /package/dist/{winning-ads-ASH5DSV3.js.map → winning-ads-HRSCX6O2.js.map} +0 -0
  378. /package/dist/{write-commands-5C7FUOVN.js.map → write-commands-TAG7DQKT.js.map} +0 -0
  379. /package/dist/{x-BFSKFCZD.js.map → x-FBWHL3PL.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  finalOutputLabelsFromCanvas,
3
3
  parseDefinitionStrategyFields
4
- } from "./chunk-FD27ZDVP.js";
4
+ } from "./chunk-P2RE52V7.js";
5
5
  import {
6
6
  readRenderState
7
- } from "./chunk-5Y5UAJWD.js";
7
+ } from "./chunk-TD6GIMV6.js";
8
8
  import {
9
9
  STATIC_AD_ROLE,
10
10
  formatOfAdaptId,
@@ -12,10 +12,10 @@ import {
12
12
  isSignatureLine,
13
13
  sameTag,
14
14
  seriesMemberAd
15
- } from "./chunk-Z2EOC6PL.js";
15
+ } from "./chunk-P6ICBEE4.js";
16
16
  import {
17
17
  fetchRunRecord
18
- } from "./chunk-A4LOJ2VD.js";
18
+ } from "./chunk-3YOFT3AP.js";
19
19
  import {
20
20
  localPathParam
21
21
  } from "./chunk-DZSIUEGH.js";
@@ -506,4 +506,4 @@ export {
506
506
  writeSeriesMemberCanvas,
507
507
  seriesRunHints
508
508
  };
509
- //# sourceMappingURL=chunk-IBURXTL4.js.map
509
+ //# sourceMappingURL=chunk-D5XAVXUZ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ACTION_TEMP_ID_PREFIX
3
- } from "./chunk-XF4JUKVF.js";
3
+ } from "./chunk-BAUSWB7O.js";
4
4
  import {
5
5
  ApiError
6
6
  } from "./chunk-XBOK23HI.js";
@@ -146,6 +146,14 @@ function buildListHints({ returned, limit }) {
146
146
  `This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog \u2014 re-run with --limit ${limit * 2} (or narrow with --status / --search).`
147
147
  ];
148
148
  }
149
+ function buildGetHints(detail) {
150
+ if (!detail || detail.action.status !== "pending" || detail.activeChat !== null) {
151
+ return [];
152
+ }
153
+ return [
154
+ `If you are working on this Task in this chat, claim it first so the Tasks page shows it in progress: baker actions claim ${detail.action._id}`
155
+ ];
156
+ }
149
157
 
150
158
  export {
151
159
  writeOk,
@@ -158,6 +166,7 @@ export {
158
166
  parsePriority,
159
167
  buildCreateHints,
160
168
  ACTIONS_LIST_DEFAULT_LIMIT,
161
- buildListHints
169
+ buildListHints,
170
+ buildGetHints
162
171
  };
163
- //# sourceMappingURL=chunk-3HJLHTWP.js.map
172
+ //# sourceMappingURL=chunk-EIVYFZ4N.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/actions/tagError.ts","../src/commands/actions/shared.ts"],"sourcesContent":["/**\n * Structured remediation for the one `actions` failure an agent cannot fix from\n * the message alone: an unknown `--tags` slug.\n *\n * The backend already inlines the valid taxonomy in the rejection text\n * (`unknownActionTagMessage`, packages/backend/convex/actionItems/tags/utils.ts),\n * but only `{ code, message }` crosses the HTTP boundary into `ApiError`. Parsing\n * the two lists back out here is what lets `error.fix` carry them as data, so the\n * agent retries in the same call instead of running `tags list` and trying again\n * — the \"list-then-retry dance\" this file exists to end.\n *\n * Fails closed: anything that doesn't match exactly returns `null` and the caller\n * emits the plain message it would have emitted anyway.\n */\n\nconst UNKNOWN_TAG_RE = /Unknown action tag\\(s\\): ([^.]+)\\. Valid tags: ([^.]+)\\./;\n\n// A type alias, not an interface: the envelope's `fix` slot is\n// `{ action, explanation } & Record<string, unknown>`, and only an alias is\n// structurally assignable to that index signature.\nexport type ActionTagFix = {\n action: \"retry_with_a_valid_tag\";\n explanation: string;\n unknownTags: string[];\n validTags: string[];\n mintCommand: string;\n listCommand: string;\n};\n\nfunction splitSlugs(list: string): string[] {\n return list\n .split(\",\")\n .map((slug) => slug.trim())\n .filter((slug) => slug.length > 0);\n}\n\nexport function actionTagFix(message: string): ActionTagFix | null {\n const match = UNKNOWN_TAG_RE.exec(message);\n if (!match) {\n return null;\n }\n const [, unknownList, validList] = match;\n const unknownTags = splitSlugs(unknownList ?? \"\");\n const validTags = splitSlugs(validList ?? \"\");\n const first = unknownTags[0];\n if (first === undefined || validTags.length === 0) {\n return null;\n }\n return {\n action: \"retry_with_a_valid_tag\",\n explanation:\n `The tag(s) ${unknownTags.join(\", \")} are not in this company's taxonomy. ` +\n `\\`validTags\\` below is the complete accepted set — pick from it and re-run the same command. ` +\n `Only mint a new tag when none of them names this work; a near-duplicate of an existing tag ` +\n `splits the backlog's filter instead of extending it.`,\n unknownTags,\n validTags,\n mintCommand: `baker actions tags create --slug ${first} --description \"<what ${first} groups>\"`,\n listCommand: \"baker actions tags list\",\n };\n}\n","import { ACTION_TEMP_ID_PREFIX } from \"@baker/api\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport type { AdvisoryHint } from \"./advisory.ts\";\nimport { actionTagFix } from \"./tagError.ts\";\n\nexport function writeOk<T = null>(data?: T): void {\n writeJson({ ok: true, data: (data ?? null) as T });\n}\n\nexport function failValidation(message: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\n// Every actions command routes its API failures through here, so attaching the\n// tag `fix` at this one point covers `create`, `update`, and any later write\n// path that hits the same strict tag gate. Non-tag errors are untouched.\nexport function failApi(err: unknown): never {\n if (err instanceof ApiError) {\n const fix = actionTagFix(err.message);\n writeJson({ ok: false, error: { code: err.code, message: err.message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n }\n if (err instanceof Error) {\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nexport function generateTempId(): string {\n return `${ACTION_TEMP_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function isTempId(id: string): boolean {\n return id.startsWith(ACTION_TEMP_ID_PREFIX);\n}\n\n// Parse a `--tags a,b,c` CSV flag into a deduped slug list. Returns undefined\n// when the flag was omitted so callers can distinguish \"not provided\" from\n// \"explicitly cleared\" (empty list).\nexport function parseTagList(value: unknown): string[] | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n return [...new Set(tags)];\n}\n\n// User priority for an action. Drives the dependency-aware \"Do first\" ordering\n// in `baker actions list`. Unset == \"normal\" (ranks as medium).\nexport const ACTION_PRIORITIES = [\"urgent\", \"high\", \"medium\", \"low\"] as const;\ntype ActionPriority = (typeof ACTION_PRIORITIES)[number];\n\n// Parse a `--priority` flag. Returns:\n// - undefined → flag omitted (leave unchanged on update; unset on create)\n// - null → explicit clear (only meaningful on update; \"\" or \"none\")\n// - one of ACTION_PRIORITIES on a valid value\n// Fails validation on any other string so the agent gets an immediate error.\nexport function parsePriority(\n value: unknown,\n { allowClear }: { allowClear: boolean },\n): ActionPriority | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n failValidation(\n `--priority must be one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n }\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"\") {\n if (allowClear) {\n return null;\n }\n return undefined;\n }\n if (allowClear && (trimmed === \"none\" || trimmed === \"clear\")) {\n return null;\n }\n if ((ACTION_PRIORITIES as readonly string[]).includes(trimmed)) {\n return trimmed as ActionPriority;\n }\n failValidation(\n `Unknown --priority \"${value}\". Expected one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n}\n\n// Two tiers, because the two counts want different amounts of words.\n//\n// The mean chat that files anything files ~2, and two Tasks is already above\n// the bar (\"a Task is the exception\"), so a 2→1 merge is the cheapest win\n// available — but firing the full paragraph on the modal chat is how you train\n// the model to skim `hints[]` and miss the do-it-now redirect above it. So 2\n// gets one sentence.\n//\n// Three is where \"capturing follow-ups\" stops looking like a backlog and\n// starts looking like a to-do list handed back to the user. That gets the\n// paragraph, from there on, every time — a legitimate 3-Task chat (an approved\n// plan) still benefits from being asked whether any two merge.\nexport const FAN_OUT_NUDGE_THRESHOLD = 2;\nexport const FAN_OUT_THRESHOLD = 3;\n\n// Every hint `create` returns, in reading order. The two that argue against\n// the action existing come first — by the time the agent reaches \"add tags\" it\n// has already accepted the action as a given.\nexport function buildCreateHints({\n advisory,\n description,\n tempId,\n tags,\n prioritySet,\n draftCreateCount,\n}: {\n /** What the Task reads as (`advisory.ts`), decided before: recurring work, or work a surface does now. */\n advisory: AdvisoryHint | null;\n description: string;\n tempId: string;\n tags: string[] | undefined;\n prioritySet: boolean;\n draftCreateCount: number;\n}): string[] {\n const hints: string[] = [];\n if (advisory) {\n hints.push(\n `${advisory.hint} If nothing actually blocks it: baker actions draft remove ${tempId}, then do the work.`,\n );\n }\n // The advisory reading is a judgment; this count is a fact. It keeps firing on\n // every further create — a chat that fanned out into a to-do list is the\n // failure the whole hint set exists to catch.\n if (draftCreateCount >= FAN_OUT_THRESHOLD) {\n hints.push(\n `${draftCreateCount} Tasks are staged in this chat. Re-read them with \\`baker actions draft\\`: can any be done now with a surface you already have, and do any two touch the same system (same container, same campaign, same page)? Those belong in ONE Task — fold them together with \\`baker actions update\\` and drop the extras with \\`baker actions draft remove <tempId>\\`.`,\n );\n } else if (draftCreateCount === FAN_OUT_NUDGE_THRESHOLD) {\n hints.push(\n `Second Task staged in this chat. If these two land on the same system (same container, same campaign, same page) they are ONE Task — fold them with \\`baker actions update\\` and drop the extra with \\`baker actions draft remove ${tempId}\\`.`,\n );\n }\n hints.push(`Link dependencies: baker actions link --blocker <id> --blocked ${tempId}`);\n if (!description) {\n hints.push(\"Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)\");\n }\n if (!tags || tags.length === 0) {\n hints.push(\n \"MISSING --tags. This action is invisible to the backlog's tag filter. Re-run with --tags <slug,...> (`baker actions tags list` for the taxonomy, `baker actions tags create --slug <slug>` to mint) — or `baker actions update <tempId> --tags <slug,...>`.\",\n );\n }\n if (!prioritySet) {\n hints.push(\n `MISSING --priority. Without it this action ranks as 'normal' (medium) in the do-first ordering, so urgent/high client work won't surface first. Re-run with --priority ${ACTION_PRIORITIES.join(\"|\")} — or \\`baker actions update <tempId> --priority <level>\\`.`,\n );\n }\n return hints;\n}\n\n/**\n * How far back a flat `baker actions list` reads when the caller does not say.\n *\n * Sent explicitly rather than left to the server default so this side knows the\n * window it asked for, and can therefore tell when a read came back exactly full\n * — the only evidence available that older Tasks exist. Without that the agent\n * reads a truncated backlog as a complete one and reports finished work that was\n * never seen.\n */\nexport const ACTIONS_LIST_DEFAULT_LIMIT = 500;\n\nexport function buildListHints({ returned, limit }: { returned: number; limit: number }): string[] {\n if (returned < limit) {\n return [];\n }\n return [\n `This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog — re-run with --limit ${limit * 2} (or narrow with --status / --search).`,\n ];\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/commands/actions/tagError.ts","../src/commands/actions/shared.ts"],"sourcesContent":["/**\n * Structured remediation for the one `actions` failure an agent cannot fix from\n * the message alone: an unknown `--tags` slug.\n *\n * The backend already inlines the valid taxonomy in the rejection text\n * (`unknownActionTagMessage`, packages/backend/convex/actionItems/tags/utils.ts),\n * but only `{ code, message }` crosses the HTTP boundary into `ApiError`. Parsing\n * the two lists back out here is what lets `error.fix` carry them as data, so the\n * agent retries in the same call instead of running `tags list` and trying again\n * — the \"list-then-retry dance\" this file exists to end.\n *\n * Fails closed: anything that doesn't match exactly returns `null` and the caller\n * emits the plain message it would have emitted anyway.\n */\n\nconst UNKNOWN_TAG_RE = /Unknown action tag\\(s\\): ([^.]+)\\. Valid tags: ([^.]+)\\./;\n\n// A type alias, not an interface: the envelope's `fix` slot is\n// `{ action, explanation } & Record<string, unknown>`, and only an alias is\n// structurally assignable to that index signature.\nexport type ActionTagFix = {\n action: \"retry_with_a_valid_tag\";\n explanation: string;\n unknownTags: string[];\n validTags: string[];\n mintCommand: string;\n listCommand: string;\n};\n\nfunction splitSlugs(list: string): string[] {\n return list\n .split(\",\")\n .map((slug) => slug.trim())\n .filter((slug) => slug.length > 0);\n}\n\nexport function actionTagFix(message: string): ActionTagFix | null {\n const match = UNKNOWN_TAG_RE.exec(message);\n if (!match) {\n return null;\n }\n const [, unknownList, validList] = match;\n const unknownTags = splitSlugs(unknownList ?? \"\");\n const validTags = splitSlugs(validList ?? \"\");\n const first = unknownTags[0];\n if (first === undefined || validTags.length === 0) {\n return null;\n }\n return {\n action: \"retry_with_a_valid_tag\",\n explanation:\n `The tag(s) ${unknownTags.join(\", \")} are not in this company's taxonomy. ` +\n `\\`validTags\\` below is the complete accepted set — pick from it and re-run the same command. ` +\n `Only mint a new tag when none of them names this work; a near-duplicate of an existing tag ` +\n `splits the backlog's filter instead of extending it.`,\n unknownTags,\n validTags,\n mintCommand: `baker actions tags create --slug ${first} --description \"<what ${first} groups>\"`,\n listCommand: \"baker actions tags list\",\n };\n}\n","import { ACTION_TEMP_ID_PREFIX } from \"@baker/api\";\nimport { ApiError } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\nimport type { AdvisoryHint } from \"./advisory.ts\";\nimport { actionTagFix } from \"./tagError.ts\";\n\nexport function writeOk<T = null>(data?: T): void {\n writeJson({ ok: true, data: (data ?? null) as T });\n}\n\nexport function failValidation(message: string): never {\n writeJson({ ok: false, error: { code: \"VALIDATION_ERROR\", message } });\n process.exit(1);\n}\n\n// Every actions command routes its API failures through here, so attaching the\n// tag `fix` at this one point covers `create`, `update`, and any later write\n// path that hits the same strict tag gate. Non-tag errors are untouched.\nexport function failApi(err: unknown): never {\n if (err instanceof ApiError) {\n const fix = actionTagFix(err.message);\n writeJson({ ok: false, error: { code: err.code, message: err.message, ...(fix ? { fix } : {}) } });\n process.exit(1);\n }\n if (err instanceof Error) {\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: err.message } });\n process.exit(1);\n }\n writeJson({ ok: false, error: { code: \"INTERNAL_ERROR\", message: \"Unexpected error\" } });\n process.exit(1);\n}\n\nexport function generateTempId(): string {\n return `${ACTION_TEMP_ID_PREFIX}${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function isTempId(id: string): boolean {\n return id.startsWith(ACTION_TEMP_ID_PREFIX);\n}\n\n// Parse a `--tags a,b,c` CSV flag into a deduped slug list. Returns undefined\n// when the flag was omitted so callers can distinguish \"not provided\" from\n// \"explicitly cleared\" (empty list).\nexport function parseTagList(value: unknown): string[] | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const tags = value\n .split(\",\")\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n return [...new Set(tags)];\n}\n\n// User priority for an action. Drives the dependency-aware \"Do first\" ordering\n// in `baker actions list`. Unset == \"normal\" (ranks as medium).\nexport const ACTION_PRIORITIES = [\"urgent\", \"high\", \"medium\", \"low\"] as const;\ntype ActionPriority = (typeof ACTION_PRIORITIES)[number];\n\n// Parse a `--priority` flag. Returns:\n// - undefined → flag omitted (leave unchanged on update; unset on create)\n// - null → explicit clear (only meaningful on update; \"\" or \"none\")\n// - one of ACTION_PRIORITIES on a valid value\n// Fails validation on any other string so the agent gets an immediate error.\nexport function parsePriority(\n value: unknown,\n { allowClear }: { allowClear: boolean },\n): ActionPriority | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n failValidation(\n `--priority must be one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n }\n const trimmed = value.trim().toLowerCase();\n if (trimmed === \"\") {\n if (allowClear) {\n return null;\n }\n return undefined;\n }\n if (allowClear && (trimmed === \"none\" || trimmed === \"clear\")) {\n return null;\n }\n if ((ACTION_PRIORITIES as readonly string[]).includes(trimmed)) {\n return trimmed as ActionPriority;\n }\n failValidation(\n `Unknown --priority \"${value}\". Expected one of: ${ACTION_PRIORITIES.join(\", \")}${allowClear ? \", or 'none' to clear\" : \"\"}.`,\n );\n}\n\n// Two tiers, because the two counts want different amounts of words.\n//\n// The mean chat that files anything files ~2, and two Tasks is already above\n// the bar (\"a Task is the exception\"), so a 2→1 merge is the cheapest win\n// available — but firing the full paragraph on the modal chat is how you train\n// the model to skim `hints[]` and miss the do-it-now redirect above it. So 2\n// gets one sentence.\n//\n// Three is where \"capturing follow-ups\" stops looking like a backlog and\n// starts looking like a to-do list handed back to the user. That gets the\n// paragraph, from there on, every time — a legitimate 3-Task chat (an approved\n// plan) still benefits from being asked whether any two merge.\nexport const FAN_OUT_NUDGE_THRESHOLD = 2;\nexport const FAN_OUT_THRESHOLD = 3;\n\n// Every hint `create` returns, in reading order. The two that argue against\n// the action existing come first — by the time the agent reaches \"add tags\" it\n// has already accepted the action as a given.\nexport function buildCreateHints({\n advisory,\n description,\n tempId,\n tags,\n prioritySet,\n draftCreateCount,\n}: {\n /** What the Task reads as (`advisory.ts`), decided before: recurring work, or work a surface does now. */\n advisory: AdvisoryHint | null;\n description: string;\n tempId: string;\n tags: string[] | undefined;\n prioritySet: boolean;\n draftCreateCount: number;\n}): string[] {\n const hints: string[] = [];\n if (advisory) {\n hints.push(\n `${advisory.hint} If nothing actually blocks it: baker actions draft remove ${tempId}, then do the work.`,\n );\n }\n // The advisory reading is a judgment; this count is a fact. It keeps firing on\n // every further create — a chat that fanned out into a to-do list is the\n // failure the whole hint set exists to catch.\n if (draftCreateCount >= FAN_OUT_THRESHOLD) {\n hints.push(\n `${draftCreateCount} Tasks are staged in this chat. Re-read them with \\`baker actions draft\\`: can any be done now with a surface you already have, and do any two touch the same system (same container, same campaign, same page)? Those belong in ONE Task — fold them together with \\`baker actions update\\` and drop the extras with \\`baker actions draft remove <tempId>\\`.`,\n );\n } else if (draftCreateCount === FAN_OUT_NUDGE_THRESHOLD) {\n hints.push(\n `Second Task staged in this chat. If these two land on the same system (same container, same campaign, same page) they are ONE Task — fold them with \\`baker actions update\\` and drop the extra with \\`baker actions draft remove ${tempId}\\`.`,\n );\n }\n hints.push(`Link dependencies: baker actions link --blocker <id> --blocked ${tempId}`);\n if (!description) {\n hints.push(\"Add description: baker actions update <tempId> --description '...' (what/why/where/done-when)\");\n }\n if (!tags || tags.length === 0) {\n hints.push(\n \"MISSING --tags. This action is invisible to the backlog's tag filter. Re-run with --tags <slug,...> (`baker actions tags list` for the taxonomy, `baker actions tags create --slug <slug>` to mint) — or `baker actions update <tempId> --tags <slug,...>`.\",\n );\n }\n if (!prioritySet) {\n hints.push(\n `MISSING --priority. Without it this action ranks as 'normal' (medium) in the do-first ordering, so urgent/high client work won't surface first. Re-run with --priority ${ACTION_PRIORITIES.join(\"|\")} — or \\`baker actions update <tempId> --priority <level>\\`.`,\n );\n }\n return hints;\n}\n\n/**\n * How far back a flat `baker actions list` reads when the caller does not say.\n *\n * Sent explicitly rather than left to the server default so this side knows the\n * window it asked for, and can therefore tell when a read came back exactly full\n * — the only evidence available that older Tasks exist. Without that the agent\n * reads a truncated backlog as a complete one and reports finished work that was\n * never seen.\n */\nexport const ACTIONS_LIST_DEFAULT_LIMIT = 500;\n\nexport function buildListHints({ returned, limit }: { returned: number; limit: number }): string[] {\n if (returned < limit) {\n return [];\n }\n return [\n `This list is capped at ${limit} Tasks and came back full, so older Tasks exist that are NOT shown. Do not treat it as the whole backlog — re-run with --limit ${limit * 2} (or narrow with --status / --search).`,\n ];\n}\n\n/**\n * A pending Task nobody is working on is one the agent was most likely asked to\n * solve: without a claim the dashboard shows no work in progress on it.\n */\nexport function buildGetHints(\n detail: { action: { _id: string; status: string }; activeChat: unknown } | null,\n): string[] {\n if (!detail || detail.action.status !== \"pending\" || detail.activeChat !== null) {\n return [];\n }\n return [\n `If you are working on this Task in this chat, claim it first so the Tasks page shows it in progress: baker actions claim ${detail.action._id}`,\n ];\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  SITE_COLLECTION_MODES,
3
3
  SITE_CONSENT_MODES,
4
4
  SITE_HOME_MODES
5
- } from "./chunk-XF4JUKVF.js";
5
+ } from "./chunk-BAUSWB7O.js";
6
6
  import {
7
7
  ApiError
8
8
  } from "./chunk-XBOK23HI.js";
@@ -100,4 +100,4 @@ export {
100
100
  parseSetArgs,
101
101
  failSite
102
102
  };
103
- //# sourceMappingURL=chunk-JQJDXPCO.js.map
103
+ //# sourceMappingURL=chunk-F4F3PLN3.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  flowsDir,
3
3
  walkNodes
4
- } from "./chunk-YRQYA2LR.js";
4
+ } from "./chunk-Q4JYX424.js";
5
5
 
6
6
  // src/commands/flows/value-expression.ts
7
7
  import { existsSync, readFileSync } from "fs";
@@ -619,4 +619,4 @@ export {
619
619
  otherSlots,
620
620
  buildFieldMapping
621
621
  };
622
- //# sourceMappingURL=chunk-NPY4QUMQ.js.map
622
+ //# sourceMappingURL=chunk-LZSXZB2F.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-RX6F3GEA.js";
7
7
  import {
8
8
  brandTokensSchema
9
- } from "./chunk-XF4JUKVF.js";
9
+ } from "./chunk-BAUSWB7O.js";
10
10
 
11
11
  // src/engine/landing/lib/brand-tokens.ts
12
12
  import { readFile as readFile2 } from "fs/promises";
@@ -334,4 +334,4 @@ export {
334
334
  brandCommitsAiHue,
335
335
  brandCommitsCream
336
336
  };
337
- //# sourceMappingURL=chunk-3IBYKLXR.js.map
337
+ //# sourceMappingURL=chunk-MURPCCLG.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  latestVersion
3
- } from "./chunk-5Y5UAJWD.js";
3
+ } from "./chunk-TD6GIMV6.js";
4
4
  import {
5
5
  canvasOutputsRoot
6
6
  } from "./chunk-DZSIUEGH.js";
@@ -16,4 +16,4 @@ async function versionOf(slug, run) {
16
16
  export {
17
17
  versionOf
18
18
  };
19
- //# sourceMappingURL=chunk-2QHODRR6.js.map
19
+ //# sourceMappingURL=chunk-NEXCBTBZ.js.map
@@ -12,7 +12,7 @@ import {
12
12
  onlyCondition,
13
13
  triggerProblem,
14
14
  validateEventName
15
- } from "./chunk-XF4JUKVF.js";
15
+ } from "./chunk-BAUSWB7O.js";
16
16
 
17
17
  // ../api/src/event-sources/hubspot.ts
18
18
  var HUBSPOT_CONTACT_ID_VARIABLE = "id";
@@ -307,4 +307,4 @@ export {
307
307
  hubspotDefaultMapping,
308
308
  hubspotTriggerInputSchema
309
309
  };
310
- //# sourceMappingURL=chunk-AEOSAVVL.js.map
310
+ //# sourceMappingURL=chunk-NR2TDASR.js.map
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  X_DRAFT_BATCH_MAX,
13
13
  xDraftOpInputSchema
14
- } from "./chunk-XF4JUKVF.js";
14
+ } from "./chunk-BAUSWB7O.js";
15
15
  import {
16
16
  ApiError,
17
17
  apiPost
@@ -166,4 +166,4 @@ export {
166
166
  requireTarget,
167
167
  requireTargets
168
168
  };
169
- //# sourceMappingURL=chunk-KHRXPQID.js.map
169
+ //# sourceMappingURL=chunk-OVT676K6.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  languageTag
3
- } from "./chunk-Z2EOC6PL.js";
3
+ } from "./chunk-P6ICBEE4.js";
4
4
  import {
5
5
  parseRefExpr
6
6
  } from "./chunk-K66OLA6Y.js";
@@ -301,4 +301,4 @@ export {
301
301
  buildInitialRunRecord,
302
302
  buildFailedRunRecord
303
303
  };
304
- //# sourceMappingURL=chunk-FD27ZDVP.js.map
304
+ //# sourceMappingURL=chunk-P2RE52V7.js.map
@@ -5,11 +5,11 @@ import {
5
5
  import {
6
6
  GENERIC_FAMILIES,
7
7
  resolveBrandFaces
8
- } from "./chunk-QRP3PXWN.js";
8
+ } from "./chunk-B6GITCGN.js";
9
9
  import {
10
10
  LOGO_FILE,
11
11
  readWorkspaceBrandDoc
12
- } from "./chunk-3IBYKLXR.js";
12
+ } from "./chunk-MURPCCLG.js";
13
13
  import {
14
14
  holdUnbilledSpend
15
15
  } from "./chunk-WTOYCUKH.js";
@@ -146,7 +146,7 @@ import {
146
146
  } from "./chunk-HRYOZUSK.js";
147
147
  import {
148
148
  brandTokensSchema
149
- } from "./chunk-XF4JUKVF.js";
149
+ } from "./chunk-BAUSWB7O.js";
150
150
  import {
151
151
  optionalConnection
152
152
  } from "./chunk-NAWWC5I3.js";
@@ -6664,4 +6664,4 @@ export {
6664
6664
  prepareCanvas,
6665
6665
  exitOnPrepareError
6666
6666
  };
6667
- //# sourceMappingURL=chunk-Z2EOC6PL.js.map
6667
+ //# sourceMappingURL=chunk-P6ICBEE4.js.map
@@ -6,10 +6,10 @@ import {
6
6
  parseDefinitionSeriesPlace,
7
7
  parseDefinitionSourceFields,
8
8
  parseDefinitionStrategyFields
9
- } from "./chunk-FD27ZDVP.js";
9
+ } from "./chunk-P2RE52V7.js";
10
10
  import {
11
11
  prepareCanvas
12
- } from "./chunk-Z2EOC6PL.js";
12
+ } from "./chunk-P6ICBEE4.js";
13
13
  import {
14
14
  BackendClient
15
15
  } from "./chunk-GLCPTMPG.js";
@@ -204,4 +204,4 @@ export {
204
204
  resolveCanvasPath,
205
205
  syncDefinitionCommand
206
206
  };
207
- //# sourceMappingURL=chunk-TT5R35PJ.js.map
207
+ //# sourceMappingURL=chunk-PLGIETFZ.js.map
@@ -4,8 +4,12 @@ import {
4
4
  FLOW_RESOURCE_NODE_TYPES,
5
5
  FLOW_SECRET_FIELDS,
6
6
  FLOW_SECRET_SIDE_EFFECT_TYPES,
7
+ flowCatalogEntry,
7
8
  isFlowOauthSideEffect
8
- } from "./chunk-XF4JUKVF.js";
9
+ } from "./chunk-BAUSWB7O.js";
10
+ import {
11
+ apiPost
12
+ } from "./chunk-XBOK23HI.js";
9
13
  import {
10
14
  writeJson
11
15
  } from "./chunk-NU7JSWVA.js";
@@ -60,6 +64,26 @@ function collectSideEffects(tree) {
60
64
  (node) => Array.isArray(node.sideEffects) ? node.sideEffects.filter((sideEffect) => Boolean(sideEffect) && typeof sideEffect === "object").map((sideEffect) => ({ node, sideEffect })) : []
61
65
  );
62
66
  }
67
+ function sealedSideEffects(tree) {
68
+ return collectSideEffects(tree).flatMap(({ sideEffect }) => {
69
+ const { id, type, encryptedConfig } = sideEffect;
70
+ const sealed = typeof id === "string" && typeof type === "string" && FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type) && typeof encryptedConfig === "string" && encryptedConfig.length > 0;
71
+ return sealed ? [{ sideEffectId: id, type, encryptedConfig }] : [];
72
+ });
73
+ }
74
+ function describeSettings(settings) {
75
+ if (typeof settings.email === "string") {
76
+ return `to ${settings.email}${typeof settings.subject === "string" ? ` \xB7 subject "${settings.subject}"` : ""}`;
77
+ }
78
+ return Object.entries(settings).filter(([, value]) => typeof value === "string" || typeof value === "number").map(([key, value]) => `${key}: ${String(value)}`).join(" \xB7 ");
79
+ }
80
+ function withSettings(rows, settingsById) {
81
+ return rows.map((row) => {
82
+ const settings = row.sideEffectId ? settingsById[row.sideEffectId] : void 0;
83
+ const described = settings ? describeSettings(settings) : "";
84
+ return described ? { ...row, status: `${row.status} \u2192 ${described}` } : row;
85
+ });
86
+ }
63
87
  function flowExists(slug) {
64
88
  return existsSync(join(flowsDir(), slug, "_data.json"));
65
89
  }
@@ -109,11 +133,25 @@ function sideEffectNeedsInput(raw) {
109
133
  if (!isFlowOauthSideEffect(type)) return !configured;
110
134
  return !isConfigured(effect?.oauthProviderId) || !configured;
111
135
  }
136
+ function trackingStatus(effect, type, meta) {
137
+ if (flowCatalogEntry("side-effect", type)?.owners?.tagIds !== "tags") return null;
138
+ const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;
139
+ const event = typeof effect.eventName === "string" ? ` "${effect.eventName}"` : "";
140
+ return {
141
+ ...meta,
142
+ target: "sideEffect",
143
+ ...typeof effect.id === "string" ? { sideEffectId: effect.id } : {},
144
+ kind: type,
145
+ status: `${type}${event} \u2014 ${tags > 0 ? `[${tags} tag${tags === 1 ? "" : "s"}]` : "[no tag]"}`,
146
+ needsInput: false
147
+ };
148
+ }
112
149
  function sideEffectStatus(raw, meta) {
113
150
  const effect = raw;
114
151
  const type = effect?.type;
115
- if (typeof type !== "string" || !FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type)) {
116
- return null;
152
+ if (typeof type !== "string") return null;
153
+ if (!FLOW_SECRET_SIDE_EFFECT_TYPES.includes(type)) {
154
+ return effect ? trackingStatus(effect, type, meta) : null;
117
155
  }
118
156
  const configured = isConfigured(effect?.encryptedConfig);
119
157
  const oauth = isFlowOauthSideEffect(type);
@@ -134,6 +172,12 @@ function requestFlowInputCall(slug, status) {
134
172
  const card = `request_flow_input with ${args}`;
135
173
  const target = status.target === "node" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;
136
174
  const fallback = "only if nothing is connected or several could be meant";
175
+ if (status.kind === "email") {
176
+ return `baker flows connect ${slug} ${target} --email "<who receives each lead, comma-separated>" --subject "<New lead \u2014 the Form's name>"`;
177
+ }
178
+ if (status.kind === "httpWebhook") {
179
+ return `baker flows connect ${slug} ${target} --url <https address> \u2014 only a webhook that needs a token or password goes to the user: ${card}`;
180
+ }
137
181
  if (status.kind === "hubspotForm") {
138
182
  return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> \u2014 ${fallback}: ${card}`;
139
183
  }
@@ -197,6 +241,18 @@ function stepNameKey(name) {
197
241
  function isUsableStepNameKey(key) {
198
242
  return /^[\p{ID_Start}$_][\p{ID_Continue}$‌‍]*$/u.test(key);
199
243
  }
244
+ async function readSettings(tree) {
245
+ const sealed = sealedSideEffects(tree);
246
+ if (sealed.length === 0) return {};
247
+ try {
248
+ const { data } = await apiPost("/api/flows/destinations/reveal", {
249
+ items: sealed.map(({ type, encryptedConfig }) => ({ type, encryptedConfig }))
250
+ });
251
+ return Object.fromEntries(sealed.map((item, index) => [item.sideEffectId, data.items[index] ?? null]));
252
+ } catch {
253
+ return null;
254
+ }
255
+ }
200
256
 
201
257
  export {
202
258
  flowsDir,
@@ -205,6 +261,7 @@ export {
205
261
  writeFlowTree,
206
262
  walkNodes,
207
263
  collectSideEffects,
264
+ withSettings,
208
265
  flowExists,
209
266
  readFlowTree,
210
267
  sideEffectNeedsInput,
@@ -212,6 +269,7 @@ export {
212
269
  collectConfigStatus,
213
270
  redactTree,
214
271
  stepNameKey,
215
- isUsableStepNameKey
272
+ isUsableStepNameKey,
273
+ readSettings
216
274
  };
217
- //# sourceMappingURL=chunk-YRQYA2LR.js.map
275
+ //# sourceMappingURL=chunk-Q4JYX424.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/flows/shared.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n FLOW_ACCOUNT_ONLY_KINDS,\n FLOW_AGENT_DESTINATION_KINDS,\n FLOW_RESOURCE_NODE_TYPES,\n FLOW_SECRET_FIELDS,\n FLOW_SECRET_SIDE_EFFECT_TYPES,\n type FlowConfigStatus,\n type FlowSideEffectType,\n type FlowsRevealResponse,\n flowCatalogEntry,\n isFlowOauthSideEffect,\n} from \"@baker/api\";\nimport { apiPost } from \"../../client.ts\";\nimport { writeJson } from \"../../output.ts\";\n\nconst FLOWS_DIR = \"src/lib/flow-engine/flows\";\n\n/** Resolve the flows directory from cwd (walk up a few levels to find the repo root). */\nexport function flowsDir(): string {\n let dir = process.cwd();\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, FLOWS_DIR);\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = join(dir, \"..\");\n if (parent === dir) {\n break;\n }\n dir = parent;\n }\n return join(process.cwd(), FLOWS_DIR);\n}\n\nexport function failLocal(message: string): never {\n writeJson({ ok: false, error: { code: \"NOT_FOUND\", message } });\n process.exit(1);\n}\n\nexport function listFlowSlugs(): string[] {\n const dir = flowsDir();\n if (!existsSync(dir)) {\n return [];\n }\n return readdirSync(dir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\"_\") && entry.name !== \".gitkeep\")\n .map((entry) => entry.name)\n .sort();\n}\n\ntype AnyRecord = Record<string, unknown>;\n\n/** Absolute path to a form's `_data.json` — the one file the agent may edit. */\nexport function flowDataPath(slug: string): string {\n return join(flowsDir(), slug, \"_data.json\");\n}\n\n/**\n * Write a form tree back. Two-space JSON with a trailing newline, matching what\n * the scaffolder and the repo's markdown/JSON formatting already produce — a\n * write in any other shape turns a one-field edit into a whole-file diff.\n */\nexport function writeFlowTree(slug: string, tree: AnyRecord): void {\n writeFileSync(flowDataPath(slug), `${JSON.stringify(tree, null, 2)}\\n`, \"utf-8\");\n}\n\n/**\n * Every node in the tree, depth-first, parents before children.\n *\n * `Array.isArray`, not `?? []`: `_data.json` is hand-authored, so `children`\n * can be an object or a string, and `??` only guards null. These walkers are\n * what `flows show` and the pre-commit `normalize` run over, which are the two\n * things reached for when a form file is already wrong — throwing there would\n * take out the diagnosis along with the form.\n */\nexport function walkNodes(node: AnyRecord, acc: AnyRecord[] = []): AnyRecord[] {\n if (!node || typeof node !== \"object\") return acc;\n acc.push(node);\n if (Array.isArray(node.children)) {\n for (const child of node.children as AnyRecord[]) walkNodes(child, acc);\n }\n return acc;\n}\n\n/**\n * Every side effect in the tree, with the node that owns it.\n *\n * Walked rather than read off the root: side effects hang off whichever node\n * fires them, so a multi-step form keeps them on a child step. Reading\n * `tree.sideEffects` alone reports \"no side effects\" for a form that plainly\n * has one.\n */\nexport function collectSideEffects(tree: AnyRecord): Array<{ node: AnyRecord; sideEffect: AnyRecord }> {\n return walkNodes(tree).flatMap((node) =>\n Array.isArray(node.sideEffects)\n ? (node.sideEffects as AnyRecord[])\n .filter((sideEffect): sideEffect is AnyRecord => Boolean(sideEffect) && typeof sideEffect === \"object\")\n .map((sideEffect) => ({ node, sideEffect }))\n : [],\n );\n}\n\n/** A destination with something sealed in it, as `/api/flows/destinations/reveal` takes it. */\nexport type SealedSideEffect = { sideEffectId: string; type: FlowSideEffectType; encryptedConfig: string };\n\nexport function sealedSideEffects(tree: AnyRecord): SealedSideEffect[] {\n return collectSideEffects(tree).flatMap(({ sideEffect }) => {\n const { id, type, encryptedConfig } = sideEffect;\n const sealed =\n typeof id === \"string\" &&\n typeof type === \"string\" &&\n (FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type) &&\n typeof encryptedConfig === \"string\" &&\n encryptedConfig.length > 0;\n return sealed\n ? [{ sideEffectId: id as string, type: type as FlowSideEffectType, encryptedConfig: encryptedConfig as string }]\n : [];\n });\n}\n\nfunction describeSettings(settings: Record<string, unknown>): string {\n if (typeof settings.email === \"string\") {\n return `to ${settings.email}${typeof settings.subject === \"string\" ? ` · subject \"${settings.subject}\"` : \"\"}`;\n }\n return Object.entries(settings)\n .filter(([, value]) => typeof value === \"string\" || typeof value === \"number\")\n .map(([key, value]) => `${key}: ${String(value)}`)\n .join(\" · \");\n}\n\n/** Each sealed destination's row, saying where it sends — credentials never included (the backend strips them). */\nexport function withSettings(\n rows: FlowConfigStatus[],\n settingsById: Record<string, Record<string, unknown> | null>,\n): FlowConfigStatus[] {\n return rows.map((row) => {\n const settings = row.sideEffectId ? settingsById[row.sideEffectId] : undefined;\n const described = settings ? describeSettings(settings) : \"\";\n return described ? { ...row, status: `${row.status} → ${described}` } : row;\n });\n}\n\n/** Whether this workspace holds a Form by that slug. Never exits. */\nexport function flowExists(slug: string): boolean {\n return existsSync(join(flowsDir(), slug, \"_data.json\"));\n}\n\nexport function readFlowTree(slug: string): AnyRecord {\n const path = join(flowsDir(), slug, \"_data.json\");\n if (!existsSync(path)) {\n failLocal(`No form \"${slug}\". Run \"baker flows list\" to see the forms in this workspace.`);\n }\n try {\n return JSON.parse(readFileSync(path, \"utf-8\")) as AnyRecord;\n } catch (error) {\n failLocal(`Could not read form \"${slug}\": ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nfunction isConfigured(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\ntype NodeMeta = { nodeId: string; nodeName?: string };\n\nfunction nodeMeta(record: AnyRecord): NodeMeta {\n const nodeId = typeof record.id === \"string\" ? record.id : \"\";\n const nodeName = typeof record.name === \"string\" ? record.name : undefined;\n return { nodeId, ...(nodeName ? { nodeName } : {}) };\n}\n\nfunction widgetNodeStatus(record: AnyRecord, meta: NodeMeta): FlowConfigStatus | null {\n const nodeData = record.nodeData as AnyRecord | undefined;\n const nodeType = nodeData?.type;\n if (typeof nodeType !== \"string\" || !(FLOW_RESOURCE_NODE_TYPES as readonly string[]).includes(nodeType)) {\n return null;\n }\n const external = (nodeData?.form as AnyRecord | undefined)?.external;\n const selected = external != null && typeof external === \"object\";\n const name = selected ? (external as AnyRecord).name : undefined;\n return {\n ...meta,\n target: \"node\",\n kind: nodeType,\n status: selected\n ? `${nodeType} — selected${typeof name === \"string\" ? ` \"${name}\"` : \"\"}`\n : `${nodeType} — not selected`,\n needsInput: !selected,\n };\n}\n\n/**\n * Whether this side effect still needs something only the user can give.\n *\n * `false` for a type that has no confidential half at all (a pixel takes a tag\n * ref and nothing else), so a caller can ask the question of any side effect\n * without first checking whether the question applies.\n */\nexport function sideEffectNeedsInput(raw: unknown): boolean {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\" || !(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return false;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n if (!isFlowOauthSideEffect(type as FlowSideEffectType)) return !configured;\n return !isConfigured(effect?.oauthProviderId) || !configured;\n}\n\n/** A pixel has no confidential half; it is listed so a form's tracking is visible before anyone adds to it. */\nfunction trackingStatus(effect: AnyRecord, type: string, meta: NodeMeta): FlowConfigStatus | null {\n if (flowCatalogEntry(\"side-effect\", type)?.owners?.tagIds !== \"tags\") return null;\n const tags = Array.isArray(effect.tagIds) ? effect.tagIds.length : 0;\n const event = typeof effect.eventName === \"string\" ? ` \"${effect.eventName}\"` : \"\";\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status: `${type}${event} — ${tags > 0 ? `[${tags} tag${tags === 1 ? \"\" : \"s\"}]` : \"[no tag]\"}`,\n needsInput: false,\n };\n}\n\nfunction sideEffectStatus(raw: unknown, meta: NodeMeta): FlowConfigStatus | null {\n const effect = raw as AnyRecord | null;\n const type = effect?.type;\n if (typeof type !== \"string\") return null;\n if (!(FLOW_SECRET_SIDE_EFFECT_TYPES as readonly string[]).includes(type)) {\n return effect ? trackingStatus(effect, type, meta) : null;\n }\n const configured = isConfigured(effect?.encryptedConfig);\n const oauth = isFlowOauthSideEffect(type as FlowSideEffectType);\n const connected = isConfigured(effect?.oauthProviderId);\n const needs = FLOW_SECRET_FIELDS[type as FlowSideEffectType];\n const status = oauth\n ? `${type} — connection ${connected ? \"[connected]\" : \"[needs connection]\"}, config ${configured ? \"[set]\" : \"[missing]\"}`\n : configured\n ? `${type} — [configured]`\n : `${type} — [missing]${needs.length > 0 ? ` (needs: ${needs.join(\", \")})` : \"\"}`;\n return {\n ...meta,\n target: \"sideEffect\",\n ...(typeof effect?.id === \"string\" ? { sideEffectId: effect.id } : {}),\n kind: type,\n status,\n needsInput: sideEffectNeedsInput(effect),\n };\n}\n\n/**\n * The exact call that fills a still-unconfigured item — `baker flows connect`\n * for anything the agent can wire itself, `request_flow_input` for the rest\n * and as the fallback.\n *\n * Emitted as a ready-to-issue call rather than a reminder that one exists. The\n * argument set is not guessable — it needs the node id, and for a side effect\n * the side-effect id too — so a hint that only named the tool would still cost\n * the agent a `flows show --full` to assemble.\n */\nexport function requestFlowInputCall(slug: string, status: FlowConfigStatus): string {\n const args =\n status.target === \"node\"\n ? `{ target: \"node\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", nodeType: \"${status.kind}\" }`\n : `{ target: \"sideEffect\", flowSlug: \"${slug}\", nodeId: \"${status.nodeId}\", sideEffectId: \"${status.sideEffectId}\", sideEffectType: \"${status.kind}\" }`;\n const card = `request_flow_input with ${args}`;\n const target = status.target === \"node\" ? `--node ${status.nodeId}` : `--side-effect ${status.sideEffectId}`;\n const fallback = \"only if nothing is connected or several could be meant\";\n // Nothing in an email is confidential: you state it, and the user is never handed a card for it.\n if (status.kind === \"email\") {\n return `baker flows connect ${slug} ${target} --email \"<who receives each lead, comma-separated>\" --subject \"<New lead — the Form's name>\"`;\n }\n if (status.kind === \"httpWebhook\") {\n return `baker flows connect ${slug} ${target} --url <https address> — only a webhook that needs a token or password goes to the user: ${card}`;\n }\n if (status.kind === \"hubspotForm\") {\n return `baker flows connect ${slug} ${target} --hubspot-form <formId from baker hubspot forms list> — ${fallback}: ${card}`;\n }\n if (status.kind === \"hubspot\" || status.kind === \"hubspotMeeting\") {\n const list = status.kind === \"hubspot\" ? \"forms view <id>\" : \"meetings view <slug>\";\n return `write \\`baker hubspot ${list} --as-node\\` into the step's form.external — ${fallback}: ${card}`;\n }\n if ((FLOW_ACCOUNT_ONLY_KINDS as readonly string[]).includes(status.kind)) {\n return `baker flows connect ${slug} ${target} — ${fallback}: ${card}`;\n }\n if ((FLOW_AGENT_DESTINATION_KINDS as readonly string[]).includes(status.kind)) {\n const sheet = status.kind === \"googleSpreadsheet\" ? ' (or --new-sheet \"<title>\" --columns \"…\")' : \"\";\n return `baker flows connect ${slug} ${target} --resource <id from baker flows options ${status.kind}>${sheet} — ${fallback}: ${card}`;\n }\n return card;\n}\n\n/**\n * Walk a local flow tree collecting the configuration status of every\n * confidential field — WITHOUT decrypting anything. A present `encryptedConfig`\n * string / `oauthProviderId` / `form.external` object means \"configured\"; null /\n * absent means the agent still needs to run `request_flow_input` for it.\n */\nexport function collectConfigStatus(node: unknown, acc: FlowConfigStatus[]): void {\n if (!node || typeof node !== \"object\") {\n return;\n }\n const record = node as AnyRecord;\n const meta = nodeMeta(record);\n\n const widget = widgetNodeStatus(record, meta);\n if (widget) {\n acc.push(widget);\n }\n if (Array.isArray(record.sideEffects)) {\n for (const raw of record.sideEffects) {\n const status = sideEffectStatus(raw, meta);\n if (status) {\n acc.push(status);\n }\n }\n }\n if (Array.isArray(record.children)) {\n for (const child of record.children) {\n collectConfigStatus(child, acc);\n }\n }\n}\n\n/** Replace opaque ciphertext with a status marker so `--full` stays readable and never leaks noise. */\nexport function redactTree(node: unknown): unknown {\n if (Array.isArray(node)) {\n return node.map(redactTree);\n }\n if (!node || typeof node !== \"object\") {\n return node;\n }\n const out: AnyRecord = {};\n for (const [key, value] of Object.entries(node as AnyRecord)) {\n if (key === \"encryptedConfig\") {\n out[key] = isConfigured(value) ? \"[configured]\" : value;\n } else {\n out[key] = redactTree(value);\n }\n }\n return out;\n}\n\n/**\n * The constant a step's name becomes in the generated `_query.ts`.\n *\n * Byte-for-byte the scaffold's own `toScreamingSnake`\n * (`__tooling__/checks/base/flow-typed/flow-typed.mjs`), which is the only implementation\n * that decides anything: the watcher writes `export const <key> = \"<node id>\";`\n * for every step and throws `Duplicate flow node name` when two steps produce\n * the same one. `flows-step-name-key.test.ts` pins the two together.\n *\n * It is copied rather than imported because the CLI ships as a binary into a\n * Session Runtime and the scaffold ships as files — there is no module boundary\n * they share. The copy that was here before was NOT this rule: it uppercased and\n * squashed every non-alphanumeric run, which agrees on `Contact Info` and\n * disagrees on `contactInfo` (`CONTACTINFO` here, `CONTACT_INFO` there). So\n * `add-node` waved through a name that collided in the generator, the watcher\n * then threw, and `_query.ts` stopped regenerating for the whole form.\n */\nexport function stepNameKey(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[-\\s]+/g, \"_\")\n .toUpperCase();\n}\n\n/**\n * Whether that constant is one TypeScript will accept.\n *\n * `flow-typed.mjs` interpolates the key straight into `export const <key> = …`\n * without checking, so a step called \"1. Your details\" or \"Thanks!\" writes a\n * `_query.ts` that is a syntax error, and the whole workspace stops building —\n * a failure whose message names the generated file rather than the step that\n * caused it. `add-node` is where a name is minted, so it is where this is worth\n * catching.\n *\n * The real identifier grammar, not `[A-Z0-9_]`: this product is Spanish-first\n * and `INFORMACIÓN_DE_CONTACTO` is both a legal identifier and an ordinary step\n * name. Rejecting it would be the check being wrong, not the name.\n */\nexport function isUsableStepNameKey(key: string): boolean {\n return /^[\\p{ID_Start}$_][\\p{ID_Continue}$‌‍]*$/u.test(key);\n}\n\n/**\n * What each sealed destination holds, minus credentials — so \"add Fran to the\n * leads email\" starts from who gets it today instead of a card for the user.\n * A destination Baker would not open for this company (sealed for another,\n * or saved before destinations recorded whose they are) maps to null; the whole call failing\n * returns null. `flows show` leaves those rows as they were, and `connect`\n * refuses to overwrite what it cannot see.\n */\nexport async function readSettings(\n tree: Record<string, unknown>,\n): Promise<Record<string, Record<string, unknown> | null> | null> {\n const sealed = sealedSideEffects(tree);\n if (sealed.length === 0) return {};\n try {\n const { data } = await apiPost<FlowsRevealResponse>(\"/api/flows/destinations/reveal\", {\n items: sealed.map(({ type, encryptedConfig }) => ({ type, encryptedConfig })),\n });\n return Object.fromEntries(sealed.map((item, index) => [item.sideEffectId, data.items[index] ?? null]));\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  handleLinkedinError,
3
3
  resolveAccountIdArg
4
- } from "./chunk-CSYSX4D2.js";
4
+ } from "./chunk-3URK7DAA.js";
5
5
  import {
6
6
  adCopyHints,
7
7
  booleanWordPositionalError,
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  LINKEDIN_DRAFT_BATCH_MAX,
18
18
  linkedinDraftOpInputSchema
19
- } from "./chunk-XF4JUKVF.js";
19
+ } from "./chunk-BAUSWB7O.js";
20
20
  import {
21
21
  apiPost
22
22
  } from "./chunk-XBOK23HI.js";
@@ -343,4 +343,4 @@ export {
343
343
  requireTarget,
344
344
  requireTargets
345
345
  };
346
- //# sourceMappingURL=chunk-4AUMTNVB.js.map
346
+ //# sourceMappingURL=chunk-QJNTI36W.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  prepareCanvas,
3
3
  unsuppliedPlaceholderAssets
4
- } from "./chunk-Z2EOC6PL.js";
4
+ } from "./chunk-P6ICBEE4.js";
5
5
  import {
6
6
  isSourceStale
7
- } from "./chunk-XF4JUKVF.js";
7
+ } from "./chunk-BAUSWB7O.js";
8
8
 
9
9
  // src/commands/canvas/render-state.ts
10
10
  import { mkdir, readdir, readFile, rm, writeFile } from "fs/promises";
@@ -108,4 +108,4 @@ export {
108
108
  staleCreatives,
109
109
  clearLegacyDirtyMarker
110
110
  };
111
- //# sourceMappingURL=chunk-5Y5UAJWD.js.map
111
+ //# sourceMappingURL=chunk-TD6GIMV6.js.map
@@ -6,7 +6,7 @@ import {
6
6
  calendarDaySchema,
7
7
  todayUtc,
8
8
  windowTooLong
9
- } from "./chunk-XF4JUKVF.js";
9
+ } from "./chunk-BAUSWB7O.js";
10
10
 
11
11
  // ../api/src/accounts/crm.ts
12
12
  import { z } from "zod";
@@ -1076,4 +1076,4 @@ export {
1076
1076
  accountsCampaignsRequestSchema,
1077
1077
  ACCOUNTS_NO_SETTINGS_MESSAGE
1078
1078
  };
1079
- //# sourceMappingURL=chunk-ZEYEWPK6.js.map
1079
+ //# sourceMappingURL=chunk-TESII3FM.js.map
@@ -30,7 +30,7 @@ import {
30
30
  variantImage,
31
31
  versionRun,
32
32
  writeSeriesMemberCanvas
33
- } from "./chunk-IBURXTL4.js";
33
+ } from "./chunk-D5XAVXUZ.js";
34
34
  import {
35
35
  buildFailedRunRecord,
36
36
  buildInitialRunRecord,
@@ -39,7 +39,7 @@ import {
39
39
  finalFiles,
40
40
  finalOutputLabelsFromCanvas,
41
41
  nodeOutputsToRecord
42
- } from "./chunk-FD27ZDVP.js";
42
+ } from "./chunk-P2RE52V7.js";
43
43
  import {
44
44
  clearLegacyDirtyMarker,
45
45
  readRenderState,
@@ -48,7 +48,7 @@ import {
48
48
  recordReviewOutcome,
49
49
  recordSeriesLeadRun,
50
50
  recordSnapshot
51
- } from "./chunk-5Y5UAJWD.js";
51
+ } from "./chunk-TD6GIMV6.js";
52
52
  import {
53
53
  BRAND_LOGO_ROLE,
54
54
  CLAIMS_MODEL,
@@ -76,7 +76,7 @@ import {
76
76
  uncastPeople,
77
77
  wireNamedPeople,
78
78
  wireProofBadges
79
- } from "./chunk-Z2EOC6PL.js";
79
+ } from "./chunk-P6ICBEE4.js";
80
80
  import {
81
81
  advanceDefinitionStatus
82
82
  } from "./chunk-3ACMDRSE.js";
@@ -3144,4 +3144,4 @@ export {
3144
3144
  executeCanvasRun,
3145
3145
  buildBackendClient
3146
3146
  };
3147
- //# sourceMappingURL=chunk-GBMP4F45.js.map
3147
+ //# sourceMappingURL=chunk-TXI5OWCF.js.map
@@ -8,7 +8,7 @@ import {
8
8
  firstTimes,
9
9
  isTriggerKind,
10
10
  parseConditionsExpression
11
- } from "./chunk-XF4JUKVF.js";
11
+ } from "./chunk-BAUSWB7O.js";
12
12
  import {
13
13
  ApiError,
14
14
  validateConvexId
@@ -379,4 +379,4 @@ export {
379
379
  reactionBody,
380
380
  chatBody
381
381
  };
382
- //# sourceMappingURL=chunk-IR6D7K4H.js.map
382
+ //# sourceMappingURL=chunk-UC7VFFXR.js.map
@@ -13,7 +13,7 @@ import {
13
13
  MAX_EVENT_NAME,
14
14
  REJECTION_CODES,
15
15
  STANDARD_EVENT_NAMES
16
- } from "./chunk-XF4JUKVF.js";
16
+ } from "./chunk-BAUSWB7O.js";
17
17
 
18
18
  // ../api/src/event-ingest/arrivals.ts
19
19
  import { z } from "zod";
@@ -430,4 +430,4 @@ export {
430
430
  eventIngestUrl,
431
431
  ingestBrief
432
432
  };
433
- //# sourceMappingURL=chunk-7YCRFMXF.js.map
433
+ //# sourceMappingURL=chunk-UNI5AASR.js.map
@@ -2,7 +2,7 @@ import {
2
2
  mediaTagsCreateRequestSchema,
3
3
  mediaTagsDeleteRequestSchema,
4
4
  mediaTagsUpdateRequestSchema
5
- } from "./chunk-XF4JUKVF.js";
5
+ } from "./chunk-BAUSWB7O.js";
6
6
  import {
7
7
  ApiError,
8
8
  apiGet,
@@ -194,4 +194,4 @@ Examples:
194
194
  export {
195
195
  makeTagsCommand
196
196
  };
197
- //# sourceMappingURL=chunk-3G3ZDLMI.js.map
197
+ //# sourceMappingURL=chunk-UX5HYEN3.js.map
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-VVZBBKRC.js";
24
24
  import {
25
25
  videosIngestRequestSchema
26
- } from "./chunk-XF4JUKVF.js";
26
+ } from "./chunk-BAUSWB7O.js";
27
27
  import {
28
28
  ApiError,
29
29
  apiPost
@@ -360,4 +360,4 @@ export {
360
360
  runVideoIngest,
361
361
  ingestHints
362
362
  };
363
- //# sourceMappingURL=chunk-MXYBTMKB.js.map
363
+ //# sourceMappingURL=chunk-V4RGDJAN.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  failApi
3
- } from "./chunk-3HJLHTWP.js";
3
+ } from "./chunk-EIVYFZ4N.js";
4
4
  import {
5
5
  HUBSPOT_MISSING_GRANT_MARKER,
6
6
  HUBSPOT_NOT_CONNECTED_MESSAGE
7
- } from "./chunk-XF4JUKVF.js";
7
+ } from "./chunk-BAUSWB7O.js";
8
8
  import {
9
9
  ApiError
10
10
  } from "./chunk-XBOK23HI.js";
@@ -48,4 +48,4 @@ export {
48
48
  hubspotRefusal,
49
49
  failNotConnected
50
50
  };
51
- //# sourceMappingURL=chunk-SHL7LOC3.js.map
51
+ //# sourceMappingURL=chunk-W2TJIZS2.js.map