@dev-anywhere/relay 0.6.3 → 0.8.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 (273) hide show
  1. package/assets/fonts/sarasa-fixed-sc/00c59ca448ea49756112128d6a43b127.woff2 +0 -0
  2. package/assets/fonts/sarasa-fixed-sc/011decfe3e67ab099af86e86a15e4f12.woff2 +0 -0
  3. package/assets/fonts/sarasa-fixed-sc/0133a2c4604dd809764dc749af72dc79.woff2 +0 -0
  4. package/assets/fonts/sarasa-fixed-sc/02928e8a3c2bf5ae6677bdf552664108.woff2 +0 -0
  5. package/assets/fonts/sarasa-fixed-sc/02eb3185bd0fd343bb2ae5a13260e805.woff2 +0 -0
  6. package/assets/fonts/sarasa-fixed-sc/04248a8ea5cd1204f875bc7661f1096c.woff2 +0 -0
  7. package/assets/fonts/sarasa-fixed-sc/059276218fbb9297f1668b1e37611796.woff2 +0 -0
  8. package/assets/fonts/sarasa-fixed-sc/05c6ae1e7580a1eff4be47341a155474.woff2 +0 -0
  9. package/assets/fonts/sarasa-fixed-sc/0681e7debe2dd44962f142b5c454676e.woff2 +0 -0
  10. package/assets/fonts/sarasa-fixed-sc/06ec078ae766d56e900c2837556eaa21.woff2 +0 -0
  11. package/assets/fonts/sarasa-fixed-sc/0765562d298aed694539cfcc4e26537c.woff2 +0 -0
  12. package/assets/fonts/sarasa-fixed-sc/090128a865f81baab82dfa2776ef9d39.woff2 +0 -0
  13. package/assets/fonts/sarasa-fixed-sc/098ff8830b5d779d8656e7ca93253c12.woff2 +0 -0
  14. package/assets/fonts/sarasa-fixed-sc/09b4eba4363eb15092534724123a78f2.woff2 +0 -0
  15. package/assets/fonts/sarasa-fixed-sc/0a32f2f6ed1a99ffa5e833e6891d1f82.woff2 +0 -0
  16. package/assets/fonts/sarasa-fixed-sc/0c1c080e1ac07d6a49dca531de9725a4.woff2 +0 -0
  17. package/assets/fonts/sarasa-fixed-sc/0d022c7c63996b8e5dc70b7fd7b0689d.woff2 +0 -0
  18. package/assets/fonts/sarasa-fixed-sc/0e7c7848d16895e68f79a55fd7b8c29d.woff2 +0 -0
  19. package/assets/fonts/sarasa-fixed-sc/1021bfe59ce4f905808dd5c3ea3fecc4.woff2 +0 -0
  20. package/assets/fonts/sarasa-fixed-sc/103c3dd7a5ee0d3be6cab3d04bd40c96.woff2 +0 -0
  21. package/assets/fonts/sarasa-fixed-sc/104a138cdd04cdbf3f786d2abeeed70a.woff2 +0 -0
  22. package/assets/fonts/sarasa-fixed-sc/105c39ea073d59b2e2f5e16ca68b2d71.woff2 +0 -0
  23. package/assets/fonts/sarasa-fixed-sc/1113c82b3ef6588e32cf20d7bd723355.woff2 +0 -0
  24. package/assets/fonts/sarasa-fixed-sc/1284d569e10290971bf3200bf4ddf94f.woff2 +0 -0
  25. package/assets/fonts/sarasa-fixed-sc/13401a392cffb9f2f7254e91bf44a106.woff2 +0 -0
  26. package/assets/fonts/sarasa-fixed-sc/1364ce313965ebf440ff2f0311cd4c83.woff2 +0 -0
  27. package/assets/fonts/sarasa-fixed-sc/1641d3bae07fd8d369349f78dd6c9c40.woff2 +0 -0
  28. package/assets/fonts/sarasa-fixed-sc/187edd679db5112bd2699bf1adad4a32.woff2 +0 -0
  29. package/assets/fonts/sarasa-fixed-sc/1918eaee7987c39db5198d637623a538.woff2 +0 -0
  30. package/assets/fonts/sarasa-fixed-sc/1aa2711726a364e3ea6fb7ca8a95d950.woff2 +0 -0
  31. package/assets/fonts/sarasa-fixed-sc/1ab01fa7bd43e3242f3c9d5b6f73dc90.woff2 +0 -0
  32. package/assets/fonts/sarasa-fixed-sc/1ae20f7adc1aa93e95c1842ce3b0c329.woff2 +0 -0
  33. package/assets/fonts/sarasa-fixed-sc/1c16e221d67a71a270f700e31e406230.woff2 +0 -0
  34. package/assets/fonts/sarasa-fixed-sc/1c40fcc59ed13b4b861844a8feb8205b.woff2 +0 -0
  35. package/assets/fonts/sarasa-fixed-sc/1d0e76f87701ab6daecb38b5aff5e35c.woff2 +0 -0
  36. package/assets/fonts/sarasa-fixed-sc/1d18a292fa9adaae7261de62ab3d5b83.woff2 +0 -0
  37. package/assets/fonts/sarasa-fixed-sc/1f99a7c91c71e6303282aa66c99c6670.woff2 +0 -0
  38. package/assets/fonts/sarasa-fixed-sc/20e0dab161488105b7fa7852470503b1.woff2 +0 -0
  39. package/assets/fonts/sarasa-fixed-sc/210b0efe54084a98b88028a6f3f35b0d.woff2 +0 -0
  40. package/assets/fonts/sarasa-fixed-sc/2116632ed1a3bdf3bf0106e1703c0781.woff2 +0 -0
  41. package/assets/fonts/sarasa-fixed-sc/22b3a91f654e334e2e7fbe3780f67764.woff2 +0 -0
  42. package/assets/fonts/sarasa-fixed-sc/24c5d226f02d96f03a7d050b0fdfd1d1.woff2 +0 -0
  43. package/assets/fonts/sarasa-fixed-sc/254d3a725f55d7111abbafa05858f2d6.woff2 +0 -0
  44. package/assets/fonts/sarasa-fixed-sc/26506a3ce2dbbfbfde40d11d65230272.woff2 +0 -0
  45. package/assets/fonts/sarasa-fixed-sc/268f0d094899c94260e840ac55320e20.woff2 +0 -0
  46. package/assets/fonts/sarasa-fixed-sc/277fc44cecacaf16cefce4681495bdce.woff2 +0 -0
  47. package/assets/fonts/sarasa-fixed-sc/27b773ac20ca5fa1bdd09d2109dfd5dc.woff2 +0 -0
  48. package/assets/fonts/sarasa-fixed-sc/2803a14ad17e6753704504009dad3333.woff2 +0 -0
  49. package/assets/fonts/sarasa-fixed-sc/2a0d78f9037bc2b5846bb4bcb42bfedc.woff2 +0 -0
  50. package/assets/fonts/sarasa-fixed-sc/2ac0bf1c4f9ad6e69bc01259f6e17058.woff2 +0 -0
  51. package/assets/fonts/sarasa-fixed-sc/2b01deb59e13f60e307d370b674b7b3b.woff2 +0 -0
  52. package/assets/fonts/sarasa-fixed-sc/2b74162a48979b6282e4893199f1346d.woff2 +0 -0
  53. package/assets/fonts/sarasa-fixed-sc/2d11bafb03690fc87494426325d90414.woff2 +0 -0
  54. package/assets/fonts/sarasa-fixed-sc/2dbf9030d7fa41019c78d5a717726261.woff2 +0 -0
  55. package/assets/fonts/sarasa-fixed-sc/30ce0c911f54ecd538247018d5289bb6.woff2 +0 -0
  56. package/assets/fonts/sarasa-fixed-sc/31bc5b0f3eb1e0f0845f37ae39f1a43e.woff2 +0 -0
  57. package/assets/fonts/sarasa-fixed-sc/31cdb9be17f46537a2958ba142c9765f.woff2 +0 -0
  58. package/assets/fonts/sarasa-fixed-sc/31d182ea6704bc50689becec8f417674.woff2 +0 -0
  59. package/assets/fonts/sarasa-fixed-sc/31f6abd51bf73062085ad82253fc302d.woff2 +0 -0
  60. package/assets/fonts/sarasa-fixed-sc/32d1abf03444175b162eadfef3a8e937.woff2 +0 -0
  61. package/assets/fonts/sarasa-fixed-sc/3397f69dc93262cf856a7c836fb33cb1.woff2 +0 -0
  62. package/assets/fonts/sarasa-fixed-sc/349035f271962ecacc5fa5cd56930c44.woff2 +0 -0
  63. package/assets/fonts/sarasa-fixed-sc/3525d0f8fb4e24d09024d35992e9095d.woff2 +0 -0
  64. package/assets/fonts/sarasa-fixed-sc/393876ac692b10f5ab7190590b062745.woff2 +0 -0
  65. package/assets/fonts/sarasa-fixed-sc/3bf37030a116e7377dcaf47356f08ef1.woff2 +0 -0
  66. package/assets/fonts/sarasa-fixed-sc/3c953d2e03b93436ee5c522ce3a27e1a.woff2 +0 -0
  67. package/assets/fonts/sarasa-fixed-sc/3fe795fd56b36a734a31613b1fed5441.woff2 +0 -0
  68. package/assets/fonts/sarasa-fixed-sc/401e69f55dc74b2e6fb774dcbba811da.woff2 +0 -0
  69. package/assets/fonts/sarasa-fixed-sc/404518f4b01a2fe38462bd04bfd76d35.woff2 +0 -0
  70. package/assets/fonts/sarasa-fixed-sc/404fe750213a60cbd07016ab43aacb71.woff2 +0 -0
  71. package/assets/fonts/sarasa-fixed-sc/41491053defe7688d8d53bfc313c6974.woff2 +0 -0
  72. package/assets/fonts/sarasa-fixed-sc/420121d03c1887873aa0eaa37a534e0c.woff2 +0 -0
  73. package/assets/fonts/sarasa-fixed-sc/42dffba83a406a85b208fba09e465c4d.woff2 +0 -0
  74. package/assets/fonts/sarasa-fixed-sc/44b74f10fbe44658d1acb6627b3a8b94.woff2 +0 -0
  75. package/assets/fonts/sarasa-fixed-sc/450be7e82a27dca52c8c1c582fcf182d.woff2 +0 -0
  76. package/assets/fonts/sarasa-fixed-sc/454ab2db1835c113f7b99f366a627247.woff2 +0 -0
  77. package/assets/fonts/sarasa-fixed-sc/45ec91cf9684c378adb99130acd6477e.woff2 +0 -0
  78. package/assets/fonts/sarasa-fixed-sc/4610b2980f41ab106bfe74b6951b34bb.woff2 +0 -0
  79. package/assets/fonts/sarasa-fixed-sc/46cad9f32908fa67609b51b74bc5693b.woff2 +0 -0
  80. package/assets/fonts/sarasa-fixed-sc/4a51964240b7e2c93d276dfef3794b5b.woff2 +0 -0
  81. package/assets/fonts/sarasa-fixed-sc/4b800716e356efb3e4b429085bcdb61a.woff2 +0 -0
  82. package/assets/fonts/sarasa-fixed-sc/4d8dad1e6c57ca3629d21230981cbb0e.woff2 +0 -0
  83. package/assets/fonts/sarasa-fixed-sc/4e625675fc1cb257e07a9ff2e331a9fe.woff2 +0 -0
  84. package/assets/fonts/sarasa-fixed-sc/4f2207b0342d6e2dd4290614e53cf0c5.woff2 +0 -0
  85. package/assets/fonts/sarasa-fixed-sc/50b0854263c0cf842979ce447020051a.woff2 +0 -0
  86. package/assets/fonts/sarasa-fixed-sc/552fe6d8e7144695a8fb38b8760295df.woff2 +0 -0
  87. package/assets/fonts/sarasa-fixed-sc/56175fa000590397d0ec4074c1f1e9f2.woff2 +0 -0
  88. package/assets/fonts/sarasa-fixed-sc/570f8c343327a818e4f0b0c4962ba4a1.woff2 +0 -0
  89. package/assets/fonts/sarasa-fixed-sc/579fbe9abeb15d0e96ee4770e6719719.woff2 +0 -0
  90. package/assets/fonts/sarasa-fixed-sc/57c37c54a9699166f03c0e6f871e6735.woff2 +0 -0
  91. package/assets/fonts/sarasa-fixed-sc/58e7c2324d8d292d58534d9f236f1552.woff2 +0 -0
  92. package/assets/fonts/sarasa-fixed-sc/59584acacc4c1852a6814f7e389ea191.woff2 +0 -0
  93. package/assets/fonts/sarasa-fixed-sc/598705446ef817283f04a709e974d473.woff2 +0 -0
  94. package/assets/fonts/sarasa-fixed-sc/59e93050018a5206bebf980e0f52fa78.woff2 +0 -0
  95. package/assets/fonts/sarasa-fixed-sc/5c129ed60734fd511937f3e72a07f936.woff2 +0 -0
  96. package/assets/fonts/sarasa-fixed-sc/5c40c780ef301baacb66efb9750e258b.woff2 +0 -0
  97. package/assets/fonts/sarasa-fixed-sc/5d1a982cb896e55ee96ada379c4a1d0c.woff2 +0 -0
  98. package/assets/fonts/sarasa-fixed-sc/5eba8579b88524026f6f6ec30cb81baa.woff2 +0 -0
  99. package/assets/fonts/sarasa-fixed-sc/601ad6234d43753b4e3efe8486b315c1.woff2 +0 -0
  100. package/assets/fonts/sarasa-fixed-sc/603b9e361dc9dd05250221356255a176.woff2 +0 -0
  101. package/assets/fonts/sarasa-fixed-sc/6133adaaf70a9467188b7e9e34039480.woff2 +0 -0
  102. package/assets/fonts/sarasa-fixed-sc/6158d9e8e90c6a553485c49e8adc991c.woff2 +0 -0
  103. package/assets/fonts/sarasa-fixed-sc/63c707f20b4af887788bfe53c6eee3ec.woff2 +0 -0
  104. package/assets/fonts/sarasa-fixed-sc/63c8475e9aa8acc0033fde9f792b8acf.woff2 +0 -0
  105. package/assets/fonts/sarasa-fixed-sc/64466c4274848cdee185275fb52660df.woff2 +0 -0
  106. package/assets/fonts/sarasa-fixed-sc/652d2da7b3c1dc0a70efdbb85e820055.woff2 +0 -0
  107. package/assets/fonts/sarasa-fixed-sc/6653b549c4d40a370724f6f32223e8a7.woff2 +0 -0
  108. package/assets/fonts/sarasa-fixed-sc/6734957b7e0bdd9f9e66cf24be7dc058.woff2 +0 -0
  109. package/assets/fonts/sarasa-fixed-sc/689a7d17cf5f82d7f148d660a21df759.woff2 +0 -0
  110. package/assets/fonts/sarasa-fixed-sc/6a864ec605e3b28cfdebf1d8fab2451e.woff2 +0 -0
  111. package/assets/fonts/sarasa-fixed-sc/6b4101e34138d999fd3ba9d2684ddebf.woff2 +0 -0
  112. package/assets/fonts/sarasa-fixed-sc/6b70494a68af284b2f21967109bf0311.woff2 +0 -0
  113. package/assets/fonts/sarasa-fixed-sc/6dde2f1140ce0a20159b7c1625bc3b45.woff2 +0 -0
  114. package/assets/fonts/sarasa-fixed-sc/6faa59cc7dff0a7751347b5baa8a5015.woff2 +0 -0
  115. package/assets/fonts/sarasa-fixed-sc/70364e9456886f13e2d5c9674ffb08f4.woff2 +0 -0
  116. package/assets/fonts/sarasa-fixed-sc/736f91321c58d7a9316ea9cddf4d83a7.woff2 +0 -0
  117. package/assets/fonts/sarasa-fixed-sc/7458762c6210651559b6019d5508ae2c.woff2 +0 -0
  118. package/assets/fonts/sarasa-fixed-sc/7460d9b012420e17a4bbfd2cb6796468.woff2 +0 -0
  119. package/assets/fonts/sarasa-fixed-sc/75a0c446c8bf8e4051d7cd65ed17e114.woff2 +0 -0
  120. package/assets/fonts/sarasa-fixed-sc/77ee59e7be1d66b59e87880e9c283491.woff2 +0 -0
  121. package/assets/fonts/sarasa-fixed-sc/782cda0bc3f24b5553f93c3d5b6fe581.woff2 +0 -0
  122. package/assets/fonts/sarasa-fixed-sc/78e84df88175c20e7f2562e4cdaad257.woff2 +0 -0
  123. package/assets/fonts/sarasa-fixed-sc/79e46c399f5e7383f853281b499269ee.woff2 +0 -0
  124. package/assets/fonts/sarasa-fixed-sc/7acff1baf69f6628c6372be0554191f1.woff2 +0 -0
  125. package/assets/fonts/sarasa-fixed-sc/7c5323aa737b291adacceecedac3e56a.woff2 +0 -0
  126. package/assets/fonts/sarasa-fixed-sc/7c9c9097a200464fd8ccec8eafc80178.woff2 +0 -0
  127. package/assets/fonts/sarasa-fixed-sc/7f77666d943dd01e947a2e35ffed945f.woff2 +0 -0
  128. package/assets/fonts/sarasa-fixed-sc/7f7e1463e29e6528378ed51589c4ebc0.woff2 +0 -0
  129. package/assets/fonts/sarasa-fixed-sc/80d4285084348d043a775221eb1c93b1.woff2 +0 -0
  130. package/assets/fonts/sarasa-fixed-sc/81258e5d1abdeafe44be69ad32f74c19.woff2 +0 -0
  131. package/assets/fonts/sarasa-fixed-sc/83a8da8e1de25f9eb39fe9d980e04a5d.woff2 +0 -0
  132. package/assets/fonts/sarasa-fixed-sc/83be0efd62f30539368d37cf7529f95c.woff2 +0 -0
  133. package/assets/fonts/sarasa-fixed-sc/84266b5a67707c745ce2c7101c559735.woff2 +0 -0
  134. package/assets/fonts/sarasa-fixed-sc/84905ac6e9d149bcacc34e2a71b82a67.woff2 +0 -0
  135. package/assets/fonts/sarasa-fixed-sc/852ae9183bf83dc2a2414290d3aa0236.woff2 +0 -0
  136. package/assets/fonts/sarasa-fixed-sc/85f5aa76f5f1e09b6852af36ec781960.woff2 +0 -0
  137. package/assets/fonts/sarasa-fixed-sc/860a1c6d20d4e631bd8e80735f5f3581.woff2 +0 -0
  138. package/assets/fonts/sarasa-fixed-sc/8afa5d1ab930027046ad09ec6349ab31.woff2 +0 -0
  139. package/assets/fonts/sarasa-fixed-sc/8b81739358772947619c9a58575c863a.woff2 +0 -0
  140. package/assets/fonts/sarasa-fixed-sc/8b9212f06a935902e9a4d8ad435c6a6e.woff2 +0 -0
  141. package/assets/fonts/sarasa-fixed-sc/8cc210fa91949bb44ea2bf607991b7bf.woff2 +0 -0
  142. package/assets/fonts/sarasa-fixed-sc/8f0b853b5728d58ac137870b3fd7ab02.woff2 +0 -0
  143. package/assets/fonts/sarasa-fixed-sc/8f0cdbad1758d5f68a48effbca6f74f8.woff2 +0 -0
  144. package/assets/fonts/sarasa-fixed-sc/8f5261cd877891595879479ee2440ae4.woff2 +0 -0
  145. package/assets/fonts/sarasa-fixed-sc/910a758ea12189f5a6a1e025fca33c5a.woff2 +0 -0
  146. package/assets/fonts/sarasa-fixed-sc/911993a058e817f1a231fbac27b3781c.woff2 +0 -0
  147. package/assets/fonts/sarasa-fixed-sc/91daedcfd8d0745222bf82c1fd310a33.woff2 +0 -0
  148. package/assets/fonts/sarasa-fixed-sc/943d6560828548692eeb4a533aa89494.woff2 +0 -0
  149. package/assets/fonts/sarasa-fixed-sc/945d0c206221572e76cc03fdd474685a.woff2 +0 -0
  150. package/assets/fonts/sarasa-fixed-sc/946411ab6f4f655273da613188359c06.woff2 +0 -0
  151. package/assets/fonts/sarasa-fixed-sc/9514ffa1f75fb1ad995392125c963b1b.woff2 +0 -0
  152. package/assets/fonts/sarasa-fixed-sc/971106de1248ba224fbfe50cf5c8a3dc.woff2 +0 -0
  153. package/assets/fonts/sarasa-fixed-sc/9714a586ded7b76747709b1fbe32c344.woff2 +0 -0
  154. package/assets/fonts/sarasa-fixed-sc/98b75b8dba788b62ef809337088ef030.woff2 +0 -0
  155. package/assets/fonts/sarasa-fixed-sc/98b7b436090e7874e2affbfd4ad28fd9.woff2 +0 -0
  156. package/assets/fonts/sarasa-fixed-sc/9a952ea6da219d92841b5503d43c746e.woff2 +0 -0
  157. package/assets/fonts/sarasa-fixed-sc/a0eabe8e58be580b4a5b0db87e3d282b.woff2 +0 -0
  158. package/assets/fonts/sarasa-fixed-sc/a11e9313ebf3147b1622c47e8cb1bacd.woff2 +0 -0
  159. package/assets/fonts/sarasa-fixed-sc/a2030c8eca8b7b75cf8d6fbbf29940cb.woff2 +0 -0
  160. package/assets/fonts/sarasa-fixed-sc/a2e0e75587d53e7e6c50da180ad76815.woff2 +0 -0
  161. package/assets/fonts/sarasa-fixed-sc/a3e96d6e1a2bdfe27d35140d1cb84600.woff2 +0 -0
  162. package/assets/fonts/sarasa-fixed-sc/a645858417844eaeb35eec60463a8758.woff2 +0 -0
  163. package/assets/fonts/sarasa-fixed-sc/a691a029b0ffe2f516dc0ba2680a7b24.woff2 +0 -0
  164. package/assets/fonts/sarasa-fixed-sc/a8731b06984003e15944af2045bac0ba.woff2 +0 -0
  165. package/assets/fonts/sarasa-fixed-sc/a8b5a37da8e22efc24e1d51e3dd133f2.woff2 +0 -0
  166. package/assets/fonts/sarasa-fixed-sc/aa4030d4e6a032ebd37ab080a87f0b15.woff2 +0 -0
  167. package/assets/fonts/sarasa-fixed-sc/ab0f237ab351bf258b3579011285bdb2.woff2 +0 -0
  168. package/assets/fonts/sarasa-fixed-sc/ac3a84416815f292543ac24c909b8f53.woff2 +0 -0
  169. package/assets/fonts/sarasa-fixed-sc/ac4188ae92c726da6cce789716706455.woff2 +0 -0
  170. package/assets/fonts/sarasa-fixed-sc/ac9e1d7b7d0e738c0965e0c37a171594.woff2 +0 -0
  171. package/assets/fonts/sarasa-fixed-sc/ad0efa49e97c104bb4f7d2a5d15eabef.woff2 +0 -0
  172. package/assets/fonts/sarasa-fixed-sc/ad3ac003a089fb00191c1e00aa56061e.woff2 +0 -0
  173. package/assets/fonts/sarasa-fixed-sc/ae481a90ce6dc650ffb8e777ab9fc089.woff2 +0 -0
  174. package/assets/fonts/sarasa-fixed-sc/aef606698752748d6b411ab230cd1760.woff2 +0 -0
  175. package/assets/fonts/sarasa-fixed-sc/aefc6f1da14ea5d5daf751fbf71b29a2.woff2 +0 -0
  176. package/assets/fonts/sarasa-fixed-sc/afe37b0740a4f9cc8f6a8aa5515a7826.woff2 +0 -0
  177. package/assets/fonts/sarasa-fixed-sc/b1a36f37842e3cd3981ee51b5d9b3edc.woff2 +0 -0
  178. package/assets/fonts/sarasa-fixed-sc/b3791b3fb0de0352fb1265cb02a021fb.woff2 +0 -0
  179. package/assets/fonts/sarasa-fixed-sc/b37e11130ac85f74432248a20b134622.woff2 +0 -0
  180. package/assets/fonts/sarasa-fixed-sc/b39422dfd00810613d15bd6572b05aa3.woff2 +0 -0
  181. package/assets/fonts/sarasa-fixed-sc/b3e514ad857c99211370e0bc572f776f.woff2 +0 -0
  182. package/assets/fonts/sarasa-fixed-sc/b4bd13b2c8086a5320644893d557b747.woff2 +0 -0
  183. package/assets/fonts/sarasa-fixed-sc/b6b23d001929bf0450f2ee16e9236f1f.woff2 +0 -0
  184. package/assets/fonts/sarasa-fixed-sc/b78cefc4f6a28eb5b5dd551dd873bcbd.woff2 +0 -0
  185. package/assets/fonts/sarasa-fixed-sc/b7e35bfc1e67312ea4f7399d87101681.woff2 +0 -0
  186. package/assets/fonts/sarasa-fixed-sc/b8493cdc783af55e9c50fc16c9b55bc3.woff2 +0 -0
  187. package/assets/fonts/sarasa-fixed-sc/b8e187dc66c9864eb348ee91951eacdf.woff2 +0 -0
  188. package/assets/fonts/sarasa-fixed-sc/bbf72353d229f1e5d6ccea65888451fe.woff2 +0 -0
  189. package/assets/fonts/sarasa-fixed-sc/bc6f1bd38107e5c152f4d568e75b3cf0.woff2 +0 -0
  190. package/assets/fonts/sarasa-fixed-sc/bc884e50f2cf284e61c6cc8274bb3cc5.woff2 +0 -0
  191. package/assets/fonts/sarasa-fixed-sc/bd0f4de744997828af2f5be5ec11428f.woff2 +0 -0
  192. package/assets/fonts/sarasa-fixed-sc/bf85faaa5f8efc2e1023f5e9504c0d4e.woff2 +0 -0
  193. package/assets/fonts/sarasa-fixed-sc/c509336eb0f6e35088064f15ddddc844.woff2 +0 -0
  194. package/assets/fonts/sarasa-fixed-sc/c5dd4097aac455d055badef188473371.woff2 +0 -0
  195. package/assets/fonts/sarasa-fixed-sc/c66f535c634eadaf34e0fe041672ae4b.woff2 +0 -0
  196. package/assets/fonts/sarasa-fixed-sc/c693a3ac340ea557c7ee39ddef0451a2.woff2 +0 -0
  197. package/assets/fonts/sarasa-fixed-sc/c8e0baa6e08346d410255ea827a8be27.woff2 +0 -0
  198. package/assets/fonts/sarasa-fixed-sc/ca8a49ee7846219a65d63ee1ec51c194.woff2 +0 -0
  199. package/assets/fonts/sarasa-fixed-sc/cd52152b8b48869f0fb1175983d9a505.woff2 +0 -0
  200. package/assets/fonts/sarasa-fixed-sc/cea8a7b71e661b383a7dc2f15cc2f47a.woff2 +0 -0
  201. package/assets/fonts/sarasa-fixed-sc/d2e284352932a735dda55727c0879153.woff2 +0 -0
  202. package/assets/fonts/sarasa-fixed-sc/d2fd9591ebfd0e779de7682d2745dbbb.woff2 +0 -0
  203. package/assets/fonts/sarasa-fixed-sc/d4a14f2651525d4affbbb753b6dbdf07.woff2 +0 -0
  204. package/assets/fonts/sarasa-fixed-sc/d5caf76d2720e294f4d0b1625f01ec9c.woff2 +0 -0
  205. package/assets/fonts/sarasa-fixed-sc/d5d463ae4788148f67a28de9ec4c1dca.woff2 +0 -0
  206. package/assets/fonts/sarasa-fixed-sc/d6e2c1e4c4b88bc14079e9c4a7549497.woff2 +0 -0
  207. package/assets/fonts/sarasa-fixed-sc/d70ea44ff65a30a175801cb104f83448.woff2 +0 -0
  208. package/assets/fonts/sarasa-fixed-sc/d750b314131793e148b4ebf50ffb91af.woff2 +0 -0
  209. package/assets/fonts/sarasa-fixed-sc/d7ae616c789f29be08782214e0288a0d.woff2 +0 -0
  210. package/assets/fonts/sarasa-fixed-sc/d8ae70630c929796cb0364e5202037e4.woff2 +0 -0
  211. package/assets/fonts/sarasa-fixed-sc/da5bdab3ae018a4c1207bd67ab854bc2.woff2 +0 -0
  212. package/assets/fonts/sarasa-fixed-sc/dab7b758f386eaae246f675ec7e23f0f.woff2 +0 -0
  213. package/assets/fonts/sarasa-fixed-sc/db1cc9bd868a6ff45d7bbe5b28d4b8d7.woff2 +0 -0
  214. package/assets/fonts/sarasa-fixed-sc/dc34cae5db8221efc393ea494597b1ec.woff2 +0 -0
  215. package/assets/fonts/sarasa-fixed-sc/dd32cf24e261a9aa261b7e196da33f2d.woff2 +0 -0
  216. package/assets/fonts/sarasa-fixed-sc/dda618cc791e2c20645ca5b7843c50dc.woff2 +0 -0
  217. package/assets/fonts/sarasa-fixed-sc/df9de632322bb3378c647420760aab61.woff2 +0 -0
  218. package/assets/fonts/sarasa-fixed-sc/e00c9c693f510281ead88131d09c18d2.woff2 +0 -0
  219. package/assets/fonts/sarasa-fixed-sc/e02d34cae25f04c920a31db2c80d1d8f.woff2 +0 -0
  220. package/assets/fonts/sarasa-fixed-sc/e22efb34fb5fe61f5b45504d76d20781.woff2 +0 -0
  221. package/assets/fonts/sarasa-fixed-sc/e25f5e7e1d5b88a59d981b5f6f669283.woff2 +0 -0
  222. package/assets/fonts/sarasa-fixed-sc/e3bb4be954796cb47ac6851ab724ecaf.woff2 +0 -0
  223. package/assets/fonts/sarasa-fixed-sc/e3bdeda10d9131256fad8417fd1da09f.woff2 +0 -0
  224. package/assets/fonts/sarasa-fixed-sc/e73e3950ff542ab97969b032c1f7241f.woff2 +0 -0
  225. package/assets/fonts/sarasa-fixed-sc/e78879cfa489561d3ec6eef16a4a0a4d.woff2 +0 -0
  226. package/assets/fonts/sarasa-fixed-sc/e811136959f0512a25a18acc520970b5.woff2 +0 -0
  227. package/assets/fonts/sarasa-fixed-sc/e9a7cf7d3d15fb2e50730469b07f2e39.woff2 +0 -0
  228. package/assets/fonts/sarasa-fixed-sc/eb514af63c1e9b14ccec7dee432b8edc.woff2 +0 -0
  229. package/assets/fonts/sarasa-fixed-sc/ed0b4344be5485ee0b0c207f28762fb8.woff2 +0 -0
  230. package/assets/fonts/sarasa-fixed-sc/edf89add9339773b26c1c2dd2244a179.woff2 +0 -0
  231. package/assets/fonts/sarasa-fixed-sc/ef8de64aca34834c6f110f4adc7515bd.woff2 +0 -0
  232. package/assets/fonts/sarasa-fixed-sc/f0438b1823af0a0de674c239fa03eaba.woff2 +0 -0
  233. package/assets/fonts/sarasa-fixed-sc/f0604027051cb387c2f85940dfff3755.woff2 +0 -0
  234. package/assets/fonts/sarasa-fixed-sc/f065b514c78eb2344c42e496865369a9.woff2 +0 -0
  235. package/assets/fonts/sarasa-fixed-sc/f0d97a6f8e1880316015bc2283d0f156.woff2 +0 -0
  236. package/assets/fonts/sarasa-fixed-sc/f1834c69e3074e71093d17a68b9d4d7d.woff2 +0 -0
  237. package/assets/fonts/sarasa-fixed-sc/f29b465128cba69d5e68235945cd3edd.woff2 +0 -0
  238. package/assets/fonts/sarasa-fixed-sc/f330fd41c2fbf0ae89bb98047c08d516.woff2 +0 -0
  239. package/assets/fonts/sarasa-fixed-sc/f383e78159d65c11032dc8b8d9c360f3.woff2 +0 -0
  240. package/assets/fonts/sarasa-fixed-sc/f647c059126fa5bf24355dcbfed09c4f.woff2 +0 -0
  241. package/assets/fonts/sarasa-fixed-sc/f6af810265a209ab307886171ded4113.woff2 +0 -0
  242. package/assets/fonts/sarasa-fixed-sc/f74844d2228da8984fe156b5b9c28acc.woff2 +0 -0
  243. package/assets/fonts/sarasa-fixed-sc/f7f2840050c367f26cfbc2b81c3a5fad.woff2 +0 -0
  244. package/assets/fonts/sarasa-fixed-sc/f85435b23bb50124e045f50cfe54dd3e.woff2 +0 -0
  245. package/assets/fonts/sarasa-fixed-sc/f865cd6ba4d22d8d61fce2a2d63be7dc.woff2 +0 -0
  246. package/assets/fonts/sarasa-fixed-sc/f8a66c1ab7db90820de697f664ea136d.woff2 +0 -0
  247. package/assets/fonts/sarasa-fixed-sc/fa6cf45901b333e63b3eabc045783c69.woff2 +0 -0
  248. package/assets/fonts/sarasa-fixed-sc/fa827d13030f9366a57edbfc22ce4336.woff2 +0 -0
  249. package/assets/fonts/sarasa-fixed-sc/fb6ac0e1252b3d366009d4f4ffeab4fc.woff2 +0 -0
  250. package/assets/fonts/sarasa-fixed-sc/fbb64faabca9f28743b2d0d5dc448e5f.woff2 +0 -0
  251. package/assets/fonts/sarasa-fixed-sc/fd299dbef627ab6738d61d4e4bac56e2.woff2 +0 -0
  252. package/assets/fonts/sarasa-fixed-sc/fd8cd455b632147c1758bfb9bd0ba42e.woff2 +0 -0
  253. package/assets/fonts/sarasa-fixed-sc/ff8cf784cc8ef060bf9d2dc7e698b451.woff2 +0 -0
  254. package/assets/fonts/sarasa-fixed-sc/result.css +20 -0
  255. package/assets/web/assets/{fvad-BQ0eMlem.js → fvad-_D7IP4iB.js} +1 -1
  256. package/assets/web/assets/index-08tfJppO.css +41 -0
  257. package/assets/web/assets/{index-BwXMl6yi.js → index-D5T-5Hl5.js} +187 -187
  258. package/assets/web/index.html +2 -2
  259. package/assets/web/sw.js +1 -1
  260. package/dist/{chunk-SDL4V2RE.js → chunk-XPCFNRZO.js} +230 -22
  261. package/dist/chunk-XPCFNRZO.js.map +1 -0
  262. package/dist/handlers/client.d.ts.map +1 -1
  263. package/dist/handlers/proxy.d.ts.map +1 -1
  264. package/dist/index.js +16 -1
  265. package/dist/index.js.map +1 -1
  266. package/dist/registry.d.ts +4 -1
  267. package/dist/registry.d.ts.map +1 -1
  268. package/dist/remote-file-bridge.d.ts +1 -0
  269. package/dist/remote-file-bridge.d.ts.map +1 -1
  270. package/dist/server.js +1 -1
  271. package/package.json +2 -2
  272. package/assets/web/assets/index-DaV7Gwjf.css +0 -41
  273. package/dist/chunk-SDL4V2RE.js.map +0 -1
@@ -44,8 +44,8 @@
44
44
  <link rel="icon" type="image/svg+xml" href="/brand-icon.svg" />
45
45
  <link rel="icon" type="image/png" sizes="64x64" href="/pwa-64x64.png" />
46
46
  <link rel="apple-touch-icon" href="/apple-touch-icon-180x180.png" />
47
- <script type="module" crossorigin src="/assets/index-BwXMl6yi.js"></script>
48
- <link rel="stylesheet" crossorigin href="/assets/index-DaV7Gwjf.css">
47
+ <script type="module" crossorigin src="/assets/index-D5T-5Hl5.js"></script>
48
+ <link rel="stylesheet" crossorigin href="/assets/index-08tfJppO.css">
49
49
  <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
50
50
  <body class="bg-background text-foreground">
51
51
  <div id="root"></div>
package/assets/web/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const f=e=>i(e,t),l={module:{uri:t},exports:o,require:f};s[t]=Promise.all(n.map(e=>l[e]||f(e))).then(e=>(r(...e),o))}}define(["./workbox-10a3128e"],function(e){"use strict";importScripts("notification-sw.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"notification-sw.js",revision:"ee0be62f4c1f36625b92680b3060becb"},{url:"index.html",revision:"18bc98b5e0ee053b75bd46f8233b4f36"},{url:"assets/index-DaV7Gwjf.css",revision:null},{url:"assets/index-BwXMl6yi.js",revision:null},{url:"assets/fvad-DYxbW2my.wasm",revision:null},{url:"assets/fvad-BQ0eMlem.js",revision:null},{url:"assets/__vite-browser-external-BIHI7g3E.js",revision:null},{url:"brand-icon.svg",revision:"efe8505a7b7ef12cbb3a4bcd286254bd"},{url:"maskable-icon-512x512.png",revision:"e762ff07cdedcd78f8650f59c6881727"},{url:"pwa-192x192.png",revision:"4e4603ce0f22528eded553ba7f2ffbc5"},{url:"pwa-512x512.png",revision:"e762ff07cdedcd78f8650f59c6881727"},{url:"pwa-64x64.png",revision:"d322160ad1dc08ba9e133cb3d296ae63"},{url:"manifest.webmanifest",revision:"4daa295c44052f4ce59a1fcfd6f06ab8"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/proxy(\/|$|\?)/,/^\/client(\/|$|\?)/,/^\/voice(\/|$|\?)/,/^\/fonts\//,/^\/health/,/^\/status/,/^\/api\//]})),e.registerRoute(/^\/fonts\/.*\.(woff2|woff|ttf|otf|css)$/,new e.CacheFirst({cacheName:"dev-anywhere-fonts",plugins:[new e.ExpirationPlugin({maxEntries:40,maxAgeSeconds:15552e3})]}),"GET")});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const f=e=>i(e,t),c={module:{uri:t},exports:o,require:f};s[t]=Promise.all(n.map(e=>c[e]||f(e))).then(e=>(r(...e),o))}}define(["./workbox-10a3128e"],function(e){"use strict";importScripts("notification-sw.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"notification-sw.js",revision:"ee0be62f4c1f36625b92680b3060becb"},{url:"index.html",revision:"d15a03ec76d177ec0dd0655aaf59f5f8"},{url:"assets/index-D5T-5Hl5.js",revision:null},{url:"assets/index-08tfJppO.css",revision:null},{url:"assets/fvad-_D7IP4iB.js",revision:null},{url:"assets/fvad-DYxbW2my.wasm",revision:null},{url:"assets/__vite-browser-external-BIHI7g3E.js",revision:null},{url:"brand-icon.svg",revision:"efe8505a7b7ef12cbb3a4bcd286254bd"},{url:"maskable-icon-512x512.png",revision:"e762ff07cdedcd78f8650f59c6881727"},{url:"pwa-192x192.png",revision:"4e4603ce0f22528eded553ba7f2ffbc5"},{url:"pwa-512x512.png",revision:"e762ff07cdedcd78f8650f59c6881727"},{url:"pwa-64x64.png",revision:"d322160ad1dc08ba9e133cb3d296ae63"},{url:"manifest.webmanifest",revision:"4daa295c44052f4ce59a1fcfd6f06ab8"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/proxy(\/|$|\?)/,/^\/client(\/|$|\?)/,/^\/voice(\/|$|\?)/,/^\/fonts\//,/^\/health/,/^\/status/,/^\/api\//]})),e.registerRoute(/^\/fonts\/.*\.(woff2|woff|ttf|otf|css)$/,new e.CacheFirst({cacheName:"dev-anywhere-fonts",plugins:[new e.ExpirationPlugin({maxEntries:40,maxAgeSeconds:15552e3})]}),"GET")});
@@ -38,18 +38,32 @@ var ThinkingPayloadSchema = z2.object({
38
38
 
39
39
  // ../../packages/shared/dist/schemas/tool.js
40
40
  import { z as z3 } from "zod";
41
+ var ApprovalOptionKindSchema = z3.enum([
42
+ "allow_once",
43
+ "allow_always",
44
+ "reject_once",
45
+ "reject_always"
46
+ ]);
47
+ var ApprovalOptionSchema = z3.object({
48
+ optionId: IdSchema,
49
+ name: z3.string().min(1),
50
+ kind: ApprovalOptionKindSchema
51
+ });
41
52
  var ToolUseRequestPayloadSchema = z3.object({
42
53
  toolName: z3.string(),
43
54
  toolId: IdSchema,
44
- parameters: z3.record(z3.string(), z3.unknown())
55
+ parameters: z3.record(z3.string(), z3.unknown()),
56
+ options: z3.array(ApprovalOptionSchema).optional()
45
57
  });
46
58
  var ToolApprovePayloadSchema = z3.object({
47
59
  toolId: IdSchema,
48
- whitelistTool: z3.boolean().optional()
60
+ whitelistTool: z3.boolean().optional(),
61
+ optionId: IdSchema.optional()
49
62
  });
50
63
  var ToolDenyPayloadSchema = z3.object({
51
64
  toolId: IdSchema,
52
- reason: z3.string().optional()
65
+ reason: z3.string().optional(),
66
+ optionId: IdSchema.optional()
53
67
  });
54
68
  var ToolResultPayloadSchema = z3.object({
55
69
  toolId: IdSchema,
@@ -61,7 +75,7 @@ var ToolResultPayloadSchema = z3.object({
61
75
  import { z as z4 } from "zod";
62
76
 
63
77
  // ../../packages/shared/dist/constants/enums.js
64
- var providerValues = ["claude", "codex"];
78
+ var providerValues = ["claude", "codex", "kimi"];
65
79
  var ptyOwnerValues = ["local-terminal", "proxy-hosted"];
66
80
  var sessionModeValues = ["pty", "json"];
67
81
  var sessionKindValues = ["agent", "terminal"];
@@ -541,6 +555,8 @@ var ControlErrorCode = {
541
555
  PATH_NOT_DIRECTORY: "PATH_NOT_DIRECTORY",
542
556
  PATH_ACCESS_DENIED: "PATH_ACCESS_DENIED",
543
557
  PROXY_OFFLINE: "PROXY_OFFLINE",
558
+ PROXY_NOT_FOUND: "PROXY_NOT_FOUND",
559
+ PROXY_ONLINE: "PROXY_ONLINE",
544
560
  SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
545
561
  SESSION_ALREADY_ACTIVE: "SESSION_ALREADY_ACTIVE",
546
562
  PROVIDER_UNSUPPORTED: "PROVIDER_UNSUPPORTED",
@@ -554,6 +570,7 @@ var ControlErrorCode = {
554
570
  var ProxyInfoSchema = z9.object({
555
571
  proxyId: IdSchema,
556
572
  name: z9.string().optional(),
573
+ version: z9.string().optional(),
557
574
  online: z9.boolean(),
558
575
  sessions: z9.array(z9.string()).optional()
559
576
  });
@@ -578,7 +595,9 @@ var AgentCliAvailabilitySchema = z9.object({
578
595
  });
579
596
  var AgentCliStatusSchema = z9.object({
580
597
  claude: AgentCliAvailabilitySchema,
581
- codex: AgentCliAvailabilitySchema
598
+ codex: AgentCliAvailabilitySchema,
599
+ // 滚动升级兼容:旧 Proxy 不会上报 Kimi,新 Proxy 的探测结果始终包含它。
600
+ kimi: AgentCliAvailabilitySchema.optional()
582
601
  });
583
602
  var DirEntrySchema = z9.object({ name: z9.string(), isDir: z9.boolean() });
584
603
  var FileTreeGroupSchema = z9.object({
@@ -641,16 +660,29 @@ function control(type, shape, directions) {
641
660
  var relayControlDefinitions = [
642
661
  control("proxy_register", {
643
662
  proxyId: IdSchema,
644
- name: z9.string().optional()
663
+ name: z9.string().optional(),
664
+ proxyVersion: z9.string().min(1).max(64).optional()
645
665
  }),
646
666
  control("proxy_register_response", {
647
- status: z9.enum(["new", "reconnected"])
667
+ status: z9.enum(["new", "reconnected"]),
668
+ // optional 只用于滚动升级:新 Proxy 连接旧 Relay 时继续工作,但不会自动更新。
669
+ relayVersion: z9.string().min(1).max(64).optional()
648
670
  }),
649
671
  control("proxy_list_request", RequestIdShape),
650
672
  control("proxy_list_response", {
651
673
  ...RequestIdShape,
652
674
  proxies: z9.array(ProxyInfoSchema)
653
675
  }),
676
+ control("proxy_remove", {
677
+ ...RequiredRequestIdShape,
678
+ proxyId: IdSchema
679
+ }),
680
+ control("proxy_remove_response", {
681
+ ...RequiredRequestIdShape,
682
+ proxyId: IdSchema,
683
+ success: z9.boolean(),
684
+ ...RequestErrorShape
685
+ }),
654
686
  control("relay_client_list_request", RequestIdShape),
655
687
  control("relay_client_list_response", {
656
688
  ...RequestIdShape,
@@ -852,6 +884,10 @@ var relayControlDefinitions = [
852
884
  control("proxy_offline", {
853
885
  proxyId: IdSchema
854
886
  }),
887
+ // 用户明确删除了离线 Proxy。与列表暂时缺项分开建模,客户端据此永久清理选择态。
888
+ control("proxy_removed", {
889
+ proxyId: IdSchema
890
+ }),
855
891
  // Proxy 主动断开,relay 立即清理资源
856
892
  control("proxy_disconnect", {
857
893
  proxyId: IdSchema
@@ -876,7 +912,12 @@ var relayControlDefinitions = [
876
912
  success: z9.boolean()
877
913
  }, "proxy_to_client"),
878
914
  // 命令列表推送,proxy 将可用命令列表推给 client
879
- control("command_list_push", { commands: z9.array(CommandEntrySchema) }, "proxy_to_client"),
915
+ control("command_list_push", {
916
+ // New proxies scope command snapshots to their owning session. Keep this optional so
917
+ // rolling upgrades can still consume the legacy, proxy-wide snapshot.
918
+ sessionId: IdSchema.optional(),
919
+ commands: z9.array(CommandEntrySchema)
920
+ }, "proxy_to_client"),
880
921
  // 文件树推送: 按目录分组, 首组 path 即为 session cwd
881
922
  // 前端直接把每组写入 tree[path], 与 dir_list_response 共享 cache slot
882
923
  control("file_tree_push", {
@@ -1019,7 +1060,8 @@ var relayControlDefinitions = [
1019
1060
  approvals: z9.array(z9.object({
1020
1061
  requestId: IdSchema,
1021
1062
  toolName: z9.string(),
1022
- input: z9.record(z9.string(), z9.unknown())
1063
+ input: z9.record(z9.string(), z9.unknown()),
1064
+ options: z9.array(ApprovalOptionSchema).optional()
1023
1065
  }))
1024
1066
  }, "proxy_to_client"),
1025
1067
  // Voice Pilot speech summaries are produced by proxy-side Claude Code so it can read project context.
@@ -1199,7 +1241,7 @@ var RelayRegistry = class {
1199
1241
  proxyStates = /* @__PURE__ */ new Map();
1200
1242
  clientBindings = /* @__PURE__ */ new Map();
1201
1243
  connectedClients = /* @__PURE__ */ new Map();
1202
- registerProxy(proxyId, ws, name) {
1244
+ registerProxy(proxyId, ws, name, version) {
1203
1245
  const existing = this.proxyStates.get(proxyId);
1204
1246
  if (existing) {
1205
1247
  if (existing.ws && existing.ws.readyState === WebSocket.OPEN) {
@@ -1209,6 +1251,7 @@ var RelayRegistry = class {
1209
1251
  existing.connectionState = "online";
1210
1252
  existing.disconnectedAt = null;
1211
1253
  if (name !== void 0) existing.name = name;
1254
+ existing.version = version;
1212
1255
  return "reconnected";
1213
1256
  }
1214
1257
  this.proxyStates.set(proxyId, {
@@ -1216,7 +1259,8 @@ var RelayRegistry = class {
1216
1259
  connectionState: "online",
1217
1260
  sessions: /* @__PURE__ */ new Set(),
1218
1261
  disconnectedAt: null,
1219
- name
1262
+ name,
1263
+ version
1220
1264
  });
1221
1265
  return "new";
1222
1266
  }
@@ -1255,11 +1299,26 @@ var RelayRegistry = class {
1255
1299
  this.clientBindings.delete(clientId);
1256
1300
  }
1257
1301
  }
1302
+ for (const ws of this.connectedClients.keys()) {
1303
+ const clientWs = ws;
1304
+ if (clientWs.boundProxyId === proxyId) {
1305
+ delete clientWs.boundProxyId;
1306
+ }
1307
+ }
1258
1308
  this.proxyStates.delete(proxyId);
1259
1309
  }
1260
1310
  unregisterProxy(proxyId) {
1261
1311
  this.cleanupProxy(proxyId);
1262
1312
  }
1313
+ // 检查状态与删除必须保持在同一个同步操作内,避免调用方先检查、稍后删除时误删
1314
+ // 已经重连上线的开发机。只有显式进入 offline 状态的记录才允许被用户移除。
1315
+ removeOfflineProxy(proxyId) {
1316
+ const state = this.proxyStates.get(proxyId);
1317
+ if (!state) return "not_found";
1318
+ if (state.connectionState !== "offline") return "online";
1319
+ this.cleanupProxy(proxyId);
1320
+ return "removed";
1321
+ }
1263
1322
  getProxy(proxyId) {
1264
1323
  const state = this.proxyStates.get(proxyId);
1265
1324
  return state?.ws ?? void 0;
@@ -1282,6 +1341,7 @@ var RelayRegistry = class {
1282
1341
  return Array.from(this.proxyStates.entries()).map(([proxyId, state]) => ({
1283
1342
  proxyId,
1284
1343
  ...state.name !== void 0 ? { name: state.name } : {},
1344
+ ...state.version !== void 0 ? { version: state.version } : {},
1285
1345
  online: state.connectionState === "online"
1286
1346
  }));
1287
1347
  }
@@ -1839,18 +1899,19 @@ function handleProxyConnection(ws, registry, logger, ptySnapshotRoutes, sessionH
1839
1899
  const raw = data.toString();
1840
1900
  const result = parseMessage(raw);
1841
1901
  if (result.kind === "control" && result.message.type === "proxy_register") {
1842
- const { proxyId, name } = result.message;
1843
- const status = registry.registerProxy(proxyId, proxyWs, name);
1902
+ const { proxyId, name, proxyVersion } = result.message;
1903
+ const status = registry.registerProxy(proxyId, proxyWs, name, proxyVersion);
1844
1904
  proxyWs.proxyId = proxyId;
1845
1905
  if (status === "reconnected") {
1846
1906
  ptySnapshotRoutes.clearProxy(proxyId);
1847
1907
  sessionHistoryRoutes.clearProxy(proxyId);
1848
1908
  }
1849
- logger.info({ proxyId, status }, "Proxy registered");
1909
+ logger.info({ proxyId, proxyVersion, status }, "Proxy registered");
1850
1910
  proxyWs.send(
1851
1911
  serializeControl({
1852
1912
  type: "proxy_register_response",
1853
- status
1913
+ status,
1914
+ relayVersion: RELAY_VERSION
1854
1915
  })
1855
1916
  );
1856
1917
  if (status === "reconnected") {
@@ -2848,6 +2909,92 @@ function handleRelayClientListRequest(clientWs, registry, requestId) {
2848
2909
  })
2849
2910
  );
2850
2911
  }
2912
+ function proxyListResponse(registry) {
2913
+ const proxies = registry.listProxiesWithName().map((proxy) => ({
2914
+ ...proxy,
2915
+ sessions: registry.getSessionsForProxy(proxy.proxyId)
2916
+ }));
2917
+ return serializeControl({ type: "proxy_list_response", proxies });
2918
+ }
2919
+ function broadcastProxyList2(registry, chaos) {
2920
+ const response = proxyListResponse(registry);
2921
+ for (const target of registry.getAllClientWs()) {
2922
+ if (chaos) {
2923
+ chaos.send(target, response, {
2924
+ direction: "proxy_to_client",
2925
+ type: "proxy_list_response"
2926
+ });
2927
+ } else {
2928
+ target.send(response);
2929
+ }
2930
+ }
2931
+ }
2932
+ function broadcastProxyRemoved(proxyId, registry, chaos) {
2933
+ const notification = serializeControl({ type: "proxy_removed", proxyId });
2934
+ for (const target of registry.getAllClientWs()) {
2935
+ if (chaos) {
2936
+ chaos.send(target, notification, {
2937
+ direction: "proxy_to_client",
2938
+ type: "proxy_removed"
2939
+ });
2940
+ } else {
2941
+ target.send(notification);
2942
+ }
2943
+ }
2944
+ }
2945
+ function sendProxyRemoveResponse(clientWs, response, chaos) {
2946
+ const raw = serializeControl({ type: "proxy_remove_response", ...response });
2947
+ if (chaos) {
2948
+ chaos.send(clientWs, raw, {
2949
+ direction: "proxy_to_client",
2950
+ type: "proxy_remove_response"
2951
+ });
2952
+ } else {
2953
+ clientWs.send(raw);
2954
+ }
2955
+ }
2956
+ function handleProxyRemove(clientWs, registry, logger, ptySnapshotRoutes, sessionHistoryRoutes, remoteFileBridge, requestId, proxyId, chaos) {
2957
+ const result = registry.removeOfflineProxy(proxyId);
2958
+ if (result === "not_found") {
2959
+ sendProxyRemoveResponse(
2960
+ clientWs,
2961
+ {
2962
+ requestId,
2963
+ proxyId,
2964
+ success: false,
2965
+ errorCode: ControlErrorCode.PROXY_NOT_FOUND,
2966
+ error: `\u5F00\u53D1\u673A ${proxyId} \u4E0D\u5B58\u5728`
2967
+ },
2968
+ chaos
2969
+ );
2970
+ return;
2971
+ }
2972
+ if (result === "online") {
2973
+ sendProxyRemoveResponse(
2974
+ clientWs,
2975
+ {
2976
+ requestId,
2977
+ proxyId,
2978
+ success: false,
2979
+ errorCode: ControlErrorCode.PROXY_ONLINE,
2980
+ error: `\u5F00\u53D1\u673A ${proxyId} \u4ECD\u5728\u7EBF\uFF0C\u65E0\u6CD5\u5220\u9664`
2981
+ },
2982
+ chaos
2983
+ );
2984
+ return;
2985
+ }
2986
+ ptySnapshotRoutes.clearProxy(proxyId);
2987
+ sessionHistoryRoutes.clearProxy(proxyId);
2988
+ try {
2989
+ remoteFileBridge?.revokeProxy(proxyId);
2990
+ } catch (err) {
2991
+ logger.error({ err, proxyId }, "Failed to finish remote file cleanup for removed proxy");
2992
+ }
2993
+ sendProxyRemoveResponse(clientWs, { requestId, proxyId, success: true }, chaos);
2994
+ broadcastProxyRemoved(proxyId, registry, chaos);
2995
+ broadcastProxyList2(registry, chaos);
2996
+ logger.info({ proxyId, clientId: clientWs.clientId }, "Offline proxy removed by client");
2997
+ }
2851
2998
  function handleRelayClientKick(clientWs, registry, logger, requestId, targetClientId) {
2852
2999
  if (targetClientId === clientWs.clientId) {
2853
3000
  clientWs.send(
@@ -2920,7 +3067,7 @@ function rejectNotRegistered2(ws, requestId) {
2920
3067
  type: "relay_error",
2921
3068
  requestId,
2922
3069
  code: RelayErrorCode.NOT_REGISTERED,
2923
- message: "Client must register before selecting a proxy"
3070
+ message: "Client must register first"
2924
3071
  })
2925
3072
  );
2926
3073
  }
@@ -3016,6 +3163,25 @@ function handleClientConnection(ws, registry, logger, ptySnapshotRoutes, session
3016
3163
  handleRelayClientKick(clientWs, registry, logger, msg.requestId, msg.clientId);
3017
3164
  return;
3018
3165
  }
3166
+ if (msg.type === "proxy_remove") {
3167
+ if (!clientWs.clientId) {
3168
+ rejectNotRegistered2(clientWs, msg.requestId);
3169
+ closeRejectedClientProtocol(clientWs);
3170
+ return;
3171
+ }
3172
+ handleProxyRemove(
3173
+ clientWs,
3174
+ registry,
3175
+ logger,
3176
+ ptySnapshotRoutes,
3177
+ sessionHistoryRoutes,
3178
+ remoteFileBridge,
3179
+ msg.requestId,
3180
+ msg.proxyId,
3181
+ chaos
3182
+ );
3183
+ return;
3184
+ }
3019
3185
  if (msg.type === "remote_file_url_request") {
3020
3186
  if (!remoteFileBridge) {
3021
3187
  sendRemoteFileUrlFailure(clientWs, msg.requestId, msg.sessionId, "\u6587\u4EF6\u6D41\u670D\u52A1\u4E0D\u53EF\u7528");
@@ -3146,13 +3312,13 @@ function handleClientConnection(ws, registry, logger, ptySnapshotRoutes, session
3146
3312
  return;
3147
3313
  }
3148
3314
  if (msg.type === "proxy_list_request") {
3149
- const proxies = registry.listProxiesWithName().map((p) => ({
3150
- ...p,
3151
- sessions: registry.getSessionsForProxy(p.proxyId)
3315
+ const proxies = registry.listProxiesWithName().map((proxy) => ({
3316
+ ...proxy,
3317
+ sessions: registry.getSessionsForProxy(proxy.proxyId)
3152
3318
  }));
3153
- const response = JSON.stringify({
3319
+ const response = serializeControl({
3154
3320
  type: "proxy_list_response",
3155
- requestId: msg.requestId,
3321
+ ...msg.requestId !== void 0 ? { requestId: msg.requestId } : {},
3156
3322
  proxies
3157
3323
  });
3158
3324
  if (chaos) {
@@ -4147,6 +4313,48 @@ var RemoteFileBridge = class {
4147
4313
  pendingUrlMetadata = /* @__PURE__ */ new Map();
4148
4314
  pendingStreams = /* @__PURE__ */ new Map();
4149
4315
  pendingUploads = /* @__PURE__ */ new Map();
4316
+ revokeProxy(proxyId) {
4317
+ let revokedTokens = 0;
4318
+ let rejectedMetadata = 0;
4319
+ let failedStreams = 0;
4320
+ let failedUploads = 0;
4321
+ for (const [token, metadata] of this.tokens) {
4322
+ if (metadata.proxyId !== proxyId) continue;
4323
+ this.tokens.delete(token);
4324
+ revokedTokens += 1;
4325
+ }
4326
+ for (const [token, metadata] of this.uploadTokens) {
4327
+ if (metadata.proxyId !== proxyId) continue;
4328
+ this.uploadTokens.delete(token);
4329
+ revokedTokens += 1;
4330
+ }
4331
+ for (const [requestId, pending] of this.pendingUrlMetadata) {
4332
+ if (pending.proxyId !== proxyId) continue;
4333
+ this.pendingUrlMetadata.delete(requestId);
4334
+ clearTimeout(pending.timer);
4335
+ pending.resolve({
4336
+ success: false,
4337
+ path: pending.path,
4338
+ error: "\u5F00\u53D1\u673A\u5DF2\u5220\u9664",
4339
+ errorCode: ControlErrorCode.PROXY_NOT_FOUND
4340
+ });
4341
+ rejectedMetadata += 1;
4342
+ }
4343
+ for (const [streamId, pending] of this.pendingStreams) {
4344
+ if (pending.token.proxyId !== proxyId) continue;
4345
+ this.failStream(streamId, 410, "\u5F00\u53D1\u673A\u5DF2\u5220\u9664", ControlErrorCode.PROXY_NOT_FOUND);
4346
+ failedStreams += 1;
4347
+ }
4348
+ for (const [uploadId, pending] of this.pendingUploads) {
4349
+ if (pending.token.proxyId !== proxyId) continue;
4350
+ this.failUpload(uploadId, 410, "\u5F00\u53D1\u673A\u5DF2\u5220\u9664", ControlErrorCode.PROXY_NOT_FOUND);
4351
+ failedUploads += 1;
4352
+ }
4353
+ this.deps.logger.info(
4354
+ { proxyId, revokedTokens, rejectedMetadata, failedStreams, failedUploads },
4355
+ "Remote file access revoked for removed proxy"
4356
+ );
4357
+ }
4150
4358
  createUrl(input) {
4151
4359
  this.cleanupExpiredTokens();
4152
4360
  const proxyWs = this.deps.registry.getProxy(input.proxyId);
@@ -5243,4 +5451,4 @@ export {
5243
5451
  parseRelayChaosFromEnv,
5244
5452
  createRelayServer
5245
5453
  };
5246
- //# sourceMappingURL=chunk-SDL4V2RE.js.map
5454
+ //# sourceMappingURL=chunk-XPCFNRZO.js.map