nolo-cli 0.148.0-alpha.1 → 0.151.0-alpha.2

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 (258) hide show
  1. package/{_executeModel-NFJAMAGJ.js → _executeModel-XHAFJ2MM.js} +134 -91
  2. package/accountResolver-7RYB4D2P.js +300 -0
  3. package/action-SXJD5N5R.js +23 -0
  4. package/{addContentAction-B2DRF7P6.js → addContentAction-ZV774PHH.js} +20 -14
  5. package/{addDialogAgentAction-2P2FLTLD.js → addDialogAgentAction-A6SMKAGH.js} +26 -22
  6. package/{agentDeleteCommand-7IDWF6E3.js → agentDeleteCommand-DPUUS56Z.js} +181 -93
  7. package/{agentEmailCommands-4KW33JII.js → agentEmailCommands-V4P5EFLP.js} +132 -112
  8. package/{agentGrantCommands-M3XFO6EN.js → agentGrantCommands-HOJ3JBBQ.js} +3 -3
  9. package/agentListCommands-TWFLUYIZ.js +802 -0
  10. package/{agentMachineCommands-CMQR4RQ4.js → agentMachineCommands-MELPAZZI.js} +58 -62
  11. package/{agentProviderCommands-YK2BIIXZ.js → agentProviderCommands-HL6MBLCL.js} +149 -2
  12. package/{agentPullCommand-HF4A42D4.js → agentPullCommand-FA43RBRU.js} +7 -7
  13. package/agentRecordCommands-FSWSSQIO.js +154 -0
  14. package/agentRunCommand-GDBJVOAT.js +183 -0
  15. package/{agentRunControl-2SKCR4SB.js → agentRunControl-IFM7IGMG.js} +10 -2
  16. package/{agentRuntimeLocal-AK2QVJHY.js → agentRuntimeLocal-KKSQJMTE.js} +47 -50
  17. package/{agentSlice-OZ33K224.js → agentSlice-YO2ZLJMD.js} +23 -16
  18. package/{appDeleteCommands-N3XEVVYC.js → appDeleteCommands-4PL4KYRN.js} +58 -59
  19. package/{appDeployCommands-AWFIXYVW.js → appDeployCommands-EEEXCEB6.js} +67 -63
  20. package/{appDeployStatusCommands-CZRON2FO.js → appDeployStatusCommands-35ZX7T66.js} +56 -56
  21. package/{appGetCommands-XQIUY4TD.js → appGetCommands-WFCHXJWF.js} +56 -56
  22. package/{appListCommands-NNG4H36Y.js → appListCommands-XY2U6DPF.js} +57 -59
  23. package/{authCommand-UBJ4EWYZ.js → authCommand-QYN47CQD.js} +371 -68
  24. package/{authCommands-H6WKKCRW.js → authCommands-77CHYBGF.js} +12 -9
  25. package/{builtinSkillRegistry-ZMF6YGNO.js → builtinSkillRegistry-TDQ6JB2E.js} +13 -11
  26. package/{chromeCommands-2N6MEWRU.js → chromeCommands-OBBNJCLS.js} +314 -13
  27. package/chromeOpsCommands-3Z34RKSE.js +472 -0
  28. package/{chunk-ALXHV7NK.js → chunk-2GGXHQIW.js} +43 -4
  29. package/{localRuntimeAuthority-5W6IJRAD.js → chunk-2IXDJNZI.js} +154 -75
  30. package/{chunk-IVZJWTDI.js → chunk-36OMEXXR.js} +89 -21
  31. package/{chunk-H6A6X4EK.js → chunk-3MZAGMYY.js} +16 -0
  32. package/chunk-3PVYUPXK.js +40 -0
  33. package/chunk-3SZA4U64.js +1192 -0
  34. package/{chunk-GNMAFAIS.js → chunk-44WXLHFI.js} +1 -1
  35. package/{chunk-AGGIDPCZ.js → chunk-4JH2UMJR.js} +6 -0
  36. package/chunk-4LCOCOR5.js +50 -0
  37. package/chunk-4YRTZIVN.js +871 -0
  38. package/chunk-556RW72X.js +14110 -0
  39. package/{chunk-N7J63Q6C.js → chunk-56GBUMO5.js} +10 -1
  40. package/{chunk-W7XHHYWM.js → chunk-5BHQICF2.js} +5 -1
  41. package/{chunk-XUWRURDF.js → chunk-5EBLANFT.js} +1 -1
  42. package/{chunk-3AH7LNUB.js → chunk-5EMSBTQ6.js} +33 -14
  43. package/{chunk-YRRASA5Q.js → chunk-5MM7NNO6.js} +113 -52
  44. package/chunk-5MMAK75Q.js +15 -0
  45. package/{chunk-M5PVFLD4.js → chunk-64K7WX26.js} +90 -21
  46. package/{chunk-AKG5W4LG.js → chunk-6CCFTVBP.js} +76 -221
  47. package/chunk-6MJNEXUU.js +614 -0
  48. package/{chunk-62IL3KQV.js → chunk-6MXDOUMH.js} +15 -3
  49. package/{chunk-QOKAKDPE.js → chunk-6Q7UTJKR.js} +6 -94
  50. package/chunk-6QDYSCPW.js +223 -0
  51. package/{chunk-HYZIYH2H.js → chunk-74RAWNQN.js} +56 -63
  52. package/chunk-7DPNBQSV.js +9 -0
  53. package/chunk-7MOXKPHC.js +119 -0
  54. package/{chunk-523WHFSL.js → chunk-7XKL25PW.js} +1973 -754
  55. package/{chunk-IAESIMK7.js → chunk-A4MW3YZL.js} +10 -14
  56. package/chunk-AGIM7IMJ.js +147 -0
  57. package/{chunk-7CHC4W22.js → chunk-AIZE5TDM.js} +3 -3
  58. package/{chunk-P4BX6FFU.js → chunk-AOCM7HPT.js} +214 -51
  59. package/{chunk-5GVBDNTO.js → chunk-AU7AXHUL.js} +1 -1
  60. package/{chunk-4H22P2JV.js → chunk-AUIJZACN.js} +2073 -1275
  61. package/{chunk-CIF4X6ZM.js → chunk-AWVFQMOV.js} +25 -3
  62. package/{chunk-RYZINGPM.js → chunk-BPMPOFWP.js} +347 -235
  63. package/{chunk-YUNJN43V.js → chunk-BU2YQBV4.js} +215 -28
  64. package/{chunk-XPRWFQQK.js → chunk-CBHGZRCE.js} +38 -12
  65. package/{chunk-Y3PMXGLH.js → chunk-CHCS6XPJ.js} +365 -144
  66. package/chunk-CHOZJMJS.js +78 -0
  67. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  68. package/{chunk-3SV7RM24.js → chunk-D2QN6CTI.js} +117 -72
  69. package/{chunk-5TEEECZM.js → chunk-E2AKSW7L.js} +10 -7
  70. package/{chunk-RSEEDUMS.js → chunk-EDX5XSJM.js} +2 -2
  71. package/{chunk-BKWMNZ2X.js → chunk-ES633ZS5.js} +280 -98
  72. package/{chunk-QDSINZM3.js → chunk-EUGTFFO6.js} +2 -23
  73. package/{chunk-UNYJU5L6.js → chunk-EYLGAEB4.js} +5 -1
  74. package/{chunk-CU3QB4HW.js → chunk-EYWJT7A2.js} +12 -12
  75. package/{chunk-BNGW5ASC.js → chunk-EZVK3N5L.js} +66 -18
  76. package/{chunk-6FGTMQCL.js → chunk-F32Z66T4.js} +6 -10
  77. package/chunk-FJMRBOPO.js +11507 -0
  78. package/{chunk-ZOVKKMF6.js → chunk-FY4SDK2E.js} +1 -1
  79. package/chunk-G6OOUQWJ.js +417 -0
  80. package/{chunk-PQWU42UQ.js → chunk-GCKHQECX.js} +6 -6
  81. package/chunk-GKXCHNTE.js +15 -0
  82. package/{chunk-T7F46O36.js → chunk-GQN2WLAI.js} +20 -11
  83. package/{chunk-P6GMCCAT.js → chunk-GQV5KHJU.js} +78 -12
  84. package/{chunk-B2XUQXQX.js → chunk-HIQ4GF53.js} +191 -68
  85. package/{chunk-YUWMM4US.js → chunk-HKX3ULQB.js} +34 -22
  86. package/{chunk-GMZLP5DV.js → chunk-HNUWUO75.js} +30 -19
  87. package/{chunk-5UTFL4QJ.js → chunk-I2ZMGXXF.js} +10 -5
  88. package/chunk-I42VC5KR.js +15 -0
  89. package/{chunk-3BXNTXYI.js → chunk-I4SN4NUQ.js} +1199 -56
  90. package/chunk-IA7TRNNR.js +11 -0
  91. package/{chunk-WIWM4FE3.js → chunk-IJERIUXS.js} +55 -748
  92. package/{chunk-CPUFH46E.js → chunk-ILU2NPWY.js} +10 -10
  93. package/{chunk-SLLGJZDT.js → chunk-ISQL4V7C.js} +4 -4
  94. package/chunk-IT3ZZRJE.js +12 -0
  95. package/{chunk-LPVCRQMM.js → chunk-IZ7OJB6K.js} +20 -16
  96. package/{chunk-DY7ANLKG.js → chunk-JKMLSTZK.js} +43 -12
  97. package/{chunk-6TPOEJMQ.js → chunk-JZX2XLKC.js} +64 -23
  98. package/{chunk-27ONFIEY.js → chunk-K2AER7RX.js} +19 -12
  99. package/{chunk-O2OWEFII.js → chunk-KFHQQ3NO.js} +1 -1
  100. package/{chunk-QXGPFY6J.js → chunk-LGN377P3.js} +27 -17
  101. package/{chunk-L36OWPP3.js → chunk-LIQJTQRN.js} +118 -139
  102. package/{chunk-FWQEKRTD.js → chunk-LTRUTOHX.js} +36 -31
  103. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  104. package/{chunk-5J3PYNUP.js → chunk-NYYFIKHI.js} +17 -3
  105. package/{chunk-6O4IK4V2.js → chunk-OFFL4DCR.js} +1 -1
  106. package/{chunk-B6SAMB33.js → chunk-OWYYDMGJ.js} +209 -9
  107. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  108. package/{chunk-CTUQJVQM.js → chunk-P5QACQDK.js} +1 -1
  109. package/{chunk-DIXLJWCD.js → chunk-PCKVQXYV.js} +274 -93
  110. package/{chunk-4JMDLJAD.js → chunk-PJNFNEJE.js} +114 -37
  111. package/{chunk-Z4CSIXYP.js → chunk-PLSVXHSA.js} +3 -3
  112. package/{chunk-BIDGLJQ3.js → chunk-PLXDDGBK.js} +45 -8
  113. package/chunk-PWTNI4N7.js +47 -0
  114. package/chunk-QFEW2ULV.js +42 -0
  115. package/{chunk-RGNEEJ3Y.js → chunk-QLQ573SU.js} +35 -9
  116. package/chunk-QQ56R7KS.js +88 -0
  117. package/chunk-QYPE3TS3.js +43 -0
  118. package/{chunk-4DPP773Q.js → chunk-RSHPU4PD.js} +59 -11
  119. package/chunk-RVWMAFIT.js +134 -0
  120. package/{chunk-ESHYE7WU.js → chunk-S73EPYNC.js} +10 -7
  121. package/{chunk-UQNS32WZ.js → chunk-SCMHQUMK.js} +1 -1
  122. package/{chunk-T767MPHB.js → chunk-SMENBO3M.js} +354 -120
  123. package/{chunk-PCVVZ2MH.js → chunk-SSFDFOVT.js} +26 -31
  124. package/chunk-SW4S4XYB.js +1794 -0
  125. package/{chunk-HUFPWXFW.js → chunk-T6X3D7NB.js} +572 -430
  126. package/chunk-TY3TIUJK.js +89 -0
  127. package/{chunk-X2QRZXZH.js → chunk-TYJ5XFEA.js} +4 -4
  128. package/{chunk-ALFH24P3.js → chunk-TYYRSFBG.js} +197 -155
  129. package/{chunk-7KVZ5LDQ.js → chunk-UBUH2TCC.js} +18 -4
  130. package/chunk-UEILX4EV.js +15 -0
  131. package/chunk-UHTDNB5Y.js +140 -0
  132. package/{chunk-YYLHWIW6.js → chunk-UKZX3NHN.js} +1 -1
  133. package/{chunk-OHOVNO7I.js → chunk-UOKFKFPO.js} +6 -3
  134. package/{chunk-XISEYOGH.js → chunk-USHQX6VT.js} +5 -5
  135. package/chunk-UUPR3TD7.js +53 -0
  136. package/{chunk-HDLLCBRF.js → chunk-VEA7H5FG.js} +2 -2
  137. package/chunk-VHGD6FHV.js +116 -0
  138. package/chunk-VIWDGTDA.js +8 -0
  139. package/{chunk-GOH6RW6F.js → chunk-VJXHL6MH.js} +34 -11
  140. package/{chunk-4XEYAFLY.js → chunk-VL5KOY2C.js} +623 -94
  141. package/{chunk-EADNWBAZ.js → chunk-VP3BINY7.js} +13 -0
  142. package/{chunk-EOARMOVD.js → chunk-W4S6OTSC.js} +6 -3
  143. package/chunk-WD4XYDYC.js +567 -0
  144. package/chunk-WJZOQR2J.js +151 -0
  145. package/{chunk-AUDNYVRC.js → chunk-XETG4RIX.js} +5 -5
  146. package/{chunk-MX574M24.js → chunk-XI7DGLUK.js} +4 -4
  147. package/{chunk-3L2WKC3W.js → chunk-XPWGOTBQ.js} +8 -1
  148. package/chunk-XRUSXPCQ.js +514 -0
  149. package/{chunk-I4OPU5TK.js → chunk-XS47QOFV.js} +273 -11
  150. package/{chunk-S5XGT6GB.js → chunk-XZNCX52W.js} +30 -9
  151. package/{chunk-2JMMBU6V.js → chunk-Y2DXOPSO.js} +1920 -644
  152. package/{chunk-5OA5HMTL.js → chunk-YLMMECCH.js} +1 -1
  153. package/{chunk-CFT5HBGW.js → chunk-YVLQXTUB.js} +448 -12
  154. package/chunk-YVPQATSC.js +709 -0
  155. package/{chunk-DCFPQW22.js → chunk-Z7OJUX6S.js} +122 -107
  156. package/chunk-ZEZC7IIM.js +126 -0
  157. package/{chunk-ALGORS6Y.js → chunk-ZF6526IQ.js} +43 -8
  158. package/chunk-ZIWPQEFU.js +165 -0
  159. package/chunk-ZKZ5X2HS.js +7012 -0
  160. package/chunk-ZRAU6T47.js +56 -0
  161. package/{cliExecutor-AWYR3T33.js → cliExecutor-BWBF2MTI.js} +4 -3
  162. package/{clipboardy-BX4NMYHE.js → clipboardy-GCO3GT3I.js} +3 -8
  163. package/{commandRegistry-YOEQUA7T.js → commandRegistry-XN7C5GHO.js} +183 -107
  164. package/contentThunks-5L7YQI3S.js +84 -0
  165. package/{cooldownCommands-ZLEPIB4A.js → cooldownCommands-JFKTYS2D.js} +2 -2
  166. package/{createAgentAutomationAction-5EJL6ROU.js → createAgentAutomationAction-QOPOLCRK.js} +53 -44
  167. package/createDialogAction-MZ66VY5Q.js +76 -0
  168. package/{createPageAction-75ELC64R.js → createPageAction-VQDJIXMY.js} +65 -54
  169. package/cursorProvider-YGGNMVWX.js +6123 -0
  170. package/{db-VQSAOWAO.js → db-2QOTXYGH.js} +11 -5
  171. package/{dbSlice-DQ32LYTJ.js → dbSlice-J37OGIXH.js} +19 -13
  172. package/{deleteFile-NX6QHCWZ.js → deleteFile-6JWDDRVP.js} +10 -6
  173. package/dialogCommands-YZLSJB6X.js +113 -0
  174. package/{dialogSlice-KSXPGJB2.js → dialogSlice-6RODVYCK.js} +53 -39
  175. package/{docCreateCommands-ZSLGVBZT.js → docCreateCommands-JB2RRMRJ.js} +54 -57
  176. package/{docDeleteCommands-5N4GVZBG.js → docDeleteCommands-AQENULNM.js} +56 -58
  177. package/{docReadCommands-YJSAA7AV.js → docReadCommands-DYD25YLQ.js} +53 -56
  178. package/{docStore-AROBVRCR.js → docStore-ZZA3OPM5.js} +25 -16
  179. package/{docUpdateCommands-WEMLSW6W.js → docUpdateCommands-3GVS23QL.js} +54 -57
  180. package/{fetchMessages-67MEFPZR.js → fetchMessages-IIJWQ3HR.js} +5 -4
  181. package/{getPricing-NMMFT3YI.js → getPricing-FKK3F5EJ.js} +11 -9
  182. package/{handleSendMessageAction-EGNWHAUB.js → handleSendMessageAction-DVG5U26T.js} +619 -165
  183. package/index.js +11 -7
  184. package/{lib-FRRS27KN.js → lib-4YTWAGY7.js} +581 -248
  185. package/{localDialogRead-EBRS242U.js → localDialogRead-FSOMOPDZ.js} +2 -2
  186. package/localRuntimeAdapter-HXRHFKRC.js +244 -0
  187. package/localRuntimeAuthority-JDAD7CB6.js +16 -0
  188. package/{localRuntimeDb-3LRMNLCM.js → localRuntimeDb-CVC62PM5.js} +1 -1
  189. package/{machineCommands-ARZYKGGE.js → machineCommands-5KBF4RCC.js} +503 -161
  190. package/{machineInfo-66ZFUMLE.js → machineInfo-UKPTZO5Y.js} +2 -2
  191. package/machineWsRunDispatch-4OQDEDOR.js +169 -0
  192. package/{memberThunks-5ZXPR63F.js → memberThunks-66DH6ABQ.js} +25 -18
  193. package/{models-ZPU5EDF4.js → models-LAS4B2B5.js} +2 -2
  194. package/package.json +1 -1
  195. package/{providerPresetApply-DD6NGWW6.js → providerPresetApply-MY66I6NT.js} +10 -10
  196. package/{providerRegistry-XDRLMYGJ.js → providerRegistry-QOE2FT57.js} +13 -9
  197. package/{read-EPTJRAEF.js → read-DC4NUGN6.js} +12 -8
  198. package/{readDocTool-W4NDXNEX.js → readDocTool-NCJ5NT25.js} +1 -1
  199. package/{readlineWorkspace-3XOFVARF.js → readlineWorkspace-RIE62QVZ.js} +5022 -921
  200. package/{removeDialogAgentAction-OSYNZRX7.js → removeDialogAgentAction-E2H3OZU6.js} +29 -28
  201. package/{runAgentClientLoop-UMF7VZYZ.js → runAgentClientLoop-KLUUXBZS.js} +154 -97
  202. package/{runtimeDoctorCommands-ID23PNNZ.js → runtimeDoctorCommands-GIOGC5SC.js} +17 -17
  203. package/secretCommands-ZXZRLR3R.js +700 -0
  204. package/setDialogExtraReferencesAction-SITRPMYU.js +37 -0
  205. package/{setPrimaryDialogAgentAction-WZ7KI3YA.js → setPrimaryDialogAgentAction-U7N45TGC.js} +30 -29
  206. package/{chunk-SONWNI3L.js → settingThunks-Y7SVJOMZ.js} +223 -928
  207. package/{skillDiscovery-ZBU76COE.js → skillDiscovery-QC35EQY4.js} +2 -2
  208. package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
  209. package/{spaceCommands-UJOVU4XI.js → spaceCommands-ZR5BR3GX.js} +59 -59
  210. package/{streamAgentChatTurn-GYGMYOSM.js → streamAgentChatTurn-MN2SSPGA.js} +309 -165
  211. package/{switchDialogAgentAction-GMR7WN3P.js → switchDialogAgentAction-OMGBD3N2.js} +26 -22
  212. package/{tableCommands-G7RV3RU3.js → tableCommands-U3QDY4L6.js} +19 -17
  213. package/{toolApiClient-CVGWM4PN.js → toolApiClient-7WSJJJBV.js} +6 -5
  214. package/tools-W2MOLERY.js +124 -0
  215. package/tuiSummaryLlmCaller-BM3VSTBU.js +130 -0
  216. package/{updateCommands-4EHDLF5J.js → updateCommands-NQXAGFM7.js} +3 -3
  217. package/{updateDialogTitleAction-4U5W4AMH.js → updateDialogTitleAction-Z4JX6REN.js} +102 -57
  218. package/workloadLifecycle-36DXRZKU.js +320 -0
  219. package/action-GI44T4DR.js +0 -31
  220. package/agentListCommands-IW3GQVUP.js +0 -427
  221. package/agentRecordCommands-4YBSYPIY.js +0 -134
  222. package/agentRunCommand-5MU5X5OT.js +0 -161
  223. package/browser-image-compression-MFDTD7K6.js +0 -1763
  224. package/chatQueueReduxAdapter-HVHA2HPM.js +0 -186
  225. package/chromeOpsCommands-IXRLN57H.js +0 -289
  226. package/chunk-42Z3EMC4.js +0 -25363
  227. package/chunk-CQ3WA2NE.js +0 -299
  228. package/chunk-CYSYR67N.js +0 -93
  229. package/chunk-IAG4FHOJ.js +0 -34
  230. package/chunk-JBTJAPUF.js +0 -35
  231. package/chunk-K2CSUCHJ.js +0 -620
  232. package/chunk-LTRXGFMS.js +0 -83
  233. package/chunk-M76ECQRD.js +0 -13658
  234. package/chunk-MEYIRKDN.js +0 -8967
  235. package/chunk-OCZKATRC.js +0 -129
  236. package/chunk-OTGFTBLI.js +0 -13
  237. package/chunk-PUOC4YRO.js +0 -394
  238. package/chunk-QU5A4LYX.js +0 -2415
  239. package/chunk-URMS4XY2.js +0 -10
  240. package/chunk-UV6VISQJ.js +0 -20
  241. package/chunk-VJVNU77E.js +0 -83
  242. package/chunk-WRMKCKZ3.js +0 -13807
  243. package/chunk-Y5GCAMGP.js +0 -9
  244. package/chunk-YPREESF4.js +0 -225
  245. package/contentThunks-AK2F3KNC.js +0 -73
  246. package/createDialogAction-F5WEWA47.js +0 -66
  247. package/dialogCommands-G7YBVAMC.js +0 -102
  248. package/levelLazyShim-GZBKODGI.js +0 -7
  249. package/machineWsRunDispatch-I7F4L532.js +0 -149
  250. package/serverStoreFactory-YMXDF4NI.js +0 -20
  251. package/setDialogExtraReferencesAction-M32UYNCG.js +0 -30
  252. package/settingSlice-Q6EKL7EQ.js +0 -204
  253. package/syncMapping-N6RGXGBW.js +0 -437
  254. package/tools-DU4JXVAV.js +0 -111
  255. package/tuiSummaryLlmCaller-3YFNHCTW.js +0 -128
  256. package/{chunk-SV5IJK6K.js → chunk-NBTY7YJF.js} +3 -3
  257. package/{chunk-2SYTUTLI.js → chunk-YBNHPX4S.js} +3 -3
  258. package/{offlineMarxistsAgentCommand-HGXZV4XJ.js → offlineMarxistsAgentCommand-2QTHJCHV.js} +4 -4
@@ -0,0 +1,320 @@
1
+ import {
2
+ Database
3
+ } from "./chunk-IT3ZZRJE.js";
4
+ import {
5
+ buildPrimaryExecutionTicket,
6
+ createDockerToolChannel,
7
+ dockerExecutionToolNames
8
+ } from "./chunk-6MJNEXUU.js";
9
+ import {
10
+ DOCKER_SANDBOX_BACKEND_ID,
11
+ confirmDockerSandboxStopped,
12
+ createDockerSandboxExecutionBackend,
13
+ defaultRunSbx,
14
+ resolveMaxActiveSandboxesFromEnv
15
+ } from "./chunk-YVPQATSC.js";
16
+ import "./chunk-PWTNI4N7.js";
17
+ import "./chunk-TNIX77YM.js";
18
+ import "./chunk-4VNS5WPM.js";
19
+
20
+ // packages/agent-runtime/docker/workloadLifecycle.ts
21
+ import { randomUUID } from "node:crypto";
22
+ import { isAbsolute } from "node:path";
23
+ function shQuote(value) {
24
+ return `'${String(value).replace(/'/g, `'\\''`)}'`;
25
+ }
26
+ function createTrustedDockerBindingAuthorizer(bindings) {
27
+ const map = /* @__PURE__ */ new Map();
28
+ for (const b of bindings) {
29
+ if (!b?.authorizedOwner || !b.dockerAccount || !b.credentialContextId) continue;
30
+ map.set(b.authorizedOwner, { authorizedOwner: b.authorizedOwner, dockerAccount: b.dockerAccount, credentialContextId: b.credentialContextId });
31
+ }
32
+ const authorizer = async ({ authenticatedCaller }) => {
33
+ const found = map.get(authenticatedCaller);
34
+ if (!found) return { allowed: false };
35
+ return { allowed: true, binding: { ...found } };
36
+ };
37
+ authorizer.isBound = (caller) => map.has(caller);
38
+ return authorizer;
39
+ }
40
+ function getTrustedDockerBindings(env) {
41
+ const raw = env.NOLO_DOCKER_BINDINGS;
42
+ if (!raw) return [];
43
+ try {
44
+ const parsed = JSON.parse(raw);
45
+ return Array.isArray(parsed) ? parsed : [];
46
+ } catch {
47
+ return [];
48
+ }
49
+ }
50
+ function createDockerBindingAuthorizer(env) {
51
+ return createTrustedDockerBindingAuthorizer(getTrustedDockerBindings(env));
52
+ }
53
+ var DEFAULT_MAX_ACTIVE_RUNS_PER_ACCOUNT = 3;
54
+ var PRE_CREATE_FAILURE_CODES = /* @__PURE__ */ new Set([
55
+ "quota-unverifiable",
56
+ "quota-insufficient",
57
+ "concurrency-rejected",
58
+ "quota-record-failed",
59
+ "invalid-ticket",
60
+ "lease-not-found",
61
+ "lease-mismatch",
62
+ "lease-released",
63
+ "unsupported-request"
64
+ ]);
65
+ function prepareMayHaveLeftSandbox(error) {
66
+ const err = error;
67
+ if (err?.cleanupPending === true) return true;
68
+ const code = typeof err?.code === "string" ? err.code : void 0;
69
+ if (code !== void 0 && PRE_CREATE_FAILURE_CODES.has(code)) return false;
70
+ return true;
71
+ }
72
+ function resolveMaxActiveRunsPerAccount(requestedMax, env = {}) {
73
+ if (typeof requestedMax === "number" && Number.isInteger(requestedMax) && requestedMax > 0) return requestedMax;
74
+ return resolveMaxActiveSandboxesFromEnv(env) ?? DEFAULT_MAX_ACTIVE_RUNS_PER_ACCOUNT;
75
+ }
76
+ var DockerWorkloadLifecycle = class {
77
+ constructor(options) {
78
+ this.options = options;
79
+ this.maxActiveRunsPerAccount = resolveMaxActiveRunsPerAccount(options.maxActiveRunsPerAccount, options.env ?? {});
80
+ if (options.topology !== "single-host-shared-sqlite" || !isAbsolute(options.journalPath)) {
81
+ throw new Error("docker_atomic_admission_not_configured");
82
+ }
83
+ this.db = new Database(options.journalPath, { create: true });
84
+ this.db.exec("PRAGMA journal_mode=WAL; PRAGMA synchronous=FULL; PRAGMA busy_timeout=5000;");
85
+ this.db.exec(`CREATE TABLE IF NOT EXISTS docker_runs (
86
+ runId TEXT PRIMARY KEY, authenticatedCaller TEXT NOT NULL,
87
+ authorizedOwner TEXT NOT NULL, dockerAccount TEXT NOT NULL,
88
+ credentialContextId TEXT NOT NULL, sandbox TEXT NOT NULL UNIQUE,
89
+ state TEXT NOT NULL, cleanupPending INTEGER NOT NULL, createdAt INTEGER NOT NULL
90
+ );
91
+ DROP INDEX IF EXISTS docker_account_reservation;
92
+ CREATE INDEX IF NOT EXISTS docker_runs_account_active ON docker_runs(dockerAccount, state);
93
+ CREATE TABLE IF NOT EXISTS docker_authorization_audit (
94
+ id TEXT PRIMARY KEY, runId TEXT NOT NULL, authenticatedCaller TEXT NOT NULL,
95
+ authorizedOwner TEXT, dockerAccount TEXT, credentialContextId TEXT,
96
+ authorizationResult TEXT NOT NULL, accountAttestation TEXT NOT NULL DEFAULT 'operator-declared',
97
+ observedAt INTEGER NOT NULL
98
+ );`);
99
+ }
100
+ db;
101
+ maxActiveRunsPerAccount;
102
+ /** BEGIN IMMEDIATE: cleanup_pending continues to occupy the account slot. */
103
+ admitRun(row) {
104
+ const admit = this.db.transaction((r) => {
105
+ const { active } = this.db.query("SELECT COUNT(*) AS active FROM docker_runs WHERE dockerAccount=? AND state!='released'").get(r.dockerAccount);
106
+ if (active >= this.maxActiveRunsPerAccount) throw new Error("docker_atomic_admission_rejected_account_limit");
107
+ this.db.query("INSERT INTO docker_runs VALUES (?, ?, ?, ?, ?, ?, 'cleanup_pending', 1, ?)").run(
108
+ r.runId,
109
+ r.authenticatedCaller,
110
+ r.authorizedOwner,
111
+ r.dockerAccount,
112
+ r.credentialContextId,
113
+ r.sandbox,
114
+ Date.now()
115
+ );
116
+ });
117
+ try {
118
+ admit.immediate(row);
119
+ } catch (error) {
120
+ const message = error instanceof Error ? error.message : "";
121
+ if (message === "docker_atomic_admission_rejected_account_limit") throw error;
122
+ throw new Error("docker_atomic_admission_rejected");
123
+ }
124
+ }
125
+ close() {
126
+ this.db.close();
127
+ }
128
+ audit(runId, caller, result, binding) {
129
+ this.db.query(`INSERT INTO docker_authorization_audit VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(
130
+ randomUUID(),
131
+ runId,
132
+ caller,
133
+ binding?.authorizedOwner ?? null,
134
+ binding?.dockerAccount ?? null,
135
+ binding?.credentialContextId ?? null,
136
+ result,
137
+ "operator-declared",
138
+ Date.now()
139
+ );
140
+ }
141
+ async stopAndConfirm(row) {
142
+ const deps = this.options.resolveAccount(row);
143
+ const runSbx = deps.runSbx ?? defaultRunSbx;
144
+ this.db.query("UPDATE docker_runs SET state='cleanup_pending', cleanupPending=1 WHERE runId=? AND state!='released'").run(row.runId);
145
+ try {
146
+ await runSbx(["--cloud", "stop", row.sandbox], { timeoutMs: 1e4 });
147
+ } catch {
148
+ }
149
+ const stopConfirm = { attempts: 10, delayMs: 2e3, ...this.options.stopConfirm };
150
+ if (!await confirmDockerSandboxStopped(runSbx, row.sandbox, 1e4, stopConfirm)) {
151
+ throw new Error("docker_stop_unverified_cleanup_pending");
152
+ }
153
+ this.db.query("UPDATE docker_runs SET state='released', cleanupPending=0 WHERE runId=?").run(row.runId);
154
+ }
155
+ async recover() {
156
+ const rows = this.db.query("SELECT * FROM docker_runs WHERE state!='released'").all();
157
+ const released = [], pending = [];
158
+ for (const row of rows) {
159
+ try {
160
+ if (!await this.options.isRunInactive?.(row.runId)) {
161
+ pending.push(row.runId);
162
+ continue;
163
+ }
164
+ await this.stopAndConfirm(row);
165
+ released.push(row.runId);
166
+ } catch {
167
+ pending.push(row.runId);
168
+ }
169
+ }
170
+ return { released, pending };
171
+ }
172
+ async run(input, body) {
173
+ const { runId, authenticatedCaller, grant, signal } = input;
174
+ if (!runId || !authenticatedCaller) throw new Error("docker_authenticated_identity_required");
175
+ let decision;
176
+ try {
177
+ decision = await this.options.authorize?.({ authenticatedCaller, runId }) ?? { allowed: false };
178
+ } catch {
179
+ this.audit(runId, authenticatedCaller, "denied");
180
+ throw new Error("docker_account_binding_denied");
181
+ }
182
+ const binding = decision.allowed ? decision.binding : void 0;
183
+ if (!binding?.authorizedOwner || !binding.dockerAccount || !binding.credentialContextId) {
184
+ this.audit(runId, authenticatedCaller, "denied");
185
+ throw new Error("docker_account_binding_denied");
186
+ }
187
+ if (binding.authorizedOwner !== authenticatedCaller) {
188
+ this.audit(runId, authenticatedCaller, "denied", binding);
189
+ throw new Error("docker_caller_mismatch");
190
+ }
191
+ this.audit(runId, authenticatedCaller, "allowed", binding);
192
+ if (signal?.aborted) throw new Error("docker_run_cancelled");
193
+ const ticket = buildPrimaryExecutionTicket(grant, "oneshot");
194
+ if (ticket.callerUserId && ticket.callerUserId !== authenticatedCaller) {
195
+ this.audit(runId, authenticatedCaller, "denied", binding);
196
+ throw new Error("docker_caller_mismatch");
197
+ }
198
+ const deps = this.options.resolveAccount(binding);
199
+ if (!deps.kvStore || !deps.quotaProvider) throw new Error("docker_account_backend_not_configured");
200
+ if (deps.dockerAccount && deps.dockerAccount !== binding.dockerAccount) throw new Error("docker_quota_account_mismatch");
201
+ if (deps.owner && deps.owner !== binding.authorizedOwner) throw new Error("docker_quota_owner_mismatch");
202
+ const row = { ...binding, runId, authenticatedCaller, sandbox: `nolo-run-${randomUUID()}`, state: "cleanup_pending" };
203
+ this.admitRun(row);
204
+ let active = true;
205
+ let inFlight = Promise.resolve();
206
+ let backend;
207
+ let lease;
208
+ let completed = false, bodyReached = false, mayHaveSandbox = false;
209
+ let prepareFailureCode;
210
+ try {
211
+ backend = createDockerSandboxExecutionBackend({
212
+ ...deps,
213
+ owner: binding.authorizedOwner,
214
+ dockerAccount: binding.dockerAccount,
215
+ sandboxName: row.sandbox,
216
+ ...typeof deps.quotaVerify === "boolean" ? { quotaVerify: deps.quotaVerify } : typeof this.options.quotaVerify === "boolean" ? { quotaVerify: this.options.quotaVerify } : {},
217
+ maxActiveSandboxesPerAccount: deps.maxActiveSandboxesPerAccount ?? resolveMaxActiveSandboxesFromEnv(this.options.env ?? {}) ?? this.maxActiveRunsPerAccount
218
+ });
219
+ try {
220
+ lease = await backend.prepare(ticket);
221
+ mayHaveSandbox = true;
222
+ } catch (prepareError) {
223
+ mayHaveSandbox = prepareMayHaveLeftSandbox(prepareError);
224
+ prepareFailureCode = typeof prepareError?.code === "string" ? prepareError.code : void 0;
225
+ throw prepareError;
226
+ }
227
+ this.db.query("UPDATE docker_runs SET state='active' WHERE runId=?").run(runId);
228
+ bodyReached = true;
229
+ const boundBackend = backend, boundLease = lease;
230
+ const workload = { kind: "docker", channel: createDockerToolChannel(grant, {
231
+ supportedToolNames: [...dockerExecutionToolNames],
232
+ execute: (request) => {
233
+ const job = inFlight.then(async () => {
234
+ if (!active || signal?.aborted || request.signal?.aborted) throw new Error("docker_run_not_active");
235
+ const argv = request.argv !== void 0 && request.argv.length > 0 ? [...request.argv] : request.command !== void 0 ? ["bash", "-lc", request.cwd !== void 0 ? `cd ${shQuote(request.cwd)} && ${request.command}` : request.command] : void 0;
236
+ if (!argv) throw new Error("docker_request_missing_command");
237
+ const result2 = await boundBackend.execute(boundLease, { kind: "command", argv });
238
+ return JSON.stringify(result2);
239
+ });
240
+ inFlight = job.catch(() => void 0);
241
+ return job;
242
+ }
243
+ }) };
244
+ const runtime = {
245
+ exec: (argv) => {
246
+ const job = inFlight.then(async () => {
247
+ if (!active || signal?.aborted) throw new Error("docker_run_not_active");
248
+ const result2 = await boundBackend.execute(boundLease, { kind: "command", argv: [...argv] });
249
+ const output = result2?.output;
250
+ const stdout = typeof output === "string" ? output : typeof output?.stdout === "string" ? output.stdout : "";
251
+ return {
252
+ ok: result2?.ok === true,
253
+ stdout,
254
+ exitCode: typeof result2?.exitCode === "number" ? result2.exitCode : null
255
+ };
256
+ });
257
+ inFlight = job.catch(() => void 0);
258
+ return job;
259
+ },
260
+ upload: async (localPath, remotePath) => {
261
+ const sent = await (deps.runSbx ?? defaultRunSbx)(
262
+ ["--cloud", "cp", "-L", localPath, `${row.sandbox}:${remotePath}`],
263
+ { timeoutMs: 10 * 6e4 }
264
+ );
265
+ if (sent.exitCode === 0) return { ok: true, detail: "copied" };
266
+ const stderr = String(sent.stderr ?? "").slice(0, 200);
267
+ return { ok: false, detail: `sbx cp exit ${String(sent.exitCode)}${stderr ? `: ${stderr}` : ""}` };
268
+ }
269
+ };
270
+ const result = await body(workload, runtime);
271
+ completed = true;
272
+ return result;
273
+ } finally {
274
+ active = false;
275
+ await inFlight;
276
+ if (mayHaveSandbox) {
277
+ this.db.query("UPDATE docker_runs SET state='cleanup_pending' WHERE runId=?").run(runId);
278
+ if (lease === void 0) {
279
+ this.audit(runId, authenticatedCaller, `cleanup-after-create-without-lease:${prepareFailureCode ?? "unknown"}`, binding);
280
+ }
281
+ const releaseTarget = lease ?? {
282
+ leaseId: row.sandbox,
283
+ backendId: DOCKER_SANDBOX_BACKEND_ID,
284
+ ticketId: ticket.ticketId,
285
+ grantId: ticket.grantId,
286
+ createdAt: Date.now(),
287
+ readableRoots: [],
288
+ writableRoots: [],
289
+ metadata: { sandboxName: row.sandbox, leaseRecoveredBeforeHandoff: true }
290
+ };
291
+ if (backend) {
292
+ try {
293
+ await backend.release(releaseTarget, signal?.aborted ? "cancelled" : completed ? "completed" : "failed");
294
+ } catch {
295
+ }
296
+ }
297
+ try {
298
+ await this.stopAndConfirm(row);
299
+ } catch (cleanupError) {
300
+ const detail = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);
301
+ this.audit(runId, authenticatedCaller, `cleanup_pending_unverified:${detail}`, binding);
302
+ console.warn(`[dockerWorkloadLifecycle] cleanup_pending run=${runId} sandbox=${row.sandbox}: ${detail}`);
303
+ if (!bodyReached || completed) throw cleanupError;
304
+ }
305
+ } else {
306
+ this.db.query("UPDATE docker_runs SET state='released', cleanupPending=0 WHERE runId=? AND state!='released'").run(runId);
307
+ this.audit(runId, authenticatedCaller, `prepare-failed-released:${prepareFailureCode ?? "unknown"}`, binding);
308
+ }
309
+ }
310
+ }
311
+ };
312
+ export {
313
+ DEFAULT_MAX_ACTIVE_RUNS_PER_ACCOUNT,
314
+ DockerWorkloadLifecycle,
315
+ createDockerBindingAuthorizer,
316
+ createTrustedDockerBindingAuthorizer,
317
+ getTrustedDockerBindings,
318
+ resolveMaxActiveRunsPerAccount,
319
+ shQuote
320
+ };
@@ -1,31 +0,0 @@
1
- import {
2
- shareResourceAction
3
- } from "./chunk-CU3QB4HW.js";
4
- import "./chunk-SONWNI3L.js";
5
- import "./chunk-Y5GCAMGP.js";
6
- import "./chunk-QDSINZM3.js";
7
- import "./chunk-KX6YBIHG.js";
8
- import "./chunk-HYZIYH2H.js";
9
- import "./chunk-7CHC4W22.js";
10
- import "./chunk-3AH7LNUB.js";
11
- import "./chunk-WWC7I6TA.js";
12
- import "./chunk-QSJ3HFEF.js";
13
- import "./chunk-IAESIMK7.js";
14
- import "./chunk-WIWM4FE3.js";
15
- import "./chunk-QOKAKDPE.js";
16
- import "./chunk-SEJ5OS6F.js";
17
- import "./chunk-OW765XBU.js";
18
- import "./chunk-GBRG75BQ.js";
19
- import "./chunk-KUG52IAP.js";
20
- import "./chunk-BNGW5ASC.js";
21
- import "./chunk-M2EJHDJP.js";
22
- import "./chunk-3EUW3WEO.js";
23
- import "./chunk-U6VC4MU4.js";
24
- import "./chunk-LCBAMY2M.js";
25
- import "./chunk-4SN6J65J.js";
26
- import "./chunk-CF7PE763.js";
27
- import "./chunk-G3SUCT4W.js";
28
- import "./chunk-4VNS5WPM.js";
29
- export {
30
- shareResourceAction
31
- };