@testmuai/kane-cli 0.8.13 → 0.8.14

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 (300) hide show
  1. package/dist/{ChatSurface-B6ZIO3JL.js → ChatSurface-AVL3TJA2.js} +3 -3
  2. package/dist/{ChromeProfilePicker-QSICCUMV.js → ChromeProfilePicker-WJZJOZ6Z.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-LLLNSKW2.js → CliFeedbackPrompt-65BQF5G5.js} +1 -1
  4. package/dist/{CliUploadProgress-N5IY66T2.js → CliUploadProgress-HEBZYKGN.js} +1 -1
  5. package/dist/{ConfigView-UQIRPENS.js → ConfigView-JEVQ2SO4.js} +1 -1
  6. package/dist/EvidenceViewOffer-5MB4ZXKM.js +2 -0
  7. package/dist/FolderPicker-SYFXH6D5.js +2 -0
  8. package/dist/{InfoBox-ZGSLEOPE.js → InfoBox-KM5DLBCV.js} +1 -1
  9. package/dist/{LinksBox-JFT44YUK.js → LinksBox-FQA36GTV.js} +1 -1
  10. package/dist/{ProfilesView-WZSPK3HF.js → ProfilesView-76KGHTMK.js} +1 -1
  11. package/dist/{ProjectPicker-SBBGVF4L.js → ProjectPicker-65YOU46H.js} +1 -1
  12. package/dist/{SaveSessionPrompt-F3563T3C.js → SaveSessionPrompt-QD6BNTWO.js} +1 -1
  13. package/dist/ScrollbackTap-QHJOFYMC.js +2 -0
  14. package/dist/SingleShotApp-U54ETXS3.js +2 -0
  15. package/dist/{SummaryBox-6N6NESLI.js → SummaryBox-N2B6DUDD.js} +1 -1
  16. package/dist/TestMdRunView-WA4TC5PT.js +2 -0
  17. package/dist/{TestrunEvidenceTable-JLJBJ76Q.js → TestrunEvidenceTable-3WLQVTF4.js} +1 -1
  18. package/dist/{WhoamiView-PNVUCWLB.js → WhoamiView-T26HA4ZZ.js} +1 -1
  19. package/dist/agent-parse-XMWVKCRD.js +2 -0
  20. package/dist/{app-download-NNB52ZRJ.js → app-download-XKZWFMEK.js} +1 -1
  21. package/dist/attach-target-V6LECVES.js +2 -0
  22. package/dist/{auth-JIDDELKY.js → auth-PPJANIMZ.js} +1 -1
  23. package/dist/{binary-LXYAW7WQ.js → binary-DKWWODT2.js} +1 -1
  24. package/dist/bind-62AZYFAY.js +15 -0
  25. package/dist/{bootstrap-THOC3SS7.js → bootstrap-6IJNZIPT.js} +1 -1
  26. package/dist/bridge-X5DEJL6F.js +2 -0
  27. package/dist/{changelog-BSMZXLTG.js → changelog-UTGJ7FSP.js} +1 -1
  28. package/dist/chat-committer-HDE3TP5I.js +2 -0
  29. package/dist/chat-controller-3EPK7UZG.js +2 -0
  30. package/dist/chunk-22QIVSQR.js +29 -0
  31. package/dist/{chunk-FNIL4G3V.js → chunk-2BFXT7VQ.js} +3 -3
  32. package/dist/{chunk-3FXNQTCE.js → chunk-2RMHDOP4.js} +1 -1
  33. package/dist/{chunk-7GUFVQOQ.js → chunk-3BHRGHIZ.js} +1 -1
  34. package/dist/{chunk-EEFZXZTZ.js → chunk-3IXEARDX.js} +1 -1
  35. package/dist/chunk-3N6IAVD5.js +7 -0
  36. package/dist/{chunk-I75FRXKE.js → chunk-3SPOJWRA.js} +1 -1
  37. package/dist/chunk-3YX3RQXO.js +2 -0
  38. package/dist/chunk-42FHKRPA.js +4 -0
  39. package/dist/{chunk-VYMMGWVO.js → chunk-4BBDKWM3.js} +1 -1
  40. package/dist/{chunk-J2UN2AHO.js → chunk-4K5XTIJ6.js} +1 -1
  41. package/dist/chunk-52WM3XYO.js +4 -0
  42. package/dist/{chunk-WUV3FJ7C.js → chunk-53MPG2J3.js} +1 -1
  43. package/dist/{chunk-R7QAS6LZ.js → chunk-55YDTPB7.js} +1 -1
  44. package/dist/{chunk-IDX3TOPY.js → chunk-5LJRZI7S.js} +1 -1
  45. package/dist/chunk-66MOZKD2.js +2 -0
  46. package/dist/{chunk-2X3TANEV.js → chunk-6F6YI3ZG.js} +1 -1
  47. package/dist/chunk-6LGED4FC.js +35 -0
  48. package/dist/chunk-73ULUGBM.js +5 -0
  49. package/dist/{chunk-F5AI3UVS.js → chunk-75I46VTM.js} +2 -2
  50. package/dist/{chunk-SEKJZOKW.js → chunk-7L25ZNNP.js} +1 -1
  51. package/dist/chunk-7O54QURK.js +2 -0
  52. package/dist/{chunk-XAM5E27U.js → chunk-7RAI77XD.js} +1 -1
  53. package/dist/{chunk-PWRIG6UB.js → chunk-AC7BPO4X.js} +1 -1
  54. package/dist/chunk-AHXOKBVE.js +7 -0
  55. package/dist/{chunk-DNNZ353O.js → chunk-ALCE5RLK.js} +1 -1
  56. package/dist/{chunk-AQWTK6IN.js → chunk-ARG56PJG.js} +1 -1
  57. package/dist/{chunk-33GXXC2L.js → chunk-B2ZGG7WM.js} +1 -1
  58. package/dist/{chunk-LAQBCZ5A.js → chunk-BAKJPQGU.js} +1 -1
  59. package/dist/{chunk-DIM5X2FR.js → chunk-BJYGWXVP.js} +1 -1
  60. package/dist/chunk-C74ABM24.js +2 -0
  61. package/dist/chunk-CGT4NFQN.js +8 -0
  62. package/dist/{chunk-EV64VI66.js → chunk-CRZUBDJ3.js} +1 -1
  63. package/dist/{chunk-EXLXV5OU.js → chunk-DA57DXCF.js} +1 -1
  64. package/dist/{chunk-PUM5J56E.js → chunk-EMSLJTYN.js} +1 -1
  65. package/dist/{chunk-YEZYO5QH.js → chunk-FFFB5BXL.js} +1 -1
  66. package/dist/{chunk-WIAZN7G4.js → chunk-FFVNISYH.js} +1 -1
  67. package/dist/chunk-FQNQVC5O.js +5 -0
  68. package/dist/{chunk-UF4JZXEE.js → chunk-GESG672R.js} +1 -1
  69. package/dist/{chunk-XL6HDWM3.js → chunk-GKZ2KVE6.js} +1 -1
  70. package/dist/chunk-GP7WD4UY.js +4 -0
  71. package/dist/{chunk-PYQS5ST6.js → chunk-GPIXV7AV.js} +2 -2
  72. package/dist/chunk-H6TNBKGR.js +5 -0
  73. package/dist/chunk-HOA4VWSD.js +5 -0
  74. package/dist/chunk-IE3OO5GI.js +2 -0
  75. package/dist/chunk-IICQ5KRD.js +5 -0
  76. package/dist/{chunk-K4SULRBL.js → chunk-IQ7GPETF.js} +1 -1
  77. package/dist/{chunk-3M2D7UUI.js → chunk-IQ7NGOAT.js} +1 -1
  78. package/dist/{chunk-TMRLBSIA.js → chunk-J7NRD4Q7.js} +1 -1
  79. package/dist/{chunk-FE6XRABM.js → chunk-JH6E632O.js} +1 -1
  80. package/dist/{chunk-XH2KDLZO.js → chunk-JJJSDDQ2.js} +1 -1
  81. package/dist/{chunk-BTBUIL4Q.js → chunk-JKX57HA7.js} +1 -1
  82. package/dist/{chunk-VJ3ES3RR.js → chunk-K7K23DIQ.js} +1 -1
  83. package/dist/chunk-KN65CUNT.js +15 -0
  84. package/dist/{chunk-CAO3XRA2.js → chunk-KOL6ZWOQ.js} +1 -1
  85. package/dist/{chunk-MCKBJIBB.js → chunk-KOPP4CJW.js} +1 -1
  86. package/dist/chunk-KZG4E5RM.js +2 -0
  87. package/dist/{chunk-J3Q63NFG.js → chunk-L4M7753M.js} +1 -1
  88. package/dist/{chunk-BJAHVN2F.js → chunk-L6MOO4WT.js} +1 -1
  89. package/dist/chunk-LBNADEQN.js +8 -0
  90. package/dist/{chunk-Q4YAJJPP.js → chunk-LL5DQO6V.js} +1 -1
  91. package/dist/chunk-LNV7C2YO.js +6 -0
  92. package/dist/{chunk-JX2CAVX6.js → chunk-LR5DJ6EN.js} +1 -1
  93. package/dist/{chunk-IZU5ND2C.js → chunk-M7DN6FO3.js} +1 -1
  94. package/dist/chunk-MLRO7OH3.js +9 -0
  95. package/dist/{chunk-DMLYUTS4.js → chunk-MNE5VMHT.js} +1 -1
  96. package/dist/{chunk-TDNM22BQ.js → chunk-N7ZRF5K3.js} +1 -1
  97. package/dist/{chunk-TXZ66K4Q.js → chunk-NBMLBCJ3.js} +1 -1
  98. package/dist/{chunk-KSLJOUH4.js → chunk-NDCRJXYF.js} +1 -1
  99. package/dist/{chunk-XS3HIVNS.js → chunk-NOLYYHVG.js} +1 -1
  100. package/dist/{chunk-IWVA37B6.js → chunk-O25AL4B7.js} +1 -1
  101. package/dist/{chunk-AIVOYTYQ.js → chunk-O2APH6TZ.js} +1 -1
  102. package/dist/{chunk-KAZGHWGK.js → chunk-O3XBIURC.js} +1 -1
  103. package/dist/{chunk-ZOSY2PJM.js → chunk-O5AS2ZIX.js} +1 -1
  104. package/dist/{chunk-DXFMELKC.js → chunk-O6U2HU5M.js} +1 -1
  105. package/dist/{chunk-NUWOQS6L.js → chunk-OH2NSBO6.js} +1 -1
  106. package/dist/{chunk-ARU6KAGY.js → chunk-OO5GMBVI.js} +1 -1
  107. package/dist/chunk-OPL2MIQG.js +2 -0
  108. package/dist/chunk-P3JUE2RM.js +17 -0
  109. package/dist/{chunk-D4G3SEBU.js → chunk-PGU64EWQ.js} +1 -1
  110. package/dist/{chunk-GILD6RGH.js → chunk-Q7XBMBMR.js} +1 -1
  111. package/dist/{chunk-OHK6V7JX.js → chunk-QJ5O27SJ.js} +1 -1
  112. package/dist/{chunk-KXUTO5WC.js → chunk-QPUVOVD7.js} +1 -1
  113. package/dist/{chunk-NM76SG3S.js → chunk-RBHQXWR7.js} +1 -1
  114. package/dist/{chunk-LWQNRZH3.js → chunk-RH6KFHJB.js} +1 -1
  115. package/dist/{chunk-FUP4AP6J.js → chunk-RQLU4NDG.js} +1 -1
  116. package/dist/{chunk-MXDWS7S4.js → chunk-SFTFHFG3.js} +7 -7
  117. package/dist/{chunk-4PARDPK2.js → chunk-SGHP44WS.js} +1 -1
  118. package/dist/{chunk-6AZNGOLH.js → chunk-SQDQADWD.js} +1 -1
  119. package/dist/{chunk-N2I23ANS.js → chunk-SX56MVUO.js} +1 -1
  120. package/dist/{chunk-O5U6EAL3.js → chunk-TCAHDVII.js} +1 -1
  121. package/dist/chunk-TNBF5OMZ.js +2 -0
  122. package/dist/chunk-TU6IMGWO.js +2 -0
  123. package/dist/{chunk-5G22NOZK.js → chunk-UHT5SVP5.js} +1 -1
  124. package/dist/{chunk-UZCSVEWP.js → chunk-UXH3RMQ7.js} +1 -1
  125. package/dist/{chunk-K2UEVCIJ.js → chunk-VNFCX2SH.js} +1 -1
  126. package/dist/{chunk-NU45ROHH.js → chunk-WBHSPN55.js} +2 -2
  127. package/dist/chunk-WILT62DP.js +16 -0
  128. package/dist/{chunk-QD2BUO5M.js → chunk-WOA7VCGA.js} +1 -1
  129. package/dist/{chunk-RN5ERSV2.js → chunk-WR42Q3HU.js} +1 -1
  130. package/dist/chunk-X5276I5H.js +9 -0
  131. package/dist/{chunk-477DYMXZ.js → chunk-X74PP5NJ.js} +1 -1
  132. package/dist/{chunk-KV5BOFPK.js → chunk-XGHMZJGI.js} +2 -2
  133. package/dist/{chunk-XS2LZFCH.js → chunk-YCH7H7JX.js} +1 -1
  134. package/dist/{chunk-7KIIM6H7.js → chunk-YHR2YAN5.js} +1 -1
  135. package/dist/chunk-YHVG7V3E.js +21 -0
  136. package/dist/chunk-YLQHY4A7.js +2 -0
  137. package/dist/{chunk-KGKJU27A.js → chunk-YYYQ5MVD.js} +1 -1
  138. package/dist/{chunk-W2UYUV47.js → chunk-ZA4M4O7E.js} +2 -2
  139. package/dist/chunk-ZKEOPIQ3.js +9 -0
  140. package/dist/chunk-ZUZ6QJRA.js +23 -0
  141. package/dist/{chunk-3SP4JVDN.js → chunk-ZWHPIR2Z.js} +2 -2
  142. package/dist/chunk-ZZTZJPT2.js +88 -0
  143. package/dist/committer-IYQPXG6C.js +2 -0
  144. package/dist/{config-BCGD2FEX.js → config-3AKWRTFS.js} +1 -1
  145. package/dist/cover-cmd-ZLAWMEC2.js +3 -0
  146. package/dist/{credentials-YNH5BU2Z.js → credentials-Q4WH5CBN.js} +1 -1
  147. package/dist/{deps-bundle-LOFI4DAJ.js → deps-bundle-RVZK6LZJ.js} +1 -1
  148. package/dist/{deps-resolve-GA6IPHVZ.js → deps-resolve-6F2U4TJP.js} +1 -1
  149. package/dist/design-committer-J57IAAA5.js +2 -0
  150. package/dist/dispatch-46BETGXY.js +2 -0
  151. package/dist/{doctor-W5TQBYB5.js → doctor-WRPG56HH.js} +1 -1
  152. package/dist/docx-convert-WPZS6OIC.js +2 -0
  153. package/dist/{dossier-Y6TJWFZU.js → dossier-UGJMYYAB.js} +1 -1
  154. package/dist/evidence-XWR32HWP.js +2 -0
  155. package/dist/evolve-cmd-27ZQN6YB.js +2 -0
  156. package/dist/explain-H5HJEDEF.js +2 -0
  157. package/dist/explain-cmd-JCJTXVZY.js +9 -0
  158. package/dist/{explain-cmd-XCRO4AS6.js → explain-cmd-R45I5MT7.js} +1 -1
  159. package/dist/extract-bind-D5BYYGYA.js +14 -0
  160. package/dist/{extract-cmd-7FKQJNS7.js → extract-cmd-CCYW7FIY.js} +3 -3
  161. package/dist/feeder-RSHMGW6B.js +2 -0
  162. package/dist/gaps-cmd-3VJKQ25D.js +3 -0
  163. package/dist/{generate-headless-OBMB5CSB.js → generate-headless-2M6UT3IK.js} +2 -2
  164. package/dist/headless-io-3A3BZVQ5.js +2 -0
  165. package/dist/index.js +188 -205
  166. package/dist/ingest-QGLVY7ND.js +2 -0
  167. package/dist/ingest-cmd-HVTUK264.js +2 -0
  168. package/dist/install-5WJLE7XT.js +2 -0
  169. package/dist/interactive-bind-OJCYNQPI.js +26 -0
  170. package/dist/lifecycle-cmd-GWFGUGTC.js +2 -0
  171. package/dist/{list-cmd-V3HJ5K4O.js → list-cmd-AXDW64OY.js} +1 -1
  172. package/dist/{list-commands-SH4HPFI4.js → list-commands-YNZ6EFIF.js} +1 -1
  173. package/dist/{locks-cmd-CSVSWY2Y.js → locks-cmd-67OHQZNV.js} +1 -1
  174. package/dist/logical-ids-DN6IZSUM.js +2 -0
  175. package/dist/login-flow-PRXFPRYZ.js +2 -0
  176. package/dist/maintenance-cmd-QEMK6YNV.js +2 -0
  177. package/dist/{mobile-prompts-UZTRJ3L7.js → mobile-prompts-OXHA5GHJ.js} +1 -1
  178. package/dist/{objective-variable-gate-3VUXNDCZ.js → objective-variable-gate-76GYUHEP.js} +1 -1
  179. package/dist/open-provider-E5VUGFNE.js +2 -0
  180. package/dist/pdf-convert-5H4HQNN3.js +2 -0
  181. package/dist/{persist-recorded-session-QMRY4DOF.js → persist-recorded-session-KWPH37HI.js} +1 -1
  182. package/dist/phase-seed-HKJ2EF7R.js +2 -0
  183. package/dist/pipeline-A2OGF4XW.js +2 -0
  184. package/dist/prepare-target-P6BWJZBZ.js +2 -0
  185. package/dist/readmodel-IBFRM6EO.js +2 -0
  186. package/dist/reconcile-cmd-V7TDYETT.js +2 -0
  187. package/dist/reconcile-deps-X6IGH4CA.js +4 -0
  188. package/dist/reconcile-engine-OGXSIE7O.js +2 -0
  189. package/dist/{recording-banner-7E75ERQJ.js → recording-banner-IZWN2XFY.js} +1 -1
  190. package/dist/records-TJJJWBUD.js +2 -0
  191. package/dist/registry-GOLIFVK5.js +2 -0
  192. package/dist/{require-project-folder-LBUYWQOF.js → require-project-folder-PEEUITK6.js} +1 -1
  193. package/dist/{resolve-run-intent-GHISMXLZ.js → resolve-run-intent-JGXXE45Y.js} +1 -1
  194. package/dist/{resolver-7JC5VZ4S.js → resolver-TY7XLJBN.js} +1 -1
  195. package/dist/revert-6BBBK3I4.js +2 -0
  196. package/dist/review-cmd-74YTPT7E.js +5 -0
  197. package/dist/run-DN4XARP2.js +2 -0
  198. package/dist/run-GRYWYKIH.js +2 -0
  199. package/dist/{run-test-md-5LPCKCW7.js → run-test-md-DFCKCQ4T.js} +2 -2
  200. package/dist/sessions-NH7WQWMX.js +2 -0
  201. package/dist/{sessions-cmd-VDQGRBEM.js → sessions-cmd-DV442ZCY.js} +1 -1
  202. package/dist/{skill-installer-YQPZZB7I.js → skill-installer-GRU3HOYF.js} +1 -1
  203. package/dist/{spawner-X2FOOONV.js → spawner-LNMD4NJF.js} +1 -1
  204. package/dist/store-guard-Q4MYZQHF.js +2 -0
  205. package/dist/structured-answers-NADW6D44.js +5 -0
  206. package/dist/sync-cmd-H6Y5EB3L.js +2 -0
  207. package/dist/sync-setup-THGRBKTA.js +2 -0
  208. package/dist/sync-setup-ui-RC727VK6.js +3 -0
  209. package/dist/tcg-generate-SZZ7MJXY.js +2 -0
  210. package/dist/testmd-actions-MRIUOOXO.js +2 -0
  211. package/dist/testmd-sync-UYVJ47BN.js +2 -0
  212. package/dist/token-refresh-KN5JK2U4.js +2 -0
  213. package/dist/{validate-basic-GTSVZFQI.js → validate-basic-RCBEELSB.js} +1 -1
  214. package/dist/{variable-receipt-IHQAYWMZ.js → variable-receipt-JHRW73Z6.js} +1 -1
  215. package/dist/verdicts-XFXDRND4.js +2 -0
  216. package/dist/{version-check-IPEPJZDX.js → version-check-Z774UWW3.js} +1 -1
  217. package/dist/{view-cmd-SXXNDZIC.js → view-cmd-I4LQGJ2X.js} +1 -1
  218. package/dist/walk-session-FP52IGLB.js +2 -0
  219. package/dist/with-telemetry-P6RUPWBH.js +2 -0
  220. package/package.json +12 -11
  221. package/dist/EvidenceViewOffer-AZRAILJQ.js +0 -2
  222. package/dist/FolderPicker-OJFR7AKZ.js +0 -2
  223. package/dist/ScrollbackTap-Q3IOKNMS.js +0 -2
  224. package/dist/SingleShotApp-72D5VVLE.js +0 -2
  225. package/dist/TestMdRunView-4OA52DA2.js +0 -2
  226. package/dist/bind-F36JFHUK.js +0 -12
  227. package/dist/bridge-KMDML2NB.js +0 -2
  228. package/dist/chat-committer-RAOIL2T6.js +0 -2
  229. package/dist/chat-controller-YJCNU76T.js +0 -2
  230. package/dist/chunk-4WOVHRI2.js +0 -15
  231. package/dist/chunk-54JZ6VEW.js +0 -4
  232. package/dist/chunk-5DT7PIGB.js +0 -5
  233. package/dist/chunk-6FCPS2VT.js +0 -4
  234. package/dist/chunk-6IAA644J.js +0 -9
  235. package/dist/chunk-6J635CRI.js +0 -5
  236. package/dist/chunk-AGRUULPT.js +0 -4
  237. package/dist/chunk-BZTWTYQQ.js +0 -6
  238. package/dist/chunk-CUSTYILP.js +0 -2
  239. package/dist/chunk-DBIBROYW.js +0 -5
  240. package/dist/chunk-I27YRAGO.js +0 -7
  241. package/dist/chunk-IAHKTEET.js +0 -2
  242. package/dist/chunk-IVQX3AKL.js +0 -4
  243. package/dist/chunk-K6RAOZHP.js +0 -4
  244. package/dist/chunk-KO3FL2XW.js +0 -26
  245. package/dist/chunk-L32DKFRQ.js +0 -16
  246. package/dist/chunk-LPDBTGO5.js +0 -21
  247. package/dist/chunk-N7Z7BQYO.js +0 -3
  248. package/dist/chunk-NVGBE2DR.js +0 -2
  249. package/dist/chunk-OS4VSIHT.js +0 -4
  250. package/dist/chunk-OTMAFCZK.js +0 -8
  251. package/dist/chunk-P5MJMM3X.js +0 -85
  252. package/dist/chunk-QQ5MHSSY.js +0 -2
  253. package/dist/chunk-T7DGNWI2.js +0 -17
  254. package/dist/chunk-UH2ZTX4E.js +0 -2
  255. package/dist/chunk-W3Z7AZNT.js +0 -4
  256. package/dist/chunk-XMTSHHYQ.js +0 -4
  257. package/dist/committer-C6UCDYMC.js +0 -2
  258. package/dist/cover-cmd-5LPHIOSI.js +0 -3
  259. package/dist/design-committer-UPC6NZUF.js +0 -2
  260. package/dist/dispatch-FRCPK3AZ.js +0 -2
  261. package/dist/docx-convert-BIV5T7F5.js +0 -2
  262. package/dist/evidence-FHO36EEV.js +0 -2
  263. package/dist/evolve-cmd-6RXLKERE.js +0 -2
  264. package/dist/explain-3HAZY7Q6.js +0 -2
  265. package/dist/explain-cmd-RMJPXD4U.js +0 -9
  266. package/dist/extract-bind-BFJPRNPQ.js +0 -10
  267. package/dist/feeder-IOR3XRNF.js +0 -2
  268. package/dist/gaps-cmd-FDJ3PT4C.js +0 -3
  269. package/dist/headless-io-66RG5NN5.js +0 -2
  270. package/dist/ingest-TTUQ7UDK.js +0 -2
  271. package/dist/ingest-cmd-AV66Q5LC.js +0 -2
  272. package/dist/install-SFJ2FFQ6.js +0 -2
  273. package/dist/interactive-bind-N5AQB26T.js +0 -25
  274. package/dist/lifecycle-cmd-KSMETBPP.js +0 -2
  275. package/dist/logical-ids-MLXAH45L.js +0 -2
  276. package/dist/login-flow-ODVWEPRU.js +0 -2
  277. package/dist/maintenance-cmd-VFYGKY3X.js +0 -2
  278. package/dist/pdf-convert-OZIRUADA.js +0 -2
  279. package/dist/phase-seed-BMOSAA74.js +0 -2
  280. package/dist/pipeline-5FHWZAXK.js +0 -2
  281. package/dist/prepare-target-UJEY2FSR.js +0 -2
  282. package/dist/readmodel-TDRFVDVI.js +0 -2
  283. package/dist/reconcile-cmd-2QHZML2L.js +0 -2
  284. package/dist/reconcile-deps-ZBWUY3SM.js +0 -4
  285. package/dist/reconcile-engine-YC4RQYF2.js +0 -2
  286. package/dist/records-JLS63SDI.js +0 -2
  287. package/dist/registry-JJTRUPH7.js +0 -2
  288. package/dist/revert-PRR3D4XM.js +0 -2
  289. package/dist/review-cmd-SAGIKWEW.js +0 -4
  290. package/dist/run-43ACVPJK.js +0 -2
  291. package/dist/run-EOTOXNQO.js +0 -2
  292. package/dist/sessions-GIEXOCE4.js +0 -2
  293. package/dist/structured-answers-YAVW65G4.js +0 -5
  294. package/dist/tcg-generate-V4QRNEZV.js +0 -2
  295. package/dist/testmd-actions-2UMU3QMV.js +0 -2
  296. package/dist/testmd-sync-UBXDLWYD.js +0 -2
  297. package/dist/token-refresh-NL5AM446.js +0 -2
  298. package/dist/verdicts-QU6W3TUF.js +0 -2
  299. package/dist/walk-session-7JVB4Z5S.js +0 -2
  300. package/dist/with-telemetry-LRI7H6DH.js +0 -2
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as nt}from"./chunk-ZKSN2SJ7.js";import{a as st,b as he}from"./chunk-N7Z7BQYO.js";import{a as Z,b as We,e as pe,f as ge,g as Ke,h as Ze}from"./chunk-6IAA644J.js";import{a as ze,c as Je,d as Ye,e as fe,f as Xe}from"./chunk-5G22NOZK.js";import{a as Fe,b as Ge,c as Ve}from"./chunk-YEZYO5QH.js";import{a as Le,b as Me,c as Be}from"./chunk-BB2W35TW.js";import{a as Qe}from"./chunk-GX3FPJUG.js";import{a as et,b as tt}from"./chunk-JUJ4SAGH.js";import{a as He}from"./chunk-L2TV4G56.js";import{c as Ue}from"./chunk-IVQX3AKL.js";import{a as je,e as qe}from"./chunk-EV64VI66.js";import{c as it}from"./chunk-L32DKFRQ.js";import{b as Oe,c as Pe,d as re,f as Ne}from"./chunk-J3Q63NFG.js";import{b as Se,c as De,e as $e,f as Ee,g as Re,h as de,k as me,l as ue}from"./chunk-KO3FL2XW.js";import{d as xe}from"./chunk-OTMAFCZK.js";import{b as ce}from"./chunk-VZ7KXRXB.js";import{a as ke,b as le}from"./chunk-IDX3TOPY.js";import{C as U}from"./chunk-W3Z7AZNT.js";import{g as Ie}from"./chunk-XMTSHHYQ.js";import{a as Ce,e as Ae,f as Te}from"./chunk-DBIBROYW.js";import{d as Q,e as Y}from"./chunk-AKX4VRRR.js";import{a as we}from"./chunk-5EOX4MEY.js";import{mkdirSync as Vt,appendFileSync as Ut,rmdirSync as St}from"fs";import{randomBytes as Ht}from"crypto";import{dirname as ae,join as ve,relative as zt}from"path";function rt(t,e){let n=[];for(let i of e??[]){let o=t.resolve(i.ref)?.tip??null;o!==i.cid&&n.push({ref:i.ref,pinned:i.cid,now:o})}return n}import{existsSync as be,readFileSync as _e,readdirSync as Et}from"fs";import{join as se}from"path";var at=`
2
+ import{a as nt}from"./chunk-ZKSN2SJ7.js";import{a as it,b as he}from"./chunk-HOA4VWSD.js";import{a as Z,b as Ke,e as pe,f as ge,g as Qe,h as et}from"./chunk-MLRO7OH3.js";import{a as We,c as Ye,d as Xe,e as fe,f as Ze}from"./chunk-UHT5SVP5.js";import{a as Ge,b as Ve,c as Ue}from"./chunk-FFFB5BXL.js";import{a as ze}from"./chunk-L2TV4G56.js";import{c as He}from"./chunk-52WM3XYO.js";import{a as Me,b as Be,c as Fe}from"./chunk-BB2W35TW.js";import{a as qe,e as Le}from"./chunk-CRZUBDJ3.js";import{a as Je}from"./chunk-GX3FPJUG.js";import{a as tt,b as st}from"./chunk-JUJ4SAGH.js";import{q as je}from"./chunk-6LGED4FC.js";import{b as Oe,c as Pe,d as re,f as Ne}from"./chunk-L4M7753M.js";import{b as Se,c as De,e as $e,f as Ee,g as Re,h as de,k as me,l as ue}from"./chunk-22QIVSQR.js";import{d as xe}from"./chunk-LBNADEQN.js";import{b as ce}from"./chunk-VZ7KXRXB.js";import{a as ke,c as le}from"./chunk-5LJRZI7S.js";import{C as U}from"./chunk-GP7WD4UY.js";import{H as Ie}from"./chunk-3N6IAVD5.js";import{a as Ce,f as Ae,g as Te}from"./chunk-FQNQVC5O.js";import{d as Q,e as Y}from"./chunk-AKX4VRRR.js";import{a as we}from"./chunk-5EOX4MEY.js";import{mkdirSync as Vt,appendFileSync as Ut,rmdirSync as St}from"fs";import{randomBytes as Ht}from"crypto";import{dirname as ae,join as ve,relative as zt}from"path";function rt(t,e){let n=[];for(let i of e??[]){let o=t.resolve(i.ref)?.tip??null;o!==i.cid&&n.push({ref:i.ref,pinned:i.cid,now:o})}return n}import{existsSync as be,readFileSync as _e,readdirSync as Et}from"fs";import{join as se}from"path";var at=`
3
3
  version: 1
4
4
  techniques:
5
5
  - id: eqp
@@ -349,19 +349,19 @@ pitfalls:
349
349
  - "'Test the checkout flow' has no end state \u2014 state what done looks like."
350
350
  - "Do not cram many unrelated operations into one step; do not reference data outside the step."
351
351
  - "A step whose only content is an assertion is a smell \u2014 fold it into the action step before it."
352
- `;var Rt=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];function mt(t,e){for(let n of t)if(!Rt.includes(n))throw new Error(`${e}: emits '${n}' is not an oracle kind`)}function lt(t,e){let n=ce(t);if(!n||!Array.isArray(n.techniques))throw new Error(`${e}: expected { techniques: [...] }`);for(let i of n.techniques){if(!i.id||!i.name||!i.applies_hint||!Array.isArray(i.emits))throw new Error(`${e}: technique '${i?.id??"?"}' missing id/name/applies_hint/emits`);mt(i.emits,`${e}: technique '${i.id}'`)}return n.techniques}function dt(t,e){let n=ce(t);if(!n||!n.id||!n.name||!n.applies_when||!Array.isArray(n.candidate_checks))throw new Error(`${e}: profile missing id/name/applies_when/candidate_checks`);for(let i of n.candidate_checks){if(!i.id||!i.family||!i.measurable_example||!i.emits)throw new Error(`${e}: candidate_check '${i?.id??"?"}' missing id/family/measurable_example/emits`);mt([i.emits],`${e}: check '${i.id}'`)}return n}function ut(t){let e=new Map(lt(at,"packaged techniques").map(i=>[i.id,i])),n=se(t,"design","techniques.yaml");if(be(n))for(let i of lt(_e(n,"utf8"),n))e.set(i.id,i);return[...e.values()]}function pt(t){let e=new Map(Object.entries(ot).map(([i,o])=>[i,dt(o,`packaged profile '${i}'`)])),n=se(t,"design","profiles");if(be(n))for(let i of Et(n).filter(o=>o.endsWith(".yaml")||o.endsWith(".yml")).sort()){let o=dt(_e(se(n,i),"utf8"),se(n,i));e.set(o.id,o)}return[...e.values()]}function gt(t){let e=se(t,"design","runner-grammar.yaml");return be(e)?_e(e,"utf8"):ct}function ie(t,e){return!t.superseded.has(e)}function ye(t,e,n){return{cid:e,logical_id:t.nameOf.get(e)??null,content:n}}async function ft(t,e,n,i,o){let r=await We(t,"search_similar",{text:e,label:n,k:i},o);return r.ok&&Array.isArray(r.result)?r.result:[]}async function ht(t,e,n={}){let i=U(t),o=i.resolve(e);if(!o)throw new Error(`assembleDesignContext: unknown use-case '${e}' (run designGate first)`);let r=o.tip,v=i.getNode(r);if(!v||v.label!==Q.USECASE)throw new Error(`assembleDesignContext: '${e}' is not a use-case (run designGate first)`);let N=i.derivesInto(r).map(l=>({source_id:l.props.source_id??null,anchor:l.props.anchor??null})),w=[],T=new Set;for(let{cid:l,content:g}of i.byLabel(Q.SCENARIO))ie(i,l)&&i.edgesFrom(l).some(h=>h.type===Y.BELONGS_TO&&h.dst===r)&&(w.push(ye(i,l,g)),T.add(l));let $=[];for(let{cid:l,content:g}of i.byLabel(Q.AC)){if(!ie(i,l))continue;let h=i.edgesFrom(l).find(S=>S.type===Y.SCOPED_TO);!h||h.dst!==r&&!T.has(h.dst)||$.push({...ye(i,l,g),scoped_to:h.dst})}let x=Array.isArray(v.content.criteria)?v.content.criteria:[],C=[v.content.title,v.content.description,...x].filter(Boolean).join(`
353
- `),M=(await ft(i,C,Q.SCENARIO,10,n.embedSearch)).filter(l=>!T.has(l.cid)),R=[],P=new Set,X=[],E=[r],q=new Set([r]);for(;E.length>0;){let l=E.shift();for(let g of i.edgesFrom(l)){if(g.type!==Y.DEPENDS_ON||i.nodeLabel.get(g.dst)!==Q.USECASE)continue;let h=i.tipOf(g.dst);q.has(h)||(q.add(h),X.push(h),E.push(h))}}for(let l of X){let g=`depends_on ${i.nameOf.get(l)??l.slice(0,19)}`;for(let{cid:h}of i.byLabel(Q.SCENARIO))if(ie(i,h)&&i.edgesFrom(h).some(S=>S.type===Y.BELONGS_TO&&S.dst===l))for(let S of i.edgesInto(h)){if(S.type!==Y.AUTOMATES||!ie(i,S.src)||P.has(S.src))continue;P.add(S.src);let G=String(i.getNode(S.src)?.content.title??"");R.push({cid:S.src,logical_id:i.nameOf.get(S.src)??null,title:G,via:g})}}for(let l of await ft(i,C,Q.TEST,5,n.embedSearch)){let{cid:g,title:h}=l;P.has(g)||(P.add(g),R.push({cid:g,logical_id:i.nameOf.get(g)??null,title:h??"",via:"similar"}))}let f=i.byLabel(Q.STYLENOTE).filter(l=>ie(i,l.cid)).sort((l,g)=>l.cid<g.cid?-1:1).slice(0,5).map(l=>`${String(l.content.statement)} [${String(l.content.learned_from_kind)}]`);return{usecase:ye(i,r,v.content),cites:N,committed_acs:$,existing:{scenarios:w,reuse_candidates:M},import_candidates:R,style_notes:f,techniques:ut(t),profiles:pt(t),runner_grammar:gt(t),variables:[...(n.variablesIndex??new Map).entries()].map(([l,g])=>({name:l,has_value:g.has_value})).sort((l,g)=>l.name<g.name?-1:1),budget:{...n.max!=null?{max_pairs:n.max}:{},...n.strength!=null?{strength_override:n.strength}:{}},design_of:(()=>{let l=et(i,r);return l?{engine:l.engine,seq:l.seq}:null})()}}function bt(t){let e=n=>{if(Array.isArray(n))return n.map(e);if(n!==null&&typeof n=="object"){let i={};for(let o of Object.keys(n).sort())i[o]=e(n[o]);return i}return n};return JSON.stringify(e(t),null,1)}import{basename as qt,dirname as vt,resolve as wt}from"path";import{existsSync as Ct,mkdirSync as At,readFileSync as Tt,renameSync as It,writeFileSync as Ot}from"fs";import{dirname as Pt,join as Nt}from"path";function _t(t){return Nt(t,".testmuai","variables","assurance.json")}function yt(t){for(let o of t.declarations){let r=re(o.name);if(r)throw new Error(`variable declaration refused: ${r}`)}let e={};if(Ct(t.file)){let o=JSON.parse(Tt(t.file,"utf8"));o&&typeof o=="object"&&!Array.isArray(o)&&(e=o)}let n=[],i=[];for(let o of t.declarations){if(Object.hasOwn(e,o.name)||t.known?.has(o.name)){i.push(o.name);continue}e[o.name]={value:"",secret:!!o.secret,description:o.description},n.push(o.name)}if(n.length>0){At(Pt(t.file),{recursive:!0});let o=`${t.file}.tmp-${process.pid}-${Date.now()}`;Ot(o,JSON.stringify(e,null,2)+`
352
+ `;var Rt=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];function mt(t,e){for(let n of t)if(!Rt.includes(n))throw new Error(`${e}: emits '${n}' is not an oracle kind`)}function lt(t,e){let n=ce(t);if(!n||!Array.isArray(n.techniques))throw new Error(`${e}: expected { techniques: [...] }`);for(let i of n.techniques){if(!i.id||!i.name||!i.applies_hint||!Array.isArray(i.emits))throw new Error(`${e}: technique '${i?.id??"?"}' missing id/name/applies_hint/emits`);mt(i.emits,`${e}: technique '${i.id}'`)}return n.techniques}function dt(t,e){let n=ce(t);if(!n||!n.id||!n.name||!n.applies_when||!Array.isArray(n.candidate_checks))throw new Error(`${e}: profile missing id/name/applies_when/candidate_checks`);for(let i of n.candidate_checks){if(!i.id||!i.family||!i.measurable_example||!i.emits)throw new Error(`${e}: candidate_check '${i?.id??"?"}' missing id/family/measurable_example/emits`);mt([i.emits],`${e}: check '${i.id}'`)}return n}function ut(t){let e=new Map(lt(at,"packaged techniques").map(i=>[i.id,i])),n=se(t,"design","techniques.yaml");if(be(n))for(let i of lt(_e(n,"utf8"),n))e.set(i.id,i);return[...e.values()]}function pt(t){let e=new Map(Object.entries(ot).map(([i,o])=>[i,dt(o,`packaged profile '${i}'`)])),n=se(t,"design","profiles");if(be(n))for(let i of Et(n).filter(o=>o.endsWith(".yaml")||o.endsWith(".yml")).sort()){let o=dt(_e(se(n,i),"utf8"),se(n,i));e.set(o.id,o)}return[...e.values()]}function gt(t){let e=se(t,"design","runner-grammar.yaml");return be(e)?_e(e,"utf8"):ct}function ie(t,e){return!t.superseded.has(e)}function ye(t,e,n){return{cid:e,logical_id:t.nameOf.get(e)??null,content:n}}async function ft(t,e,n,i,o){let r=await Ke(t,"search_similar",{text:e,label:n,k:i},o);return r.ok&&Array.isArray(r.result)?r.result:[]}async function ht(t,e,n={}){let i=U(t),o=i.resolve(e);if(!o)throw new Error(`assembleDesignContext: unknown use-case '${e}' (run designGate first)`);let r=o.tip,v=i.getNode(r);if(!v||v.label!==Q.USECASE)throw new Error(`assembleDesignContext: '${e}' is not a use-case (run designGate first)`);let N=i.derivesInto(r).map(l=>({source_id:l.props.source_id??null,anchor:l.props.anchor??null})),w=[],T=new Set;for(let{cid:l,content:g}of i.byLabel(Q.SCENARIO))ie(i,l)&&i.edgesFrom(l).some(h=>h.type===Y.BELONGS_TO&&h.dst===r)&&(w.push(ye(i,l,g)),T.add(l));let $=[];for(let{cid:l,content:g}of i.byLabel(Q.AC)){if(!ie(i,l))continue;let h=i.edgesFrom(l).find(S=>S.type===Y.SCOPED_TO);!h||h.dst!==r&&!T.has(h.dst)||$.push({...ye(i,l,g),scoped_to:h.dst})}let x=Array.isArray(v.content.criteria)?v.content.criteria:[],C=[v.content.title,v.content.description,...x].filter(Boolean).join(`
353
+ `),M=(await ft(i,C,Q.SCENARIO,10,n.embedSearch)).filter(l=>!T.has(l.cid)),R=[],P=new Set,X=[],E=[r],q=new Set([r]);for(;E.length>0;){let l=E.shift();for(let g of i.edgesFrom(l)){if(g.type!==Y.DEPENDS_ON||i.nodeLabel.get(g.dst)!==Q.USECASE)continue;let h=i.tipOf(g.dst);q.has(h)||(q.add(h),X.push(h),E.push(h))}}for(let l of X){let g=`depends_on ${i.nameOf.get(l)??l.slice(0,19)}`;for(let{cid:h}of i.byLabel(Q.SCENARIO))if(ie(i,h)&&i.edgesFrom(h).some(S=>S.type===Y.BELONGS_TO&&S.dst===l))for(let S of i.edgesInto(h)){if(S.type!==Y.AUTOMATES||!ie(i,S.src)||P.has(S.src))continue;P.add(S.src);let G=String(i.getNode(S.src)?.content.title??"");R.push({cid:S.src,logical_id:i.nameOf.get(S.src)??null,title:G,via:g})}}for(let l of await ft(i,C,Q.TEST,5,n.embedSearch)){let{cid:g,title:h}=l;P.has(g)||(P.add(g),R.push({cid:g,logical_id:i.nameOf.get(g)??null,title:h??"",via:"similar"}))}let f=i.byLabel(Q.STYLENOTE).filter(l=>ie(i,l.cid)).sort((l,g)=>l.cid<g.cid?-1:1).slice(0,5).map(l=>`${String(l.content.statement)} [${String(l.content.learned_from_kind)}]`);return{usecase:ye(i,r,v.content),cites:N,committed_acs:$,existing:{scenarios:w,reuse_candidates:M},import_candidates:R,style_notes:f,techniques:ut(t),profiles:pt(t),runner_grammar:gt(t),variables:[...(n.variablesIndex??new Map).entries()].map(([l,g])=>({name:l,has_value:g.has_value})).sort((l,g)=>l.name<g.name?-1:1),budget:{...n.max!=null?{max_pairs:n.max}:{},...n.strength!=null?{strength_override:n.strength}:{}},design_of:(()=>{let l=tt(i,r);return l?{engine:l.engine,seq:l.seq}:null})()}}function bt(t){let e=n=>{if(Array.isArray(n))return n.map(e);if(n!==null&&typeof n=="object"){let i={};for(let o of Object.keys(n).sort())i[o]=e(n[o]);return i}return n};return JSON.stringify(e(t),null,1)}import{basename as qt,dirname as vt,resolve as wt}from"path";import{existsSync as Ct,mkdirSync as At,readFileSync as Tt,renameSync as It,writeFileSync as Ot}from"fs";import{dirname as Pt,join as Nt}from"path";function _t(t){return Nt(t,".testmuai","variables","assurance.json")}function yt(t){for(let o of t.declarations){let r=re(o.name);if(r)throw new Error(`variable declaration refused: ${r}`)}let e={};if(Ct(t.file)){let o=JSON.parse(Tt(t.file,"utf8"));o&&typeof o=="object"&&!Array.isArray(o)&&(e=o)}let n=[],i=[];for(let o of t.declarations){if(Object.hasOwn(e,o.name)||t.known?.has(o.name)){i.push(o.name);continue}e[o.name]={value:"",secret:!!o.secret,description:o.description},n.push(o.name)}if(n.length>0){At(Pt(t.file),{recursive:!0});let o=`${t.file}.tmp-${process.pid}-${Date.now()}`;Ot(o,JSON.stringify(e,null,2)+`
354
354
  `),It(o,t.file)}return{written:n,skipped:i}}var jt=me,Lt=new Set(["narrative","acs","scenarios","tests","exercises","gaps","scoped_to_repoints","judgements","variables","phase"]);function Mt(t){let e=/strength=(\d+)\s*(?:—|-)?\s*(.*)/.exec(t??"");return e?{strength:Number(e[1]),reason:e[2]||t||""}:{strength:2,reason:t??""}}function Bt(t,e,n=new Set,i=0){return jt(e,ue(t),n,i)}function Ft(t,e,n,i){let o=e.scenarios?.find(x=>x.temp_ref===n.automates)??(()=>{let x=t.resolve(n.automates),C=x?t.getNode(x.tip)?.content:void 0;return C?{title:String(C.title??""),intent:String(C.intent??""),technique_notes:String(C.technique_notes??"")}:{}})(),r=[...(e.acs??[]).map(x=>({ref:x.temp_ref,text:x.text})),...n.verifies.filter(x=>!(e.acs??[]).some(C=>C.temp_ref===x)).map(x=>{let C=t.resolve(x);return{ref:x,text:C?String(t.getNode(C.tip)?.content.text??""):""}})],{test_md:v,objectives_yaml:N}=Re({title:n.title,steps:n.steps,check:n.check,check_prose:n.check_prose,reuses:n.reuses,...n.target?{target:n.target,...n.app?{app:n.app}:{}}:{}},{title:o.title,intent:o.intent},r),w=de(Bt(t,v)),T=n.check,$={technique:o.technique_notes??"",profile_family:e.judgements?.find(x=>x.kind==="profile_family"&&(x.target===n.temp_ref||x.target===n.automates))?.rationale??"unspecified",anchor:T.verified_against,expected_how:e.judgements?.find(x=>x.kind==="expected_how"&&x.target===T.verified_against)?.rationale??`expected_mode: ${T.expected_mode??"inferred"}`,combinatorial:Mt(o.technique_notes),surface_state:"absent",deferred_bindings:T.expected_mode==="runtime-derived"?1:0};return i.push({definitionId:w,rationale:$,anchorRef:T.verified_against,tempRef:n.temp_ref}),{temp_ref:n.temp_ref,title:n.title,automates:n.automates,verifies:n.verifies,check:n.check,definitionId:w,test_md_blob:v,objectives_blob:N,...n.reuses?.length?{reuses:n.reuses}:{},...n.surface_required!==void 0?{surface_required:n.surface_required}:{},...n.target?{target:n.target}:{},...n.target&&n.app?{app:n.app}:{}}}function Gt(t,e){try{let n=t.resolve(e.automates);if(!n)return!1;let i=t.tipOf(n.cid)??n.cid;for(let o of t.edgesInto(i)){if(o.type!==Y.AUTOMATES)continue;let r=t.getNode(t.tipOf(o.src)??o.src)?.content,v=typeof r?.test_md_blob=="string"?r.test_md_blob:"";if(!v)continue;if(!v.split(`
355
- `).some(w=>/^##\s/.test(w)&&!/—\s?assert/.test(w)&&xe.test(w)))return!0}return!1}catch{return!1}}function kt(t){let e=0,n=t.forceScope??null;return{terminalEventType:"design",async onProposalEvent(i){let o=a=>t.steer?(t.steer(`[auto-repair] ${a} \u2014 please re-finalize with this fixed.`),{proposal:null,error:null}):{proposal:null,error:a};if(i==null||typeof i!="object")return o("finalize_design payload is not an object");let r=i,v=Object.keys(r).filter(a=>!Lt.has(a));if(v.length>0)return o(`finalize_design carries ungated/unknown section(s): ${v.join(", ")} \u2014 mintable here: acs, scenarios, tests (+gaps)`);let N=new Map;for(let a of r.tests??[]){let m=N.get(a.automates);if(m)return o(`strict 1:1 violated in-payload: ${m} and ${a.temp_ref} both automate ${a.automates}`);if(N.set(a.automates,a.temp_ref),typeof a.app=="string"&&!/^APP/.test(a.app)&&!/[\/]/.test(a.app)&&!/\.(apk|zip|app)$/i.test(a.app))return o(`${a.temp_ref}: app '${a.app}' is neither a build path (.apk / .zip of an .app) nor an APP\u2026 upload id \u2014 omit the field when only a bundle id exists`)}let w=U(t.contextDir),T=/^design@(\d+)$/.exec(t.templateVersion?.()??"");if(T&&Number.parseInt(T[1],10)>=6)for(let a of r.tests??[]){if(!Array.isArray(a.steps??[]))return o(`${a.temp_ref}: steps must be an array of objective strings or {text, verifies} objects`);let m=new Set;for(let k of Array.isArray(a.steps)?a.steps:[])if(typeof k=="object"&&k.verifies)for(let O of k.verifies)m.add(O);let _=new Set(a.verifies??[]),b=[..._].filter(k=>!m.has(k)),I=[...m].filter(k=>!_.has(k));if(!(m.size===0&&Gt(w,a))&&(m.size===0||b.length>0||I.length>0))return o(`${a.temp_ref}: every AC must be claimed by the step that proves it \u2014 `+(m.size===0?"no step carries verifies tags":`not claimed by any step: [${b.join(", ")}]; tagged but not in the test's verifies: [${I.join(", ")}]`))}if(r.variables!==void 0&&!Array.isArray(r.variables))return o("variables must be an array of {name, description, secret}");let $=!!T&&Number.parseInt(T[1],10)>=7;if((r.variables??[]).length>0&&!$)return o("variables[] needs design@7 \u2014 this session is bound to an older template; drop the section");let x=new Set;for(let a of r.variables??[]){if(!a||typeof a!="object"||typeof a.name!="string"||typeof a.description!="string"||typeof a.secret!="boolean")return o(`variables[]: every entry is {name, description, secret} \u2014 got ${JSON.stringify(a)}`);let m=Object.keys(a).filter(b=>!["name","description","secret"].includes(b));if(m.length>0)return o(`variables[]: '${a.name}' carries ${m.join(", ")} \u2014 a declaration has no value and no other fields`);let _=re(a.name);if(_)return o(`variables[]: ${_}`);if(!a.description.trim()||/[\r\n]/.test(a.description))return o(`variables[]: '${a.name}' needs a one-line, non-empty description`);if(x.has(a.name))return o(`variables[]: '${a.name}' is declared twice`);x.add(a.name)}if($){let a=t.variablesIndex?.()??new Map;for(let m of r.tests??[]){let _=[...(Array.isArray(m.steps)?m.steps:[]).map(b=>typeof b=="string"?b:b.text),m.check_prose??""];for(let b of _)for(let I of Ne(b))if(!(a.has(I)||x.has(I)))return o(`${m.temp_ref}: step references {{${I}}} but no variable named '${I}' exists in the pool and this payload does not declare it \u2014 reuse a name from the variables block, or declare it in \`variables\` ({name, description, secret})`)}}t.force&&!t.resuming&&e===0&&n===null&&(n=st(w,t.ucRef));let C=w.resolve(t.ucRef),M=C?String(w.getNode(C.tip)?.content.risk??"med"):"med",R=[],P=new Set([t.ucRef,C?.cid,C?.tip].filter(Boolean)),X=a=>{if(P.has(a))return!0;let m=w.resolve(a);return m!=null&&(P.has(m.cid)||P.has(m.tip))},E;try{E={...r.acs?.length?{acs:r.acs.map(a=>({temp_ref:a.temp_ref,text:a.text,kind:a.kind,risk:a.risk??M,...a.expected_answer?{expected_answer:a.expected_answer}:{},...a.scoped_to&&!X(a.scoped_to)?{scope:{type:"scenario",ref:a.scoped_to}}:{}}))}:{},...r.scenarios?.length?{scenarios:r.scenarios}:{},...r.tests?.length?{tests:r.tests.map(a=>Ft(w,r,a,R))}:{},...r.exercises?.length?{exercises:r.exercises}:{},...r.gaps?.length?{gaps:r.gaps}:{},...r.scoped_to_repoints?.length?{scoped_to_repoints:r.scoped_to_repoints}:{},...r.judgements?.length?{judgements:r.judgements}:{}}}catch(a){return o(a instanceof Error?a.message:String(a))}let q=r.phase??(r.tests?.length?"tests":r.scenarios?.length?"scenarios":r.acs?.length?"acs":"design"),f=(a,m={})=>({contextDir:t.contextDir,graph:a,ucRef:t.ucRef,sections:E,by:t.by,phase:q,...m,...t.templateVersion?{templateVersion:t.templateVersion()}:{},...t.engine?{engine:t.engine}:{},...n?.length?{forceScope:n}:{},...t.because?{reason:t.because}:{},finalizeTestBody:(()=>{let _=new Map((E.tests??[]).map(k=>[k.temp_ref,k])),b=new Map,I=(k,O,H)=>{let L=_.get(k);if(!L?.test_md_blob)return null;let z=b.get(k);if(z!==void 0)return z;if(H.has(k))return L.test_md_blob;H.add(k);let W=new Map;for(let s of L.reuses??[]){I(s,O,H);let d=O(s);d!==null&&d!==s&&W.set(s,d)}let j=L.verifies.map(O).filter(s=>s!==null),J=Ee(L.test_md_blob,W),{md:ne,tagged:D}=Se(J,O),K=D?ne:$e(J,j);return De(K,j),b.set(k,K),K};return(k,O)=>{if(!k.test_md_blob)return null;let H=I(k.temp_ref,O,new Set)??k.test_md_blob;if(H===k.test_md_blob)return null;let L=z=>{for(let W of _.keys())if(O(W)===z){let j=I(W,O,new Set);if(j!==null)return{body:j,cycleKey:`batch:${z}`,next:L}}return ue(w)(z)};return{test_md_blob:H,definitionId:de(me(H,L))}}})()}),l;if(t.protocol){let a=t.generationTicket,m=await Fe(t.protocol,{verb:"design",ucTargets:[{ref:t.ucRef}],newBuCandidates:[],sourcePins:[],readBasis:w.latestHash,...a?{generationTicket:a}:{}},_=>{let b=he(f(_.graph,{eventIds:_.eventIds("design",1),sid:_.sid,...a&&!t.generationStamped?{generationTicket:a}:{}}));return b.errors!==null?{errors:b.errors}:{result:b,record:b.record}});m.ok&&"result"in m?(l=m.result,a&&!t.generationStamped&&(t.generationStamped=!0,t.generationTicket={...a,expected_prev_gen:a.next_gen})):m.ok?l={record:null,errors:null,minted:{},logicalIds:{},superseded:[],warnings:["commit already applied (recommit)"],finalizedTests:{}}:l={record:null,errors:m.kind==="validation"?m.errors:m.kind==="contended"?[{code:m.err.code,detail:`${t.ucRef} is held by ${m.err.holder?.owner_sid??"another session"}${m.err.holder?.alive?" (live)":" (stale)"} \u2014 try another use-case or wait for it to free`}]:m.kind==="drifted"?m.asks.map(b=>({code:"DRIFTED",detail:b.detail})):[{code:"UNSETTLED",detail:`concurrent activity kept moving the store (${m.attempts} attempts) \u2014 retry when the store is quieter`}],minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}}}else l=he(f(w));if(l.errors)return o("design commit failed: "+l.errors.map(a=>`${a.code}: ${a.detail}`).join("; "));let g=l.warnings.filter(a=>a.includes("\u2014 committed anyway; approve"));for(let a of l.warnings)(!g.includes(a)||g.length===1)&&t.note(`warning: ${a}`);g.length>1&&t.note(`warning: ${g.length} test link(s) refer to items still awaiting approval \u2014 saved anyway; review and approve those items in chat or via kane-cli context review`);let h=(a,m)=>a?`${a} ${m}${a>1?"s":""}`:null,S=[h(r.acs?.length,"AC"),h(r.scenarios?.length,"scenario"),h(r.tests?.length,"test"),h(r.gaps?.length,"gap")].filter(Boolean);t.aliases?.(Object.entries(l.minted).map(([a,m])=>({ref:a,cid:m,...l.logicalIds[a]?{id:l.logicalIds[a]}:{}})));{let a=`saved ${S.join(" \xB7 ")||"judgements/wiring"} as drafts`;(t.commitLine??t.note)(a)}let G=U(t.contextDir);t.onCommitted?.(G);for(let a of R){let m=l.logicalIds[a.anchorRef]??l.minted[a.anchorRef];nt(t.contextDir,l.finalizedTests[a.tempRef]??a.definitionId,{...a.rationale,anchor:m??a.rationale.anchor})}try{let a=Object.values(l.minted).filter(m=>G.getNode(m)?.label==="test");if(a.length>0){let m=vt(wt(t.contextDir)),_=it({graph:G,cids:a,cwd:m});_.wrote.length>0&&t.note(`\u2692 wrote ${_.wrote.map(b=>qt(b.path)).join(" \xB7 ")}`);for(let b of _.refused)t.note(`warning: could not create the test file for ${b.id} \u2014 ${b.reason}`)}}catch(a){t.note(`warning: the design was saved, but its test file could not be created (${a instanceof Error?a.message:String(a)})`)}try{if((r.variables??[]).length>0){let a=vt(wt(t.contextDir)),m=_t(a),{written:_}=yt({file:m,declarations:r.variables,known:t.variablesIndex?.()});if(_.sort(),_.length>0){let b=_.map(I=>({...r.variables.find(k=>k.name===I),file:m}));t.note(`\u2692 declared ${_.length} new variable${_.length===1?"":"s"} \u2014 ${_.join(" \xB7 ")} (values needed)`),t.event?.({type:"variables_declared",file:m,variables:b.map(({name:I,description:k,secret:O})=>({name:I,description:k,secret:O}))}),t.onVariablesDeclared?.(b)}}}catch(a){t.note(`warning: the design was saved, but its variable stubs could not be written (${a instanceof Error?a.message:String(a)})`)}t.event?.({type:"commit",acs:r.acs?.length??0,scenarios:r.scenarios?.length??0,tests:r.tests?.length??0,gaps:r.gaps?.length??0,warnings:l.warnings.length,minted:Object.entries(l.minted).map(([a,m])=>({temp_ref:a,cid:m,...l.logicalIds[a]?{logical_id:l.logicalIds[a]}:{}}))}),e+=1,n!==null&&(n=l.forceScopeRemaining??n,t.onForceScope?.(n));let V=He({verb:"design",commitN:e,ucRef:t.ucRef,phase:q,committed:Object.entries(l.minted).map(([a,m])=>({temp_ref:a,cid:m,...l.logicalIds[a]?{logical_id:l.logicalIds[a]}:{}})),warnings:l.warnings},G),ee=V.event.parity?.missing??[],te=!!r.tests?.length&&ee.length===0;return{proposal:l,error:null,receipt:V,...te?{sessionComplete:te}:{}}}}}function xt(t,e){return{type:"run_config",version:1,session_id:e.session_id,mode:e.mode,source:{source_id:`design:${t.usecase.logical_id??e.ucCid.slice(0,19)}`,source_cid:e.ucCid,kind:"design_context",numbered_text:bt({...t,session_mode:e.mode})},existing_use_cases:[],read_basis:e.readBasis,max_free_text_rounds:2,graph_reads:!0,verb:"design",chat:!0,design_budget:t.budget,topology:e.topology}}var Dt=Symbol("design-out-tee");function Wt(t,e,n,i){return{terminalEventType:"design",async onProposalEvent(o){let r=o??{},v=["acs","scenarios","tests","gaps"].map(N=>r[N]?.length?`${r[N].length} ${N}`:null).filter(Boolean).join(" \xB7 ");return n?.("plan_payload",{payload:r}),t(`plan: finalize_design \u2014 ${v||"wiring/judgements only"} (nothing committed${i?`; full payload: ${Z(i)}`:""})`),e?.({type:"plan",payload:r}),{proposal:r,error:null}}}}async function ii(t,e){let n=U(e.contextDir),i=null,o=null,r=t.useCase;if(t.resume){try{{let p=await Xe(e.contextDir,t.resume,n,{deps:{onWarn:y=>e.out(`note: ${y}`)}});o=p,i=p.handle,p.drift.length>0&&(e.out(`note: sources changed since the pause: ${p.drift.map(y=>y.subject).join(", ")} \u2014 the design continues against the current versions`),e.emit?.({type:"stale_basis",sources:p.drift.map(y=>y.subject)}))}}catch(p){if(p instanceof ke||p instanceof fe)return e.out(`error: ${p.message}`),e.emit?.({type:"error",message:`error: ${p.message}`}),p instanceof fe||p.code==="SESSION_MISSING"||p.code==="SESSION_EXPIRED"?2:1;throw p}let s=i.state,d=ze(s.verb,"design",t.resume);if(d)return e.out(d.message),e.emit?.({type:"error",message:d.message,code:d.code}),i.release(),2;if(r&&s.use_case&&r!==s.use_case){let p=`session ${t.resume} was designing ${s.use_case}; --use-case ${r} RETARGETS it`;if(!(t.confirmRetarget?await t.confirmRetarget(`${p} \u2014 continue with the new target?`):!1))return e.out(`error: ${p} \u2014 resume without --use-case to continue ${s.use_case}, or start a fresh session on ${r}`),e.emit?.({type:"error",code:"RETARGET_MISMATCH",message:p}),i.release(),2}if(r=r??s.use_case,s.uc_tip&&r){let p=n.resolve(r)?.tip;if(p&&p!==s.uc_tip){let y=`the use-case changed since the pause (${s.uc_tip.slice(0,19)}\u2026 \u2192 ${p.slice(0,19)}\u2026)`;if(!(t.confirmRetarget?await t.confirmRetarget(`${y} \u2014 re-ground and continue against the new version?`):!1))return e.out(`error: ${y} \u2014 resume interactively to re-ground, or abandon this session`),e.emit?.({type:"error",code:"UC_TIP_MOVED",message:y}),i.release(),2;e.emit?.({type:"stale_basis",usecase:r})}}let u=rt(n,s.target_pins);if(u.length>0){let p=`items this session pinned have changed since it paused: ${u.map(A=>`${A.ref}${A.now===null?" (now gone)":""}`).join(", ")}`;if(!(t.confirmRetarget?await t.confirmRetarget(`${p} \u2014 re-ground and continue?`):!1))return e.out(`error: ${p} \u2014 resume interactively to re-ground, or abandon`),e.emit?.({type:"error",code:"TARGET_PIN_MOVED",message:p}),i.release(),2;i.save({target_pins:(s.target_pins??[]).map(A=>({ref:A.ref,cid:n.resolve(A.ref)?.tip??A.cid}))})}let c=[...new Set([...i.state.held_receipts??[],...o?.view.kane?.held_receipts??[]])];if(c.length>0)if(e.chat?.holdReceipt)for(let p of c)e.chat.holdReceipt(p);else e={...e,initialMessage:[c.join(`
355
+ `).some(w=>/^##\s/.test(w)&&!/—\s?assert/.test(w)&&xe.test(w)))return!0}return!1}catch{return!1}}function kt(t){let e=0,n=t.forceScope??null;return{terminalEventType:"design",async onProposalEvent(i){let o=a=>t.steer?(t.steer(`[auto-repair] ${a} \u2014 please re-finalize with this fixed.`),{proposal:null,error:null}):{proposal:null,error:a};if(i==null||typeof i!="object")return o("finalize_design payload is not an object");let r=i,v=Object.keys(r).filter(a=>!Lt.has(a));if(v.length>0)return o(`finalize_design carries ungated/unknown section(s): ${v.join(", ")} \u2014 mintable here: acs, scenarios, tests (+gaps)`);let N=new Map;for(let a of r.tests??[]){let m=N.get(a.automates);if(m)return o(`strict 1:1 violated in-payload: ${m} and ${a.temp_ref} both automate ${a.automates}`);if(N.set(a.automates,a.temp_ref),typeof a.app=="string"&&!/^APP/.test(a.app)&&!/[\/]/.test(a.app)&&!/\.(apk|zip|app)$/i.test(a.app))return o(`${a.temp_ref}: app '${a.app}' is neither a build path (.apk / .zip of an .app) nor an APP\u2026 upload id \u2014 omit the field when only a bundle id exists`)}let w=U(t.contextDir),T=/^design@(\d+)$/.exec(t.templateVersion?.()??"");if(T&&Number.parseInt(T[1],10)>=6)for(let a of r.tests??[]){if(!Array.isArray(a.steps??[]))return o(`${a.temp_ref}: steps must be an array of objective strings or {text, verifies} objects`);let m=new Set;for(let k of Array.isArray(a.steps)?a.steps:[])if(typeof k=="object"&&k.verifies)for(let O of k.verifies)m.add(O);let _=new Set(a.verifies??[]),b=[..._].filter(k=>!m.has(k)),I=[...m].filter(k=>!_.has(k));if(!(m.size===0&&Gt(w,a))&&(m.size===0||b.length>0||I.length>0))return o(`${a.temp_ref}: every AC must be claimed by the step that proves it \u2014 `+(m.size===0?"no step carries verifies tags":`not claimed by any step: [${b.join(", ")}]; tagged but not in the test's verifies: [${I.join(", ")}]`))}if(r.variables!==void 0&&!Array.isArray(r.variables))return o("variables must be an array of {name, description, secret}");let $=!!T&&Number.parseInt(T[1],10)>=7;if((r.variables??[]).length>0&&!$)return o("variables[] needs design@7 \u2014 this session is bound to an older template; drop the section");let x=new Set;for(let a of r.variables??[]){if(!a||typeof a!="object"||typeof a.name!="string"||typeof a.description!="string"||typeof a.secret!="boolean")return o(`variables[]: every entry is {name, description, secret} \u2014 got ${JSON.stringify(a)}`);let m=Object.keys(a).filter(b=>!["name","description","secret"].includes(b));if(m.length>0)return o(`variables[]: '${a.name}' carries ${m.join(", ")} \u2014 a declaration has no value and no other fields`);let _=re(a.name);if(_)return o(`variables[]: ${_}`);if(!a.description.trim()||/[\r\n]/.test(a.description))return o(`variables[]: '${a.name}' needs a one-line, non-empty description`);if(x.has(a.name))return o(`variables[]: '${a.name}' is declared twice`);x.add(a.name)}if($){let a=t.variablesIndex?.()??new Map;for(let m of r.tests??[]){let _=[...(Array.isArray(m.steps)?m.steps:[]).map(b=>typeof b=="string"?b:b.text),m.check_prose??""];for(let b of _)for(let I of Ne(b))if(!(a.has(I)||x.has(I)))return o(`${m.temp_ref}: step references {{${I}}} but no variable named '${I}' exists in the pool and this payload does not declare it \u2014 reuse a name from the variables block, or declare it in \`variables\` ({name, description, secret})`)}}t.force&&!t.resuming&&e===0&&n===null&&(n=it(w,t.ucRef));let C=w.resolve(t.ucRef),M=C?String(w.getNode(C.tip)?.content.risk??"med"):"med",R=[],P=new Set([t.ucRef,C?.cid,C?.tip].filter(Boolean)),X=a=>{if(P.has(a))return!0;let m=w.resolve(a);return m!=null&&(P.has(m.cid)||P.has(m.tip))},E;try{E={...r.acs?.length?{acs:r.acs.map(a=>({temp_ref:a.temp_ref,text:a.text,kind:a.kind,risk:a.risk??M,...a.expected_answer?{expected_answer:a.expected_answer}:{},...a.scoped_to&&!X(a.scoped_to)?{scope:{type:"scenario",ref:a.scoped_to}}:{}}))}:{},...r.scenarios?.length?{scenarios:r.scenarios}:{},...r.tests?.length?{tests:r.tests.map(a=>Ft(w,r,a,R))}:{},...r.exercises?.length?{exercises:r.exercises}:{},...r.gaps?.length?{gaps:r.gaps}:{},...r.scoped_to_repoints?.length?{scoped_to_repoints:r.scoped_to_repoints}:{},...r.judgements?.length?{judgements:r.judgements}:{}}}catch(a){return o(a instanceof Error?a.message:String(a))}let q=r.phase??(r.tests?.length?"tests":r.scenarios?.length?"scenarios":r.acs?.length?"acs":"design"),f=(a,m={})=>({contextDir:t.contextDir,graph:a,ucRef:t.ucRef,sections:E,by:t.by,phase:q,...m,...t.templateVersion?{templateVersion:t.templateVersion()}:{},...t.engine?{engine:t.engine}:{},...n?.length?{forceScope:n}:{},...t.because?{reason:t.because}:{},finalizeTestBody:(()=>{let _=new Map((E.tests??[]).map(k=>[k.temp_ref,k])),b=new Map,I=(k,O,H)=>{let L=_.get(k);if(!L?.test_md_blob)return null;let z=b.get(k);if(z!==void 0)return z;if(H.has(k))return L.test_md_blob;H.add(k);let W=new Map;for(let s of L.reuses??[]){I(s,O,H);let d=O(s);d!==null&&d!==s&&W.set(s,d)}let j=L.verifies.map(O).filter(s=>s!==null),J=Ee(L.test_md_blob,W),{md:ne,tagged:D}=Se(J,O),K=D?ne:$e(J,j);return De(K,j),b.set(k,K),K};return(k,O)=>{if(!k.test_md_blob)return null;let H=I(k.temp_ref,O,new Set)??k.test_md_blob;if(H===k.test_md_blob)return null;let L=z=>{for(let W of _.keys())if(O(W)===z){let j=I(W,O,new Set);if(j!==null)return{body:j,cycleKey:`batch:${z}`,next:L}}return ue(w)(z)};return{test_md_blob:H,definitionId:de(me(H,L))}}})()}),l;if(t.protocol){let a=t.generationTicket,m=await Ge(t.protocol,{verb:"design",ucTargets:[{ref:t.ucRef}],newBuCandidates:[],sourcePins:[],readBasis:w.latestHash,...a?{generationTicket:a}:{}},_=>{let b=he(f(_.graph,{eventIds:_.eventIds("design",1),sid:_.sid,...a&&!t.generationStamped?{generationTicket:a}:{}}));return b.errors!==null?{errors:b.errors}:{result:b,record:b.record}});m.ok&&"result"in m?(l=m.result,a&&!t.generationStamped&&(t.generationStamped=!0,t.generationTicket={...a,expected_prev_gen:a.next_gen})):m.ok?l={record:null,errors:null,minted:{},logicalIds:{},superseded:[],warnings:["commit already applied (recommit)"],finalizedTests:{}}:l={record:null,errors:m.kind==="validation"?m.errors:m.kind==="contended"?[{code:m.err.code,detail:`${t.ucRef} is held by ${m.err.holder?.owner_sid??"another session"}${m.err.holder?.alive?" (live)":" (stale)"} \u2014 try another use-case or wait for it to free`}]:m.kind==="drifted"?m.asks.map(b=>({code:"DRIFTED",detail:b.detail})):[{code:"UNSETTLED",detail:`concurrent activity kept moving the store (${m.attempts} attempts) \u2014 retry when the store is quieter`}],minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}}}else l=he(f(w));if(l.errors)return o("design commit failed: "+l.errors.map(a=>`${a.code}: ${a.detail}`).join("; "));let g=l.warnings.filter(a=>a.includes("\u2014 committed anyway; approve"));for(let a of l.warnings)(!g.includes(a)||g.length===1)&&t.note(`warning: ${a}`);g.length>1&&t.note(`warning: ${g.length} test link(s) refer to items still awaiting approval \u2014 saved anyway; review and approve those items in chat or via kane-cli context review`);let h=(a,m)=>a?`${a} ${m}${a>1?"s":""}`:null,S=[h(r.acs?.length,"AC"),h(r.scenarios?.length,"scenario"),h(r.tests?.length,"test"),h(r.gaps?.length,"gap")].filter(Boolean);t.aliases?.(Object.entries(l.minted).map(([a,m])=>({ref:a,cid:m,...l.logicalIds[a]?{id:l.logicalIds[a]}:{}})));{let a=`saved ${S.join(" \xB7 ")||"judgements/wiring"} as drafts`;(t.commitLine??t.note)(a)}let G=U(t.contextDir);t.onCommitted?.(G);for(let a of R){let m=l.logicalIds[a.anchorRef]??l.minted[a.anchorRef];nt(t.contextDir,l.finalizedTests[a.tempRef]??a.definitionId,{...a.rationale,anchor:m??a.rationale.anchor})}try{let a=Object.values(l.minted).filter(m=>G.getNode(m)?.label==="test");if(a.length>0){let m=vt(wt(t.contextDir)),_=je({graph:G,cids:a,cwd:m});_.wrote.length>0&&t.note(`\u2692 wrote ${_.wrote.map(b=>qt(b.path)).join(" \xB7 ")}`);for(let b of _.refused)t.note(`warning: could not create the test file for ${b.id} \u2014 ${b.reason}`)}}catch(a){t.note(`warning: the design was saved, but its test file could not be created (${a instanceof Error?a.message:String(a)})`)}try{if((r.variables??[]).length>0){let a=vt(wt(t.contextDir)),m=_t(a),{written:_}=yt({file:m,declarations:r.variables,known:t.variablesIndex?.()});if(_.sort(),_.length>0){let b=_.map(I=>({...r.variables.find(k=>k.name===I),file:m}));t.note(`\u2692 declared ${_.length} new variable${_.length===1?"":"s"} \u2014 ${_.join(" \xB7 ")} (values needed)`),t.event?.({type:"variables_declared",file:m,variables:b.map(({name:I,description:k,secret:O})=>({name:I,description:k,secret:O}))}),t.onVariablesDeclared?.(b)}}}catch(a){t.note(`warning: the design was saved, but its variable stubs could not be written (${a instanceof Error?a.message:String(a)})`)}t.event?.({type:"commit",acs:r.acs?.length??0,scenarios:r.scenarios?.length??0,tests:r.tests?.length??0,gaps:r.gaps?.length??0,warnings:l.warnings.length,minted:Object.entries(l.minted).map(([a,m])=>({temp_ref:a,cid:m,...l.logicalIds[a]?{logical_id:l.logicalIds[a]}:{}}))}),e+=1,n!==null&&(n=l.forceScopeRemaining??n,t.onForceScope?.(n));let V=ze({verb:"design",commitN:e,ucRef:t.ucRef,phase:q,committed:Object.entries(l.minted).map(([a,m])=>({temp_ref:a,cid:m,...l.logicalIds[a]?{logical_id:l.logicalIds[a]}:{}})),warnings:l.warnings},G),ee=V.event.parity?.missing??[],te=!!r.tests?.length&&ee.length===0;return{proposal:l,error:null,receipt:V,...te?{sessionComplete:te}:{}}}}}function xt(t,e){return{type:"run_config",version:1,session_id:e.session_id,mode:e.mode,source:{source_id:`design:${t.usecase.logical_id??e.ucCid.slice(0,19)}`,source_cid:e.ucCid,kind:"design_context",numbered_text:bt({...t,session_mode:e.mode})},existing_use_cases:[],read_basis:e.readBasis,max_free_text_rounds:2,graph_reads:!0,verb:"design",chat:!0,design_budget:t.budget,topology:e.topology}}var Dt=Symbol("design-out-tee");function Wt(t,e,n,i){return{terminalEventType:"design",async onProposalEvent(o){let r=o??{},v=["acs","scenarios","tests","gaps"].map(N=>r[N]?.length?`${r[N].length} ${N}`:null).filter(Boolean).join(" \xB7 ");return n?.("plan_payload",{payload:r}),t(`plan: finalize_design \u2014 ${v||"wiring/judgements only"} (nothing committed${i?`; full payload: ${Z(i)}`:""})`),e?.({type:"plan",payload:r}),{proposal:r,error:null}}}}async function ii(t,e){let n=U(e.contextDir),i=null,o=null,r=t.useCase;if(t.resume){try{{let p=await Ze(e.contextDir,t.resume,n,{deps:{onWarn:y=>e.out(`note: ${y}`)}});o=p,i=p.handle,p.drift.length>0&&(e.out(`note: sources changed since the pause: ${p.drift.map(y=>y.subject).join(", ")} \u2014 the design continues against the current versions`),e.emit?.({type:"stale_basis",sources:p.drift.map(y=>y.subject)}))}}catch(p){if(p instanceof ke||p instanceof fe)return e.out(`error: ${p.message}`),e.emit?.({type:"error",message:`error: ${p.message}`}),p instanceof fe||p.code==="SESSION_MISSING"||p.code==="SESSION_EXPIRED"?2:1;throw p}let s=i.state,d=We(s.verb,"design",t.resume);if(d)return e.out(d.message),e.emit?.({type:"error",message:d.message,code:d.code}),i.release(),2;if(r&&s.use_case&&r!==s.use_case){let p=`session ${t.resume} was designing ${s.use_case}; --use-case ${r} RETARGETS it`;if(!(t.confirmRetarget?await t.confirmRetarget(`${p} \u2014 continue with the new target?`):!1))return e.out(`error: ${p} \u2014 resume without --use-case to continue ${s.use_case}, or start a fresh session on ${r}`),e.emit?.({type:"error",code:"RETARGET_MISMATCH",message:p}),i.release(),2}if(r=r??s.use_case,s.uc_tip&&r){let p=n.resolve(r)?.tip;if(p&&p!==s.uc_tip){let y=`the use-case changed since the pause (${s.uc_tip.slice(0,19)}\u2026 \u2192 ${p.slice(0,19)}\u2026)`;if(!(t.confirmRetarget?await t.confirmRetarget(`${y} \u2014 re-ground and continue against the new version?`):!1))return e.out(`error: ${y} \u2014 resume interactively to re-ground, or abandon this session`),e.emit?.({type:"error",code:"UC_TIP_MOVED",message:y}),i.release(),2;e.emit?.({type:"stale_basis",usecase:r})}}let u=rt(n,s.target_pins);if(u.length>0){let p=`items this session pinned have changed since it paused: ${u.map(A=>`${A.ref}${A.now===null?" (now gone)":""}`).join(", ")}`;if(!(t.confirmRetarget?await t.confirmRetarget(`${p} \u2014 re-ground and continue?`):!1))return e.out(`error: ${p} \u2014 resume interactively to re-ground, or abandon`),e.emit?.({type:"error",code:"TARGET_PIN_MOVED",message:p}),i.release(),2;i.save({target_pins:(s.target_pins??[]).map(A=>({ref:A.ref,cid:n.resolve(A.ref)?.tip??A.cid}))})}let c=[...new Set([...i.state.held_receipts??[],...o?.view.kane?.held_receipts??[]])];if(c.length>0)if(e.chat?.holdReceipt)for(let p of c)e.chat.holdReceipt(p);else e={...e,initialMessage:[c.join(`
356
356
 
357
357
  `),e.initialMessage].filter(Boolean).join(`
358
358
 
359
- `)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let v=t.resume?void 0:t.phase,N=!1;if(v!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:d,phaseLadderFor:u}=await import("./phase-seed-BMOSAA74.js");N=u(e.contextDir,n,r).length>0;let c=s(e.contextDir,n,r,v);if(!c.ok&&c.code==="UNKNOWN_PHASE")return e.out(`error: ${c.message}`),e.emit?.({type:"error",code:"UNKNOWN_PHASE",message:c.message}),i?.release(),2;if(!c.ok&&c.code==="PHASE_ORDER"){let p=t.askPhaseEntry?await t.askPhaseEntry({message:c.message,earliest:c.earliest}):"cancel";if(p==="earliest")e.out(`starting at ${c.earliest} instead (${c.missing.join(", ")} not committed yet)`),v=c.earliest;else if(p==="proceed")e.out(`note: entering at ${v} with ${c.missing.join(", ")} uncommitted \u2014 proceeding on your say-so`),e.emit?.({type:"phase_entry_override",phase:v,missing:c.missing});else{let y=(t.mode??"interactive")==="agent",A=d(r,c.earliest,y);return e.out(`error: ${c.message}`),e.emit?.({type:"error",code:"PHASE_ORDER",message:c.message,next:[{cmd:A,why:`${c.earliest} is the earliest uncommitted phase for ${r}`,title:`Start at ${c.earliest}`}]}),i?.release(),2}}}let w=!!(t.force||i?.state.force),T=!!(t.resume&&i),$=tt(n,r,w||T||N);if(!$.ok){let s=(t.mode??"interactive")==="interactive";if($.wall&&s&&t.askDesignEntry){let{captureForceScope:d}=await import("./design-committer-UPC6NZUF.js"),u=d(n,r).length,c=await t.askDesignEntry({wall:$.wall.kind,message:$.message,display:$.wall.display,impactPairs:u});if(c.pick==="redesign"||c.pick==="proceed"){if(!c.because.trim())return e.out("a redesign needs a reason (--because) \u2014 nothing executed"),i?.release(),2;e.out(c.pick==="redesign"?`redesigning ${$.wall.display} (${u} pair(s) superseded) \u2014 because: ${c.because.trim()}`:`proceeding against the stale design (noted) \u2014 because: ${c.because.trim()}`),t={...t,force:!0,because:t.because??c.because.trim()},w=!0}else return c.pick==="view"?(e.out(`view the existing design: kane-cli context view ${$.wall.display}`),i?.release(),0):c.pick==="refresh"?(e.out(`refresh it first: kane-cli maintain evolve ${$.wall.display}`),i?.release(),0):(e.out("nothing executed \u2014 list use-cases: kane-cli context list"),i?.release(),0)}else{e.out(`design: ${$.message}`);let d=$.wall&&t.mode==="agent"?[{cmd:`kane-cli context view ${$.wall.display}`,why:"view the existing design",title:"View the design"},...$.wall.kind==="designed-stale"?[{cmd:`kane-cli maintain evolve ${$.wall.display}`,why:"the use-case moved since the design \u2014 evolve refreshes it",title:"Evolve the design"}]:[],{cmd:`kane-cli design tests --use-case ${$.wall.display} --force --mode agent`,why:"redesign \u2014 supersedes the live scenario+test pairs",title:"Redesign"}]:void 0;return e.emit?.({type:"gate_refused",message:$.message,...d?{next:d}:{}}),i?.release(),$.code}}if(e.preflightTurn){let s=await e.preflightTurn();if(!s.ok)return e.out(s.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:s.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let x={contextDir:e.contextDir,resolveAlias:s=>Ge(s,{env:process.env,auth:e.auth}),embed:(s,d)=>Ve(s,d,{env:process.env,auth:e.auth})};e.chat?.setWorking?.("assembling context\u2026");let C=Pe(Oe(ae(e.contextDir))),M=[],R=await ht(e.contextDir,r,{max:t.max,strength:t.strength,embedSearch:x,variablesIndex:C});if(t.priorDesign!==void 0&&(R.prior_design=t.priorDesign),t.changeDelta!==void 0&&(R.change_delta=t.changeDelta),t.because&&(R.because=t.because),v!==void 0){let{buildPhaseSeed:s}=await import("./phase-seed-BMOSAA74.js"),d=s(e.contextDir,n,r,v);R.prior_design===void 0&&d.priorDesign!==void 0&&(R.prior_design=d.priorDesign),R.entry_phase=v,d.phaseLadder.length>0&&(R.phase_ladder=d.phaseLadder)}let P=e.now?.()??new Date,X=`${P.toISOString().replace(/[-:]/g,"").slice(0,15)}-${Ht(2).toString("hex")}`,E=t.mode??"interactive",q=E==="interactive"&&!!e.chat&&!e.nested,f=o?{...o.spawnConfig,mode:E}:xt(R,{session_id:t.resume??`design-${X}`,mode:E,ucCid:R.usecase.cid,readBasis:n.latestHash,topology:Qe("design")}),l={current:null};if(f.resume&&"schema"in f.resume){let s=f.resume.binding?.template_version;typeof s=="string"&&(l.current=s)}t.plan?f.chat=!1:f.chat=!0;let g=e.telemetry?.enabled?e.telemetry:void 0,h=g?we(g.ids.context_instance_id??null,"design",g.ids.session_id):ve(e.contextDir,"logs",`design-${X}.log`);Vt(ae(h),{recursive:!0}),q||e.out(`trace: ${Z(h)}`),e.emit?.({type:"run_start",mode:E,trace:h,use_case:r,...g?{session:g.ids.session_id}:{}});let S=(s,d,u)=>{try{Ut(h,JSON.stringify({ts:new Date().toISOString(),level:s==="error"?"error":"info",run_id:g?.ids.operation_id,...g?{user_session_id:g.ids.session_id}:{},kind:s,session_id:u,data:d})+`
360
- `)}catch{}g?.wireTrace(s,d,u)};{let s=e.out;if(s[Dt]!==!0){let d=u=>{S("transcript",{line:u}),s(u)};d[Dt]=!0,e.out=d}}if(t.resume&&i){o||(f.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-JLS63SDI.js"),d=s(e.contextDir).records.filter(u=>u.sid===t.resume).map(u=>u.design_phase).filter(u=>u!=null&&typeof u.phase=="string");if(d.length>0){let u=d.map(p=>`${p.phase}${p.completeness==="partial"?" (partial)":""}`).join(" \u2192 "),c=`[kane] durable record for this session (${t.resume}) on ${r}: design phases already COMMITTED \u2014 ${u}. Those finalizes landed; do not re-send them. Continue from the next uncommitted phase, or finish if the design is complete.`;e={...e,initialMessage:[e.initialMessage,c].filter(Boolean).join(`
359
+ `)};if(!r)return e.out(`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),e.emit?.({type:"error",message:`error: session ${t.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let v=t.resume?void 0:t.phase,N=!1;if(v!==void 0){let{checkPhaseEntry:s,phaseEntryCmd:d,phaseLadderFor:u}=await import("./phase-seed-HKJ2EF7R.js");N=u(e.contextDir,n,r).length>0;let c=s(e.contextDir,n,r,v);if(!c.ok&&c.code==="UNKNOWN_PHASE")return e.out(`error: ${c.message}`),e.emit?.({type:"error",code:"UNKNOWN_PHASE",message:c.message}),i?.release(),2;if(!c.ok&&c.code==="PHASE_ORDER"){let p=t.askPhaseEntry?await t.askPhaseEntry({message:c.message,earliest:c.earliest}):"cancel";if(p==="earliest")e.out(`starting at ${c.earliest} instead (${c.missing.join(", ")} not committed yet)`),v=c.earliest;else if(p==="proceed")e.out(`note: entering at ${v} with ${c.missing.join(", ")} uncommitted \u2014 proceeding on your say-so`),e.emit?.({type:"phase_entry_override",phase:v,missing:c.missing});else{let y=(t.mode??"interactive")==="agent",A=d(r,c.earliest,y);return e.out(`error: ${c.message}`),e.emit?.({type:"error",code:"PHASE_ORDER",message:c.message,next:[{cmd:A,why:`${c.earliest} is the earliest uncommitted phase for ${r}`,title:`Start at ${c.earliest}`}]}),i?.release(),2}}}let w=!!(t.force||i?.state.force),T=!!(t.resume&&i),$=st(n,r,w||T||N);if(!$.ok){let s=(t.mode??"interactive")==="interactive";if($.wall&&s&&t.askDesignEntry){let{captureForceScope:d}=await import("./design-committer-J57IAAA5.js"),u=d(n,r).length,c=await t.askDesignEntry({wall:$.wall.kind,message:$.message,display:$.wall.display,impactPairs:u});if(c.pick==="redesign"||c.pick==="proceed"){if(!c.because.trim())return e.out("a redesign needs a reason (--because) \u2014 nothing executed"),i?.release(),2;e.out(c.pick==="redesign"?`redesigning ${$.wall.display} (${u} pair(s) superseded) \u2014 because: ${c.because.trim()}`:`proceeding against the stale design (noted) \u2014 because: ${c.because.trim()}`),t={...t,force:!0,because:t.because??c.because.trim()},w=!0}else return c.pick==="view"?(e.out(`view the existing design: kane-cli context view ${$.wall.display}`),i?.release(),0):c.pick==="refresh"?(e.out(`refresh it first: kane-cli maintain evolve ${$.wall.display}`),i?.release(),0):(e.out("nothing executed \u2014 list use-cases: kane-cli context list"),i?.release(),0)}else{e.out(`design: ${$.message}`);let d=$.wall&&t.mode==="agent"?[{cmd:`kane-cli context view ${$.wall.display}`,why:"view the existing design",title:"View the design"},...$.wall.kind==="designed-stale"?[{cmd:`kane-cli maintain evolve ${$.wall.display}`,why:"the use-case moved since the design \u2014 evolve refreshes it",title:"Evolve the design"}]:[],{cmd:`kane-cli design tests --use-case ${$.wall.display} --force --mode agent`,why:"redesign \u2014 supersedes the live scenario+test pairs",title:"Redesign"}]:void 0;return e.emit?.({type:"gate_refused",message:$.message,...d?{next:d}:{}}),i?.release(),$.code}}if(e.preflightTurn){let s=await e.preflightTurn();if(!s.ok)return e.out(s.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:s.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let x={contextDir:e.contextDir,resolveAlias:s=>Ve(s,{env:process.env,auth:e.auth}),embed:(s,d)=>Ue(s,d,{env:process.env,auth:e.auth})};e.chat?.setWorking?.("assembling context\u2026");let C=Pe(Oe(ae(e.contextDir))),M=[],R=await ht(e.contextDir,r,{max:t.max,strength:t.strength,embedSearch:x,variablesIndex:C});if(t.priorDesign!==void 0&&(R.prior_design=t.priorDesign),t.changeDelta!==void 0&&(R.change_delta=t.changeDelta),t.because&&(R.because=t.because),v!==void 0){let{buildPhaseSeed:s}=await import("./phase-seed-HKJ2EF7R.js"),d=s(e.contextDir,n,r,v);R.prior_design===void 0&&d.priorDesign!==void 0&&(R.prior_design=d.priorDesign),R.entry_phase=v,d.phaseLadder.length>0&&(R.phase_ladder=d.phaseLadder)}let P=e.now?.()??new Date,X=`${P.toISOString().replace(/[-:]/g,"").slice(0,15)}-${Ht(2).toString("hex")}`,E=t.mode??"interactive",q=E==="interactive"&&!!e.chat&&!e.nested,f=o?{...o.spawnConfig,mode:E}:xt(R,{session_id:t.resume??`design-${X}`,mode:E,ucCid:R.usecase.cid,readBasis:n.latestHash,topology:Je("design")}),l={current:null};if(f.resume&&"schema"in f.resume){let s=f.resume.binding?.template_version;typeof s=="string"&&(l.current=s)}t.plan?f.chat=!1:f.chat=!0;let g=e.telemetry?.enabled?e.telemetry:void 0,h=g?we(g.ids.context_instance_id??null,"design",g.ids.session_id):ve(e.contextDir,"logs",`design-${X}.log`);Vt(ae(h),{recursive:!0}),q||e.out(`trace: ${Z(h)}`),e.emit?.({type:"run_start",mode:E,trace:h,use_case:r,...g?{session:g.ids.session_id}:{}});let S=(s,d,u)=>{try{Ut(h,JSON.stringify({ts:new Date().toISOString(),level:s==="error"?"error":"info",run_id:g?.ids.operation_id,...g?{user_session_id:g.ids.session_id}:{},kind:s,session_id:u,data:d})+`
360
+ `)}catch{}g?.wireTrace(s,d,u)};{let s=e.out;if(s[Dt]!==!0){let d=u=>{S("transcript",{line:u}),s(u)};d[Dt]=!0,e.out=d}}if(t.resume&&i){o||(f.resume={agent_state:i.state.agent_state}),e.out(`resuming design session ${t.resume}`),i.state.assumed.length>0&&e.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${t.resume} lists them`);try{let{readRecords:s}=await import("./records-TJJJWBUD.js"),d=s(e.contextDir).records.filter(u=>u.sid===t.resume).map(u=>u.design_phase).filter(u=>u!=null&&typeof u.phase=="string");if(d.length>0){let u=d.map(p=>`${p.phase}${p.completeness==="partial"?" (partial)":""}`).join(" \u2192 "),c=`[kane] durable record for this session (${t.resume}) on ${r}: design phases already COMMITTED \u2014 ${u}. Those finalizes landed; do not re-send them. Continue from the next uncommitted phase, or finish if the design is complete.`;e={...e,initialMessage:[e.initialMessage,c].filter(Boolean).join(`
361
361
 
362
362
  `)}}}catch{}t.message&&(e={...e,initialMessage:[e.initialMessage,t.message].filter(Boolean).join(`
363
363
 
364
- `)})}let G=null,V={current:n},ee={detach:null},te=()=>{let s=ee.detach;ee.detach=null,s&&s()},a=(s,d)=>{let u=i;if(!u)return{};let c=s.ask,p=Ke({contextDir:s.contextDir,cwd:ae(s.contextDir),handle:u,note:y=>s.chat?s.chat.note(y):s.out(y),graphSlot:d,...s.now?{now:s.now}:{}});if(s.chat?.attachIngest){let y=s.chat;ee.detach=y.attachIngest(async A=>{try{u.save({ingest_registry:ge(u.state.ingest_registry,A,s.now?.()??new Date)});let B=await p({id:`attach-${u.state.sid}-${(u.state.ingest_registry??[]).length}`,ref:A,purpose:null});return B.ok?(y.deferBatch({source_id:B.result.source_id,cid:B.result.cid}),{ok:!0}):{ok:!1,error:B.error.message}}catch(B){return{ok:!1,error:B instanceof Error?B.message:String(B)}}})}return{ask:async y=>{let A=await c(y);if(Array.isArray(A)){let B=A.filter(F=>{if(F.free_text==null||F.free_text.trim()==="")return!1;let oe=y.find($t=>$t.id===F.id);return F.selected_index!=null&&oe?.options[F.selected_index]?.input===!0}).map(F=>F.free_text.trim());if(B.length>0){let F=u.state.ingest_registry;for(let oe of B)F=ge(F,oe,s.now?.()??new Date);u.save({ingest_registry:F})}}return A},ingest:p}};e.nested||e.chat?.attachOnCommitted?.(s=>{V.current=s});let m="";if(e.chat&&!t.plan&&!e.nested){let s=Ue({contextDir:e.contextDir,graph:U(e.contextDir),sessionStamp:f.session_id,by:e.by??{kind:"human",id:"owner"}});s.errors===null||s.errors[0]?.code==="CONV_SOURCE_EXISTS"?(m=s.sourceId,e.chat.attachConversationSource?.(m),V.current=U(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${s.errors[0]?.detail})`)}let _=U(e.contextDir),b;if(!t.plan){let s=Me(_,r);if(T&&s!==null&&s.live){let d=_.resolve(r);b={uc_root:Le(_,d.cid),next_gen:s.gen,expected_prev_gen:s.gen}}else{let d=Be(_,r,{...w?{force:!0}:{},because:t.because??(w?"forced redesign (--force)":void 0)});if("error"in d)return e.out(`design: ${d.error.detail}`),e.emit?.({type:"gate_refused",message:d.error.detail,code:d.error.code}),i?.release(),2;b=d}}let I=Ae(e.contextDir,f.session_id),k=null,O=()=>{try{k?.release()}catch{}};if(!t.plan)try{k=I.acquire([Te(_,r).key],{hold:"session",verb:"design"})}catch(s){if(s instanceof Ce&&s.code==="UC_HELD"){let d=s.holder,u=`design: ${r} is being designed by another session${d?.alive===!1?` \u2014 that session looks stopped; resume it with kane-cli design tests --resume ${d?.owner_sid??"<session>"}`:""} \u2014 pick another use-case (kane-cli design tests) or wait for it to finish`;return e.out(u),e.emit?.({type:"error",code:"UC_HELD",message:u}),i?.release(),2}throw s}let H={contextDir:e.contextDir,rootSid:f.session_id,locks:I,probe:{batchSimilar:async()=>({hits:[],degraded:!1,probeBasis:null}),recheckLocal:()=>({hits:[],uncachedNewNodes:[]})}},L=!t.plan&&E!=="ci",z=()=>Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(s=>s.type==="DERIVES"&&typeof s.props.source_id=="string").map(s=>[String(s.props.source_id),n.heads.get(String(s.props.source_id))??null])),W=!1;L&&!i&&(W=!0,i=le(e.contextDir,{sid:f.session_id,mode:"agent",created_at:P.toISOString(),expires_at:new Date(P.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},read_basis:z(),assumed:[],corpus_cursor:{remaining:[]},conv_source:m,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...w?{force:!0}:{},...g?{user_session_id:g.ids.session_id}:{}}));let j;if(L&&i){let{resume:s,...d}=f;qe(e.contextDir,f.session_id,{schema:je,kind:"base",sid:f.session_id,verb:"design",mode:E,created_at:P.toISOString(),run_config:d,conv_source:m||i.state.conv_source||"",...r?{use_case:r}:{},...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},store_watermark:Ie(e.contextDir)}),f.checkpoints=!0,t.resume&&S("resume_kind",{kind:o?o.view.pointer===null?"bare-base":o.view.pointer.at==="final"?"pause":"crash":"v1-shim"},f.session_id);let u=o?0:i.state.checkpoint?.seq??0,c=i;j=Ye({contextDir:e.contextDir,handle:c,seqBase:()=>u,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>z(),corpusCursor:()=>({remaining:[]}),onSoftCap:y=>e.out(y),onStat:y=>S("ckpt_stat",y,f.session_id),...e.now?{now:e.now}:{}});let p=j;j={...p,persist:y=>{let A=y.binding?.template_version;return typeof A=="string"&&A&&(l.current=A),p.persist(y)}}}!L&&!t.plan&&(f.checkpoints=!0,j={persist:s=>{let d=s.binding?.template_version;return typeof d=="string"&&d&&(l.current=d),{seq:s.seq,turn_id:s.turn_id,at:s.at,ts:new Date().toISOString(),full_seq:null}}});let J=()=>{if(!i)return;let s=i.state.checkpoint;if(s){let d=E!=="interactive"?` --mode ${E}`:"";e.out(`session ${i.state.sid} kept its last checkpoint (seq ${s.seq}, ${s.ts}) \u2014 resume with: kane-cli design tests --resume ${i.state.sid}${d}`),i.release()}else if(W){try{i.complete()}catch{i.release()}try{St(ve(e.contextDir,"sessions"))}catch{}}else i.release();i=null},ne=t.plan?Wt(e.out,e.emit,S,h):kt({templateVersion:()=>l.current,contextDir:e.contextDir,ucRef:r,by:{kind:"ai",id:"design-agent"},force:w,engine:"design@1",note:s=>e.chat?e.chat.note(s):e.out(s),commitLine:s=>e.chat?e.chat.ledger({kind:"commit",ok:!0,line:s}):e.out(s),steer:e.chat?s=>e.chat.submit(s):void 0,event:e.emit,variablesIndex:()=>C,onVariablesDeclared:s=>{M.push(...s);for(let d of s)C.set(d.name,{has_value:!1,source:d.file})},resuming:T,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:s=>{G=s},...t.because?{because:t.because}:{},aliases:e.chat?s=>e.chat.registerAliases?.(s):void 0,onCommitted:s=>{V.current=s},protocol:H,...b?{generationTicket:b}:{},...T?{generationStamped:!0}:{}});e.chat||(S("design_budget",{max_pairs:R.budget.max_pairs??null,strength:R.budget.strength_override??null}),e.out(`designing: ${R.usecase.logical_id??r}`)),e.chat?.setWorking?.(`designing ${R.usecase.logical_id??r}\u2026`);let D;try{D=await pe(f,{...e,graphSlot:V,...a(e,V),...j?{checkpoint:j}:{}},new Map,n,S,ne)}catch(s){throw S("error",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0},f.session_id),J(),s}finally{e.chat?.setWorking?.(null),te()}if(D.errorCode==="binding_mismatch"&&o){let s=await e.ask([{id:"binding-mismatch",text:"this session's saved conversation is no longer accepted by the service \u2014 start the conversation fresh (committed work is kept), or stop and keep the session?",risk:"high",rationale:"the service refused the saved conversation on the first turn after resume",options:[{label:"start fresh",detail:"continue with a fresh conversation \u2014 earlier answers may be re-asked"},{label:"stop",detail:"stop here; the session stays resumable"}],recommended_index:1,allow_free_text:!1}]);if((Array.isArray(s)?s.find(c=>c.id==="binding-mismatch"):void 0)?.selected_index!==0){let c=`resume abandoned: binding mismatch on session ${f.session_id} \u2014 the session is preserved`;return e.out(c),e.emit?.({type:"error",message:c,code:"BINDING_MISMATCH"}),i?.release(),2}S("binding_migrate",{sid:f.session_id},f.session_id);let u=f.resume&&"schema"in f.resume?{...f.resume,binding:{}}:void 0;try{D=await pe({...f,...u?{resume:u}:{}},{...e,graphSlot:V,...a(e,V),...j?{checkpoint:j}:{}},new Map,n,S,ne)}catch(c){throw S("error",{message:c instanceof Error?c.message:String(c),stack:c instanceof Error?c.stack:void 0},f.session_id),J(),c}finally{e.chat?.setWorking?.(null),te()}}if(D.highRisk)return e.out(`error: ${D.highRisk.length} high-risk decision${D.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",message:`error: high-risk question(s) in ci mode (fail-closed): ${D.highRisk.map(s=>s.id).join(", ")}`,code:"HIGH_RISK_CI"}),J(),O(),1;if(D.paused){let s=i;s||(s=le(e.contextDir,{sid:f.session_id,mode:"agent",created_at:P.toISOString(),expires_at:new Date(P.getTime()+1440*60*1e3).toISOString(),agent_state:D.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(c=>c.type==="DERIVES"&&typeof c.props.source_id=="string").map(c=>[String(c.props.source_id),n.heads.get(String(c.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:m,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...w?{force:!0}:{},...g?{user_session_id:g.ids.session_id}:{}}));try{w&&!s.state.force&&s.save({force:!0}),g&&s.state.user_session_id!==g.ids.session_id&&s.save({user_session_id:g.ids.session_id}),m&&s.state.conv_source!==m&&s.save({conv_source:m});let c=e.chat?.drainHeldReceipts?.()??[];(c.length>0||(s.state.held_receipts?.length??0)>0)&&s.save({held_receipts:c}),G!==null&&s.save({force_scope:G}),Je(s,D.paused)}catch(c){let p=s.state.checkpoint,y=`error: couldn't persist the pause for session ${s.state.sid}`+(p?` \u2014 last durable checkpoint: seq ${p.seq} @ ${p.ts}`:" \u2014 no durable checkpoint exists")+` (${c instanceof Error?c.message:String(c)})`;return e.out(y),e.emit?.({type:"error",message:y,code:"PAUSE_PERSIST_FAILED",sid:s.state.sid}),1}S("session_paused",{sid:s.state.sid},f.session_id);let d=E!=="interactive"?` --mode ${E}`:"",u=`kane-cli design tests --resume ${s.state.sid}${d}`;if(q||e.out(`paused \u2014 resume with: ${u}`),e.emit?.({type:"session_paused",sid:s.state.sid,mode:E,resume:u,expires_at:s.state.expires_at,pending_questions:D.paused.pending.questions}),q){let c=e.chat?.state.credits?.total;e.onSummary?.({state:"paused",reason:"ctrl+c",facts:[`session ${s.state.sid} saved \u2014 designing ${R.usecase.logical_id??r}`,...s.state.expires_at?[`expires: ${s.state.expires_at}`]:[],...c!==void 0?[`credits used: ${c.toFixed(1)}`]:[]],resume:u,resumeMessage:`${u} --message "<your words>"`,tracePath:Z(h)})}return O(),3}if(D.crashed&&i?.state.checkpoint){let s=i.state.checkpoint,d=E!=="interactive"?` --mode ${E}`:"",u=`kane-cli design tests --resume ${i.state.sid}${d}`;if(S("agent_crashed_resumable",{sid:i.state.sid,seq:s.seq},f.session_id),q||e.out(`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq} (at most the in-flight turn lost); resume with: ${u}`),e.emit?.({type:"session_paused",sid:i.state.sid,mode:E,resume:u,expires_at:i.state.expires_at,crashed:!0}),q){let c=e.chat?.state.credits?.total;e.onSummary?.({state:"crashed",facts:[`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq}`,"at most the in-flight turn was lost",...c!==void 0?[`credits used: ${c.toFixed(1)}`]:[]],resume:u,resumeMessage:`${u} --message "<your words>"`,tracePath:Z(h)})}return i.release(),i=null,3}if(D.error)return e.out(`error: design agent failed: ${D.error}`),e.emit?.({type:"error",message:`error: design agent failed: ${D.error}`}),J(),O(),1;if(D.proposal==null&&E!=="interactive")return e.out(`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${h})`),e.emit?.({type:"error",message:`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${h})`}),J(),O(),1;let K=0;if(D.proposal==null)try{let{readRecords:s}=await import("./records-JLS63SDI.js"),d=t.resume??f.session_id;K=s(e.contextDir).records.filter(u=>u.sid===d).reduce((u,c)=>u+c.nodes.filter(p=>p.label!=="source").length,0)}catch{}if(D.proposal==null&&e.out(K>0?`done \u2014 ${K} item(s) committed in this session (earlier legs included); nothing new since the resume`:"done \u2014 nothing designed this session (no finalize before the session ended)"),D.assumedDefaults&&e.out(`assumed: ${D.assumedDefaults} default(s) taken while unattended`),i&&e.emit?.({type:"session_complete",sid:t.resume??f.session_id}),g?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),W)try{St(ve(e.contextDir,"sessions"))}catch{}if(M.length>0){let s=Kt(M,ae(e.contextDir));e.chat?e.chat.note(s):e.out(s),e.emit?.({type:"variables_summary",file:M[0].file,variables:M.map(({name:d,description:u,secret:c})=>({name:d,description:u,secret:c}))})}if(q){let s=e.chat.state.ledger.filter(c=>c.kind==="answer"&&c.receipt.form==="assumed").length??0,d=(D.assumedDefaults??0)+s,u=e.chat.state.credits?.total??D.creditsTotal;e.onSummary?.({state:"complete",facts:[`designed: ${R.usecase.logical_id??r}${D.proposal==null?K>0?` (${K} item(s) committed across this session)`:" (nothing committed this session)":""}`,...M.length>0?[`${M.length} variable(s) need values \u2014 see .testmuai/variables/assurance.json`]:[],...d>0?[`${d} assumed default(s)`]:[],...u!==void 0?[`credits used: ${u.toFixed(1)}`]:[]],tracePath:Z(h)})}return t.plan||Ze(e.contextDir),O(),0}function Kt(t,e){if(t.length===0)return"";let n=zt(e,t[0].file)||t[0].file,i=Math.max(...t.map(r=>r.name.length))+3,o=t.slice().sort((r,v)=>r.name<v.name?-1:1).map(r=>` ${r.name.padEnd(i)}${r.description}${r.secret?" (secret)":""}`);return`variables declared this session \u2014 fill their values before running:
364
+ `)})}let G=null,V={current:n},ee={detach:null},te=()=>{let s=ee.detach;ee.detach=null,s&&s()},a=(s,d)=>{let u=i;if(!u)return{};let c=s.ask,p=Qe({contextDir:s.contextDir,cwd:ae(s.contextDir),handle:u,note:y=>s.chat?s.chat.note(y):s.out(y),graphSlot:d,...s.now?{now:s.now}:{}});if(s.chat?.attachIngest){let y=s.chat;ee.detach=y.attachIngest(async A=>{try{u.save({ingest_registry:ge(u.state.ingest_registry,A,s.now?.()??new Date)});let B=await p({id:`attach-${u.state.sid}-${(u.state.ingest_registry??[]).length}`,ref:A,purpose:null});return B.ok?(y.deferBatch({source_id:B.result.source_id,cid:B.result.cid}),{ok:!0}):{ok:!1,error:B.error.message}}catch(B){return{ok:!1,error:B instanceof Error?B.message:String(B)}}})}return{ask:async y=>{let A=await c(y);if(Array.isArray(A)){let B=A.filter(F=>{if(F.free_text==null||F.free_text.trim()==="")return!1;let oe=y.find($t=>$t.id===F.id);return F.selected_index!=null&&oe?.options[F.selected_index]?.input===!0}).map(F=>F.free_text.trim());if(B.length>0){let F=u.state.ingest_registry;for(let oe of B)F=ge(F,oe,s.now?.()??new Date);u.save({ingest_registry:F})}}return A},ingest:p}};e.nested||e.chat?.attachOnCommitted?.(s=>{V.current=s});let m="";if(e.chat&&!t.plan&&!e.nested){let s=He({contextDir:e.contextDir,graph:U(e.contextDir),sessionStamp:f.session_id,by:e.by??{kind:"human",id:"owner"}});s.errors===null||s.errors[0]?.code==="CONV_SOURCE_EXISTS"?(m=s.sourceId,e.chat.attachConversationSource?.(m),V.current=U(e.contextDir)):e.out(`warning: notes you add in chat can't be saved to the context this session (${s.errors[0]?.detail})`)}let _=U(e.contextDir),b;if(!t.plan){let s=Be(_,r);if(T&&s!==null&&s.live){let d=_.resolve(r);b={uc_root:Me(_,d.cid),next_gen:s.gen,expected_prev_gen:s.gen}}else{let d=Fe(_,r,{...w?{force:!0}:{},because:t.because??(w?"forced redesign (--force)":void 0)});if("error"in d)return e.out(`design: ${d.error.detail}`),e.emit?.({type:"gate_refused",message:d.error.detail,code:d.error.code}),i?.release(),2;b=d}}let I=Ae(e.contextDir,f.session_id),k=null,O=()=>{try{k?.release()}catch{}};if(!t.plan)try{k=I.acquire([Te(_,r).key],{hold:"session",verb:"design"})}catch(s){if(s instanceof Ce&&s.code==="UC_HELD"){let d=s.holder,u=`design: ${r} is being designed by another session${d?.alive===!1?` \u2014 that session looks stopped; resume it with kane-cli design tests --resume ${d?.owner_sid??"<session>"}`:""} \u2014 pick another use-case (kane-cli design tests) or wait for it to finish`;return e.out(u),e.emit?.({type:"error",code:"UC_HELD",message:u}),i?.release(),2}throw s}let H={contextDir:e.contextDir,rootSid:f.session_id,locks:I,probe:{batchSimilar:async()=>({hits:[],degraded:!1,probeBasis:null}),recheckLocal:()=>({hits:[],uncachedNewNodes:[]})}},L=!t.plan&&E!=="ci",z=()=>Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(s=>s.type==="DERIVES"&&typeof s.props.source_id=="string").map(s=>[String(s.props.source_id),n.heads.get(String(s.props.source_id))??null])),W=!1;L&&!i&&(W=!0,i=le(e.contextDir,{sid:f.session_id,mode:"agent",created_at:P.toISOString(),expires_at:new Date(P.getTime()+1440*60*1e3).toISOString(),agent_state:{schema:2,items:[],provider_state:""},pending:{questions:[],proposals:[]},read_basis:z(),assumed:[],corpus_cursor:{remaining:[]},conv_source:m,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...w?{force:!0}:{},...g?{user_session_id:g.ids.session_id}:{}}));let j;if(L&&i){let{resume:s,...d}=f;Le(e.contextDir,f.session_id,{schema:qe,kind:"base",sid:f.session_id,verb:"design",mode:E,created_at:P.toISOString(),run_config:d,conv_source:m||i.state.conv_source||"",...r?{use_case:r}:{},...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},store_watermark:Ie(e.contextDir)}),f.checkpoints=!0,t.resume&&S("resume_kind",{kind:o?o.view.pointer===null?"bare-base":o.view.pointer.at==="final"?"pause":"crash":"v1-shim"},f.session_id);let u=o?0:i.state.checkpoint?.seq??0,c=i;j=Xe({contextDir:e.contextDir,handle:c,seqBase:()=>u,peekHeldReceipts:()=>e.chat?.peekHeldReceipts?.()??[],readBasis:()=>z(),corpusCursor:()=>({remaining:[]}),onSoftCap:y=>e.out(y),onStat:y=>S("ckpt_stat",y,f.session_id),...e.now?{now:e.now}:{}});let p=j;j={...p,persist:y=>{let A=y.binding?.template_version;return typeof A=="string"&&A&&(l.current=A),p.persist(y)}}}!L&&!t.plan&&(f.checkpoints=!0,j={persist:s=>{let d=s.binding?.template_version;return typeof d=="string"&&d&&(l.current=d),{seq:s.seq,turn_id:s.turn_id,at:s.at,ts:new Date().toISOString(),full_seq:null}}});let J=()=>{if(!i)return;let s=i.state.checkpoint;if(s){let d=E!=="interactive"?` --mode ${E}`:"";e.out(`session ${i.state.sid} kept its last checkpoint (seq ${s.seq}, ${s.ts}) \u2014 resume with: kane-cli design tests --resume ${i.state.sid}${d}`),i.release()}else if(W){try{i.complete()}catch{i.release()}try{St(ve(e.contextDir,"sessions"))}catch{}}else i.release();i=null},ne=t.plan?Wt(e.out,e.emit,S,h):kt({templateVersion:()=>l.current,contextDir:e.contextDir,ucRef:r,by:{kind:"ai",id:"design-agent"},force:w,engine:"design@1",note:s=>e.chat?e.chat.note(s):e.out(s),commitLine:s=>e.chat?e.chat.ledger({kind:"commit",ok:!0,line:s}):e.out(s),steer:e.chat?s=>e.chat.submit(s):void 0,event:e.emit,variablesIndex:()=>C,onVariablesDeclared:s=>{M.push(...s);for(let d of s)C.set(d.name,{has_value:!1,source:d.file})},resuming:T,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:s=>{G=s},...t.because?{because:t.because}:{},aliases:e.chat?s=>e.chat.registerAliases?.(s):void 0,onCommitted:s=>{V.current=s},protocol:H,...b?{generationTicket:b}:{},...T?{generationStamped:!0}:{}});e.chat||(S("design_budget",{max_pairs:R.budget.max_pairs??null,strength:R.budget.strength_override??null}),e.out(`designing: ${R.usecase.logical_id??r}`)),e.chat?.setWorking?.(`designing ${R.usecase.logical_id??r}\u2026`);let D;try{D=await pe(f,{...e,graphSlot:V,...a(e,V),...j?{checkpoint:j}:{}},new Map,n,S,ne)}catch(s){throw S("error",{message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0},f.session_id),J(),s}finally{e.chat?.setWorking?.(null),te()}if(D.errorCode==="binding_mismatch"&&o){let s=await e.ask([{id:"binding-mismatch",text:"this session's saved conversation is no longer accepted by the service \u2014 start the conversation fresh (committed work is kept), or stop and keep the session?",risk:"high",rationale:"the service refused the saved conversation on the first turn after resume",options:[{label:"start fresh",detail:"continue with a fresh conversation \u2014 earlier answers may be re-asked"},{label:"stop",detail:"stop here; the session stays resumable"}],recommended_index:1,allow_free_text:!1}]);if((Array.isArray(s)?s.find(c=>c.id==="binding-mismatch"):void 0)?.selected_index!==0){let c=`resume abandoned: binding mismatch on session ${f.session_id} \u2014 the session is preserved`;return e.out(c),e.emit?.({type:"error",message:c,code:"BINDING_MISMATCH"}),i?.release(),2}S("binding_migrate",{sid:f.session_id},f.session_id);let u=f.resume&&"schema"in f.resume?{...f.resume,binding:{}}:void 0;try{D=await pe({...f,...u?{resume:u}:{}},{...e,graphSlot:V,...a(e,V),...j?{checkpoint:j}:{}},new Map,n,S,ne)}catch(c){throw S("error",{message:c instanceof Error?c.message:String(c),stack:c instanceof Error?c.stack:void 0},f.session_id),J(),c}finally{e.chat?.setWorking?.(null),te()}}if(D.highRisk)return e.out(`error: ${D.highRisk.length} high-risk decision${D.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",message:`error: high-risk question(s) in ci mode (fail-closed): ${D.highRisk.map(s=>s.id).join(", ")}`,code:"HIGH_RISK_CI"}),J(),O(),1;if(D.paused){let s=i;s||(s=le(e.contextDir,{sid:f.session_id,mode:"agent",created_at:P.toISOString(),expires_at:new Date(P.getTime()+1440*60*1e3).toISOString(),agent_state:D.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((n.resolve(r)?n.edgesInto(n.resolve(r).tip):[]).filter(c=>c.type==="DERIVES"&&typeof c.props.source_id=="string").map(c=>[String(c.props.source_id),n.heads.get(String(c.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:m,target_pins:n.resolve(r)?[{ref:r,cid:n.resolve(r).tip}]:[],verb:"design",use_case:r,...n.resolve(r)?.tip?{uc_tip:n.resolve(r).tip}:{},...w?{force:!0}:{},...g?{user_session_id:g.ids.session_id}:{}}));try{w&&!s.state.force&&s.save({force:!0}),g&&s.state.user_session_id!==g.ids.session_id&&s.save({user_session_id:g.ids.session_id}),m&&s.state.conv_source!==m&&s.save({conv_source:m});let c=e.chat?.drainHeldReceipts?.()??[];(c.length>0||(s.state.held_receipts?.length??0)>0)&&s.save({held_receipts:c}),G!==null&&s.save({force_scope:G}),Ye(s,D.paused)}catch(c){let p=s.state.checkpoint,y=`error: couldn't persist the pause for session ${s.state.sid}`+(p?` \u2014 last durable checkpoint: seq ${p.seq} @ ${p.ts}`:" \u2014 no durable checkpoint exists")+` (${c instanceof Error?c.message:String(c)})`;return e.out(y),e.emit?.({type:"error",message:y,code:"PAUSE_PERSIST_FAILED",sid:s.state.sid}),1}S("session_paused",{sid:s.state.sid},f.session_id);let d=E!=="interactive"?` --mode ${E}`:"",u=`kane-cli design tests --resume ${s.state.sid}${d}`;if(q||e.out(`paused \u2014 resume with: ${u}`),e.emit?.({type:"session_paused",sid:s.state.sid,mode:E,resume:u,expires_at:s.state.expires_at,pending_questions:D.paused.pending.questions}),q){let c=e.chat?.state.credits?.total;e.onSummary?.({state:"paused",reason:"ctrl+c",facts:[`session ${s.state.sid} saved \u2014 designing ${R.usecase.logical_id??r}`,...s.state.expires_at?[`expires: ${s.state.expires_at}`]:[],...c!==void 0?[`credits used: ${c.toFixed(1)}`]:[]],resume:u,resumeMessage:`${u} --message "<your words>"`,tracePath:Z(h)})}return O(),3}if(D.crashed&&i?.state.checkpoint){let s=i.state.checkpoint,d=E!=="interactive"?` --mode ${E}`:"",u=`kane-cli design tests --resume ${i.state.sid}${d}`;if(S("agent_crashed_resumable",{sid:i.state.sid,seq:s.seq},f.session_id),q||e.out(`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq} (at most the in-flight turn lost); resume with: ${u}`),e.emit?.({type:"session_paused",sid:i.state.sid,mode:E,resume:u,expires_at:i.state.expires_at,crashed:!0}),q){let c=e.chat?.state.credits?.total;e.onSummary?.({state:"crashed",facts:[`agent crashed \u2014 session ${i.state.sid} is resumable at checkpoint seq ${s.seq}`,"at most the in-flight turn was lost",...c!==void 0?[`credits used: ${c.toFixed(1)}`]:[]],resume:u,resumeMessage:`${u} --message "<your words>"`,tracePath:Z(h)})}return i.release(),i=null,3}if(D.error)return e.out(`error: design agent failed: ${D.error}`),e.emit?.({type:"error",message:`error: design agent failed: ${D.error}`}),J(),O(),1;if(D.proposal==null&&E!=="interactive")return e.out(`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${h})`),e.emit?.({type:"error",message:`error: the design session stopped before saving anything \u2014 nothing committed (trace: ${h})`}),J(),O(),1;let K=0;if(D.proposal==null)try{let{readRecords:s}=await import("./records-TJJJWBUD.js"),d=t.resume??f.session_id;K=s(e.contextDir).records.filter(u=>u.sid===d).reduce((u,c)=>u+c.nodes.filter(p=>p.label!=="source").length,0)}catch{}if(D.proposal==null&&e.out(K>0?`done \u2014 ${K} item(s) committed in this session (earlier legs included); nothing new since the resume`:"done \u2014 nothing designed this session (no finalize before the session ended)"),D.assumedDefaults&&e.out(`assumed: ${D.assumedDefaults} default(s) taken while unattended`),i&&e.emit?.({type:"session_complete",sid:t.resume??f.session_id}),g?.event("ASR_SESSION_COMPLETE",{}),i?.complete(),W)try{St(ve(e.contextDir,"sessions"))}catch{}if(M.length>0){let s=Kt(M,ae(e.contextDir));e.chat?e.chat.note(s):e.out(s),e.emit?.({type:"variables_summary",file:M[0].file,variables:M.map(({name:d,description:u,secret:c})=>({name:d,description:u,secret:c}))})}if(q){let s=e.chat.state.ledger.filter(c=>c.kind==="answer"&&c.receipt.form==="assumed").length??0,d=(D.assumedDefaults??0)+s,u=e.chat.state.credits?.total??D.creditsTotal;e.onSummary?.({state:"complete",facts:[`designed: ${R.usecase.logical_id??r}${D.proposal==null?K>0?` (${K} item(s) committed across this session)`:" (nothing committed this session)":""}`,...M.length>0?[`${M.length} variable(s) need values \u2014 see .testmuai/variables/assurance.json`]:[],...d>0?[`${d} assumed default(s)`]:[],...u!==void 0?[`credits used: ${u.toFixed(1)}`]:[]],tracePath:Z(h)})}return t.plan||et(e.contextDir),O(),0}function Kt(t,e){if(t.length===0)return"";let n=zt(e,t[0].file)||t[0].file,i=Math.max(...t.map(r=>r.name.length))+3,o=t.slice().sort((r,v)=>r.name<v.name?-1:1).map(r=>` ${r.name.padEnd(i)}${r.description}${r.secret?" (secret)":""}`);return`variables declared this session \u2014 fill their values before running:
365
365
  ${n}
366
366
  ${o.join(`
367
367
  `)}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as g}from"./chunk-BPMSNGXQ.js";import{b as f,c as j}from"./chunk-VE3SUJMA.js";import{a as m}from"./chunk-NUWOQS6L.js";var _="KaneAI Generated",E="Untitled";async function p(e){let r=e.config.load(),d=new g(m(e.env).tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key),n=e.projectName??_,o=e.folderName??E,t=r.project_id??null,s=r.project_name??null;if(!t){let a=(await d.listProjects()).find(l=>l.name===n);if(a)t=a.project_id,s=a.name,e.log("info","ENSURE_PROJECT_FOUND","Found default project",{project_id:t,name:s});else{let l=await d.createProject(n);t=l.id,s=l.name,e.log("info","ENSURE_PROJECT_CREATED","Created default project",{project_id:t,name:s})}f(e.creds,e.config,e.profile,e.env,{projectId:t,projectName:s})}let c=r.folder_id??null,i=r.folder_name??null,u=!r.project_id;if(!c||u){let a=(await d.listFolders(t)).find(l=>l.name===o);if(a)c=a.id,i=a.name,e.log("info","ENSURE_FOLDER_FOUND","Found default folder",{folder_id:c,name:i});else{let l=await d.createFolder(t,o);c=l.id,i=l.name,e.log("info","ENSURE_FOLDER_CREATED","Created default folder",{folder_id:c,name:i})}f(e.creds,e.config,e.profile,e.env,{folderId:c,folderName:i})}return{projectId:t,projectName:s??n,folderId:c,folderName:i??o}}function A(e,r,d){let n=e.loadProfileConfig(r,d)??{};return{projectId:n.project_id??null,folderId:n.folder_id??null}}function N(e,r){return e.projectId===null||e.folderId===null||r===null?"needs-picker":r.project==="ok"&&r.folder==="ok"?"ok":r.project==="error"&&r.folder==="error"?"ok-tms-degraded":"needs-picker"}var k=(e,r)=>`error: profile "${e}" (${r}) has no project/folder configured AND no TMS credentials were available to auto-configure one.
2
+ import{a as g}from"./chunk-BPMSNGXQ.js";import{b as f,c as j}from"./chunk-VE3SUJMA.js";import{a as m}from"./chunk-OH2NSBO6.js";var _="KaneAI Generated",E="Untitled";async function p(e){let r=e.config.load(),d=new g(m(e.env).tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key),n=e.projectName??_,o=e.folderName??E,t=r.project_id??null,s=r.project_name??null;if(!t){let a=(await d.listProjects()).find(l=>l.name===n);if(a)t=a.project_id,s=a.name,e.log("info","ENSURE_PROJECT_FOUND","Found default project",{project_id:t,name:s});else{let l=await d.createProject(n);t=l.id,s=l.name,e.log("info","ENSURE_PROJECT_CREATED","Created default project",{project_id:t,name:s})}f(e.creds,e.config,e.profile,e.env,{projectId:t,projectName:s})}let c=r.folder_id??null,i=r.folder_name??null,u=!r.project_id;if(!c||u){let a=(await d.listFolders(t)).find(l=>l.name===o);if(a)c=a.id,i=a.name,e.log("info","ENSURE_FOLDER_FOUND","Found default folder",{folder_id:c,name:i});else{let l=await d.createFolder(t,o);c=l.id,i=l.name,e.log("info","ENSURE_FOLDER_CREATED","Created default folder",{folder_id:c,name:i})}f(e.creds,e.config,e.profile,e.env,{folderId:c,folderName:i})}return{projectId:t,projectName:s??n,folderId:c,folderName:i??o}}function A(e,r,d){let n=e.loadProfileConfig(r,d)??{};return{projectId:n.project_id??null,folderId:n.folder_id??null}}function N(e,r){return e.projectId===null||e.folderId===null||r===null?"needs-picker":r.project==="ok"&&r.folder==="ok"?"ok":r.project==="error"&&r.folder==="error"?"ok-tms-degraded":"needs-picker"}var k=(e,r)=>`error: profile "${e}" (${r}) has no project/folder configured AND no TMS credentials were available to auto-configure one.
3
3
 
4
4
  discover IDs:
5
5
  kane-cli projects list --search "<keyword>" --limit 10
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as v,b as A,d as G}from"./chunk-OS4VSIHT.js";import{b as x}from"./chunk-KAZGHWGK.js";import{a as w}from"./chunk-BZAGVBCX.js";import{a as S}from"./chunk-JUJ4SAGH.js";import{a as U,b as C}from"./chunk-UJZZDPDY.js";import{C as E,D as $}from"./chunk-W3Z7AZNT.js";import{d,e as m}from"./chunk-AKX4VRRR.js";var k=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function b(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function h(e,t,n){let s=e.edgesFrom(t).find(o=>o.type===n);return s?e.tipOf(s.dst):null}function O(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return h(e,t,m.BELONGS_TO);if(n===d.AC){let s=h(e,t,m.SCOPED_TO);return s?e.nodeLabel.get(s)===d.USECASE?s:h(e,s,m.BELONGS_TO):null}if(n===d.TEST){let s=h(e,t,m.AUTOMATES);return s?h(e,s,m.BELONGS_TO):null}return null}function L(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[s,o]of e.names)if(e.tipOf(o)===t)return s;return t}function F(e,t){return{ucTip:t,display:L(e,t),seamRef:e.nameOf.get(t)??t}}function N(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let s=n.tip,o=e.nodeLabel.get(s);if(!o||!k.has(o))return{ok:!1,message:`'${t}' is a ${o??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=O(e,s,o);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${o} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${L(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:F(e,a)}}function Z(e,t){return D(e,t)}function D(e,t){let n=[];for(let{cid:o}of e.byLabel(d.SCENARIO)){if(!b(e,o)||!e.edgesFrom(o).some(r=>r.type===m.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(o).filter(r=>r.type===m.AUTOMATES&&b(e,r.src));if(a.length===0)n.push({scenario:o,test:null});else for(let r of a)n.push({scenario:o,test:r.src})}let s=new Map;for(let{cid:o}of e.byLabel(d.AC)){if(!b(e,o)||O(e,o,d.AC)!==t)continue;let a=e.edgesInto(o).filter(r=>r.type===m.VERIFIES&&b(e,r.src)).map(r=>r.src).sort();s.set(o,a)}return{pairs:n,verifies:s}}function B(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,s=new Set(e.pairs.map(n)),o=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,g)=>l===u[g])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!o.has(n(r))),minted:t.pairs.filter(r=>!s.has(n(r))),retained:t.pairs.filter(r=>s.has(n(r))),moves:a}}function _(e,t,n,s,o){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${s.before} \u2192 ${s.after}`),e.out(` superseded ${o.superseded.length} pair(s)`);for(let i of o.superseded)e.out(r(i));e.out(` minted ${o.minted.length} pair(s)`);for(let i of o.minted)e.out(r(i));e.out(` retained ${o.retained.length} pair(s)`);for(let i of o.retained)e.out(r(i));if(o.moves.length===0)e.out(" verifies none moved");else{e.out(" verifies moved:");for(let i of o.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function R(e,t,n,s,o,a,r){let i=E(e),u=S(i,t.ucTip);if(!u)return a==="batch"?(s.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(s,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let l=D(i,t.ucTip),g=[`evolve ${t.display}`,` re-designs use-case ${t.display}`,` affects ${l.pairs.length} pair(s)`,...n.because?[` because ${n.because}`]:[]];if(n.yes)for(let y of g)s.out(y);else{for(let I of g)s.out(I);if(!await s.confirm(`proceed with the re-design of ${t.display}?`))return s.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"}}let p=x(e,i,t.ucTip,n.because),c=await U(r,{verb:"evolve",subject:t.display},()=>o(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...p!==void 0?{changeDelta:p.change_delta,priorDesign:p.prior_design}:{}}),y=>({ok:y===0,exitCode:y}));if(c===3)return s.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(s,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let f=E(e),T=f.tipOf(t.ucTip),P=S(f,T)?.seq;return _(s,f,t.display,{before:u.seq,after:P??"?"},B(l,D(f,T))),{code:0,outcome:"evolved"}}function j(e){let t=new Map,n=0;for(let{cid:o,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(o);if(!r||!k.has(r)||!b(e,o)||!$(e,o))continue;let i=O(e,o,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,F(e,i)))}return{targets:[...t.values()].sort((o,a)=>o.display<a.display?-1:o.display>a.display?1:0),staleCount:n}}function M(e,t){for(let{cid:n,state:s}of e.staleList()){if(s==="superseded")continue;let o=e.nodeLabel.get(n);if(!(!o||!k.has(o)||!b(e,n))&&$(e,n)&&O(e,n,o)===t)return!0}return!1}async function q(e,t,n,s={},o=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=A(o,n);if(!a)return 2;let r=s.runDesignForUc??Y,i=s.onChild??(n.isTTY?V(n):void 0);n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let u=E(a),l,g=null;if(e){let c=N(u,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&S(u,c.target.ucTip)&&!M(u,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;l=[c.target]}else{let{targets:c,staleCount:f}=j(u);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;g=`from-stale: ${f} stale node(s) \u2192 ${c.length} use-case(s)`,l=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(g&&n.out(g),e){let c=await R(a,l[0],t,n,r,"single",i);return c.outcome==="evolved"&&t.because&&w(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let p=0;for(let c of l){let{code:f}=await R(a,c,t,n,r,"batch",i);f!==0&&p===0&&(p=f)}return p}function V(e){let t="",n="evolve";return s=>{s.kind==="start"?(t=s.subject,n=s.verb,e.out(`\u25CF ${C(s.verb).ing} ${s.subject}`)):s.kind==="end"&&e.out(s.ok?`\u25CF ${C(n).ed} ${t} \u2014 ${s.durS}s`:`\u25CF ${n} failed \u2014 ${s.exitCode!=null?`exited ${s.exitCode}`:"error"}${s.fixCmd?` \xB7 ${s.fixCmd}`:""}`)}}var Y=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-F36JFHUK.js"),s=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return s();let o=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await s()}finally{process.stdout.write=o}};async function ee(e,t){return q(e,t,G(),{})}export{N as a,Z as b,R as c,j as d,q as e,Y as f,ee as g};
2
+ import{b as G}from"./chunk-O3XBIURC.js";import{a as A,b as C}from"./chunk-UJZZDPDY.js";import{a as x}from"./chunk-BZAGVBCX.js";import{a as S}from"./chunk-JUJ4SAGH.js";import{P as v,Q as w,S as U}from"./chunk-6LGED4FC.js";import{C as E,E as $}from"./chunk-GP7WD4UY.js";import{d,e as m}from"./chunk-AKX4VRRR.js";var k=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function b(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function h(e,t,n){let s=e.edgesFrom(t).find(o=>o.type===n);return s?e.tipOf(s.dst):null}function O(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return h(e,t,m.BELONGS_TO);if(n===d.AC){let s=h(e,t,m.SCOPED_TO);return s?e.nodeLabel.get(s)===d.USECASE?s:h(e,s,m.BELONGS_TO):null}if(n===d.TEST){let s=h(e,t,m.AUTOMATES);return s?h(e,s,m.BELONGS_TO):null}return null}function L(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[s,o]of e.names)if(e.tipOf(o)===t)return s;return t}function F(e,t){return{ucTip:t,display:L(e,t),seamRef:e.nameOf.get(t)??t}}function N(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let s=n.tip,o=e.nodeLabel.get(s);if(!o||!k.has(o))return{ok:!1,message:`'${t}' is a ${o??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=O(e,s,o);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${o} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${L(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:F(e,a)}}function Z(e,t){return D(e,t)}function D(e,t){let n=[];for(let{cid:o}of e.byLabel(d.SCENARIO)){if(!b(e,o)||!e.edgesFrom(o).some(r=>r.type===m.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(o).filter(r=>r.type===m.AUTOMATES&&b(e,r.src));if(a.length===0)n.push({scenario:o,test:null});else for(let r of a)n.push({scenario:o,test:r.src})}let s=new Map;for(let{cid:o}of e.byLabel(d.AC)){if(!b(e,o)||O(e,o,d.AC)!==t)continue;let a=e.edgesInto(o).filter(r=>r.type===m.VERIFIES&&b(e,r.src)).map(r=>r.src).sort();s.set(o,a)}return{pairs:n,verifies:s}}function B(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,s=new Set(e.pairs.map(n)),o=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,g)=>l===u[g])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!o.has(n(r))),minted:t.pairs.filter(r=>!s.has(n(r))),retained:t.pairs.filter(r=>s.has(n(r))),moves:a}}function _(e,t,n,s,o){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${s.before} \u2192 ${s.after}`),e.out(` superseded ${o.superseded.length} pair(s)`);for(let i of o.superseded)e.out(r(i));e.out(` minted ${o.minted.length} pair(s)`);for(let i of o.minted)e.out(r(i));e.out(` retained ${o.retained.length} pair(s)`);for(let i of o.retained)e.out(r(i));if(o.moves.length===0)e.out(" verifies none moved");else{e.out(" verifies moved:");for(let i of o.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function R(e,t,n,s,o,a,r){let i=E(e),u=S(i,t.ucTip);if(!u)return a==="batch"?(s.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(s,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let l=D(i,t.ucTip),g=[`evolve ${t.display}`,` re-designs use-case ${t.display}`,` affects ${l.pairs.length} pair(s)`,...n.because?[` because ${n.because}`]:[]];if(n.yes)for(let y of g)s.out(y);else{for(let I of g)s.out(I);if(!await s.confirm(`proceed with the re-design of ${t.display}?`))return s.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"}}let p=G(e,i,t.ucTip,n.because),c=await A(r,{verb:"evolve",subject:t.display},()=>o(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...p!==void 0?{changeDelta:p.change_delta,priorDesign:p.prior_design}:{}}),y=>({ok:y===0,exitCode:y}));if(c===3)return s.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(s,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let f=E(e),T=f.tipOf(t.ucTip),P=S(f,T)?.seq;return _(s,f,t.display,{before:u.seq,after:P??"?"},B(l,D(f,T))),{code:0,outcome:"evolved"}}function j(e){let t=new Map,n=0;for(let{cid:o,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(o);if(!r||!k.has(r)||!b(e,o)||!$(e,o))continue;let i=O(e,o,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,F(e,i)))}return{targets:[...t.values()].sort((o,a)=>o.display<a.display?-1:o.display>a.display?1:0),staleCount:n}}function M(e,t){for(let{cid:n,state:s}of e.staleList()){if(s==="superseded")continue;let o=e.nodeLabel.get(n);if(!(!o||!k.has(o)||!b(e,n))&&$(e,n)&&O(e,n,o)===t)return!0}return!1}async function q(e,t,n,s={},o=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(o,n);if(!a)return 2;let r=s.runDesignForUc??Y,i=s.onChild??(n.isTTY?V(n):void 0);n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let u=E(a),l,g=null;if(e){let c=N(u,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&S(u,c.target.ucTip)&&!M(u,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;l=[c.target]}else{let{targets:c,staleCount:f}=j(u);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;g=`from-stale: ${f} stale node(s) \u2192 ${c.length} use-case(s)`,l=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(g&&n.out(g),e){let c=await R(a,l[0],t,n,r,"single",i);return c.outcome==="evolved"&&t.because&&x(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let p=0;for(let c of l){let{code:f}=await R(a,c,t,n,r,"batch",i);f!==0&&p===0&&(p=f)}return p}function V(e){let t="",n="evolve";return s=>{s.kind==="start"?(t=s.subject,n=s.verb,e.out(`\u25CF ${C(s.verb).ing} ${s.subject}`)):s.kind==="end"&&e.out(s.ok?`\u25CF ${C(n).ed} ${t} \u2014 ${s.durS}s`:`\u25CF ${n} failed \u2014 ${s.exitCode!=null?`exited ${s.exitCode}`:"error"}${s.fixCmd?` \xB7 ${s.fixCmd}`:""}`)}}var Y=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-62AZYFAY.js"),s=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return s();let o=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await s()}finally{process.stdout.write=o}};async function ee(e,t){return q(e,t,U(),{})}export{N as a,Z as b,R as c,j as d,q as e,Y as f,ee as g};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{j as S,k as v}from"./chunk-2X3TANEV.js";import{d as c,i as m}from"./chunk-Z7S3IWUX.js";import{a as h,c as _,e as f}from"./chunk-EYOCNMUM.js";var y=["desktop","emulator","simulator"];function T(n,t){return n.kind==="app_id"?!0:t==="emulator"?n.kind==="apk":n.kind==="zip"}function $(n){let t=n.deviceName,e=n.osVersion;return t!==void 0&&t.trim()===""||e!==void 0&&e.trim()===""?{ok:!1,message:"--device-name and --os-version cannot be empty."}:{ok:!0,...t!==void 0?{name:t.trim()}:{},...e!==void 0?{osVersion:e.trim()}:{}}}function R(n){return`--device-name needs an OS version \u2014 a bare name matches every runtime that ships it.
2
+ import{j as S,k as v}from"./chunk-6F6YI3ZG.js";import{d as c,i as m}from"./chunk-Z7S3IWUX.js";import{a as h,c as _,e as f}from"./chunk-EYOCNMUM.js";var y=["desktop","emulator","simulator"];function T(n,t){return n.kind==="app_id"?!0:t==="emulator"?n.kind==="apk":n.kind==="zip"}function $(n){let t=n.deviceName,e=n.osVersion;return t!==void 0&&t.trim()===""||e!==void 0&&e.trim()===""?{ok:!1,message:"--device-name and --os-version cannot be empty."}:{ok:!0,...t!==void 0?{name:t.trim()}:{},...e!==void 0?{osVersion:e.trim()}:{}}}function R(n){return`--device-name needs an OS version \u2014 a bare name matches every runtime that ships it.
3
3
  Provide one: ${n}`}function k(n,t,e){let r=v(n);return r?T(r,t)?null:t==="emulator"?`${e} cannot run on an emulator (needs an .apk, or an APP\u2026 id).`:`${e} cannot run on a simulator (needs a .zip of the .app bundle, or an APP\u2026 id).`:`${n}: ${S}`}function I(n){return y.includes(n)?n:null}function V(n){return`--target must be one of desktop, emulator, simulator (got "${n}")`}function x(n){let t=[];for(let[e,r]of[["--device-name",n.deviceName],["--os-version",n.osVersion],["--app",n.app]])r!==void 0&&t.push(`ignored ${e} ${r}: session target is desktop \u2014 set --target emulator|simulator to run on a device`);return t}function F(n){let{flags:t,saved:e}=n,r=[],s;if(t.target!==void 0){let i=I(t.target);if(!i)return{kind:"invalid",message:V(t.target)};s=i}else{let i=h(e?.tui_target,e?.default_target?.kind);if(i.kind==="choose-mobile")return{kind:"choose-mobile-kind"};s=i.kind==="unset"?"desktop":i.kind}if(s==="desktop")return r.push(...x(t)),{kind:"web",warnings:r};if(!n.host.supported)return{kind:"invalid",message:n.host.reason??"this machine cannot run mobile targets."};let a=[],d,u,o=$(t);if(!o.ok)return{kind:"invalid",message:o.message};let l=e?.default_target&&e.default_target.kind===s?c(e.default_target):void 0;if(o.name!==void 0||o.osVersion!==void 0){let i=o.name??l?.name,p=o.osVersion??l?.osVersion;if(p===void 0)return{kind:"invalid",message:R("--os-version <version>, or save one (kane-cli config set-os-version)")};u={...i!==void 0?{name:i}:{},osVersion:p},d={value:i?`${i} (${p})`:`any device on ${p}`,source:"flag"}}else if(e?.default_target&&e.default_target.kind===s&&(c(e.default_target)!==void 0||e.default_target.id!==void 0))d={value:m(e.default_target)??"(saved device)",source:"saved"};else{if(e?.default_target&&e.default_target.kind!==s&&(c(e.default_target)!==void 0||e.default_target.id!==void 0))return{kind:"invalid",message:`Your saved device '${m(e.default_target)}' is ${e.default_target.kind==="simulator"?"a simulator":"an emulator"}, but this run targets ${s==="simulator"?"a simulator":"an emulator"}. Pass --device-name and --os-version, or update your config (set-target, set-device-name, set-os-version).`};a.push("device")}let g;if(t.app!==void 0){let i=k(t.app,s,`--app ${t.app}`);if(i)return{kind:"invalid",message:i};g={value:t.app,source:"flag"}}else{let i=e?.default_app,p=i?v(i):null;p&&T(p,s)&&e?.default_target?.kind===s?g={value:i,source:"saved"}:a.push("app")}return{kind:"mobile",target:s,...u?{deviceSelector:u}:{},...d?{device:d}:{},...g?{app:g}:{},missing:a,warnings:r}}function M(n){let{flags:t,file:e}=n,r=[],s=e.target==="emulator"||e.target==="simulator"?e.target:void 0,a;if(t.target!==void 0){let i=I(t.target);if(!i)return{kind:"invalid",message:V(t.target)};a=i,s&&s!==a&&r.push(`--target ${a} overrides the file's \`target: ${s}\` \u2014 steps recorded on ${s==="emulator"?"an emulator":"a simulator"} may not replay here`)}else a=s??"desktop";if(a==="desktop")return r.push(...x(t)),{kind:"web",warnings:r};let d=$(t);if(!d.ok)return{kind:"invalid",message:d.message};let u=d.name??(e.device_name?.trim()||void 0),o=d.osVersion??(e.os_version?.trim()||void 0);if(u!==void 0&&o===void 0)return{kind:"invalid",message:R("--os-version <version>, or os_version: in the test file")};let l=o!==void 0?{...u!==void 0?{name:u}:{},osVersion:o}:void 0;if(a==="simulator"&&l&&l.name===void 0&&r.push(`the file names no device_name \u2014 any simulator on ${o} may be used. Add device_name: to the file (or pass --device-name) to pin the device.`),t.app!==void 0){let i=k(t.app,a,`--app ${t.app}`);if(i)return{kind:"invalid",message:i}}else if(e.app){let i=k(e.app,a,`the file's app: ${e.app}`);if(i)return{kind:"invalid",message:i}}let g=t.app??(e.app||void 0);return{kind:"mobile",target:a,platform:_(a)??"",...g?{app:g}:{},...l?{deviceSelector:l}:{},...e.no_reset!==void 0?{noReset:e.no_reset}:{},warnings:r}}function D(n){return n.target==="desktop"?"Running on: Desktop \xB7 Chrome":`Running on: ${f(n.target)} \xB7 ${n.deviceLabel} \xB7 ${n.appLabel}`}var b={emulator:"</path/to/app.apk | AppId>",simulator:"</path/to/app.zip | AppId>"};function E(n,t){let e=f(n).toLowerCase();return t==="device"?[`session target is "${e}" but no device is set.`,` See devices: kane-cli devices list --target ${n}`,' Set one: kane-cli config set-device-name "<name>" && kane-cli config set-os-version "<version>"',' Or per-run: --device-name "<name>" --os-version "<version>"'].join(`
4
4
  `):[`session target is "${e}" but no app is set.`,` Set one: kane-cli config set-app ${b[n]}`,` Or per-run: --app ${b[n]}`].join(`
5
5
  `)}function K(n){return[`saved device "${n}" was not found on this machine.`," See devices: kane-cli devices list",' Set one: kane-cli config set-device-name "<name>" && kane-cli config set-os-version "<version>"'].join(`
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{A as r}from"./chunk-W3Z7AZNT.js";function i(t){return r.test(t)?t.toUpperCase():t}export{i as a};
2
+ import{A as r}from"./chunk-GP7WD4UY.js";function i(t){return r.test(t)?t.toUpperCase():t}export{i as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as J,c as ve}from"./chunk-BZAGVBCX.js";import{a as M,b as me}from"./chunk-52WM3XYO.js";import{a as Ee}from"./chunk-427OQS2N.js";import{d as he}from"./chunk-IE3OO5GI.js";import{B as ue,C as ge,F as fe,e as ae,f as le,h as pe,p as j}from"./chunk-GP7WD4UY.js";import{a as ce}from"./chunk-JQW2QFSX.js";import{H as re,M as oe,c as F,d as k,m as de}from"./chunk-3N6IAVD5.js";import{e as N,f as L,g as se,h as Y}from"./chunk-AKX4VRRR.js";var Se=new Set(["approve","edit","reject"]);function je(v){let{contextDir:E,graph:s,ops:z,by:f}=v,w=v.mintable??Ee(),U=re(E);if(s.latestHash!==U)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(s.latestHash)} but chain head is ${String(U)} \u2014 re-open and retry`}]};let V=[],b=[],Q=new Set;for(let e of z){if(s.appliedEvents.has(e.eventId)||Q.has(e.eventId)){V.push(e.eventId);continue}Q.add(e.eventId),b.push(e)}if(b.length===0)return{record:null,errors:null,applied:[],skipped:V,minted:[],staleDelta:[]};let d=[],B=[],y=[],C=[],$=[],G=[],D=[...v.judgements??[]],K=[],q=new Map,X=new Set,Z=[],_=new Set,ye=new Set(w),ee=new Set;for(let e of b){if(!Se.has(e.kind))continue;let i=e.target,t=s.resolve(i),n=t?s.tipOf(t.cid):i;ee.has(n)&&d.push({code:"MULTIPLE_TERMINAL_OPS",detail:`${i} has more than one terminal op in this turn \u2014 normalize latest-wins first`}),ee.add(n)}let I={targets:{},enhance:{},redirectTo:{},retract:{},conv:{}},T=(e,i)=>{let{target:t,expectedCid:n}=i,o=s.resolve(t);if(!o)return d.push({code:"UNKNOWN_NODE",detail:`${e}: ${t} names nothing in the graph`}),null;let r=s.tipOf(o.cid);return r!==n||s.superseded.has(n)?(d.push({code:"EXPECTED_CID_MOVED",detail:`${e}: ${t} moved or was archived since it was displayed`,data:{tip:r}}),null):(I.targets[i.eventId]=n,n)},P=e=>new Set(fe(s,s.tipOf(e))),O=[],R=new Set,te=e=>({code:"RETRACT_FORBIDDEN",detail:`retract ${e}: provenance edges cannot be retracted \u2014 DERIVES is historical evidence; reject or edit the node instead`});for(let e of b){if(e.kind!=="retract"){O.push(e);continue}let i=T("retract",e);if(!i)continue;let t=new Map;for(let r of P(i))for(let p of[...s.edgesFrom(r),...s.edgesInto(r)])t.set(p.ecid,p);let n,o={};if(e.edgeEcid!==void 0){if(s.superseded.has(e.edgeEcid)){d.push({code:"UNKNOWN_EDGE",detail:`retract ${e.target}: ${e.edgeEcid} is already retracted`});continue}if(n=t.get(e.edgeEcid),!n){d.push({code:"UNKNOWN_EDGE",detail:`retract ${e.target}: ${e.edgeEcid} is not a live edge touching ${e.target} (checked the full version chain)`});continue}}else if(e.edgeRef!==void 0){let r=e.edgeRef;if(r.type===N.DERIVES){d.push(te(e.target));continue}let p=(a,h)=>{let S=j(s,h);if(S)return S;let u=s.resolve(h)!==null;return d.push(u?{code:"TOMBSTONED_REF",detail:`retract ${e.target}: ${r.type} ${a} '${h}' is tombstoned (retired with no live successor) \u2014 pick a live node`}:{code:"UNKNOWN_REF",detail:`retract ${e.target}: ${r.type} ${a} got (unknown) for '${h}' \u2014 not a committed node (a node added in this same turn has no id yet: commit the add first)`}),null},l=p("dst",r.dst);if(!l)continue;o.dst=l.cid;let c=P(l.cid),m=null;if(r.src!==void 0){let a=p("src",r.src);if(!a)continue;o.src=a.cid,m=P(a.cid)}let g=[...t.values()].filter(a=>a.type===r.type&&c.has(a.dst)&&(m===null||m.has(a.src)));if(g.length===0){d.push({code:"UNKNOWN_EDGE",detail:`retract ${e.target}: no live ${r.type} edge onto ${r.dst}${r.src!==void 0?` from ${r.src}`:""} touches ${e.target} (checked the full version chain)`});continue}if(g.length>1){let a=g.map(h=>`${h.type} ${s.displayNameOf(h.src)??h.src} \u2192 ${s.displayNameOf(h.dst)??h.dst} (${h.ecid})`).join("; ");d.push({code:"AMBIGUOUS_RETRACT",detail:`retract ${e.target}: ${g.length} live ${r.type} edges match \u2014 ${a} \u2014 add src to disambiguate`});continue}n=g[0]}else{d.push({code:"INVALID_RETRACT",detail:`retract ${e.target}: neither edge_ecid nor edge {type, dst, src?} was given`});continue}if(n.type===N.DERIVES){d.push(te(e.target));continue}if(R.has(n.ecid)){d.push({code:"EDGE_RETRACTED",detail:`retract ${e.target}: ${n.ecid} was retracted earlier in this turn`});continue}R.add(n.ecid),I.retract[e.eventId]={ecid:n.ecid,...o},O.push({kind:"retract",target:e.target,expectedCid:e.expectedCid,edgeEcid:n.ecid,reason:e.reason,eventId:e.eventId})}let x=new Map;for(let e of O){if(e.kind!=="edit")continue;let i=s.resolve(e.target);if(!i||s.tipOf(i.cid)!==e.expectedCid||s.superseded.has(e.expectedCid))continue;let t=s.getNode(e.expectedCid);if(!t)continue;let n={...t.content};for(let[r,p]of Object.entries(e.edit))p!==void 0&&(n[r]=p);if(typeof n.title=="string"&&!n.title.trim()||L(t.label,n).length>0)continue;let o=F(t.label,n);o!==e.expectedCid&&x.set(e.expectedCid,o)}for(let e of O)if(e.kind==="approve"){let i=T("approve",e);i&&C.push({id:i,kind:"review-item",resolution:"approved",edit:null,reason:null,by:f})}else if(e.kind==="reject"){let i=T("reject",e);if(!i)continue;if(C.push({id:i,kind:"review-item",resolution:"rejected",edit:null,reason:e.reason,by:f}),e.redirectTo!==void 0){let t=s.resolve(e.redirectTo);if(!t||t.superseded){d.push({code:"UNKNOWN_NODE",detail:`reject.redirectTo: ${e.redirectTo} is not a live node`});continue}I.redirectTo[e.eventId]=t.cid,$.push({kind:"node",old:i,new:t.cid,reason:e.reason,by:f})}}else if(e.kind==="edit"){let i=T("edit",e);if(!i)continue;let t=s.getNode(i);if(!t){d.push({code:"UNKNOWN_NODE",detail:`edit: ${e.target} node file unreadable`});continue}let n={...t.content};for(let[l,c]of Object.entries(e.edit))c!==void 0&&(n[l]=c);if(typeof n.title=="string"&&!n.title.trim()){d.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let o=L(t.label,n);if(o.length>0){for(let l of o)d.push({code:l.code,detail:`edit ${e.target}: ${l.detail}`});continue}let r=F(t.label,n);if(r===i){C.push({id:i,kind:"review-item",resolution:"approved",edit:null,reason:null,by:f});continue}if(ae(s,i,r)){d.push({code:"SUPERSEDE_CYCLE",detail:`edit ${e.target}: edit reproduces an already-superseded version (supersession cycle guard) \u2014 re-edit forward or redesign`});continue}let p=le({graph:s,oldTip:i,newCid:r,newLabel:t.label,by:f,reason:`re-blessed onto ${r} (edited in chat)`,skipEcids:R,dstRedirect:x});if(p.errors.length>0){for(let l of p.errors)d.push({code:"REBLESS_REFUSED",detail:`edit ${e.target}: ${l}`});continue}B.push({cid:r,label:t.label,content:n}),y.push(...p.edges),$.push({kind:"node",old:i,new:r,reason:e.reason??"edited in chat",by:f}),$.push(...p.supersessions),C.push({id:r,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:f})}else if(e.kind==="enhance"){if(!T("enhance",e))continue;for(let t of e.edges){let n=j(s,t.src),o=j(s,t.dst);if(!n||!o){let[u,H]=n?["dst",t.dst]:["src",t.src],Re=s.resolve(H)!==null;d.push(Re?{code:"TOMBSTONED_REF",detail:`enhance ${e.target}: ${t.type} ${u} '${H}' is tombstoned (retired with no live successor) \u2014 pick a live node`}:{code:"UNKNOWN_REF",detail:`enhance ${e.target}: ${t.type} ${u} got (unknown) for '${H}' \u2014 not a committed node (a node added in this same turn has no id yet: commit the add first)`});continue}(I.enhance[e.eventId]??=[]).push({src:n.cid,dst:o.cid});let r=s.nodeLabel.get(n.cid)??"(unknown)",p=s.nodeLabel.get(o.cid)??"(unknown)";for(let u of Y(t.type,r,p,t.props))d.push({code:u.code,detail:`enhance ${e.target}: ${u.detail}`});let l=k(t.type,n.cid,o.cid,t.props),c=x.get(n.cid)??n.cid,m=x.get(o.cid)??o.cid,g=k(t.type,c,m,t.props);if(s.superseded.has(l)||R.has(l)||s.superseded.has(g)){let u=s.superseded.has(l)||R.has(l)?l:g;d.push({code:"EDGE_RETRACTED",detail:`enhance ${e.target}: this ${t.type} edge was retracted (${u}) \u2014 re-adding a retracted edge is refused (revival unsupported)`});continue}if(s.edgesFrom(n.cid).some(u=>u.ecid===l)||y.some(u=>u.ecid===g))continue;let a=pe(s,t.type,n.cid,o.cid,Z);a&&d.push(a);let h=ce(s,{type:t.type,src:n.cid,dst:o.cid},{pending:[],retracted:R},`enhance ${e.target}`);h&&d.push(h);let S=se(t.type)?.cardinality;if(S==="one-live-per-src"||S==="one-live-per-src-and-dst"){let u=`${t.type}|${n.cid}`;_.has(u)&&d.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${n.cid}: two one-live edges in one turn`}),_.add(u)}if(S==="one-live-per-src-and-dst"){let u=`${t.type}|dst|${o.cid}`;_.has(u)&&d.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${o.cid}: two one-live edges in one turn (strict 1:1)`}),_.add(u)}y.push({ecid:g,type:t.type,src:c,dst:m,props:t.props}),Z.push({src:n.cid,dst:o.cid,type:t.type})}}else if(e.kind==="retract")$.push({kind:"edge",ecid:e.edgeEcid,reason:e.reason,by:f});else if(e.kind==="add"){if(!ye.has(e.label)){d.push({code:"GATED_LABEL",detail:`add: ${e.label} is not mintable in v1 (gate: ${w.join("|")})`,data:{gate:[...w]}});continue}let i=s.heads.get(e.convSourceId),t=s.convChains.get(e.convSourceId);if(typeof i!="string"||!t){d.push({code:"CONV_SOURCE_MISSING",detail:`add: ${e.convSourceId} is not a live conversation source`});continue}I.conv[e.eventId]=i;let n=s.getNode(i)?.content?.blob,o=typeof n=="string"?he(E,n)?.toString("utf8")??"":"",r=me(o,e.cite.turn);if(r===null){d.push({code:"BAD_ANCHOR",detail:`add: ${M(e.cite.turn)} does not resolve in ${e.convSourceId}`});continue}if(!r.includes(e.cite.quote)){d.push({code:"QUOTE_MISMATCH",detail:`add: quote is not verbatim within ${M(e.cite.turn)}`});continue}let p={...e.content,derived:!0},l=L(e.label,p);if(l.length>0){for(let a of l)d.push({code:a.code,detail:`add: ${a.detail}`});continue}let c=F(e.label,p),m={source_id:e.convSourceId,source_cid:i,anchor:M(e.cite.turn),quote:e.cite.quote};for(let a of Y(N.DERIVES,"source",e.label,m))d.push({code:a.code,detail:`add: ${a.detail}`});if(s.hasNode(c)){if(s.superseded.has(c)){d.push({code:"NODE_TOMBSTONED",detail:`add: ${s.nameOf.get(c)??c} already exists and was retired \u2014 restore it deliberately or add it under new content`});continue}y.push({ecid:k("DERIVES",i,c,m),type:N.DERIVES,src:i,dst:c,props:m}),e.rationale&&D.push({about:c,rationale:e.rationale,by:f}),q.set(e.eventId,c);continue}B.push({cid:c,label:e.label,content:p}),y.push({ecid:k("DERIVES",i,c,m),type:N.DERIVES,src:i,dst:c,props:m}),e.rationale&&D.push({about:c,rationale:e.rationale,by:f});let g=ue(e.label,a=>X.has(a),s.names.keys());g!==null&&(X.add(g),G.push({cid:c,slug:g,by:f})),K.push({cid:c,...g!==null?{slug:g}:{}}),q.set(e.eventId,c)}if(d.length)return{record:null,errors:d};let ne=new Date().toISOString();for(let e of O){if(e.kind==="add"){let i=q.get(e.eventId);i&&J(E,{ts:ne,command:"extract-chat",id:i,verdict:"add",polarity:"preference",tag:e.label,by:f,event_id:e.eventId,target:i});continue}for(let i of ve(e,{ts:ne,command:"extract-chat",by:f}))J(E,i)}let ie=b.map(e=>e.eventId).sort(),$e=oe(E,{ts:new Date().toISOString(),proposal_id:null,nodes:B,edges:y,review:C,supersessions:$,...G.length>0?{names:G}:{},...D.length>0?{judgements:D}:{},event_ids:ie,...v.sid?{sid:v.sid}:{},source_head_moves:{}},{expectPrev:U,intent:{v:1,verb:"chat",args:de({ops:z,judgements:v.judgements??null,by:f,mintable:[...w],sid:v.sid??null}),pins:I},provenance:v.provenance}),W=ge(E),A=new Set;for(let e of $)if(e.kind==="node"){A.add(e.old);for(let i of W.edgesInto(e.old))A.add(i.src)}for(let e of K)A.add(e.cid);let Ie=[...A].map(e=>({cid:e,state:W.stale(W.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:$e.record,errors:null,applied:ie,skipped:V,minted:K,staleDelta:Ie}}export{je as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{M as a,X as p,m as c}from"./chunk-3N6IAVD5.js";function v(t,e,s){let{ref:r,reason:o,by:i}=s;if(!o||o.trim().length===0)return{record:null,errors:[{code:"REASON_REQUIRED",detail:"archiving a node needs a reason \u2014 it becomes the tombstone's provenance"}]};let d=e.resolve(r);if(!d)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${r}' in the graph`}]};let n=e.tipOf(d.cid);if(e.superseded.has(n))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${r} is already superseded at its tip (${n.slice(0,19)}\u2026)`}]};let l=a(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:n,new:null,reason:o,by:i}],source_head_moves:{}},{expectPrev:e.latestHash,intent:{v:1,verb:"archive",args:c({ref:r,reason:o,by:i}),pins:{ref:n}},provenance:s.provenance});return p(t),{record:l.record,errors:null}}export{v as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as N}from"./chunk-L2TV4G56.js";import{b as y,c as E,d as $,f as O,g as A,h as V,i as I,j as T}from"./chunk-EV64VI66.js";import{c as x}from"./chunk-IDX3TOPY.js";import{a as C,g as P}from"./chunk-XMTSHHYQ.js";var G={extract:e=>`kane-cli context extract --resume ${e}`,design:e=>`kane-cli design tests --resume ${e}`};function Q(e,n,s){if(e===void 0||e===n)return null;if(e==="extract"||e==="design"){let a=G[e](s);return{code:"WRONG_VERB",message:`error: session ${s} is a ${e} session \u2014 resume it with ${a}`,next:[{cmd:a,why:`this session belongs to a ${e} run`}]}}return{code:"WRONG_VERB",message:`error: session ${s} belongs to a ${e} run \u2014 this command cannot resume it`,next:[]}}import{existsSync as K}from"fs";import{join as M}from"path";function ne(e){return{id:e.id,text:e.question,risk:["high","med","low"].includes(e.risk)?e.risk:"med",rationale:e.rationale,options:e.options.map(n=>({label:n.label,detail:n.description??""})),recommended_index:e.recommendedOptionIndex,allow_free_text:e.allowFreeText,kind:e.kind,consequence:e.consequence,evidence_count:e.evidence_count,multi_select:e.multiSelect}}function B(e){return{id:e.id,header:e.kind??"question",question:e.text,kind:e.kind??"clarify",multiSelect:e.multi_select??!1,options:e.options.map((n,s)=>({id:`o${s}`,label:n.label,description:n.detail||void 0})),recommendedOptionIndex:e.recommended_index,risk:e.risk,rationale:e.rationale,consequence:e.consequence??"",evidence_count:e.evidence_count,allowFreeText:e.allow_free_text}}function se(e,n){e.save({agent_state:n.agent_state,pending:{questions:n.pending.questions.map(B),proposals:n.pending.proposals??[]},assumed:n.assumed.map(s=>({questionId:s.question_id,optionId:s.option_id,flagged:!0,eventId:`assumed:${n.sid}:${s.question_id}`}))}),e.release(),$(e.state.sid)}function te(e){return{persist(n){let s=e.seqBase(),a={seq:n.seq+s,turn_id:n.turn_id,at:n.at,agent_state_schema:n.agent_state_schema,delta_items:n.delta_items,binding:n.binding,usage_total:n.usage_total,...n.base_fingerprint!==void 0?{base_fingerprint:n.base_fingerprint}:{}},l={applied_events:[...new Set([...e.handle.state.applied_events,...V(e.contextDir,e.handle.state.sid)])].sort(),held_receipts:e.peekHeldReceipts?.()??[],pending:{questions:n.at!=="turn"?(n.pending_questions??[]).map(B):[],proposals:e.stagedProposals?.()??[]},parent_asks:[],read_basis:e.readBasis(),corpus_cursor:e.corpusCursor(),store_watermark:P(e.contextDir),...(()=>{let o=e.ingestRegistry?e.ingestRegistry():e.handle.state.ingest_registry??[],p=e.ingestSchedule?e.ingestSchedule():e.handle.state.ingest_schedule??[];return{...o.length?{ingest_registry:o}:{},...p.length?{ingest_schedule:p}:{}}})()};return O(e.contextDir,e.handle,a,l,{...e.onSoftCap?{onSoftCap:e.onSoftCap}:{},...e.onStat?{onStat:e.onStat}:{},...e.now?{now:e.now}:{}})}}}var m=class extends Error{constructor(s,a,l=[]){super(`${s}: ${a}`);this.code=s;this.next=l}};async function ie(e,n,s,a={}){let l=a.deps??{},o=x(e,n);try{let p=o.state.checkpoint??null,w=K(M(e,"sessions",n,y,E)),j=!p&&o.state.agent_state.items.length>0;if(!p&&!w||j)throw new m("SESSION_V1",`session ${n} predates durable checkpoints \u2014 this build cannot resume it; abandon it with kane-cli context sessions clean ${n} and start a fresh run (committed work is untouched)`,[{cmd:`kane-cli context sessions clean ${n}`,why:"abandon the pre-checkpoint session, then start a fresh run"}]);!p&&w&&l.onWarn?.(`session ${n}: checkpoint chain present with no pointer \u2014 recovering from the chain`);let c=A(e,n);c.orphans.length>0&&T(e,n,c.orphans),c.fallback&&l.onWarn?.(`session ${n}: chain truncated to checkpoint ${c.fallback.resumableAt} \u2014 ${c.fallback.turnsLost} turn(s) lost to a corrupt record`);let r=c.base;if(a.verb){let i=Q(r.verb,a.verb,n);if(i)throw new m("WRONG_VERB",i.message,i.next)}if(a.useCase!==void 0&&a.useCase!==r.use_case&&!await(l.confirmRetarget?.(r.use_case,a.useCase)??!1))throw new m("RESUME_RETARGET_DECLINED",r.use_case?`session ${n} was designing ${r.use_case}; resuming onto ${a.useCase} needs an explicit retarget`:`session ${n} has no recorded use-case; adopting ${a.useCase} needs an explicit retarget`,r.use_case?[{cmd:`kane-cli design tests --resume ${n}`,why:`continue on ${r.use_case} (the session's own subject)`}]:[]);let d=c.kane,f=[],H=d?.read_basis??Object.fromEntries(Object.entries(o.state.read_basis));for(let[i,t]of Object.entries(H)){let u=s.heads.get(i)??null;u!==t&&f.push({subject:i,pinned:t,live:u})}r.uc_tip!==void 0&&l.liveUcTip!==void 0&&l.liveUcTip!==r.uc_tip&&f.push({subject:r.use_case??"use-case",pinned:r.uc_tip,live:l.liveUcTip}),l.locks?.reacquire?.(n);let _={...r.run_config,checkpoints:!0};delete _.resume;let R;if(c.pointer===null||c.agent===null)R=_;else{if(!c.agent.base_fingerprint)throw new m("CHECKPOINT_PROTOCOL",`session ${n}: chain carries no base fingerprint \u2014 cannot attest the seed rebuild`);R={..._,resume:{schema:2,binding:c.agent.binding,base_fingerprint:c.agent.base_fingerprint,delta_items:c.agent.delta_items,last_seq:c.pointer.seq}}}let S=d?.pending.questions??[],b=i=>{let t=`resolveq:${n}:${i}`,u=`assumed:${n}:${i}`;return s.appliedEvents.has(t)||s.appliedEvents.has(u)||o.isApplied(t)||o.isApplied(u)},W=d&&S.length>0?S.filter(i=>!b(i.id)):o.state.pending.questions.filter(i=>!b(i.id)),v={redeliverReceipts:[],recommit:[]},h,k;if(d){let i={...d,applied_events:[...new Set([...d.applied_events,...o.state.applied_events])].sort()},t;try{t=I(e,n,i,s,{verb:r.verb==="design"?"design":"extract",...r.use_case?{ucRef:r.use_case}:{},composeReceipt:(g,q,D)=>N(g,q,D),onNote:l.onWarn})}catch(g){throw g instanceof C?new m("CHECKPOINT_PROTOCOL",`store reconciliation refused: ${g.message}`,[{cmd:`kane-cli context sessions clean ${n}`,why:"abandon the session if the store was rebuilt"}]):g}v={redeliverReceipts:t.redeliverReceipts,recommit:t.recommit},k=t.prunedPending;let u=d.pending.proposals??[];h=(u.length>0?u:o.state.pending.proposals).filter(g=>!(typeof g.event_id=="string"&&s.appliedEvents.has(g.event_id))),(t.newlyApplied.length>0||t.prunedPending.length>0)&&o.reconcileSave({appliedEvents:t.newlyApplied,heldReceipts:[...o.state.held_receipts??[],...t.redeliverReceipts],pending:{questions:o.state.pending.questions,proposals:h}})}else{let i=o.state.pending.proposals;k=i.filter(t=>typeof t.event_id=="string"&&s.appliedEvents.has(t.event_id)),h=i.filter(t=>!(typeof t.event_id=="string"&&s.appliedEvents.has(t.event_id)))}return{kind:"v2",handle:o,base:r,view:c,kane:d,spawnConfig:R,drift:f,reconcile:v,questions:W,represent:h,prunedPending:k}}catch(p){throw o.release(),p}}export{Q as a,ne as b,se as c,te as d,m as e,ie as f};
2
+ import{b as N}from"./chunk-L2TV4G56.js";import{b as y,c as E,d as $,f as O,g as A,h as V,i as I,j as T}from"./chunk-CRZUBDJ3.js";import{d as x}from"./chunk-5LJRZI7S.js";import{H as P,p as C}from"./chunk-3N6IAVD5.js";var G={extract:e=>`kane-cli context extract --resume ${e}`,design:e=>`kane-cli design tests --resume ${e}`};function Q(e,n,s){if(e===void 0||e===n)return null;if(e==="extract"||e==="design"){let a=G[e](s);return{code:"WRONG_VERB",message:`error: session ${s} is a ${e} session \u2014 resume it with ${a}`,next:[{cmd:a,why:`this session belongs to a ${e} run`}]}}return{code:"WRONG_VERB",message:`error: session ${s} belongs to a ${e} run \u2014 this command cannot resume it`,next:[]}}import{existsSync as K}from"fs";import{join as M}from"path";function ne(e){return{id:e.id,text:e.question,risk:["high","med","low"].includes(e.risk)?e.risk:"med",rationale:e.rationale,options:e.options.map(n=>({label:n.label,detail:n.description??""})),recommended_index:e.recommendedOptionIndex,allow_free_text:e.allowFreeText,kind:e.kind,consequence:e.consequence,evidence_count:e.evidence_count,multi_select:e.multiSelect}}function B(e){return{id:e.id,header:e.kind??"question",question:e.text,kind:e.kind??"clarify",multiSelect:e.multi_select??!1,options:e.options.map((n,s)=>({id:`o${s}`,label:n.label,description:n.detail||void 0})),recommendedOptionIndex:e.recommended_index,risk:e.risk,rationale:e.rationale,consequence:e.consequence??"",evidence_count:e.evidence_count,allowFreeText:e.allow_free_text}}function se(e,n){e.save({agent_state:n.agent_state,pending:{questions:n.pending.questions.map(B),proposals:n.pending.proposals??[]},assumed:n.assumed.map(s=>({questionId:s.question_id,optionId:s.option_id,flagged:!0,eventId:`assumed:${n.sid}:${s.question_id}`}))}),e.release(),$(e.state.sid)}function te(e){return{persist(n){let s=e.seqBase(),a={seq:n.seq+s,turn_id:n.turn_id,at:n.at,agent_state_schema:n.agent_state_schema,delta_items:n.delta_items,binding:n.binding,usage_total:n.usage_total,...n.base_fingerprint!==void 0?{base_fingerprint:n.base_fingerprint}:{}},l={applied_events:[...new Set([...e.handle.state.applied_events,...V(e.contextDir,e.handle.state.sid)])].sort(),held_receipts:e.peekHeldReceipts?.()??[],pending:{questions:n.at!=="turn"?(n.pending_questions??[]).map(B):[],proposals:e.stagedProposals?.()??[]},parent_asks:[],read_basis:e.readBasis(),corpus_cursor:e.corpusCursor(),store_watermark:P(e.contextDir),...(()=>{let o=e.ingestRegistry?e.ingestRegistry():e.handle.state.ingest_registry??[],p=e.ingestSchedule?e.ingestSchedule():e.handle.state.ingest_schedule??[];return{...o.length?{ingest_registry:o}:{},...p.length?{ingest_schedule:p}:{}}})()};return O(e.contextDir,e.handle,a,l,{...e.onSoftCap?{onSoftCap:e.onSoftCap}:{},...e.onStat?{onStat:e.onStat}:{},...e.now?{now:e.now}:{}})}}}var m=class extends Error{constructor(s,a,l=[]){super(`${s}: ${a}`);this.code=s;this.next=l}};async function ie(e,n,s,a={}){let l=a.deps??{},o=x(e,n);try{let p=o.state.checkpoint??null,w=K(M(e,"sessions",n,y,E)),j=!p&&o.state.agent_state.items.length>0;if(!p&&!w||j)throw new m("SESSION_V1",`session ${n} predates durable checkpoints \u2014 this build cannot resume it; abandon it with kane-cli context sessions clean ${n} and start a fresh run (committed work is untouched)`,[{cmd:`kane-cli context sessions clean ${n}`,why:"abandon the pre-checkpoint session, then start a fresh run"}]);!p&&w&&l.onWarn?.(`session ${n}: checkpoint chain present with no pointer \u2014 recovering from the chain`);let c=A(e,n);c.orphans.length>0&&T(e,n,c.orphans),c.fallback&&l.onWarn?.(`session ${n}: chain truncated to checkpoint ${c.fallback.resumableAt} \u2014 ${c.fallback.turnsLost} turn(s) lost to a corrupt record`);let r=c.base;if(a.verb){let i=Q(r.verb,a.verb,n);if(i)throw new m("WRONG_VERB",i.message,i.next)}if(a.useCase!==void 0&&a.useCase!==r.use_case&&!await(l.confirmRetarget?.(r.use_case,a.useCase)??!1))throw new m("RESUME_RETARGET_DECLINED",r.use_case?`session ${n} was designing ${r.use_case}; resuming onto ${a.useCase} needs an explicit retarget`:`session ${n} has no recorded use-case; adopting ${a.useCase} needs an explicit retarget`,r.use_case?[{cmd:`kane-cli design tests --resume ${n}`,why:`continue on ${r.use_case} (the session's own subject)`}]:[]);let d=c.kane,f=[],H=d?.read_basis??Object.fromEntries(Object.entries(o.state.read_basis));for(let[i,t]of Object.entries(H)){let u=s.heads.get(i)??null;u!==t&&f.push({subject:i,pinned:t,live:u})}r.uc_tip!==void 0&&l.liveUcTip!==void 0&&l.liveUcTip!==r.uc_tip&&f.push({subject:r.use_case??"use-case",pinned:r.uc_tip,live:l.liveUcTip}),l.locks?.reacquire?.(n);let _={...r.run_config,checkpoints:!0};delete _.resume;let R;if(c.pointer===null||c.agent===null)R=_;else{if(!c.agent.base_fingerprint)throw new m("CHECKPOINT_PROTOCOL",`session ${n}: chain carries no base fingerprint \u2014 cannot attest the seed rebuild`);R={..._,resume:{schema:2,binding:c.agent.binding,base_fingerprint:c.agent.base_fingerprint,delta_items:c.agent.delta_items,last_seq:c.pointer.seq}}}let S=d?.pending.questions??[],b=i=>{let t=`resolveq:${n}:${i}`,u=`assumed:${n}:${i}`;return s.appliedEvents.has(t)||s.appliedEvents.has(u)||o.isApplied(t)||o.isApplied(u)},W=d&&S.length>0?S.filter(i=>!b(i.id)):o.state.pending.questions.filter(i=>!b(i.id)),v={redeliverReceipts:[],recommit:[]},h,k;if(d){let i={...d,applied_events:[...new Set([...d.applied_events,...o.state.applied_events])].sort()},t;try{t=I(e,n,i,s,{verb:r.verb==="design"?"design":"extract",...r.use_case?{ucRef:r.use_case}:{},composeReceipt:(g,q,D)=>N(g,q,D),onNote:l.onWarn})}catch(g){throw g instanceof C?new m("CHECKPOINT_PROTOCOL",`store reconciliation refused: ${g.message}`,[{cmd:`kane-cli context sessions clean ${n}`,why:"abandon the session if the store was rebuilt"}]):g}v={redeliverReceipts:t.redeliverReceipts,recommit:t.recommit},k=t.prunedPending;let u=d.pending.proposals??[];h=(u.length>0?u:o.state.pending.proposals).filter(g=>!(typeof g.event_id=="string"&&s.appliedEvents.has(g.event_id))),(t.newlyApplied.length>0||t.prunedPending.length>0)&&o.reconcileSave({appliedEvents:t.newlyApplied,heldReceipts:[...o.state.held_receipts??[],...t.redeliverReceipts],pending:{questions:o.state.pending.questions,proposals:h}})}else{let i=o.state.pending.proposals;k=i.filter(t=>typeof t.event_id=="string"&&s.appliedEvents.has(t.event_id)),h=i.filter(t=>!(typeof t.event_id=="string"&&s.appliedEvents.has(t.event_id)))}return{kind:"v2",handle:o,base:r,view:c,kane:d,spawnConfig:R,drift:f,reconcile:v,questions:W,represent:h,prunedPending:k}}catch(p){throw o.release(),p}}export{Q as a,ne as b,se as c,te as d,m as e,ie as f};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as o,h as a}from"./chunk-XS3HIVNS.js";import{mkdirSync as p,writeFileSync as f,chmodSync as d,existsSync as m}from"fs";var y={darwin:"https://downloads.lambdatest.com/hyperexecute/darwin/hyperexecute",linux:"https://downloads.lambdatest.com/hyperexecute/linux/hyperexecute",win32:"https://downloads.lambdatest.com/hyperexecute/windows/hyperexecute.exe"};function h(s){let t=y[s];if(!t)throw new Error(`unsupported platform for hyperexecute: ${s}`);return t}async function g(s,t={}){let i=t.platform??process.platform,u=t.existsImpl??m,c=t.fetchImpl??(r=>fetch(r)),e=a(s);if(u(e))return{status:"present",path:e};try{let r=h(i),n=await c(r);if(!n.ok)return{status:"failed",path:e,error:`download failed: HTTP ${n.status}`};let l=Buffer.from(await n.arrayBuffer());return p(o(s),{recursive:!0}),f(e,l),d(e,493),{status:"downloaded",path:e}}catch(r){return{status:"failed",path:e,error:r instanceof Error?r.message:String(r)}}}export{h as a,g as b};
2
+ import{g as o,h as a}from"./chunk-NOLYYHVG.js";import{mkdirSync as p,writeFileSync as f,chmodSync as d,existsSync as m}from"fs";var y={darwin:"https://downloads.lambdatest.com/hyperexecute/darwin/hyperexecute",linux:"https://downloads.lambdatest.com/hyperexecute/linux/hyperexecute",win32:"https://downloads.lambdatest.com/hyperexecute/windows/hyperexecute.exe"};function h(s){let t=y[s];if(!t)throw new Error(`unsupported platform for hyperexecute: ${s}`);return t}async function g(s,t={}){let i=t.platform??process.platform,u=t.existsImpl??m,c=t.fetchImpl??(r=>fetch(r)),e=a(s);if(u(e))return{status:"present",path:e};try{let r=h(i),n=await c(r);if(!n.ok)return{status:"failed",path:e,error:`download failed: HTTP ${n.status}`};let l=Buffer.from(await n.arrayBuffer());return p(o(s),{recursive:!0}),f(e,l),d(e,493),{status:"downloaded",path:e}}catch(r){return{status:"failed",path:e,error:r instanceof Error?r.message:String(r)}}}export{h as a,g as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as y}from"./chunk-NUWOQS6L.js";import{createServer as b}from"http";import{createReadStream as C,promises as S}from"fs";import{randomBytes as R}from"crypto";var u="127.0.0.1";function A(n,e){if(!n)return null;let o=/^bytes=(\d*)-(\d*)$/.exec(n.trim());if(!o)return null;let[,a,r]=o;if(a===""&&r==="")return null;if(a===""){let i=Number(r);return i===0||e===0?"unsatisfiable":{start:Math.max(0,e-i),end:e-1}}let t=Number(a);if(t>=e)return"unsatisfiable";let c=r===""?e-1:Math.min(Number(r),e-1);return c<t?null:{start:t,end:c}}async function I(n){let e=R(16).toString("hex"),o=b((r,t)=>{H(r,t,n,e).catch(()=>t.destroy())});await new Promise((r,t)=>{o.once("error",t),o.listen(n.port??0,u,()=>{o.removeListener("error",t),r()})});let a=o.address().port;return{port:a,urlFor:r=>`http://${u}:${a}/${e}/${encodeURIComponent(r)}`,close:()=>new Promise(r=>{o.close(()=>r()),o.closeAllConnections()})}}async function H(n,e,o,a){let r=n.url??"/",t=s=>{try{o.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:s,path:r})}catch{}};if(n.headers.host!==`${u}:${n.socket.localPort}`){t("host_mismatch"),e.writeHead(403).end();return}let c=n.headers.origin;if(c!==void 0&&!o.allowedOrigins.includes(c)){t("origin_denied"),e.writeHead(403).end();return}let i=c?{"Access-Control-Allow-Origin":c,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(n.method==="OPTIONS"){let s={...i,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};n.headers["access-control-request-private-network"]==="true"&&(s["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,s).end();return}if(n.method!=="GET"&&n.method!=="HEAD"){e.writeHead(405,i).end();return}let v;try{let s=new URL(n.url??"/",`http://${u}`).pathname.split("/");if(s.length!==3||s[1]!==a){t("bad_token"),e.writeHead(404,i).end();return}v=decodeURIComponent(s[2])}catch{t("not_found"),e.writeHead(404,i).end();return}let g=o.packs.get(v);if(!g){t("not_found"),e.writeHead(404,i).end();return}let d;try{let s=await S.stat(g);if(!s.isFile())throw new Error("not a file");d=s.size}catch{t("not_found"),e.writeHead(404,i).end();return}let h={...i,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(n.method==="HEAD"){e.writeHead(200,{...h,"Content-Length":String(d)}).end();return}let l=A(n.headers.range,d);if(l==="unsatisfiable"){t("unsatisfiable"),e.writeHead(416,{...i,"Content-Range":`bytes */${d}`}).end();return}let[m,p,w]=l===null?[0,d-1,200]:[l.start,l.end,206],E={...h,"Content-Length":String(p-m+1)};if(w===206&&(E["Content-Range"]=`bytes ${m}-${p}/${d}`),e.writeHead(w,E),d===0){e.end();return}let f=C(g,{start:m,end:p});f.on("error",()=>e.destroy()),e.on("close",()=>f.destroy()),f.pipe(e)}function O(n,e){return(e??y(n).evidenceViewerUrl).replace(/\/+$/,"")}function k(n,e){return`${e}/?pack=${encodeURIComponent(n)}`}function P(n){return`evidence: view locally with \`kane-cli evidence serve ${n}\``}export{A as a,I as b,O as c,k as d,P as e};
2
+ import{a as y}from"./chunk-OH2NSBO6.js";import{createServer as b}from"http";import{createReadStream as C,promises as S}from"fs";import{randomBytes as R}from"crypto";var u="127.0.0.1";function A(n,e){if(!n)return null;let o=/^bytes=(\d*)-(\d*)$/.exec(n.trim());if(!o)return null;let[,a,r]=o;if(a===""&&r==="")return null;if(a===""){let i=Number(r);return i===0||e===0?"unsatisfiable":{start:Math.max(0,e-i),end:e-1}}let t=Number(a);if(t>=e)return"unsatisfiable";let c=r===""?e-1:Math.min(Number(r),e-1);return c<t?null:{start:t,end:c}}async function I(n){let e=R(16).toString("hex"),o=b((r,t)=>{H(r,t,n,e).catch(()=>t.destroy())});await new Promise((r,t)=>{o.once("error",t),o.listen(n.port??0,u,()=>{o.removeListener("error",t),r()})});let a=o.address().port;return{port:a,urlFor:r=>`http://${u}:${a}/${e}/${encodeURIComponent(r)}`,close:()=>new Promise(r=>{o.close(()=>r()),o.closeAllConnections()})}}async function H(n,e,o,a){let r=n.url??"/",t=s=>{try{o.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:s,path:r})}catch{}};if(n.headers.host!==`${u}:${n.socket.localPort}`){t("host_mismatch"),e.writeHead(403).end();return}let c=n.headers.origin;if(c!==void 0&&!o.allowedOrigins.includes(c)){t("origin_denied"),e.writeHead(403).end();return}let i=c?{"Access-Control-Allow-Origin":c,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(n.method==="OPTIONS"){let s={...i,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};n.headers["access-control-request-private-network"]==="true"&&(s["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,s).end();return}if(n.method!=="GET"&&n.method!=="HEAD"){e.writeHead(405,i).end();return}let v;try{let s=new URL(n.url??"/",`http://${u}`).pathname.split("/");if(s.length!==3||s[1]!==a){t("bad_token"),e.writeHead(404,i).end();return}v=decodeURIComponent(s[2])}catch{t("not_found"),e.writeHead(404,i).end();return}let g=o.packs.get(v);if(!g){t("not_found"),e.writeHead(404,i).end();return}let d;try{let s=await S.stat(g);if(!s.isFile())throw new Error("not a file");d=s.size}catch{t("not_found"),e.writeHead(404,i).end();return}let h={...i,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(n.method==="HEAD"){e.writeHead(200,{...h,"Content-Length":String(d)}).end();return}let l=A(n.headers.range,d);if(l==="unsatisfiable"){t("unsatisfiable"),e.writeHead(416,{...i,"Content-Range":`bytes */${d}`}).end();return}let[m,p,w]=l===null?[0,d-1,200]:[l.start,l.end,206],E={...h,"Content-Length":String(p-m+1)};if(w===206&&(E["Content-Range"]=`bytes ${m}-${p}/${d}`),e.writeHead(w,E),d===0){e.end();return}let f=C(g,{start:m,end:p});f.on("error",()=>e.destroy()),e.on("close",()=>f.destroy()),f.pipe(e)}function O(n,e){return(e??y(n).evidenceViewerUrl).replace(/\/+$/,"")}function k(n,e){return`${e}/?pack=${encodeURIComponent(n)}`}function P(n){return`evidence: view locally with \`kane-cli evidence serve ${n}\``}export{A as a,I as b,O as c,k as d,P as e};
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as W}from"./chunk-MSGW4JDG.js";import{d as U,e as F}from"./chunk-4JOD47QI.js";import{a as H}from"./chunk-33GXXC2L.js";import{createHash as Y}from"crypto";import{access as Q,mkdir as S,mkdtemp as Z,readdir as O,readFile as y,rename as N,rm as v,writeFile as x}from"fs/promises";import{homedir as tt}from"os";import{arch as et,platform as st}from"process";import{dirname as C,isAbsolute as nt,join as l,relative as X,resolve as rt,sep as it}from"path";var q=1,ot={emulator:"emulator",simulator:"simulator"};function Pt(i){return ot[i.kind]??null}var j=class extends Error{constructor(s,e,n){super([`Managed mobile dependencies for ${s} are not installed.`,`- kaneai-mobile-deps ${s} ${e.bundleVersion}: ${e.url} (${_(e.bytes)})`,`Destination: ${n}`,`Run \`kane-cli doctor --target ${s} --install\` to download it.`].join(`
3
- `));this.deviceClass=s;this.name="DepsInstallRequiredError"}};function _(i){return i>=1024*1024?`${Math.ceil(i/(1024*1024))} MB`:`${i} bytes`}function at(i){let t=i/1048576;return t>=10?`${Math.round(t)} MB/s`:t>=1?`${t.toFixed(1)} MB/s`:`${Math.max(1,Math.round(i/1024))} KB/s`}function lt(i){let t=Math.max(1,Math.round(i));return t<60?`~${t}s left`:`~${Math.floor(t/60)}m ${t%60}s left`}var K=8*1024*1024,ct=8;function ut(i){if(!Number.isFinite(i)||i<2*K)return null;let t=Math.min(ct,Math.floor(i/K)),s=Math.ceil(i/t),e=[];for(let n=0;n<i;n+=s)e.push({start:n,end:Math.min(n+s,i)-1});return e}async function L(i,t){let s=i.body;if(!s||typeof s.getReader!="function"){let c=new Uint8Array(await i.arrayBuffer());return t?.(c.length),c}let e=s.getReader(),n=[],r=0;for(;;){let{done:c,value:h}=await e.read();if(c)break;h&&(n.push(h),r+=h.length,t?.(h.length))}let o=new Uint8Array(r),a=0;for(let c of n)o.set(c,a),a+=c.length;return o}var z=3,dt=3e4,k=class extends Error{};async function pt(i,t,s,e,n,r=dt){let o=new Uint8Array(s),a=0,c=new AbortController,h=null,b=!1;try{await Promise.all(e.map(async(f,M)=>{let P=0,V=d=>{P+=d,a+=d,n?.(a)},T=()=>{a=Math.max(0,a-P),P=0},R=null;for(let d=0;d<z;d+=1){if(c.signal.aborted)return;let u=new AbortController,m=()=>u.abort();c.signal.addEventListener("abort",m,{once:!0});let w=!1,g=null,$=()=>{g&&clearTimeout(g),g=setTimeout(()=>{w=!0,u.abort()},r)};try{$();let p=await i(t,{headers:{Range:`bytes=${f.start}-${f.end}`},signal:u.signal});if(typeof p.body?.getReader!="function"&&g&&(clearTimeout(g),g=null),!p.ok)throw new k(`Could not download ${t}: HTTP ${p.status}`);if(p.status!==206){b=!0,M===0?h=await L(p,I=>{$(),V(I)}):await(p.body?.cancel().catch(()=>{})??Promise.resolve());return}let D=f.end-f.start+1,E=await L(p,I=>{$(),V(I)});if(E.length!==D)throw new Error(`range ${f.start}-${f.end} returned ${E.length} bytes (expected ${D})`);o.set(E,f.start);return}catch(p){if(p instanceof k)throw p;if(c.signal.aborted)return;T(),R=w?new Error(`no data for ${Math.round(r/1e3)}s`):p instanceof Error?p:new Error(String(p))}finally{g&&clearTimeout(g),c.signal.removeEventListener("abort",m)}}throw new Error(`Could not download ${t}: range ${f.start}-${f.end} failed after ${z} attempts (${R?.message??"unknown error"}) \u2014 check your network and rerun \`kane-cli doctor --target <emulator|simulator> --install\`.`)}))}catch(f){throw c.abort(),f}return h||(b?null:o)}async function ht(i,t,s,e,n){let r=ut(s);if(r){let c=await pt(i,t,s,r,e,n?.stallMs);if(c)return c}let o=await i(t);if(!o.ok)throw new Error(`Could not download ${t}: HTTP ${o.status}`);let a=0;return L(o,e&&(c=>{a+=c,e(a)}))}function ft(i){return Y("sha256").update(i).digest("hex")}function mt(i,t){let s=X(i,t);return s!==""&&!s.startsWith(`..${it}`)&&s!==".."&&!nt(s)}async function A(i){try{return await Q(i),!0}catch{return!1}}function wt(){return{home:tt(),os:st,arch:et,cliVersion:H,nodeModuleVersion:process.versions.modules,fetch,resolveBundle:async i=>(await import("./deps-resolve-GA6IPHVZ.js")).controllerResolveBundle()(i),exec:U,now:()=>new Date,wait:F,processAlive:i=>{try{return process.kill(i,0),!0}catch{return!1}}}}var B=class extends Error{constructor(s,e,n){super(`No managed mobile dependencies are published for ${s} (kane-cli ${e}).
2
+ import{d as W}from"./chunk-MSGW4JDG.js";import{d as U,e as F}from"./chunk-4JOD47QI.js";import{a as H}from"./chunk-B2ZGG7WM.js";import{createHash as Y}from"crypto";import{access as Q,mkdir as S,mkdtemp as Z,readdir as O,readFile as y,rename as N,rm as v,writeFile as x}from"fs/promises";import{homedir as tt}from"os";import{arch as et,platform as st}from"process";import{dirname as C,isAbsolute as nt,join as l,relative as X,resolve as rt,sep as it}from"path";var q=1,ot={emulator:"emulator",simulator:"simulator"};function Pt(i){return ot[i.kind]??null}var j=class extends Error{constructor(s,e,n){super([`Managed mobile dependencies for ${s} are not installed.`,`- kaneai-mobile-deps ${s} ${e.bundleVersion}: ${e.url} (${_(e.bytes)})`,`Destination: ${n}`,`Run \`kane-cli doctor --target ${s} --install\` to download it.`].join(`
3
+ `));this.deviceClass=s;this.name="DepsInstallRequiredError"}};function _(i){return i>=1024*1024?`${Math.ceil(i/(1024*1024))} MB`:`${i} bytes`}function at(i){let t=i/1048576;return t>=10?`${Math.round(t)} MB/s`:t>=1?`${t.toFixed(1)} MB/s`:`${Math.max(1,Math.round(i/1024))} KB/s`}function lt(i){let t=Math.max(1,Math.round(i));return t<60?`~${t}s left`:`~${Math.floor(t/60)}m ${t%60}s left`}var K=8*1024*1024,ct=8;function ut(i){if(!Number.isFinite(i)||i<2*K)return null;let t=Math.min(ct,Math.floor(i/K)),s=Math.ceil(i/t),e=[];for(let n=0;n<i;n+=s)e.push({start:n,end:Math.min(n+s,i)-1});return e}async function L(i,t){let s=i.body;if(!s||typeof s.getReader!="function"){let c=new Uint8Array(await i.arrayBuffer());return t?.(c.length),c}let e=s.getReader(),n=[],r=0;for(;;){let{done:c,value:h}=await e.read();if(c)break;h&&(n.push(h),r+=h.length,t?.(h.length))}let o=new Uint8Array(r),a=0;for(let c of n)o.set(c,a),a+=c.length;return o}var z=3,dt=3e4,k=class extends Error{};async function pt(i,t,s,e,n,r=dt){let o=new Uint8Array(s),a=0,c=new AbortController,h=null,b=!1;try{await Promise.all(e.map(async(f,M)=>{let P=0,V=d=>{P+=d,a+=d,n?.(a)},T=()=>{a=Math.max(0,a-P),P=0},R=null;for(let d=0;d<z;d+=1){if(c.signal.aborted)return;let u=new AbortController,m=()=>u.abort();c.signal.addEventListener("abort",m,{once:!0});let w=!1,g=null,$=()=>{g&&clearTimeout(g),g=setTimeout(()=>{w=!0,u.abort()},r)};try{$();let p=await i(t,{headers:{Range:`bytes=${f.start}-${f.end}`},signal:u.signal});if(typeof p.body?.getReader!="function"&&g&&(clearTimeout(g),g=null),!p.ok)throw new k(`Could not download ${t}: HTTP ${p.status}`);if(p.status!==206){b=!0,M===0?h=await L(p,I=>{$(),V(I)}):await(p.body?.cancel().catch(()=>{})??Promise.resolve());return}let D=f.end-f.start+1,E=await L(p,I=>{$(),V(I)});if(E.length!==D)throw new Error(`range ${f.start}-${f.end} returned ${E.length} bytes (expected ${D})`);o.set(E,f.start);return}catch(p){if(p instanceof k)throw p;if(c.signal.aborted)return;T(),R=w?new Error(`no data for ${Math.round(r/1e3)}s`):p instanceof Error?p:new Error(String(p))}finally{g&&clearTimeout(g),c.signal.removeEventListener("abort",m)}}throw new Error(`Could not download ${t}: range ${f.start}-${f.end} failed after ${z} attempts (${R?.message??"unknown error"}) \u2014 check your network and rerun \`kane-cli doctor --target <emulator|simulator> --install\`.`)}))}catch(f){throw c.abort(),f}return h||(b?null:o)}async function ht(i,t,s,e,n){let r=ut(s);if(r){let c=await pt(i,t,s,r,e,n?.stallMs);if(c)return c}let o=await i(t);if(!o.ok)throw new Error(`Could not download ${t}: HTTP ${o.status}`);let a=0;return L(o,e&&(c=>{a+=c,e(a)}))}function ft(i){return Y("sha256").update(i).digest("hex")}function mt(i,t){let s=X(i,t);return s!==""&&!s.startsWith(`..${it}`)&&s!==".."&&!nt(s)}async function A(i){try{return await Q(i),!0}catch{return!1}}function wt(){return{home:tt(),os:st,arch:et,cliVersion:H,nodeModuleVersion:process.versions.modules,fetch,resolveBundle:async i=>(await import("./deps-resolve-6F2U4TJP.js")).controllerResolveBundle()(i),exec:U,now:()=>new Date,wait:F,processAlive:i=>{try{return process.kill(i,0),!0}catch{return!1}}}}var B=class extends Error{constructor(s,e,n){super(`No managed mobile dependencies are published for ${s} (kane-cli ${e}).
4
4
  This is a packaging gap, not something to install locally \u2014 report it, or pass --appium-url to use an Appium server you manage yourself.`);this.coordinate=s;this.cause=n;this.name="NoPublishedBundleError"}},J=class i{deps;constructor(t={}){this.deps={...wt(),...t}}mobileRoot(){return l(this.deps.home,".testmuai","kaneai","mobile")}depsRoot(){return l(this.mobileRoot(),"deps")}classRoot(t,s){return l(this.depsRoot(),s,t)}resolveCacheFile(){return l(this.depsRoot(),"resolve-cache.json")}resolveCacheKey(t){return`${this.deps.cliVersion}|${this.deps.os}-${this.deps.arch}-${t}`}static RESOLVE_CACHE_TTL_MS=1440*60*1e3;async readCachedWantedVersion(t){try{let e=JSON.parse(await y(this.resolveCacheFile(),"utf8"))[this.resolveCacheKey(t)];if(!e?.bundleVersion||!e.fetchedAt)return null;let n=this.deps.now().getTime()-new Date(e.fetchedAt).getTime();return n>=0&&n<i.RESOLVE_CACHE_TTL_MS?e.bundleVersion:null}catch{return null}}async writeResolveCache(t,s){try{let e={};try{e=JSON.parse(await y(this.resolveCacheFile(),"utf8"))}catch{}e[this.resolveCacheKey(t)]={bundleVersion:s,fetchedAt:this.deps.now().toISOString()},await S(this.depsRoot(),{recursive:!0}),await x(this.resolveCacheFile(),`${JSON.stringify(e,null,2)}
5
5
  `)}catch{}}async warmResolveCache(t){if(await this.readCachedWantedVersion(t)===null)try{await this.resolveOrExplain(t)}catch{}}paths(t,s){let e=this.classRoot(t,s);return{root:e,appium:l(e,"appium"),appiumHome:l(e,"appium-home"),platformTools:l(e,"platform-tools"),wdaDir:l(e,"wda","Build","Products","Debug-iphonesimulator"),iwdpBinDir:l(e,"bin"),installManifest:l(e,"install-manifest.json")}}async status(t,s){s||(s=await this.readCachedWantedVersion(t)??void 0);let e=[];try{e=await O(this.depsRoot())}catch{}s&&(e=e.filter(c=>c===s));let n=null;for(let c of e){let h=this.classRoot(t,c),b=null;try{b=JSON.parse(await y(l(h,"install-manifest.json"),"utf8"))}catch{continue}b.schemaVersion===q&&(!s&&b.cliVersion!==this.deps.cliVersion||(!n||b.installedAt>n.manifest.installedAt)&&(n={manifest:b,root:h}))}if(!n)return{class:t,installed:!1};let r=this.paths(t,n.manifest.bundleVersion),o=[l(r.appium,"node_modules","appium","index.js")];t==="emulator"&&o.push(l(r.platformTools,this.deps.os==="win32"?"adb.exe":"adb")),t==="simulator"&&o.push(l(r.wdaDir,"WebDriverAgentRunner-Runner.app"));for(let c of o)if(!await A(c))return{class:t,installed:!1,version:n.manifest.bundleVersion,root:n.root,corrupt:`a bundle component is missing from disk (${X(n.root,c)})`};let a=await this.postInstallDrifted(r);return{class:t,installed:!0,version:n.manifest.bundleVersion,root:n.root,...a?{needsRepair:a}:{}}}async postInstallDrifted(t){let s=l(t.appiumHome,"node_modules",".cache","appium","extensions.yaml");if(!await A(s))return!1;let e=await y(s,"utf8");for(let n of e.split(`
6
6
  `)){let r=/^\s*installPath:\s*(.+?)\s*$/.exec(n);if(r&&!r[1].startsWith(t.appiumHome))return!0}return!1}async environment(t){let s=await this.status(t);if(!s.installed||!s.version)return{dirs:[]};let e=this.paths(t,s.version),n=[],r={dirs:n,appiumHome:e.appiumHome};return t!=="simulator"&&(n.push(e.platformTools),r.platformToolsDir=e.platformTools),n.push(l(e.appium,"node_modules",".bin")),t==="simulator"&&(n.push(e.iwdpBinDir),r.wdaDir=e.wdaDir,r.wdaRoot=l(e.root,"wda"),r.iwdpBinDir=e.iwdpBinDir),r}async ensure(t,s){let e,n;try{e=await this.resolveOrExplain(t)}catch(a){n=a}let r=await this.status(t,e?.bundleVersion);if(r.installed&&!r.needsRepair)return e&&r.version&&await this.adoptInstall(t,r.version),r;if(!e)throw n;if(r.installed&&r.needsRepair&&r.version){let a=this.paths(t,r.version);return await this.withInstallLock(async()=>{await this.postInstall(a.root,a,s.onProgress)}),await this.adoptInstall(t,r.version),this.status(t,e.bundleVersion)}let o=e;if(!s.automatic&&!s.approved)throw new j(t,o,this.classRoot(t,o.bundleVersion));return await this.withInstallLock(async()=>{(await this.status(t,o.bundleVersion)).installed||await this.install(t,o,s.onProgress)}),this.status(t,o.bundleVersion)}async adoptInstall(t,s){try{let e=this.paths(t,s).installManifest,n=JSON.parse(await y(e,"utf8"));if(n.cliVersion===this.deps.cliVersion)return;n.cliVersion=this.deps.cliVersion;let r=l(C(e),`install-manifest-${process.pid}.json`);await x(r,`${JSON.stringify(n,null,2)}
@@ -0,0 +1,16 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as ee,d as te,h as D,i as ne,j as re,k as U,l as ie,m as se,n as oe,o as R,p as ae,q as H,r as he,s as ge,t as _e}from"./chunk-22QIVSQR.js";import{a as me}from"./chunk-CH273NAE.js";import{d as V}from"./chunk-LBNADEQN.js";import{C as $,e as pe,f as fe}from"./chunk-GP7WD4UY.js";import{H as M,M as T,P as le,X as O,c as de,m as L,u as ue,x as I,z as P}from"./chunk-3N6IAVD5.js";import{d as x,f as ce}from"./chunk-AKX4VRRR.js";import{appendFileSync as Ie,closeSync as Oe,existsSync as S,fsyncSync as Ce,openSync as Ne,readdirSync as je,readFileSync as k,renameSync as Fe,writeFileSync as J}from"fs";import{dirname as Q,isAbsolute as G,join as F,resolve as q}from"path";var Re=new Set(["inline","testmd","testrun"]),Le=new Set(["inferred","authored","runtime-derived"]),B=new Set(["passed","failed","broken","skipped"]);function ye(t,e,n){if(n.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let o=e;for(let a=0;;a++){let c=M(t);if(o.latestHash!==c){if(a>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(o.latestHash)} but chain head is ${String(c)} \u2014 retry budget exhausted`}]};o=$(t);continue}let d=Te(t,o,n);if(d!=="cas")return d;if(a>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};o=$(t)}}function ve(t,e){return Re.has(t.mode)?B.has(t.verdict)?Le.has(t.oracle_mode)?typeof t.drift_flag!="boolean"||typeof t.stale_at_run!="boolean"?[{code:"MISSING_FIELD",detail:`${e}: drift_flag and stale_at_run are required booleans`}]:!t.execution_id||!t.started_at||!t.definition_id_at_run?[{code:"MISSING_FIELD",detail:`${e}: execution_id, started_at and definition_id_at_run are required`}]:[]:[{code:"BAD_ORACLE_MODE",detail:`${e}: oracle_mode '${t.oracle_mode}' not in inferred|authored|runtime-derived`}]:[{code:"BAD_VERDICT",detail:`${e}: verdict '${t.verdict}' not in ${[...B].join("|")}`}]:[{code:"BAD_MODE",detail:`${e}: mode '${t.mode}' not in inline|testmd|testrun`}]}function be(t,e,n,o){return{about:e,definition_id_at_run:t.definition_id_at_run,verdict:t.verdict,...n&&n.length?{per_ac:n}:{},drift_flag:t.drift_flag,oracle_mode:t.oracle_mode,stale_at_run:t.stale_at_run,...o.length?{unresolved_acs:o}:{},execution_id:t.execution_id,...t.evidence_id?{evidence_id:t.evidence_id}:{},...t.duration_ms!==void 0?{duration_ms:t.duration_ms}:{},started_at:t.started_at,mode:t.mode,local:t.local,...t.via_parent?{via_parent:t.via_parent}:{}}}function Ee(t,e,n={}){if(!Array.isArray(e.facts)||e.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"parked line carries no facts"}]};for(let o=0;;o++){let a=$(t),c=e.facts.filter(s=>a.appliedEvents.has(s.event_id)).map(s=>s.event_id),d=e.facts.filter(s=>!a.appliedEvents.has(s.event_id));if(d.length===0)return{record:null,errors:null,applied:[],skipped:c,rejected:[]};let l=[],i=[],g=[],m=[];for(let s of d){let r=`executions[${s.ref}]`,u=[];if(!s.about_cid||!a.hasNode(s.about_cid))u.push({code:"UNKNOWN_REF",detail:`${r}: about_cid '${String(s.about_cid)}' is not in the graph \u2014 the pinned run-time target is gone`});else if(a.nodeLabel.get(s.about_cid)!==x.TEST)u.push({code:"ILLEGAL_TARGET",detail:`${r}: execution facts attach to tests \u2014 '${s.about_cid}' is a ${a.nodeLabel.get(s.about_cid)}`});else if(!s.event_id)u.push({code:"MISSING_FIELD",detail:`${r}: parked facts require event_id`});else{u.push(...ve(s,r));for(let h of s.per_ac??[])B.has(h.verdict)||u.push({code:"BAD_VERDICT",detail:`${r}.per_ac['${h.ac_ref}']: verdict '${h.verdict}'`})}if(u.length>0){l.push({event_id:s.event_id??"",errors:u});continue}let p=[],f=[],_=[...s.unresolved_acs??[]];for(let h of s.per_ac??[]){let b=h.ac_cid&&a.hasNode(h.ac_cid)&&a.nodeLabel.get(h.ac_cid)===x.AC?h.ac_cid:null,y=b?null:a.resolve(h.ac_ref),E=b??(y?a.tipOf(y.cid):null);if(!E||!b&&(a.superseded.has(E)||a.nodeLabel.get(E)!==x.AC)){_.push(h.ac_ref);continue}p.push({ac_ref:a.nameOf.get(E)??h.ac_ref,ac_cid:E,verdict:h.verdict}),f.push(E)}i.push(be(s,s.about_cid,p,_)),m.push({about_cid:s.about_cid,per_ac:f}),g.push(s.event_id)}if(i.length===0)return{record:null,errors:null,applied:[],skipped:c,rejected:l};try{let s=T(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,event_ids:[...g].sort(),source_head_moves:{}},{expectPrev:a.latestHash,intent:{v:1,verb:"parked",args:L({line:e}),pins:{facts:m}},busyRetry:{deadlineMs:5e3},provenance:n.provenance}),r;try{O(t)}catch(u){r=`parked facts committed, but the projection refresh failed (${u instanceof Error?u.message:String(u)}) \u2014 read state rebuilds on the next open`}return{record:s.record,errors:null,applied:g,skipped:c,rejected:l,...r?{warnings:[r]}:{}}}catch(s){if(!(s instanceof I))throw s;if(o>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 parked replay retry budget exhausted (line stays queued)"}]}}}}function Te(t,e,n){let o=[],a=[],c=[];for(let i of n.facts){let g=`executions[${i.ref}]`,m=n.pinned?null:e.resolve(i.ref),s=n.pinned?i.about_cid&&e.hasNode(i.about_cid)?i.about_cid:null:m?e.tipOf(m.cid):null;if(!s||!n.pinned&&e.superseded.has(s)){o.push({code:"UNKNOWN_REF",detail:`${g}: '${n.pinned?String(i.about_cid):i.ref}' is not a ${n.pinned?"":"live "}committed node`});continue}if(e.nodeLabel.get(s)!==x.TEST){o.push({code:"ILLEGAL_TARGET",detail:`${g}: execution facts attach to tests \u2014 '${i.ref}' is a ${e.nodeLabel.get(s)}`});continue}let r=ve(i,g);if(r.length>0){o.push(...r);continue}let u=[],p=[];for(let f of i.per_ac??[]){let _=n.pinned?null:e.resolve(f.ac_ref),h=n.pinned?f.ac_cid&&e.hasNode(f.ac_cid)?f.ac_cid:null:_?e.tipOf(_.cid):null;if(!h||!n.pinned&&e.superseded.has(h)||e.nodeLabel.get(h)!==x.AC){o.push({code:"UNKNOWN_REF",detail:`${g}.per_ac: '${n.pinned?String(f.ac_cid):f.ac_ref}' is not a${n.pinned?"n":" live"} AC`});continue}if(!B.has(f.verdict)){o.push({code:"BAD_VERDICT",detail:`${g}.per_ac['${f.ac_ref}']: verdict '${f.verdict}'`});continue}u.push({ac_ref:e.nameOf.get(h)??h,ac_cid:h,verdict:f.verdict}),p.push(h)}a.push(be(i,s,u,i.unresolved_acs??[])),c.push({about_cid:s,per_ac:p})}if(o.length>0)return{record:null,errors:o};let d;try{d=T(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:a,...n.eventIds&&n.eventIds.length>0?{event_ids:n.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash,intent:{v:1,verb:"execution",args:L({facts:n.facts,by:n.by,eventIds:n.eventIds??null}),pins:{facts:c}},busyRetry:{deadlineMs:n.lockDeadlineMs??5e3},provenance:n.provenance})}catch(i){if(i instanceof I)return"cas";throw i}let l;try{O(t)}catch(i){l=`facts committed, but the projection refresh failed (${i instanceof Error?i.message:String(i)}) \u2014 read state rebuilds on the next open`}return{record:d.record,errors:null,...l?{warnings:[l]}:{}}}function pt(t){let e={failed:3,broken:2,skipped:1,passed:0},n=new Map;for(let o of t)for(let a of o.verifies??[]){let c=n.get(a);(c===void 0||(e[o.status]??0)>(e[c]??0))&&n.set(a,o.status)}return[...n.entries()].map(([o,a])=>({ref:o,verdict:a}))}function ft(t){let e=[],n=me(t.cwd);if(!S(n))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let o=t.by??{kind:"ai",id:"exec-sync"},a=t.lockDeadlineMs;try{Pe(n,e,a)}catch(r){e.push(`sync: parked-facts replay failed (${r instanceof Error?r.message:String(r)}) \u2014 queue intact, retrying next sync`)}let c=$(n),d=[],l=0,i=new Set,g=new Set(t.members.map(r=>G(r.path)?r.path:q(t.cwd,r.path))),m=new Map;for(let r of t.members){let u=G(r.path)?r.path:q(t.cwd,r.path);if(!S(u)){e.push(`sync: member file missing: ${u} \u2014 skipped, no fact attached`);continue}for(let p of Me(u,e))if(!i.has(p.path))try{let f=p.path===u,_=!f&&g.has(p.path),h=f?void 0:R(k(u,"utf8"))?.id,b=k(p.path,"utf8"),y=R(b);if(!y?.id){i.add(p.path);continue}let E=c.resolve(y.id),w=E?c.tipOf(E.cid):null;if(!E||!w||c.superseded.has(w)){i.add(p.path),e.push(`sync: ${y.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let C=D(U(b,se(Q(p.path),c))),Ae=String(c.getNode(w)?.content.test_md_blob??""),N=D(U(Ae,ie(c))),A=!1,j=w;if(C===N)y.base!==N&&xe(p.path,b,N,e);else if(y.base===N){let v=Ge(n,c,w,b,C,Q(p.path),o);v.error?(e.push(`sync: could not supersede ${y.id}: ${v.error}`),A=!0):(l++,j=v.newCid,A=v.oracleTier,xe(p.path,k(p.path,"utf8"),C,e),c=$(n))}else A=!0,e.push(y.base?`sync: ${y.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${y.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);if(_){A&&m.set(p.path,!0);continue}i.add(p.path);let K=c.getNode(j)?.content.check,z=f?r.acs??[]:[],X=z.filter(v=>Se(c,v.ref)),Y=z.filter(v=>!Se(c,v.ref)).map(v=>v.ref);d.push({ref:y.id,about_cid:j,definition_id_at_run:C,verdict:r.verdict,...X.length?{per_ac:X.map(v=>{let Z=we(c,v.ref);return{ac_ref:v.ref,...Z?{ac_cid:Z}:{},verdict:v.verdict}})}:{},drift_flag:A||m.get(p.path)===!0||f&&r.driftFlag===!0,oracle_mode:K?.expected_mode??(ee(K?.operand)?"runtime-derived":"inferred"),stale_at_run:c.stale(j)!=="fresh",...Y.length?{unresolved_acs:Y}:{},execution_id:r.executionId,...r.evidenceId?{evidence_id:r.evidenceId}:{},...r.durationMs!==void 0?{duration_ms:r.durationMs}:{},started_at:r.startedAt,mode:r.mode,local:r.local,...h?{via_parent:h}:{}})}catch(f){p.path!==u&&g.has(p.path)||i.add(p.path),e.push(`sync: ${p.path} failed to sync (${f instanceof Error?f.message:String(f)}) \u2014 skipped; other members unaffected`)}}if(d.length===0)return{synced:0,superseded:l,warnings:e};let s;try{s=ye(n,$(n),{facts:d,by:o,eventIds:d.map(r=>`exec-fact:${r.execution_id}:${r.ref}`),lockDeadlineMs:a})}catch(r){return e.push(`sync facts: commit threw: ${r instanceof Error?r.message:String(r)}`),$e(n,d,o,e,a),{synced:0,superseded:l,warnings:e}}return s.errors?($e(n,d,o,e,a),e.push(...s.errors.map(r=>`sync facts: ${r.code}: ${r.detail}`)),{synced:0,superseded:l,warnings:e}):(s.warnings&&e.push(...s.warnings.map(r=>`sync facts: ${r}`)),{synced:d.length,superseded:l,warnings:e})}var W=".pending-facts.bad";function $e(t,e,n,o,a){try{let c={by:n,ts:new Date().toISOString(),facts:e.map(i=>({...i,about_cid:i.about_cid??"",event_id:`exec-fact:${i.execution_id}:${i.ref}`}))},d=null;try{d=P(t,{deadlineMs:a??5e3})}catch{d=null}let l=F(t,H);try{if(d)Ie(l,JSON.stringify(c)+`
3
+ `);else{l=F(t,ge());let i=Ne(l,"wx");try{J(i,JSON.stringify(c)+`
4
+ `),Ce(i)}finally{Oe(i)}le(t),o.push(`sync facts: store lock busy \u2014 parked to ${l}; it drains on the next sync`)}}finally{d?.()}o.push(`sync facts: commit failed \u2014 ${e.length} fact(s) parked to ${l}; they replay on the next sync`)}catch(c){o.push(`sync facts: could not park the failed batch (${c instanceof Error?c.message:String(c)}) \u2014 this run's facts are LOST`)}}function Pe(t,e,n){let o=F(t,H);if(!S(o)&&!je(t).some(m=>he.test(m)))return;let a=ue(t);if(a){e.push(`sync: parked facts stay queued while rebase ${a.id} is open \u2014 they drain on the first sync after it is finished`);return}let c;{let m=P(t,{deadlineMs:n??5e3});try{_e(t),c=S(o)?k(o,"utf8"):""}finally{m()}}let d=c.split(`
5
+ `).filter(m=>m.trim()!=="");if(d.length===0)return;let l=new Set,i=[],g=[];for(let m of d){let s=null;try{let u=JSON.parse(m);u&&Array.isArray(u.facts)&&(s=u)}catch{}if(!s){i.push(m),l.add(m);continue}let r=Ee(t,s);if(r.errors){if(r.errors.some(u=>u.code==="STALE_BASIS")){e.push(`sync: parked facts replay deferred (${r.errors[0].detail}) \u2014 retrying next sync`);continue}i.push(m),l.add(m),e.push(`sync: parked facts line quarantined to ${F(t,W)} (${r.errors.map(u=>`${u.code}: ${u.detail}`).join("; ")})`);continue}for(let u of r.rejected){let p=s.facts.find(f=>f.event_id===u.event_id);g.push({parent:m,line:JSON.stringify({...p??{event_id:u.event_id},_reason:u.errors})})}r.rejected.length>0&&e.push(`sync: ${r.rejected.length} parked fact(s) quarantined to ${F(t,W)} (${r.rejected.map(u=>u.errors.map(p=>`${p.code}: ${p.detail}`).join("; ")).join(" | ")})`),l.add(m),r.warnings&&e.push(...r.warnings.map(u=>`sync: ${u}`)),r.applied.length>0&&e.push(`sync: replayed ${r.applied.length} parked fact(s) from a previous run`)}if(l.size!==0)try{let m=P(t,{deadlineMs:n??5e3});try{let r=(S(o)?k(o,"utf8"):"").split(`
6
+ `).filter(_=>_.trim()!==""),u=[...i.filter(_=>r.includes(_)),...g.filter(_=>r.includes(_.parent)).map(_=>_.line)];u.length>0&&Ie(F(t,W),u.map(_=>_+`
7
+ `).join(""));let p=r.filter(_=>!l.has(_)),f=`${o}.tmp.${process.pid}`;J(f,p.length>0?p.join(`
8
+ `)+`
9
+ `:""),Fe(f,o)}finally{m()}}catch(m){e.push(`sync: queue rewrite failed (${m instanceof Error?m.message:String(m)}) \u2014 already-applied lines dedupe next sync; bad lines re-quarantine then`)}}function Me(t,e){let n=[],o=new Set,a=c=>{if(o.has(c)||!S(c))return;o.add(c);let d;try{d=k(c,"utf8")}catch(l){e.push(`sync: unreadable unit ${c} (${l instanceof Error?l.message:String(l)}) \u2014 skipped`);return}for(let l of d.split(`
10
+ `)){let i=/^@import\s+(\S+)\s*$/.exec(l.trim());if(!i)continue;let g=G(i[1])?i[1]:q(Q(c),i[1]);if(!S(g))continue;let m;try{m=k(g,"utf8")}catch(s){e.push(`sync: unreadable import ${g} (${s instanceof Error?s.message:String(s)}) \u2014 skipped; importer continues`);continue}R(m)?.id&&a(g)}n.push({path:c})};return a(t),n}function Se(t,e){return we(t,e)!==null}function we(t,e){let n=t.resolve(e),o=n?t.tipOf(n.cid):null;return n&&o&&!t.superseded.has(o)&&t.nodeLabel.get(o)==="ac"?o:null}function Be(t,e,n,o){let a=t.split(`
11
+ `),c=re(a),d={};return{blob:a.map((i,g)=>{let m=ne.exec(i.trim());if(!m||c.has(g))return i;let s=m[1];if(o&&s in o){let _=n.tipOf(o[s]);d[s]=_;let h=n.displayNameOf(_);return h?`@import ${h}`:i}let r=n.resolve(s);if(r)return d[s]=r.tip,i;let u=G(s)?s:q(e,s);if(!S(u))return i;let p=R(k(u,"utf8"))?.id,f=p?n.resolve(p):null;return!p||!f?i:(d[s]=f.tip,`@import ${p}`)}).join(`
12
+ `),imports:d}}function Ge(t,e,n,o,a,c,d,l={}){let i=e.getNode(n);if(!i)return{oracleTier:!1,error:"tip unreadable"};let{blob:g,imports:m}=Be(ae(o),c,e,l.imports),s=String(i.content.test_md_blob??""),r=/^#\s+(.+?)\s*$/m.exec(g)?.[1]??String(i.content.title??""),u={...i.content,test_md_blob:g,definitionId:a,title:r};{let y=qe(g);y.target!==void 0?u.target=y.target:delete u.target,y.app!==void 0?u.app=y.app:delete u.app}let p=ce("test",u);if(p.length>0)return{oracleTier:!1,error:p.map(y=>y.detail).join("; ")};let f=de("test",u);if(f===n)return{newCid:n,oracleTier:!1};let _=ke(s)!==ke(g);if(pe(e,n,f))return{oracleTier:_,error:"file content reproduces an already-superseded version (supersession cycle guard) \u2014 graph kept; re-edit forward or redesign"};let h=fe({graph:e,oldTip:n,newCid:f,newLabel:"test",by:d,reason:`re-blessed onto ${f} (edited on disk, run sync)`});if(h.errors.length>0)return{oracleTier:_,error:`edge re-bless refused: ${h.errors.join("; ")}`};let b=M(t);if(e.latestHash!==b){if(l.throwTransient)throw new I(`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(b)})`);return{oracleTier:_,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(b)}) \u2014 re-run to retry`}}try{T(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:f,label:"test",content:u}],edges:h.edges,review:[{id:f,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:d}],supersessions:[{kind:"node",old:n,new:f,reason:"edited on disk (run sync)",by:d},...h.supersessions],source_head_moves:{}},{expectPrev:b,intent:{v:1,verb:"exec-supersede",args:L({tip:n,raw:o,fileId:a,by:d}),pins:{tip:n,imports:m}},provenance:l.provenance})}catch(y){if(l.throwTransient&&y instanceof I)throw y;return{oracleTier:_,error:y instanceof Error?y.message:String(y)}}return O(t),{newCid:f,oracleTier:_}}function qe(t){let e=te(t);return{...typeof e.target=="string"?{target:e.target}:{},...typeof e.app=="string"?{app:e.app}:{}}}function ke(t){let e=[],n=t.split(`
13
+ `),o=n.some(c=>/^##\s/.test(c)&&V.test(c)),a=!1;for(let c of n){if(/^##\s/.test(c)){let d=V.exec(c);a=o?d!==null:/\bassert\b/i.test(c),d&&e.push(`v:${d[1].trim()}`);continue}a&&c.trim()!==""&&e.push(c.trim())}return e.join(`
14
+ `)}var Ve=0;function xe(t,e,n,o){try{let a=e.split(`
15
+ `),c=-1;if(a[0]?.trim()==="---"){for(let i=1;i<a.length;i++)if(a[i].trim()==="---"){c=i;break}}if(c<0)return;let d=oe(a,c);if(!d)return;if(d.baseLine!==void 0){let i=a[d.baseLine].endsWith("\r")?"\r":"";a[d.baseLine]=`${d.childIndent}base: ${n}${d.baseComment?` ${d.baseComment}`:""}${i}`}else if(d.strayBase){o.push(`sync: ${t} has a base: line this scanner cannot confidently rewrite (unexpected indentation or key quoting) \u2014 pin refresh skipped (stale pin until the shape is fixed)`);return}else{let g=a[d.idLine??d.start].endsWith("\r")?"\r":"";a.splice((d.idLine??d.start)+1,0,`${d.childIndent??" "}base: ${n}${g}`)}let l=`${t}.tmp-sync.${process.pid}-${Ve++}`;J(l,a.join(`
16
+ `)),Fe(l,t)}catch(a){o.push(`sync: pin refresh failed for ${t} (${a instanceof Error?a.message:String(a)}) \u2014 next run self-heals`)}}export{ye as a,Ee as b,pt as c,ft as d,Ge as e};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-NM76SG3S.js";import{a as k}from"./chunk-BPMSNGXQ.js";import{a as _}from"./chunk-ARU6KAGY.js";import{a as T}from"./chunk-NUWOQS6L.js";import{y as i}from"./chunk-33GXXC2L.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as u,b as s}from"./chunk-C44QQJR4.js";import{a as K}from"./chunk-6YGTRKDT.js";import{e as S}from"./chunk-UR6MHSHU.js";var e=S(K(),1);var r=S(O(),1);function V(n,x,c){return{id:n,label:`${x} (${n})`,isActive:n===c}}function se({resolver:n,currentProjectId:x,env:c,onSelect:w,onCancel:C}){let[q,B]=(0,e.useState)([]),[D,l]=(0,e.useState)(!0),[H,m]=(0,e.useState)(!1),[J,g]=(0,e.useState)(!1),[Q,P]=(0,e.useState)(null),[d,p]=(0,e.useState)("list"),[v,R]=(0,e.useState)(""),[E,h]=(0,e.useState)(null),[I,X]=(0,e.useState)(""),b=(0,e.useRef)(!1),A=(0,e.useRef)(!0);(0,e.useEffect)(()=>{if(!n){P("Login first to browse projects"),l(!1);return}let o=new AbortController,a=I.trim();return A.current?l(!0):a&&g(!0),m(!0),P(null),(async()=>{try{let t=n.cached??await n.resolve();if(!t){P("Login first to browse projects"),l(!1),m(!1),g(!1);return}let L=T(c),F=new k(L.tmsBaseUrl,t.username,t.access_key),f=!0,N=0,G=a?{signal:o.signal,name:a,perPage:10}:{signal:o.signal,perPage:10};for await(let y of F.listProjectsStream(G)){if(f&&(l(!1),g(!1),A.current=!1,f=!1),y.totalLoaded===0&&y.done&&N===0&&!a){b.current=!0,p("naming"),m(!1);return}let M=y.projects.map(j=>V(j.project_id,j.name,x));B(N===0?M:j=>[...j,...M]),N+=y.projects.length,y.done&&m(!1)}f&&(l(!1),m(!1),g(!1))}catch(t){if(t?.name==="AbortError")return;P(t instanceof Error?t.message:String(t)),l(!1),m(!1),g(!1)}})(),()=>o.abort()},[n,x,c,I]);let Y=(0,e.useCallback)(o=>{let a=o.trim();if(!a){h("Name cannot be empty");return}h(null),p("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let t=n.cached??await n.resolve();if(!t)throw new Error("Not authenticated");let L=T(c),f=await new k(L.tmsBaseUrl,t.username,t.access_key).createProject(a);w(f.id,f.name)}catch(t){h(t instanceof Error?t.message:String(t)),p("naming")}})()},[n,c,w]),z=(0,e.useCallback)(()=>{R(""),h(null),b.current?C():p("list")},[C]);return d==="naming"||d==="creating"?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(s,{color:i.orange,bold:!0,children:"Create new project"}),b.current&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"No projects yet \u2014 let's create one."})}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(s,{color:i.dim,children:"Name: "}),d==="naming"?(0,r.jsx)($,{value:v,onChange:o=>{R(o),E&&h(null)},onSubmit:Y,onCancel:z}):(0,r.jsx)(s,{children:v})]}),E&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.red,children:E})}),d==="creating"&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"Creating..."})}),d==="naming"&&(0,r.jsx)(_,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:b.current?"cancel":"back"})]}):(0,r.jsx)(U,{title:"Projects",items:q,loading:D,loadingMore:H,searching:J,preserveSelectionById:!0,onSearch:X,error:Q,itemNoun:"projects",onTab:()=>{b.current=!1,p("naming")},extraHint:"tab to create new",onSelect:o=>{let a=o.label.replace(` (${o.id})`,"");w(o.id,a)},onCancel:C})}export{V as a,se as b};
2
+ import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-RBHQXWR7.js";import{a as k}from"./chunk-BPMSNGXQ.js";import{a as _}from"./chunk-OO5GMBVI.js";import{a as T}from"./chunk-OH2NSBO6.js";import{y as i}from"./chunk-B2ZGG7WM.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as u,b as s}from"./chunk-C44QQJR4.js";import{a as K}from"./chunk-6YGTRKDT.js";import{e as S}from"./chunk-UR6MHSHU.js";var e=S(K(),1);var r=S(O(),1);function V(n,x,c){return{id:n,label:`${x} (${n})`,isActive:n===c}}function se({resolver:n,currentProjectId:x,env:c,onSelect:w,onCancel:C}){let[q,B]=(0,e.useState)([]),[D,l]=(0,e.useState)(!0),[H,m]=(0,e.useState)(!1),[J,g]=(0,e.useState)(!1),[Q,P]=(0,e.useState)(null),[d,p]=(0,e.useState)("list"),[v,R]=(0,e.useState)(""),[E,h]=(0,e.useState)(null),[I,X]=(0,e.useState)(""),b=(0,e.useRef)(!1),A=(0,e.useRef)(!0);(0,e.useEffect)(()=>{if(!n){P("Login first to browse projects"),l(!1);return}let o=new AbortController,a=I.trim();return A.current?l(!0):a&&g(!0),m(!0),P(null),(async()=>{try{let t=n.cached??await n.resolve();if(!t){P("Login first to browse projects"),l(!1),m(!1),g(!1);return}let L=T(c),F=new k(L.tmsBaseUrl,t.username,t.access_key),f=!0,N=0,G=a?{signal:o.signal,name:a,perPage:10}:{signal:o.signal,perPage:10};for await(let y of F.listProjectsStream(G)){if(f&&(l(!1),g(!1),A.current=!1,f=!1),y.totalLoaded===0&&y.done&&N===0&&!a){b.current=!0,p("naming"),m(!1);return}let M=y.projects.map(j=>V(j.project_id,j.name,x));B(N===0?M:j=>[...j,...M]),N+=y.projects.length,y.done&&m(!1)}f&&(l(!1),m(!1),g(!1))}catch(t){if(t?.name==="AbortError")return;P(t instanceof Error?t.message:String(t)),l(!1),m(!1),g(!1)}})(),()=>o.abort()},[n,x,c,I]);let Y=(0,e.useCallback)(o=>{let a=o.trim();if(!a){h("Name cannot be empty");return}h(null),p("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let t=n.cached??await n.resolve();if(!t)throw new Error("Not authenticated");let L=T(c),f=await new k(L.tmsBaseUrl,t.username,t.access_key).createProject(a);w(f.id,f.name)}catch(t){h(t instanceof Error?t.message:String(t)),p("naming")}})()},[n,c,w]),z=(0,e.useCallback)(()=>{R(""),h(null),b.current?C():p("list")},[C]);return d==="naming"||d==="creating"?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(s,{color:i.orange,bold:!0,children:"Create new project"}),b.current&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"No projects yet \u2014 let's create one."})}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(s,{color:i.dim,children:"Name: "}),d==="naming"?(0,r.jsx)($,{value:v,onChange:o=>{R(o),E&&h(null)},onSubmit:Y,onCancel:z}):(0,r.jsx)(s,{children:v})]}),E&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.red,children:E})}),d==="creating"&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"Creating..."})}),d==="naming"&&(0,r.jsx)(_,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:b.current?"cancel":"back"})]}):(0,r.jsx)(U,{title:"Projects",items:q,loading:D,loadingMore:H,searching:J,preserveSelectionById:!0,onSearch:X,error:Q,itemNoun:"projects",onTab:()=>{b.current=!1,p("naming")},extraHint:"tab to create new",onSelect:o=>{let a=o.label.replace(` (${o.id})`,"");w(o.id,a)},onCancel:C})}export{V as a,se as b};