@dev-anywhere/relay 0.7.0 → 0.8.1

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 (272) 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-DQYOSZdE.js → fvad-RpevwfGI.js} +1 -1
  256. package/assets/web/assets/index-08tfJppO.css +41 -0
  257. package/assets/web/assets/{index-WMCumAhu.js → index-D5QXto0Q.js} +187 -187
  258. package/assets/web/index.html +2 -2
  259. package/assets/web/sw.js +1 -1
  260. package/dist/{chunk-6RWN2VEX.js → chunk-XPCFNRZO.js} +214 -14
  261. package/dist/chunk-XPCFNRZO.js.map +1 -0
  262. package/dist/handlers/client.d.ts.map +1 -1
  263. package/dist/index.js +16 -1
  264. package/dist/index.js.map +1 -1
  265. package/dist/registry.d.ts +2 -0
  266. package/dist/registry.d.ts.map +1 -1
  267. package/dist/remote-file-bridge.d.ts +1 -0
  268. package/dist/remote-file-bridge.d.ts.map +1 -1
  269. package/dist/server.js +1 -1
  270. package/package.json +2 -2
  271. package/assets/web/assets/index-DaV7Gwjf.css +0 -41
  272. package/dist/chunk-6RWN2VEX.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-WMCumAhu.js"></script>
48
- <link rel="stylesheet" crossorigin href="/assets/index-DaV7Gwjf.css">
47
+ <script type="module" crossorigin src="/assets/index-D5QXto0Q.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),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:"c69237d03fdd299e6a438e0514e41e60"},{url:"assets/index-WMCumAhu.js",revision:null},{url:"assets/index-DaV7Gwjf.css",revision:null},{url:"assets/fvad-DYxbW2my.wasm",revision:null},{url:"assets/fvad-DQYOSZdE.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:"2ed5abcf0df2cd67a24c5defcd6116e5"},{url:"assets/index-D5QXto0Q.js",revision:null},{url:"assets/index-08tfJppO.css",revision:null},{url:"assets/fvad-RpevwfGI.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",
@@ -579,7 +595,9 @@ var AgentCliAvailabilitySchema = z9.object({
579
595
  });
580
596
  var AgentCliStatusSchema = z9.object({
581
597
  claude: AgentCliAvailabilitySchema,
582
- codex: AgentCliAvailabilitySchema
598
+ codex: AgentCliAvailabilitySchema,
599
+ // 滚动升级兼容:旧 Proxy 不会上报 Kimi,新 Proxy 的探测结果始终包含它。
600
+ kimi: AgentCliAvailabilitySchema.optional()
583
601
  });
584
602
  var DirEntrySchema = z9.object({ name: z9.string(), isDir: z9.boolean() });
585
603
  var FileTreeGroupSchema = z9.object({
@@ -655,6 +673,16 @@ var relayControlDefinitions = [
655
673
  ...RequestIdShape,
656
674
  proxies: z9.array(ProxyInfoSchema)
657
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
+ }),
658
686
  control("relay_client_list_request", RequestIdShape),
659
687
  control("relay_client_list_response", {
660
688
  ...RequestIdShape,
@@ -856,6 +884,10 @@ var relayControlDefinitions = [
856
884
  control("proxy_offline", {
857
885
  proxyId: IdSchema
858
886
  }),
887
+ // 用户明确删除了离线 Proxy。与列表暂时缺项分开建模,客户端据此永久清理选择态。
888
+ control("proxy_removed", {
889
+ proxyId: IdSchema
890
+ }),
859
891
  // Proxy 主动断开,relay 立即清理资源
860
892
  control("proxy_disconnect", {
861
893
  proxyId: IdSchema
@@ -880,7 +912,12 @@ var relayControlDefinitions = [
880
912
  success: z9.boolean()
881
913
  }, "proxy_to_client"),
882
914
  // 命令列表推送,proxy 将可用命令列表推给 client
883
- 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"),
884
921
  // 文件树推送: 按目录分组, 首组 path 即为 session cwd
885
922
  // 前端直接把每组写入 tree[path], 与 dir_list_response 共享 cache slot
886
923
  control("file_tree_push", {
@@ -1023,7 +1060,8 @@ var relayControlDefinitions = [
1023
1060
  approvals: z9.array(z9.object({
1024
1061
  requestId: IdSchema,
1025
1062
  toolName: z9.string(),
1026
- input: z9.record(z9.string(), z9.unknown())
1063
+ input: z9.record(z9.string(), z9.unknown()),
1064
+ options: z9.array(ApprovalOptionSchema).optional()
1027
1065
  }))
1028
1066
  }, "proxy_to_client"),
1029
1067
  // Voice Pilot speech summaries are produced by proxy-side Claude Code so it can read project context.
@@ -1261,11 +1299,26 @@ var RelayRegistry = class {
1261
1299
  this.clientBindings.delete(clientId);
1262
1300
  }
1263
1301
  }
1302
+ for (const ws of this.connectedClients.keys()) {
1303
+ const clientWs = ws;
1304
+ if (clientWs.boundProxyId === proxyId) {
1305
+ delete clientWs.boundProxyId;
1306
+ }
1307
+ }
1264
1308
  this.proxyStates.delete(proxyId);
1265
1309
  }
1266
1310
  unregisterProxy(proxyId) {
1267
1311
  this.cleanupProxy(proxyId);
1268
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
+ }
1269
1322
  getProxy(proxyId) {
1270
1323
  const state = this.proxyStates.get(proxyId);
1271
1324
  return state?.ws ?? void 0;
@@ -2856,6 +2909,92 @@ function handleRelayClientListRequest(clientWs, registry, requestId) {
2856
2909
  })
2857
2910
  );
2858
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
+ }
2859
2998
  function handleRelayClientKick(clientWs, registry, logger, requestId, targetClientId) {
2860
2999
  if (targetClientId === clientWs.clientId) {
2861
3000
  clientWs.send(
@@ -2928,7 +3067,7 @@ function rejectNotRegistered2(ws, requestId) {
2928
3067
  type: "relay_error",
2929
3068
  requestId,
2930
3069
  code: RelayErrorCode.NOT_REGISTERED,
2931
- message: "Client must register before selecting a proxy"
3070
+ message: "Client must register first"
2932
3071
  })
2933
3072
  );
2934
3073
  }
@@ -3024,6 +3163,25 @@ function handleClientConnection(ws, registry, logger, ptySnapshotRoutes, session
3024
3163
  handleRelayClientKick(clientWs, registry, logger, msg.requestId, msg.clientId);
3025
3164
  return;
3026
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
+ }
3027
3185
  if (msg.type === "remote_file_url_request") {
3028
3186
  if (!remoteFileBridge) {
3029
3187
  sendRemoteFileUrlFailure(clientWs, msg.requestId, msg.sessionId, "\u6587\u4EF6\u6D41\u670D\u52A1\u4E0D\u53EF\u7528");
@@ -3154,13 +3312,13 @@ function handleClientConnection(ws, registry, logger, ptySnapshotRoutes, session
3154
3312
  return;
3155
3313
  }
3156
3314
  if (msg.type === "proxy_list_request") {
3157
- const proxies = registry.listProxiesWithName().map((p) => ({
3158
- ...p,
3159
- sessions: registry.getSessionsForProxy(p.proxyId)
3315
+ const proxies = registry.listProxiesWithName().map((proxy) => ({
3316
+ ...proxy,
3317
+ sessions: registry.getSessionsForProxy(proxy.proxyId)
3160
3318
  }));
3161
- const response = JSON.stringify({
3319
+ const response = serializeControl({
3162
3320
  type: "proxy_list_response",
3163
- requestId: msg.requestId,
3321
+ ...msg.requestId !== void 0 ? { requestId: msg.requestId } : {},
3164
3322
  proxies
3165
3323
  });
3166
3324
  if (chaos) {
@@ -4155,6 +4313,48 @@ var RemoteFileBridge = class {
4155
4313
  pendingUrlMetadata = /* @__PURE__ */ new Map();
4156
4314
  pendingStreams = /* @__PURE__ */ new Map();
4157
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
+ }
4158
4358
  createUrl(input) {
4159
4359
  this.cleanupExpiredTokens();
4160
4360
  const proxyWs = this.deps.registry.getProxy(input.proxyId);
@@ -5251,4 +5451,4 @@ export {
5251
5451
  parseRelayChaosFromEnv,
5252
5452
  createRelayServer
5253
5453
  };
5254
- //# sourceMappingURL=chunk-6RWN2VEX.js.map
5454
+ //# sourceMappingURL=chunk-XPCFNRZO.js.map