@auto-ai/agent 2.1.167 → 2.1.170

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 (847) hide show
  1. package/.env.example +7 -0
  2. package/dist/safe-a/404/index.html +1 -0
  3. package/dist/safe-a/404.html +1 -0
  4. package/dist/safe-a/_next/static/GEpoLDHgyzXdgHMKRqrNr/_buildManifest.js +14 -0
  5. package/dist/safe-a/_next/static/chunks/00b0744649a5e608.js +1 -0
  6. package/dist/safe-a/_next/static/chunks/00f91b7d88f62204.js +1 -0
  7. package/dist/safe-a/_next/static/chunks/02339beb679bec8d.js +1 -0
  8. package/dist/safe-a/_next/static/chunks/025f9752d60b79ce.js +1 -0
  9. package/dist/safe-a/_next/static/chunks/03039556684e9812.js +1 -0
  10. package/dist/safe-a/_next/static/chunks/03af20498d43b518.js +1 -0
  11. package/dist/safe-a/_next/static/chunks/03c48f22d87b83a9.js +1 -0
  12. package/dist/safe-a/_next/static/chunks/04ed04c00511a337.js +1 -0
  13. package/dist/safe-a/_next/static/chunks/0518cc63903bebac.js +1 -0
  14. package/dist/safe-a/_next/static/chunks/05ac495e860ba7c2.js +1 -0
  15. package/dist/safe-a/_next/static/chunks/06e2cd3fae94aae8.js +1 -0
  16. package/dist/safe-a/_next/static/chunks/0708a65cc3ecf56b.js +1 -0
  17. package/dist/safe-a/_next/static/chunks/078aea2e54474461.js +5 -0
  18. package/dist/safe-a/_next/static/chunks/0835edf516aebfa0.js +1 -0
  19. package/dist/safe-a/_next/static/chunks/08ecdb579e7fd3de.js +1 -0
  20. package/dist/safe-a/_next/static/chunks/093669121f3b7aa1.js +1 -0
  21. package/dist/safe-a/_next/static/chunks/0c19efa935cdd816.js +1 -0
  22. package/dist/safe-a/_next/static/chunks/0e68cace7cf0464c.js +1 -0
  23. package/dist/safe-a/_next/static/chunks/0f93a62e5e2db48b.js +1 -0
  24. package/dist/safe-a/_next/static/chunks/10924447cee18191.js +1 -0
  25. package/dist/safe-a/_next/static/chunks/1116b1064a071974.js +1 -0
  26. package/dist/safe-a/_next/static/chunks/125b77ecc6b4189f.js +1 -0
  27. package/dist/safe-a/_next/static/chunks/12932eb7d288b09b.js +1 -0
  28. package/dist/safe-a/_next/static/chunks/129875fd1b096964.js +1 -0
  29. package/dist/safe-a/_next/static/chunks/1386362cdfd92116.js +1 -0
  30. package/dist/safe-a/_next/static/chunks/18e062f9f23f27c0.js +1 -0
  31. package/dist/safe-a/_next/static/chunks/19a47cfc8ca4c0a7.js +1 -0
  32. package/dist/safe-a/_next/static/chunks/1a91a01fbaf01e7e.js +1 -0
  33. package/dist/safe-a/_next/static/chunks/1aaf9fb00fb53ef9.js +1 -0
  34. package/dist/safe-a/_next/static/chunks/1b739dfdbcce05bd.js +1 -0
  35. package/dist/safe-a/_next/static/chunks/1c1f2b4adafc2442.js +1 -0
  36. package/dist/safe-a/_next/static/chunks/1d0273aae0bc102c.js +1 -0
  37. package/dist/safe-a/_next/static/chunks/1d737ed6e08d2466.js +1 -0
  38. package/dist/safe-a/_next/static/chunks/1df41f8d439107ef.js +1 -0
  39. package/dist/safe-a/_next/static/chunks/1f90e84b5a4dad81.js +1 -0
  40. package/dist/safe-a/_next/static/chunks/1faaa282be969b14.js +1 -0
  41. package/dist/safe-a/_next/static/chunks/217c50478c5ea4d7.js +1 -0
  42. package/dist/safe-a/_next/static/chunks/232cc01daaf29e5d.js +1 -0
  43. package/dist/safe-a/_next/static/chunks/2331e2a388a9bd50.js +1 -0
  44. package/dist/safe-a/_next/static/chunks/23f50ba74d421ab3.js +1 -0
  45. package/dist/safe-a/_next/static/chunks/261bf96e2331ea0a.js +1 -0
  46. package/dist/safe-a/_next/static/chunks/27b3d30516d46fc8.js +1 -0
  47. package/dist/safe-a/_next/static/chunks/2854919e0953bd0d.js +1 -0
  48. package/dist/safe-a/_next/static/chunks/29105a13d179d5b2.js +1 -0
  49. package/dist/safe-a/_next/static/chunks/29403b19d94e37bb.js +1 -0
  50. package/dist/safe-a/_next/static/chunks/29a317486c4ab7d7.js +1 -0
  51. package/dist/safe-a/_next/static/chunks/29cf9e89be8a7f75.js +1 -0
  52. package/dist/safe-a/_next/static/chunks/29f39316c32518a2.js +1 -0
  53. package/dist/safe-a/_next/static/chunks/2a07e0d1ef712b41.js +1 -0
  54. package/dist/safe-a/_next/static/chunks/2b38c2b26760e4cb.js +1 -0
  55. package/dist/safe-a/_next/static/chunks/2bb180b50bafe979.js +1 -0
  56. package/dist/safe-a/_next/static/chunks/2bd512c6acf9ee9b.js +1 -0
  57. package/dist/safe-a/_next/static/chunks/2be2d49054d4606c.js +1 -0
  58. package/dist/safe-a/_next/static/chunks/2c0b2fd9fb2fea66.js +1 -0
  59. package/dist/safe-a/_next/static/chunks/2ccdfcf9ecfa2ea8.js +1 -0
  60. package/dist/safe-a/_next/static/chunks/2ce249001ad95013.js +1 -0
  61. package/dist/safe-a/_next/static/chunks/2ddf153879790e6a.js +1 -0
  62. package/dist/safe-a/_next/static/chunks/2f35f32799fb08ac.js +1 -0
  63. package/dist/safe-a/_next/static/chunks/2fcbd3cabd5261f8.js +1 -0
  64. package/dist/safe-a/_next/static/chunks/30c0274cb379ab0d.js +1 -0
  65. package/dist/safe-a/_next/static/chunks/30f37e8e02339538.js +1 -0
  66. package/dist/safe-a/_next/static/chunks/314748f34f8e81bb.js +1 -0
  67. package/dist/safe-a/_next/static/chunks/333630802bd6f1a6.js +1 -0
  68. package/dist/safe-a/_next/static/chunks/33e878df066811db.js +1 -0
  69. package/dist/safe-a/_next/static/chunks/3422b2c2f9bdf0e0.js +1 -0
  70. package/dist/safe-a/_next/static/chunks/35db6eb7eec8b825.js +1 -0
  71. package/dist/safe-a/_next/static/chunks/36897fabf62bf445.js +1 -0
  72. package/dist/safe-a/_next/static/chunks/37615c61dd14fc8d.js +1 -0
  73. package/dist/safe-a/_next/static/chunks/37f3ea0b3cf40bca.js +1 -0
  74. package/dist/safe-a/_next/static/chunks/38dcdbfb8c6966a9.js +1 -0
  75. package/dist/safe-a/_next/static/chunks/38decd5cd3fe2525.js +1 -0
  76. package/dist/safe-a/_next/static/chunks/3b0acee8a8035ee7.js +1 -0
  77. package/dist/safe-a/_next/static/chunks/3d9ee9c4bc8e29b2.js +1 -0
  78. package/dist/safe-a/_next/static/chunks/3da255bcf22e013d.js +1 -0
  79. package/dist/safe-a/_next/static/chunks/3e45de4a81d1f7a6.js +1 -0
  80. package/dist/safe-a/_next/static/chunks/3ecc6705303560ea.js +1 -0
  81. package/dist/safe-a/_next/static/chunks/3f18c3fa64301e74.js +1 -0
  82. package/dist/safe-a/_next/static/chunks/3fe95be4b92470e2.js +1 -0
  83. package/dist/safe-a/_next/static/chunks/404f44571be80b78.js +1 -0
  84. package/dist/safe-a/_next/static/chunks/405cd8dd7faa6eaf.js +1 -0
  85. package/dist/safe-a/_next/static/chunks/405de186b610394b.js +1 -0
  86. package/dist/safe-a/_next/static/chunks/4064e59727cba9b0.js +1 -0
  87. package/dist/safe-a/_next/static/chunks/435e18828af1d066.js +1 -0
  88. package/dist/safe-a/_next/static/chunks/4385d9dba96b7614.js +1 -0
  89. package/dist/safe-a/_next/static/chunks/44e9e0394b7b6f31.js +1 -0
  90. package/dist/safe-a/_next/static/chunks/46568a8bad984d09.js +1 -0
  91. package/dist/safe-a/_next/static/chunks/47098fcba8e98974.js +1 -0
  92. package/dist/safe-a/_next/static/chunks/472047ea96adfca5.js +1 -0
  93. package/dist/safe-a/_next/static/chunks/473249ae7830085a.js +1 -0
  94. package/dist/safe-a/_next/static/chunks/47c632214f4d3a5c.js +1 -0
  95. package/dist/safe-a/_next/static/chunks/47d485f30e419da8.js +1 -0
  96. package/dist/safe-a/_next/static/chunks/4c19e1ee54dac526.js +1 -0
  97. package/dist/safe-a/_next/static/chunks/4c85c84ca0d7ca5c.js +1 -0
  98. package/dist/safe-a/_next/static/chunks/4c87634b39751c56.js +1 -0
  99. package/dist/safe-a/_next/static/chunks/4cd41b402679f77d.js +1 -0
  100. package/dist/safe-a/_next/static/chunks/4d30478be74fb192.js +1 -0
  101. package/dist/safe-a/_next/static/chunks/4df5dd4e3c591164.js +1 -0
  102. package/dist/safe-a/_next/static/chunks/502779251884e330.js +1 -0
  103. package/dist/safe-a/_next/static/chunks/503bbec2e3179a3c.js +1 -0
  104. package/dist/safe-a/_next/static/chunks/5071381bdd700d6c.js +1 -0
  105. package/dist/safe-a/_next/static/chunks/5076e29ddf662e81.js +1 -0
  106. package/dist/safe-a/_next/static/chunks/50c602f1b79d61a7.js +1 -0
  107. package/dist/safe-a/_next/static/chunks/50cbc92b0512838a.js +1 -0
  108. package/dist/safe-a/_next/static/chunks/50f270f87470ca73.js +1 -0
  109. package/dist/safe-a/_next/static/chunks/5153542043b58066.js +1 -0
  110. package/dist/safe-a/_next/static/chunks/523d30dc7b2f29be.js +1 -0
  111. package/dist/safe-a/_next/static/chunks/5385bf74559eeabd.js +1 -0
  112. package/dist/safe-a/_next/static/chunks/54169c1554845574.js +1 -0
  113. package/dist/safe-a/_next/static/chunks/5452d182bb136a51.js +1 -0
  114. package/dist/safe-a/_next/static/chunks/5474db37e4b450e8.js +1 -0
  115. package/dist/safe-a/_next/static/chunks/547eb82208058c71.js +1 -0
  116. package/dist/safe-a/_next/static/chunks/54a2df4508a1c311.js +1 -0
  117. package/dist/safe-a/_next/static/chunks/55e32e78e4db3889.js +1 -0
  118. package/dist/safe-a/_next/static/chunks/564507763428bfb0.js +1 -0
  119. package/dist/safe-a/_next/static/chunks/568061ca1300bae8.js +5 -0
  120. package/dist/safe-a/_next/static/chunks/569dda34679bca70.js +1 -0
  121. package/dist/safe-a/_next/static/chunks/57bc9169370081d7.js +1 -0
  122. package/dist/safe-a/_next/static/chunks/57e13ec897ff78d6.js +1 -0
  123. package/dist/safe-a/_next/static/chunks/591fe54d06e0a33e.js +1 -0
  124. package/dist/safe-a/_next/static/chunks/592e7a6b713dc645.js +1 -0
  125. package/dist/safe-a/_next/static/chunks/599abea9ac64aaf1.js +1 -0
  126. package/dist/safe-a/_next/static/chunks/5a43f7cd89a42167.js +1 -0
  127. package/dist/safe-a/_next/static/chunks/5ad5a5ee1cc648ae.js +1 -0
  128. package/dist/safe-a/_next/static/chunks/5ae21c9105c6abb4.js +1 -0
  129. package/dist/safe-a/_next/static/chunks/5b8ec6577fda27e2.js +1 -0
  130. package/dist/safe-a/_next/static/chunks/5c076874caf0532e.js +1 -0
  131. package/dist/safe-a/_next/static/chunks/5c2a7e118fa66960.js +1 -0
  132. package/dist/safe-a/_next/static/chunks/5ca0c9bb26daf732.js +1 -0
  133. package/dist/safe-a/_next/static/chunks/5cec026c430f6fc0.js +1 -0
  134. package/dist/safe-a/_next/static/chunks/6349c7cf3b394b81.js +1 -0
  135. package/dist/safe-a/_next/static/chunks/63f33483697b26ca.js +1 -0
  136. package/dist/safe-a/_next/static/chunks/645741ee91707763.js +1 -0
  137. package/dist/safe-a/_next/static/chunks/648649ebbc7565b9.js +1 -0
  138. package/dist/safe-a/_next/static/chunks/65159d9aa3ecc0c9.js +1 -0
  139. package/dist/safe-a/_next/static/chunks/65963496d7fa49bc.js +1 -0
  140. package/dist/safe-a/_next/static/chunks/65ee07c4b6209141.js +1 -0
  141. package/dist/safe-a/_next/static/chunks/66247e9b3cf471f5.js +1 -0
  142. package/dist/safe-a/_next/static/chunks/6818b9385873d081.js +1 -0
  143. package/dist/safe-a/_next/static/chunks/68ca890844b706f0.js +1 -0
  144. package/dist/safe-a/_next/static/chunks/6960a33147147a27.js +1 -0
  145. package/dist/safe-a/_next/static/chunks/6d0bf0ac1fdb7eab.js +1 -0
  146. package/dist/safe-a/_next/static/chunks/6e145bea7acc82b4.js +1 -0
  147. package/dist/safe-a/_next/static/chunks/6e4e92cbcf961542.js +1 -0
  148. package/dist/safe-a/_next/static/chunks/6e663a2e3562125c.js +1 -0
  149. package/dist/safe-a/_next/static/chunks/6ecccb36549d3028.js +1 -0
  150. package/dist/safe-a/_next/static/chunks/6f6140cbad7cdeea.js +1 -0
  151. package/dist/safe-a/_next/static/chunks/6faa53698dc67904.js +1 -0
  152. package/dist/safe-a/_next/static/chunks/6fc97877fbcf3403.js +1 -0
  153. package/dist/safe-a/_next/static/chunks/70b95d96e33a5d63.js +1 -0
  154. package/dist/safe-a/_next/static/chunks/727dc45d24782155.js +1 -0
  155. package/dist/safe-a/_next/static/chunks/738c808ddc82ea44.js +1 -0
  156. package/dist/safe-a/_next/static/chunks/740732a162598c49.js +1 -0
  157. package/dist/safe-a/_next/static/chunks/743fcc76fa73e3f3.js +1 -0
  158. package/dist/safe-a/_next/static/chunks/74d8d2b653f61b70.js +1 -0
  159. package/dist/safe-a/_next/static/chunks/774e554c11c8759a.js +1 -0
  160. package/dist/safe-a/_next/static/chunks/784ee151431c6634.js +1 -0
  161. package/dist/safe-a/_next/static/chunks/78e956ecc59759b3.js +1 -0
  162. package/dist/safe-a/_next/static/chunks/7afa34c1dc058648.js +1 -0
  163. package/dist/safe-a/_next/static/chunks/7b34873e2b22211d.js +1 -0
  164. package/dist/safe-a/_next/static/chunks/7b6898a7f9df6495.js +1 -0
  165. package/dist/safe-a/_next/static/chunks/7bd04dff1e0d3a01.js +1 -0
  166. package/dist/safe-a/_next/static/chunks/7c10191806133cb4.js +1 -0
  167. package/dist/safe-a/_next/static/chunks/7c4b1ab5c0f1b167.js +1 -0
  168. package/dist/safe-a/_next/static/chunks/7cd0d9159e722599.js +1 -0
  169. package/dist/safe-a/_next/static/chunks/7d210744c047b2bb.js +1 -0
  170. package/dist/safe-a/_next/static/chunks/7d7ef3758ed7347b.js +1 -0
  171. package/dist/safe-a/_next/static/chunks/7e5b28d162f1ea9d.js +1 -0
  172. package/dist/safe-a/_next/static/chunks/7ed753f2db91bc38.js +1 -0
  173. package/dist/safe-a/_next/static/chunks/7f167fb0dbc03180.js +1 -0
  174. package/dist/safe-a/_next/static/chunks/7f611b9b215dfcef.js +1 -0
  175. package/dist/safe-a/_next/static/chunks/80bd106b26a076af.js +1 -0
  176. package/dist/safe-a/_next/static/chunks/826c64c8601264b1.js +1 -0
  177. package/dist/safe-a/_next/static/chunks/829196dbf7eddb51.js +1 -0
  178. package/dist/safe-a/_next/static/chunks/82aea21a16d00076.js +1 -0
  179. package/dist/safe-a/_next/static/chunks/82cdf7e6dbe7070d.js +1 -0
  180. package/dist/safe-a/_next/static/chunks/83a80f59afe8f7f4.js +1 -0
  181. package/dist/safe-a/_next/static/chunks/84ac0be00d5a7734.js +1 -0
  182. package/dist/safe-a/_next/static/chunks/868f60fa1a2ff26b.js +1 -0
  183. package/dist/safe-a/_next/static/chunks/86c0a63bf95598a3.js +1 -0
  184. package/dist/safe-a/_next/static/chunks/878dd96f8fcd6bd4.js +1 -0
  185. package/dist/safe-a/_next/static/chunks/87b0002602934525.js +1 -0
  186. package/dist/safe-a/_next/static/chunks/882686dd3b63f9d1.js +1 -0
  187. package/dist/safe-a/_next/static/chunks/88e4cdcdeff36154.js +1 -0
  188. package/dist/safe-a/_next/static/chunks/8aafb8ec5208a445.js +1 -0
  189. package/dist/safe-a/_next/static/chunks/8b1990cf2eb41663.js +1 -0
  190. package/dist/safe-a/_next/static/chunks/8c8b1e40b00409f5.js +1 -0
  191. package/dist/safe-a/_next/static/chunks/8c97e3b556b32001.js +1 -0
  192. package/dist/safe-a/_next/static/chunks/8cee526b3846c40b.js +1 -0
  193. package/dist/safe-a/_next/static/chunks/8e33e395e6224908.js +1 -0
  194. package/dist/safe-a/_next/static/chunks/8ead3da37182ce4c.js +1 -0
  195. package/dist/safe-a/_next/static/chunks/8ebfebffa66b3ca7.js +1 -0
  196. package/dist/safe-a/_next/static/chunks/92116f4ce954ae13.js +1 -0
  197. package/dist/safe-a/_next/static/chunks/93588b2335ca95de.js +1 -0
  198. package/dist/safe-a/_next/static/chunks/948dc342d4746ffc.js +1 -0
  199. package/dist/safe-a/_next/static/chunks/94d40dcd515ca4ad.js +1 -0
  200. package/dist/safe-a/_next/static/chunks/957b35b92a00be9d.js +1 -0
  201. package/dist/safe-a/_next/static/chunks/9583c5cc3861200c.js +1 -0
  202. package/dist/safe-a/_next/static/chunks/95ef412230573b84.js +1 -0
  203. package/dist/safe-a/_next/static/chunks/966730983f55a7c6.js +1 -0
  204. package/dist/safe-a/_next/static/chunks/967dfe61a543e533.js +1 -0
  205. package/dist/safe-a/_next/static/chunks/9721e6d173bcda17.js +1 -0
  206. package/dist/safe-a/_next/static/chunks/97d506a00590396c.js +1 -0
  207. package/dist/safe-a/_next/static/chunks/98eb20270ccd4b41.js +1 -0
  208. package/dist/safe-a/_next/static/chunks/9924bd3807982f9c.js +1 -0
  209. package/dist/safe-a/_next/static/chunks/996147dc11d8e745.js +1 -0
  210. package/dist/safe-a/_next/static/chunks/997894582876b3bb.js +1 -0
  211. package/dist/safe-a/_next/static/chunks/99ce8e2a747001a9.js +1 -0
  212. package/dist/safe-a/_next/static/chunks/9a5e8d11c09774ed.js +1 -0
  213. package/dist/safe-a/_next/static/chunks/9a63abc493c1c840.js +1 -0
  214. package/dist/safe-a/_next/static/chunks/9ae8f05f80dedfa4.js +1 -0
  215. package/dist/safe-a/_next/static/chunks/9b0ac8da8e1c0d7e.js +1 -0
  216. package/dist/safe-a/_next/static/chunks/9b94620a86d2a1c2.js +1 -0
  217. package/dist/safe-a/_next/static/chunks/9bb97d9ab3f6de64.css +4 -0
  218. package/dist/safe-a/_next/static/chunks/9bedfcbe8f9ff43f.js +1 -0
  219. package/dist/safe-a/_next/static/chunks/9d65a2db77bf6c63.js +1 -0
  220. package/dist/safe-a/_next/static/chunks/9d8fff267f5576eb.js +1 -0
  221. package/dist/safe-a/_next/static/chunks/9db0d8129d6b7b5e.js +1 -0
  222. package/dist/safe-a/_next/static/chunks/9de7a5feb6be8bc3.js +1 -0
  223. package/dist/safe-a/_next/static/chunks/9e9339584dbc8172.js +1 -0
  224. package/dist/safe-a/_next/static/chunks/9f7b593a28b4dbe4.js +1 -0
  225. package/dist/safe-a/_next/static/chunks/9f8b67e210121299.js +1 -0
  226. package/dist/safe-a/_next/static/chunks/9fb7ffa11026935c.js +1 -0
  227. package/dist/safe-a/_next/static/chunks/a0256e00bbdc334c.js +1 -0
  228. package/dist/safe-a/_next/static/chunks/a12eeb7c77a7506f.js +1 -0
  229. package/dist/safe-a/_next/static/chunks/a3044be9cf533501.js +1 -0
  230. package/dist/safe-a/_next/static/chunks/a333240ca95e9cf9.js +1 -0
  231. package/dist/safe-a/_next/static/chunks/a367a4ab4b91ce6b.js +1 -0
  232. package/dist/safe-a/_next/static/chunks/a39dba23f5098cde.js +1 -0
  233. package/dist/safe-a/_next/static/chunks/a3af4dcdb725b47f.js +1 -0
  234. package/dist/safe-a/_next/static/chunks/a4ab363af889263f.js +1 -0
  235. package/dist/safe-a/_next/static/chunks/a4b35c64097aeb05.js +1 -0
  236. package/dist/safe-a/_next/static/chunks/a6fda6a41633eb93.js +1 -0
  237. package/dist/safe-a/_next/static/chunks/a78da44a16cc3db3.js +1 -0
  238. package/dist/safe-a/_next/static/chunks/a8696c4a576878ae.js +1 -0
  239. package/dist/safe-a/_next/static/chunks/a9a12415c8875ad5.js +1 -0
  240. package/dist/safe-a/_next/static/chunks/aa34ec2d74f7775c.js +1 -0
  241. package/dist/safe-a/_next/static/chunks/aa8c7d3d99a14fdb.js +1 -0
  242. package/dist/safe-a/_next/static/chunks/ab522ef4566e28db.js +1 -0
  243. package/dist/safe-a/_next/static/chunks/ab91b57996557cd5.js +1 -0
  244. package/dist/safe-a/_next/static/chunks/abd93c4f518b4209.js +1 -0
  245. package/dist/safe-a/_next/static/chunks/abf043c7dd51a07b.js +1 -0
  246. package/dist/safe-a/_next/static/chunks/ac0062f74360e8a1.js +1 -0
  247. package/dist/safe-a/_next/static/chunks/ad22e1613386ba8d.js +1 -0
  248. package/dist/safe-a/_next/static/chunks/ada2807c297fe674.js +1 -0
  249. package/dist/safe-a/_next/static/chunks/ae1404fdd6ec935a.js +1 -0
  250. package/dist/safe-a/_next/static/chunks/ae7e9c73a1d653fd.js +1 -0
  251. package/dist/safe-a/_next/static/chunks/afab34a5bb437673.js +1 -0
  252. package/dist/safe-a/_next/static/chunks/aff6654f4fbc26b0.js +1 -0
  253. package/dist/safe-a/_next/static/chunks/b0f0f19c125de544.js +1 -0
  254. package/dist/safe-a/_next/static/chunks/b4db35dceb9577e1.js +1 -0
  255. package/dist/safe-a/_next/static/chunks/b594aa86704b6429.js +1 -0
  256. package/dist/safe-a/_next/static/chunks/b717d3610f87602f.js +1 -0
  257. package/dist/safe-a/_next/static/chunks/b882523826ac1c83.js +1 -0
  258. package/dist/safe-a/_next/static/chunks/b926ed38d7cc48d8.js +1 -0
  259. package/dist/safe-a/_next/static/chunks/b92da682bccc569b.js +1 -0
  260. package/dist/safe-a/_next/static/chunks/b9b23fa418eacd67.js +1 -0
  261. package/dist/safe-a/_next/static/chunks/bb781f225af4e1f8.js +1 -0
  262. package/dist/safe-a/_next/static/chunks/bbb9a4e020dec46d.js +1 -0
  263. package/dist/safe-a/_next/static/chunks/c013a3a3b1574b7d.js +1 -0
  264. package/dist/safe-a/_next/static/chunks/c0960892f67b4256.js +1 -0
  265. package/dist/safe-a/_next/static/chunks/c158c0ddb31b1058.js +1 -0
  266. package/dist/safe-a/_next/static/chunks/c2e5be103cef6113.js +1 -0
  267. package/dist/safe-a/_next/static/chunks/c3bcc6eb84ed7d30.js +1 -0
  268. package/dist/safe-a/_next/static/chunks/c43f94053172eb84.js +1 -0
  269. package/dist/safe-a/_next/static/chunks/c537d051140acc61.js +1 -0
  270. package/dist/safe-a/_next/static/chunks/c5932397b84e3c27.js +1 -0
  271. package/dist/safe-a/_next/static/chunks/c5b0f8f27c2db9f1.js +1 -0
  272. package/dist/safe-a/_next/static/chunks/c5fd875d1d9fd6c4.js +1 -0
  273. package/dist/safe-a/_next/static/chunks/c81f8c96b5d54dbb.js +1 -0
  274. package/dist/safe-a/_next/static/chunks/c84ea2dc8d3281e6.js +1 -0
  275. package/dist/safe-a/_next/static/chunks/c8b301b059ee1946.js +1 -0
  276. package/dist/safe-a/_next/static/chunks/c9527036b1a95d19.js +1 -0
  277. package/dist/safe-a/_next/static/chunks/ca31fc9ca02421c7.js +1 -0
  278. package/dist/safe-a/_next/static/chunks/cac08e0e891f58d2.js +1 -0
  279. package/dist/safe-a/_next/static/chunks/cb8a82631d87b798.js +1 -0
  280. package/dist/safe-a/_next/static/chunks/ccbe0fe39b523768.js +1 -0
  281. package/dist/safe-a/_next/static/chunks/cd733da27bed8af2.js +1 -0
  282. package/dist/safe-a/_next/static/chunks/cf99b249b986e2bd.js +1 -0
  283. package/dist/safe-a/_next/static/chunks/d0d06ea64246c2e0.js +1 -0
  284. package/dist/safe-a/_next/static/chunks/d0d8ac4e89477172.js +1 -0
  285. package/dist/safe-a/_next/static/chunks/d1372ce458c4a584.js +1 -0
  286. package/dist/safe-a/_next/static/chunks/d147ab3cf51edc42.js +1 -0
  287. package/dist/safe-a/_next/static/chunks/d2bba4dbd6e24f7e.js +1 -0
  288. package/dist/safe-a/_next/static/chunks/d3072ff0f4d0f613.js +1 -0
  289. package/dist/safe-a/_next/static/chunks/d3f94755bb60424c.js +1 -0
  290. package/dist/safe-a/_next/static/chunks/d3fc1847f85d724b.js +1 -0
  291. package/dist/safe-a/_next/static/chunks/d53ff6336a32e4c5.js +1 -0
  292. package/dist/safe-a/_next/static/chunks/d653880800910810.js +1 -0
  293. package/dist/safe-a/_next/static/chunks/d84ed83f568f41c6.js +1 -0
  294. package/dist/safe-a/_next/static/chunks/d9bf3f0f6088ac8c.js +1 -0
  295. package/dist/safe-a/_next/static/chunks/da11b1522a2497e3.js +1 -0
  296. package/dist/safe-a/_next/static/chunks/daaffc256846db90.js +1 -0
  297. package/dist/safe-a/_next/static/chunks/dabd2cc5e900d556.js +1 -0
  298. package/dist/safe-a/_next/static/chunks/dbf36b536a6c59ef.js +1 -0
  299. package/dist/safe-a/_next/static/chunks/dc7f280eee64d574.js +1 -0
  300. package/dist/safe-a/_next/static/chunks/dcdc329f64f1a7a8.js +1 -0
  301. package/dist/safe-a/_next/static/chunks/dd03bb14e8e590f0.js +1 -0
  302. package/dist/safe-a/_next/static/chunks/dda4e994ee3a92e1.js +1 -0
  303. package/dist/safe-a/_next/static/chunks/ddc8a591c8943264.js +1 -0
  304. package/dist/safe-a/_next/static/chunks/de208f3610c12b2c.js +1 -0
  305. package/dist/safe-a/_next/static/chunks/dee1daaeed29e5a2.js +1 -0
  306. package/dist/safe-a/_next/static/chunks/df25d932487a1417.js +1 -0
  307. package/dist/safe-a/_next/static/chunks/dfbd9d8a4137edd6.js +1 -0
  308. package/dist/safe-a/_next/static/chunks/dfe4d8ffc37b96da.js +1 -0
  309. package/dist/safe-a/_next/static/chunks/e07906d264057e7b.js +1 -0
  310. package/dist/safe-a/_next/static/chunks/e1416a0b2152bdbf.js +1 -0
  311. package/dist/safe-a/_next/static/chunks/e1626e173f56ae31.js +1 -0
  312. package/dist/safe-a/_next/static/chunks/e4776ea06fa1720a.js +1 -0
  313. package/dist/safe-a/_next/static/chunks/e632e1b120215697.js +1 -0
  314. package/dist/safe-a/_next/static/chunks/e66819cb4afcfe87.js +1 -0
  315. package/dist/safe-a/_next/static/chunks/e69f953184729bfc.js +1 -0
  316. package/dist/safe-a/_next/static/chunks/e7731336476789d7.js +1 -0
  317. package/dist/safe-a/_next/static/chunks/e79d1db952916e66.js +1 -0
  318. package/dist/safe-a/_next/static/chunks/e7d6284971d07422.js +1 -0
  319. package/dist/safe-a/_next/static/chunks/e7f1683dcd85bf06.js +1 -0
  320. package/dist/safe-a/_next/static/chunks/e814d6bb4f565a59.js +1 -0
  321. package/dist/safe-a/_next/static/chunks/e878ffaf394e2c30.js +1 -0
  322. package/dist/safe-a/_next/static/chunks/e89655c05e6b5b1f.js +1 -0
  323. package/dist/safe-a/_next/static/chunks/eb248f97f593a288.js +1 -0
  324. package/dist/safe-a/_next/static/chunks/eb34cdf40f4c4d62.js +1 -0
  325. package/dist/safe-a/_next/static/chunks/ec048ffab26ebcd6.js +1 -0
  326. package/dist/safe-a/_next/static/chunks/ec24f7a0593636d9.js +1 -0
  327. package/dist/safe-a/_next/static/chunks/ec7ee73b22712e55.js +1 -0
  328. package/dist/safe-a/_next/static/chunks/ed4322c3137a7cbf.js +1 -0
  329. package/dist/safe-a/_next/static/chunks/ede1765e6899133a.js +1 -0
  330. package/dist/safe-a/_next/static/chunks/f05af2c706c87fb5.js +1 -0
  331. package/dist/safe-a/_next/static/chunks/f0a3b313fc0fcace.js +1 -0
  332. package/dist/safe-a/_next/static/chunks/f15c8b2639bebe0f.js +1 -0
  333. package/dist/safe-a/_next/static/chunks/f39ec71d70b31fe1.js +1 -0
  334. package/dist/safe-a/_next/static/chunks/f40b91cb7cc58cf2.js +1 -0
  335. package/dist/safe-a/_next/static/chunks/f5e77b158443344d.js +1 -0
  336. package/dist/safe-a/_next/static/chunks/f75b1e4cbb975714.js +1 -0
  337. package/dist/safe-a/_next/static/chunks/f7ad257814e6e947.js +1 -0
  338. package/dist/safe-a/_next/static/chunks/f7d33f46dfbddf65.js +1 -0
  339. package/dist/safe-a/_next/static/chunks/f8757d2c1a969081.js +1 -0
  340. package/dist/safe-a/_next/static/chunks/fa361913d47fdc14.css +4 -0
  341. package/dist/safe-a/_next/static/chunks/fa951eecdf98ad7f.css +1 -0
  342. package/dist/safe-a/_next/static/chunks/fac51e37e04e662e.js +1 -0
  343. package/dist/safe-a/_next/static/chunks/faf267ae8eaabb78.js +1 -0
  344. package/dist/safe-a/_next/static/chunks/fb7bf2e8cee9c72f.js +1 -0
  345. package/dist/safe-a/_next/static/chunks/fbb5b0d1f5b25465.js +1 -0
  346. package/dist/safe-a/_next/static/chunks/fc3c1b765cc5906d.js +1 -0
  347. package/dist/safe-a/_next/static/chunks/fddfcced721d9669.js +1 -0
  348. package/dist/safe-a/_next/static/chunks/fdf535baa39c0e26.js +1 -0
  349. package/dist/safe-a/_next/static/chunks/fe4fddbf85e1554b.js +1 -0
  350. package/dist/safe-a/_next/static/chunks/fe5cb190c34add83.js +1 -0
  351. package/dist/safe-a/_next/static/chunks/fe840e6cda1c115e.js +1 -0
  352. package/dist/safe-a/_next/static/chunks/turbopack-36509d12126a5bb6.js +3 -0
  353. package/dist/safe-a/_next/static/chunks/turbopack-6a1d2af530d97cf8.js +3 -0
  354. package/dist/safe-a/_next/static/chunks/turbopack-ab23c5c8fb4c9135.js +3 -0
  355. package/dist/safe-a/index.html +2 -0
  356. package/dist/safe-a/index.txt +33 -0
  357. package/dist/safe-a/manage/about/index.html +2 -0
  358. package/dist/safe-a/manage/about/index.txt +34 -0
  359. package/dist/safe-a/manage/env/index.html +2 -0
  360. package/dist/safe-a/manage/env/index.txt +37 -0
  361. package/dist/safe-a/manage/general/index.html +2 -0
  362. package/dist/safe-a/manage/general/index.txt +34 -0
  363. package/dist/safe-a/manage/index.html +2 -0
  364. package/dist/safe-a/manage/index.txt +31 -0
  365. package/dist/safe-a/manage/mcp/index.html +2 -0
  366. package/dist/safe-a/manage/mcp/index.txt +35 -0
  367. package/dist/safe-a/manage/permissions/index.html +2 -0
  368. package/dist/safe-a/manage/permissions/index.txt +34 -0
  369. package/dist/safe-a/manage/skills/index.html +2 -0
  370. package/dist/safe-a/manage/skills/index.txt +35 -0
  371. package/dist/safe-a/manage/task/index.html +2 -0
  372. package/dist/safe-a/manage/task/index.txt +35 -0
  373. package/dist/safe-a/manage/teams/index.html +2 -0
  374. package/dist/safe-a/manage/teams/index.txt +35 -0
  375. package/dist/safe-a/manage/tools/index.html +2 -0
  376. package/dist/safe-a/manage/tools/index.txt +35 -0
  377. package/dist/ws-test/agent-office.html +1295 -0
  378. package/dist/ws-test/ws-test.css +3239 -0
  379. package/dist/ws-test/ws-test.html +780 -0
  380. package/dist/ws-test/ws-test.js +8526 -0
  381. package/lib/launcher-env.js +12 -3
  382. package/package.json +6 -6
  383. package/skills-runtime/deploy-test-env/SKILL.md +1 -1
  384. package/skills-runtime/dev-task-flow/SKILL.md +4 -4
  385. package/skills-runtime/self-test-flow/SKILL.md +2 -2
  386. package/skills-runtime/workflow-hub/SKILL.md +1 -1
  387. package/tools-runtime/code-tool/index.cjs +8 -3
  388. package/tools-runtime/code-tool/src/workspace.ts +13 -7
  389. package/tools-runtime/git-tool/index.cjs +34 -8
  390. package/tools-runtime/git-tool/src/index.ts +1 -1
  391. package/tools-runtime/git-tool/src/workspace.test.ts +9 -9
  392. package/tools-runtime/git-tool/src/workspace.ts +53 -13
  393. package/dist/404/index.html +0 -1
  394. package/dist/404.html +0 -1
  395. package/dist/_next/static/bgHnfEbjqZYUwK_KG6A0m/_buildManifest.js +0 -14
  396. package/dist/_next/static/chunks/01766c1e2fdff227.js +0 -1
  397. package/dist/_next/static/chunks/04865c74d0dcb5b6.js +0 -1
  398. package/dist/_next/static/chunks/04c9439163b67552.js +0 -1
  399. package/dist/_next/static/chunks/05e1926dc5c477b7.js +0 -1
  400. package/dist/_next/static/chunks/06b923aa1177f43f.js +0 -1
  401. package/dist/_next/static/chunks/07cd0b140a56ee30.js +0 -1
  402. package/dist/_next/static/chunks/092c97532613af2a.js +0 -1
  403. package/dist/_next/static/chunks/0b639ff4f1971d14.js +0 -1
  404. package/dist/_next/static/chunks/0b69dba7f1e63f30.js +0 -1
  405. package/dist/_next/static/chunks/0ce6504fc10ce408.js +0 -1
  406. package/dist/_next/static/chunks/0e1e7d5f7a375308.js +0 -1
  407. package/dist/_next/static/chunks/0e8139882ad093d2.js +0 -1
  408. package/dist/_next/static/chunks/0ea5a62c3f30dc56.js +0 -1
  409. package/dist/_next/static/chunks/0f1810e4c6b0dd0c.js +0 -1
  410. package/dist/_next/static/chunks/0fa097a572705cfa.js +0 -1
  411. package/dist/_next/static/chunks/0fb0d030e8dee231.js +0 -1
  412. package/dist/_next/static/chunks/0fd3876e0d9e8acc.js +0 -1
  413. package/dist/_next/static/chunks/106955e3cc6a6843.js +0 -1
  414. package/dist/_next/static/chunks/1078bc1642db53ad.js +0 -1
  415. package/dist/_next/static/chunks/108a0b77418f1d31.js +0 -1
  416. package/dist/_next/static/chunks/1348edc568cfb2b2.js +0 -1
  417. package/dist/_next/static/chunks/13b54d70a1ee1de7.js +0 -1
  418. package/dist/_next/static/chunks/13f94fc3dda88c90.js +0 -1
  419. package/dist/_next/static/chunks/155374df9f6b4b9a.js +0 -1
  420. package/dist/_next/static/chunks/16ea1d3cf6db8a53.js +0 -1
  421. package/dist/_next/static/chunks/170f7361bd4d33e2.js +0 -1
  422. package/dist/_next/static/chunks/17722e3ac4e00587.js +0 -1
  423. package/dist/_next/static/chunks/179a5dac78ab2cb9.js +0 -1
  424. package/dist/_next/static/chunks/1818d7a661948f6b.js +0 -1
  425. package/dist/_next/static/chunks/18977fe8f51209aa.js +0 -1
  426. package/dist/_next/static/chunks/19584f955475ce91.js +0 -1
  427. package/dist/_next/static/chunks/1974f51c298bce94.js +0 -1
  428. package/dist/_next/static/chunks/19c1491e85e22b3b.js +0 -1
  429. package/dist/_next/static/chunks/19ca17e5015c42a3.js +0 -1
  430. package/dist/_next/static/chunks/1a4b553856a8ffdf.js +0 -1
  431. package/dist/_next/static/chunks/1b55c29b8cad4a50.js +0 -1
  432. package/dist/_next/static/chunks/1bb28f71c19fa824.js +0 -1
  433. package/dist/_next/static/chunks/1bfa645704d9149a.js +0 -1
  434. package/dist/_next/static/chunks/1c9321874fea5f0d.js +0 -1
  435. package/dist/_next/static/chunks/1d3e7886be9f671c.js +0 -1
  436. package/dist/_next/static/chunks/1e17456ccebc9cd2.js +0 -1
  437. package/dist/_next/static/chunks/1e43922998a0ed2f.js +0 -1
  438. package/dist/_next/static/chunks/1fec17d16aff9eed.js +0 -1
  439. package/dist/_next/static/chunks/2046937bffedf074.js +0 -1
  440. package/dist/_next/static/chunks/219a3413675ba6f1.js +0 -1
  441. package/dist/_next/static/chunks/22fb0418205bc3b6.js +0 -1
  442. package/dist/_next/static/chunks/2326118ef1328bc5.js +0 -1
  443. package/dist/_next/static/chunks/236775e4ec4f8a94.js +0 -1
  444. package/dist/_next/static/chunks/242529c986baeb00.js +0 -1
  445. package/dist/_next/static/chunks/270d7571d2eea071.js +0 -1
  446. package/dist/_next/static/chunks/2761e463114b018c.js +0 -1
  447. package/dist/_next/static/chunks/27c407347ce26b78.js +0 -1
  448. package/dist/_next/static/chunks/27ff2e69b2fd19e5.js +0 -1
  449. package/dist/_next/static/chunks/29676075a0390867.js +0 -1
  450. package/dist/_next/static/chunks/2c6d585a97629311.js +0 -1
  451. package/dist/_next/static/chunks/2df3e464b6247e75.js +0 -1
  452. package/dist/_next/static/chunks/2e574acbf68e77ff.js +0 -1
  453. package/dist/_next/static/chunks/2ec6d7ddb4c04987.js +0 -1
  454. package/dist/_next/static/chunks/2f7d30e66e995b02.js +0 -1
  455. package/dist/_next/static/chunks/2fab2306850ac97b.js +0 -1
  456. package/dist/_next/static/chunks/2fcc6298b6dd7a82.js +0 -1
  457. package/dist/_next/static/chunks/303d9c2a2c956f25.js +0 -1
  458. package/dist/_next/static/chunks/32a7ca0a75a897da.js +0 -1
  459. package/dist/_next/static/chunks/32b4d63e10d31351.js +0 -1
  460. package/dist/_next/static/chunks/32b9bdd82a961878.js +0 -1
  461. package/dist/_next/static/chunks/345032ba59cb60d8.js +0 -1
  462. package/dist/_next/static/chunks/3509a66e019ceae3.js +0 -1
  463. package/dist/_next/static/chunks/3520f1af0a1b7f66.js +0 -1
  464. package/dist/_next/static/chunks/354aaa2e36b75b81.js +0 -1
  465. package/dist/_next/static/chunks/3590c4a4f40cdb5d.js +0 -1
  466. package/dist/_next/static/chunks/35f1637c2feb232d.js +0 -1
  467. package/dist/_next/static/chunks/37bbbf907196a5bf.js +0 -1
  468. package/dist/_next/static/chunks/37cfaa4963ac51f3.js +0 -1
  469. package/dist/_next/static/chunks/3934bd57f459566e.js +0 -1
  470. package/dist/_next/static/chunks/3a947667fddbdd53.js +0 -1
  471. package/dist/_next/static/chunks/3aac5736e5781b46.js +0 -1
  472. package/dist/_next/static/chunks/3ae23df392f9bed8.js +0 -1
  473. package/dist/_next/static/chunks/3ae4e2529aa621fb.js +0 -1
  474. package/dist/_next/static/chunks/3b2bb9f17546ee3e.js +0 -1
  475. package/dist/_next/static/chunks/3bcd531d40d6c019.js +0 -1
  476. package/dist/_next/static/chunks/3c695d1c2efbc749.js +0 -1
  477. package/dist/_next/static/chunks/3d8e9a96a69193d4.js +0 -1
  478. package/dist/_next/static/chunks/3dcb1dcf23e7ab9c.js +0 -1
  479. package/dist/_next/static/chunks/3e2ea3a7fe64826d.js +0 -1
  480. package/dist/_next/static/chunks/3e9c98df7d56e9b2.js +0 -1
  481. package/dist/_next/static/chunks/3ec05a61e93547d3.js +0 -1
  482. package/dist/_next/static/chunks/3f6fe8a1903009ea.js +0 -1
  483. package/dist/_next/static/chunks/3fb4674edcb2d726.js +0 -1
  484. package/dist/_next/static/chunks/3fd03b9ed21b30fc.js +0 -1
  485. package/dist/_next/static/chunks/40268f8e3ff0314e.js +0 -1
  486. package/dist/_next/static/chunks/40cc0252b2f1d855.js +0 -1
  487. package/dist/_next/static/chunks/413a7be096275d7f.js +0 -1
  488. package/dist/_next/static/chunks/459d401d9f9e5b9f.js +0 -1
  489. package/dist/_next/static/chunks/45ab9a1f693d609c.js +0 -1
  490. package/dist/_next/static/chunks/481a2858f7df907d.js +0 -1
  491. package/dist/_next/static/chunks/49df9708d6328c4a.js +0 -1
  492. package/dist/_next/static/chunks/4a340ea4ac145216.js +0 -1
  493. package/dist/_next/static/chunks/4be779bcbd94352d.js +0 -1
  494. package/dist/_next/static/chunks/4c33a1cc6db74105.js +0 -1
  495. package/dist/_next/static/chunks/4cc4bd81c5ae0c40.js +0 -1
  496. package/dist/_next/static/chunks/4d129d4e15c8c424.js +0 -1
  497. package/dist/_next/static/chunks/4df298f5b420f474.js +0 -1
  498. package/dist/_next/static/chunks/4dfbfdff43b8479b.js +0 -1
  499. package/dist/_next/static/chunks/5069ee4aa806b0ea.js +0 -1
  500. package/dist/_next/static/chunks/519049cd74a40910.js +0 -1
  501. package/dist/_next/static/chunks/522518d740397639.js +0 -1
  502. package/dist/_next/static/chunks/52e2164e45febae6.js +0 -1
  503. package/dist/_next/static/chunks/534b5acf573aa491.js +0 -1
  504. package/dist/_next/static/chunks/538cc02e54714b23.js +0 -1
  505. package/dist/_next/static/chunks/53be52c43a14557c.js +0 -1
  506. package/dist/_next/static/chunks/54c43751bf4c4da2.js +0 -1
  507. package/dist/_next/static/chunks/55087cc98e6237f1.js +0 -1
  508. package/dist/_next/static/chunks/55f8de91b4803778.js +0 -1
  509. package/dist/_next/static/chunks/560ca23f77c0e819.js +0 -1
  510. package/dist/_next/static/chunks/57bb853857f3de83.js +0 -1
  511. package/dist/_next/static/chunks/588e6975a7bd6671.js +0 -1
  512. package/dist/_next/static/chunks/5a0b630678282d4f.js +0 -1
  513. package/dist/_next/static/chunks/5a3e355216280144.js +0 -1
  514. package/dist/_next/static/chunks/5a4c198fd41e8ec4.js +0 -1
  515. package/dist/_next/static/chunks/5b916c9dc09e323c.js +0 -1
  516. package/dist/_next/static/chunks/5bad5163b6e015f5.js +0 -1
  517. package/dist/_next/static/chunks/5ccd5a6ac9c2f980.js +0 -1
  518. package/dist/_next/static/chunks/5cdf21cf7f4c7608.js +0 -1
  519. package/dist/_next/static/chunks/5d5333084191fb10.js +0 -1
  520. package/dist/_next/static/chunks/5d79b7f202080232.js +0 -1
  521. package/dist/_next/static/chunks/5ea79c109cbe8a86.js +0 -1
  522. package/dist/_next/static/chunks/5ee72092303043ef.js +0 -1
  523. package/dist/_next/static/chunks/5fc8a5235ddfa787.js +0 -1
  524. package/dist/_next/static/chunks/61b3d4c00499dd14.js +0 -1
  525. package/dist/_next/static/chunks/61ce261738313b8a.js +0 -1
  526. package/dist/_next/static/chunks/62d925bcc8518b6f.js +0 -1
  527. package/dist/_next/static/chunks/63ec034afca4b5d6.js +0 -1
  528. package/dist/_next/static/chunks/644aa76620718c98.js +0 -1
  529. package/dist/_next/static/chunks/648b653b36802fdc.js +0 -1
  530. package/dist/_next/static/chunks/6522643341a0921c.js +0 -1
  531. package/dist/_next/static/chunks/652e486c20710ca8.js +0 -1
  532. package/dist/_next/static/chunks/65fb49c8a7f59842.js +0 -1
  533. package/dist/_next/static/chunks/65fe0975412ff703.js +0 -1
  534. package/dist/_next/static/chunks/66b30159915524db.js +0 -1
  535. package/dist/_next/static/chunks/66ed07a735eac6e3.js +0 -1
  536. package/dist/_next/static/chunks/6785757cc05fec19.js +0 -1
  537. package/dist/_next/static/chunks/67c9db5577080125.js +0 -1
  538. package/dist/_next/static/chunks/68bd2bd64624e20d.js +0 -1
  539. package/dist/_next/static/chunks/692e7ee14236fefb.js +0 -1
  540. package/dist/_next/static/chunks/69cfdbc51cf2d3c3.js +0 -1
  541. package/dist/_next/static/chunks/6ae709c575c74979.js +0 -1
  542. package/dist/_next/static/chunks/6b652524b5ffdd9e.js +0 -1
  543. package/dist/_next/static/chunks/6b7c3c962a14dc29.js +0 -1
  544. package/dist/_next/static/chunks/6bc7c57f119ad4f6.js +0 -1
  545. package/dist/_next/static/chunks/6c3b2d0be1c633b6.js +0 -1
  546. package/dist/_next/static/chunks/6cc2f7f962cdd082.js +0 -1
  547. package/dist/_next/static/chunks/6d4209e94b1aafe6.js +0 -1
  548. package/dist/_next/static/chunks/6ddf95b168bfbc36.js +0 -1
  549. package/dist/_next/static/chunks/6e61f670898cb297.css +0 -1
  550. package/dist/_next/static/chunks/6f3afa83656eab67.js +0 -1
  551. package/dist/_next/static/chunks/6f4460bd0b8a57af.js +0 -1
  552. package/dist/_next/static/chunks/6fe835d41fdbd638.js +0 -1
  553. package/dist/_next/static/chunks/70459a2a4c45653e.js +0 -1
  554. package/dist/_next/static/chunks/7137c7537c459c31.js +0 -1
  555. package/dist/_next/static/chunks/715c085d7c10eeda.js +0 -1
  556. package/dist/_next/static/chunks/71d3a80bc9d53b07.js +0 -1
  557. package/dist/_next/static/chunks/71e3a90489469c28.js +0 -1
  558. package/dist/_next/static/chunks/72a56bd75075fd83.js +0 -1
  559. package/dist/_next/static/chunks/72ef1696f44fcf61.js +0 -1
  560. package/dist/_next/static/chunks/736441266ceb14e2.js +0 -1
  561. package/dist/_next/static/chunks/73cbf0064096e28c.js +0 -1
  562. package/dist/_next/static/chunks/751de74a23cc9036.js +0 -1
  563. package/dist/_next/static/chunks/756b6c2e620386ff.js +0 -1
  564. package/dist/_next/static/chunks/75a396e1752cd59d.js +0 -1
  565. package/dist/_next/static/chunks/764c541428e1c6eb.js +0 -1
  566. package/dist/_next/static/chunks/789aab39327312c3.js +0 -1
  567. package/dist/_next/static/chunks/79128afded6e01d9.js +0 -1
  568. package/dist/_next/static/chunks/7988d5ea63356e10.js +0 -1
  569. package/dist/_next/static/chunks/7aa69fd5d97b7146.js +0 -1
  570. package/dist/_next/static/chunks/7b9c09d0ce43f1c2.js +0 -1
  571. package/dist/_next/static/chunks/7bdf0e5b41aeb209.css +0 -1
  572. package/dist/_next/static/chunks/7d3bf918bccde738.js +0 -1
  573. package/dist/_next/static/chunks/7dbb8abebf50d816.js +0 -1
  574. package/dist/_next/static/chunks/7ef348801eff6590.js +0 -1
  575. package/dist/_next/static/chunks/7f6e82ac63db5eff.js +0 -1
  576. package/dist/_next/static/chunks/7fd45fb9cf0995f3.js +0 -1
  577. package/dist/_next/static/chunks/8085c74f26fa2c4e.js +0 -1
  578. package/dist/_next/static/chunks/84185f4bb07ccbd7.js +0 -1
  579. package/dist/_next/static/chunks/85fc05549f7f100c.js +0 -1
  580. package/dist/_next/static/chunks/87e12ecbe9521f9b.js +0 -1
  581. package/dist/_next/static/chunks/88a999988f915988.js +0 -1
  582. package/dist/_next/static/chunks/88bc97899d2ce4e5.js +0 -1
  583. package/dist/_next/static/chunks/8a1a9a399fe2d329.js +0 -1
  584. package/dist/_next/static/chunks/8bdc142fad5847ed.js +0 -1
  585. package/dist/_next/static/chunks/8deb0392842e5a01.js +0 -1
  586. package/dist/_next/static/chunks/8f038ff914c4b0df.js +0 -1
  587. package/dist/_next/static/chunks/8f5be275907dd98c.js +0 -1
  588. package/dist/_next/static/chunks/9037530b0f1d5783.js +0 -1
  589. package/dist/_next/static/chunks/9078ad91aa20dca0.js +0 -1
  590. package/dist/_next/static/chunks/92c3617a4e22a464.js +0 -1
  591. package/dist/_next/static/chunks/932d3fcc2596e8d5.js +0 -1
  592. package/dist/_next/static/chunks/937e26e6e01d9ec9.js +0 -1
  593. package/dist/_next/static/chunks/93bfaf233e66b48c.js +0 -1
  594. package/dist/_next/static/chunks/94029062f236cadc.js +0 -1
  595. package/dist/_next/static/chunks/94e88cfda11697d2.js +0 -1
  596. package/dist/_next/static/chunks/95c4d26e469d1d8f.js +0 -1
  597. package/dist/_next/static/chunks/96026b5eb5d2566b.js +0 -1
  598. package/dist/_next/static/chunks/962a27e9c634b823.js +0 -1
  599. package/dist/_next/static/chunks/966fb5830ce1029c.js +0 -1
  600. package/dist/_next/static/chunks/9724567275720686.js +0 -1
  601. package/dist/_next/static/chunks/98e243fb5992a71c.js +0 -1
  602. package/dist/_next/static/chunks/9a7b2a483b109c0a.js +0 -1
  603. package/dist/_next/static/chunks/9b3df6b20a9625d5.js +0 -1
  604. package/dist/_next/static/chunks/9c6c00fa68012026.js +0 -1
  605. package/dist/_next/static/chunks/9cb28a1dacb7ea6d.js +0 -1
  606. package/dist/_next/static/chunks/9ccf7a8bca1730bf.js +0 -1
  607. package/dist/_next/static/chunks/9e96c84b86d1bbf3.js +0 -1
  608. package/dist/_next/static/chunks/9f0ee4783140adf1.js +0 -1
  609. package/dist/_next/static/chunks/9fefea69ec034a63.js +0 -1
  610. package/dist/_next/static/chunks/a1b9abf15c0f7655.js +0 -1
  611. package/dist/_next/static/chunks/a37aa474433d29e3.js +0 -1
  612. package/dist/_next/static/chunks/a4776dc3e00e5ab0.js +0 -1
  613. package/dist/_next/static/chunks/a5df6158856685f1.js +0 -1
  614. package/dist/_next/static/chunks/a6737fc58619eae5.js +0 -1
  615. package/dist/_next/static/chunks/a6a98f9278704b6a.js +0 -1
  616. package/dist/_next/static/chunks/a7277c96f3669bea.js +0 -1
  617. package/dist/_next/static/chunks/a9fed5c43d754a96.js +0 -1
  618. package/dist/_next/static/chunks/aa0a4c596151b22b.js +0 -1
  619. package/dist/_next/static/chunks/aa867a1fa8b105e1.js +0 -1
  620. package/dist/_next/static/chunks/ad4ba491cf12423f.js +0 -5
  621. package/dist/_next/static/chunks/ad50a7d15cd9d9d8.js +0 -1
  622. package/dist/_next/static/chunks/af7b0bd1b40ad066.js +0 -1
  623. package/dist/_next/static/chunks/b24e3802454a5567.js +0 -1
  624. package/dist/_next/static/chunks/b29a85c3dae2bb9c.js +0 -1
  625. package/dist/_next/static/chunks/b30f1da4e57f459a.js +0 -1
  626. package/dist/_next/static/chunks/b360c9fc22dbf831.js +0 -1
  627. package/dist/_next/static/chunks/b3e79c76be269ccc.js +0 -1
  628. package/dist/_next/static/chunks/b429be4e16fa1e00.js +0 -1
  629. package/dist/_next/static/chunks/b61ec36c9bbca3e0.js +0 -1
  630. package/dist/_next/static/chunks/b65565677c3e8c0a.js +0 -1
  631. package/dist/_next/static/chunks/b66afb4b0be97af8.js +0 -1
  632. package/dist/_next/static/chunks/b69f987a60b05db3.js +0 -1
  633. package/dist/_next/static/chunks/b7546ebaecffed5f.js +0 -1
  634. package/dist/_next/static/chunks/b78822282754a47c.js +0 -1
  635. package/dist/_next/static/chunks/b7f72bcb870dda3b.js +0 -1
  636. package/dist/_next/static/chunks/b92c67520afabac2.js +0 -1
  637. package/dist/_next/static/chunks/bbcf9daa108b22fb.js +0 -1
  638. package/dist/_next/static/chunks/bc7bda699a7ccda1.js +0 -1
  639. package/dist/_next/static/chunks/bd1f33816fa01c16.js +0 -1
  640. package/dist/_next/static/chunks/bd2dcf98c9b362f6.js +0 -1
  641. package/dist/_next/static/chunks/bd984c5404403e7d.js +0 -1
  642. package/dist/_next/static/chunks/bdd88bcfd223f52a.js +0 -1
  643. package/dist/_next/static/chunks/bf2262100cea8c64.js +0 -1
  644. package/dist/_next/static/chunks/bf2c1c402dbcccdf.js +0 -1
  645. package/dist/_next/static/chunks/bfc6ee42cec583d5.js +0 -1
  646. package/dist/_next/static/chunks/c15069059c9d1f53.js +0 -1
  647. package/dist/_next/static/chunks/c1615032cbbf5b56.js +0 -1
  648. package/dist/_next/static/chunks/c2546d2b493dd907.js +0 -1
  649. package/dist/_next/static/chunks/c3669d468d3f2b3a.js +0 -1
  650. package/dist/_next/static/chunks/c3b49937059d3d70.js +0 -1
  651. package/dist/_next/static/chunks/c5b5aba98d38ef23.js +0 -1
  652. package/dist/_next/static/chunks/c5be27a596acfa18.js +0 -1
  653. package/dist/_next/static/chunks/c6cc32860b96278f.js +0 -1
  654. package/dist/_next/static/chunks/c725524ea13a50ab.js +0 -1
  655. package/dist/_next/static/chunks/c73f7d77cbe3f2f1.css +0 -1
  656. package/dist/_next/static/chunks/c8942bee3aebddae.js +0 -1
  657. package/dist/_next/static/chunks/c8e45be36912e439.js +0 -1
  658. package/dist/_next/static/chunks/c933951b3113492f.js +0 -1
  659. package/dist/_next/static/chunks/c9813626ba898586.js +0 -1
  660. package/dist/_next/static/chunks/ca2725c2b45709c1.js +0 -1
  661. package/dist/_next/static/chunks/caf4049dc563940e.js +0 -1
  662. package/dist/_next/static/chunks/cafadd69e03e6c4b.js +0 -1
  663. package/dist/_next/static/chunks/cba2741f84ef36ed.js +0 -1
  664. package/dist/_next/static/chunks/cccecf726769787f.js +0 -1
  665. package/dist/_next/static/chunks/cd0e7e3cc303b4e4.js +0 -1
  666. package/dist/_next/static/chunks/cd4556cbed1f8957.js +0 -1
  667. package/dist/_next/static/chunks/cd5eec7d305aa041.js +0 -1
  668. package/dist/_next/static/chunks/d09636e7bcf60ad1.js +0 -1
  669. package/dist/_next/static/chunks/d2d432a9facf4278.js +0 -1
  670. package/dist/_next/static/chunks/d2e37b6d5ff62bcb.js +0 -1
  671. package/dist/_next/static/chunks/d33a24782888b869.js +0 -1
  672. package/dist/_next/static/chunks/d33e49aabd798892.js +0 -1
  673. package/dist/_next/static/chunks/d3990c1e87ef3e23.js +0 -1
  674. package/dist/_next/static/chunks/d433c87b0bc69cda.js +0 -1
  675. package/dist/_next/static/chunks/d47cd27ac08f5429.js +0 -1
  676. package/dist/_next/static/chunks/d55f4f3df263ad3d.js +0 -1
  677. package/dist/_next/static/chunks/d599ef4d0f84a93d.js +0 -1
  678. package/dist/_next/static/chunks/d5e3d29f769997cc.js +0 -1
  679. package/dist/_next/static/chunks/d69b21102305d19e.js +0 -1
  680. package/dist/_next/static/chunks/d715e874b8ee8540.js +0 -1
  681. package/dist/_next/static/chunks/d729414ff836cd53.js +0 -1
  682. package/dist/_next/static/chunks/d82740475fc07e98.js +0 -1
  683. package/dist/_next/static/chunks/d842d30dcb0f50a9.js +0 -1
  684. package/dist/_next/static/chunks/d8af8dadd0889c71.js +0 -1
  685. package/dist/_next/static/chunks/d9b92ed2d544fca5.js +0 -1
  686. package/dist/_next/static/chunks/da346aeed70dd39a.js +0 -1
  687. package/dist/_next/static/chunks/dbbd673619a7f82f.js +0 -1
  688. package/dist/_next/static/chunks/dc0bc471de951daf.js +0 -1
  689. package/dist/_next/static/chunks/dc2186b66132ca97.js +0 -1
  690. package/dist/_next/static/chunks/de0ee516f6a1aa07.js +0 -1
  691. package/dist/_next/static/chunks/e04bace22e04d63c.js +0 -1
  692. package/dist/_next/static/chunks/e0c76ff7114dc8dc.js +0 -1
  693. package/dist/_next/static/chunks/e11d4fd8de65621d.js +0 -1
  694. package/dist/_next/static/chunks/e1999bcadd3448e5.js +0 -1
  695. package/dist/_next/static/chunks/e3fe320ec1b8f889.js +0 -1
  696. package/dist/_next/static/chunks/e4973ad5c183f17a.js +0 -1
  697. package/dist/_next/static/chunks/e5275dcacbabc3e3.js +0 -1
  698. package/dist/_next/static/chunks/e60ef129113f6e24.js +0 -1
  699. package/dist/_next/static/chunks/e61019aedfdf554e.js +0 -1
  700. package/dist/_next/static/chunks/e6324292aef80338.js +0 -1
  701. package/dist/_next/static/chunks/e7003dbd5d8cb2d1.js +0 -1
  702. package/dist/_next/static/chunks/e7bcbeb465fa49cf.js +0 -1
  703. package/dist/_next/static/chunks/e7f1a043618e43cf.js +0 -1
  704. package/dist/_next/static/chunks/e8105dbb23b8e514.js +0 -1
  705. package/dist/_next/static/chunks/ea12d36cdfbaafa9.js +0 -1
  706. package/dist/_next/static/chunks/ea2a84258a02d5c5.js +0 -1
  707. package/dist/_next/static/chunks/ea36a5ae7c6ce34f.js +0 -1
  708. package/dist/_next/static/chunks/eb2d81df9fe374a8.js +0 -1
  709. package/dist/_next/static/chunks/eb9ae8e95cac1197.js +0 -1
  710. package/dist/_next/static/chunks/ebb0ee69f6a7883e.js +0 -1
  711. package/dist/_next/static/chunks/ebcbb5070eb8e29f.js +0 -1
  712. package/dist/_next/static/chunks/ebcd85ff4a1db0dc.js +0 -5
  713. package/dist/_next/static/chunks/ee79511740d19885.js +0 -1
  714. package/dist/_next/static/chunks/eed0c3ef6a5c3706.js +0 -1
  715. package/dist/_next/static/chunks/ef51763a796dde8b.js +0 -1
  716. package/dist/_next/static/chunks/f0cb9b2226c53ef9.js +0 -1
  717. package/dist/_next/static/chunks/f0d9f0621f8ec46d.js +0 -1
  718. package/dist/_next/static/chunks/f12f45a558c3fed2.js +0 -1
  719. package/dist/_next/static/chunks/f1e5e295d4db5c0f.js +0 -1
  720. package/dist/_next/static/chunks/f1f911d553a62027.js +0 -1
  721. package/dist/_next/static/chunks/f235a8df2f905e6a.js +0 -1
  722. package/dist/_next/static/chunks/f36595b9995a49a9.js +0 -1
  723. package/dist/_next/static/chunks/f42a71992d139302.js +0 -1
  724. package/dist/_next/static/chunks/f42d74f288f2229c.js +0 -1
  725. package/dist/_next/static/chunks/f461a75ec3b0e4e9.js +0 -1
  726. package/dist/_next/static/chunks/f50fd84e477dbaeb.js +0 -1
  727. package/dist/_next/static/chunks/f659a364f48244ea.js +0 -1
  728. package/dist/_next/static/chunks/f813c3d77459119f.js +0 -1
  729. package/dist/_next/static/chunks/f9cb4b70f67c86d8.js +0 -1
  730. package/dist/_next/static/chunks/fa39b9f8bced4bcd.js +0 -1
  731. package/dist/_next/static/chunks/fa5420e426d2de9f.css +0 -7
  732. package/dist/_next/static/chunks/fa5b61b8e7219fe6.js +0 -1
  733. package/dist/_next/static/chunks/facb82117d49a6e1.js +0 -1
  734. package/dist/_next/static/chunks/fb05f79f5e4b514e.js +0 -1
  735. package/dist/_next/static/chunks/fb0f4d868b87961b.js +0 -1
  736. package/dist/_next/static/chunks/fb2f1266493dd820.js +0 -1
  737. package/dist/_next/static/chunks/fc2efa33a196ee45.js +0 -1
  738. package/dist/_next/static/chunks/fd3d43eb8557ee49.js +0 -1
  739. package/dist/_next/static/chunks/fdecc614380e597a.js +0 -1
  740. package/dist/_next/static/chunks/fdfce6fa0b958336.js +0 -1
  741. package/dist/_next/static/chunks/ff12eca45020947a.js +0 -1
  742. package/dist/_next/static/chunks/ff6860dcd793aa23.js +0 -1
  743. package/dist/_next/static/chunks/turbopack-3d84668fefd38b4b.js +0 -3
  744. package/dist/_next/static/chunks/turbopack-63952675b1d69124.js +0 -3
  745. package/dist/_next/static/chunks/turbopack-8b41433c9a94981f.js +0 -3
  746. package/dist/_next/static/media/data-loading.be8d921a.png +0 -0
  747. package/dist/_next/static/media/no-data.48c973b9.png +0 -0
  748. package/dist/agent-office.html +0 -1224
  749. package/dist/index.html +0 -2
  750. package/dist/index.txt +0 -33
  751. package/dist/manage/about/index.html +0 -2
  752. package/dist/manage/about/index.txt +0 -35
  753. package/dist/manage/env/index.html +0 -2
  754. package/dist/manage/env/index.txt +0 -38
  755. package/dist/manage/general/index.html +0 -2
  756. package/dist/manage/general/index.txt +0 -35
  757. package/dist/manage/index.html +0 -2
  758. package/dist/manage/index.txt +0 -32
  759. package/dist/manage/mcp/index.html +0 -2
  760. package/dist/manage/mcp/index.txt +0 -36
  761. package/dist/manage/permissions/index.html +0 -2
  762. package/dist/manage/permissions/index.txt +0 -35
  763. package/dist/manage/skills/index.html +0 -2
  764. package/dist/manage/skills/index.txt +0 -36
  765. package/dist/manage/task/index.html +0 -2
  766. package/dist/manage/task/index.txt +0 -36
  767. package/dist/manage/teams/index.html +0 -2
  768. package/dist/manage/teams/index.txt +0 -36
  769. package/dist/manage/tools/index.html +0 -2
  770. package/dist/manage/tools/index.txt +0 -36
  771. package/dist/ws-test.html +0 -10377
  772. /package/dist/{_next/static/bgHnfEbjqZYUwK_KG6A0m → safe-a/_next/static/GEpoLDHgyzXdgHMKRqrNr}/_clientMiddlewareManifest.json +0 -0
  773. /package/dist/{_next/static/bgHnfEbjqZYUwK_KG6A0m → safe-a/_next/static/GEpoLDHgyzXdgHMKRqrNr}/_ssgManifest.js +0 -0
  774. /package/dist/{_next → safe-a/_next}/static/chunks/a6dad97d9634a72d.js +0 -0
  775. /package/dist/{_next → safe-a/_next}/static/media/13bf9871fe164e7f-s.f2220059.woff2 +0 -0
  776. /package/dist/{_next → safe-a/_next}/static/media/3fe682a82f50d426-s.23358719.woff2 +0 -0
  777. /package/dist/{_next → safe-a/_next}/static/media/5c285b27cdda1fe8-s.p.a62025f2.woff2 +0 -0
  778. /package/dist/{_next → safe-a/_next}/static/media/70bc3e132a0a741e-s.p.15008bfb.woff2 +0 -0
  779. /package/dist/{_next → safe-a/_next}/static/media/71b036adf157cdcf-s.bd5f4d11.woff2 +0 -0
  780. /package/dist/{_next → safe-a/_next}/static/media/89b21bb081cb7469-s.51c18f09.woff2 +0 -0
  781. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_AMS-Regular.892f691b.ttf +0 -0
  782. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_AMS-Regular.c30af439.woff2 +0 -0
  783. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_AMS-Regular.e6a3cada.woff +0 -0
  784. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Bold.2f97783e.woff +0 -0
  785. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Bold.a36b8125.ttf +0 -0
  786. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Bold.db991531.woff2 +0 -0
  787. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Regular.2b13f013.woff +0 -0
  788. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Regular.7c50032c.ttf +0 -0
  789. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Caligraphic-Regular.c20eee08.woff2 +0 -0
  790. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Bold.5fa2f5e4.woff +0 -0
  791. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Bold.d514bd28.woff2 +0 -0
  792. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Bold.e311399d.ttf +0 -0
  793. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Regular.18139813.woff +0 -0
  794. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Regular.2a73476d.ttf +0 -0
  795. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Fraktur-Regular.5d62e468.woff2 +0 -0
  796. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Bold.6d137c77.ttf +0 -0
  797. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Bold.c24b5ba7.woff +0 -0
  798. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Bold.f4e2828d.woff2 +0 -0
  799. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-BoldItalic.079b33ae.woff +0 -0
  800. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-BoldItalic.c003d3ec.ttf +0 -0
  801. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-BoldItalic.f1884480.woff2 +0 -0
  802. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Italic.26a3619b.woff +0 -0
  803. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Italic.61da3e93.ttf +0 -0
  804. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Italic.a3746929.woff2 +0 -0
  805. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Regular.12644167.woff2 +0 -0
  806. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Regular.876b86ad.ttf +0 -0
  807. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Main-Regular.d511f158.woff +0 -0
  808. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-BoldItalic.5c6a6a93.woff2 +0 -0
  809. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-BoldItalic.ad4dffd5.woff +0 -0
  810. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-BoldItalic.e73b3bf0.ttf +0 -0
  811. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-Italic.03974bc4.ttf +0 -0
  812. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-Italic.1cd2c488.woff +0 -0
  813. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Math-Italic.d8564edb.woff2 +0 -0
  814. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Bold.a03f9428.woff2 +0 -0
  815. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Bold.d4608ed5.ttf +0 -0
  816. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Bold.ff51ef5c.woff +0 -0
  817. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Italic.8ed740d6.woff +0 -0
  818. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Italic.9245afda.woff2 +0 -0
  819. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Italic.c0b22b1e.ttf +0 -0
  820. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Regular.128c9bc2.woff2 +0 -0
  821. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Regular.156dbd4e.ttf +0 -0
  822. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_SansSerif-Regular.ee7b0a16.woff +0 -0
  823. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Script-Regular.00d9a561.ttf +0 -0
  824. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Script-Regular.186c7155.woff2 +0 -0
  825. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Script-Regular.afc2fd5a.woff +0 -0
  826. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size1-Regular.4450ef36.woff2 +0 -0
  827. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size1-Regular.9aaff96b.ttf +0 -0
  828. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size1-Regular.e5bf4c74.woff +0 -0
  829. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size2-Regular.6a97527b.woff2 +0 -0
  830. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size2-Regular.8fbd32af.woff +0 -0
  831. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size2-Regular.f11810ed.ttf +0 -0
  832. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size3-Regular.45ae8eba.woff +0 -0
  833. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size3-Regular.54b7ce9d.woff2 +0 -0
  834. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size3-Regular.9812ade2.ttf +0 -0
  835. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size4-Regular.44a4d487.ttf +0 -0
  836. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size4-Regular.927fc5b9.woff2 +0 -0
  837. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Size4-Regular.b211e3d3.woff +0 -0
  838. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Typewriter-Regular.68b6c3a9.woff +0 -0
  839. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Typewriter-Regular.a1a7ff52.ttf +0 -0
  840. /package/dist/{_next → safe-a/_next}/static/media/KaTeX_Typewriter-Regular.ff99d643.woff2 +0 -0
  841. /package/dist/{_next → safe-a/_next}/static/media/b886574ba42c3409-s.1f4af8e6.woff2 +0 -0
  842. /package/dist/{_next → safe-a/_next}/static/media/c3cb240f9c892514-s.d8e4bce2.woff2 +0 -0
  843. /package/dist/{_next → safe-a/_next}/static/media/c41ca59f1c34ba31-s.p.e20f337c.woff2 +0 -0
  844. /package/dist/{_next → safe-a/_next}/static/media/cc545e633e20c56d-s.f6f1950f.woff2 +0 -0
  845. /package/dist/{favicon.ico → safe-a/favicon.ico} +0 -0
  846. /package/dist/{slash-command-ui-patch.css → safe-a/slash-command-ui-patch.css} +0 -0
  847. /package/dist/{slash-command-ui-patch.js → safe-a/slash-command-ui-patch.js} +0 -0
@@ -0,0 +1,1295 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>办公室</title>
7
+ <link rel="stylesheet" href="/ws-test.css" />
8
+ <style>
9
+ body {
10
+ overflow: hidden;
11
+ -webkit-font-smoothing: antialiased;
12
+ }
13
+ .office-app {
14
+ display: flex;
15
+ flex-direction: column;
16
+ width: 100%;
17
+ height: 100%;
18
+ background: var(--ds-bg);
19
+ }
20
+ .office-header {
21
+ flex-shrink: 0;
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: space-between;
25
+ gap: 16px;
26
+ min-height: 52px;
27
+ padding: 0 20px;
28
+ border-bottom: 1px solid var(--ds-border);
29
+ background: var(--ds-bg);
30
+ }
31
+ .office-header-main {
32
+ min-width: 0;
33
+ flex: 1;
34
+ }
35
+ .office-header-title {
36
+ margin: 0;
37
+ font-size: 16px;
38
+ font-weight: 600;
39
+ line-height: 1.3;
40
+ color: var(--ds-text);
41
+ }
42
+ .office-header-sub {
43
+ margin: 2px 0 0;
44
+ font-size: 12px;
45
+ color: var(--ds-muted);
46
+ line-height: 1.4;
47
+ }
48
+ .btn-office-new {
49
+ flex-shrink: 0;
50
+ display: inline-flex;
51
+ align-items: center;
52
+ gap: 6px;
53
+ padding: 8px 14px;
54
+ border: none;
55
+ border-radius: 999px;
56
+ background: var(--ds-accent);
57
+ color: #fff;
58
+ font-size: 14px;
59
+ font-weight: 500;
60
+ font-family: inherit;
61
+ cursor: pointer;
62
+ transition: background 120ms ease;
63
+ }
64
+ .btn-office-new:hover {
65
+ background: var(--ds-accent-hover);
66
+ }
67
+ .btn-office-new svg {
68
+ flex-shrink: 0;
69
+ }
70
+ .office-main {
71
+ flex: 1;
72
+ display: flex;
73
+ min-height: 0;
74
+ overflow: hidden;
75
+ background: var(--ds-bg);
76
+ }
77
+ .office-list-root {
78
+ flex: 1;
79
+ overflow: auto;
80
+ padding: 20px;
81
+ min-width: 0;
82
+ }
83
+ .agent-list {
84
+ list-style: none;
85
+ margin: 0 auto;
86
+ padding: 0;
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: 2px;
90
+ max-width: 640px;
91
+ }
92
+ .agent-list-empty {
93
+ color: var(--ds-muted);
94
+ font-size: 14px;
95
+ padding: 64px 16px;
96
+ text-align: center;
97
+ max-width: 640px;
98
+ margin: 0 auto;
99
+ }
100
+ .agent-list-item {
101
+ display: block;
102
+ width: 100%;
103
+ padding: 12px 14px;
104
+ border: none;
105
+ border-radius: 10px;
106
+ background: transparent;
107
+ cursor: pointer;
108
+ text-align: left;
109
+ font: inherit;
110
+ color: inherit;
111
+ transition: background 120ms ease;
112
+ }
113
+ .agent-list-item:hover {
114
+ background: var(--ds-item-hover);
115
+ }
116
+ .agent-list-item.is-selected {
117
+ background: var(--ds-item-active);
118
+ }
119
+ .agent-list-body {
120
+ display: flex;
121
+ flex-direction: column;
122
+ gap: 3px;
123
+ min-width: 0;
124
+ }
125
+ .agent-list-name {
126
+ font-size: 15px;
127
+ font-weight: 600;
128
+ line-height: 1.35;
129
+ color: var(--ds-text);
130
+ overflow: hidden;
131
+ text-overflow: ellipsis;
132
+ white-space: nowrap;
133
+ }
134
+ .agent-list-id-sub {
135
+ font-size: 12px;
136
+ font-family: ui-monospace, Menlo, monospace;
137
+ color: var(--ds-muted);
138
+ overflow: hidden;
139
+ text-overflow: ellipsis;
140
+ white-space: nowrap;
141
+ }
142
+ .agent-list-desc {
143
+ font-size: 13px;
144
+ color: var(--ds-secondary);
145
+ line-height: 1.45;
146
+ display: -webkit-box;
147
+ -webkit-box-orient: vertical;
148
+ -webkit-line-clamp: 2;
149
+ overflow: hidden;
150
+ }
151
+ .agent-list-team {
152
+ font-size: 12px;
153
+ color: var(--ds-muted);
154
+ overflow: hidden;
155
+ text-overflow: ellipsis;
156
+ white-space: nowrap;
157
+ }
158
+ .office-team-section {
159
+ margin-bottom: 1rem;
160
+ padding-top: 0.25rem;
161
+ border-top: 1px solid var(--ds-border);
162
+ }
163
+ .office-team-section h3 {
164
+ margin: 0 0 0.5rem;
165
+ font-size: 0.88rem;
166
+ font-weight: 600;
167
+ }
168
+ .office-team-chips {
169
+ display: flex;
170
+ flex-wrap: wrap;
171
+ gap: 6px;
172
+ margin-bottom: 0.65rem;
173
+ min-height: 28px;
174
+ }
175
+ .office-team-chip {
176
+ display: inline-flex;
177
+ align-items: center;
178
+ gap: 4px;
179
+ padding: 4px 10px;
180
+ border-radius: 999px;
181
+ background: var(--ds-item-hover);
182
+ border: 1px solid var(--ds-border);
183
+ font-size: 12px;
184
+ }
185
+ .office-team-chip button {
186
+ border: none;
187
+ background: transparent;
188
+ color: var(--ds-muted);
189
+ cursor: pointer;
190
+ font-size: 1rem;
191
+ line-height: 1;
192
+ padding: 0 2px;
193
+ }
194
+ .office-team-chip button:hover { color: var(--ds-danger); }
195
+ .office-team-empty {
196
+ font-size: 0.8rem;
197
+ color: var(--ds-muted);
198
+ margin: 0 0 0.5rem;
199
+ }
200
+ .office-team-add {
201
+ display: flex;
202
+ gap: 8px;
203
+ align-items: center;
204
+ }
205
+ .office-team-add select {
206
+ flex: 1;
207
+ min-width: 0;
208
+ border: 1px solid var(--ds-border);
209
+ border-radius: 10px;
210
+ padding: 0.45rem 0.55rem;
211
+ font: inherit;
212
+ }
213
+ .office-btn {
214
+ border: 1px solid var(--ds-border);
215
+ background: var(--ds-bg);
216
+ color: var(--ds-text);
217
+ border-radius: var(--ds-radius-sm);
218
+ padding: 8px 14px;
219
+ font-size: 13px;
220
+ font-family: inherit;
221
+ cursor: pointer;
222
+ transition: background 120ms ease, border-color 120ms ease;
223
+ }
224
+ .office-btn:hover { background: var(--ds-item-hover); }
225
+ .office-btn-primary {
226
+ background: var(--ds-accent);
227
+ border-color: var(--ds-accent);
228
+ color: #fff;
229
+ }
230
+ .office-btn-primary:hover { background: var(--ds-accent-hover); }
231
+ .office-btn-danger {
232
+ color: var(--ds-danger);
233
+ border-color: rgba(220, 38, 38, 0.25);
234
+ background: #fff;
235
+ }
236
+ .office-btn-danger:hover {
237
+ background: #fef2f2;
238
+ border-color: var(--ds-danger);
239
+ }
240
+ .office-panel {
241
+ flex-shrink: 0;
242
+ width: min(400px, 44vw);
243
+ background: var(--ds-bg);
244
+ border-left: 1px solid var(--ds-border);
245
+ display: none;
246
+ flex-direction: column;
247
+ min-height: 0;
248
+ }
249
+ .office-panel.is-open {
250
+ display: flex;
251
+ }
252
+ .office-panel-head {
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: space-between;
256
+ gap: 12px;
257
+ padding: 14px 16px;
258
+ border-bottom: 1px solid var(--ds-border);
259
+ flex-shrink: 0;
260
+ }
261
+ .office-panel-head h2 {
262
+ margin: 0;
263
+ font-size: 15px;
264
+ font-weight: 600;
265
+ line-height: 1.3;
266
+ overflow: hidden;
267
+ text-overflow: ellipsis;
268
+ white-space: nowrap;
269
+ min-width: 0;
270
+ }
271
+ .office-panel-close {
272
+ flex-shrink: 0;
273
+ width: 28px;
274
+ height: 28px;
275
+ border: none;
276
+ border-radius: 6px;
277
+ background: transparent;
278
+ font-size: 18px;
279
+ line-height: 1;
280
+ cursor: pointer;
281
+ color: var(--ds-muted);
282
+ }
283
+ .office-panel-close:hover {
284
+ background: var(--ds-item-hover);
285
+ color: var(--ds-text);
286
+ }
287
+ .office-panel-body {
288
+ padding: 16px;
289
+ overflow: auto;
290
+ flex: 1;
291
+ min-height: 0;
292
+ }
293
+ .office-panel-meta {
294
+ margin: 0 0 14px;
295
+ font-size: 12px;
296
+ color: var(--ds-muted);
297
+ line-height: 1.45;
298
+ }
299
+ .office-form-row {
300
+ display: flex;
301
+ flex-direction: column;
302
+ gap: 6px;
303
+ margin-bottom: 14px;
304
+ }
305
+ .office-form-row label {
306
+ font-size: 12px;
307
+ font-weight: 500;
308
+ color: var(--ds-muted);
309
+ }
310
+ .office-form-row input,
311
+ .office-form-row textarea,
312
+ .office-team-add select {
313
+ width: 100%;
314
+ border: 1px solid var(--ds-border);
315
+ border-radius: var(--ds-radius-sm);
316
+ padding: 9px 11px;
317
+ font: inherit;
318
+ font-size: 14px;
319
+ resize: vertical;
320
+ background: var(--ds-bg);
321
+ color: var(--ds-text);
322
+ }
323
+ .office-form-row input:focus,
324
+ .office-form-row textarea:focus,
325
+ .office-team-add select:focus {
326
+ outline: none;
327
+ border-color: var(--ds-accent);
328
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.12);
329
+ }
330
+ .office-form-row textarea { min-height: 80px; line-height: 1.5; }
331
+ .office-form-actions {
332
+ display: flex;
333
+ flex-wrap: wrap;
334
+ gap: 8px;
335
+ margin-top: 8px;
336
+ padding-top: 4px;
337
+ }
338
+ #officeToast {
339
+ position: fixed;
340
+ left: 50%;
341
+ bottom: 28px;
342
+ transform: translateX(-50%) translateY(12px);
343
+ background: var(--ds-text);
344
+ color: #fff;
345
+ padding: 10px 16px;
346
+ border-radius: var(--ds-radius);
347
+ font-size: 13px;
348
+ opacity: 0;
349
+ pointer-events: none;
350
+ transition: opacity 0.2s, transform 0.2s;
351
+ z-index: 100;
352
+ max-width: min(90vw, 420px);
353
+ text-align: center;
354
+ }
355
+ #officeToast.is-visible {
356
+ opacity: 1;
357
+ transform: translateX(-50%) translateY(0);
358
+ }
359
+ #officeToast.is-error { background: var(--ds-danger); }
360
+ .office-list-root::-webkit-scrollbar,
361
+ .office-panel-body::-webkit-scrollbar {
362
+ width: 5px;
363
+ }
364
+ .office-list-root::-webkit-scrollbar-thumb,
365
+ .office-panel-body::-webkit-scrollbar-thumb {
366
+ background: rgba(0, 0, 0, 0.15);
367
+ border-radius: 999px;
368
+ }
369
+ @media (max-width: 768px) {
370
+ .office-main { flex-direction: column; }
371
+ .office-panel {
372
+ width: 100%;
373
+ border-left: none;
374
+ border-top: 1px solid var(--ds-border);
375
+ max-height: 50vh;
376
+ }
377
+ }
378
+ </style>
379
+ </head>
380
+ <body>
381
+ <div id="officeApp" class="office-app">
382
+ <header class="office-header">
383
+ <div class="office-header-main">
384
+ <h1 class="office-header-title">办公室</h1>
385
+ <p class="office-header-sub" id="officeSubtitle">加载中…</p>
386
+ </div>
387
+ <button type="button" class="btn-office-new" id="btnOfficeNewAgent">
388
+ <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
389
+ <path d="M12 5v14M5 12h14"/>
390
+ </svg>
391
+ <span>新建 Agent</span>
392
+ </button>
393
+ </header>
394
+
395
+ <div class="office-main">
396
+ <div id="agentListRoot" class="office-list-root" aria-label="Agent 列表"></div>
397
+
398
+ <aside id="officePanel" class="office-panel" aria-label="Agent 管理面板">
399
+ <div class="office-panel-head">
400
+ <h2 id="officePanelTitle">Agent</h2>
401
+ <button type="button" class="office-panel-close" id="btnOfficePanelClose" aria-label="关闭">&times;</button>
402
+ </div>
403
+ <div class="office-panel-body">
404
+ <p id="officePanelMeta" class="office-panel-meta"></p>
405
+ <form id="officeAgentForm" onsubmit="return false">
406
+ <div class="office-form-row">
407
+ <label for="officeAgentId">Agent ID</label>
408
+ <input id="officeAgentId" type="text" spellcheck="false" placeholder="例如 my-agent" />
409
+ </div>
410
+ <div class="office-form-row">
411
+ <label for="officeAgentWhen">使用时机(whentouse)</label>
412
+ <textarea id="officeAgentWhen" spellcheck="false" placeholder="输入该 agent 的使用场景与触发说明"></textarea>
413
+ </div>
414
+ <div class="office-form-row">
415
+ <label for="officeAgentPrompt">agent.md</label>
416
+ <textarea id="officeAgentPrompt" spellcheck="false" placeholder="Agent 提示词"></textarea>
417
+ </div>
418
+ <section class="office-team-section" id="officeTeamSection" hidden>
419
+ <h3>绑定队员</h3>
420
+ <p id="officeTeamEmpty" class="office-team-empty" hidden>尚未绑定队员</p>
421
+ <div id="officeTeamChips" class="office-team-chips"></div>
422
+ <div class="office-team-add">
423
+ <select id="officeTeamPick" aria-label="选择队员">
424
+ <option value="">选择要添加的 Agent…</option>
425
+ </select>
426
+ <button type="button" class="office-btn office-btn-primary" id="btnOfficeAddTeamMember">添加</button>
427
+ </div>
428
+ </section>
429
+ <div class="office-form-actions">
430
+ <button type="button" class="office-btn office-btn-primary" id="btnOfficeSave">保存</button>
431
+ <button type="button" class="office-btn office-btn-danger" id="btnOfficeDelete">删除</button>
432
+ <button type="button" class="office-btn" id="btnOfficeWorkbench">进入工作台</button>
433
+ </div>
434
+ </form>
435
+ </div>
436
+ </aside>
437
+ </div>
438
+
439
+ <div id="officeToast" role="status" aria-live="polite"></div>
440
+ </div>
441
+
442
+ <script>
443
+ ;(function () {
444
+ 'use strict'
445
+
446
+ /** 解析 API 基址:支持 ?apiBase= 或当前页面 origin(与 ws-test 一致) */
447
+ function httpOriginForApi() {
448
+ try {
449
+ const fromQuery = new URLSearchParams(window.location.search).get('apiBase')
450
+ if (fromQuery && String(fromQuery).trim()) {
451
+ return String(fromQuery).trim().replace(/\/$/, '')
452
+ }
453
+ } catch {
454
+ /* ignore */
455
+ }
456
+ return window.location.origin
457
+ }
458
+
459
+ /** 构建 GET/POST /api/agents 列表地址(无需 agent 查询参数) */
460
+ function buildAgentsListUrl() {
461
+ return new URL('/api/agents', httpOriginForApi() + '/').toString()
462
+ }
463
+
464
+ /** 构建单个 agent 的 REST 地址(由 path 的 id 唯一标识目标) */
465
+ function buildAgentItemUrl(id) {
466
+ return new URL(
467
+ '/api/agents/' + encodeURIComponent(String(id || '').trim()),
468
+ httpOriginForApi() + '/',
469
+ ).toString()
470
+ }
471
+
472
+ /** 构建队员管理子资源地址 */
473
+ function buildAgentTeamMembersUrl(leaderId) {
474
+ return new URL(
475
+ '/api/agents/' +
476
+ encodeURIComponent(String(leaderId || '').trim()) +
477
+ '/team-members',
478
+ httpOriginForApi() + '/',
479
+ ).toString()
480
+ }
481
+
482
+ function buildAgentTeamMemberUrl(leaderId, agentType) {
483
+ return new URL(
484
+ '/api/agents/' +
485
+ encodeURIComponent(String(leaderId || '').trim()) +
486
+ '/team-members/' +
487
+ encodeURIComponent(String(agentType || '').trim()),
488
+ httpOriginForApi() + '/',
489
+ ).toString()
490
+ }
491
+
492
+ /**
493
+ * 拉取可绑定队员候选:仅 agent-runtime 下已创建的 Agent(与 agent.json.agentTeams 同源)。
494
+ * 不使用 /api/agent-teams(那是仓库内置 subagent 类型,不能写入 agentTeams)。
495
+ */
496
+ async function fetchTeamMemberCatalog(leaderId) {
497
+ const leader = String(leaderId || '').trim()
498
+ const agents = await fetchAgentsList()
499
+ const out = []
500
+ for (let i = 0; i < agents.length; i++) {
501
+ const row = agents[i]
502
+ const id = String(row.id || '').trim()
503
+ if (!id || id === leader) continue
504
+ out.push({
505
+ agentType: id,
506
+ whenToUse: typeof row.whentouse === 'string' ? row.whentouse : '',
507
+ })
508
+ }
509
+ out.sort((a, b) => a.agentType.localeCompare(b.agentType))
510
+ return out
511
+ }
512
+
513
+ /** 向 leader 追加一名绑定队员 */
514
+ async function addTeamMember(leaderId, agentType) {
515
+ const r = await fetch(buildAgentTeamMembersUrl(leaderId), {
516
+ method: 'POST',
517
+ headers: { 'content-type': 'application/json; charset=utf-8' },
518
+ body: JSON.stringify({ agentType: String(agentType || '').trim() }),
519
+ })
520
+ const body = await r.json().catch(() => ({}))
521
+ if (!r.ok) {
522
+ throw new Error(body.message || body.error || r.statusText)
523
+ }
524
+ return body.agent || null
525
+ }
526
+
527
+ /** 从 leader 移除一名绑定队员 */
528
+ async function removeTeamMember(leaderId, agentType) {
529
+ const r = await fetch(buildAgentTeamMemberUrl(leaderId, agentType), {
530
+ method: 'DELETE',
531
+ })
532
+ const body = await r.json().catch(() => ({}))
533
+ if (!r.ok) {
534
+ throw new Error(body.message || body.error || r.statusText)
535
+ }
536
+ return body.agent || null
537
+ }
538
+
539
+ /** 校验新建 agent id:字母数字下划线中划线,1~64 */
540
+ function isValidAgentIdInput(id) {
541
+ return /^[a-zA-Z0-9_-]{1,64}$/.test(String(id || '').trim())
542
+ }
543
+
544
+ /**
545
+ * 基于已有 agent.json 构造 PATCH config,仅更新 whentouse;
546
+ * effort 为 null 时不写入,避免覆盖服务端默认值。
547
+ */
548
+ function buildAgentConfigPatch(baseConfig, whentouse) {
549
+ const c = baseConfig && typeof baseConfig === 'object' ? baseConfig : {}
550
+ const env = c.env && typeof c.env === 'object' && !Array.isArray(c.env) ? c.env : {}
551
+ const patch = {
552
+ tools: Array.isArray(c.tools) ? c.tools.map(String) : [],
553
+ disallowedTools: Array.isArray(c.disallowedTools)
554
+ ? c.disallowedTools.map(String)
555
+ : [],
556
+ mcpServers: Array.isArray(c.mcpServers) ? c.mcpServers.map(String) : [],
557
+ skills: Array.isArray(c.skills) ? c.skills.map(String) : [],
558
+ agentTeams: Array.isArray(c.agentTeams) ? c.agentTeams.map(String) : [],
559
+ model: typeof c.model === 'string' ? c.model : '',
560
+ background: c.background === true,
561
+ isolation: typeof c.isolation === 'string' ? c.isolation : '',
562
+ whentouse: typeof whentouse === 'string' ? whentouse : '',
563
+ env,
564
+ }
565
+ if (typeof c.effort === 'string' || typeof c.effort === 'number') {
566
+ patch.effort = c.effort
567
+ }
568
+ return patch
569
+ }
570
+
571
+ /** 拉取 agent 列表 */
572
+ async function fetchAgentsList() {
573
+ const r = await fetch(buildAgentsListUrl())
574
+ const body = await r.json().catch(() => ({}))
575
+ if (!r.ok) {
576
+ throw new Error(body.message || body.error || r.statusText)
577
+ }
578
+ return Array.isArray(body.agents) ? body.agents : []
579
+ }
580
+
581
+ /** 拉取单个 agent 详情(含 config、prompt) */
582
+ async function fetchAgentDetail(id) {
583
+ const r = await fetch(buildAgentItemUrl(id))
584
+ const body = await r.json().catch(() => ({}))
585
+ if (!r.ok) {
586
+ throw new Error(body.message || body.error || r.statusText)
587
+ }
588
+ return body.agent || { id }
589
+ }
590
+
591
+ /** 删除 agent */
592
+ async function deleteAgent(id) {
593
+ const agentId = String(id || '').trim()
594
+ if (!agentId) throw new Error('缺少 agent id')
595
+ const tryDelete = async (withAgentQuery) => {
596
+ const u = new URL(buildAgentItemUrl(agentId))
597
+ if (withAgentQuery) {
598
+ u.searchParams.set('agent', agentId)
599
+ }
600
+ const r = await fetch(u.toString(), { method: 'DELETE' })
601
+ const body = await r.json().catch(() => ({}))
602
+ return { r, body }
603
+ }
604
+ let ret = await tryDelete(false)
605
+ if (!ret.r.ok) {
606
+ const msg = String(ret.body && (ret.body.message || ret.body.error || ''))
607
+ // 兼容仍要求 ?agent 的旧服务端;新服务端不会走该分支。
608
+ if (ret.r.status === 400 && msg.includes('missing required query parameter: agent')) {
609
+ ret = await tryDelete(true)
610
+ }
611
+ }
612
+ if (!ret.r.ok) {
613
+ throw new Error(ret.body.message || ret.body.error || ret.r.statusText)
614
+ }
615
+ }
616
+
617
+ /**
618
+ * 保存 agent:新建走 POST + PATCH whentouse;编辑走 PATCH prompt + config。
619
+ */
620
+ async function saveAgent(params) {
621
+ const { id, whentouse, prompt, isEdit, baseConfig, contextAgent } = params
622
+ if (isEdit) {
623
+ const patchRes = await fetch(buildAgentItemUrl(id), {
624
+ method: 'PATCH',
625
+ headers: { 'content-type': 'application/json; charset=utf-8' },
626
+ body: JSON.stringify({
627
+ prompt,
628
+ config: buildAgentConfigPatch(baseConfig, whentouse),
629
+ }),
630
+ })
631
+ const patchBody = await patchRes.json().catch(() => ({}))
632
+ if (!patchRes.ok) {
633
+ throw new Error(patchBody.message || patchBody.error || patchRes.statusText)
634
+ }
635
+ return id
636
+ }
637
+
638
+ const createRes = await fetch(buildAgentsListUrl(), {
639
+ method: 'POST',
640
+ headers: { 'content-type': 'application/json; charset=utf-8' },
641
+ body: JSON.stringify({ name: id, prompt }),
642
+ })
643
+ const createBody = await createRes.json().catch(() => ({}))
644
+ if (!createRes.ok) {
645
+ throw new Error(createBody.message || createBody.error || createRes.statusText)
646
+ }
647
+
648
+ const cfgBody = await fetchAgentDetail(id)
649
+ const baseCfg =
650
+ cfgBody.config && typeof cfgBody.config === 'object' ? cfgBody.config : null
651
+ const patchRes = await fetch(buildAgentItemUrl(id), {
652
+ method: 'PATCH',
653
+ headers: { 'content-type': 'application/json; charset=utf-8' },
654
+ body: JSON.stringify({
655
+ config: buildAgentConfigPatch(baseCfg, whentouse),
656
+ }),
657
+ })
658
+ const patchBody = await patchRes.json().catch(() => ({}))
659
+ if (!patchRes.ok) {
660
+ throw new Error(patchBody.message || patchBody.error || patchRes.statusText)
661
+ }
662
+ return id
663
+ }
664
+
665
+ /** 列表主标题:优先 displayName,否则用 id */
666
+ function agentListTitle(row) {
667
+ const id = String(row.id || '').trim()
668
+ const dn =
669
+ row && typeof row.displayName === 'string' && row.displayName.trim()
670
+ ? row.displayName.trim()
671
+ : ''
672
+ return dn || id
673
+ }
674
+
675
+ /** 列表副 id:displayName 与 id 不同时展示 id */
676
+ function agentListSubId(row) {
677
+ const id = String(row.id || '').trim()
678
+ const title = agentListTitle(row)
679
+ return title !== id ? id : ''
680
+ }
681
+
682
+ /** 列表页选中状态:仅维护当前 agent id */
683
+ class OfficeController {
684
+ constructor() {
685
+ this.selectedId = null
686
+ this.onSelect = null
687
+ }
688
+
689
+ /** 选中或取消选中,并通知侧栏 UI */
690
+ selectAgent(id) {
691
+ this.selectedId = id || null
692
+ if (this.onSelect) this.onSelect(this.selectedId)
693
+ }
694
+ }
695
+
696
+ function truncateListDesc(text, max) {
697
+ const s = String(text || '').replace(/\s+/g, ' ').trim()
698
+ if (!s) return '暂无使用说明'
699
+ return s.length <= max ? s : s.slice(0, max - 1) + '…'
700
+ }
701
+
702
+ /** 列表副标题:绑定队员摘要 */
703
+ function formatAgentTeamLine(row) {
704
+ const members = Array.isArray(row.agentTeamMembers)
705
+ ? row.agentTeamMembers
706
+ : []
707
+ if (!members.length) return ''
708
+ const names = members.map((m) => String(m.agentType || '').trim()).filter(Boolean)
709
+ const n = names.length
710
+ const preview = names.slice(0, 3).join('、')
711
+ const suffix = n > 3 ? '…' : ''
712
+ return n + ' 名队员 · ' + preview + suffix
713
+ }
714
+
715
+ /** Agent 列表 DOM 渲染 */
716
+ class AgentList {
717
+ constructor(container, onPick) {
718
+ this.container = container
719
+ this.onPick = onPick
720
+ }
721
+
722
+ render(agents, selectedId) {
723
+ if (!this.container) return
724
+ this.container.innerHTML = ''
725
+
726
+ if (!agents.length) {
727
+ const empty = document.createElement('div')
728
+ empty.className = 'agent-list-empty'
729
+ empty.textContent = '暂无 Agent,点击「新建 Agent」创建'
730
+ this.container.appendChild(empty)
731
+ return
732
+ }
733
+
734
+ const ul = document.createElement('ul')
735
+ ul.className = 'agent-list'
736
+ ul.setAttribute('role', 'list')
737
+
738
+ for (let i = 0; i < agents.length; i++) {
739
+ const row = agents[i]
740
+ const id = String(row.id || '').trim()
741
+ if (!id) continue
742
+
743
+ const li = document.createElement('li')
744
+ const btn = document.createElement('button')
745
+ btn.type = 'button'
746
+ btn.className =
747
+ 'agent-list-item' + (selectedId === id ? ' is-selected' : '')
748
+ btn.setAttribute('aria-pressed', selectedId === id ? 'true' : 'false')
749
+
750
+ const body = document.createElement('span')
751
+ body.className = 'agent-list-body'
752
+
753
+ const title = document.createElement('span')
754
+ title.className = 'agent-list-name'
755
+ title.textContent = agentListTitle(row)
756
+
757
+ body.appendChild(title)
758
+
759
+ const subId = agentListSubId(row)
760
+ if (subId) {
761
+ const idEl = document.createElement('span')
762
+ idEl.className = 'agent-list-id-sub'
763
+ idEl.textContent = subId
764
+ body.appendChild(idEl)
765
+ }
766
+
767
+ const desc = document.createElement('span')
768
+ desc.className = 'agent-list-desc'
769
+ desc.textContent = truncateListDesc(row.whentouse, 120)
770
+ body.appendChild(desc)
771
+
772
+ const teamLine = formatAgentTeamLine(row)
773
+ if (teamLine) {
774
+ const team = document.createElement('span')
775
+ team.className = 'agent-list-team'
776
+ team.textContent = teamLine
777
+ body.appendChild(team)
778
+ }
779
+
780
+ btn.appendChild(body)
781
+
782
+ btn.addEventListener('click', () => {
783
+ if (this.onPick) this.onPick(id)
784
+ })
785
+
786
+ li.appendChild(btn)
787
+ ul.appendChild(li)
788
+ }
789
+
790
+ this.container.appendChild(ul)
791
+ }
792
+ }
793
+
794
+ /** 列表 + 侧栏 CRUD 与 URL ?agent= 同步 */
795
+ class OfficeUI {
796
+ constructor(root, controller, list, hooks) {
797
+ this.root = root
798
+ this.controller = controller
799
+ this.list = list
800
+ this.hooks = hooks || {}
801
+ this.contextAgent = ''
802
+ this.agents = []
803
+ this.editingId = null
804
+ this.baseConfig = null
805
+ this.mode = 'idle'
806
+
807
+ this.panelEl = root.querySelector('#officePanel')
808
+ this.panelTitleEl = root.querySelector('#officePanelTitle')
809
+ this.panelMetaEl = root.querySelector('#officePanelMeta')
810
+ this.formEl = root.querySelector('#officeAgentForm')
811
+ this.idInput = root.querySelector('#officeAgentId')
812
+ this.whenInput = root.querySelector('#officeAgentWhen')
813
+ this.promptInput = root.querySelector('#officeAgentPrompt')
814
+ this.btnNew = root.querySelector('#btnOfficeNewAgent')
815
+ this.btnSave = root.querySelector('#btnOfficeSave')
816
+ this.btnDelete = root.querySelector('#btnOfficeDelete')
817
+ this.btnWorkbench = root.querySelector('#btnOfficeWorkbench')
818
+ this.btnClose = root.querySelector('#btnOfficePanelClose')
819
+ this.toastEl = root.querySelector('#officeToast')
820
+ this.teamSection = root.querySelector('#officeTeamSection')
821
+ this.teamChips = root.querySelector('#officeTeamChips')
822
+ this.teamEmpty = root.querySelector('#officeTeamEmpty')
823
+ this.teamPick = root.querySelector('#officeTeamPick')
824
+ this.btnAddTeamMember = root.querySelector('#btnOfficeAddTeamMember')
825
+ this.boundTeamMembers = []
826
+
827
+ this.bindEvents()
828
+ this.hidePanel()
829
+ }
830
+
831
+ bindEvents() {
832
+ if (this.btnNew) {
833
+ this.btnNew.addEventListener('click', () => this.showCreateForm())
834
+ }
835
+ if (this.btnClose) {
836
+ this.btnClose.addEventListener('click', () => {
837
+ this.hidePanel()
838
+ this.controller.selectAgent(null)
839
+ this.clearUrlAgentParam()
840
+ })
841
+ }
842
+ if (this.btnSave) {
843
+ this.btnSave.addEventListener('click', () => void this.submitForm())
844
+ }
845
+ if (this.btnDelete) {
846
+ this.btnDelete.addEventListener('click', () => void this.handleDelete())
847
+ }
848
+ if (this.btnWorkbench) {
849
+ this.btnWorkbench.addEventListener('click', () => {
850
+ const id =
851
+ this.editingId || (this.idInput ? this.idInput.value.trim() : '')
852
+ if (!id) return
853
+ window.location.href =
854
+ '/ws-test.html?agent=' + encodeURIComponent(id)
855
+ })
856
+ }
857
+ if (this.btnAddTeamMember) {
858
+ this.btnAddTeamMember.addEventListener('click', () =>
859
+ void this.handleAddTeamMember(),
860
+ )
861
+ }
862
+ }
863
+
864
+ /** 同步侧栏队员 chips 与下拉候选 */
865
+ renderTeamMembers(leaderId, members, catalog) {
866
+ if (!this.teamSection) return
867
+ const isEdit = this.mode === 'edit' && !!leaderId
868
+ this.teamSection.hidden = !isEdit
869
+ if (!isEdit) return
870
+
871
+ const list = Array.isArray(members) ? members : []
872
+ this.boundTeamMembers = list
873
+
874
+ if (this.teamEmpty) {
875
+ this.teamEmpty.hidden = list.length > 0
876
+ }
877
+ if (this.teamChips) {
878
+ this.teamChips.innerHTML = ''
879
+ const boundSet = new Set(
880
+ list.map((m) => String(m.agentType || '').trim()).filter(Boolean),
881
+ )
882
+ for (let i = 0; i < list.length; i++) {
883
+ const m = list[i]
884
+ const agentType = String(m.agentType || '').trim()
885
+ if (!agentType) continue
886
+ const chip = document.createElement('span')
887
+ chip.className = 'office-team-chip'
888
+ chip.title =
889
+ typeof m.whentouse === 'string' && m.whentouse.trim()
890
+ ? m.whentouse.trim()
891
+ : agentType
892
+ const label = document.createElement('span')
893
+ label.textContent = agentType
894
+ const rm = document.createElement('button')
895
+ rm.type = 'button'
896
+ rm.setAttribute('aria-label', '移除 ' + agentType)
897
+ rm.textContent = '×'
898
+ rm.addEventListener('click', () =>
899
+ void this.handleRemoveTeamMember(agentType),
900
+ )
901
+ chip.appendChild(label)
902
+ chip.appendChild(rm)
903
+ this.teamChips.appendChild(chip)
904
+ }
905
+
906
+ if (this.teamPick) {
907
+ this.teamPick.innerHTML =
908
+ '<option value="">选择要添加的 Agent…</option>'
909
+ const types = Array.isArray(catalog) ? catalog : []
910
+ for (let j = 0; j < types.length; j++) {
911
+ const t = types[j]
912
+ const id = String(t.agentType || '').trim()
913
+ if (!id || id === leaderId || boundSet.has(id)) continue
914
+ const opt = document.createElement('option')
915
+ opt.value = id
916
+ const whenRaw =
917
+ typeof t.whenToUse === 'string'
918
+ ? t.whenToUse
919
+ : typeof t.whentouse === 'string'
920
+ ? t.whentouse
921
+ : ''
922
+ const when = whenRaw.trim()
923
+ opt.textContent = when ? id + ' — ' + when.slice(0, 40) : id
924
+ this.teamPick.appendChild(opt)
925
+ }
926
+ }
927
+ }
928
+ }
929
+
930
+ async handleAddTeamMember() {
931
+ const leaderId = this.editingId
932
+ if (!leaderId || !this.teamPick) return
933
+ const agentType = this.teamPick.value.trim()
934
+ if (!agentType) {
935
+ this.showToast('请先选择要添加的队员', true)
936
+ return
937
+ }
938
+ try {
939
+ const agent = await addTeamMember(leaderId, agentType)
940
+ await this.refreshAgents()
941
+ const members =
942
+ agent && Array.isArray(agent.agentTeamMembers)
943
+ ? agent.agentTeamMembers
944
+ : this.boundTeamMembers
945
+ this.syncBaseConfigFromTeamAgent(agent)
946
+ const catalog = await fetchTeamMemberCatalog(leaderId)
947
+ this.renderTeamMembers(leaderId, members, catalog)
948
+ this.teamPick.value = ''
949
+ this.showToast('已添加队员 ' + agentType)
950
+ } catch (e) {
951
+ this.showToast('添加队员失败: ' + String(e), true)
952
+ }
953
+ }
954
+
955
+ async handleRemoveTeamMember(agentType) {
956
+ const leaderId = this.editingId
957
+ if (!leaderId) return
958
+ if (
959
+ !window.confirm('确定移除队员「' + agentType + '」?')
960
+ ) {
961
+ return
962
+ }
963
+ try {
964
+ const agent = await removeTeamMember(leaderId, agentType)
965
+ await this.refreshAgents()
966
+ const members =
967
+ agent && Array.isArray(agent.agentTeamMembers)
968
+ ? agent.agentTeamMembers
969
+ : []
970
+ this.syncBaseConfigFromTeamAgent(agent)
971
+ const catalog = await fetchTeamMemberCatalog(leaderId)
972
+ this.renderTeamMembers(leaderId, members, catalog)
973
+ this.showToast('已移除队员')
974
+ } catch (e) {
975
+ this.showToast('移除队员失败: ' + String(e), true)
976
+ }
977
+ }
978
+
979
+ /** 队员增删后同步 baseConfig,避免点「保存」把 agentTeams 写回旧值 */
980
+ syncBaseConfigFromTeamAgent(agentRow) {
981
+ if (!agentRow || typeof agentRow !== 'object') return
982
+ const teams = Array.isArray(agentRow.agentTeams)
983
+ ? agentRow.agentTeams.map(String)
984
+ : []
985
+ if (this.baseConfig && typeof this.baseConfig === 'object') {
986
+ this.baseConfig = { ...this.baseConfig, agentTeams: teams }
987
+ return
988
+ }
989
+ this.baseConfig = {
990
+ tools: [],
991
+ disallowedTools: [],
992
+ mcpServers: [],
993
+ skills: [],
994
+ agentTeams: teams,
995
+ model: '',
996
+ background: false,
997
+ isolation: '',
998
+ whentouse: this.whenInput ? this.whenInput.value : '',
999
+ env: {},
1000
+ }
1001
+ }
1002
+
1003
+ showToast(msg, isError) {
1004
+ if (!this.toastEl) return
1005
+ this.toastEl.textContent = msg
1006
+ this.toastEl.classList.toggle('is-error', !!isError)
1007
+ this.toastEl.classList.add('is-visible')
1008
+ clearTimeout(this._toastTimer)
1009
+ this._toastTimer = setTimeout(() => {
1010
+ this.toastEl.classList.remove('is-visible')
1011
+ }, 3200)
1012
+ }
1013
+
1014
+ hidePanel() {
1015
+ if (this.panelEl) this.panelEl.classList.remove('is-open')
1016
+ this.editingId = null
1017
+ this.baseConfig = null
1018
+ this.mode = 'idle'
1019
+ this.renderTeamMembers('', [], [])
1020
+ this.list.render(this.agents, null)
1021
+ }
1022
+
1023
+ showPanelForAgent(id) {
1024
+ if (!this.panelEl) return
1025
+ this.panelEl.classList.add('is-open')
1026
+ this.list.render(this.agents, id)
1027
+ void this.loadAgentIntoForm(id)
1028
+ }
1029
+
1030
+ showCreateForm() {
1031
+ if (!this.panelEl || !this.formEl) return
1032
+ this.panelEl.classList.add('is-open')
1033
+ this.mode = 'create'
1034
+ this.editingId = null
1035
+ this.baseConfig = null
1036
+ if (this.panelTitleEl) this.panelTitleEl.textContent = '新建 Agent'
1037
+ if (this.panelMetaEl) {
1038
+ this.panelMetaEl.textContent = '创建后可从列表进入工作台'
1039
+ }
1040
+ if (this.idInput) {
1041
+ this.idInput.value = ''
1042
+ this.idInput.readOnly = false
1043
+ }
1044
+ if (this.whenInput) this.whenInput.value = ''
1045
+ if (this.promptInput) this.promptInput.value = ''
1046
+ if (this.btnDelete) this.btnDelete.disabled = true
1047
+ if (this.btnWorkbench) this.btnWorkbench.disabled = true
1048
+ this.renderTeamMembers('', [], [])
1049
+ this.list.render(this.agents, null)
1050
+ }
1051
+
1052
+ async loadAgentIntoForm(id) {
1053
+ const agentId = String(id || '').trim()
1054
+ if (!agentId) return
1055
+ this.mode = 'edit'
1056
+ this.editingId = agentId
1057
+ const cached = this.agents.find(function (a) {
1058
+ return String(a.id || '').trim() === agentId
1059
+ })
1060
+ if (this.panelTitleEl) {
1061
+ this.panelTitleEl.textContent = cached ? agentListTitle(cached) : agentId
1062
+ }
1063
+ if (this.panelMetaEl) this.panelMetaEl.textContent = '加载中…'
1064
+ if (this.btnDelete) {
1065
+ this.btnDelete.disabled = false
1066
+ }
1067
+ if (this.btnWorkbench) this.btnWorkbench.disabled = false
1068
+ try {
1069
+ const agent = await fetchAgentDetail(agentId, this.contextAgent)
1070
+ this.baseConfig =
1071
+ agent.config && typeof agent.config === 'object' ? agent.config : null
1072
+ if (this.idInput) {
1073
+ this.idInput.value = agentId
1074
+ this.idInput.readOnly = true
1075
+ }
1076
+ const whentouse =
1077
+ agent.config && typeof agent.config.whentouse === 'string'
1078
+ ? agent.config.whentouse
1079
+ : typeof agent.whentouse === 'string'
1080
+ ? agent.whentouse
1081
+ : ''
1082
+ if (this.whenInput) this.whenInput.value = whentouse
1083
+ if (this.promptInput) {
1084
+ this.promptInput.value =
1085
+ typeof agent.prompt === 'string' ? agent.prompt : ''
1086
+ }
1087
+ if (this.panelTitleEl) {
1088
+ const dn =
1089
+ typeof agent.displayName === 'string' && agent.displayName.trim()
1090
+ ? agent.displayName.trim()
1091
+ : cached
1092
+ ? agentListTitle(cached)
1093
+ : agentId
1094
+ this.panelTitleEl.textContent = dn
1095
+ }
1096
+ const members = Array.isArray(agent.agentTeamMembers)
1097
+ ? agent.agentTeamMembers
1098
+ : []
1099
+ const catalog = await fetchTeamMemberCatalog(agentId)
1100
+ this.renderTeamMembers(agentId, members, catalog)
1101
+ if (this.baseConfig && typeof this.baseConfig === 'object') {
1102
+ this.baseConfig.agentTeams = Array.isArray(agent.agentTeams)
1103
+ ? agent.agentTeams.map(String)
1104
+ : members.map((m) => String(m.agentType || '')).filter(Boolean)
1105
+ }
1106
+ if (this.panelMetaEl) {
1107
+ const teamHint =
1108
+ members.length > 0
1109
+ ? ' · ' + members.length + ' 名队员'
1110
+ : ''
1111
+ this.panelMetaEl.textContent =
1112
+ '共 ' +
1113
+ String(this.agents.length) +
1114
+ ' 个 Agent' +
1115
+ teamHint
1116
+ }
1117
+ } catch (e) {
1118
+ if (this.panelMetaEl) this.panelMetaEl.textContent = '加载失败'
1119
+ this.renderTeamMembers('', [], [])
1120
+ this.showToast('加载 Agent 失败: ' + String(e), true)
1121
+ }
1122
+ }
1123
+
1124
+ async refreshAgents() {
1125
+ this.agents = await fetchAgentsList()
1126
+ this.list.render(this.agents, this.controller.selectedId)
1127
+ if (this.hooks.onAgentsLoaded) this.hooks.onAgentsLoaded(this.agents)
1128
+ return this.agents
1129
+ }
1130
+
1131
+ async submitForm() {
1132
+ const isEdit = this.mode === 'edit' && !!this.editingId
1133
+ const id = isEdit
1134
+ ? this.editingId
1135
+ : this.idInput
1136
+ ? this.idInput.value.trim()
1137
+ : ''
1138
+ const whentouse = this.whenInput ? this.whenInput.value : ''
1139
+ const prompt = this.promptInput ? this.promptInput.value : ''
1140
+ if (!isEdit && !isValidAgentIdInput(id)) {
1141
+ this.showToast(
1142
+ 'Agent ID 仅支持字母、数字、下划线和中划线,长度 1~64',
1143
+ true,
1144
+ )
1145
+ return
1146
+ }
1147
+ try {
1148
+ await saveAgent({
1149
+ id,
1150
+ whentouse,
1151
+ prompt,
1152
+ isEdit,
1153
+ baseConfig: this.baseConfig,
1154
+ contextAgent: this.contextAgent,
1155
+ })
1156
+ await this.refreshAgents()
1157
+ this.mode = 'edit'
1158
+ this.editingId = id
1159
+ if (this.idInput) {
1160
+ this.idInput.value = id
1161
+ this.idInput.readOnly = true
1162
+ }
1163
+ if (this.btnDelete) {
1164
+ this.btnDelete.disabled = false
1165
+ }
1166
+ if (this.btnWorkbench) this.btnWorkbench.disabled = false
1167
+ const savedRow = this.agents.find(function (a) {
1168
+ return String(a.id || '').trim() === id
1169
+ })
1170
+ if (this.panelTitleEl) {
1171
+ this.panelTitleEl.textContent = savedRow ? agentListTitle(savedRow) : id
1172
+ }
1173
+ this.controller.selectAgent(id)
1174
+ this.syncUrlAgentParam(id)
1175
+ if (isEdit) {
1176
+ await this.loadAgentIntoForm(id)
1177
+ } else {
1178
+ this.showPanelForAgent(id)
1179
+ }
1180
+ this.showToast(isEdit ? '已保存' : '已创建')
1181
+ } catch (e) {
1182
+ this.showToast((isEdit ? '保存失败: ' : '创建失败: ') + String(e), true)
1183
+ }
1184
+ }
1185
+
1186
+ async handleDelete() {
1187
+ const id = this.editingId
1188
+ if (!id) return
1189
+ if (!window.confirm('确定删除 Agent「' + id + '」?此操作不可恢复。')) {
1190
+ return
1191
+ }
1192
+ try {
1193
+ await deleteAgent(id)
1194
+ await this.refreshAgents()
1195
+ this.hidePanel()
1196
+ this.clearUrlAgentParam()
1197
+ this.showToast('已删除')
1198
+ } catch (e) {
1199
+ this.showToast('删除失败: ' + String(e), true)
1200
+ }
1201
+ }
1202
+
1203
+ /** 支持通过 ?agent= 深链打开侧栏 */
1204
+ async handleUrlAgentParam() {
1205
+ let param = ''
1206
+ try {
1207
+ param = new URLSearchParams(window.location.search).get('agent') || ''
1208
+ } catch {
1209
+ return
1210
+ }
1211
+ const id = String(param).trim()
1212
+ if (!id) return
1213
+
1214
+ const exists = this.agents.some((a) => String(a.id) === id)
1215
+ if (!exists) {
1216
+ this.showToast('agent 不存在,请先创建', true)
1217
+ this.clearUrlAgentParam()
1218
+ return
1219
+ }
1220
+
1221
+ this.controller.selectAgent(id)
1222
+ this.showPanelForAgent(id)
1223
+ }
1224
+
1225
+ syncUrlAgentParam(id) {
1226
+ try {
1227
+ const u = new URL(window.location.href)
1228
+ u.searchParams.set('agent', id)
1229
+ window.history.replaceState(null, '', u.pathname + u.search)
1230
+ } catch {
1231
+ /* ignore */
1232
+ }
1233
+ }
1234
+
1235
+ clearUrlAgentParam() {
1236
+ try {
1237
+ const u = new URL(window.location.href)
1238
+ u.searchParams.delete('agent')
1239
+ const qs = u.searchParams.toString()
1240
+ window.history.replaceState(null, '', u.pathname + (qs ? '?' + qs : ''))
1241
+ } catch {
1242
+ /* ignore */
1243
+ }
1244
+ }
1245
+
1246
+ onSelect(id) {
1247
+ if (!id) {
1248
+ this.hidePanel()
1249
+ this.clearUrlAgentParam()
1250
+ return
1251
+ }
1252
+ this.showPanelForAgent(id)
1253
+ this.syncUrlAgentParam(id)
1254
+ }
1255
+ }
1256
+
1257
+ /** Agent 列表页入口 */
1258
+ async function main() {
1259
+ const app = document.getElementById('officeApp')
1260
+ const listRoot = document.getElementById('agentListRoot')
1261
+ if (!app || !listRoot) return
1262
+
1263
+ const controller = new OfficeController()
1264
+ const list = new AgentList(listRoot, (id) => controller.selectAgent(id))
1265
+
1266
+ const ui = new OfficeUI(app, controller, list, {
1267
+ onAgentsLoaded(agents) {
1268
+ const subtitle = document.getElementById('officeSubtitle')
1269
+ if (subtitle) {
1270
+ subtitle.textContent =
1271
+ String(agents.length) + ' 个 Agent'
1272
+ }
1273
+ list.render(agents, controller.selectedId)
1274
+ },
1275
+ })
1276
+
1277
+ controller.onSelect = (id) => ui.onSelect(id)
1278
+
1279
+ try {
1280
+ await ui.refreshAgents()
1281
+ await ui.handleUrlAgentParam()
1282
+ } catch (e) {
1283
+ ui.showToast('加载 Agent 失败: ' + String(e), true)
1284
+ const subtitle = document.getElementById('officeSubtitle')
1285
+ if (subtitle) subtitle.textContent = '加载失败'
1286
+ }
1287
+ }
1288
+
1289
+ main().catch((e) => {
1290
+ console.error(e)
1291
+ })
1292
+ })()
1293
+ </script>
1294
+ </body>
1295
+ </html>