sliccy 3.5.4 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +1 -2
  2. package/dist/node-server/_cloud_core/src/errors.d.ts +14 -0
  3. package/dist/node-server/_cloud_core/src/errors.d.ts.map +1 -0
  4. package/dist/node-server/_cloud_core/src/errors.js +13 -0
  5. package/dist/node-server/_cloud_core/src/index.d.ts +19 -0
  6. package/dist/node-server/_cloud_core/src/index.d.ts.map +1 -0
  7. package/dist/node-server/_cloud_core/src/index.js +14 -0
  8. package/dist/node-server/_cloud_core/src/operations/kill.d.ts +18 -0
  9. package/dist/node-server/_cloud_core/src/operations/kill.d.ts.map +1 -0
  10. package/dist/node-server/_cloud_core/src/operations/kill.js +32 -0
  11. package/dist/node-server/_cloud_core/src/operations/list.d.ts +25 -0
  12. package/dist/node-server/_cloud_core/src/operations/list.d.ts.map +1 -0
  13. package/dist/node-server/_cloud_core/src/operations/list.js +145 -0
  14. package/dist/node-server/_cloud_core/src/operations/pause.d.ts +15 -0
  15. package/dist/node-server/_cloud_core/src/operations/pause.d.ts.map +1 -0
  16. package/dist/node-server/_cloud_core/src/operations/pause.js +27 -0
  17. package/dist/node-server/_cloud_core/src/operations/resume.d.ts +22 -0
  18. package/dist/node-server/_cloud_core/src/operations/resume.d.ts.map +1 -0
  19. package/dist/node-server/_cloud_core/src/operations/resume.js +86 -0
  20. package/dist/node-server/_cloud_core/src/operations/start.d.ts +67 -0
  21. package/dist/node-server/_cloud_core/src/operations/start.d.ts.map +1 -0
  22. package/dist/node-server/_cloud_core/src/operations/start.js +228 -0
  23. package/dist/node-server/_cloud_core/src/polling.d.ts +18 -0
  24. package/dist/node-server/_cloud_core/src/polling.d.ts.map +1 -0
  25. package/dist/node-server/_cloud_core/src/polling.js +79 -0
  26. package/dist/node-server/_cloud_core/src/registry.d.ts +27 -0
  27. package/dist/node-server/_cloud_core/src/registry.d.ts.map +1 -0
  28. package/dist/node-server/_cloud_core/src/registry.js +1 -0
  29. package/dist/node-server/_cloud_core/src/secrets-filter.d.ts +2 -0
  30. package/dist/node-server/_cloud_core/src/secrets-filter.d.ts.map +1 -0
  31. package/dist/node-server/_cloud_core/src/secrets-filter.js +17 -0
  32. package/dist/node-server/_cloud_core/src/substrate-factory.d.ts +3 -0
  33. package/dist/node-server/_cloud_core/src/substrate-factory.d.ts.map +1 -0
  34. package/dist/node-server/_cloud_core/src/substrate-factory.js +6 -0
  35. package/dist/node-server/_cloud_core/src/substrate.d.ts +53 -0
  36. package/dist/node-server/_cloud_core/src/substrate.d.ts.map +1 -0
  37. package/dist/node-server/_cloud_core/src/substrate.js +1 -0
  38. package/dist/node-server/_cloud_core/src/substrates/e2b.d.ts +3 -0
  39. package/dist/node-server/_cloud_core/src/substrates/e2b.d.ts.map +1 -0
  40. package/dist/node-server/_cloud_core/src/substrates/e2b.js +98 -0
  41. package/dist/node-server/_cloud_core/src/types.d.ts +94 -0
  42. package/dist/node-server/_cloud_core/src/types.d.ts.map +1 -0
  43. package/dist/node-server/_cloud_core/src/types.js +3 -0
  44. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.d.ts +39 -0
  45. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.d.ts.map +1 -0
  46. package/dist/node-server/_cloud_core/tests/fixtures/fake-substrate.js +75 -0
  47. package/dist/node-server/_cloud_core/tests/fixtures/index.d.ts +4 -0
  48. package/dist/node-server/_cloud_core/tests/fixtures/index.d.ts.map +1 -0
  49. package/dist/node-server/_cloud_core/tests/fixtures/index.js +2 -0
  50. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.d.ts +10 -0
  51. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.d.ts.map +1 -0
  52. package/dist/node-server/_cloud_core/tests/fixtures/mem-registry.js +25 -0
  53. package/dist/node-server/_cloud_core/tests/kill.test.d.ts +2 -0
  54. package/dist/node-server/_cloud_core/tests/kill.test.d.ts.map +1 -0
  55. package/dist/node-server/_cloud_core/tests/kill.test.js +164 -0
  56. package/dist/node-server/_cloud_core/tests/list.test.d.ts +2 -0
  57. package/dist/node-server/_cloud_core/tests/list.test.d.ts.map +1 -0
  58. package/dist/node-server/_cloud_core/tests/list.test.js +300 -0
  59. package/dist/node-server/_cloud_core/tests/pause.test.d.ts +2 -0
  60. package/dist/node-server/_cloud_core/tests/pause.test.d.ts.map +1 -0
  61. package/dist/node-server/_cloud_core/tests/pause.test.js +167 -0
  62. package/dist/node-server/_cloud_core/tests/resume.test.d.ts +2 -0
  63. package/dist/node-server/_cloud_core/tests/resume.test.d.ts.map +1 -0
  64. package/dist/node-server/_cloud_core/tests/resume.test.js +203 -0
  65. package/dist/node-server/_cloud_core/tests/secrets-filter.test.d.ts +2 -0
  66. package/dist/node-server/_cloud_core/tests/secrets-filter.test.d.ts.map +1 -0
  67. package/dist/node-server/_cloud_core/tests/secrets-filter.test.js +30 -0
  68. package/dist/node-server/_cloud_core/tests/start.test.d.ts +2 -0
  69. package/dist/node-server/_cloud_core/tests/start.test.d.ts.map +1 -0
  70. package/dist/node-server/_cloud_core/tests/start.test.js +513 -0
  71. package/dist/node-server/chrome-launch.d.ts +1 -0
  72. package/dist/node-server/chrome-launch.js +3 -0
  73. package/dist/node-server/cloud/dispatch.d.ts +34 -0
  74. package/dist/node-server/cloud/dispatch.js +79 -0
  75. package/dist/node-server/cloud/kill.d.ts +12 -0
  76. package/dist/node-server/cloud/kill.js +11 -0
  77. package/dist/node-server/cloud/list.d.ts +6 -0
  78. package/dist/node-server/cloud/list.js +6 -0
  79. package/dist/node-server/cloud/pause.d.ts +7 -0
  80. package/dist/node-server/cloud/pause.js +6 -0
  81. package/dist/node-server/cloud/registry-file.d.ts +13 -0
  82. package/dist/node-server/cloud/registry-file.js +85 -0
  83. package/dist/node-server/cloud/resume.d.ts +11 -0
  84. package/dist/node-server/cloud/resume.js +17 -0
  85. package/dist/node-server/cloud/start.d.ts +16 -0
  86. package/dist/node-server/cloud/start.js +49 -0
  87. package/dist/node-server/cloud-status.d.ts +11 -0
  88. package/dist/node-server/cloud-status.js +49 -0
  89. package/dist/node-server/hosted-bootstrap.d.ts +21 -0
  90. package/dist/node-server/hosted-bootstrap.js +14 -0
  91. package/dist/node-server/index.js +146 -3
  92. package/dist/node-server/leader-restart.d.ts +29 -0
  93. package/dist/node-server/leader-restart.js +146 -0
  94. package/dist/node-server/runtime-flags.d.ts +1 -0
  95. package/dist/node-server/runtime-flags.js +6 -0
  96. package/dist/ui/assets/adobe-BLY_1hN7.js +1 -0
  97. package/dist/ui/assets/adobe-BZS2Kmci.js +2 -0
  98. package/dist/ui/assets/agent-bridge-BFRFxJAl.js +1 -0
  99. package/dist/ui/assets/{agent-message-to-chat-H07zq-Kv.js → agent-message-to-chat-Cd-DQATg.js} +1 -1
  100. package/dist/ui/assets/anthropic-BbwUhO9H.js +39 -0
  101. package/dist/ui/assets/{anthropic-BK3Od7MT.js → anthropic-Dg9_3G1u.js} +3 -3
  102. package/dist/ui/assets/{apps-mZJxOz_q.js → apps-BQuoIsxV.js} +1 -1
  103. package/dist/ui/assets/azure-openai-CilK3M_Q.js +1 -0
  104. package/dist/ui/assets/{azure-openai-Dch5aR9j.js → azure-openai-CleJGzBE.js} +1 -1
  105. package/dist/ui/assets/azure-openai-responses-DMLD0Ano.js +1 -0
  106. package/dist/ui/assets/azure-openai-responses-_joBD1ru.js +1 -0
  107. package/dist/ui/assets/{bsh-watchdog-i5GXbvla.js → bsh-watchdog-CpJwB685.js} +1 -1
  108. package/dist/ui/assets/{cdp-Cv6W51Ld.js → cdp-BXSNdZRM.js} +3 -3
  109. package/dist/ui/assets/cloud-CCHD45tb.js +1 -0
  110. package/dist/ui/assets/cloud-DyAca2cv.css +1 -0
  111. package/dist/ui/assets/cost-command-Bv5UQVUC.js +1 -0
  112. package/dist/ui/assets/{dist-cK1g1pHF.js → dist-ChvbMSOY.js} +1 -1
  113. package/dist/ui/assets/{dist-BTGs16AV.js → dist-CltZJzbd.js} +1 -1
  114. package/dist/ui/assets/{dist-BcBxL8nL.js → dist-cZSF0917.js} +1 -1
  115. package/dist/ui/assets/{dist-Bgcuvc8h.js → dist-ljtB3O-J.js} +1 -1
  116. package/dist/ui/assets/{dist-EkY3RL7q.js → dist-tLLu0PBg.js} +1 -1
  117. package/dist/ui/assets/{es-Crcyr8Z7.js → es-C2wm9v2H.js} +1 -1
  118. package/dist/ui/assets/follower-sprinkle-bridge-Bg1mCcnG.js +1 -0
  119. package/dist/ui/assets/{github-DKcpc18I.js → github-BDzC2pCD.js} +1 -1
  120. package/dist/ui/assets/github-BzwlgA3s.js +2 -0
  121. package/dist/ui/assets/{google-IZXg3PJn.js → google-BVxsfaV3.js} +1 -1
  122. package/dist/ui/assets/google-C0Zd1qsl.js +1 -0
  123. package/dist/ui/assets/google-shared-DcZhZ_Z7.js +11 -0
  124. package/dist/ui/assets/{google-shared-BaIigNCs.js → google-shared-KyLYJrXa.js} +1 -1
  125. package/dist/ui/assets/google-vertex-BGpbWEWq.js +1 -0
  126. package/dist/ui/assets/{google-vertex-DDwmtWoJ.js → google-vertex-BSOalca9.js} +1 -1
  127. package/dist/ui/assets/{intercepted-oauth-CEgKdcyY.js → intercepted-oauth-D6eAxYca.js} +1 -1
  128. package/dist/ui/assets/{kernel-worker-dg2bRx7X.js → kernel-worker-D1_EtuZW.js} +1016 -980
  129. package/dist/ui/assets/{lick-ws-bridge-DgWfdUlv.js → lick-ws-bridge-DXFDOui-.js} +1 -1
  130. package/dist/ui/assets/{local-llm-DuUGv7wX.js → local-llm-B3qsU55x.js} +1 -1
  131. package/dist/ui/assets/magick-wasm-CasStH-w.js +1 -0
  132. package/dist/ui/assets/main-BSfjQXCf.js +1612 -0
  133. package/dist/ui/assets/{mistral-czd8-m0c.js → mistral-BkhZQqeV.js} +1 -1
  134. package/dist/ui/assets/{mistral-BS_Gm2MH.js → mistral-D130SR-b.js} +1 -1
  135. package/dist/ui/assets/modulepreload-polyfill-wMinxHhO.js +1 -0
  136. package/dist/ui/assets/nuke-command-D_sxu_AA.js +1 -0
  137. package/dist/ui/assets/{oauth-CJxNn7hC.js → oauth-BocTO4G9.js} +1 -1
  138. package/dist/ui/assets/oauth-bootstrap-DZdd7KZS.js +2 -0
  139. package/dist/ui/assets/{oauth-service-BAnfipgD.js → oauth-service-DAWR1CpY.js} +1 -1
  140. package/dist/ui/assets/oauth-service-y04jhWb_.js +1 -0
  141. package/dist/ui/assets/offscreen-client-HCLuFFlN.js +1 -0
  142. package/dist/ui/assets/onboarding-orchestrator-qbEVluIu.js +1 -0
  143. package/dist/ui/assets/openai-codex-responses-Bmd17Jq9.js +7 -0
  144. package/dist/ui/assets/openai-codex-responses-CMOclqki.js +7 -0
  145. package/dist/ui/assets/openai-completions-DmwgEsb4.js +5 -0
  146. package/dist/ui/assets/openai-responses-BYdEOxUq.js +1 -0
  147. package/dist/ui/assets/openai-responses-C3bs8sd1.js +1 -0
  148. package/dist/ui/assets/{openai-responses-shared-DDootAUL.js → openai-responses-shared-AM04ghTC.js} +1 -1
  149. package/dist/ui/assets/{openai-responses-shared-07lPyxEg.js → openai-responses-shared-Be22tDzQ.js} +1 -1
  150. package/dist/ui/assets/openrouter-BIFqVYxG.js +1 -0
  151. package/dist/ui/assets/openrouter-Dc1D0QOS.js +1 -0
  152. package/dist/ui/assets/panel-rpc-handlers-DDaHHzWR.js +1 -0
  153. package/dist/ui/assets/{provider-rBD-3FHW.js → provider-CU5ao6kF.js} +2 -2
  154. package/dist/ui/assets/{provider-BhabAJGA.js → provider-ChUiWhH0.js} +1 -1
  155. package/dist/ui/assets/provider-store-access-Bliwcbgg.js +1 -0
  156. package/dist/ui/assets/provider-store-access-iTh_6mMO.js +1 -0
  157. package/dist/ui/assets/proxied-fetch-8v3TaZYg.js +1 -0
  158. package/dist/ui/assets/{pyodide-BC4PaR54.js → pyodide-B7x60zRI.js} +2 -2
  159. package/dist/ui/assets/{remote-terminal-view-CXbFLcuS.js → remote-terminal-view-BREvd00U.js} +1 -1
  160. package/dist/ui/assets/secret-env-Js2g2sNO.js +1 -0
  161. package/dist/ui/assets/slicc-editor-Bu07BjW4.js +12 -0
  162. package/dist/ui/assets/{spawn-qtlw6x6p.js → spawn-CQ5XACZ1.js} +1 -1
  163. package/dist/ui/assets/{sql-wasm-DeVtn0z8.js → sql-wasm-C-pXJvOw.js} +1 -1
  164. package/dist/ui/assets/{store-DLeVoNF3.js → store-DQUahHdW.js} +1 -1
  165. package/dist/ui/assets/tray-leave-runtime-BEBMIYY_.js +1 -0
  166. package/dist/ui/assets/{upgrade-detection-CKrzeeRx.js → upgrade-detection-T74KTnyb.js} +1 -1
  167. package/dist/ui/assets/{xai-grok-CNyu04Tg.js → xai-grok-CkPPMxfZ.js} +1 -1
  168. package/dist/ui/assets/{xai-grok-sanitize-BeI8rdV5.js → xai-grok-sanitize-C7TgWvwD.js} +1 -1
  169. package/dist/ui/assets/{xai-grok-sanitize-h_8XMTD9.js → xai-grok-sanitize-L5nUbDcW.js} +1 -1
  170. package/dist/ui/assets/xai-grok-u9MyUN8m.js +1 -0
  171. package/dist/ui/electron-overlay-entry.js +9 -9
  172. package/dist/ui/index.html +3 -2
  173. package/dist/ui/packages/webapp/cloud/index.html +38 -0
  174. package/dist/ui/packages/webapp/index.html +3 -2
  175. package/package.json +10 -8
  176. package/dist/ui/assets/adobe-DpCIcyEb.js +0 -2
  177. package/dist/ui/assets/adobe-NMBK1vG2.js +0 -1
  178. package/dist/ui/assets/agent-bridge-D2k69QZ-.js +0 -1
  179. package/dist/ui/assets/anthropic-ZtfIcLyL.js +0 -39
  180. package/dist/ui/assets/azure-openai-CN9QA_pv.js +0 -1
  181. package/dist/ui/assets/azure-openai-responses-Bhr0mNdj.js +0 -1
  182. package/dist/ui/assets/azure-openai-responses-D400BxTc.js +0 -1
  183. package/dist/ui/assets/cost-command-BGqK_hbH.js +0 -1
  184. package/dist/ui/assets/follower-sprinkle-bridge-BayCf20v.js +0 -1
  185. package/dist/ui/assets/github-DpDjTcq9.js +0 -2
  186. package/dist/ui/assets/google-B97zVBac.js +0 -1
  187. package/dist/ui/assets/google-shared-DwzANLbz.js +0 -11
  188. package/dist/ui/assets/google-vertex-ICKJGS1M.js +0 -1
  189. package/dist/ui/assets/index-CCGqFzR9.js +0 -1575
  190. package/dist/ui/assets/magick-wasm-Bu7zx3Ux.js +0 -1
  191. package/dist/ui/assets/nuke-command-BSkSFZ4H.js +0 -1
  192. package/dist/ui/assets/oauth-bootstrap-BeZQrd7y.js +0 -2
  193. package/dist/ui/assets/oauth-service-BX55wTV9.js +0 -1
  194. package/dist/ui/assets/offscreen-client-DSEhUCxj.js +0 -1
  195. package/dist/ui/assets/onboarding-orchestrator-DjNti83y.js +0 -1
  196. package/dist/ui/assets/openai-codex-responses-DJKJH9AX.js +0 -7
  197. package/dist/ui/assets/openai-codex-responses-jB5RkWeq.js +0 -7
  198. package/dist/ui/assets/openai-completions-BWWM3S2J.js +0 -5
  199. package/dist/ui/assets/openai-responses-C_3YpAmj.js +0 -1
  200. package/dist/ui/assets/openai-responses-tJegTQYT.js +0 -1
  201. package/dist/ui/assets/panel-rpc-handlers-B4jZTNHO.js +0 -1
  202. package/dist/ui/assets/provider-store-access-H9Lu5HRL.js +0 -1
  203. package/dist/ui/assets/provider-store-access-biaB--zG.js +0 -1
  204. package/dist/ui/assets/proxied-fetch-C6dm2Ugc.js +0 -1
  205. package/dist/ui/assets/secret-env-s_8cP7Wf.js +0 -1
  206. package/dist/ui/assets/slicc-editor-pZcWEwTm.js +0 -12
  207. package/dist/ui/assets/tray-leave-runtime-DqA9PbxV.js +0 -1
  208. package/dist/ui/assets/xai-grok-CN1nP4TF.js +0 -1
  209. /package/dist/ui/assets/{active-transport-CfU1UxY6.js → active-transport-Clj9slj7.js} +0 -0
  210. /package/dist/ui/assets/{active-transport-Dm6CWYVE.js → active-transport-DHcaBd4j.js} +0 -0
  211. /package/dist/ui/assets/{addon-fit-BDUxDgg1.js → addon-fit-CBG3Hsec.js} +0 -0
  212. /package/dist/ui/assets/{addon-fit-Dkm5m5XK.js → addon-fit-CUt9lrQO.js} +0 -0
  213. /package/dist/ui/assets/{azure-ai-foundry-BHLfY_0t.js → azure-ai-foundry-B4QrVklT.js} +0 -0
  214. /package/dist/ui/assets/{azure-ai-foundry-1pnZpxAJ.js → azure-ai-foundry-CGkSI_4f.js} +0 -0
  215. /package/dist/ui/assets/{chat-fixture-DOzffHLr.js → chat-fixture-ChGRNFda.js} +0 -0
  216. /package/dist/ui/assets/{dist-BYoCEWmq.js → dist-9RlRmGag.js} +0 -0
  217. /package/dist/ui/assets/{dist-BNe7ZIzA.js → dist-CZcDRTma.js} +0 -0
  218. /package/dist/ui/assets/{dist-BrjVVq8c.js → dist-D0kTaNET.js} +0 -0
  219. /package/dist/ui/assets/{git-config-CGMfR0WK.js → git-config-DcQbkikl.js} +0 -0
  220. /package/dist/ui/assets/{github-copilot-headers-CTUP_cqn.js → github-copilot-headers-C5CocKfn.js} +0 -0
  221. /package/dist/ui/assets/{global-db-B97_fwjD.js → global-db-DL3jdM9H.js} +0 -0
  222. /package/dist/ui/assets/{hash-B9Dtr1VK.js → hash-iitWbNjK.js} +0 -0
  223. /package/dist/ui/assets/{headers-AeYLn7L4.js → headers-qDMOQQGF.js} +0 -0
  224. /package/dist/ui/assets/{lick-manager-proxy-BnnMFbgv.js → lick-manager-proxy-1L0EGIWD.js} +0 -0
  225. /package/dist/ui/assets/{index-CvlDeETm.css → main-CvlDeETm.css} +0 -0
  226. /package/dist/ui/assets/{openai-Bf1npfRy.js → openai-BR_xAflc.js} +0 -0
  227. /package/dist/ui/assets/{page-storage-sync-CqMAh8jG.js → page-storage-sync-sv2ogNKh.js} +0 -0
  228. /package/dist/ui/assets/{pdfjs-DDDkZHZ4.js → pdfjs-CW51NNE6.js} +0 -0
  229. /package/dist/ui/assets/{rum-DCU8sePD.js → rum-z5wz4Dnj.js} +0 -0
  230. /package/dist/ui/assets/{sanitize-unicode-h0KEBmEw.js → sanitize-unicode-B1z_Y4Dq.js} +0 -0
  231. /package/dist/ui/assets/{sprinkle-bridge-channel-DojIojh7.js → sprinkle-bridge-channel-Bw5UaanD.js} +0 -0
  232. /package/dist/ui/assets/{sprinkle-bridge-channel-DJC5SGWr.js → sprinkle-bridge-channel-ChD0T07C.js} +0 -0
  233. /package/dist/ui/assets/{sprinkle-proxy-rF3NSOGq.js → sprinkle-proxy-D6wqmewK.js} +0 -0
  234. /package/dist/ui/assets/{src-BQRb5emh.js → src-DRmQ1wr-.js} +0 -0
  235. /package/dist/ui/assets/{xai-grok-errors-Bzn3oNvW.js → xai-grok-errors-BdY43UIn.js} +0 -0
  236. /package/dist/ui/assets/{xai-grok-errors-WbFsMZum.js → xai-grok-errors-C6VnD_MH.js} +0 -0
  237. /package/dist/ui/assets/{xai-grok-models-cvcIXmNM.js → xai-grok-models-BndZgIFZ.js} +0 -0
  238. /package/dist/ui/assets/{xai-grok-models-DMYWtapT.js → xai-grok-models-C9MIa-Aj.js} +0 -0
  239. /package/dist/ui/assets/{xterm-D8ldLLKi.js → xterm-DLCsxsB1.js} +0 -0
  240. /package/dist/ui/assets/{xterm-DhusGoAm.js → xterm-VndicwFp.js} +0 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Registry entry for a cloud-hosted cone (sandbox). Renamed from
3
+ * CloudSessionEntry in node-server — the canonical name going forward is
4
+ * ConeEntry to align with the wider SLICC vocabulary (cone/scoops/licks).
5
+ */
6
+ export interface ConeEntry {
7
+ /** Substrate identifier (e.g., 'e2b'). Typed as string for cloud-core portability. */
8
+ substrate: string;
9
+ /** Substrate-assigned ID (e.g., e2b sandbox ID). */
10
+ sandboxId: string;
11
+ /** User-supplied or auto-generated name. */
12
+ name?: string;
13
+ /** ISO 8601 timestamp of creation. */
14
+ createdAt: string;
15
+ /** Join URL for the tray session. */
16
+ joinUrl: string;
17
+ /** ISO 8601 timestamp; updated on every list/resume tick. */
18
+ lastSeen: string;
19
+ /**
20
+ * Sandbox state. 'reserved' is used for in-flight start/resume operations
21
+ * holding a cap slot before the substrate reports real state. Reconciled
22
+ * state from substrate will only ever be running/paused/dead.
23
+ */
24
+ state: 'running' | 'paused' | 'dead' | 'reserved';
25
+ /**
26
+ * Last-known tray identity from `/tmp/slicc-join.json`. Set by `runStart`
27
+ * after the initial cloud-status read; preserved by `runPause` (do NOT
28
+ * overwrite this on pause — it is the comparison baseline that lets
29
+ * `runResume` detect tray rebuilds). `runResume` overwrites it after a
30
+ * successful refresh.
31
+ */
32
+ trayId?: string;
33
+ /**
34
+ * `updatedAt` from the last successful `/tmp/slicc-join.json` read.
35
+ * `runResume` polls for an `updatedAt` strictly newer than this value, so
36
+ * resume only declares success after the kick produced a fresh refresh.
37
+ * Preserved across `runPause` for the same reason as `trayId`.
38
+ */
39
+ lastJoinUpdatedAt?: string;
40
+ /**
41
+ * ISO timestamp set when state transitions to 'reserved'. Used by listCones
42
+ * to GC stale reservations from crashed operations (TTL: 10 minutes).
43
+ */
44
+ reservedAt?: string;
45
+ /**
46
+ * Additional metadata (e.g., { userId, createdBy }). Used by workers for
47
+ * filtering and by CLI for tracking.
48
+ */
49
+ metadata?: Record<string, string>;
50
+ }
51
+ /**
52
+ * The shape persisted to `/tmp/slicc-join.json` inside the sandbox. Read by
53
+ * both start and resume operations to determine the join URL and tray state.
54
+ */
55
+ export interface CloudStatus {
56
+ joinUrl: string;
57
+ trayId?: string;
58
+ sliccVersion?: string;
59
+ /** ISO 8601 timestamp written by /api/cloud-status; load-bearing for resume. */
60
+ updatedAt?: string;
61
+ }
62
+ /**
63
+ * Return value of the start operation — minimal shape with the sandbox ID,
64
+ * join URL, and optional name.
65
+ */
66
+ export interface StartResult {
67
+ sandboxId: string;
68
+ joinUrl: string;
69
+ name?: string;
70
+ }
71
+ /**
72
+ * Return value of the resume operation — includes join URL, tray rebuild flag,
73
+ * and optional version mismatch warning.
74
+ */
75
+ export interface ResumeResult {
76
+ sandboxId: string;
77
+ joinUrl: string;
78
+ trayRebuilt: boolean;
79
+ versionMismatch?: {
80
+ running: string;
81
+ local: string;
82
+ };
83
+ }
84
+ /**
85
+ * Summary of a sandbox returned by substrate.list(). Minimal shape with ID,
86
+ * name, state, and metadata.
87
+ */
88
+ export interface SandboxSummary {
89
+ sandboxId: string;
90
+ name?: string;
91
+ state: 'running' | 'paused' | 'dead';
92
+ metadata: Record<string, string>;
93
+ }
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}
@@ -0,0 +1,3 @@
1
+ // Shared types for cloud-core operations. Consumed by both node-server (CLI)
2
+ // and cloudflare-worker (Plan D).
3
+ export {};
@@ -0,0 +1,39 @@
1
+ import type { CreateOpts, SandboxHandle, SandboxSubstrate, SandboxSummary } from '../../src/index.js';
2
+ export interface FakeSandboxHandleOpts {
3
+ sandboxId?: string;
4
+ /** /tmp/slicc-join.json contents to return from readFile. */
5
+ joinJson?: string;
6
+ /** stdout for handle.run() (the kick curl); default '200'. */
7
+ runStdout?: string;
8
+ /** exit code for handle.run(); default 0. */
9
+ runExitCode?: number;
10
+ /** stderr for handle.run(); default ''. */
11
+ runStderr?: string;
12
+ /** Optional: throw on kill (e.g., not-found discrimination tests). */
13
+ killError?: Error;
14
+ /** Captures all writeFile calls. */
15
+ writes?: Array<{
16
+ path: string;
17
+ contents: string | Uint8Array;
18
+ }>;
19
+ }
20
+ export declare function makeFakeHandle(opts?: FakeSandboxHandleOpts): SandboxHandle;
21
+ export interface FakeSubstrateOpts {
22
+ /** Handle returned by connect(). Defaults to a vanilla fake handle. */
23
+ handle?: SandboxHandle;
24
+ /** If set, connect() throws this. Useful for not-found tests. */
25
+ connectError?: Error;
26
+ /** Override create(); default returns the same handle. */
27
+ onCreate?: (opts: CreateOpts) => Promise<SandboxHandle>;
28
+ /** Captures all create() calls. */
29
+ creates?: CreateOpts[];
30
+ /** List result to return; default []. */
31
+ listResult?: SandboxSummary[];
32
+ /** Captures all extendTimeout calls. */
33
+ timeoutCalls?: Array<{
34
+ sandboxId: string;
35
+ ttlMs: number;
36
+ }>;
37
+ }
38
+ export declare function makeFakeSubstrate(opts?: FakeSubstrateOpts): SandboxSubstrate;
39
+ //# sourceMappingURL=fake-substrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-substrate.d.ts","sourceRoot":"","sources":["../../../tests/fixtures/fake-substrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,aAAa,EAEb,gBAAgB,EAEhB,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,oCAAoC;IACpC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,qBAA0B,GAAG,aAAa,CAqC9E;AAED,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,iEAAiE;IACjE,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,mCAAmC;IACnC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,yCAAyC;IACzC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,wCAAwC;IACxC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,gBAAgB,CAiChF"}
@@ -0,0 +1,75 @@
1
+ export function makeFakeHandle(opts = {}) {
2
+ const writes = opts.writes ?? [];
3
+ return {
4
+ sandboxId: opts.sandboxId ?? 'sbx-fake',
5
+ substrate: 'e2b',
6
+ pause: async () => { },
7
+ kill: async () => {
8
+ if (opts.killError)
9
+ throw opts.killError;
10
+ },
11
+ getInfo: async () => ({
12
+ sandboxId: opts.sandboxId ?? 'sbx-fake',
13
+ state: 'running',
14
+ metadata: {},
15
+ createdAt: new Date().toISOString(),
16
+ }),
17
+ writeFile: async (path, contents) => {
18
+ writes.push({ path, contents });
19
+ },
20
+ readFile: async (path) => {
21
+ if (path === '/tmp/slicc-join.json') {
22
+ return (opts.joinJson ??
23
+ JSON.stringify({
24
+ joinUrl: 'https://w/join/fake',
25
+ trayId: 't-fake',
26
+ updatedAt: new Date().toISOString(),
27
+ }));
28
+ }
29
+ throw new Error(`ENOENT ${path}`);
30
+ },
31
+ run: async (_cmd) => ({
32
+ stdout: opts.runStdout ?? '200',
33
+ stderr: opts.runStderr ?? '',
34
+ exitCode: opts.runExitCode ?? 0,
35
+ }),
36
+ };
37
+ }
38
+ export function makeFakeSubstrate(opts = {}) {
39
+ const handle = opts.handle ?? makeFakeHandle();
40
+ const creates = opts.creates ?? [];
41
+ const listResult = opts.listResult ?? [];
42
+ const timeoutCalls = opts.timeoutCalls ?? [];
43
+ return {
44
+ id: 'e2b',
45
+ async create(createOpts) {
46
+ creates.push(createOpts);
47
+ if (opts.onCreate)
48
+ return opts.onCreate(createOpts);
49
+ return handle;
50
+ },
51
+ async connect(_id) {
52
+ if (opts.connectError)
53
+ throw opts.connectError;
54
+ return handle;
55
+ },
56
+ async list(listOpts) {
57
+ // Optionally filter listResult by metadata if provided
58
+ if (!listOpts?.metadata)
59
+ return listResult;
60
+ const filterMetadata = listOpts.metadata;
61
+ return listResult.filter((s) => {
62
+ if (!s.metadata)
63
+ return false;
64
+ for (const [k, v] of Object.entries(filterMetadata)) {
65
+ if (s.metadata[k] !== v)
66
+ return false;
67
+ }
68
+ return true;
69
+ });
70
+ },
71
+ async extendTimeout(sandboxId, ttlMs) {
72
+ timeoutCalls.push({ sandboxId, ttlMs });
73
+ },
74
+ };
75
+ }
@@ -0,0 +1,4 @@
1
+ export { makeFakeHandle, makeFakeSubstrate } from './fake-substrate.js';
2
+ export type { FakeSandboxHandleOpts, FakeSubstrateOpts } from './fake-substrate.js';
3
+ export { MemRegistry } from './mem-registry.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../tests/fixtures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { makeFakeHandle, makeFakeSubstrate } from './fake-substrate.js';
2
+ export { MemRegistry } from './mem-registry.js';
@@ -0,0 +1,10 @@
1
+ import type { ConeEntry, Registry } from '../../src/index.js';
2
+ export declare class MemRegistry implements Registry {
3
+ entries: ConeEntry[];
4
+ list(): Promise<ConeEntry[]>;
5
+ findByNameOrId(query: string): Promise<ConeEntry | null>;
6
+ append(entry: ConeEntry): Promise<void>;
7
+ update(sandboxId: string, patch: Partial<ConeEntry>): Promise<void>;
8
+ remove(sandboxId: string): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=mem-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-registry.d.ts","sourceRoot":"","sources":["../../../tests/fixtures/mem-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9D,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAM;IAEpB,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAI5B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIxD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
@@ -0,0 +1,25 @@
1
+ export class MemRegistry {
2
+ entries = [];
3
+ async list() {
4
+ return [...this.entries];
5
+ }
6
+ async findByNameOrId(query) {
7
+ return this.entries.find((e) => e.sandboxId === query || e.name === query) ?? null;
8
+ }
9
+ async append(entry) {
10
+ const i = this.entries.findIndex((e) => e.sandboxId === entry.sandboxId);
11
+ if (i >= 0)
12
+ this.entries[i] = { ...this.entries[i], ...entry };
13
+ else
14
+ this.entries.push(entry);
15
+ }
16
+ async update(sandboxId, patch) {
17
+ const i = this.entries.findIndex((e) => e.sandboxId === sandboxId);
18
+ if (i < 0)
19
+ throw new Error(`entry not found: ${sandboxId}`);
20
+ this.entries[i] = { ...this.entries[i], ...patch };
21
+ }
22
+ async remove(sandboxId) {
23
+ this.entries = this.entries.filter((e) => e.sandboxId !== sandboxId);
24
+ }
25
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=kill.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill.test.d.ts","sourceRoot":"","sources":["../../tests/kill.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,164 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { killCone } from '../src/index.js';
3
+ import { MemRegistry, makeFakeSubstrate } from './fixtures/index.js';
4
+ // Specialized handle for kill tests: allows controlled throw on kill.
5
+ function makeKillTestHandle(throwOnKill) {
6
+ return {
7
+ sandboxId: 'sbx-test-1',
8
+ substrate: 'e2b',
9
+ pause: async () => { },
10
+ kill: async () => {
11
+ if (throwOnKill)
12
+ throw throwOnKill;
13
+ },
14
+ getInfo: async () => ({
15
+ sandboxId: 'sbx-test-1',
16
+ state: 'running',
17
+ metadata: {},
18
+ createdAt: new Date().toISOString(),
19
+ }),
20
+ writeFile: async () => { },
21
+ readFile: async () => '',
22
+ run: async () => ({ stdout: '', stderr: '', exitCode: 0 }),
23
+ };
24
+ }
25
+ describe('killCone', () => {
26
+ it('kills sandbox and removes registry entry', async () => {
27
+ const registry = new MemRegistry();
28
+ await registry.append({
29
+ sandboxId: 'sbx-1',
30
+ substrate: 'e2b',
31
+ createdAt: new Date().toISOString(),
32
+ lastSeen: new Date().toISOString(),
33
+ joinUrl: 'https://tray.example.com/join/abc123',
34
+ state: 'running',
35
+ });
36
+ const substrate = makeFakeSubstrate({
37
+ handle: makeKillTestHandle(),
38
+ });
39
+ const result = await killCone({ substrate, registry }, 'sbx-1');
40
+ expect(result).toEqual({ sandboxId: 'sbx-1', alreadyDead: false });
41
+ expect(registry.entries).toEqual([]);
42
+ });
43
+ it('throws NOT_FOUND when query has no match', async () => {
44
+ const registry = new MemRegistry();
45
+ const substrate = makeFakeSubstrate({
46
+ handle: makeKillTestHandle(),
47
+ });
48
+ let caught = null;
49
+ try {
50
+ await killCone({ substrate, registry }, 'missing');
51
+ }
52
+ catch (err) {
53
+ caught = err;
54
+ }
55
+ expect(caught).toBeTruthy();
56
+ expect(caught?.code).toBe('NOT_FOUND');
57
+ expect(caught?.message).toContain('cloud session not found');
58
+ });
59
+ it('still removes registry entry if substrate.kill says sandbox is already gone', async () => {
60
+ const registry = new MemRegistry();
61
+ await registry.append({
62
+ sandboxId: 'sbx-1',
63
+ substrate: 'e2b',
64
+ createdAt: new Date().toISOString(),
65
+ lastSeen: new Date().toISOString(),
66
+ joinUrl: 'https://tray.example.com/join/paused123',
67
+ state: 'paused',
68
+ });
69
+ const notFoundErr = new Error('unknown sandbox id');
70
+ const substrate = makeFakeSubstrate({
71
+ handle: makeKillTestHandle(notFoundErr),
72
+ });
73
+ const result = await killCone({ substrate, registry }, 'sbx-1');
74
+ expect(result.alreadyDead).toBe(true);
75
+ expect(result.sandboxId).toBe('sbx-1');
76
+ expect(registry.entries).toEqual([]);
77
+ });
78
+ it('handles "not found" pattern variations', async () => {
79
+ const patterns = ['sandbox not found', 'unknown sandbox', '404 not found', 'does not exist'];
80
+ for (const pattern of patterns) {
81
+ const registry = new MemRegistry();
82
+ await registry.append({
83
+ sandboxId: 'sbx-test',
84
+ substrate: 'e2b',
85
+ createdAt: new Date().toISOString(),
86
+ lastSeen: new Date().toISOString(),
87
+ joinUrl: 'https://tray.example.com/join/test',
88
+ state: 'running',
89
+ });
90
+ const err = new Error(pattern);
91
+ const substrate = makeFakeSubstrate({
92
+ handle: makeKillTestHandle(err),
93
+ });
94
+ const result = await killCone({ substrate, registry }, 'sbx-test');
95
+ expect(result.alreadyDead).toBe(true);
96
+ expect(registry.entries).toEqual([]);
97
+ }
98
+ });
99
+ it('finds entry by name', async () => {
100
+ const registry = new MemRegistry();
101
+ await registry.append({
102
+ sandboxId: 'sbx-1',
103
+ name: 'my-prod-session',
104
+ substrate: 'e2b',
105
+ createdAt: new Date().toISOString(),
106
+ lastSeen: new Date().toISOString(),
107
+ joinUrl: 'https://tray.example.com/join/prod123',
108
+ state: 'running',
109
+ });
110
+ const substrate = makeFakeSubstrate({
111
+ handle: makeKillTestHandle(),
112
+ });
113
+ const result = await killCone({ substrate, registry }, 'my-prod-session');
114
+ expect(result.sandboxId).toBe('sbx-1');
115
+ expect(registry.entries).toEqual([]);
116
+ });
117
+ it('re-throws non-NotFound errors from kill', async () => {
118
+ const registry = new MemRegistry();
119
+ await registry.append({
120
+ sandboxId: 'sbx-1',
121
+ substrate: 'e2b',
122
+ createdAt: new Date().toISOString(),
123
+ lastSeen: new Date().toISOString(),
124
+ joinUrl: 'https://tray.example.com/join/net123',
125
+ state: 'running',
126
+ });
127
+ const networkErr = new Error('network timeout');
128
+ const substrate = makeFakeSubstrate({
129
+ handle: makeKillTestHandle(networkErr),
130
+ });
131
+ let caught = null;
132
+ try {
133
+ await killCone({ substrate, registry }, 'sbx-1');
134
+ }
135
+ catch (err) {
136
+ caught = err;
137
+ }
138
+ expect(caught).toBeTruthy();
139
+ expect(caught?.code).toBe('INTERNAL');
140
+ expect(caught?.message).toContain('network timeout');
141
+ // Registry entry should still exist since we didn't get past the throw.
142
+ expect(registry.entries.length).toBe(1);
143
+ expect(registry.entries[0]?.sandboxId).toBe('sbx-1');
144
+ });
145
+ it('handles case-insensitive "not found" patterns', async () => {
146
+ const registry = new MemRegistry();
147
+ await registry.append({
148
+ sandboxId: 'sbx-1',
149
+ substrate: 'e2b',
150
+ createdAt: new Date().toISOString(),
151
+ lastSeen: new Date().toISOString(),
152
+ joinUrl: 'https://tray.example.com/join/case123',
153
+ state: 'running',
154
+ });
155
+ // Test case insensitivity
156
+ const err = new Error('NOT FOUND IN THE SYSTEM');
157
+ const substrate = makeFakeSubstrate({
158
+ handle: makeKillTestHandle(err),
159
+ });
160
+ const result = await killCone({ substrate, registry }, 'sbx-1');
161
+ expect(result.alreadyDead).toBe(true);
162
+ expect(registry.entries).toEqual([]);
163
+ });
164
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../tests/list.test.ts"],"names":[],"mappings":""}