@auto-ai/agent 2.1.214 → 2.1.216

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 (514) hide show
  1. package/.env.example +7 -0
  2. package/dist/safe-a/404/index.html +1 -1
  3. package/dist/safe-a/404.html +1 -1
  4. package/dist/safe-a/_next/static/chunks/009ad4aad9cfa502.js +1 -0
  5. package/dist/safe-a/_next/static/chunks/{0e8139882ad093d2.js → 00b0744649a5e608.js} +1 -1
  6. package/dist/safe-a/_next/static/chunks/00efede689cf035f.css +7 -0
  7. package/dist/safe-a/_next/static/chunks/00f91b7d88f62204.js +1 -0
  8. package/dist/safe-a/_next/static/chunks/{3bcd531d40d6c019.js → 02339beb679bec8d.js} +1 -1
  9. package/dist/safe-a/_next/static/chunks/{f0cb9b2226c53ef9.js → 025f9752d60b79ce.js} +1 -1
  10. package/dist/safe-a/_next/static/chunks/{1a4b553856a8ffdf.js → 03039556684e9812.js} +1 -1
  11. package/dist/safe-a/_next/static/chunks/{27ff2e69b2fd19e5.js → 03af20498d43b518.js} +1 -1
  12. package/dist/safe-a/_next/static/chunks/03d9139a7df67167.js +1 -0
  13. package/dist/safe-a/_next/static/chunks/{ff12eca45020947a.js → 04ed04c00511a337.js} +1 -1
  14. package/dist/safe-a/_next/static/chunks/{9037530b0f1d5783.js → 0518cc63903bebac.js} +1 -1
  15. package/dist/safe-a/_next/static/chunks/{ea2a84258a02d5c5.js → 05ac495e860ba7c2.js} +1 -1
  16. package/dist/safe-a/_next/static/chunks/0699439b4e026cf9.js +5 -0
  17. package/dist/safe-a/_next/static/chunks/{e96518d9cb5cbe1e.js → 06a64fef342a5832.js} +1 -1
  18. package/dist/safe-a/_next/static/chunks/{32b4d63e10d31351.js → 06e2cd3fae94aae8.js} +1 -1
  19. package/dist/safe-a/_next/static/chunks/{af7b0bd1b40ad066.js → 0708a65cc3ecf56b.js} +1 -1
  20. package/dist/safe-a/_next/static/chunks/{966fb5830ce1029c.js → 093669121f3b7aa1.js} +1 -1
  21. package/dist/safe-a/_next/static/chunks/{55087cc98e6237f1.js → 0c19efa935cdd816.js} +1 -1
  22. package/dist/safe-a/_next/static/chunks/{e7bcbeb465fa49cf.js → 0d7d0d2beb29f175.js} +1 -1
  23. package/dist/safe-a/_next/static/chunks/{d599ef4d0f84a93d.js → 0e68cace7cf0464c.js} +1 -1
  24. package/dist/safe-a/_next/static/chunks/{73cbf0064096e28c.js → 0f93a62e5e2db48b.js} +1 -1
  25. package/dist/safe-a/_next/static/chunks/0fb74192c4e23fbe.js +1 -0
  26. package/dist/safe-a/_next/static/chunks/101f70bebf1522b2.js +1 -0
  27. package/dist/safe-a/_next/static/chunks/1116b1064a071974.js +1 -0
  28. package/dist/safe-a/_next/static/chunks/11f35a289d90c8f7.js +1 -0
  29. package/dist/safe-a/_next/static/chunks/{16ea1d3cf6db8a53.js → 12932eb7d288b09b.js} +1 -1
  30. package/dist/safe-a/_next/static/chunks/{b360c9fc22dbf831.js → 129875fd1b096964.js} +1 -1
  31. package/dist/safe-a/_next/static/chunks/{facb82117d49a6e1.js → 1386362cdfd92116.js} +1 -1
  32. package/dist/safe-a/_next/static/chunks/{2df3e464b6247e75.js → 1409701c73ffe517.js} +1 -1
  33. package/dist/safe-a/_next/static/chunks/16ee3f2be4586638.js +1 -0
  34. package/dist/safe-a/_next/static/chunks/{d5e3d29f769997cc.js → 18570009118a0e76.js} +1 -1
  35. package/dist/safe-a/_next/static/chunks/{fb0f4d868b87961b.js → 18e062f9f23f27c0.js} +1 -1
  36. package/dist/safe-a/_next/static/chunks/19023abd5e1bf1d1.js +1 -0
  37. package/dist/safe-a/_next/static/chunks/{413a7be096275d7f.js → 19a47cfc8ca4c0a7.js} +1 -1
  38. package/dist/safe-a/_next/static/chunks/1a900b3c5a00d59b.js +1 -0
  39. package/dist/safe-a/_next/static/chunks/{d729414ff836cd53.js → 1a91a01fbaf01e7e.js} +1 -1
  40. package/dist/safe-a/_next/static/chunks/{6ae709c575c74979.js → 1aaf9fb00fb53ef9.js} +1 -1
  41. package/dist/safe-a/_next/static/chunks/1b739dfdbcce05bd.js +1 -0
  42. package/dist/safe-a/_next/static/chunks/1d0273aae0bc102c.js +1 -0
  43. package/dist/safe-a/_next/static/chunks/{6522643341a0921c.js → 1d737ed6e08d2466.js} +1 -1
  44. package/dist/safe-a/_next/static/chunks/1df41f8d439107ef.js +1 -0
  45. package/dist/safe-a/_next/static/chunks/{5a3e355216280144.js → 1f90e84b5a4dad81.js} +1 -1
  46. package/dist/safe-a/_next/static/chunks/1faaa282be969b14.js +1 -0
  47. package/dist/safe-a/_next/static/chunks/{a6a98f9278704b6a.js → 217c50478c5ea4d7.js} +1 -1
  48. package/dist/safe-a/_next/static/chunks/{e3fe320ec1b8f889.js → 232cc01daaf29e5d.js} +1 -1
  49. package/dist/safe-a/_next/static/chunks/{a5df6158856685f1.js → 2331e2a388a9bd50.js} +1 -1
  50. package/dist/safe-a/_next/static/chunks/{170f7361bd4d33e2.js → 23f50ba74d421ab3.js} +1 -1
  51. package/dist/safe-a/_next/static/chunks/{cd0e7e3cc303b4e4.js → 261bf96e2331ea0a.js} +1 -1
  52. package/dist/safe-a/_next/static/chunks/{f36595b9995a49a9.js → 27b3d30516d46fc8.js} +1 -1
  53. package/dist/safe-a/_next/static/chunks/27d9a47efb23fd17.js +1 -0
  54. package/dist/safe-a/_next/static/chunks/{fa39b9f8bced4bcd.js → 2854919e0953bd0d.js} +1 -1
  55. package/dist/safe-a/_next/static/chunks/29105a13d179d5b2.js +1 -0
  56. package/dist/safe-a/_next/static/chunks/29403b19d94e37bb.js +1 -0
  57. package/dist/safe-a/_next/static/chunks/2954e8f94d83412a.js +1 -0
  58. package/dist/safe-a/_next/static/chunks/{3934bd57f459566e.js → 29a317486c4ab7d7.js} +1 -1
  59. package/dist/safe-a/_next/static/chunks/{6cc2f7f962cdd082.js → 29cf9e89be8a7f75.js} +1 -1
  60. package/dist/safe-a/_next/static/chunks/29f39316c32518a2.js +1 -0
  61. package/dist/safe-a/_next/static/chunks/2a07e0d1ef712b41.js +1 -0
  62. package/dist/safe-a/_next/static/chunks/2b38c2b26760e4cb.js +1 -0
  63. package/dist/safe-a/_next/static/chunks/2bb180b50bafe979.js +1 -0
  64. package/dist/safe-a/_next/static/chunks/{1e43922998a0ed2f.js → 2bd512c6acf9ee9b.js} +1 -1
  65. package/dist/safe-a/_next/static/chunks/{2c6d585a97629311.js → 2be2d49054d4606c.js} +1 -1
  66. package/dist/safe-a/_next/static/chunks/{6c3b2d0be1c633b6.js → 2c0b2fd9fb2fea66.js} +1 -1
  67. package/dist/safe-a/_next/static/chunks/2c300e2a1fb17288.js +1 -0
  68. package/dist/safe-a/_next/static/chunks/{35f1637c2feb232d.js → 2ccdfcf9ecfa2ea8.js} +1 -1
  69. package/dist/safe-a/_next/static/chunks/2ce249001ad95013.js +1 -0
  70. package/dist/safe-a/_next/static/chunks/{cd5eec7d305aa041.js → 2f104b4be1990722.js} +1 -1
  71. package/dist/safe-a/_next/static/chunks/{7f6e82ac63db5eff.js → 2f35f32799fb08ac.js} +1 -1
  72. package/dist/safe-a/_next/static/chunks/{eb9ae8e95cac1197.js → 30c0274cb379ab0d.js} +1 -1
  73. package/dist/safe-a/_next/static/chunks/{3b2bb9f17546ee3e.js → 30f37e8e02339538.js} +1 -1
  74. package/dist/safe-a/_next/static/chunks/{d82740475fc07e98.js → 333630802bd6f1a6.js} +1 -1
  75. package/dist/safe-a/_next/static/chunks/33e878df066811db.js +1 -0
  76. package/dist/safe-a/_next/static/chunks/{94029062f236cadc.js → 3422b2c2f9bdf0e0.js} +1 -1
  77. package/dist/safe-a/_next/static/chunks/{f235a8df2f905e6a.js → 36897fabf62bf445.js} +1 -1
  78. package/dist/safe-a/_next/static/chunks/37615c61dd14fc8d.js +1 -0
  79. package/dist/safe-a/_next/static/chunks/{b66afb4b0be97af8.js → 37f3ea0b3cf40bca.js} +1 -1
  80. package/dist/safe-a/_next/static/chunks/38d88de54642e44e.js +1 -0
  81. package/dist/safe-a/_next/static/chunks/{9f0ee4783140adf1.js → 38dcdbfb8c6966a9.js} +1 -1
  82. package/dist/safe-a/_next/static/chunks/38decd5cd3fe2525.js +1 -0
  83. package/dist/safe-a/_next/static/chunks/39fc6ad79e44f4df.js +1 -0
  84. package/dist/safe-a/_next/static/chunks/{f1f911d553a62027.js → 3b0acee8a8035ee7.js} +1 -1
  85. package/dist/safe-a/_next/static/chunks/{fb2f1266493dd820.js → 3d9ee9c4bc8e29b2.js} +1 -1
  86. package/dist/safe-a/_next/static/chunks/{3ec05a61e93547d3.js → 3da255bcf22e013d.js} +1 -1
  87. package/dist/safe-a/_next/static/chunks/{6d4209e94b1aafe6.js → 3e45de4a81d1f7a6.js} +1 -1
  88. package/dist/safe-a/_next/static/chunks/3ecc6705303560ea.js +1 -0
  89. package/dist/safe-a/_next/static/chunks/{1078bc1642db53ad.js → 3f18c3fa64301e74.js} +1 -1
  90. package/dist/safe-a/_next/static/chunks/3fe95be4b92470e2.js +1 -0
  91. package/dist/safe-a/_next/static/chunks/{ef51763a796dde8b.js → 404f44571be80b78.js} +1 -1
  92. package/dist/safe-a/_next/static/chunks/{b65565677c3e8c0a.js → 405cd8dd7faa6eaf.js} +1 -1
  93. package/dist/safe-a/_next/static/chunks/4064e59727cba9b0.js +1 -0
  94. package/dist/safe-a/_next/static/chunks/{71668b2d16d048d8.js → 42d0ae4192d72f8e.js} +1 -1
  95. package/dist/safe-a/_next/static/chunks/{bbcf9daa108b22fb.js → 43392297dd43555d.js} +1 -1
  96. package/dist/safe-a/_next/static/chunks/{459d401d9f9e5b9f.js → 435e18828af1d066.js} +1 -1
  97. package/dist/safe-a/_next/static/chunks/44e9e0394b7b6f31.js +1 -0
  98. package/dist/safe-a/_next/static/chunks/{9cb28a1dacb7ea6d.js → 46568a8bad984d09.js} +1 -1
  99. package/dist/safe-a/_next/static/chunks/{caf4049dc563940e.js → 47098fcba8e98974.js} +1 -1
  100. package/dist/safe-a/_next/static/chunks/{3e9c98df7d56e9b2.js → 472047ea96adfca5.js} +1 -1
  101. package/dist/safe-a/_next/static/chunks/{e04bace22e04d63c.js → 473249ae7830085a.js} +1 -1
  102. package/dist/safe-a/_next/static/chunks/{cccecf726769787f.js → 47d485f30e419da8.js} +1 -1
  103. package/dist/safe-a/_next/static/chunks/4ae2c56fab8c060d.js +1 -0
  104. package/dist/safe-a/_next/static/chunks/{f659a364f48244ea.js → 4c19e1ee54dac526.js} +1 -1
  105. package/dist/safe-a/_next/static/chunks/{c2546d2b493dd907.js → 4c87634b39751c56.js} +1 -1
  106. package/dist/safe-a/_next/static/chunks/4ca36e3fb45c2e71.js +1 -0
  107. package/dist/safe-a/_next/static/chunks/4cd41b402679f77d.js +1 -0
  108. package/dist/safe-a/_next/static/chunks/{fa5b61b8e7219fe6.js → 4df5dd4e3c591164.js} +1 -1
  109. package/dist/safe-a/_next/static/chunks/{32b9bdd82a961878.js → 4f55f5dfceddc1fe.js} +1 -1
  110. package/dist/safe-a/_next/static/chunks/{d8af8dadd0889c71.js → 502779251884e330.js} +1 -1
  111. package/dist/safe-a/_next/static/chunks/{62d925bcc8518b6f.js → 503bbec2e3179a3c.js} +1 -1
  112. package/dist/safe-a/_next/static/chunks/{736441266ceb14e2.js → 5076e29ddf662e81.js} +1 -1
  113. package/dist/safe-a/_next/static/chunks/{d9b92ed2d544fca5.js → 50c602f1b79d61a7.js} +1 -1
  114. package/dist/safe-a/_next/static/chunks/{e4973ad5c183f17a.js → 50cbc92b0512838a.js} +1 -1
  115. package/dist/safe-a/_next/static/chunks/50f270f87470ca73.js +1 -0
  116. package/dist/safe-a/_next/static/chunks/5385bf74559eeabd.js +1 -0
  117. package/dist/safe-a/_next/static/chunks/54169c1554845574.js +1 -0
  118. package/dist/safe-a/_next/static/chunks/{644aa76620718c98.js → 547eb82208058c71.js} +1 -1
  119. package/dist/safe-a/_next/static/chunks/{13f94fc3dda88c90.js → 54a2df4508a1c311.js} +1 -1
  120. package/dist/safe-a/_next/static/chunks/{95c4d26e469d1d8f.js → 55e32e78e4db3889.js} +1 -1
  121. package/dist/safe-a/_next/static/chunks/{d09636e7bcf60ad1.js → 564507763428bfb0.js} +1 -1
  122. package/dist/safe-a/_next/static/chunks/{560ca23f77c0e819.js → 569dda34679bca70.js} +1 -1
  123. package/dist/safe-a/_next/static/chunks/{cba2741f84ef36ed.js → 57bc9169370081d7.js} +1 -1
  124. package/dist/safe-a/_next/static/chunks/{19584f955475ce91.js → 57e13ec897ff78d6.js} +1 -1
  125. package/dist/safe-a/_next/static/chunks/{27c407347ce26b78.js → 591fe54d06e0a33e.js} +1 -1
  126. package/dist/safe-a/_next/static/chunks/592e7a6b713dc645.js +1 -0
  127. package/dist/safe-a/_next/static/chunks/599abea9ac64aaf1.js +1 -0
  128. package/dist/safe-a/_next/static/chunks/{c5b5aba98d38ef23.js → 5a43f7cd89a42167.js} +1 -1
  129. package/dist/safe-a/_next/static/chunks/{ee79511740d19885.js → 5ad5a5ee1cc648ae.js} +1 -1
  130. package/dist/safe-a/_next/static/chunks/5ae21c9105c6abb4.js +1 -0
  131. package/dist/safe-a/_next/static/chunks/5b4c1faefda9575b.js +1 -0
  132. package/dist/safe-a/_next/static/chunks/{71e3a90489469c28.js → 5c076874caf0532e.js} +1 -1
  133. package/dist/safe-a/_next/static/chunks/{55f8de91b4803778.js → 5c2a7e118fa66960.js} +1 -1
  134. package/dist/safe-a/_next/static/chunks/{75a396e1752cd59d.js → 5ca0c9bb26daf732.js} +1 -1
  135. package/dist/safe-a/_next/static/chunks/{c933951b3113492f.js → 5e4225518ccc365e.js} +1 -1
  136. package/dist/safe-a/_next/static/chunks/{70459a2a4c45653e.js → 6349c7cf3b394b81.js} +1 -1
  137. package/dist/safe-a/_next/static/chunks/{5a4c198fd41e8ec4.js → 63f33483697b26ca.js} +1 -1
  138. package/dist/safe-a/_next/static/chunks/{6b7c3c962a14dc29.js → 645741ee91707763.js} +1 -1
  139. package/dist/safe-a/_next/static/chunks/{5a0b630678282d4f.js → 648649ebbc7565b9.js} +1 -1
  140. package/dist/safe-a/_next/static/chunks/{a37aa474433d29e3.js → 65159d9aa3ecc0c9.js} +1 -1
  141. package/dist/safe-a/_next/static/chunks/{588e6975a7bd6671.js → 65963496d7fa49bc.js} +1 -1
  142. package/dist/safe-a/_next/static/chunks/{3ae4e2529aa621fb.js → 65ee07c4b6209141.js} +1 -1
  143. package/dist/safe-a/_next/static/chunks/{2fab2306850ac97b.js → 66247e9b3cf471f5.js} +1 -1
  144. package/dist/safe-a/_next/static/chunks/{8deb0392842e5a01.js → 6818b9385873d081.js} +1 -1
  145. package/dist/safe-a/_next/static/chunks/68255bcd6345edfd.js +1 -0
  146. package/dist/safe-a/_next/static/chunks/68f27d4f860d8f88.js +1 -0
  147. package/dist/safe-a/_next/static/chunks/6960a33147147a27.js +1 -0
  148. package/dist/safe-a/_next/static/chunks/6a199e5f9da2ec4e.js +1 -0
  149. package/dist/safe-a/_next/static/chunks/{648b653b36802fdc.js → 6d0bf0ac1fdb7eab.js} +1 -1
  150. package/dist/safe-a/_next/static/chunks/{57bb853857f3de83.js → 6e145bea7acc82b4.js} +1 -1
  151. package/dist/safe-a/_next/static/chunks/{c6cc32860b96278f.js → 6e4e92cbcf961542.js} +1 -1
  152. package/dist/safe-a/_next/static/chunks/{aa0a4c596151b22b.js → 6e663a2e3562125c.js} +1 -1
  153. package/dist/safe-a/_next/static/chunks/{a7277c96f3669bea.js → 6ecccb36549d3028.js} +1 -1
  154. package/dist/safe-a/_next/static/chunks/6f6140cbad7cdeea.js +1 -0
  155. package/dist/safe-a/_next/static/chunks/6faa53698dc67904.js +1 -0
  156. package/dist/safe-a/_next/static/chunks/{bf2262100cea8c64.js → 6fc97877fbcf3403.js} +1 -1
  157. package/dist/safe-a/_next/static/chunks/{0fa097a572705cfa.js → 70b95d96e33a5d63.js} +1 -1
  158. package/dist/safe-a/_next/static/chunks/727dc45d24782155.js +1 -0
  159. package/dist/safe-a/_next/static/chunks/{7fd45fb9cf0995f3.js → 738c808ddc82ea44.js} +1 -1
  160. package/dist/safe-a/_next/static/chunks/{715c085d7c10eeda.js → 740732a162598c49.js} +1 -1
  161. package/dist/safe-a/_next/static/chunks/74d8d2b653f61b70.js +1 -0
  162. package/dist/safe-a/_next/static/chunks/7562ab6463e9fc3f.js +1 -0
  163. package/dist/safe-a/_next/static/chunks/{692e7ee14236fefb.js → 774e554c11c8759a.js} +1 -1
  164. package/dist/safe-a/_next/static/chunks/784ee151431c6634.js +1 -0
  165. package/dist/safe-a/_next/static/chunks/7afa34c1dc058648.js +1 -0
  166. package/dist/safe-a/_next/static/chunks/7b34873e2b22211d.js +1 -0
  167. package/dist/safe-a/_next/static/chunks/{354aaa2e36b75b81.js → 7b6898a7f9df6495.js} +1 -1
  168. package/dist/safe-a/_next/static/chunks/7bd04dff1e0d3a01.js +1 -0
  169. package/dist/safe-a/_next/static/chunks/{5798600d2ea8a3e8.js → 7c2d68248d759f50.js} +1 -1
  170. package/dist/safe-a/_next/static/chunks/{f813c3d77459119f.js → 7c4b1ab5c0f1b167.js} +1 -1
  171. package/dist/safe-a/_next/static/chunks/7ccd9e31b61da21f.js +1 -0
  172. package/dist/safe-a/_next/static/chunks/{0b69dba7f1e63f30.js → 7cd0d9159e722599.js} +1 -1
  173. package/dist/safe-a/_next/static/chunks/{d3990c1e87ef3e23.js → 7d7ef3758ed7347b.js} +1 -1
  174. package/dist/safe-a/_next/static/chunks/7defa1cc0271dd01.css +1 -0
  175. package/dist/safe-a/_next/static/chunks/{d69b21102305d19e.js → 7e5b28d162f1ea9d.js} +1 -1
  176. package/dist/safe-a/_next/static/chunks/{37cfaa4963ac51f3.js → 7ed753f2db91bc38.js} +1 -1
  177. package/dist/safe-a/_next/static/chunks/7f167fb0dbc03180.js +1 -0
  178. package/dist/safe-a/_next/static/chunks/{d33e49aabd798892.js → 7f611b9b215dfcef.js} +1 -1
  179. package/dist/safe-a/_next/static/chunks/80bd106b26a076af.js +1 -0
  180. package/dist/safe-a/_next/static/chunks/8249026c4faf64b8.js +1 -0
  181. package/dist/safe-a/_next/static/chunks/826c64c8601264b1.js +1 -0
  182. package/dist/safe-a/_next/static/chunks/{65fb49c8a7f59842.js → 829196dbf7eddb51.js} +1 -1
  183. package/dist/safe-a/_next/static/chunks/{b429be4e16fa1e00.js → 82aea21a16d00076.js} +1 -1
  184. package/dist/safe-a/_next/static/chunks/{c3669d468d3f2b3a.js → 82cdf7e6dbe7070d.js} +1 -1
  185. package/dist/safe-a/_next/static/chunks/8465e859bae24fbd.js +1 -0
  186. package/dist/safe-a/_next/static/chunks/84e8e1e50a6b3ab7.js +1 -0
  187. package/dist/safe-a/_next/static/chunks/{f1e5e295d4db5c0f.js → 868f60fa1a2ff26b.js} +1 -1
  188. package/dist/safe-a/_next/static/chunks/{88a999988f915988.js → 86c0a63bf95598a3.js} +1 -1
  189. package/dist/safe-a/_next/static/chunks/{1bb28f71c19fa824.js → 878dd96f8fcd6bd4.js} +1 -1
  190. package/dist/safe-a/_next/static/chunks/87b0002602934525.js +1 -0
  191. package/dist/safe-a/_next/static/chunks/882686dd3b63f9d1.js +1 -0
  192. package/dist/safe-a/_next/static/chunks/88e4cdcdeff36154.js +1 -0
  193. package/dist/safe-a/_next/static/chunks/{67c9db5577080125.js → 8aafb8ec5208a445.js} +1 -1
  194. package/dist/safe-a/_next/static/chunks/{1d3e7886be9f671c.js → 8b1990cf2eb41663.js} +1 -1
  195. package/dist/safe-a/_next/static/chunks/8c8b1e40b00409f5.js +1 -0
  196. package/dist/safe-a/_next/static/chunks/{61ce261738313b8a.js → 8c97e3b556b32001.js} +1 -1
  197. package/dist/safe-a/_next/static/chunks/{2326118ef1328bc5.js → 8cee526b3846c40b.js} +1 -1
  198. package/dist/safe-a/_next/static/chunks/{a6737fc58619eae5.js → 8d76667bd2633e46.js} +1 -1
  199. package/dist/safe-a/_next/static/chunks/{8bdc142fad5847ed.js → 8e33e395e6224908.js} +1 -1
  200. package/dist/safe-a/_next/static/chunks/{fdfce6fa0b958336.js → 8ead3da37182ce4c.js} +1 -1
  201. package/dist/safe-a/_next/static/chunks/{e61019aedfdf554e.js → 8ebfebffa66b3ca7.js} +1 -1
  202. package/dist/safe-a/_next/static/chunks/{82614b5de9f78114.js → 8ed5273cea590ac8.js} +1 -1
  203. package/dist/safe-a/_next/static/chunks/92c1de3b7b8ff353.js +1 -0
  204. package/dist/safe-a/_next/static/chunks/9311fdc96f82fdcc.js +1 -0
  205. package/dist/safe-a/_next/static/chunks/{1b55c29b8cad4a50.js → 93588b2335ca95de.js} +1 -1
  206. package/dist/safe-a/_next/static/chunks/{19c1491e85e22b3b.js → 948dc342d4746ffc.js} +1 -1
  207. package/dist/safe-a/_next/static/chunks/{37bbbf907196a5bf.js → 94d40dcd515ca4ad.js} +1 -1
  208. package/dist/safe-a/_next/static/chunks/{72ef1696f44fcf61.js → 957b35b92a00be9d.js} +1 -1
  209. package/dist/safe-a/_next/static/chunks/{5fc8a5235ddfa787.js → 9583c5cc3861200c.js} +1 -1
  210. package/dist/safe-a/_next/static/chunks/{1818d7a661948f6b.js → 966730983f55a7c6.js} +1 -1
  211. package/dist/safe-a/_next/static/chunks/{13b54d70a1ee1de7.js → 967dfe61a543e533.js} +1 -1
  212. package/dist/safe-a/_next/static/chunks/{2fcc6298b6dd7a82.js → 9721e6d173bcda17.js} +1 -1
  213. package/dist/safe-a/_next/static/chunks/{53be52c43a14557c.js → 97d506a00590396c.js} +1 -1
  214. package/dist/safe-a/_next/static/chunks/{092c97532613af2a.js → 9924bd3807982f9c.js} +1 -1
  215. package/dist/safe-a/_next/static/chunks/996147dc11d8e745.js +1 -0
  216. package/dist/safe-a/_next/static/chunks/{c725524ea13a50ab.js → 997894582876b3bb.js} +1 -1
  217. package/dist/safe-a/_next/static/chunks/{8f038ff914c4b0df.js → 99ce8e2a747001a9.js} +1 -1
  218. package/dist/safe-a/_next/static/chunks/9a5e8d11c09774ed.js +1 -0
  219. package/dist/safe-a/_next/static/chunks/{d47cd27ac08f5429.js → 9a63abc493c1c840.js} +1 -1
  220. package/dist/safe-a/_next/static/chunks/{7d3bf918bccde738.js → 9ae8f05f80dedfa4.js} +1 -1
  221. package/dist/safe-a/_next/static/chunks/{a9fed5c43d754a96.js → 9b0ac8da8e1c0d7e.js} +1 -1
  222. package/dist/safe-a/_next/static/chunks/{e0c76ff7114dc8dc.js → 9b94620a86d2a1c2.js} +1 -1
  223. package/dist/safe-a/_next/static/chunks/{d842d30dcb0f50a9.js → 9bedfcbe8f9ff43f.js} +1 -1
  224. package/dist/safe-a/_next/static/chunks/{b78822282754a47c.js → 9d65a2db77bf6c63.js} +1 -1
  225. package/dist/safe-a/_next/static/chunks/{dc2186b66132ca97.js → 9d8fff267f5576eb.js} +1 -1
  226. package/dist/safe-a/_next/static/chunks/{481a2858f7df907d.js → 9db0d8129d6b7b5e.js} +1 -1
  227. package/dist/safe-a/_next/static/chunks/{c1615032cbbf5b56.js → 9de7a5feb6be8bc3.js} +1 -1
  228. package/dist/safe-a/_next/static/chunks/{b24e3802454a5567.js → 9e9339584dbc8172.js} +1 -1
  229. package/dist/safe-a/_next/static/chunks/{f50fd84e477dbaeb.js → 9f7b593a28b4dbe4.js} +1 -1
  230. package/dist/safe-a/_next/static/chunks/9f8b67e210121299.js +1 -0
  231. package/dist/safe-a/_next/static/chunks/{108a0b77418f1d31.js → a0256e00bbdc334c.js} +1 -1
  232. package/dist/safe-a/_next/static/chunks/{84185f4bb07ccbd7.js → a12eeb7c77a7506f.js} +1 -1
  233. package/dist/safe-a/_next/static/chunks/a333240ca95e9cf9.js +1 -0
  234. package/dist/safe-a/_next/static/chunks/{5ea79c109cbe8a86.js → a367a4ab4b91ce6b.js} +1 -1
  235. package/dist/safe-a/_next/static/chunks/{2046937bffedf074.js → a39dba23f5098cde.js} +1 -1
  236. package/dist/safe-a/_next/static/chunks/{3a947667fddbdd53.js → a3af4dcdb725b47f.js} +1 -1
  237. package/dist/safe-a/_next/static/chunks/{fd3d43eb8557ee49.js → a4ab363af889263f.js} +1 -1
  238. package/dist/safe-a/_next/static/chunks/a4b35c64097aeb05.js +1 -0
  239. package/dist/safe-a/_next/static/chunks/a6fda6a41633eb93.js +1 -0
  240. package/dist/safe-a/_next/static/chunks/{19ca17e5015c42a3.js → a8696c4a576878ae.js} +1 -1
  241. package/dist/safe-a/_next/static/chunks/a86fedb173944e90.js +1 -0
  242. package/dist/safe-a/_next/static/chunks/a9a12415c8875ad5.js +1 -0
  243. package/dist/safe-a/_next/static/chunks/{04c9439163b67552.js → aa34ec2d74f7775c.js} +1 -1
  244. package/dist/safe-a/_next/static/chunks/{9724567275720686.js → aa8c7d3d99a14fdb.js} +1 -1
  245. package/dist/safe-a/_next/static/chunks/{01766c1e2fdff227.js → ab522ef4566e28db.js} +1 -1
  246. package/dist/safe-a/_next/static/chunks/ab91b57996557cd5.js +1 -0
  247. package/dist/safe-a/_next/static/chunks/{ebb0ee69f6a7883e.js → abf043c7dd51a07b.js} +1 -1
  248. package/dist/safe-a/_next/static/chunks/ac0062f74360e8a1.js +1 -0
  249. package/dist/safe-a/_next/static/chunks/{4a340ea4ac145216.js → ad22e1613386ba8d.js} +1 -1
  250. package/dist/safe-a/_next/static/chunks/{68bd2bd64624e20d.js → ada2807c297fe674.js} +1 -1
  251. package/dist/safe-a/_next/static/chunks/{751de74a23cc9036.js → ae1404fdd6ec935a.js} +1 -1
  252. package/dist/safe-a/_next/static/chunks/{3520f1af0a1b7f66.js → ae7e9c73a1d653fd.js} +1 -1
  253. package/dist/safe-a/_next/static/chunks/{0ce6504fc10ce408.js → af07509fa7bac8c4.js} +1 -1
  254. package/dist/safe-a/_next/static/chunks/{242529c986baeb00.js → afab34a5bb437673.js} +1 -1
  255. package/dist/safe-a/_next/static/chunks/{98e243fb5992a71c.js → aff6654f4fbc26b0.js} +1 -1
  256. package/dist/safe-a/_next/static/chunks/{87e12ecbe9521f9b.js → b0638abf4a6eb85f.js} +1 -1
  257. package/dist/safe-a/_next/static/chunks/b0f0f19c125de544.js +1 -0
  258. package/dist/safe-a/_next/static/chunks/b31fde4b83862330.js +1 -0
  259. package/dist/safe-a/_next/static/chunks/b4b8918a2dbddca7.js +1 -0
  260. package/dist/safe-a/_next/static/chunks/{6f4460bd0b8a57af.js → b4d570502774dffb.js} +1 -1
  261. package/dist/safe-a/_next/static/chunks/{9078ad91aa20dca0.js → b4db35dceb9577e1.js} +1 -1
  262. package/dist/safe-a/_next/static/chunks/b594aa86704b6429.js +1 -0
  263. package/dist/safe-a/_next/static/chunks/{96026b5eb5d2566b.js → b717d3610f87602f.js} +1 -1
  264. package/dist/safe-a/_next/static/chunks/b725c08f4efec3ab.js +1 -0
  265. package/dist/safe-a/_next/static/chunks/b882523826ac1c83.js +1 -0
  266. package/dist/safe-a/_next/static/chunks/{d715e874b8ee8540.js → b92da682bccc569b.js} +1 -1
  267. package/dist/safe-a/_next/static/chunks/{ea36a5ae7c6ce34f.js → b9b23fa418eacd67.js} +1 -1
  268. package/dist/safe-a/_next/static/chunks/{3fd03b9ed21b30fc.js → c013a3a3b1574b7d.js} +1 -1
  269. package/dist/safe-a/_next/static/chunks/{179a5dac78ab2cb9.js → c0960892f67b4256.js} +1 -1
  270. package/dist/safe-a/_next/static/chunks/c2a354d059dc2745.js +1 -0
  271. package/dist/safe-a/_next/static/chunks/{9e96c84b86d1bbf3.js → c2e5be103cef6113.js} +1 -1
  272. package/dist/safe-a/_next/static/chunks/c3bcc6eb84ed7d30.js +1 -0
  273. package/dist/safe-a/_next/static/chunks/{106955e3cc6a6843.js → c43009f5a3f83289.js} +1 -1
  274. package/dist/safe-a/_next/static/chunks/{6f3afa83656eab67.js → c43f94053172eb84.js} +1 -1
  275. package/dist/safe-a/_next/static/chunks/{2ec6d7ddb4c04987.js → c537d051140acc61.js} +1 -1
  276. package/dist/safe-a/_next/static/chunks/{c15069059c9d1f53.js → c5932397b84e3c27.js} +1 -1
  277. package/dist/safe-a/_next/static/chunks/{f0d9f0621f8ec46d.js → c5b0f8f27c2db9f1.js} +1 -1
  278. package/dist/safe-a/_next/static/chunks/{7137c7537c459c31.js → c5fd875d1d9fd6c4.js} +1 -1
  279. package/dist/safe-a/_next/static/chunks/c6362bd055df6043.js +1 -0
  280. package/dist/safe-a/_next/static/chunks/c6bad34be1aacd05.js +5 -0
  281. package/dist/safe-a/_next/static/chunks/c7ce2c0e40c62b6b.js +1 -0
  282. package/dist/safe-a/_next/static/chunks/{4df298f5b420f474.js → c84ea2dc8d3281e6.js} +1 -1
  283. package/dist/safe-a/_next/static/chunks/{e5275dcacbabc3e3.js → c8b301b059ee1946.js} +1 -1
  284. package/dist/safe-a/_next/static/chunks/c9527036b1a95d19.js +1 -0
  285. package/dist/safe-a/_next/static/chunks/ca31fc9ca02421c7.js +1 -0
  286. package/dist/safe-a/_next/static/chunks/{f9cb4b70f67c86d8.js → cac08e0e891f58d2.js} +1 -1
  287. package/dist/safe-a/_next/static/chunks/{bd984c5404403e7d.js → cb8a82631d87b798.js} +1 -1
  288. package/dist/safe-a/_next/static/chunks/{303d9c2a2c956f25.js → ccbe0fe39b523768.js} +1 -1
  289. package/dist/safe-a/_next/static/chunks/{7aa69fd5d97b7146.js → cd733da27bed8af2.js} +1 -1
  290. package/dist/safe-a/_next/static/chunks/{66ed07a735eac6e3.js → cf99b249b986e2bd.js} +1 -1
  291. package/dist/safe-a/_next/static/chunks/{72a56bd75075fd83.js → d0d06ea64246c2e0.js} +1 -1
  292. package/dist/safe-a/_next/static/chunks/{da346aeed70dd39a.js → d147ab3cf51edc42.js} +1 -1
  293. package/dist/safe-a/_next/static/chunks/d2644966a8736893.js +1 -0
  294. package/dist/safe-a/_next/static/chunks/d2b5664aa6eb613c.js +1 -0
  295. package/dist/safe-a/_next/static/chunks/{1e17456ccebc9cd2.js → d2bba4dbd6e24f7e.js} +1 -1
  296. package/dist/safe-a/_next/static/chunks/d3072ff0f4d0f613.js +1 -0
  297. package/dist/safe-a/_next/static/chunks/{de0ee516f6a1aa07.js → d3fc1847f85d724b.js} +1 -1
  298. package/dist/safe-a/_next/static/chunks/{b69f987a60b05db3.js → d53ff6336a32e4c5.js} +1 -1
  299. package/dist/safe-a/_next/static/chunks/{1fec17d16aff9eed.js → d653880800910810.js} +1 -1
  300. package/dist/safe-a/_next/static/chunks/d78975cda9119543.js +1 -0
  301. package/dist/safe-a/_next/static/chunks/{ebcbb5070eb8e29f.js → d84ed83f568f41c6.js} +1 -1
  302. package/dist/safe-a/_next/static/chunks/{a1b9abf15c0f7655.js → d9bf3f0f6088ac8c.js} +1 -1
  303. package/dist/safe-a/_next/static/chunks/{5ee72092303043ef.js → daaffc256846db90.js} +1 -1
  304. package/dist/safe-a/_next/static/chunks/{40cc0252b2f1d855.js → dabd2cc5e900d556.js} +1 -1
  305. package/dist/safe-a/_next/static/chunks/dbf36b536a6c59ef.js +1 -0
  306. package/dist/safe-a/_next/static/chunks/{e11d4fd8de65621d.js → dc7f280eee64d574.js} +1 -1
  307. package/dist/safe-a/_next/static/chunks/{44cbf68ad086a6a3.js → dc982433a82e2718.js} +1 -1
  308. package/dist/safe-a/_next/static/chunks/{69cfdbc51cf2d3c3.js → dcdc329f64f1a7a8.js} +1 -1
  309. package/dist/safe-a/_next/static/chunks/{f42d74f288f2229c.js → dd03bb14e8e590f0.js} +1 -1
  310. package/dist/safe-a/_next/static/chunks/{d2d432a9facf4278.js → dd59d0e313916320.js} +1 -1
  311. package/dist/safe-a/_next/static/chunks/{b3e79c76be269ccc.js → ddc8a591c8943264.js} +1 -1
  312. package/dist/safe-a/_next/static/chunks/{49df9708d6328c4a.js → de208f3610c12b2c.js} +1 -1
  313. package/dist/safe-a/_next/static/chunks/{2f7d30e66e995b02.js → dee1daaeed29e5a2.js} +1 -1
  314. package/dist/safe-a/_next/static/chunks/{6b652524b5ffdd9e.js → dfbd9d8a4137edd6.js} +1 -1
  315. package/dist/safe-a/_next/static/chunks/{270d7571d2eea071.js → dfd8167d74bbaa3a.js} +1 -1
  316. package/dist/safe-a/_next/static/chunks/{4dfbfdff43b8479b.js → dfe4d8ffc37b96da.js} +1 -1
  317. package/dist/safe-a/_next/static/chunks/{0e1e7d5f7a375308.js → e07906d264057e7b.js} +1 -1
  318. package/dist/safe-a/_next/static/chunks/{b29a85c3dae2bb9c.js → e1416a0b2152bdbf.js} +1 -1
  319. package/dist/safe-a/_next/static/chunks/{fb05f79f5e4b514e.js → e1626e173f56ae31.js} +1 -1
  320. package/dist/safe-a/_next/static/chunks/{3590c4a4f40cdb5d.js → e4776ea06fa1720a.js} +1 -1
  321. package/dist/safe-a/_next/static/chunks/{756b6c2e620386ff.js → e632e1b120215697.js} +1 -1
  322. package/dist/safe-a/_next/static/chunks/{b61ec36c9bbca3e0.js → e66819cb4afcfe87.js} +1 -1
  323. package/dist/safe-a/_next/static/chunks/{ea12d36cdfbaafa9.js → e7731336476789d7.js} +1 -1
  324. package/dist/safe-a/_next/static/chunks/e79d1db952916e66.js +1 -0
  325. package/dist/safe-a/_next/static/chunks/{06b923aa1177f43f.js → e7d6284971d07422.js} +1 -1
  326. package/dist/safe-a/_next/static/chunks/{79128afded6e01d9.js → e7f1683dcd85bf06.js} +1 -1
  327. package/dist/safe-a/_next/static/chunks/e814d6bb4f565a59.js +1 -0
  328. package/dist/safe-a/_next/static/chunks/{65fe0975412ff703.js → e878ffaf394e2c30.js} +1 -1
  329. package/dist/safe-a/_next/static/chunks/{e7003dbd5d8cb2d1.js → e89655c05e6b5b1f.js} +1 -1
  330. package/dist/safe-a/_next/static/chunks/{66b30159915524db.js → ea136b1a439307e8.js} +1 -1
  331. package/dist/safe-a/_next/static/chunks/{8f5be275907dd98c.js → eaa820432740042a.js} +1 -1
  332. package/dist/safe-a/_next/static/chunks/{5d5333084191fb10.js → eb248f97f593a288.js} +1 -1
  333. package/dist/safe-a/_next/static/chunks/{932d3fcc2596e8d5.js → eb34cdf40f4c4d62.js} +1 -1
  334. package/dist/safe-a/_next/static/chunks/{6fe835d41fdbd638.js → ec048ffab26ebcd6.js} +1 -1
  335. package/dist/safe-a/_next/static/chunks/{6bc7c57f119ad4f6.js → ec24f7a0593636d9.js} +1 -1
  336. package/dist/safe-a/_next/static/chunks/{e1999bcadd3448e5.js → ec7ee73b22712e55.js} +1 -1
  337. package/dist/safe-a/_next/static/chunks/{0fd3876e0d9e8acc.js → ed4322c3137a7cbf.js} +1 -1
  338. package/dist/safe-a/_next/static/chunks/{962a27e9c634b823.js → ede1765e6899133a.js} +1 -1
  339. package/dist/safe-a/_next/static/chunks/{bc7bda699a7ccda1.js → f05af2c706c87fb5.js} +1 -1
  340. package/dist/safe-a/_next/static/chunks/{bd1f33816fa01c16.js → f0a3b313fc0fcace.js} +1 -1
  341. package/dist/safe-a/_next/static/chunks/f15c8b2639bebe0f.js +1 -0
  342. package/dist/safe-a/_next/static/chunks/{f461a75ec3b0e4e9.js → f39ec71d70b31fe1.js} +1 -1
  343. package/dist/safe-a/_next/static/chunks/{ad50a7d15cd9d9d8.js → f40b91cb7cc58cf2.js} +1 -1
  344. package/dist/safe-a/_next/static/chunks/f42445d9866f6b16.js +1 -0
  345. package/dist/safe-a/_next/static/chunks/{aa867a1fa8b105e1.js → f7ad257814e6e947.js} +1 -1
  346. package/dist/safe-a/_next/static/chunks/{3ae23df392f9bed8.js → f7d33f46dfbddf65.js} +1 -1
  347. package/dist/safe-a/_next/static/chunks/{534b5acf573aa491.js → f8757d2c1a969081.js} +1 -1
  348. package/dist/safe-a/_next/static/chunks/fa0cb747819a4b88.js +1 -0
  349. package/dist/safe-a/_next/static/chunks/{0fb0d030e8dee231.js → faf267ae8eaabb78.js} +1 -1
  350. package/dist/safe-a/_next/static/chunks/fb7bf2e8cee9c72f.js +1 -0
  351. package/dist/safe-a/_next/static/chunks/{eb2d81df9fe374a8.js → fbb5b0d1f5b25465.js} +1 -1
  352. package/dist/safe-a/_next/static/chunks/{c8e45be36912e439.js → fc3c1b765cc5906d.js} +1 -1
  353. package/dist/safe-a/_next/static/chunks/{1c9321874fea5f0d.js → fd3f75ac79c1d04e.js} +1 -1
  354. package/dist/safe-a/_next/static/chunks/{9a7b2a483b109c0a.js → fddfcced721d9669.js} +1 -1
  355. package/dist/safe-a/_next/static/chunks/{d2e37b6d5ff62bcb.js → fdf535baa39c0e26.js} +1 -1
  356. package/dist/safe-a/_next/static/chunks/fe4fddbf85e1554b.js +1 -0
  357. package/dist/safe-a/_next/static/chunks/{d33a24782888b869.js → fe840e6cda1c115e.js} +1 -1
  358. package/dist/safe-a/_next/static/chunks/ff9ec21502a3b775.js +1 -0
  359. package/dist/safe-a/_next/static/chunks/{turbopack-3d84668fefd38b4b.js → turbopack-25307b1915d537a0.js} +1 -1
  360. package/dist/safe-a/_next/static/chunks/turbopack-c8295da8707d94de.js +3 -0
  361. package/dist/safe-a/_next/static/chunks/{turbopack-63952675b1d69124.js → turbopack-fd95f1c0ef78a441.js} +1 -1
  362. package/dist/safe-a/_next/static/{8K8MheZHG-fXZxruG2Nc8 → fJY87EWm4q7Foe1k9iCt0}/_buildManifest.js +1 -1
  363. package/dist/safe-a/index.html +2 -2
  364. package/dist/safe-a/index.txt +29 -31
  365. package/dist/safe-a/manage/about/index.html +2 -2
  366. package/dist/safe-a/manage/about/index.txt +29 -30
  367. package/dist/safe-a/manage/env/index.html +2 -2
  368. package/dist/safe-a/manage/env/index.txt +32 -33
  369. package/dist/safe-a/manage/geelib/index.html +2 -2
  370. package/dist/safe-a/manage/geelib/index.txt +32 -33
  371. package/dist/safe-a/manage/general/index.html +2 -2
  372. package/dist/safe-a/manage/general/index.txt +29 -30
  373. package/dist/safe-a/manage/git/index.html +2 -2
  374. package/dist/safe-a/manage/git/index.txt +32 -33
  375. package/dist/safe-a/manage/im/index.html +2 -2
  376. package/dist/safe-a/manage/im/index.txt +32 -33
  377. package/dist/safe-a/manage/index.html +2 -2
  378. package/dist/safe-a/manage/index.txt +26 -27
  379. package/dist/safe-a/manage/library/index.html +2 -2
  380. package/dist/safe-a/manage/library/index.txt +30 -31
  381. package/dist/safe-a/manage/mcp/index.html +2 -2
  382. package/dist/safe-a/manage/mcp/index.txt +30 -31
  383. package/dist/safe-a/manage/permissions/index.html +2 -2
  384. package/dist/safe-a/manage/permissions/index.txt +29 -30
  385. package/dist/safe-a/manage/skills/index.html +2 -2
  386. package/dist/safe-a/manage/skills/index.txt +30 -31
  387. package/dist/safe-a/manage/task/index.html +2 -2
  388. package/dist/safe-a/manage/task/index.txt +30 -31
  389. package/dist/safe-a/manage/teams/index.html +2 -2
  390. package/dist/safe-a/manage/teams/index.txt +30 -31
  391. package/dist/safe-a/manage/tools/index.html +2 -2
  392. package/dist/safe-a/manage/tools/index.txt +30 -31
  393. package/dist/ws-test/vendor/xterm-addon-fit.js +2 -0
  394. package/dist/ws-test/vendor/xterm.css +285 -0
  395. package/dist/ws-test/vendor/xterm.js +2 -0
  396. package/dist/ws-test/ws-test.css +47 -0
  397. package/dist/ws-test/ws-test.html +38 -0
  398. package/dist/ws-test/ws-test.js +573 -72
  399. package/mcps-runtime/claude-geelib-channel/server/index.mjs +5 -0
  400. package/mcps-runtime/claude-tuitui-channel/server/index.mjs +0 -6
  401. package/mcps-runtime/claude-ws-channel/server/gateway.bundle.mjs +4791 -1145
  402. package/package.json +6 -6
  403. package/dist/safe-a/_next/static/chunks/05e1926dc5c477b7.js +0 -1
  404. package/dist/safe-a/_next/static/chunks/0b5e5b964346a287.js +0 -1
  405. package/dist/safe-a/_next/static/chunks/0b639ff4f1971d14.js +0 -1
  406. package/dist/safe-a/_next/static/chunks/0ea5a62c3f30dc56.js +0 -1
  407. package/dist/safe-a/_next/static/chunks/0f1810e4c6b0dd0c.js +0 -1
  408. package/dist/safe-a/_next/static/chunks/1289fc2bb1119e18.js +0 -1
  409. package/dist/safe-a/_next/static/chunks/155374df9f6b4b9a.js +0 -1
  410. package/dist/safe-a/_next/static/chunks/17722e3ac4e00587.js +0 -1
  411. package/dist/safe-a/_next/static/chunks/18977fe8f51209aa.js +0 -1
  412. package/dist/safe-a/_next/static/chunks/1974f51c298bce94.js +0 -1
  413. package/dist/safe-a/_next/static/chunks/1bfa645704d9149a.js +0 -1
  414. package/dist/safe-a/_next/static/chunks/219a3413675ba6f1.js +0 -1
  415. package/dist/safe-a/_next/static/chunks/236775e4ec4f8a94.js +0 -1
  416. package/dist/safe-a/_next/static/chunks/27069b3f310e0a86.js +0 -1
  417. package/dist/safe-a/_next/static/chunks/291c07da1c127dc1.js +0 -1
  418. package/dist/safe-a/_next/static/chunks/29676075a0390867.js +0 -1
  419. package/dist/safe-a/_next/static/chunks/2e574acbf68e77ff.js +0 -1
  420. package/dist/safe-a/_next/static/chunks/2e57b45e52bb735e.js +0 -1
  421. package/dist/safe-a/_next/static/chunks/32a7ca0a75a897da.js +0 -1
  422. package/dist/safe-a/_next/static/chunks/3509a66e019ceae3.js +0 -1
  423. package/dist/safe-a/_next/static/chunks/3aac5736e5781b46.js +0 -1
  424. package/dist/safe-a/_next/static/chunks/3c695d1c2efbc749.js +0 -1
  425. package/dist/safe-a/_next/static/chunks/3d8e9a96a69193d4.js +0 -1
  426. package/dist/safe-a/_next/static/chunks/3dcb1dcf23e7ab9c.js +0 -1
  427. package/dist/safe-a/_next/static/chunks/3e2ea3a7fe64826d.js +0 -1
  428. package/dist/safe-a/_next/static/chunks/3f6fe8a1903009ea.js +0 -1
  429. package/dist/safe-a/_next/static/chunks/3fb4674edcb2d726.js +0 -1
  430. package/dist/safe-a/_next/static/chunks/40268f8e3ff0314e.js +0 -1
  431. package/dist/safe-a/_next/static/chunks/40a2fb9cf3a7e6fd.js +0 -1
  432. package/dist/safe-a/_next/static/chunks/45ab9a1f693d609c.js +0 -1
  433. package/dist/safe-a/_next/static/chunks/4a426c156537f974.js +0 -1
  434. package/dist/safe-a/_next/static/chunks/4be4ca8f1ec9c171.js +0 -1
  435. package/dist/safe-a/_next/static/chunks/4be779bcbd94352d.js +0 -1
  436. package/dist/safe-a/_next/static/chunks/4c33a1cc6db74105.js +0 -1
  437. package/dist/safe-a/_next/static/chunks/4d129d4e15c8c424.js +0 -1
  438. package/dist/safe-a/_next/static/chunks/5069ee4aa806b0ea.js +0 -1
  439. package/dist/safe-a/_next/static/chunks/519049cd74a40910.js +0 -1
  440. package/dist/safe-a/_next/static/chunks/522518d740397639.js +0 -1
  441. package/dist/safe-a/_next/static/chunks/52e2164e45febae6.js +0 -1
  442. package/dist/safe-a/_next/static/chunks/538cc02e54714b23.js +0 -1
  443. package/dist/safe-a/_next/static/chunks/54c43751bf4c4da2.js +0 -1
  444. package/dist/safe-a/_next/static/chunks/58dfdb6e018c4a57.js +0 -1
  445. package/dist/safe-a/_next/static/chunks/5b916c9dc09e323c.js +0 -1
  446. package/dist/safe-a/_next/static/chunks/5ccd5a6ac9c2f980.js +0 -1
  447. package/dist/safe-a/_next/static/chunks/5d79b7f202080232.js +0 -1
  448. package/dist/safe-a/_next/static/chunks/63ec034afca4b5d6.js +0 -1
  449. package/dist/safe-a/_next/static/chunks/6677c64fd587e78c.js +0 -1
  450. package/dist/safe-a/_next/static/chunks/6785757cc05fec19.js +0 -1
  451. package/dist/safe-a/_next/static/chunks/696e3ddd135b85b4.js +0 -1
  452. package/dist/safe-a/_next/static/chunks/6d1f15f3eb86ea37.js +0 -1
  453. package/dist/safe-a/_next/static/chunks/71d3a80bc9d53b07.js +0 -1
  454. package/dist/safe-a/_next/static/chunks/7491dc26b3b05de9.js +0 -1
  455. package/dist/safe-a/_next/static/chunks/764c541428e1c6eb.js +0 -1
  456. package/dist/safe-a/_next/static/chunks/7988d5ea63356e10.js +0 -1
  457. package/dist/safe-a/_next/static/chunks/7b9c09d0ce43f1c2.js +0 -1
  458. package/dist/safe-a/_next/static/chunks/7dbb8abebf50d816.js +0 -1
  459. package/dist/safe-a/_next/static/chunks/7dd32128bdee61f7.js +0 -1
  460. package/dist/safe-a/_next/static/chunks/7ef348801eff6590.js +0 -1
  461. package/dist/safe-a/_next/static/chunks/85fc05549f7f100c.js +0 -1
  462. package/dist/safe-a/_next/static/chunks/88bc97899d2ce4e5.js +0 -1
  463. package/dist/safe-a/_next/static/chunks/8989a60219113c80.js +0 -1
  464. package/dist/safe-a/_next/static/chunks/8e5b2f279f1a9975.js +0 -1
  465. package/dist/safe-a/_next/static/chunks/91e0df5a4c9d0bcd.js +0 -1
  466. package/dist/safe-a/_next/static/chunks/92c3617a4e22a464.js +0 -1
  467. package/dist/safe-a/_next/static/chunks/937e26e6e01d9ec9.js +0 -1
  468. package/dist/safe-a/_next/static/chunks/93bfaf233e66b48c.js +0 -1
  469. package/dist/safe-a/_next/static/chunks/94e88cfda11697d2.js +0 -1
  470. package/dist/safe-a/_next/static/chunks/9b3df6b20a9625d5.js +0 -1
  471. package/dist/safe-a/_next/static/chunks/9c6c00fa68012026.js +0 -1
  472. package/dist/safe-a/_next/static/chunks/9ccf7a8bca1730bf.js +0 -1
  473. package/dist/safe-a/_next/static/chunks/9fefea69ec034a63.js +0 -1
  474. package/dist/safe-a/_next/static/chunks/a437ab944fe911da.js +0 -1
  475. package/dist/safe-a/_next/static/chunks/a4776dc3e00e5ab0.js +0 -1
  476. package/dist/safe-a/_next/static/chunks/abdf99ba76e0f571.js +0 -1
  477. package/dist/safe-a/_next/static/chunks/ad4ba491cf12423f.js +0 -5
  478. package/dist/safe-a/_next/static/chunks/b30ee3cb6af32088.js +0 -1
  479. package/dist/safe-a/_next/static/chunks/b30f1da4e57f459a.js +0 -1
  480. package/dist/safe-a/_next/static/chunks/b62abd0d2ca9f56f.js +0 -1
  481. package/dist/safe-a/_next/static/chunks/b92c67520afabac2.js +0 -1
  482. package/dist/safe-a/_next/static/chunks/baed816b83bbd5b5.js +0 -1
  483. package/dist/safe-a/_next/static/chunks/bbaef90b0ce43019.js +0 -1
  484. package/dist/safe-a/_next/static/chunks/bd2dcf98c9b362f6.js +0 -1
  485. package/dist/safe-a/_next/static/chunks/bf2c1c402dbcccdf.js +0 -1
  486. package/dist/safe-a/_next/static/chunks/bfc6ee42cec583d5.js +0 -1
  487. package/dist/safe-a/_next/static/chunks/c3b49937059d3d70.js +0 -1
  488. package/dist/safe-a/_next/static/chunks/c5be27a596acfa18.js +0 -1
  489. package/dist/safe-a/_next/static/chunks/c8942bee3aebddae.js +0 -1
  490. package/dist/safe-a/_next/static/chunks/c9813626ba898586.js +0 -1
  491. package/dist/safe-a/_next/static/chunks/ca2725c2b45709c1.js +0 -1
  492. package/dist/safe-a/_next/static/chunks/cafadd69e03e6c4b.js +0 -1
  493. package/dist/safe-a/_next/static/chunks/cd4556cbed1f8957.js +0 -1
  494. package/dist/safe-a/_next/static/chunks/cfd9aff2dcf3adb9.js +0 -1
  495. package/dist/safe-a/_next/static/chunks/d433c87b0bc69cda.js +0 -1
  496. package/dist/safe-a/_next/static/chunks/da9d2b7d381c1953.js +0 -1
  497. package/dist/safe-a/_next/static/chunks/dbbd673619a7f82f.js +0 -1
  498. package/dist/safe-a/_next/static/chunks/dc0bc471de951daf.js +0 -1
  499. package/dist/safe-a/_next/static/chunks/dda0af99af0e0631.css +0 -7
  500. package/dist/safe-a/_next/static/chunks/e2833182a81cd867.js +0 -1
  501. package/dist/safe-a/_next/static/chunks/e60ef129113f6e24.js +0 -1
  502. package/dist/safe-a/_next/static/chunks/e6324292aef80338.js +0 -1
  503. package/dist/safe-a/_next/static/chunks/e7f1a043618e43cf.js +0 -1
  504. package/dist/safe-a/_next/static/chunks/e8105dbb23b8e514.js +0 -1
  505. package/dist/safe-a/_next/static/chunks/ebcd85ff4a1db0dc.js +0 -5
  506. package/dist/safe-a/_next/static/chunks/eed0c3ef6a5c3706.js +0 -1
  507. package/dist/safe-a/_next/static/chunks/f12f45a558c3fed2.js +0 -1
  508. package/dist/safe-a/_next/static/chunks/f37854d807ee41ac.css +0 -1
  509. package/dist/safe-a/_next/static/chunks/f42a71992d139302.js +0 -1
  510. package/dist/safe-a/_next/static/chunks/fc2efa33a196ee45.js +0 -1
  511. package/dist/safe-a/_next/static/chunks/ff6860dcd793aa23.js +0 -1
  512. package/dist/safe-a/_next/static/chunks/turbopack-8b41433c9a94981f.js +0 -3
  513. /package/dist/safe-a/_next/static/{8K8MheZHG-fXZxruG2Nc8 → fJY87EWm4q7Foe1k9iCt0}/_clientMiddlewareManifest.json +0 -0
  514. /package/dist/safe-a/_next/static/{8K8MheZHG-fXZxruG2Nc8 → fJY87EWm4q7Foe1k9iCt0}/_ssgManifest.js +0 -0
@@ -84,6 +84,11 @@
84
84
  const permissionDialogTitle = $('permissionDialogTitle')
85
85
  const permissionDialogDesc = $('permissionDialogDesc')
86
86
  const permissionDialogInput = $('permissionDialogInput')
87
+ const apiErrorDialog = $('apiErrorDialog')
88
+ const apiErrorDialogBackdrop = $('apiErrorDialogBackdrop')
89
+ const apiErrorDialogDesc = $('apiErrorDialogDesc')
90
+ const btnApiErrorOk = $('btnApiErrorOk')
91
+ const btnApiErrorDialogClose = $('btnApiErrorDialogClose')
87
92
  const btnPermissionDialogClose = $('btnPermissionDialogClose')
88
93
  const btnPermissionDeny = $('btnPermissionDeny')
89
94
  const btnPermissionAllow = $('btnPermissionAllow')
@@ -111,6 +116,7 @@
111
116
  const scheduleTasksWrap = $('scheduleTasksWrap')
112
117
  const scheduleRunsWrap = $('scheduleRunsWrap')
113
118
  const scheduleTaskTableBody = $('scheduleTaskTableBody')
119
+ const scheduleTasksPager = $('scheduleTasksPager')
114
120
  const scheduleManageEmpty = $('scheduleManageEmpty')
115
121
  const btnScheduleRunsBack = $('btnScheduleRunsBack')
116
122
  const scheduleRunsTitle = $('scheduleRunsTitle')
@@ -134,7 +140,11 @@
134
140
  const btnScheduleCreateCancel = $('btnScheduleCreateCancel')
135
141
  const btnScheduleCreateSubmit = $('btnScheduleCreateSubmit')
136
142
  const btnManageRepo = $('btnManageRepo')
143
+ const btnManageTerminal = $('btnManageTerminal')
137
144
  const repoManageView = $('repoManageView')
145
+ const terminalManageView = $('terminalManageView')
146
+ const terminalMount = $('terminalMount')
147
+ const terminalState = $('terminalState')
138
148
  const chatWorkspace = $('chatWorkspace')
139
149
  const chatComposer = $('chatComposer')
140
150
  const repoTreeList = $('repoTreeList')
@@ -161,6 +171,12 @@
161
171
  let sessionRuntimePollTimer = null
162
172
  /** 当前附着 session 的 turn 是否进行中(由 query.progress 驱动) */
163
173
  let sessionTurnActive = false
174
+ /** 当前 turn 是否已处理过 api_error 终态,避免重复弹窗与 abort */
175
+ let apiErrorHandledForTurn = false
176
+ /** 当前 turn 是否处于 api_error 重试中 */
177
+ let apiErrorRetryingForTurn = false
178
+ /** 最近一次 api_error 的可读文案,供重试耗尽后弹窗展示 */
179
+ let lastApiErrorText = ''
164
180
  const pendingPromptsBarEl = $('pendingPromptsBar')
165
181
  const pendingPromptsListEl = $('pendingPromptsList')
166
182
  let pendingPromptsCache = []
@@ -352,8 +368,6 @@
352
368
  const LLM_MODEL_KEY = 'LLM_MODEL'
353
369
  const LLM_PROVIDER_ID_KEY = 'LLM_PROVIDER_ID'
354
370
  const WS_ALLOW_TOOL_ASK_KEY = 'WS_ALLOW_TOOL_ASK'
355
- const TUITUI_CHANNEL_SESSION_KEY = 'TUITUI_CHANNEL_SESSION'
356
- const TUITUI_CHANNEL_SESSION_ALLOWED = new Set(['0', '1'])
357
371
  const WS_PERMISSION_MODE_ALLOWED = new Set([
358
372
  'acceptEdits',
359
373
  'plan',
@@ -577,50 +591,19 @@
577
591
  label.setAttribute('for', 'agentEnvField_' + field.key)
578
592
  label.textContent = field.label
579
593
  const inputId = 'agentEnvField_' + field.key
580
- let input
581
- if (field.key === TUITUI_CHANNEL_SESSION_KEY) {
582
- /**
583
- * 业务逻辑:推推常驻会话开关仅允许 0/1,与主进程 reconcileChannelPairSessions 读取一致。
584
- */
585
- const select = document.createElement('select')
586
- select.id = inputId
587
- select.className = 'agent-env-kv-input'
588
- const channelSessionOptions = [
589
- { value: '0', label: '禁用' },
590
- { value: '1', label: '启用' },
591
- ]
592
- for (let k = 0; k < channelSessionOptions.length; k++) {
593
- const option = document.createElement('option')
594
- option.value = channelSessionOptions[k].value
595
- option.textContent = channelSessionOptions[k].label
596
- select.appendChild(option)
597
- }
598
- const currentChannelSession =
599
- typeof agentEnvFieldValues[field.key] === 'string'
600
- ? agentEnvFieldValues[field.key].trim()
601
- : ''
602
- select.value = TUITUI_CHANNEL_SESSION_ALLOWED.has(currentChannelSession)
603
- ? currentChannelSession
604
- : '0'
605
- select.addEventListener('change', function () {
606
- agentEnvFieldValues[field.key] = select.value
607
- })
608
- input = select
609
- } else {
610
- const textInput = document.createElement('input')
611
- textInput.id = inputId
612
- textInput.type = 'text'
613
- textInput.spellcheck = false
614
- textInput.className = 'agent-env-kv-input'
615
- textInput.placeholder = field.placeholder || ''
616
- textInput.value = typeof agentEnvFieldValues[field.key] === 'string'
617
- ? agentEnvFieldValues[field.key]
618
- : ''
619
- textInput.addEventListener('input', function () {
620
- agentEnvFieldValues[field.key] = textInput.value
621
- })
622
- input = textInput
623
- }
594
+ const textInput = document.createElement('input')
595
+ textInput.id = inputId
596
+ textInput.type = 'text'
597
+ textInput.spellcheck = false
598
+ textInput.className = 'agent-env-kv-input'
599
+ textInput.placeholder = field.placeholder || ''
600
+ textInput.value = typeof agentEnvFieldValues[field.key] === 'string'
601
+ ? agentEnvFieldValues[field.key]
602
+ : ''
603
+ textInput.addEventListener('input', function () {
604
+ agentEnvFieldValues[field.key] = textInput.value
605
+ })
606
+ const input = textInput
624
607
  row.appendChild(label)
625
608
  row.appendChild(input)
626
609
  section.appendChild(row)
@@ -1554,6 +1537,10 @@
1554
1537
  return extractMessageBody(m).trim()
1555
1538
  }
1556
1539
  if (m.type === 'system') {
1540
+ if (m.subtype === 'api_error') {
1541
+ const apiText = extractApiErrorText(m)
1542
+ if (apiText) return apiText
1543
+ }
1557
1544
  if (typeof m.content === 'string') return m.content.trim()
1558
1545
  try {
1559
1546
  return JSON.stringify(m).slice(0, 800).trim()
@@ -1651,10 +1638,14 @@
1651
1638
  div.appendChild(md)
1652
1639
  container.appendChild(div)
1653
1640
  } else if (t === 'system') {
1654
- const raw =
1641
+ let raw =
1655
1642
  typeof m.content === 'string'
1656
1643
  ? m.content
1657
1644
  : JSON.stringify(m).slice(0, 800)
1645
+ if (m.subtype === 'api_error') {
1646
+ const apiText = extractApiErrorText(m)
1647
+ if (apiText) raw = apiText
1648
+ }
1658
1649
  if (!raw.trim()) continue
1659
1650
  const div = document.createElement('div')
1660
1651
  div.className = 'chat-msg chat-msg-system'
@@ -1998,6 +1989,151 @@
1998
1989
  permissionDialogBackdrop.addEventListener('click', () => respondToPermission('deny'))
1999
1990
  }
2000
1991
 
1992
+ /**
1993
+ * 从 system api_error 消息中提取可读错误文案。
1994
+ * 上游 APIError 常嵌套多层 error 字段,需逐层下探并尝试解析 JSON 内 message。
1995
+ */
1996
+ function extractApiErrorText(msg) {
1997
+ if (!msg || msg.type !== 'system' || msg.subtype !== 'api_error') return ''
1998
+ const root = msg.error
1999
+ if (!root || typeof root !== 'object') return 'LLM API 请求失败'
2000
+
2001
+ let text = ''
2002
+ const candidates = [
2003
+ root.message,
2004
+ root.error && root.error.message,
2005
+ root.error && root.error.error && root.error.error.message,
2006
+ root.error && root.error.error && root.error.error.error && root.error.error.error.message,
2007
+ ]
2008
+ for (let i = 0; i < candidates.length; i++) {
2009
+ if (typeof candidates[i] === 'string' && candidates[i].trim()) {
2010
+ text = candidates[i].trim()
2011
+ break
2012
+ }
2013
+ }
2014
+ if (!text) text = 'LLM API 请求失败'
2015
+
2016
+ const jsonMatch = text.match(/\{[\s\S]*\}$/)
2017
+ if (jsonMatch) {
2018
+ try {
2019
+ const parsed = JSON.parse(jsonMatch[0])
2020
+ const inner = parsed.error || parsed
2021
+ if (inner && typeof inner.message === 'string' && inner.message.trim()) {
2022
+ const code = inner.code != null ? '(' + inner.code + ')' : ''
2023
+ text = inner.message.trim() + code
2024
+ }
2025
+ } catch (_err) {
2026
+ /* 非 JSON 后缀则保留原始 message */
2027
+ }
2028
+ }
2029
+
2030
+ const attempt = Number.isFinite(msg.retryAttempt) ? msg.retryAttempt : null
2031
+ const max = Number.isFinite(msg.maxRetries) ? msg.maxRetries : null
2032
+ if (attempt != null && max != null) {
2033
+ text += ' [重试 ' + attempt + '/' + max + ']'
2034
+ }
2035
+ if (typeof root.status === 'number') {
2036
+ text = 'HTTP ' + root.status + ': ' + text
2037
+ }
2038
+ return text
2039
+ }
2040
+
2041
+ function hideApiErrorDialog() {
2042
+ if (!apiErrorDialog) return
2043
+ apiErrorDialog.classList.remove('is-open')
2044
+ apiErrorDialog.setAttribute('aria-hidden', 'true')
2045
+ }
2046
+
2047
+ function showApiErrorDialog(message) {
2048
+ if (!apiErrorDialog || !apiErrorDialogDesc) return
2049
+ apiErrorDialogDesc.textContent =
2050
+ typeof message === 'string' && message.trim() ? message.trim() : 'LLM API 请求失败'
2051
+ apiErrorDialog.classList.add('is-open')
2052
+ apiErrorDialog.setAttribute('aria-hidden', 'false')
2053
+ }
2054
+
2055
+ /** 向服务端发送 abort,终止当前 query 与子进程 turn */
2056
+ function abortCurrentSessionTurn() {
2057
+ if (!socket || socket.readyState !== WebSocket.OPEN) return
2058
+ const payload = { type: 'abort' }
2059
+ socket.send(JSON.stringify(payload))
2060
+ logLine('→', payload)
2061
+ }
2062
+
2063
+ function resetApiErrorTurnState() {
2064
+ apiErrorHandledForTurn = false
2065
+ apiErrorRetryingForTurn = false
2066
+ lastApiErrorText = ''
2067
+ }
2068
+
2069
+ /**
2070
+ * api 重试全部耗尽:弹窗、abort、清除 calling。
2071
+ * 由 session.error 或 turn.terminal failed 触发,不在首次 api_error 时 fail-fast。
2072
+ */
2073
+ function finalizeApiErrorTurn(errText) {
2074
+ if (apiErrorHandledForTurn) return
2075
+ apiErrorHandledForTurn = true
2076
+ apiErrorRetryingForTurn = false
2077
+ sessionTurnActive = false
2078
+ showApiErrorDialog(errText || 'LLM API 请求失败')
2079
+ abortCurrentSessionTurn()
2080
+ setStatus('API 错误', 'err')
2081
+ kickSessionRuntimePoll()
2082
+ if (window.__lastSessions) {
2083
+ renderSessionList(window.__lastSessions)
2084
+ }
2085
+ void loadSessions({ silent: true })
2086
+ }
2087
+
2088
+ /**
2089
+ * 主 run 收到 api_error:重试期间仅更新状态栏,全部重试耗尽后再弹窗终止。
2090
+ */
2091
+ function handleApiErrorFromSystemMessage(msg, runId) {
2092
+ if (runId !== 'main') return
2093
+ if (apiErrorHandledForTurn) return
2094
+ if (!msg || msg.type !== 'system' || msg.subtype !== 'api_error') return
2095
+
2096
+ const retryAttempt = Number.isFinite(msg.retryAttempt) ? msg.retryAttempt : 0
2097
+ const maxRetries = Number.isFinite(msg.maxRetries) ? msg.maxRetries : 10
2098
+ lastApiErrorText = extractApiErrorText(msg)
2099
+ apiErrorRetryingForTurn = true
2100
+ setStatus('API 错误,重试 ' + retryAttempt + '/' + maxRetries + '…', 'err')
2101
+ kickSessionRuntimePoll()
2102
+ if (window.__lastSessions) {
2103
+ renderSessionList(window.__lastSessions)
2104
+ }
2105
+ void loadSessions({ silent: true })
2106
+ }
2107
+
2108
+ /**
2109
+ * session.error:若处于 api 重试链,表示重试已耗尽,走终态弹窗;否则仅更新状态。
2110
+ */
2111
+ function handleSessionErrorPayload(payload) {
2112
+ if (apiErrorHandledForTurn) return
2113
+ if (apiErrorRetryingForTurn) {
2114
+ const errMsg =
2115
+ lastApiErrorText ||
2116
+ (payload && typeof payload.message === 'string' ? payload.message.trim() : '')
2117
+ finalizeApiErrorTurn(errMsg || 'LLM API 请求失败')
2118
+ return
2119
+ }
2120
+ const errMsg =
2121
+ payload && typeof payload.message === 'string' && payload.message.trim()
2122
+ ? payload.message.trim()
2123
+ : 'unknown'
2124
+ setStatus('错误: ' + errMsg, 'err')
2125
+ }
2126
+
2127
+ if (btnApiErrorOk) {
2128
+ btnApiErrorOk.addEventListener('click', hideApiErrorDialog)
2129
+ }
2130
+ if (btnApiErrorDialogClose) {
2131
+ btnApiErrorDialogClose.addEventListener('click', hideApiErrorDialog)
2132
+ }
2133
+ if (apiErrorDialogBackdrop) {
2134
+ apiErrorDialogBackdrop.addEventListener('click', hideApiErrorDialog)
2135
+ }
2136
+
2001
2137
  /** 解析并应用 WS v3 下行信封(protocolVersion === 3);旧名 applyEnvelopeV2 易误解,保留行为不变。 */
2002
2138
  function applyWsEnvelopeV3(data) {
2003
2139
  if (!data || typeof data !== 'object') return false
@@ -2016,6 +2152,11 @@
2016
2152
  if (type === 'conversation.delta') {
2017
2153
  const action = typeof payload.action === 'string' ? payload.action : ''
2018
2154
  const index = Number.isInteger(payload.index) ? payload.index : -1
2155
+ const deltaContextPct = parseContextUsagePercent(payload.contextUsage)
2156
+ if (typeof deltaContextPct === 'number') {
2157
+ currentSessionContextPercent = deltaContextPct
2158
+ updatePromptSessionInfo()
2159
+ }
2019
2160
  const msg = payload.message
2020
2161
  const sourceAgent = resolveEnvelopeSourceAgent(runId, payload, data.agent_name)
2021
2162
  const runBuffer = ensureRunBuffer(runId)
@@ -2039,6 +2180,9 @@
2039
2180
  refreshSessionTitleFromChat(sessionIdInput.value.trim())
2040
2181
  }
2041
2182
  requestRenderChat()
2183
+ if (msg && msg.type === 'system' && msg.subtype === 'api_error') {
2184
+ handleApiErrorFromSystemMessage(msg, runId)
2185
+ }
2042
2186
  return true
2043
2187
  }
2044
2188
  if (type === 'turn.terminal') {
@@ -2067,8 +2211,19 @@
2067
2211
  key: typeof data.eventId === 'string' ? data.eventId : '',
2068
2212
  })
2069
2213
  /** 主 run 一轮结束:清除「查询阶段: calling_model」等进行中状态 */
2070
- if (runId === 'main' && serverReady) {
2071
- setStatus('已就绪', 'ready')
2214
+ if (runId === 'main') {
2215
+ if (
2216
+ payload.status !== 'resolved' &&
2217
+ apiErrorRetryingForTurn &&
2218
+ !apiErrorHandledForTurn
2219
+ ) {
2220
+ finalizeApiErrorTurn(lastApiErrorText)
2221
+ } else if (serverReady && !apiErrorHandledForTurn) {
2222
+ setStatus('已就绪', 'ready')
2223
+ }
2224
+ if (!apiErrorHandledForTurn) {
2225
+ resetApiErrorTurnState()
2226
+ }
2072
2227
  }
2073
2228
  requestRenderChat()
2074
2229
  return true
@@ -2130,6 +2285,9 @@
2130
2285
  })
2131
2286
  requestRenderChat()
2132
2287
  }
2288
+ if (type === 'session.error' && runId === 'main') {
2289
+ handleSessionErrorPayload(payload)
2290
+ }
2133
2291
  return true
2134
2292
  }
2135
2293
  if (type === 'schedule.pending') {
@@ -2175,11 +2333,20 @@
2175
2333
  renderSessionList(window.__lastSessions)
2176
2334
  }
2177
2335
  if (phase === 'idle') {
2178
- if (serverReady) setStatus('已就绪', 'ready')
2336
+ sessionTurnActive = false
2337
+ if (!apiErrorHandledForTurn && serverReady) {
2338
+ setStatus('已就绪', 'ready')
2339
+ }
2340
+ if (!apiErrorHandledForTurn) {
2341
+ apiErrorRetryingForTurn = false
2342
+ lastApiErrorText = ''
2343
+ }
2179
2344
  // 一轮 prompt 收尾后 transcript 已落盘,刷新列表以更新页签 firstPrompt/summary
2180
2345
  void loadSessions({ silent: true })
2181
2346
  } else if (phase) {
2182
- setStatus('查询阶段: ' + phase + '…', '')
2347
+ if (!apiErrorHandledForTurn && !apiErrorRetryingForTurn) {
2348
+ setStatus('查询阶段: ' + phase + '…', '')
2349
+ }
2183
2350
  void loadSessions({ silent: true })
2184
2351
  }
2185
2352
  return true
@@ -2495,9 +2662,15 @@
2495
2662
  return u.toString()
2496
2663
  }
2497
2664
 
2498
- function buildSchedulesUrl() {
2665
+ function buildSchedulesUrl(page, pageSize) {
2499
2666
  const u = new URL('/api/schedules', httpOriginForApi() + '/')
2500
2667
  u.searchParams.set('agent', currentAgentParam())
2668
+ if (typeof page === 'number' && page >= 1) {
2669
+ u.searchParams.set('page', String(page))
2670
+ }
2671
+ if (typeof pageSize === 'number' && pageSize >= 1) {
2672
+ u.searchParams.set('pageSize', String(pageSize))
2673
+ }
2501
2674
  return u.toString()
2502
2675
  }
2503
2676
 
@@ -2549,6 +2722,16 @@
2549
2722
  treeCache: new Map(),
2550
2723
  }
2551
2724
 
2725
+ /** 命令行主视图:PTY WebSocket 与 xterm 实例 */
2726
+ const terminalManageState = {
2727
+ viewActive: false,
2728
+ ws: null,
2729
+ term: null,
2730
+ fitAddon: null,
2731
+ resizeObserver: null,
2732
+ onDataDisposable: null,
2733
+ }
2734
+
2552
2735
  /** Agent 设置主视图是否激活(与聊天区、文件管理互斥) */
2553
2736
  const agentSettingsState = {
2554
2737
  viewActive: false,
@@ -2559,6 +2742,220 @@
2559
2742
  return repoManageState.viewActive
2560
2743
  }
2561
2744
 
2745
+ /** 当前是否在命令行主视图 */
2746
+ function isTerminalManageViewActive() {
2747
+ return terminalManageState.viewActive
2748
+ }
2749
+
2750
+ /** 设置命令行面板底部状态文案 */
2751
+ function setTerminalPanelState(message, isError) {
2752
+ if (!terminalState) return
2753
+ const text = String(message || '').trim()
2754
+ if (!text) {
2755
+ terminalState.hidden = true
2756
+ terminalState.textContent = ''
2757
+ terminalState.classList.remove('is-error')
2758
+ return
2759
+ }
2760
+ terminalState.hidden = false
2761
+ terminalState.textContent = text
2762
+ terminalState.classList.toggle('is-error', !!isError)
2763
+ }
2764
+
2765
+ /** 构建命令行 PTY WebSocket 地址 */
2766
+ function buildTerminalWsUrl() {
2767
+ const origin = httpOriginForApi()
2768
+ const u = new URL('/ws/terminal', origin + '/')
2769
+ u.searchParams.set('agent', currentAgentParam())
2770
+ const wsOrigin = u.origin.replace(/^http:/i, 'ws:').replace(/^https:/i, 'wss:')
2771
+ return wsOrigin + u.pathname + u.search
2772
+ }
2773
+
2774
+ /** 向服务端同步终端行列数 */
2775
+ function sendTerminalResize() {
2776
+ const ws = terminalManageState.ws
2777
+ const term = terminalManageState.term
2778
+ if (!ws || ws.readyState !== WebSocket.OPEN || !term) return
2779
+ ws.send(
2780
+ JSON.stringify({
2781
+ type: 'resize',
2782
+ cols: term.cols,
2783
+ rows: term.rows,
2784
+ }),
2785
+ )
2786
+ }
2787
+
2788
+ /** 释放 xterm 与 WebSocket,避免离开视图后残留 PTY */
2789
+ function destroyTerminalSession() {
2790
+ if (terminalManageState.resizeObserver) {
2791
+ terminalManageState.resizeObserver.disconnect()
2792
+ terminalManageState.resizeObserver = null
2793
+ }
2794
+ if (terminalManageState.onDataDisposable) {
2795
+ try {
2796
+ terminalManageState.onDataDisposable.dispose()
2797
+ } catch {
2798
+ /* ignore */
2799
+ }
2800
+ terminalManageState.onDataDisposable = null
2801
+ }
2802
+ if (terminalManageState.ws) {
2803
+ try {
2804
+ terminalManageState.ws.close()
2805
+ } catch {
2806
+ /* ignore */
2807
+ }
2808
+ terminalManageState.ws = null
2809
+ }
2810
+ if (terminalManageState.term) {
2811
+ try {
2812
+ terminalManageState.term.dispose()
2813
+ } catch {
2814
+ /* ignore */
2815
+ }
2816
+ terminalManageState.term = null
2817
+ }
2818
+ terminalManageState.fitAddon = null
2819
+ if (terminalMount) terminalMount.innerHTML = ''
2820
+ }
2821
+
2822
+ /** 建立 PTY WebSocket 并挂载 xterm */
2823
+ function connectTerminalWs() {
2824
+ if (typeof Terminal === 'undefined' || typeof FitAddon === 'undefined') {
2825
+ setTerminalPanelState('终端组件未加载', true)
2826
+ return
2827
+ }
2828
+ /** script 标签加载的 UMD 包将构造函数挂在 FitAddon.FitAddon 上 */
2829
+ const FitAddonCtor =
2830
+ typeof FitAddon === 'function' ? FitAddon : FitAddon.FitAddon
2831
+ if (typeof FitAddonCtor !== 'function') {
2832
+ setTerminalPanelState('FitAddon 加载异常', true)
2833
+ return
2834
+ }
2835
+ destroyTerminalSession()
2836
+ setTerminalPanelState('连接中…', false)
2837
+
2838
+ const term = new Terminal({
2839
+ cursorBlink: true,
2840
+ fontSize: 14,
2841
+ fontFamily: 'Menlo, Monaco, "Courier New", monospace',
2842
+ theme: {
2843
+ background: '#1a1a1c',
2844
+ foreground: '#e8e8ea',
2845
+ cursor: '#0a84ff',
2846
+ selectionBackground: 'rgba(10, 132, 255, 0.28)',
2847
+ },
2848
+ })
2849
+ const fitAddon = new FitAddonCtor()
2850
+ term.loadAddon(fitAddon)
2851
+ if (terminalMount) {
2852
+ term.open(terminalMount)
2853
+ fitAddon.fit()
2854
+ }
2855
+ terminalManageState.term = term
2856
+ terminalManageState.fitAddon = fitAddon
2857
+
2858
+ const ws = new WebSocket(buildTerminalWsUrl())
2859
+ ws.binaryType = 'arraybuffer'
2860
+ terminalManageState.ws = ws
2861
+
2862
+ ws.onopen = function () {
2863
+ setTerminalPanelState('', false)
2864
+ fitAddon.fit()
2865
+ sendTerminalResize()
2866
+ term.focus()
2867
+ }
2868
+
2869
+ ws.onmessage = function (ev) {
2870
+ if (typeof ev.data === 'string') {
2871
+ try {
2872
+ const msg = JSON.parse(ev.data)
2873
+ if (msg && msg.type === 'exit') {
2874
+ term.writeln('\r\n[shell 已退出,退出码: ' + msg.code + ']')
2875
+ setTerminalPanelState('shell 已退出', false)
2876
+ } else if (msg && msg.type === 'error') {
2877
+ setTerminalPanelState(msg.message || '终端错误', true)
2878
+ }
2879
+ } catch {
2880
+ /* ignore */
2881
+ }
2882
+ return
2883
+ }
2884
+ if (ev.data instanceof ArrayBuffer) {
2885
+ term.write(new Uint8Array(ev.data))
2886
+ }
2887
+ }
2888
+
2889
+ ws.onerror = function () {
2890
+ setTerminalPanelState('WebSocket 连接失败', true)
2891
+ }
2892
+
2893
+ ws.onclose = function () {
2894
+ if (terminalManageState.viewActive) {
2895
+ setTerminalPanelState('连接已断开', false)
2896
+ }
2897
+ }
2898
+
2899
+ terminalManageState.onDataDisposable = term.onData(function (data) {
2900
+ if (!ws || ws.readyState !== WebSocket.OPEN) return
2901
+ ws.send(new TextEncoder().encode(data))
2902
+ })
2903
+
2904
+ if (terminalMount && typeof ResizeObserver !== 'undefined') {
2905
+ const ro = new ResizeObserver(function () {
2906
+ if (!terminalManageState.fitAddon || !terminalManageState.term) return
2907
+ terminalManageState.fitAddon.fit()
2908
+ sendTerminalResize()
2909
+ })
2910
+ ro.observe(terminalMount)
2911
+ terminalManageState.resizeObserver = ro
2912
+ }
2913
+ }
2914
+
2915
+ /** 切换命令行主视图与聊天区可见性 */
2916
+ function setTerminalManageVisible(visible) {
2917
+ if (visible) {
2918
+ closeAgentSettingsView()
2919
+ closePickerManageView(false)
2920
+ closeScheduleManageView(false)
2921
+ repoManageState.viewActive = false
2922
+ if (repoManageView) repoManageView.hidden = true
2923
+ if (btnManageRepo) btnManageRepo.classList.remove('is-active')
2924
+ } else {
2925
+ destroyTerminalSession()
2926
+ }
2927
+ terminalManageState.viewActive = visible
2928
+ if (terminalManageView) terminalManageView.hidden = !visible
2929
+ if (chatWorkspace) chatWorkspace.hidden = visible
2930
+ if (chatComposer) chatComposer.hidden = visible
2931
+ if (mainHeaderEl) mainHeaderEl.hidden = false
2932
+ if (visible) {
2933
+ if (mainTitleEl) mainTitleEl.textContent = '命令行'
2934
+ if (mainSubEl) {
2935
+ mainSubEl.textContent = ''
2936
+ mainSubEl.hidden = true
2937
+ }
2938
+ } else {
2939
+ setTerminalPanelState('', false)
2940
+ if (btnManageTerminal) btnManageTerminal.classList.remove('is-active')
2941
+ updateMainHeader()
2942
+ }
2943
+ }
2944
+
2945
+ /** 关闭命令行视图,回到聊天 */
2946
+ function closeTerminalManageView() {
2947
+ if (!terminalManageState.viewActive) return
2948
+ setTerminalManageVisible(false)
2949
+ }
2950
+
2951
+ /** 打开命令行:切换主区域并连接 PTY */
2952
+ function openTerminalManageView() {
2953
+ if (!terminalManageView) return
2954
+ setTerminalManageVisible(true)
2955
+ if (btnManageTerminal) btnManageTerminal.classList.add('is-active')
2956
+ connectTerminalWs()
2957
+ }
2958
+
2562
2959
  /** 当前是否在 Agent 设置主视图 */
2563
2960
  function isAgentSettingsViewActive() {
2564
2961
  return agentSettingsState.viewActive
@@ -2706,6 +3103,11 @@
2706
3103
  const scheduleManageState = {
2707
3104
  viewActive: false,
2708
3105
  contentView: 'list',
3106
+ page: 1,
3107
+ pageSize: 10,
3108
+ total: 0,
3109
+ totalPages: 0,
3110
+ loading: false,
2709
3111
  }
2710
3112
 
2711
3113
  /** 切换定时任务列表与执行记录面板 */
@@ -2720,6 +3122,7 @@
2720
3122
  if (visible) {
2721
3123
  closeAgentSettingsView()
2722
3124
  closePickerManageView(false)
3125
+ closeTerminalManageView()
2723
3126
  repoManageState.viewActive = false
2724
3127
  if (repoManageView) repoManageView.hidden = true
2725
3128
  if (btnManageRepo) btnManageRepo.classList.remove('is-active')
@@ -2763,6 +3166,7 @@
2763
3166
  closeAgentSettingsView()
2764
3167
  closePickerManageView(false)
2765
3168
  closeScheduleManageView(false)
3169
+ closeTerminalManageView()
2766
3170
  }
2767
3171
  repoManageState.viewActive = visible
2768
3172
  if (repoManageView) repoManageView.hidden = !visible
@@ -2794,6 +3198,7 @@
2794
3198
  if (visible) {
2795
3199
  closePickerManageView(false)
2796
3200
  closeScheduleManageView(false)
3201
+ closeTerminalManageView()
2797
3202
  repoManageState.viewActive = false
2798
3203
  if (repoManageView) repoManageView.hidden = true
2799
3204
  if (btnManageRepo) btnManageRepo.classList.remove('is-active')
@@ -2835,6 +3240,7 @@
2835
3240
  if (visible) {
2836
3241
  closeAgentSettingsView()
2837
3242
  closeScheduleManageView(false)
3243
+ closeTerminalManageView()
2838
3244
  repoManageState.viewActive = false
2839
3245
  if (repoManageView) repoManageView.hidden = true
2840
3246
  if (btnManageRepo) btnManageRepo.classList.remove('is-active')
@@ -3497,13 +3903,36 @@
3497
3903
  return formatScheduleFireAt(task.nextFireAt)
3498
3904
  }
3499
3905
 
3906
+ /** 渲染定时任务列表分页控件 */
3907
+ function renderScheduleTasksPager() {
3908
+ if (!scheduleTasksPager) return
3909
+ scheduleTasksPager.innerHTML = ''
3910
+ const totalPages = scheduleManageState.totalPages || 0
3911
+ scheduleTasksPager.hidden = totalPages <= 1
3912
+ if (totalPages <= 1) return
3913
+ const pager = createCloudPager(scheduleManageState, function (nextPage) {
3914
+ void loadScheduleTasks(nextPage).catch(function (e) {
3915
+ window.alert('加载失败: ' + e)
3916
+ })
3917
+ })
3918
+ scheduleTasksPager.appendChild(pager)
3919
+ }
3920
+
3500
3921
  /** 渲染定时任务表格 */
3501
- function renderScheduleTaskTable(tasks, timezone) {
3922
+ function renderScheduleTaskTable(tasks, timezone, total) {
3502
3923
  if (!scheduleTaskTableBody || !scheduleManageEmpty) return
3503
3924
  scheduleTaskTableBody.innerHTML = ''
3504
3925
  const list = Array.isArray(tasks) ? tasks : []
3505
- scheduleManageEmpty.hidden = list.length > 0
3506
- if (list.length > 0) scheduleManageEmpty.classList.remove('is-error')
3926
+ const totalCount =
3927
+ typeof total === 'number' && Number.isFinite(total) ? total : list.length
3928
+ if (totalCount > 0) {
3929
+ scheduleManageEmpty.hidden = true
3930
+ scheduleManageEmpty.classList.remove('is-error')
3931
+ } else {
3932
+ scheduleManageEmpty.hidden = false
3933
+ scheduleManageEmpty.textContent = '暂无定时任务'
3934
+ scheduleManageEmpty.classList.remove('is-error')
3935
+ }
3507
3936
  for (let i = 0; i < list.length; i++) {
3508
3937
  const task = list[i]
3509
3938
  if (!task || !task.id) continue
@@ -3559,18 +3988,42 @@
3559
3988
  }
3560
3989
  if (scheduleManageMeta) {
3561
3990
  scheduleManageMeta.textContent =
3562
- '时区: ' + (timezone || 'local') + ' · 共 ' + list.length + ' 个任务'
3991
+ '时区: ' +
3992
+ (timezone || 'local') +
3993
+ ' · 共 ' +
3994
+ totalCount +
3995
+ ' 个任务' +
3996
+ (scheduleManageState.totalPages > 1
3997
+ ? ' · 第 ' +
3998
+ scheduleManageState.page +
3999
+ '/' +
4000
+ scheduleManageState.totalPages +
4001
+ ' 页'
4002
+ : '')
3563
4003
  }
4004
+ renderScheduleTasksPager()
3564
4005
  }
3565
4006
 
3566
- /** 拉取 agent 全部定时任务 */
3567
- async function loadScheduleTasks() {
3568
- const res = await fetch(buildSchedulesUrl())
4007
+ /** 拉取 agent 定时任务(按创建时间倒序,分页) */
4008
+ async function loadScheduleTasks(page) {
4009
+ if (typeof page === 'number' && page >= 1) {
4010
+ scheduleManageState.page = page
4011
+ }
4012
+ scheduleManageState.loading = true
4013
+ renderScheduleTasksPager()
4014
+ const res = await fetch(
4015
+ buildSchedulesUrl(scheduleManageState.page, scheduleManageState.pageSize),
4016
+ )
3569
4017
  const body = await res.json()
4018
+ scheduleManageState.loading = false
3570
4019
  if (!res.ok) {
3571
4020
  throw new Error(body.message || body.error || res.statusText)
3572
4021
  }
3573
- renderScheduleTaskTable(body.tasks, body.timezone)
4022
+ scheduleManageState.page = Number(body.page) || scheduleManageState.page
4023
+ scheduleManageState.pageSize = Number(body.pageSize) || scheduleManageState.pageSize
4024
+ scheduleManageState.total = Number(body.total) || 0
4025
+ scheduleManageState.totalPages = Number(body.totalPages) || 0
4026
+ renderScheduleTaskTable(body.tasks, body.timezone, scheduleManageState.total)
3574
4027
  return body
3575
4028
  }
3576
4029
 
@@ -3623,7 +4076,7 @@
3623
4076
  if (scheduleCreateForm) scheduleCreateForm.hidden = true
3624
4077
  if (scheduleTaskNameInput) scheduleTaskNameInput.value = ''
3625
4078
  if (schedulePromptInput) schedulePromptInput.value = ''
3626
- await loadScheduleTasks()
4079
+ await loadScheduleTasks(1)
3627
4080
  }
3628
4081
 
3629
4082
  function buildScheduleRunUrl(id) {
@@ -3701,8 +4154,14 @@
3701
4154
  if (!scheduleRunsTableBody || !scheduleRunsEmpty) return
3702
4155
  scheduleRunsTableBody.innerHTML = ''
3703
4156
  const list = Array.isArray(runs) ? runs : []
3704
- scheduleRunsEmpty.hidden = list.length > 0
3705
- if (list.length > 0) scheduleRunsEmpty.classList.remove('is-error')
4157
+ if (list.length > 0) {
4158
+ scheduleRunsEmpty.hidden = true
4159
+ scheduleRunsEmpty.classList.remove('is-error')
4160
+ } else {
4161
+ scheduleRunsEmpty.hidden = false
4162
+ scheduleRunsEmpty.textContent = '暂无执行记录'
4163
+ scheduleRunsEmpty.classList.remove('is-error')
4164
+ }
3706
4165
  if (scheduleRunResultPre) {
3707
4166
  scheduleRunResultPre.hidden = true
3708
4167
  scheduleRunResultPre.textContent = ''
@@ -3865,14 +4324,19 @@
3865
4324
  if (!scheduleManageView) return
3866
4325
  setScheduleContentView('list')
3867
4326
  setScheduleManageVisible(true)
4327
+ scheduleManageState.page = 1
3868
4328
  if (scheduleTaskTableBody) scheduleTaskTableBody.innerHTML = ''
4329
+ if (scheduleTasksPager) {
4330
+ scheduleTasksPager.innerHTML = ''
4331
+ scheduleTasksPager.hidden = true
4332
+ }
3869
4333
  if (scheduleManageEmpty) {
3870
4334
  scheduleManageEmpty.hidden = false
3871
4335
  scheduleManageEmpty.textContent = '加载中…'
3872
4336
  scheduleManageEmpty.classList.remove('is-error')
3873
4337
  }
3874
4338
  try {
3875
- await loadScheduleTasks()
4339
+ await loadScheduleTasks(1)
3876
4340
  } catch (e) {
3877
4341
  if (scheduleManageEmpty) {
3878
4342
  scheduleManageEmpty.hidden = false
@@ -4941,6 +5405,14 @@
4941
5405
  const sid = sessionIdInput ? sessionIdInput.value.trim() : ''
4942
5406
  updatePromptSessionInfo()
4943
5407
  if (!mainTitleEl) return
5408
+ if (isTerminalManageViewActive()) {
5409
+ mainTitleEl.textContent = '命令行'
5410
+ if (mainSubEl) {
5411
+ mainSubEl.textContent = ''
5412
+ mainSubEl.hidden = true
5413
+ }
5414
+ return
5415
+ }
4944
5416
  if (isRepoManageViewActive()) {
4945
5417
  mainTitleEl.textContent = '文件'
4946
5418
  if (mainSubEl) {
@@ -4949,6 +5421,23 @@
4949
5421
  }
4950
5422
  return
4951
5423
  }
5424
+ if (scheduleManageState.viewActive) {
5425
+ mainTitleEl.textContent = '定时任务'
5426
+ if (mainSubEl) {
5427
+ mainSubEl.textContent = ''
5428
+ mainSubEl.hidden = true
5429
+ }
5430
+ return
5431
+ }
5432
+ if (pickerManageState.viewActive) {
5433
+ mainTitleEl.textContent =
5434
+ PICKER_KIND_TITLES[pickerManageState.kind] || '管理'
5435
+ if (mainSubEl) {
5436
+ mainSubEl.textContent = ''
5437
+ mainSubEl.hidden = true
5438
+ }
5439
+ return
5440
+ }
4952
5441
  if (isAgentSettingsViewActive()) {
4953
5442
  mainTitleEl.textContent = '设置'
4954
5443
  if (mainSubEl) {
@@ -5220,6 +5709,7 @@
5220
5709
 
5221
5710
  function switchToSession(id) {
5222
5711
  closeRepoManageView()
5712
+ closeTerminalManageView()
5223
5713
  closeAgentSettingsView()
5224
5714
  closePickerManageView()
5225
5715
  closeScheduleManageView(false)
@@ -5379,6 +5869,7 @@
5379
5869
  const text = getPromptPlainText()
5380
5870
  const trimmed = text.trim()
5381
5871
  if (!trimmed) return
5872
+ resetApiErrorTurnState()
5382
5873
  setPendingUserEcho(trimmed)
5383
5874
  const payload = { type: 'prompt', text: text }
5384
5875
  autoScrollState.mode = 'FORCE_ON_SEND'
@@ -7766,6 +8257,7 @@
7766
8257
  ev.preventDefault()
7767
8258
  ev.stopPropagation()
7768
8259
  closeRepoManageView()
8260
+ closeTerminalManageView()
7769
8261
  closeAgentSettingsView()
7770
8262
  closePickerManageView(false)
7771
8263
  const items = sidebarNavEl.querySelectorAll('.sidebar-nav-row')
@@ -7780,6 +8272,7 @@
7780
8272
  ev.stopPropagation()
7781
8273
  closeScheduleManageView(false)
7782
8274
  closePickerManageView(false)
8275
+ closeTerminalManageView()
7783
8276
  const items = sidebarNavEl.querySelectorAll('.sidebar-nav-row')
7784
8277
  for (let i = 0; i < items.length; i++) {
7785
8278
  items[i].classList.toggle('is-active', items[i] === btn)
@@ -7787,10 +8280,25 @@
7787
8280
  void openRepoManageView()
7788
8281
  return
7789
8282
  }
8283
+ if (k === 'terminal') {
8284
+ ev.preventDefault()
8285
+ ev.stopPropagation()
8286
+ closeScheduleManageView(false)
8287
+ closePickerManageView(false)
8288
+ closeRepoManageView()
8289
+ closeAgentSettingsView()
8290
+ const items = sidebarNavEl.querySelectorAll('.sidebar-nav-row')
8291
+ for (let i = 0; i < items.length; i++) {
8292
+ items[i].classList.toggle('is-active', items[i] === btn)
8293
+ }
8294
+ openTerminalManageView()
8295
+ return
8296
+ }
7790
8297
  if (k === 'tools' || k === 'mcp' || k === 'skills' || k === 'agentTeams') {
7791
8298
  ev.preventDefault()
7792
8299
  ev.stopPropagation()
7793
8300
  closeRepoManageView()
8301
+ closeTerminalManageView()
7794
8302
  closeAgentSettingsView()
7795
8303
  closeScheduleManageView(false)
7796
8304
  const items = sidebarNavEl.querySelectorAll('.sidebar-nav-row')
@@ -8177,6 +8685,7 @@
8177
8685
  function openAgentSettingsView(initialTab) {
8178
8686
  if (!agentSettingsView) return
8179
8687
  closeRepoManageView()
8688
+ closeTerminalManageView()
8180
8689
  closePickerManageView(false)
8181
8690
  closeScheduleManageView(false)
8182
8691
  if (initialTab === 'agentMd' || initialTab === 'settings') {
@@ -8469,14 +8978,6 @@
8469
8978
  : ''
8470
8979
  const value = String(raw ?? '').trim()
8471
8980
  if (!value) continue
8472
- if (field.key === TUITUI_CHANNEL_SESSION_KEY) {
8473
- if (!TUITUI_CHANNEL_SESSION_ALLOWED.has(value)) {
8474
- return {
8475
- ok: false,
8476
- message: 'TUITUI_CHANNEL_SESSION 只允许 0(禁用)或 1(启用)',
8477
- }
8478
- }
8479
- }
8480
8981
  out[field.key] = value
8481
8982
  }
8482
8983
  return { ok: true, env: out }