@dylanpiercey/work 0.0.116 → 0.0.118

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 (262) hide show
  1. package/bin/work.mjs +7 -29
  2. package/dist/_BIDn_RW1.js +2 -0
  3. package/dist/{_BHPrqqev.js → _CeVZfkIY.js} +95 -79
  4. package/dist/{_CmheBYWi.js → _DE2RUdbF.js} +43 -26
  5. package/dist/{_CEKO5mam.js → _EzN3zMKL.js} +39 -39
  6. package/dist/index.mjs +555 -526
  7. package/dist/public/assets/{_C5GxdpIx.js → _5MxjuuKr.js} +1 -1
  8. package/dist/public/assets/_5MxjuuKr.js.br +0 -0
  9. package/dist/public/assets/{_CmwkZmX02.js → _6hN6Ymx42.js} +1 -1
  10. package/dist/public/assets/_6hN6Ymx42.js.br +0 -0
  11. package/dist/public/assets/{_DbphB3_Y.js → _6nWMLOH4.js} +1 -1
  12. package/dist/public/assets/_6nWMLOH4.js.br +0 -0
  13. package/dist/public/assets/{_BNuVdL222.js → _A2tLqg9y2.js} +1 -1
  14. package/dist/public/assets/_A2tLqg9y2.js.br +0 -0
  15. package/dist/public/assets/{_DJfRmyos.js → _Ar4UEz40.js} +1 -1
  16. package/dist/public/assets/_Ar4UEz40.js.br +0 -0
  17. package/dist/public/assets/{_DwnEEAN3.js → _B-wISkbs.js} +1 -1
  18. package/dist/public/assets/_B-wISkbs.js.br +0 -0
  19. package/dist/public/assets/{_DvlwodnH2.js → _B0HJN5ud2.js} +1 -1
  20. package/dist/public/assets/_B0HJN5ud2.js.br +0 -0
  21. package/dist/public/assets/{_BlLpqMok.js → _B6RbG5-A.js} +1 -1
  22. package/dist/public/assets/_B6RbG5-A.js.br +0 -0
  23. package/dist/public/assets/{_Cy6vUvOf.js → _B7cCygGe.js} +1 -1
  24. package/dist/public/assets/_B7cCygGe.js.br +0 -0
  25. package/dist/public/assets/{_CXfVimxX2.js → _B7n-BASn2.js} +1 -1
  26. package/dist/public/assets/{_BFDzSRUb.js → _BBPUNQgX.js} +1 -1
  27. package/dist/public/assets/_BBPUNQgX.js.br +0 -0
  28. package/dist/public/assets/{_BbZSZ8_I2.js → _BHhGmIxX2.js} +1 -1
  29. package/dist/public/assets/_BHhGmIxX2.js.br +0 -0
  30. package/dist/public/assets/{_bNejHwcl2.js → _BJjI-m6s2.js} +1 -1
  31. package/dist/public/assets/_BJjI-m6s2.js.br +0 -0
  32. package/dist/public/assets/{_BE2qRsPs.js → _BJz-Y1HI.js} +1 -1
  33. package/dist/public/assets/_BJz-Y1HI.js.br +0 -0
  34. package/dist/public/assets/{_CSBn-Hvt2.js → _BLeHC7zC2.js} +1 -1
  35. package/dist/public/assets/_BLeHC7zC2.js.br +0 -0
  36. package/dist/public/assets/{_zGSRZWQr.js → _BO_BKeKC.js} +1 -1
  37. package/dist/public/assets/_BO_BKeKC.js.br +0 -0
  38. package/dist/public/assets/{_DM1EXBbo.js → _BVhnP3T6.js} +1 -1
  39. package/dist/public/assets/_BVhnP3T6.js.br +0 -0
  40. package/dist/public/assets/{_DB_C0F-Z2.js → _BXK6LHvo2.js} +1 -1
  41. package/dist/public/assets/_BXK6LHvo2.js.br +0 -0
  42. package/dist/public/assets/{_CfRbL_Ta2.js → _BYPDDEEO2.js} +1 -1
  43. package/dist/public/assets/_BYPDDEEO2.js.br +0 -0
  44. package/dist/public/assets/{_BZou6DQD.js → _BbB3wFGa.js} +1 -1
  45. package/dist/public/assets/_BbB3wFGa.js.br +0 -0
  46. package/dist/public/assets/{_CASdx3AE.js → _BicOIlC8.js} +1 -1
  47. package/dist/public/assets/_BicOIlC8.js.br +0 -0
  48. package/dist/public/assets/{_DzazkU0O.js → _BjVuWYXf.js} +1 -1
  49. package/dist/public/assets/_BjVuWYXf.js.br +0 -0
  50. package/dist/public/assets/{_BYis3bU3.js → _BjeXgSse.js} +1 -1
  51. package/dist/public/assets/_BjeXgSse.js.br +0 -0
  52. package/dist/public/assets/{_DmHNNuUl2.js → _Bk7GDGa82.js} +1 -1
  53. package/dist/public/assets/_Bk7GDGa82.js.br +0 -0
  54. package/dist/public/assets/{_CDwswGat.js → _BmJ9IUv4.js} +1 -1
  55. package/dist/public/assets/_BmJ9IUv4.js.br +0 -0
  56. package/dist/public/assets/{_chJ5r2KH2.js → _BtxdHY0V2.js} +1 -1
  57. package/dist/public/assets/_BtxdHY0V2.js.br +0 -0
  58. package/dist/public/assets/{_DAcB8FCB.js → _Bu7Rb2KV.js} +1 -1
  59. package/dist/public/assets/_Bu7Rb2KV.js.br +0 -0
  60. package/dist/public/assets/{_R6H7Mgwp.js → _BzIW49zC.js} +1 -1
  61. package/dist/public/assets/_BzIW49zC.js.br +0 -0
  62. package/dist/public/assets/{_p7Nk6TN_.js → _C1oox0_T.js} +1 -1
  63. package/dist/public/assets/_C1oox0_T.js.br +0 -0
  64. package/dist/public/assets/{_BzAD6TBo.js → _C45kLCWD.js} +8 -8
  65. package/dist/public/assets/_C45kLCWD.js.br +0 -0
  66. package/dist/public/assets/{_ClccdQK9.js → _C4B_GVHB.js} +1 -1
  67. package/dist/public/assets/_C4B_GVHB.js.br +0 -0
  68. package/dist/public/assets/{_BqkNbZMs.js → _C4tiWhG4.js} +1 -1
  69. package/dist/public/assets/_C4tiWhG4.js.br +0 -0
  70. package/dist/public/assets/{_C9TtAENI.js → _C7wuWtJ1.js} +1 -1
  71. package/dist/public/assets/{_DAHhUiki.js → _CE6eJWkd.js} +1 -1
  72. package/dist/public/assets/_CE6eJWkd.js.br +0 -0
  73. package/dist/public/assets/{_BY4vFN-X.js → _CHWTX_c6.js} +1 -1
  74. package/dist/public/assets/_CHWTX_c6.js.br +0 -0
  75. package/dist/public/assets/{_B0e3Ak7A.js → _CK9tV5oJ.js} +1 -1
  76. package/dist/public/assets/_CK9tV5oJ.js.br +0 -0
  77. package/dist/public/assets/{_B5uwAcaB.js → _CQRIuNJi.js} +1 -1
  78. package/dist/public/assets/_CQRIuNJi.js.br +0 -0
  79. package/dist/public/assets/{_B4Nu-wag.js → _CUgERK7S.js} +1 -1
  80. package/dist/public/assets/_CUgERK7S.js.br +0 -0
  81. package/dist/public/assets/{_B_qJHbwz.js → _CV5RGu5i.js} +1 -1
  82. package/dist/public/assets/_CV5RGu5i.js.br +0 -0
  83. package/dist/public/assets/{_JMdaap6W.js → _CVtWHYIm.js} +21 -21
  84. package/dist/public/assets/_CVtWHYIm.js.br +0 -0
  85. package/dist/public/assets/{_BB3PfRLa2.js → _CYUpTPHg2.js} +1 -1
  86. package/dist/public/assets/_CYUpTPHg2.js.br +0 -0
  87. package/dist/public/assets/{_mbrwXzyQ.js → _CYemOBLN.js} +1 -1
  88. package/dist/public/assets/_CYemOBLN.js.br +0 -0
  89. package/dist/public/assets/{_Ht8V87dw2.js → _CZ0_xhSs2.js} +1 -1
  90. package/dist/public/assets/{_CMtRRt5X2.js → _C_mUeGVh2.js} +1 -1
  91. package/dist/public/assets/_C_mUeGVh2.js.br +0 -0
  92. package/dist/public/assets/{_D5BeGelx.js → _Cb-dgrCB.js} +1 -1
  93. package/dist/public/assets/_Cb-dgrCB.js.br +0 -0
  94. package/dist/public/assets/{_C2NMRiCh.js → _CdAkLhxG.js} +1 -1
  95. package/dist/public/assets/_CdAkLhxG.js.br +0 -0
  96. package/dist/public/assets/{_Da_nvZ5y.js → _Cf4M5kpG.js} +1 -1
  97. package/dist/public/assets/_Cf4M5kpG.js.br +0 -0
  98. package/dist/public/assets/{_BaJXK68-.js → _CoGdSkvu.js} +1 -1
  99. package/dist/public/assets/_CoGdSkvu.js.br +0 -0
  100. package/dist/public/assets/{_ChrrA5fF.js → _Cpm5RoWi.js} +1 -1
  101. package/dist/public/assets/_Cpm5RoWi.js.br +0 -0
  102. package/dist/public/assets/{_CbbUwTEJ.js → _CpuBCvd6.js} +1 -1
  103. package/dist/public/assets/_CpuBCvd6.js.br +0 -0
  104. package/dist/public/assets/{_CTlZ1Lkv2.js → _CsM5ftwz2.js} +1 -1
  105. package/dist/public/assets/_CsM5ftwz2.js.br +0 -0
  106. package/dist/public/assets/{_Ddq_uzCH2.js → _CtcH3ZyQ2.js} +1 -1
  107. package/dist/public/assets/_CtcH3ZyQ2.js.br +0 -0
  108. package/dist/public/assets/{_DN-QtD1c.js → _CyDfS08K.js} +1 -1
  109. package/dist/public/assets/_CyDfS08K.js.br +0 -0
  110. package/dist/public/assets/{_BshAqMBd2.js → _D5qcTAVE2.js} +1 -1
  111. package/dist/public/assets/_D5qcTAVE2.js.br +0 -0
  112. package/dist/public/assets/{_BbXYlhz_2.js → _DAGSDF8g2.js} +1 -1
  113. package/dist/public/assets/_DAGSDF8g2.js.br +0 -0
  114. package/dist/public/assets/{_CXKoguEA.js → _DIBThzVN.js} +1 -1
  115. package/dist/public/assets/_DIBThzVN.js.br +0 -0
  116. package/dist/public/assets/{_BVkMt2PY2.js → _DJEzPcA82.js} +1 -1
  117. package/dist/public/assets/_DJEzPcA82.js.br +0 -0
  118. package/dist/public/assets/{_DCM_uGbe.js → _DLBE7zID.js} +1 -1
  119. package/dist/public/assets/_DLBE7zID.js.br +0 -0
  120. package/dist/public/assets/{_C6_jrqyQ2.js → _DP-5FfqK2.js} +1 -1
  121. package/dist/public/assets/_DP-5FfqK2.js.br +0 -0
  122. package/dist/public/assets/{_Cj0z289t.js → _DglnXAKo.js} +1 -1
  123. package/dist/public/assets/_DglnXAKo.js.br +0 -0
  124. package/dist/public/assets/{_BynYlMA5.js → _Dh3HoKhq.js} +1 -1
  125. package/dist/public/assets/_Dh3HoKhq.js.br +0 -0
  126. package/dist/public/assets/{_NlAtY9z9.js → _DkxpDwXy.js} +1 -1
  127. package/dist/public/assets/_DkxpDwXy.js.br +0 -0
  128. package/dist/public/assets/{_BomcrPR22.js → _DoWF8ByT2.js} +1 -1
  129. package/dist/public/assets/_DoWF8ByT2.js.br +0 -0
  130. package/dist/public/assets/{_Rwpt_eYd.js → _HSgzwAmZ.js} +1 -1
  131. package/dist/public/assets/_HSgzwAmZ.js.br +0 -0
  132. package/dist/public/assets/{_BoLijUVS.js → _J22ldpof.js} +1 -1
  133. package/dist/public/assets/_J22ldpof.js.br +0 -0
  134. package/dist/public/assets/{_yu6_Donv2.js → _J98Rxkdb2.js} +1 -1
  135. package/dist/public/assets/_J98Rxkdb2.js.br +0 -0
  136. package/dist/public/assets/{_DZMpOq_k2.js → _JVw8w_7p2.js} +1 -1
  137. package/dist/public/assets/_JVw8w_7p2.js.br +0 -0
  138. package/dist/public/assets/{_BSIklgtS.js → _JoWlQVpX.js} +1 -1
  139. package/dist/public/assets/_JoWlQVpX.js.br +0 -0
  140. package/dist/public/assets/{_BvXxAv4T.js → _TbUx96Br.js} +1 -1
  141. package/dist/public/assets/_TbUx96Br.js.br +0 -0
  142. package/dist/public/assets/{_Dz1I8UR4.js → _akTAmktB.js} +1 -1
  143. package/dist/public/assets/_akTAmktB.js.br +0 -0
  144. package/dist/public/assets/{_BK6OZyLT2.js → _dFDJ9A9g2.js} +1 -1
  145. package/dist/public/assets/_dFDJ9A9g2.js.br +0 -0
  146. package/dist/public/assets/{_BhTLJW2Y.js → _gHuYn_71.js} +1 -1
  147. package/dist/public/assets/_gHuYn_71.js.br +0 -0
  148. package/dist/public/assets/{_Df3c1-mC.js → _j9TQP7q5.js} +1 -1
  149. package/dist/public/assets/_j9TQP7q5.js.br +0 -0
  150. package/dist/public/assets/_sWLklcDZ.js +1 -0
  151. package/dist/public/assets/{_Bp0PawFO.js → _tshHvoEk.js} +1 -1
  152. package/dist/public/assets/_tshHvoEk.js.br +0 -0
  153. package/dist/public/assets/{_2AY1cevg.js → _xVSWwNNy.js} +1 -1
  154. package/dist/public/assets/_xVSWwNNy.js.br +0 -0
  155. package/dist/public/assets/{_-3KGdeyo.js → _x_T0NsDl.js} +1 -1
  156. package/dist/public/assets/_x_T0NsDl.js.br +0 -0
  157. package/dist/public/assets/app-page-LDZ2KXKs.css +1 -0
  158. package/dist/public/assets/app-page-LDZ2KXKs.css.br +0 -0
  159. package/dist/public/assets/diff-view-0Uofj0Dv.css +1 -0
  160. package/dist/public/assets/diff-view-0Uofj0Dv.css.br +0 -0
  161. package/dist/public/assets/new-CwlftYMt.js +1 -0
  162. package/dist/public/assets/settings-CwlftYMt.js +1 -0
  163. package/dist/public/assets/shiki-wasm-stub-sWLklcDZ.js +1 -0
  164. package/dist/public/assets/w-CwlftYMt.js +1 -0
  165. package/dist/public/assets/w._-BGFF38Oe.js +1 -0
  166. package/dist/public/assets/w._-CwlftYMt.js +1 -0
  167. package/dist/public/assets/{worker-DZo603XT.js → worker-hTZla-j_.js} +1 -1
  168. package/dist/public/assets/worker-hTZla-j_.js.br +0 -0
  169. package/lib/setup/doctor.d.mts +0 -2
  170. package/lib/setup/doctor.mjs +17 -3
  171. package/lib/usage/format.d.mts +2 -0
  172. package/lib/usage/format.mjs +22 -0
  173. package/package.json +1 -1
  174. package/scripts/migrate.mjs +25 -0
  175. package/dist/_BBEL67Rf.js +0 -2
  176. package/dist/public/assets/_-3KGdeyo.js.br +0 -0
  177. package/dist/public/assets/_2AY1cevg.js.br +0 -0
  178. package/dist/public/assets/_B0e3Ak7A.js.br +0 -0
  179. package/dist/public/assets/_B4Nu-wag.js.br +0 -0
  180. package/dist/public/assets/_B5uwAcaB.js.br +0 -0
  181. package/dist/public/assets/_BB3PfRLa2.js.br +0 -0
  182. package/dist/public/assets/_BE2qRsPs.js.br +0 -0
  183. package/dist/public/assets/_BFDzSRUb.js.br +0 -0
  184. package/dist/public/assets/_BK6OZyLT2.js.br +0 -0
  185. package/dist/public/assets/_BNuVdL222.js.br +0 -0
  186. package/dist/public/assets/_BSIklgtS.js.br +0 -0
  187. package/dist/public/assets/_BVkMt2PY2.js.br +0 -0
  188. package/dist/public/assets/_BY4vFN-X.js.br +0 -0
  189. package/dist/public/assets/_BYis3bU3.js.br +0 -0
  190. package/dist/public/assets/_BZou6DQD.js.br +0 -0
  191. package/dist/public/assets/_B_qJHbwz.js.br +0 -0
  192. package/dist/public/assets/_BaJXK68-.js.br +0 -0
  193. package/dist/public/assets/_BbXYlhz_2.js.br +0 -0
  194. package/dist/public/assets/_BbZSZ8_I2.js.br +0 -0
  195. package/dist/public/assets/_BhTLJW2Y.js.br +0 -0
  196. package/dist/public/assets/_BlLpqMok.js.br +0 -0
  197. package/dist/public/assets/_BnjxR4X6.js +0 -1
  198. package/dist/public/assets/_BnjxR4X6.js.br +0 -0
  199. package/dist/public/assets/_BoLijUVS.js.br +0 -0
  200. package/dist/public/assets/_BomcrPR22.js.br +0 -0
  201. package/dist/public/assets/_Bp0PawFO.js.br +0 -0
  202. package/dist/public/assets/_BqkNbZMs.js.br +0 -0
  203. package/dist/public/assets/_BshAqMBd2.js.br +0 -0
  204. package/dist/public/assets/_BvXxAv4T.js.br +0 -0
  205. package/dist/public/assets/_BynYlMA5.js.br +0 -0
  206. package/dist/public/assets/_BzAD6TBo.js.br +0 -0
  207. package/dist/public/assets/_C2NMRiCh.js.br +0 -0
  208. package/dist/public/assets/_C5GxdpIx.js.br +0 -0
  209. package/dist/public/assets/_C6_jrqyQ2.js.br +0 -0
  210. package/dist/public/assets/_CASdx3AE.js.br +0 -0
  211. package/dist/public/assets/_CDwswGat.js.br +0 -0
  212. package/dist/public/assets/_CMtRRt5X2.js.br +0 -0
  213. package/dist/public/assets/_CSBn-Hvt2.js.br +0 -0
  214. package/dist/public/assets/_CTlZ1Lkv2.js.br +0 -0
  215. package/dist/public/assets/_CXKoguEA.js.br +0 -0
  216. package/dist/public/assets/_CbbUwTEJ.js.br +0 -0
  217. package/dist/public/assets/_CfRbL_Ta2.js.br +0 -0
  218. package/dist/public/assets/_ChrrA5fF.js.br +0 -0
  219. package/dist/public/assets/_Cj0z289t.js.br +0 -0
  220. package/dist/public/assets/_ClccdQK9.js.br +0 -0
  221. package/dist/public/assets/_CmwkZmX02.js.br +0 -0
  222. package/dist/public/assets/_Cy6vUvOf.js.br +0 -0
  223. package/dist/public/assets/_D5BeGelx.js.br +0 -0
  224. package/dist/public/assets/_DAHhUiki.js.br +0 -0
  225. package/dist/public/assets/_DAcB8FCB.js.br +0 -0
  226. package/dist/public/assets/_DB_C0F-Z2.js.br +0 -0
  227. package/dist/public/assets/_DCM_uGbe.js.br +0 -0
  228. package/dist/public/assets/_DJfRmyos.js.br +0 -0
  229. package/dist/public/assets/_DM1EXBbo.js.br +0 -0
  230. package/dist/public/assets/_DN-QtD1c.js.br +0 -0
  231. package/dist/public/assets/_DZMpOq_k2.js.br +0 -0
  232. package/dist/public/assets/_Da_nvZ5y.js.br +0 -0
  233. package/dist/public/assets/_DbphB3_Y.js.br +0 -0
  234. package/dist/public/assets/_Ddq_uzCH2.js.br +0 -0
  235. package/dist/public/assets/_Df3c1-mC.js.br +0 -0
  236. package/dist/public/assets/_DmHNNuUl2.js.br +0 -0
  237. package/dist/public/assets/_DvlwodnH2.js.br +0 -0
  238. package/dist/public/assets/_DwnEEAN3.js.br +0 -0
  239. package/dist/public/assets/_Dz1I8UR4.js.br +0 -0
  240. package/dist/public/assets/_DzazkU0O.js.br +0 -0
  241. package/dist/public/assets/_JMdaap6W.js.br +0 -0
  242. package/dist/public/assets/_NlAtY9z9.js.br +0 -0
  243. package/dist/public/assets/_R6H7Mgwp.js.br +0 -0
  244. package/dist/public/assets/_Rwpt_eYd.js.br +0 -0
  245. package/dist/public/assets/_bNejHwcl2.js.br +0 -0
  246. package/dist/public/assets/_chJ5r2KH2.js.br +0 -0
  247. package/dist/public/assets/_mbrwXzyQ.js.br +0 -0
  248. package/dist/public/assets/_p7Nk6TN_.js.br +0 -0
  249. package/dist/public/assets/_yu6_Donv2.js.br +0 -0
  250. package/dist/public/assets/_zGSRZWQr.js.br +0 -0
  251. package/dist/public/assets/app-page-xZ7ggaFZ.css +0 -1
  252. package/dist/public/assets/app-page-xZ7ggaFZ.css.br +0 -0
  253. package/dist/public/assets/diff-view-COEkSsJh.css +0 -1
  254. package/dist/public/assets/diff-view-COEkSsJh.css.br +0 -0
  255. package/dist/public/assets/new-B4TVUCf9.js +0 -1
  256. package/dist/public/assets/settings-B4TVUCf9.js +0 -1
  257. package/dist/public/assets/w-B4TVUCf9.js +0 -1
  258. package/dist/public/assets/w._-B4TVUCf9.js +0 -1
  259. package/dist/public/assets/w._-CJLLzbFK.js +0 -1
  260. package/dist/public/assets/wasm-S0UXjx1m.js +0 -1
  261. package/dist/public/assets/wasm-S0UXjx1m.js.br +0 -0
  262. package/dist/public/assets/worker-DZo603XT.js.br +0 -0
package/bin/work.mjs CHANGED
@@ -25,6 +25,7 @@ import { createRequire } from "node:module";
25
25
  import { doctor, formatDoctor, setupPath } from "../lib/setup/doctor.mjs";
26
26
  import { installTool } from "../lib/setup/install.mjs";
27
27
  import { commentMarkdown } from "../lib/review/markdown.mjs";
28
+ import { duration, pctText } from "../lib/usage/format.mjs";
28
29
 
29
30
  const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
30
31
  const pkg = JSON.parse(fs.readFileSync(path.join(pkgRoot, "package.json"), "utf8"));
@@ -104,17 +105,10 @@ async function start() {
104
105
  * this table can never disagree, which is also why this asks over HTTP instead
105
106
  * of re-reading every provider's credentials itself. */
106
107
  async function usage() {
107
- const port = serviceEnv().PORT;
108
- const url = `http://127.0.0.1:${port}/api/usage${args.includes("--refresh") ? "?refresh" : ""}`;
109
- let data;
110
- try {
111
- const res = await fetch(url, { signal: AbortSignal.timeout(30_000) });
112
- if (!res.ok) die(`server answered ${res.status} for /api/usage`);
113
- data = await res.json();
114
- } catch {
115
- die(`no work server on port ${port}. Start one with: work start`);
116
- }
117
- if (args.includes("--json")) {
108
+ const data = await apiGet(
109
+ `/api/usage${args.includes("--refresh") ? "?refresh" : ""}`,
110
+ );
111
+ if (jsonOut) {
118
112
  console.log(JSON.stringify(data, null, 2));
119
113
  return;
120
114
  }
@@ -139,7 +133,7 @@ async function usage() {
139
133
  // enough to read as a warning rather than another window.
140
134
  if (agent.note) console.log(` ⚠ ${agent.note}`);
141
135
  if (agent.stale_seconds != null) {
142
- console.log(` ⚠ ${short(agent.stale_seconds * 1000)} old`);
136
+ console.log(` ⚠ ${duration(agent.stale_seconds * 1000)} old`);
143
137
  }
144
138
  }
145
139
  }
@@ -285,23 +279,7 @@ async function reviewCmd() {
285
279
  function until(iso) {
286
280
  if (!iso) return null;
287
281
  const ms = new Date(iso).getTime() - Date.now();
288
- return ms > 0 ? short(ms) : null;
289
- }
290
-
291
- /** Percent, with a decimal only where rounding would lie: 99.6% must not
292
- * read as a spent 100%, and 0.4% must not read as an untouched 0%. */
293
- function pctText(pct) {
294
- const rounded = Math.round(pct);
295
- return rounded !== pct && (rounded === 100 || rounded === 0)
296
- ? `${pct.toFixed(1)}%`
297
- : `${rounded}%`;
298
- }
299
-
300
- function short(ms) {
301
- const m = Math.round(ms / 60_000);
302
- if (m < 60) return `${m}m`;
303
- const h = Math.round(m / 60);
304
- return h < 48 ? `${h}h` : `${Math.round(h / 24)}d`;
282
+ return ms > 0 ? duration(ms) : null;
305
283
  }
306
284
 
307
285
  async function setup() {
@@ -0,0 +1,2 @@
1
+ import { f as notifySessionsChanged } from "./_DE2RUdbF.js";
2
+ export { notifySessionsChanged };