@sleep2agi/agent-network-dashboard 0.6.3-preview.56 → 0.6.3-preview.58

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 (718) hide show
  1. package/.next/BUILD_COMMIT +1 -1
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-path-routes-manifest.json +9 -0
  4. package/.next/build-manifest.json +3 -3
  5. package/.next/diagnostics/route-bundle-stats.json +143 -93
  6. package/.next/fallback-build-manifest.json +3 -3
  7. package/.next/next-server.js.nft.json +1 -1
  8. package/.next/prerender-manifest.json +75 -19
  9. package/.next/required-server-files.js +4 -4
  10. package/.next/required-server-files.json +4 -4
  11. package/.next/routes-manifest.json +63 -0
  12. package/.next/server/app/_global-error.html +1 -1
  13. package/.next/server/app/_global-error.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +2 -2
  20. package/.next/server/app/_not-found.rsc +14 -14
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  22. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
  23. package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  24. package/.next/server/app/admin/page.js.nft.json +1 -1
  25. package/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/admin.html +2 -2
  27. package/.next/server/app/admin.rsc +16 -16
  28. package/.next/server/app/admin.segments/_full.segment.rsc +16 -16
  29. package/.next/server/app/admin.segments/_tree.segment.rsc +3 -3
  30. package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +15 -15
  31. package/.next/server/app/api/anet/host-supervisors/route.js.nft.json +1 -1
  32. package/.next/server/app/api/anet/node-config/route.js +1 -1
  33. package/.next/server/app/api/anet/node-config/route.js.nft.json +1 -1
  34. package/.next/server/app/api/hub/people/route/app-paths-manifest.json +3 -0
  35. package/.next/server/app/api/hub/people/route/build-manifest.json +12 -0
  36. package/.next/server/app/api/hub/people/route/server-reference-manifest.json +4 -0
  37. package/.next/server/app/api/hub/people/route.js +7 -0
  38. package/.next/server/app/api/hub/people/route.js.map +5 -0
  39. package/.next/server/app/api/hub/people/route.js.nft.json +1 -0
  40. package/.next/server/app/api/hub/people/route_client-reference-manifest.js +3 -0
  41. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route/app-paths-manifest.json +3 -0
  42. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route/build-manifest.json +12 -0
  43. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route/server-reference-manifest.json +4 -0
  44. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route.js +7 -0
  45. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route.js.map +5 -0
  46. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route.js.nft.json +1 -0
  47. package/.next/server/app/api/hub/requirements/[id]/checklist/[itemId]/route_client-reference-manifest.js +3 -0
  48. package/.next/server/app/api/hub/requirements/[id]/comments/route/app-paths-manifest.json +3 -0
  49. package/.next/server/app/api/hub/requirements/[id]/comments/route/build-manifest.json +12 -0
  50. package/.next/server/app/api/hub/requirements/[id]/comments/route/server-reference-manifest.json +4 -0
  51. package/.next/server/app/api/hub/requirements/[id]/comments/route.js +7 -0
  52. package/.next/server/app/api/hub/requirements/[id]/comments/route.js.map +5 -0
  53. package/.next/server/app/api/hub/requirements/[id]/comments/route.js.nft.json +1 -0
  54. package/.next/server/app/api/hub/requirements/[id]/comments/route_client-reference-manifest.js +3 -0
  55. package/.next/server/app/api/hub/requirements/[id]/route/app-paths-manifest.json +3 -0
  56. package/.next/server/app/api/hub/requirements/[id]/route/build-manifest.json +12 -0
  57. package/.next/server/app/api/hub/requirements/[id]/route/server-reference-manifest.json +4 -0
  58. package/.next/server/app/api/hub/requirements/[id]/route.js +7 -0
  59. package/.next/server/app/api/hub/requirements/[id]/route.js.map +5 -0
  60. package/.next/server/app/api/hub/requirements/[id]/route.js.nft.json +1 -0
  61. package/.next/server/app/api/hub/requirements/[id]/route_client-reference-manifest.js +3 -0
  62. package/.next/server/app/api/hub/requirements/events/route/app-paths-manifest.json +3 -0
  63. package/.next/server/app/api/hub/requirements/events/route/build-manifest.json +12 -0
  64. package/.next/server/app/api/hub/requirements/events/route/server-reference-manifest.json +4 -0
  65. package/.next/server/app/api/hub/requirements/events/route.js +7 -0
  66. package/.next/server/app/api/hub/requirements/events/route.js.map +5 -0
  67. package/.next/server/app/api/hub/requirements/events/route.js.nft.json +1 -0
  68. package/.next/server/app/api/hub/requirements/events/route_client-reference-manifest.js +3 -0
  69. package/.next/server/app/api/hub/requirements/route/app-paths-manifest.json +3 -0
  70. package/.next/server/app/api/hub/requirements/route/build-manifest.json +12 -0
  71. package/.next/server/app/api/hub/requirements/route/server-reference-manifest.json +4 -0
  72. package/.next/server/app/api/hub/requirements/route.js +7 -0
  73. package/.next/server/app/api/hub/requirements/route.js.map +5 -0
  74. package/.next/server/app/api/hub/requirements/route.js.nft.json +1 -0
  75. package/.next/server/app/api/hub/requirements/route_client-reference-manifest.js +3 -0
  76. package/.next/server/app/index.html +2 -2
  77. package/.next/server/app/index.rsc +16 -16
  78. package/.next/server/app/index.segments/__PAGE__.segment.rsc +15 -15
  79. package/.next/server/app/index.segments/_full.segment.rsc +16 -16
  80. package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  81. package/.next/server/app/login/page.js.nft.json +1 -1
  82. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/login.html +2 -2
  84. package/.next/server/app/login.rsc +16 -16
  85. package/.next/server/app/login.segments/_full.segment.rsc +16 -16
  86. package/.next/server/app/login.segments/_tree.segment.rsc +3 -3
  87. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +15 -15
  88. package/.next/server/app/logs/page.js.nft.json +1 -1
  89. package/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/logs.html +2 -2
  91. package/.next/server/app/logs.rsc +16 -16
  92. package/.next/server/app/logs.segments/_full.segment.rsc +16 -16
  93. package/.next/server/app/logs.segments/_tree.segment.rsc +3 -3
  94. package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +15 -15
  95. package/.next/server/app/messages/page.js.nft.json +1 -1
  96. package/.next/server/app/messages/page_client-reference-manifest.js +1 -1
  97. package/.next/server/app/messages.html +2 -2
  98. package/.next/server/app/messages.rsc +16 -16
  99. package/.next/server/app/messages.segments/_full.segment.rsc +16 -16
  100. package/.next/server/app/messages.segments/_tree.segment.rsc +3 -3
  101. package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +15 -15
  102. package/.next/server/app/node/page.js.nft.json +1 -1
  103. package/.next/server/app/node/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/node.html +2 -2
  105. package/.next/server/app/node.rsc +16 -16
  106. package/.next/server/app/node.segments/_full.segment.rsc +16 -16
  107. package/.next/server/app/node.segments/_tree.segment.rsc +3 -3
  108. package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +15 -15
  109. package/.next/server/app/nodes/[alias]/page.js.nft.json +1 -1
  110. package/.next/server/app/nodes/[alias]/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/nodes/page.js.nft.json +1 -1
  112. package/.next/server/app/nodes/page_client-reference-manifest.js +1 -1
  113. package/.next/server/app/nodes.html +2 -2
  114. package/.next/server/app/nodes.rsc +16 -16
  115. package/.next/server/app/nodes.segments/_full.segment.rsc +16 -16
  116. package/.next/server/app/nodes.segments/_tree.segment.rsc +3 -3
  117. package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +15 -15
  118. package/.next/server/app/org/page/app-paths-manifest.json +3 -0
  119. package/.next/server/app/org/page/build-manifest.json +20 -0
  120. package/.next/server/app/org/page/next-font-manifest.json +11 -0
  121. package/.next/server/app/org/page/react-loadable-manifest.json +1 -0
  122. package/.next/server/app/org/page/server-reference-manifest.json +4 -0
  123. package/.next/server/app/org/page.js +13 -0
  124. package/.next/server/app/org/page.js.map +5 -0
  125. package/.next/server/app/org/page.js.nft.json +1 -0
  126. package/.next/server/app/org/page_client-reference-manifest.js +3 -0
  127. package/.next/server/app/org.html +12 -0
  128. package/.next/server/app/org.meta +26 -0
  129. package/.next/server/app/org.rsc +27 -0
  130. package/.next/server/app/org.segments/_full.segment.rsc +27 -0
  131. package/.next/server/app/org.segments/_tree.segment.rsc +5 -0
  132. package/.next/server/app/org.segments/org/__PAGE__.segment.rsc +32 -0
  133. package/.next/server/app/page.js.nft.json +1 -1
  134. package/.next/server/app/page_client-reference-manifest.js +1 -1
  135. package/.next/server/app/providers/page.js.nft.json +1 -1
  136. package/.next/server/app/providers/page_client-reference-manifest.js +1 -1
  137. package/.next/server/app/providers.html +2 -2
  138. package/.next/server/app/providers.rsc +16 -16
  139. package/.next/server/app/providers.segments/_full.segment.rsc +16 -16
  140. package/.next/server/app/providers.segments/_tree.segment.rsc +3 -3
  141. package/.next/server/app/providers.segments/providers/__PAGE__.segment.rsc +15 -15
  142. package/.next/server/app/requirements/[id]/page/app-paths-manifest.json +3 -0
  143. package/.next/server/app/requirements/[id]/page/build-manifest.json +20 -0
  144. package/.next/server/app/requirements/[id]/page/next-font-manifest.json +11 -0
  145. package/.next/server/app/requirements/[id]/page/react-loadable-manifest.json +1 -0
  146. package/.next/server/app/requirements/[id]/page/server-reference-manifest.json +4 -0
  147. package/.next/server/app/requirements/[id]/page.js +13 -0
  148. package/.next/server/app/requirements/[id]/page.js.map +5 -0
  149. package/.next/server/app/requirements/[id]/page.js.nft.json +1 -0
  150. package/.next/server/app/requirements/[id]/page_client-reference-manifest.js +3 -0
  151. package/.next/server/app/requirements/page/app-paths-manifest.json +3 -0
  152. package/.next/server/app/requirements/page/build-manifest.json +20 -0
  153. package/.next/server/app/requirements/page/next-font-manifest.json +11 -0
  154. package/.next/server/app/requirements/page/react-loadable-manifest.json +1 -0
  155. package/.next/server/app/requirements/page/server-reference-manifest.json +4 -0
  156. package/.next/server/app/requirements/page.js +13 -0
  157. package/.next/server/app/requirements/page.js.map +5 -0
  158. package/.next/server/app/requirements/page.js.nft.json +1 -0
  159. package/.next/server/app/requirements/page_client-reference-manifest.js +3 -0
  160. package/.next/server/app/requirements.html +12 -0
  161. package/.next/server/app/requirements.meta +26 -0
  162. package/.next/server/app/requirements.rsc +27 -0
  163. package/.next/server/app/requirements.segments/_full.segment.rsc +27 -0
  164. package/.next/server/app/requirements.segments/_tree.segment.rsc +5 -0
  165. package/.next/server/app/requirements.segments/requirements/__PAGE__.segment.rsc +32 -0
  166. package/.next/server/app/scheduled-tasks/page.js.nft.json +1 -1
  167. package/.next/server/app/scheduled-tasks/page_client-reference-manifest.js +1 -1
  168. package/.next/server/app/scheduled-tasks.html +2 -2
  169. package/.next/server/app/scheduled-tasks.rsc +16 -16
  170. package/.next/server/app/scheduled-tasks.segments/_full.segment.rsc +16 -16
  171. package/.next/server/app/scheduled-tasks.segments/_tree.segment.rsc +3 -3
  172. package/.next/server/app/scheduled-tasks.segments/scheduled-tasks/__PAGE__.segment.rsc +15 -15
  173. package/.next/server/app/server-logs/page.js.nft.json +1 -1
  174. package/.next/server/app/server-logs/page_client-reference-manifest.js +1 -1
  175. package/.next/server/app/server-logs.html +2 -2
  176. package/.next/server/app/server-logs.rsc +16 -16
  177. package/.next/server/app/server-logs.segments/_full.segment.rsc +16 -16
  178. package/.next/server/app/server-logs.segments/_tree.segment.rsc +3 -3
  179. package/.next/server/app/server-logs.segments/server-logs/__PAGE__.segment.rsc +15 -15
  180. package/.next/server/app/servers/page.js.nft.json +1 -1
  181. package/.next/server/app/servers/page_client-reference-manifest.js +1 -1
  182. package/.next/server/app/servers.html +2 -2
  183. package/.next/server/app/servers.rsc +16 -16
  184. package/.next/server/app/servers.segments/_full.segment.rsc +16 -16
  185. package/.next/server/app/servers.segments/_tree.segment.rsc +3 -3
  186. package/.next/server/app/servers.segments/servers/__PAGE__.segment.rsc +15 -15
  187. package/.next/server/app/settings/networks/page.js.nft.json +1 -1
  188. package/.next/server/app/settings/networks/page_client-reference-manifest.js +1 -1
  189. package/.next/server/app/settings/networks.html +2 -2
  190. package/.next/server/app/settings/networks.rsc +16 -16
  191. package/.next/server/app/settings/networks.segments/_full.segment.rsc +16 -16
  192. package/.next/server/app/settings/networks.segments/_tree.segment.rsc +3 -3
  193. package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +15 -15
  194. package/.next/server/app/settings/page.js.nft.json +1 -1
  195. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  196. package/.next/server/app/settings/tokens/page.js.nft.json +1 -1
  197. package/.next/server/app/settings/tokens/page_client-reference-manifest.js +1 -1
  198. package/.next/server/app/settings/tokens.html +2 -2
  199. package/.next/server/app/settings/tokens.rsc +16 -16
  200. package/.next/server/app/settings/tokens.segments/_full.segment.rsc +16 -16
  201. package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +3 -3
  202. package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +15 -15
  203. package/.next/server/app/settings.html +2 -2
  204. package/.next/server/app/settings.rsc +16 -16
  205. package/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  206. package/.next/server/app/settings.segments/_tree.segment.rsc +3 -3
  207. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +15 -15
  208. package/.next/server/app/skillhub/page.js.nft.json +1 -1
  209. package/.next/server/app/skillhub/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/skillhub.html +2 -2
  211. package/.next/server/app/skillhub.rsc +16 -16
  212. package/.next/server/app/skillhub.segments/_full.segment.rsc +16 -16
  213. package/.next/server/app/skillhub.segments/_tree.segment.rsc +3 -3
  214. package/.next/server/app/skillhub.segments/skillhub/__PAGE__.segment.rsc +15 -15
  215. package/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
  216. package/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
  217. package/.next/server/app/tasks/page.js.nft.json +1 -1
  218. package/.next/server/app/tasks/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app/tasks.html +2 -2
  220. package/.next/server/app/tasks.rsc +16 -16
  221. package/.next/server/app/tasks.segments/_full.segment.rsc +16 -16
  222. package/.next/server/app/tasks.segments/_tree.segment.rsc +3 -3
  223. package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +15 -15
  224. package/.next/server/app-paths-manifest.json +9 -0
  225. package/.next/server/chunks/1oeh_server_app_api_hub_requirements_[id]_checklist_[itemId]_route_actions_05mpe5a.js +3 -0
  226. package/.next/server/chunks/1oeh_server_app_api_hub_requirements_[id]_checklist_[itemId]_route_actions_05mpe5a.js.map +1 -0
  227. package/.next/server/chunks/1oeh_server_app_api_hub_requirements_[id]_comments_route_actions_1lv4qr1.js +3 -0
  228. package/.next/server/chunks/1oeh_server_app_api_hub_requirements_[id]_comments_route_actions_1lv4qr1.js.map +1 -0
  229. package/.next/server/chunks/[root-of-the-server]__0-wvy_a._.js +1 -1
  230. package/.next/server/chunks/[root-of-the-server]__0-wvy_a._.js.map +1 -1
  231. package/.next/server/chunks/[root-of-the-server]__053z4wp._.js +3 -0
  232. package/.next/server/chunks/[root-of-the-server]__053z4wp._.js.map +1 -0
  233. package/.next/server/chunks/[root-of-the-server]__0if0bw1._.js +3 -0
  234. package/.next/server/chunks/[root-of-the-server]__0if0bw1._.js.map +1 -0
  235. package/.next/server/chunks/[root-of-the-server]__0liwkmx._.js +1 -1
  236. package/.next/server/chunks/[root-of-the-server]__0liwkmx._.js.map +1 -1
  237. package/.next/server/chunks/[root-of-the-server]__0q9xwca._.js +3 -0
  238. package/.next/server/chunks/[root-of-the-server]__0q9xwca._.js.map +1 -0
  239. package/.next/server/chunks/[root-of-the-server]__1941b2h._.js +3 -0
  240. package/.next/server/chunks/[root-of-the-server]__1941b2h._.js.map +1 -0
  241. package/.next/server/chunks/[root-of-the-server]__1_rzyvn._.js +3 -0
  242. package/.next/server/chunks/[root-of-the-server]__1_rzyvn._.js.map +1 -0
  243. package/.next/server/chunks/[root-of-the-server]__1vua9gf._.js +3 -0
  244. package/.next/server/chunks/[root-of-the-server]__1vua9gf._.js.map +1 -0
  245. package/.next/server/chunks/_05lpz54._.js +1 -1
  246. package/.next/server/chunks/_05lpz54._.js.map +1 -1
  247. package/.next/server/chunks/_next-internal_server_app_api_hub_people_route_actions_01pw78e.js +3 -0
  248. package/.next/server/chunks/_next-internal_server_app_api_hub_people_route_actions_01pw78e.js.map +1 -0
  249. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_[id]_route_actions_1jkq5c6.js +3 -0
  250. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_[id]_route_actions_1jkq5c6.js.map +1 -0
  251. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_events_route_actions_1ypnpu5.js +3 -0
  252. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_events_route_actions_1ypnpu5.js.map +1 -0
  253. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_route_actions_1lyeno6.js +3 -0
  254. package/.next/server/chunks/_next-internal_server_app_api_hub_requirements_route_actions_1lyeno6.js.map +1 -0
  255. package/.next/server/chunks/ssr/[root-of-the-server]__0-94ipy._.js +3 -0
  256. package/.next/server/chunks/ssr/[root-of-the-server]__0-94ipy._.js.map +1 -0
  257. package/.next/server/chunks/ssr/[root-of-the-server]__09n7eih._.js +3 -0
  258. package/.next/server/chunks/ssr/[root-of-the-server]__09n7eih._.js.map +1 -0
  259. package/.next/server/chunks/ssr/[root-of-the-server]__0ol09h3._.js +3 -0
  260. package/.next/server/chunks/ssr/[root-of-the-server]__0ol09h3._.js.map +1 -0
  261. package/.next/server/chunks/ssr/[root-of-the-server]__14k36ti._.js +3 -0
  262. package/.next/server/chunks/ssr/[root-of-the-server]__14k36ti._.js.map +1 -0
  263. package/.next/server/chunks/ssr/[root-of-the-server]__1bn1jjm._.js +3 -0
  264. package/.next/server/chunks/ssr/[root-of-the-server]__1bn1jjm._.js.map +1 -0
  265. package/.next/server/chunks/ssr/[root-of-the-server]__1ovdbox._.js +1 -1
  266. package/.next/server/chunks/ssr/[root-of-the-server]__1ovdbox._.js.map +1 -1
  267. package/.next/server/chunks/ssr/_0q4m25o._.js +0 -0
  268. package/.next/server/chunks/ssr/_0q4m25o._.js.map +1 -1
  269. package/.next/server/chunks/ssr/_1z1o6o3._.js +0 -0
  270. package/.next/server/chunks/ssr/_1z1o6o3._.js.map +1 -1
  271. package/.next/server/chunks/ssr/_next-internal_server_app_org_page_actions_0hbcef1.js +3 -0
  272. package/.next/server/chunks/ssr/_next-internal_server_app_org_page_actions_0hbcef1.js.map +1 -0
  273. package/.next/server/chunks/ssr/_next-internal_server_app_requirements_[id]_page_actions_1wjoy4l.js +3 -0
  274. package/.next/server/chunks/ssr/_next-internal_server_app_requirements_[id]_page_actions_1wjoy4l.js.map +1 -0
  275. package/.next/server/chunks/ssr/_next-internal_server_app_requirements_page_actions_0x9m0gy.js +3 -0
  276. package/.next/server/chunks/ssr/_next-internal_server_app_requirements_page_actions_0x9m0gy.js.map +1 -0
  277. package/.next/server/chunks/ssr/app_05mfyco._.js +3 -0
  278. package/.next/server/chunks/ssr/app_05mfyco._.js.map +1 -0
  279. package/.next/server/chunks/ssr/{app_0_s8u96._.js → app_07bzc6w._.js} +1 -1
  280. package/.next/server/chunks/ssr/app_099f0wg._.js +3 -0
  281. package/.next/server/chunks/ssr/app_099f0wg._.js.map +1 -0
  282. package/.next/server/chunks/ssr/{app_1oxcq68._.js → app_0g7oz9w._.js} +1 -1
  283. package/.next/server/chunks/ssr/app_0iz553k._.js +1 -1
  284. package/.next/server/chunks/ssr/app_0iz553k._.js.map +1 -1
  285. package/.next/server/chunks/ssr/app_0los-eu._.js +1 -1
  286. package/.next/server/chunks/ssr/app_0los-eu._.js.map +1 -1
  287. package/.next/server/chunks/ssr/{app_0x7s72b._.js → app_0tt2ueo._.js} +1 -1
  288. package/.next/server/chunks/ssr/{app_081zy6c._.js → app_0ugqkd7._.js} +1 -1
  289. package/.next/server/chunks/ssr/app_1auk3il._.js +11 -0
  290. package/.next/server/chunks/ssr/app_1auk3il._.js.map +1 -0
  291. package/.next/server/chunks/ssr/{app_0o4bxq0._.js → app_1e91uc-._.js} +1 -1
  292. package/.next/server/chunks/ssr/{app_1psh956._.js → app_1f96aq_._.js} +1 -1
  293. package/.next/server/chunks/ssr/app_1rma_8a._.js +11 -0
  294. package/.next/server/chunks/ssr/app_1rma_8a._.js.map +1 -0
  295. package/.next/server/chunks/ssr/{app_0_dhiwi._.js → app_1ua57bx._.js} +1 -1
  296. package/.next/server/chunks/ssr/app_components_04a31va._.js +1 -1
  297. package/.next/server/chunks/ssr/app_components_04a31va._.js.map +1 -1
  298. package/.next/server/chunks/ssr/{app_lib_10o69j_._.js → app_lib_20-pe_0._.js} +2 -2
  299. package/.next/server/chunks/ssr/{app_lib_10o69j_._.js.map → app_lib_20-pe_0._.js.map} +1 -1
  300. package/.next/server/chunks/ssr/app_nodes_NodesView_tsx_1w6_d8p._.js +2 -2
  301. package/.next/server/chunks/ssr/app_nodes_NodesView_tsx_1w6_d8p._.js.map +1 -1
  302. package/.next/server/chunks/ssr/app_page_tsx_0pxmutw._.js +1 -1
  303. package/.next/server/chunks/ssr/app_page_tsx_0pxmutw._.js.map +1 -1
  304. package/.next/server/chunks/ssr/app_scheduled-tasks_page_tsx_0xs70_6._.js +1 -1
  305. package/.next/server/chunks/ssr/app_scheduled-tasks_page_tsx_0xs70_6._.js.map +1 -1
  306. package/.next/server/chunks/ssr/app_tasks_TasksView_tsx_068vqml._.js +1 -1
  307. package/.next/server/chunks/ssr/app_tasks_TasksView_tsx_068vqml._.js.map +1 -1
  308. package/.next/server/functions-config-manifest.json +4 -0
  309. package/.next/server/middleware-build-manifest.js +3 -3
  310. package/.next/server/middleware.js.nft.json +1 -1
  311. package/.next/server/next-font-manifest.js +1 -1
  312. package/.next/server/next-font-manifest.json +12 -0
  313. package/.next/server/pages/404.html +2 -2
  314. package/.next/server/pages/500.html +1 -1
  315. package/.next/server/prefetch-hints.json +28 -0
  316. package/.next/server/server-reference-manifest.js +1 -1
  317. package/.next/server/server-reference-manifest.json +1 -1
  318. package/.next/static/{trj9RsCWuEDMfq9BuoKfl → FEaCQpBc05SBAWTBHRt5h}/_clientMiddlewareManifest.js +4 -0
  319. package/.next/static/chunks/{27b9kqyo7bmdr.js → 08-obrj2goweb.js} +2 -2
  320. package/.next/static/chunks/0fih4pzed1syn.js +9 -0
  321. package/.next/static/chunks/0iiu4-g5k8jcq.js +1 -0
  322. package/.next/static/chunks/{37booeyruo9_l.js → 0iz44n632kw4w.js} +1 -1
  323. package/.next/static/chunks/0jt-1caejz1jv.js +1 -0
  324. package/.next/static/chunks/0k-4980o5t7_r.css +1 -0
  325. package/.next/static/chunks/{0agh8mvmpke4j.js → 0z9tzvfwtc16z.js} +1 -1
  326. package/.next/static/chunks/114pblaedlrqs.js +1 -0
  327. package/.next/static/chunks/1tcaw8g6u6o-4.js +1 -0
  328. package/.next/static/chunks/1v5-qgib9884o.js +0 -0
  329. package/.next/static/chunks/{02303d1rbqx74.js → 2-x9r-1t3c1mn.js} +1 -1
  330. package/.next/static/chunks/{28o3ssg0_q2n-.js → 26bpf-fpc6zpt.js} +1 -1
  331. package/.next/static/chunks/2anlzel60my8y.js +2 -0
  332. package/.next/static/chunks/{3jxk7q1jxyvol.js → 2divamiv1re3v.js} +1 -1
  333. package/.next/static/chunks/3cb3_kcec7bms.js +1 -0
  334. package/.next/static/chunks/{233p45nuh4m5b.css → 3d-1vk5hzu5rq.css} +2 -2
  335. package/.next/static/chunks/3u059pjgl4gcw.js +1 -0
  336. package/.next/static/chunks/3vv0y_64bnnsf.js +1 -0
  337. package/.next/trace +2 -2
  338. package/.next/trace-build +1 -1
  339. package/.next/types/routes.d.ts +11 -2
  340. package/.next/types/validator.ts +81 -0
  341. package/.vercel/.env.development.local +2 -0
  342. package/.vercel/.env.production.local +25 -0
  343. package/.vercel/README.txt +11 -0
  344. package/.vercel/output/builds.json +23 -0
  345. package/.vercel/output/config.json +489 -0
  346. package/.vercel/output/diagnostics/build-diagnostics.json +6 -0
  347. package/.vercel/output/diagnostics/cli_traces.json +1 -0
  348. package/.vercel/output/diagnostics/framework.json +1 -0
  349. package/.vercel/output/diagnostics/route-bundle-stats.json +245 -0
  350. package/.vercel/output/diagnostics/trace +2 -0
  351. package/.vercel/output/diagnostics/trace-build +1 -0
  352. package/.vercel/output/diagnostics/turbopack +0 -0
  353. package/.vercel/output/functions/_global-error.prerender-config.json +38 -0
  354. package/.vercel/output/functions/_global-error.prerender-fallback.html +1 -0
  355. package/.vercel/output/functions/_global-error.rsc.func/.next/routes-manifest.json +1 -0
  356. package/.vercel/output/functions/_global-error.rsc.func/.next/server/app-paths-manifest.json +1 -0
  357. package/.vercel/output/functions/_global-error.rsc.func/.next/server/pages-manifest.json +1 -0
  358. package/.vercel/output/functions/_global-error.rsc.func/.vc-config.json +807 -0
  359. package/.vercel/output/functions/_global-error.rsc.func/___next_launcher.cjs +68 -0
  360. package/.vercel/output/functions/_global-error.rsc.prerender-config.json +38 -0
  361. package/.vercel/output/functions/_global-error.rsc.prerender-fallback.rsc +15 -0
  362. package/.vercel/output/functions/_global-error.segments/__PAGE__.segment.rsc.prerender-config.json +28 -0
  363. package/.vercel/output/functions/_global-error.segments/__PAGE__.segment.rsc.prerender-fallback.rsc +5 -0
  364. package/.vercel/output/functions/_global-error.segments/_full.segment.rsc.prerender-config.json +28 -0
  365. package/.vercel/output/functions/_global-error.segments/_full.segment.rsc.prerender-fallback.rsc +15 -0
  366. package/.vercel/output/functions/_global-error.segments/_head.segment.rsc.prerender-config.json +28 -0
  367. package/.vercel/output/functions/_global-error.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  368. package/.vercel/output/functions/_global-error.segments/_index.segment.rsc.prerender-config.json +28 -0
  369. package/.vercel/output/functions/_global-error.segments/_index.segment.rsc.prerender-fallback.rsc +5 -0
  370. package/.vercel/output/functions/_global-error.segments/_tree.segment.rsc.prerender-config.json +28 -0
  371. package/.vercel/output/functions/_global-error.segments/_tree.segment.rsc.prerender-fallback.rsc +1 -0
  372. package/.vercel/output/functions/_middleware.func/.vc-config.json +107 -0
  373. package/.vercel/output/functions/_middleware.func/___next_launcher.cjs +135 -0
  374. package/.vercel/output/functions/_not-found.prerender-config.json +38 -0
  375. package/.vercel/output/functions/_not-found.prerender-fallback.html +12 -0
  376. package/.vercel/output/functions/_not-found.rsc.prerender-config.json +38 -0
  377. package/.vercel/output/functions/_not-found.rsc.prerender-fallback.rsc +21 -0
  378. package/.vercel/output/functions/_not-found.segments/_full.segment.rsc.prerender-config.json +28 -0
  379. package/.vercel/output/functions/_not-found.segments/_full.segment.rsc.prerender-fallback.rsc +21 -0
  380. package/.vercel/output/functions/_not-found.segments/_head.segment.rsc.prerender-config.json +28 -0
  381. package/.vercel/output/functions/_not-found.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  382. package/.vercel/output/functions/_not-found.segments/_index.segment.rsc.prerender-config.json +28 -0
  383. package/.vercel/output/functions/_not-found.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  384. package/.vercel/output/functions/_not-found.segments/_not-found/__PAGE__.segment.rsc.prerender-config.json +28 -0
  385. package/.vercel/output/functions/_not-found.segments/_not-found/__PAGE__.segment.rsc.prerender-fallback.rsc +5 -0
  386. package/.vercel/output/functions/_not-found.segments/_not-found.segment.rsc.prerender-config.json +28 -0
  387. package/.vercel/output/functions/_not-found.segments/_not-found.segment.rsc.prerender-fallback.rsc +5 -0
  388. package/.vercel/output/functions/_not-found.segments/_tree.segment.rsc.prerender-config.json +28 -0
  389. package/.vercel/output/functions/_not-found.segments/_tree.segment.rsc.prerender-fallback.rsc +3 -0
  390. package/.vercel/output/functions/admin.prerender-config.json +37 -0
  391. package/.vercel/output/functions/admin.prerender-fallback.html +12 -0
  392. package/.vercel/output/functions/admin.rsc.prerender-config.json +38 -0
  393. package/.vercel/output/functions/admin.rsc.prerender-fallback.rsc +27 -0
  394. package/.vercel/output/functions/admin.segments/_full.segment.rsc.prerender-config.json +28 -0
  395. package/.vercel/output/functions/admin.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  396. package/.vercel/output/functions/admin.segments/_head.segment.rsc.prerender-config.json +28 -0
  397. package/.vercel/output/functions/admin.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  398. package/.vercel/output/functions/admin.segments/_index.segment.rsc.prerender-config.json +28 -0
  399. package/.vercel/output/functions/admin.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  400. package/.vercel/output/functions/admin.segments/_tree.segment.rsc.prerender-config.json +28 -0
  401. package/.vercel/output/functions/admin.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  402. package/.vercel/output/functions/admin.segments/admin/__PAGE__.segment.rsc.prerender-config.json +28 -0
  403. package/.vercel/output/functions/admin.segments/admin/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  404. package/.vercel/output/functions/admin.segments/admin.segment.rsc.prerender-config.json +28 -0
  405. package/.vercel/output/functions/admin.segments/admin.segment.rsc.prerender-fallback.rsc +5 -0
  406. package/.vercel/output/functions/api/anet/config.func/.next/routes-manifest.json +1 -0
  407. package/.vercel/output/functions/api/anet/config.func/.next/server/app-paths-manifest.json +1 -0
  408. package/.vercel/output/functions/api/anet/config.func/.next/server/pages-manifest.json +1 -0
  409. package/.vercel/output/functions/api/anet/config.func/.vc-config.json +818 -0
  410. package/.vercel/output/functions/api/anet/config.func/___next_launcher.cjs +68 -0
  411. package/.vercel/output/functions/index.prerender-config.json +38 -0
  412. package/.vercel/output/functions/index.prerender-fallback.html +12 -0
  413. package/.vercel/output/functions/index.rsc.prerender-config.json +38 -0
  414. package/.vercel/output/functions/index.rsc.prerender-fallback.rsc +25 -0
  415. package/.vercel/output/functions/index.segments/__PAGE__.segment.rsc.prerender-config.json +28 -0
  416. package/.vercel/output/functions/index.segments/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  417. package/.vercel/output/functions/index.segments/_full.segment.rsc.prerender-config.json +28 -0
  418. package/.vercel/output/functions/index.segments/_full.segment.rsc.prerender-fallback.rsc +25 -0
  419. package/.vercel/output/functions/index.segments/_head.segment.rsc.prerender-config.json +28 -0
  420. package/.vercel/output/functions/index.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  421. package/.vercel/output/functions/index.segments/_index.segment.rsc.prerender-config.json +28 -0
  422. package/.vercel/output/functions/index.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  423. package/.vercel/output/functions/index.segments/_tree.segment.rsc.prerender-config.json +28 -0
  424. package/.vercel/output/functions/index.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  425. package/.vercel/output/functions/login.prerender-config.json +37 -0
  426. package/.vercel/output/functions/login.prerender-fallback.html +6 -0
  427. package/.vercel/output/functions/login.rsc.prerender-config.json +38 -0
  428. package/.vercel/output/functions/login.rsc.prerender-fallback.rsc +27 -0
  429. package/.vercel/output/functions/login.segments/_full.segment.rsc.prerender-config.json +28 -0
  430. package/.vercel/output/functions/login.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  431. package/.vercel/output/functions/login.segments/_head.segment.rsc.prerender-config.json +28 -0
  432. package/.vercel/output/functions/login.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  433. package/.vercel/output/functions/login.segments/_index.segment.rsc.prerender-config.json +28 -0
  434. package/.vercel/output/functions/login.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  435. package/.vercel/output/functions/login.segments/_tree.segment.rsc.prerender-config.json +28 -0
  436. package/.vercel/output/functions/login.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  437. package/.vercel/output/functions/login.segments/login/__PAGE__.segment.rsc.prerender-config.json +28 -0
  438. package/.vercel/output/functions/login.segments/login/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  439. package/.vercel/output/functions/login.segments/login.segment.rsc.prerender-config.json +28 -0
  440. package/.vercel/output/functions/login.segments/login.segment.rsc.prerender-fallback.rsc +5 -0
  441. package/.vercel/output/functions/logs.prerender-config.json +37 -0
  442. package/.vercel/output/functions/logs.prerender-fallback.html +12 -0
  443. package/.vercel/output/functions/logs.rsc.prerender-config.json +38 -0
  444. package/.vercel/output/functions/logs.rsc.prerender-fallback.rsc +27 -0
  445. package/.vercel/output/functions/logs.segments/_full.segment.rsc.prerender-config.json +28 -0
  446. package/.vercel/output/functions/logs.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  447. package/.vercel/output/functions/logs.segments/_head.segment.rsc.prerender-config.json +28 -0
  448. package/.vercel/output/functions/logs.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  449. package/.vercel/output/functions/logs.segments/_index.segment.rsc.prerender-config.json +28 -0
  450. package/.vercel/output/functions/logs.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  451. package/.vercel/output/functions/logs.segments/_tree.segment.rsc.prerender-config.json +28 -0
  452. package/.vercel/output/functions/logs.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  453. package/.vercel/output/functions/logs.segments/logs/__PAGE__.segment.rsc.prerender-config.json +28 -0
  454. package/.vercel/output/functions/logs.segments/logs/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  455. package/.vercel/output/functions/logs.segments/logs.segment.rsc.prerender-config.json +28 -0
  456. package/.vercel/output/functions/logs.segments/logs.segment.rsc.prerender-fallback.rsc +5 -0
  457. package/.vercel/output/functions/manifest.webmanifest.func/.next/routes-manifest.json +1 -0
  458. package/.vercel/output/functions/manifest.webmanifest.func/.next/server/app-paths-manifest.json +1 -0
  459. package/.vercel/output/functions/manifest.webmanifest.func/.next/server/pages-manifest.json +1 -0
  460. package/.vercel/output/functions/manifest.webmanifest.func/.vc-config.json +715 -0
  461. package/.vercel/output/functions/manifest.webmanifest.func/___next_launcher.cjs +68 -0
  462. package/.vercel/output/functions/manifest.webmanifest.prerender-config.json +38 -0
  463. package/.vercel/output/functions/manifest.webmanifest.prerender-fallback.body +1 -0
  464. package/.vercel/output/functions/messages.prerender-config.json +37 -0
  465. package/.vercel/output/functions/messages.prerender-fallback.html +12 -0
  466. package/.vercel/output/functions/messages.rsc.prerender-config.json +38 -0
  467. package/.vercel/output/functions/messages.rsc.prerender-fallback.rsc +27 -0
  468. package/.vercel/output/functions/messages.segments/_full.segment.rsc.prerender-config.json +28 -0
  469. package/.vercel/output/functions/messages.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  470. package/.vercel/output/functions/messages.segments/_head.segment.rsc.prerender-config.json +28 -0
  471. package/.vercel/output/functions/messages.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  472. package/.vercel/output/functions/messages.segments/_index.segment.rsc.prerender-config.json +28 -0
  473. package/.vercel/output/functions/messages.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  474. package/.vercel/output/functions/messages.segments/_tree.segment.rsc.prerender-config.json +28 -0
  475. package/.vercel/output/functions/messages.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  476. package/.vercel/output/functions/messages.segments/messages/__PAGE__.segment.rsc.prerender-config.json +28 -0
  477. package/.vercel/output/functions/messages.segments/messages/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  478. package/.vercel/output/functions/messages.segments/messages.segment.rsc.prerender-config.json +28 -0
  479. package/.vercel/output/functions/messages.segments/messages.segment.rsc.prerender-fallback.rsc +5 -0
  480. package/.vercel/output/functions/node.prerender-config.json +37 -0
  481. package/.vercel/output/functions/node.prerender-fallback.html +12 -0
  482. package/.vercel/output/functions/node.rsc.prerender-config.json +38 -0
  483. package/.vercel/output/functions/node.rsc.prerender-fallback.rsc +27 -0
  484. package/.vercel/output/functions/node.segments/_full.segment.rsc.prerender-config.json +28 -0
  485. package/.vercel/output/functions/node.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  486. package/.vercel/output/functions/node.segments/_head.segment.rsc.prerender-config.json +28 -0
  487. package/.vercel/output/functions/node.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  488. package/.vercel/output/functions/node.segments/_index.segment.rsc.prerender-config.json +28 -0
  489. package/.vercel/output/functions/node.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  490. package/.vercel/output/functions/node.segments/_tree.segment.rsc.prerender-config.json +28 -0
  491. package/.vercel/output/functions/node.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  492. package/.vercel/output/functions/node.segments/node/__PAGE__.segment.rsc.prerender-config.json +28 -0
  493. package/.vercel/output/functions/node.segments/node/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  494. package/.vercel/output/functions/node.segments/node.segment.rsc.prerender-config.json +28 -0
  495. package/.vercel/output/functions/node.segments/node.segment.rsc.prerender-fallback.rsc +5 -0
  496. package/.vercel/output/functions/nodes.prerender-config.json +37 -0
  497. package/.vercel/output/functions/nodes.prerender-fallback.html +12 -0
  498. package/.vercel/output/functions/nodes.rsc.prerender-config.json +38 -0
  499. package/.vercel/output/functions/nodes.rsc.prerender-fallback.rsc +27 -0
  500. package/.vercel/output/functions/nodes.segments/_full.segment.rsc.prerender-config.json +28 -0
  501. package/.vercel/output/functions/nodes.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  502. package/.vercel/output/functions/nodes.segments/_head.segment.rsc.prerender-config.json +28 -0
  503. package/.vercel/output/functions/nodes.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  504. package/.vercel/output/functions/nodes.segments/_index.segment.rsc.prerender-config.json +28 -0
  505. package/.vercel/output/functions/nodes.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  506. package/.vercel/output/functions/nodes.segments/_tree.segment.rsc.prerender-config.json +28 -0
  507. package/.vercel/output/functions/nodes.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  508. package/.vercel/output/functions/nodes.segments/nodes/__PAGE__.segment.rsc.prerender-config.json +28 -0
  509. package/.vercel/output/functions/nodes.segments/nodes/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  510. package/.vercel/output/functions/nodes.segments/nodes.segment.rsc.prerender-config.json +28 -0
  511. package/.vercel/output/functions/nodes.segments/nodes.segment.rsc.prerender-fallback.rsc +5 -0
  512. package/.vercel/output/functions/server-logs.prerender-config.json +37 -0
  513. package/.vercel/output/functions/server-logs.prerender-fallback.html +12 -0
  514. package/.vercel/output/functions/server-logs.rsc.prerender-config.json +38 -0
  515. package/.vercel/output/functions/server-logs.rsc.prerender-fallback.rsc +27 -0
  516. package/.vercel/output/functions/server-logs.segments/_full.segment.rsc.prerender-config.json +28 -0
  517. package/.vercel/output/functions/server-logs.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  518. package/.vercel/output/functions/server-logs.segments/_head.segment.rsc.prerender-config.json +28 -0
  519. package/.vercel/output/functions/server-logs.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  520. package/.vercel/output/functions/server-logs.segments/_index.segment.rsc.prerender-config.json +28 -0
  521. package/.vercel/output/functions/server-logs.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  522. package/.vercel/output/functions/server-logs.segments/_tree.segment.rsc.prerender-config.json +28 -0
  523. package/.vercel/output/functions/server-logs.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  524. package/.vercel/output/functions/server-logs.segments/server-logs/__PAGE__.segment.rsc.prerender-config.json +28 -0
  525. package/.vercel/output/functions/server-logs.segments/server-logs/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  526. package/.vercel/output/functions/server-logs.segments/server-logs.segment.rsc.prerender-config.json +28 -0
  527. package/.vercel/output/functions/server-logs.segments/server-logs.segment.rsc.prerender-fallback.rsc +5 -0
  528. package/.vercel/output/functions/servers.prerender-config.json +37 -0
  529. package/.vercel/output/functions/servers.prerender-fallback.html +12 -0
  530. package/.vercel/output/functions/servers.rsc.prerender-config.json +38 -0
  531. package/.vercel/output/functions/servers.rsc.prerender-fallback.rsc +27 -0
  532. package/.vercel/output/functions/servers.segments/_full.segment.rsc.prerender-config.json +28 -0
  533. package/.vercel/output/functions/servers.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  534. package/.vercel/output/functions/servers.segments/_head.segment.rsc.prerender-config.json +28 -0
  535. package/.vercel/output/functions/servers.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  536. package/.vercel/output/functions/servers.segments/_index.segment.rsc.prerender-config.json +28 -0
  537. package/.vercel/output/functions/servers.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  538. package/.vercel/output/functions/servers.segments/_tree.segment.rsc.prerender-config.json +28 -0
  539. package/.vercel/output/functions/servers.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  540. package/.vercel/output/functions/servers.segments/servers/__PAGE__.segment.rsc.prerender-config.json +28 -0
  541. package/.vercel/output/functions/servers.segments/servers/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  542. package/.vercel/output/functions/servers.segments/servers.segment.rsc.prerender-config.json +28 -0
  543. package/.vercel/output/functions/servers.segments/servers.segment.rsc.prerender-fallback.rsc +5 -0
  544. package/.vercel/output/functions/settings/networks.prerender-config.json +37 -0
  545. package/.vercel/output/functions/settings/networks.prerender-fallback.html +12 -0
  546. package/.vercel/output/functions/settings/networks.rsc.prerender-config.json +38 -0
  547. package/.vercel/output/functions/settings/networks.rsc.prerender-fallback.rsc +27 -0
  548. package/.vercel/output/functions/settings/networks.segments/_full.segment.rsc.prerender-config.json +28 -0
  549. package/.vercel/output/functions/settings/networks.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  550. package/.vercel/output/functions/settings/networks.segments/_head.segment.rsc.prerender-config.json +28 -0
  551. package/.vercel/output/functions/settings/networks.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  552. package/.vercel/output/functions/settings/networks.segments/_index.segment.rsc.prerender-config.json +28 -0
  553. package/.vercel/output/functions/settings/networks.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  554. package/.vercel/output/functions/settings/networks.segments/_tree.segment.rsc.prerender-config.json +28 -0
  555. package/.vercel/output/functions/settings/networks.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  556. package/.vercel/output/functions/settings/networks.segments/settings/networks/__PAGE__.segment.rsc.prerender-config.json +28 -0
  557. package/.vercel/output/functions/settings/networks.segments/settings/networks/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  558. package/.vercel/output/functions/settings/networks.segments/settings/networks.segment.rsc.prerender-config.json +28 -0
  559. package/.vercel/output/functions/settings/networks.segments/settings/networks.segment.rsc.prerender-fallback.rsc +5 -0
  560. package/.vercel/output/functions/settings/networks.segments/settings.segment.rsc.prerender-config.json +28 -0
  561. package/.vercel/output/functions/settings/networks.segments/settings.segment.rsc.prerender-fallback.rsc +5 -0
  562. package/.vercel/output/functions/settings/tokens.prerender-config.json +37 -0
  563. package/.vercel/output/functions/settings/tokens.prerender-fallback.html +12 -0
  564. package/.vercel/output/functions/settings/tokens.rsc.prerender-config.json +38 -0
  565. package/.vercel/output/functions/settings/tokens.rsc.prerender-fallback.rsc +27 -0
  566. package/.vercel/output/functions/settings/tokens.segments/_full.segment.rsc.prerender-config.json +28 -0
  567. package/.vercel/output/functions/settings/tokens.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  568. package/.vercel/output/functions/settings/tokens.segments/_head.segment.rsc.prerender-config.json +28 -0
  569. package/.vercel/output/functions/settings/tokens.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  570. package/.vercel/output/functions/settings/tokens.segments/_index.segment.rsc.prerender-config.json +28 -0
  571. package/.vercel/output/functions/settings/tokens.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  572. package/.vercel/output/functions/settings/tokens.segments/_tree.segment.rsc.prerender-config.json +28 -0
  573. package/.vercel/output/functions/settings/tokens.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  574. package/.vercel/output/functions/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc.prerender-config.json +28 -0
  575. package/.vercel/output/functions/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  576. package/.vercel/output/functions/settings/tokens.segments/settings/tokens.segment.rsc.prerender-config.json +28 -0
  577. package/.vercel/output/functions/settings/tokens.segments/settings/tokens.segment.rsc.prerender-fallback.rsc +5 -0
  578. package/.vercel/output/functions/settings/tokens.segments/settings.segment.rsc.prerender-config.json +28 -0
  579. package/.vercel/output/functions/settings/tokens.segments/settings.segment.rsc.prerender-fallback.rsc +5 -0
  580. package/.vercel/output/functions/settings.prerender-config.json +37 -0
  581. package/.vercel/output/functions/settings.prerender-fallback.html +12 -0
  582. package/.vercel/output/functions/settings.rsc.prerender-config.json +38 -0
  583. package/.vercel/output/functions/settings.rsc.prerender-fallback.rsc +27 -0
  584. package/.vercel/output/functions/settings.segments/_full.segment.rsc.prerender-config.json +28 -0
  585. package/.vercel/output/functions/settings.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  586. package/.vercel/output/functions/settings.segments/_head.segment.rsc.prerender-config.json +28 -0
  587. package/.vercel/output/functions/settings.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  588. package/.vercel/output/functions/settings.segments/_index.segment.rsc.prerender-config.json +28 -0
  589. package/.vercel/output/functions/settings.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  590. package/.vercel/output/functions/settings.segments/_tree.segment.rsc.prerender-config.json +28 -0
  591. package/.vercel/output/functions/settings.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  592. package/.vercel/output/functions/settings.segments/settings/__PAGE__.segment.rsc.prerender-config.json +28 -0
  593. package/.vercel/output/functions/settings.segments/settings/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  594. package/.vercel/output/functions/settings.segments/settings.segment.rsc.prerender-config.json +28 -0
  595. package/.vercel/output/functions/settings.segments/settings.segment.rsc.prerender-fallback.rsc +5 -0
  596. package/.vercel/output/functions/tasks/[id].func/.next/routes-manifest.json +1 -0
  597. package/.vercel/output/functions/tasks/[id].func/.next/server/app-paths-manifest.json +1 -0
  598. package/.vercel/output/functions/tasks/[id].func/.next/server/pages-manifest.json +1 -0
  599. package/.vercel/output/functions/tasks/[id].func/.vc-config.json +713 -0
  600. package/.vercel/output/functions/tasks/[id].func/___next_launcher.cjs +68 -0
  601. package/.vercel/output/functions/tasks.prerender-config.json +37 -0
  602. package/.vercel/output/functions/tasks.prerender-fallback.html +12 -0
  603. package/.vercel/output/functions/tasks.rsc.prerender-config.json +38 -0
  604. package/.vercel/output/functions/tasks.rsc.prerender-fallback.rsc +27 -0
  605. package/.vercel/output/functions/tasks.segments/_full.segment.rsc.prerender-config.json +28 -0
  606. package/.vercel/output/functions/tasks.segments/_full.segment.rsc.prerender-fallback.rsc +27 -0
  607. package/.vercel/output/functions/tasks.segments/_head.segment.rsc.prerender-config.json +28 -0
  608. package/.vercel/output/functions/tasks.segments/_head.segment.rsc.prerender-fallback.rsc +6 -0
  609. package/.vercel/output/functions/tasks.segments/_index.segment.rsc.prerender-config.json +28 -0
  610. package/.vercel/output/functions/tasks.segments/_index.segment.rsc.prerender-fallback.rsc +10 -0
  611. package/.vercel/output/functions/tasks.segments/_tree.segment.rsc.prerender-config.json +28 -0
  612. package/.vercel/output/functions/tasks.segments/_tree.segment.rsc.prerender-fallback.rsc +5 -0
  613. package/.vercel/output/functions/tasks.segments/tasks/__PAGE__.segment.rsc.prerender-config.json +28 -0
  614. package/.vercel/output/functions/tasks.segments/tasks/__PAGE__.segment.rsc.prerender-fallback.rsc +9 -0
  615. package/.vercel/output/functions/tasks.segments/tasks.segment.rsc.prerender-config.json +28 -0
  616. package/.vercel/output/functions/tasks.segments/tasks.segment.rsc.prerender-fallback.rsc +5 -0
  617. package/.vercel/output/static/404.html +12 -0
  618. package/.vercel/output/static/404.rsc.json +1 -0
  619. package/.vercel/output/static/404.segments/_tree.segment.rsc.json +1 -0
  620. package/.vercel/output/static/500.html +1 -0
  621. package/.vercel/output/static/500.rsc.json +1 -0
  622. package/.vercel/output/static/500.segments/_tree.segment.rsc.json +1 -0
  623. package/.vercel/output/static/_next/__private/trace +2 -0
  624. package/.vercel/output/static/_next/static/TakLsJFW-DjjhsqoZu3Ok/_buildManifest.js +11 -0
  625. package/.vercel/output/static/_next/static/TakLsJFW-DjjhsqoZu3Ok/_clientMiddlewareManifest.js +42 -0
  626. package/.vercel/output/static/_next/static/TakLsJFW-DjjhsqoZu3Ok/_ssgManifest.js +1 -0
  627. package/.vercel/output/static/_next/static/chunks/00~h525bo.q7f.js +1 -0
  628. package/.vercel/output/static/_next/static/chunks/01xlw8hd842-c.js +1 -0
  629. package/.vercel/output/static/_next/static/chunks/0257pdz1-imal.js +2 -0
  630. package/.vercel/output/static/_next/static/chunks/03~yq9q893hmn.js +1 -0
  631. package/.vercel/output/static/_next/static/chunks/04uju~n5s9g7..css +1 -0
  632. package/.vercel/output/static/_next/static/chunks/066jf0nk75nic.css +2 -0
  633. package/.vercel/output/static/_next/static/chunks/085gdrlppedvd.js +1 -0
  634. package/.vercel/output/static/_next/static/chunks/0a5rikwbpt8_7.js +4 -0
  635. package/.vercel/output/static/_next/static/chunks/0b9r.-87w.lvh.js +1 -0
  636. package/.vercel/output/static/_next/static/chunks/0ced2tacwy8v7.js +1 -0
  637. package/.vercel/output/static/_next/static/chunks/0e-.zgw81gela.js +31 -0
  638. package/.vercel/output/static/_next/static/chunks/0gu130fpple04.js +1 -0
  639. package/.vercel/output/static/_next/static/chunks/0jmypv56.iwft.js +1 -0
  640. package/.vercel/output/static/_next/static/chunks/0krr-nvdwqdj1.js +1 -0
  641. package/.vercel/output/static/_next/static/chunks/0mqs00d_9jvzx.js +1 -0
  642. package/.vercel/output/static/_next/static/chunks/0ore4vqiwv2nx.js +1 -0
  643. package/.vercel/output/static/_next/static/chunks/0pqt~8bl3ukh4.js +4 -0
  644. package/.vercel/output/static/_next/static/chunks/0q.t7da_-e4yl.js +4 -0
  645. package/.vercel/output/static/_next/static/chunks/0q3rj30g1oodv.js +7 -0
  646. package/.vercel/output/static/_next/static/chunks/0qp3_l.t4nzzq.js +1 -0
  647. package/.vercel/output/static/_next/static/chunks/0qy1ci2dqfaqg.js +1 -0
  648. package/.vercel/output/static/_next/static/chunks/0u359llqm1_01.js +1 -0
  649. package/.vercel/output/static/_next/static/chunks/0u7ftv8celiqa.js +1 -0
  650. package/.vercel/output/static/_next/static/chunks/0~ijg-d65glam.js +1 -0
  651. package/.vercel/output/static/_next/static/chunks/14bsg3_-taiw4.js +1 -0
  652. package/.vercel/output/static/_next/static/chunks/168q2d2bi7swr.js +7 -0
  653. package/.vercel/output/static/_next/static/chunks/16aqsgrwba4zk.js +1 -0
  654. package/.vercel/output/static/_next/static/chunks/16tw8s4cce9_x.js +1 -0
  655. package/.vercel/output/static/_next/static/chunks/turbopack-01f1xs~cq_~si.js +1 -0
  656. package/.vercel/output/static/_next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
  657. package/.vercel/output/static/_next/static/media/53b9e256198e5412-s.0-wfv7uh4i7h9.woff2 +0 -0
  658. package/.vercel/output/static/_next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
  659. package/.vercel/output/static/_next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
  660. package/.vercel/output/static/_next/static/media/7178b3e590c64307-s.0nx0ww8fni_q3.woff2 +0 -0
  661. package/.vercel/output/static/_next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
  662. package/.vercel/output/static/_next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
  663. package/.vercel/output/static/_next/static/media/8a480f0b521d4e75-s.0jzbimsg8vl84.woff2 +0 -0
  664. package/.vercel/output/static/_next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
  665. package/.vercel/output/static/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2 +0 -0
  666. package/.vercel/output/static/_next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  667. package/.vercel/output/static/_next/static/media/fef07dbb0973bf53-s.12tyk43_3sh9u.woff2 +0 -0
  668. package/.vercel/output/static/_next/static/not-found.txt +1 -0
  669. package/.vercel/project.json +16 -0
  670. package/AGENTS.md +9 -0
  671. package/CLAUDE.md +1 -0
  672. package/README.md +1 -0
  673. package/app/api/anet/host-supervisors/route.ts +63 -2
  674. package/app/api/anet/node-config/route.ts +145 -168
  675. package/app/api/hub/people/route.ts +48 -0
  676. package/app/api/hub/requirements/[id]/checklist/[itemId]/route.ts +54 -0
  677. package/app/api/hub/requirements/[id]/comments/route.ts +51 -0
  678. package/app/api/hub/requirements/[id]/route.ts +89 -0
  679. package/app/api/hub/requirements/events/route.ts +45 -0
  680. package/app/api/hub/requirements/route.ts +53 -0
  681. package/app/components/CreateNodeWizard.tsx +7 -2
  682. package/app/components/HostSupervisorPicker.tsx +76 -29
  683. package/app/components/NodeSettingsPanel.tsx +28 -25
  684. package/app/components/Sidebar.tsx +4 -0
  685. package/app/components/TaskChatPanel.tsx +6 -6
  686. package/app/components/TaskDetail.tsx +8 -7
  687. package/app/components/TaskList.tsx +6 -7
  688. package/app/components/TopoGraph.tsx +3 -2
  689. package/app/lib/time.ts +23 -0
  690. package/app/org/page.tsx +222 -0
  691. package/app/requirements/[id]/page.tsx +361 -0
  692. package/app/requirements/page.tsx +299 -0
  693. package/app/scheduled-tasks/page.tsx +98 -13
  694. package/apps/desktop/icon.png +0 -0
  695. package/bun.lock +1688 -0
  696. package/electron-builder.json +5 -1
  697. package/package.json +4 -2
  698. package/proxy.ts +1 -0
  699. package/.next/server/chunks/ssr/[root-of-the-server]__0dwa10z._.js +0 -11
  700. package/.next/server/chunks/ssr/[root-of-the-server]__0dwa10z._.js.map +0 -1
  701. package/.next/server/chunks/ssr/[root-of-the-server]__202xetf._.js +0 -11
  702. package/.next/server/chunks/ssr/[root-of-the-server]__202xetf._.js.map +0 -1
  703. package/.next/static/chunks/0pton-t_-fqyu.css +0 -1
  704. package/.next/static/chunks/0z8vfpga444t1.js +0 -1
  705. package/.next/static/chunks/14c8u_tcund0g.js +0 -0
  706. package/.next/static/chunks/2kp8-5cyc-jbg.js +0 -1
  707. package/.next/static/chunks/3a53_ky07bdhz.js +0 -9
  708. package/.next/static/chunks/3im40-b21df3u.js +0 -2
  709. package/.next/static/chunks/3tnbxlq42_jjv.js +0 -1
  710. /package/.next/server/chunks/ssr/{app_0_s8u96._.js.map → app_07bzc6w._.js.map} +0 -0
  711. /package/.next/server/chunks/ssr/{app_0o4bxq0._.js.map → app_0g7oz9w._.js.map} +0 -0
  712. /package/.next/server/chunks/ssr/{app_0x7s72b._.js.map → app_0tt2ueo._.js.map} +0 -0
  713. /package/.next/server/chunks/ssr/{app_081zy6c._.js.map → app_0ugqkd7._.js.map} +0 -0
  714. /package/.next/server/chunks/ssr/{app_1oxcq68._.js.map → app_1e91uc-._.js.map} +0 -0
  715. /package/.next/server/chunks/ssr/{app_1psh956._.js.map → app_1f96aq_._.js.map} +0 -0
  716. /package/.next/server/chunks/ssr/{app_0_dhiwi._.js.map → app_1ua57bx._.js.map} +0 -0
  717. /package/.next/static/{trj9RsCWuEDMfq9BuoKfl → FEaCQpBc05SBAWTBHRt5h}/_buildManifest.js +0 -0
  718. /package/.next/static/{trj9RsCWuEDMfq9BuoKfl → FEaCQpBc05SBAWTBHRt5h}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../app/tasks/TasksView.tsx","../../../../app/components/TaskList.tsx","../../../../app/components/TaskDetail.tsx"],"sourcesContent":["'use client';\n\nimport {\n Suspense,\n useCallback,\n useEffect,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport { useNetworkId } from '../lib/network-context';\nimport { EmptyState } from '../components/EmptyState';\nimport { TaskList, type TaskListItem } from '../components/TaskList';\nimport { TaskDetail } from '../components/TaskDetail';\nimport {\n TASK_STATUSES,\n STATUS_CHIP_CLASS,\n STATUS_DOT_HEX,\n STATUS_BAR_CLASS,\n} from '../lib/status';\n\n// #Stage-tasks (dashboard 类飞书 two-column, 07-31):\n//\n// /tasks moves from one-big-table + inline-expand + drawer to a\n// list-plus-detail layout with a shareable URL /tasks/[id]. Mirrors\n// /nodes NodesView (see app/nodes/NodesView.tsx for the pattern).\n//\n// Deliberately: the old expand-in-place row and the TaskDrawer side\n// sheet are gone from the /tasks page. The right pane replaces both\n// affordances so we don't leave the layout showing \"one thing twice\"\n// (通信龙 07-31 catch from /nodes: rail added alongside the table left\n// 199 nodes rendered in two places at once). Detail negative\n// assertions in the tests must be paired with a positive assertion so\n// \"detail integrated into pane\" and \"detail feature gone\" can't be\n// confused for each other.\n//\n// TaskDrawer.tsx itself is not deleted — no other file imports it,\n// but the boundary of this PR is app/tasks/**, and dead-code sweeps\n// are a separate concern.\n\nconst MD_QUERY = '(min-width: 768px)';\nfunction subscribeMd(cb: () => void) {\n const mql = window.matchMedia(MD_QUERY);\n mql.addEventListener('change', cb);\n return () => mql.removeEventListener('change', cb);\n}\nfunction useIsDesktop(): boolean {\n return useSyncExternalStore(\n subscribeMd,\n () => window.matchMedia(MD_QUERY).matches,\n () => true,\n );\n}\n\n// Task IDs on the CommHub side are opaque strings — usually hex, but\n// treat them as arbitrary to match the alias precedent. Decode once\n// defensively (same shape as /nodes NodesView.decodeAliasSegment).\nexport function decodeIdSegment(seg: string): string {\n try {\n return decodeURIComponent(seg);\n } catch {\n return seg;\n }\n}\n\nfunction TasksViewInner({ initialSelectedId = null }: { initialSelectedId?: string | null }) {\n const searchParams = useSearchParams();\n const { networkId } = useNetworkId();\n const [tasks, setTasks] = useState<TaskListItem[]>([]);\n const [count, setCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n\n const [filterStatus, setFilterStatus] = useState(searchParams.get('status') || '');\n // 07-31 通信龙 dispatch (临时开放此文件): let ChatPane's \"查看任务\"\n // button prefill the from/to filters via URL. Before this, the /tasks\n // link on ChatPane header carried `?alias=` which was silently ignored\n // (both filters init'd to '' regardless of URL) — user tapped, saw the\n // full unfiltered list, thought \"that's all the tasks for this alias\".\n // See feedback_verify_both_directions_with_real_data — this is a\n // silent-half-broken feature that already shipped in preview.51 and\n // needs both prefill directions.\n const [filterFrom, setFilterFrom] = useState(searchParams.get('from_name') || '');\n const [filterTo, setFilterTo] = useState(searchParams.get('to_name') || '');\n\n // #Stage-tasks: selection is seeded from /tasks/[id] URL, then plain\n // client state kept in sync with pushState (shallow — no route remount,\n // switching tasks swaps the right pane in place).\n const [selectedId, setSelectedId] = useState<string | null>(initialSelectedId);\n const isDesktop = useIsDesktop();\n\n const selectTask = (task_id: string) => {\n setSelectedId(task_id);\n try {\n window.history.pushState({}, '', `/tasks/${encodeURIComponent(task_id)}`);\n } catch {}\n };\n const closeDetail = () => {\n setSelectedId(null);\n try {\n window.history.pushState({}, '', '/tasks');\n } catch {}\n };\n\n // Back/forward — mirror URL into state.\n useEffect(() => {\n const onPop = () => {\n const m = window.location.pathname.match(/^\\/tasks\\/([^/]+)\\/?$/);\n setSelectedId(m ? decodeIdSegment(m[1]) : null);\n };\n window.addEventListener('popstate', onPop);\n return () => window.removeEventListener('popstate', onPop);\n }, []);\n\n const fetchTasks = useCallback(async () => {\n try {\n const params = new URLSearchParams();\n if (networkId) params.set('network_id', networkId);\n if (filterStatus) params.set('status', filterStatus);\n if (filterFrom) params.set('from_name', filterFrom);\n if (filterTo) params.set('to_name', filterTo);\n params.set('limit', '100');\n\n const res = await fetch(`/api/hub/tasks?${params.toString()}`);\n if (res.status === 401) {\n window.location.assign('/login');\n return;\n }\n const data = await res.json();\n setTasks(data.tasks || []);\n setCount(data.count ?? (data.tasks?.length || 0));\n setError('');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'fetch failed');\n } finally {\n setLoading(false);\n }\n }, [filterStatus, filterFrom, filterTo, networkId]);\n\n useEffect(() => {\n setLoading(true);\n fetchTasks();\n const interval = setInterval(fetchTasks, 5000);\n return () => clearInterval(interval);\n }, [fetchTasks]);\n\n const counts: Record<string, number> = {};\n tasks.forEach((t) => {\n counts[t.status] = (counts[t.status] || 0) + 1;\n });\n const total = tasks.length || 1;\n const bars = TASK_STATUSES.map((key) => ({ key, color: STATUS_BAR_CLASS[key] })).filter(\n (b) => counts[b.key],\n );\n\n return (\n <div\n data-testid=\"tasks-layout\"\n data-selected-id={selectedId ?? ''}\n className=\"min-h-screen max-w-full overflow-x-hidden bg-[#0b0b0d] text-gray-100 flex\"\n >\n {/* Rail — desktop always visible; on mobile it holds the whole\n page (detail becomes a full-screen overlay). No \"toggle\n rail\" button on tasks: there is no dense one-column table\n to fall back to (unlike /nodes where Vincent's 看全局 view\n exists). Removing the old table is the whole point of this\n refactor — 通信龙 07-31 catch from /nodes: don't leave the\n layout showing \"one thing twice\". */}\n <aside\n data-testid=\"task-list-column\"\n className={`flex flex-col w-full sm:w-[380px] shrink-0 min-h-screen sticky top-0 border-r border-[#1c1c1f] ${\n selectedId && !isDesktop ? 'hidden' : 'flex'\n }`}\n >\n <div className=\"px-4 py-3 border-b border-[#1c1c1f]\">\n <div className=\"flex items-center gap-3 mb-3\">\n <h1 className=\"text-xl font-bold text-white lg:ml-0 ml-10\">Tasks</h1>\n {tasks.length < count && (\n <span\n className=\"text-xs bg-blue-900/30 text-blue-400 px-2 py-0.5 rounded-full border border-blue-800/30 tabular-nums\"\n title={`Showing ${tasks.length} of ${count} tasks`}\n >\n {tasks.length} / {count}\n </span>\n )}\n </div>\n\n {tasks.length > 0 && (\n <>\n {/* Status tab strip */}\n <div className=\"anet-tabstrip-wrap mb-2\">\n <div className=\"anet-tabstrip flex flex-wrap gap-1 bg-[#161618] rounded-lg border border-[#26262b] p-1 overflow-x-auto scrollbar-thin\">\n {['', ...TASK_STATUSES].map((s) => {\n const cnt = s === '' ? tasks.length : counts[s] || 0;\n const isActive = filterStatus === s;\n return (\n <button\n key={s || 'all'}\n onClick={() => setFilterStatus(s)}\n disabled={cnt === 0 && s !== '' && !isActive}\n className={`px-2.5 py-1 rounded-md text-xs transition-colors flex items-center gap-1 shrink-0 whitespace-nowrap disabled:opacity-30 disabled:cursor-not-allowed ${\n isActive\n ? `${STATUS_CHIP_CLASS[s] || 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20'} border`\n : 'text-gray-500 hover:text-gray-300 hover:bg-[#1c1c1f]/40'\n }`}\n >\n {s && (\n <span\n aria-hidden\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: STATUS_DOT_HEX[s] || '#6b7280' }}\n />\n )}\n <span>{s || 'All'}</span>\n <span\n className={`text-[10px] tabular-nums ${\n isActive ? 'opacity-80' : 'text-gray-600'\n }`}\n >\n {cnt}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* From/To filters */}\n <div className=\"flex flex-wrap items-center gap-1.5 mb-2\">\n <div className=\"flex items-center gap-1 rounded border border-[#26262b] bg-[#161618] px-2 py-1 focus-within:border-blue-500/40\">\n <span className=\"text-[9px] uppercase tracking-wide text-gray-600\">From</span>\n <input\n type=\"text\"\n value={filterFrom}\n onChange={(e) => setFilterFrom(e.target.value)}\n placeholder=\"any\"\n data-testid=\"tasks-filter-from\"\n className=\"w-16 bg-transparent text-xs text-white placeholder-gray-700 focus:outline-none\"\n />\n </div>\n <div className=\"flex items-center gap-1 rounded border border-[#26262b] bg-[#161618] px-2 py-1 focus-within:border-blue-500/40\">\n <span className=\"text-[9px] uppercase tracking-wide text-gray-600\">To</span>\n <input\n type=\"text\"\n value={filterTo}\n onChange={(e) => setFilterTo(e.target.value)}\n placeholder=\"any\"\n data-testid=\"tasks-filter-to\"\n className=\"w-16 bg-transparent text-xs text-white placeholder-gray-700 focus:outline-none\"\n />\n </div>\n {(filterStatus || filterFrom || filterTo) && (\n <button\n type=\"button\"\n onClick={() => {\n setFilterStatus('');\n setFilterFrom('');\n setFilterTo('');\n }}\n className=\"rounded border border-gray-700 px-2 py-0.5 text-[10px] text-gray-500 hover:text-gray-200 hover:border-gray-600\"\n >\n Clear\n </button>\n )}\n </div>\n\n {/* Status distribution bar (only when no status filter) */}\n {!filterStatus && bars.length > 0 && (\n <div className=\"flex h-1 rounded-full overflow-hidden bg-gray-800\">\n {bars.map((b) => (\n <div\n key={b.key}\n className={b.color}\n style={{ width: `${(counts[b.key] / total) * 100}%` }}\n title={`${b.key}: ${counts[b.key]}`}\n />\n ))}\n </div>\n )}\n </>\n )}\n\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-3 py-1.5 rounded mt-2 text-xs\">\n {error}\n </div>\n )}\n </div>\n\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {loading ? (\n <div className=\"animate-pulse space-y-1 px-3 py-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => (\n <div key={i} className=\"h-14 bg-gray-800/40 rounded\" />\n ))}\n </div>\n ) : tasks.length === 0 ? (\n <div className=\"px-3 py-6\">\n <EmptyState\n variant=\"tasks\"\n sub={\n filterStatus || filterFrom || filterTo\n ? 'No tasks match the current filters. Try clearing them.'\n : 'Tasks will appear here when agents send them via CommHub.'\n }\n />\n </div>\n ) : (\n <TaskList tasks={tasks} selectedId={selectedId} onSelect={selectTask} />\n )}\n </div>\n </aside>\n\n {/* Detail — desktop: right pane inside the flex row. Mobile: full-screen\n overlay that hides the list column above. Both variants get onClose:\n on desktop it returns the right pane to the empty state (preserves\n the \"← Tasks\" return affordance the old full-page detail had);\n on mobile it dismisses the overlay. Either way the URL drops back\n to /tasks. 通信龙 07-31 constraint: 返回入口别丢. */}\n {selectedId && isDesktop && (\n <section\n data-testid=\"task-detail-column\"\n className=\"flex-1 min-w-0 min-h-screen\"\n >\n <TaskDetail taskId={selectedId} onClose={closeDetail} onRetried={fetchTasks} />\n </section>\n )}\n {selectedId && !isDesktop && (\n <section\n data-testid=\"task-detail-mobile\"\n className=\"fixed inset-0 z-40 bg-[#0b0b0d]\"\n >\n <TaskDetail taskId={selectedId} onClose={closeDetail} onRetried={fetchTasks} />\n </section>\n )}\n {!selectedId && isDesktop && (\n <section\n data-testid=\"task-detail-empty\"\n className=\"flex-1 min-w-0 min-h-screen flex items-center justify-center text-sm text-gray-600\"\n >\n 请从左侧列表选择一条任务查看详情\n </section>\n )}\n </div>\n );\n}\n\n// useSearchParams needs a Suspense boundary in Next 14+ app-router. Same\n// shape the old page.tsx had (wrapper → Inner). Fallback matches the\n// loaded layout width so the burger button doesn't crash into \"Loa…\".\nexport function TasksView({ initialSelectedId = null }: { initialSelectedId?: string | null }) {\n return (\n <Suspense\n fallback={\n <div className=\"min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6\">\n <div className=\"lg:ml-0 ml-10 text-gray-500 text-sm\">Loading tasks…</div>\n </div>\n }\n >\n <TasksViewInner initialSelectedId={initialSelectedId} />\n </Suspense>\n );\n}\n","'use client';\n\nimport { AliasAvatar } from './AliasAvatar';\nimport { previewContent } from './utils';\nimport { STATUS_CHIP_CLASS, STATUS_DOT_HEX } from '../lib/status';\n\n// Task-list rail for the /tasks two-column layout (类飞书 \"list + detail\").\n// Rendered inside TasksView's <aside> — this file is intentionally small\n// and only owns the list-row shape, so the same component can back both\n// desktop rail and (later) a mobile drawer without duplicating the row\n// template.\n//\n// #Stage-tasks: mirrors NodeList.tsx narrow-rail pattern. Row click calls\n// onSelect(task_id) so the parent can drive URL/state; row does NOT know\n// about routing.\n\nexport interface TaskListItem {\n task_id: string;\n network_id?: string;\n from_name: string;\n to_name: string;\n status: string;\n priority: string;\n content: string;\n created_at: string;\n}\n\nfunction timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s`;\n if (s < 3600) return `${Math.floor(s / 60)}m`;\n if (s < 86400) return `${Math.floor(s / 3600)}h`;\n return `${Math.floor(s / 86400)}d`;\n}\n\nexport function TaskList({\n tasks,\n selectedId,\n onSelect,\n}: {\n tasks: TaskListItem[];\n selectedId: string | null;\n onSelect: (task_id: string) => void;\n}) {\n return (\n <div\n data-testid=\"task-list-rail\"\n className=\"flex flex-col h-full max-h-screen overflow-y-auto\"\n >\n {tasks.length === 0 ? (\n <div className=\"px-4 py-6 text-xs text-gray-600 text-center\">\n 没有匹配的任务\n </div>\n ) : (\n <ul className=\"flex flex-col divide-y divide-[#1c1c1f]\">\n {tasks.map((t) => {\n const active = t.task_id === selectedId;\n return (\n <li key={t.task_id}>\n <button\n type=\"button\"\n data-task-row\n data-task-id={t.task_id}\n data-selected={active ? 'true' : 'false'}\n onClick={() => onSelect(t.task_id)}\n className={`w-full text-left px-3 py-2.5 transition-colors ${\n active\n ? 'bg-cyan-500/10 border-l-2 border-cyan-500'\n : 'border-l-2 border-transparent hover:bg-[#1c1c1f]/40'\n }`}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n {/* status dot + label */}\n <span\n aria-hidden\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: STATUS_DOT_HEX[t.status] || '#6b7280' }}\n />\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded border ${\n STATUS_CHIP_CLASS[t.status] ||\n 'bg-gray-500/10 text-gray-400 border-gray-500/20'\n }`}\n >\n {t.status}\n </span>\n {t.priority === 'high' && (\n <span className=\"text-[10px] text-red-400 shrink-0\">HIGH</span>\n )}\n <span className=\"ml-auto text-[10px] text-gray-600 tabular-nums shrink-0\">\n {timeAgo(t.created_at)}\n </span>\n </div>\n <div className=\"flex items-center gap-1 text-xs text-gray-300 min-w-0 mb-1\">\n {t.from_name && <AliasAvatar alias={t.from_name} size={14} />}\n <span className=\"truncate max-w-[35%]\">{t.from_name || '--'}</span>\n <span className=\"text-gray-600 shrink-0\">→</span>\n {t.to_name && <AliasAvatar alias={t.to_name} size={14} />}\n <span className=\"truncate max-w-[35%]\">{t.to_name || '--'}</span>\n </div>\n <div\n className=\"text-[11px] text-gray-500 line-clamp-2 leading-snug\"\n title={t.content}\n >\n {previewContent(t.content) || <span className=\"italic\">(no content)</span>}\n </div>\n </button>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport useSWR from 'swr';\nimport { AliasAvatar } from './AliasAvatar';\nimport { STATUS_CHIP_CLASS as STATUS_CHIP } from '../lib/status';\n\n// Detail pane for the /tasks two-column layout.\n//\n// Feature-parity target (通信龙 07-31 parity 硬门, migrating from the\n// old full-page /tasks/[id]/page.tsx): five blocks, each with its own\n// positive assertion in tests + real data visible (not just \"the div\n// is there\"):\n// 1. Timeline card — steps: created / delivered / started / completed\n// 2. Info card — task_id / from / to / priority / status / expires\n// 3. Content\n// 4. Result\n// 5. Events feed — /api/hub/task-events?limit=50 (10s poll)\n//\n// Poll cadence — the old full-page useSWR was 5s (task) + 10s (events).\n// Do NOT widen either interval: \"page's there but data's stale\" is worse\n// than \"page's not there\" because it looks fine to anyone glancing at it.\n// The intervals are part of parity — tests should assert both refetch.\n\ninterface TaskDetailData {\n task_id: string;\n network_id?: string;\n from_name: string;\n to_name: string;\n status: string;\n priority: string;\n content: string;\n result: string;\n created_at: string;\n updated_at: string;\n delivered_at: string;\n started_at: string;\n completed_at: string;\n expires_at: string;\n}\n\ninterface TaskEvent {\n id: number;\n event_type?: string | null;\n actor?: string | null;\n from_status: string;\n to_status: string;\n detail?: string | null;\n created_at: string;\n}\n\nfunction taskEventLabel(event: TaskEvent): string {\n return event.event_type?.trim() || event.to_status?.trim() || 'event';\n}\n\nfunction isDeliveryStaleObservation(event: TaskEvent): boolean {\n return event.event_type?.startsWith('task.stale.') ?? false;\n}\n\n// 🔴 Poll cadences are declared as module-scope constants so the useSWR\n// refreshInterval and the DOM `data-poll-*-ms` attribute are *literally*\n// the same number. Two separate literals meant the attribute-based test\n// assertion could go green even if someone widened refreshInterval —\n// the assertion was watching the string, not the fact.\n// (通信龙 07-31 catch: \"断言的是声明, 不是事实.\")\n// Widen either interval only alongside a paired update to the test\n// asserting cadence, and re-run witnessed-red by bumping one of these\n// to a wrong value.\nconst POLL_TASK_MS = 5000;\nconst POLL_EVENTS_MS = 10000;\n\nfunction timeAgo(dateStr: string): string {\n if (!dateStr) return '--';\n const diff = Date.now() - new Date(dateStr.replace(' ', 'T') + 'Z').getTime();\n const s = Math.floor(diff / 1000);\n if (s < 60) return `${s}s ago`;\n if (s < 3600) return `${Math.floor(s / 60)}m ago`;\n if (s < 86400) return `${Math.floor(s / 3600)}h ago`;\n return `${Math.floor(s / 86400)}d ago`;\n}\n\nfunction priorityClass(priority: string) {\n if (priority === 'high') return 'text-red-400';\n if (priority === 'low') return 'text-gray-600';\n return 'text-gray-400';\n}\n\nconst fetcher = async (url: string) => {\n const res = await fetch(url);\n if (res.status === 401) {\n window.location.assign('/login');\n throw new Error('unauthorized');\n }\n return res.json();\n};\n\nexport function TaskDetail({\n taskId,\n onClose,\n onRetried,\n}: {\n taskId: string;\n /** X in the header — desktop returns pane to empty, mobile dismisses overlay.\n * Either way the URL drops back to /tasks (parent handles). Preserves the\n * 返回入口 the old full-page detail had via its \"← Tasks\" link. */\n onClose?: () => void;\n /** After a successful retry so the parent list can refetch. */\n onRetried?: () => void;\n}) {\n // 🔴 Poll intervals are part of parity: 5s task, 10s events. Do not widen\n // without updating the corresponding cadence assertion.\n const { data: taskData, isLoading, error, mutate: refetchTask } = useSWR<{\n tasks: TaskDetailData[];\n }>(\n `/api/hub/tasks?task_id=${encodeURIComponent(taskId)}`,\n fetcher,\n { refreshInterval: POLL_TASK_MS },\n );\n const { data: eventsData } = useSWR<{ events: TaskEvent[] }>(\n `/api/hub/task-events?task_id=${encodeURIComponent(taskId)}&limit=50`,\n fetcher,\n { refreshInterval: POLL_EVENTS_MS },\n );\n const [retrying, setRetrying] = useState(false);\n\n const task = taskData?.tasks?.[0];\n const events = eventsData?.events || [];\n\n const doRetry = async () => {\n if (!task) return;\n setRetrying(true);\n try {\n await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n alias: task.to_name,\n task: task.content,\n priority: task.priority,\n ...(task.network_id ? { network_id: task.network_id } : {}),\n }),\n });\n refetchTask();\n onRetried?.();\n } finally {\n setRetrying(false);\n }\n };\n\n const timelineSteps: { label: string; time: string; color: string }[] = task\n ? [\n { label: 'Created', time: task.created_at, color: 'text-gray-400' },\n { label: 'Delivered', time: task.delivered_at, color: 'text-blue-400' },\n { label: 'Started', time: task.started_at, color: 'text-green-400' },\n { label: 'Completed', time: task.completed_at, color: 'text-purple-400' },\n ]\n : [];\n\n return (\n <div\n data-testid=\"task-detail-pane\"\n data-task-id={taskId}\n data-poll-task-ms={String(POLL_TASK_MS)}\n data-poll-events-ms={String(POLL_EVENTS_MS)}\n className=\"flex flex-col h-full max-h-screen overflow-hidden\"\n >\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[#1c1c1f]\">\n <div className=\"min-w-0 flex-1 flex items-center gap-2\">\n <div className=\"text-xs text-gray-500 truncate\" title={taskId}>\n <span className=\"text-gray-600\">Task ID:</span>{' '}\n <span className=\"font-mono\">{taskId.slice(0, 12)}…</span>\n </div>\n {task && (\n <span\n data-testid=\"task-detail-status\"\n className={`text-xs px-2 py-0.5 rounded-md border ${\n STATUS_CHIP[task.status] ||\n 'bg-gray-500/10 text-gray-400 border-gray-500/20'\n }`}\n >\n {task.status}\n </span>\n )}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close detail (返回 tasks 列表)\"\n data-testid=\"task-detail-close\"\n className=\"shrink-0 rounded-md border border-[#26262b] px-2 py-1 text-xs text-gray-400 hover:text-white hover:border-[#3a3a41]\"\n >\n ←\n </button>\n )}\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-4 py-4 space-y-4\">\n {isLoading && !task && (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-6 w-1/3 bg-gray-800/40 rounded\" />\n <div className=\"h-24 bg-gray-800/40 rounded\" />\n <div className=\"h-24 bg-gray-800/40 rounded\" />\n </div>\n )}\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-3 py-2 rounded text-sm\">\n {error instanceof Error ? error.message : 'fetch failed'}\n </div>\n )}\n {!isLoading && !error && !task && (\n <div className=\"text-gray-400 text-sm\">Task not found</div>\n )}\n\n {task && (\n <>\n {/* Block 1: Timeline card (parity #1) */}\n <section\n data-testid=\"task-detail-timeline\"\n data-block=\"timeline\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-4\">Timeline</h2>\n <div className=\"relative\">\n {timelineSteps.map((step, i) => {\n const done = !!step.time;\n const isLast = i === timelineSteps.length - 1;\n return (\n <div\n key={step.label}\n data-testid={`timeline-step-${step.label.toLowerCase()}`}\n data-timeline-step={step.label.toLowerCase()}\n data-timeline-done={done ? 'true' : 'false'}\n className=\"flex gap-3 pb-4 last:pb-0\"\n >\n <div className=\"flex flex-col items-center\">\n <div\n className={`w-3 h-3 rounded-full border-2 shrink-0 ${\n done ? `${step.color} border-current` : 'border-gray-700 bg-transparent'\n }`}\n />\n {!isLast && (\n <div\n className={`w-0.5 flex-1 mt-1 ${\n done && timelineSteps[i + 1]?.time\n ? 'bg-cyan-500/40'\n : 'bg-gray-800'\n }`}\n />\n )}\n </div>\n <div className=\"min-w-0 -mt-0.5\">\n <div className={`text-sm font-medium ${done ? 'text-gray-200' : 'text-gray-600'}`}>\n {step.label}\n </div>\n <div\n className=\"text-xs text-gray-500\"\n title={step.time || undefined}\n >\n {step.time ? `${timeAgo(step.time)} — ${step.time}` : 'Pending'}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n\n {/* Block 2: Info card (parity #2) */}\n <section\n data-testid=\"task-detail-info\"\n data-block=\"info\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">Info</h2>\n <div className=\"space-y-2 text-xs\">\n {[\n ['Task ID', task.task_id],\n ['From', task.from_name],\n ['To', task.to_name],\n ['Priority', task.priority],\n ['Status', task.status],\n ['Expires', task.expires_at],\n ].map(([label, val]) => (\n <div key={label as string} className=\"flex justify-between gap-4\">\n <span className=\"text-gray-500 shrink-0\">{label}</span>\n <span\n data-info-field={String(label).toLowerCase().replace(/\\s+/g, '-')}\n className=\"text-gray-300 truncate max-w-[240px] text-right\"\n title={String(val || '')}\n >\n {String(val || '--')}\n </span>\n </div>\n ))}\n </div>\n <div\n className=\"mt-4 pt-3 border-t border-[#1c1c1f] flex items-center gap-2 text-sm text-gray-300\"\n data-testid=\"task-detail-participants\"\n >\n {task.from_name && <AliasAvatar alias={task.from_name} size={20} />}\n <span className=\"truncate\">{task.from_name || '--'}</span>\n <span className=\"text-gray-600 shrink-0\">→</span>\n {task.to_name && <AliasAvatar alias={task.to_name} size={20} />}\n <span className=\"truncate\">{task.to_name || '--'}</span>\n </div>\n <div className=\"mt-2 text-[10px]\">\n <span\n className={priorityClass(task.priority)}\n data-testid=\"task-detail-priority\"\n >\n Priority: {task.priority || 'normal'}\n </span>\n </div>\n </section>\n\n {/* Block 3: Content (parity #3) */}\n <section\n data-testid=\"task-detail-content\"\n data-block=\"content\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Content</h2>\n <pre\n data-testid=\"task-detail-content-body\"\n className=\"text-xs text-gray-200 whitespace-pre-wrap break-words bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f] max-h-64 overflow-y-auto font-sans\"\n >\n {task.content || '--'}\n </pre>\n </section>\n\n {/* Block 4: Result (parity #4) */}\n {task.result && (\n <section\n data-testid=\"task-detail-result\"\n data-block=\"result\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Result</h2>\n <pre\n data-testid=\"task-detail-result-body\"\n className=\"text-xs text-gray-200 whitespace-pre-wrap break-words bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f] max-h-64 overflow-y-auto font-sans\"\n >\n {task.result}\n </pre>\n </section>\n )}\n\n {/* Block 5: Events feed (parity #5) — 10s poll, always rendered\n even when empty so \"no events\" state is visible; a silently\n missing block would hide the difference between \"feed\n gone\" and \"task has no events yet\". */}\n <section\n data-testid=\"task-detail-events\"\n data-block=\"events\"\n data-events-count={events.length}\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">\n Events {events.length > 0 && <span className=\"text-gray-500\">({events.length})</span>}\n </h2>\n {events.length === 0 ? (\n <div className=\"text-xs text-gray-600 italic\">No events yet.</div>\n ) : (\n <div className=\"space-y-2 max-h-64 overflow-y-auto\">\n {events.map((e, i) => (\n <div\n key={e.id ?? i}\n data-testid=\"task-detail-event-row\"\n className=\"flex items-start gap-2 text-xs\"\n >\n <span\n aria-hidden\n className={`mt-1.5 w-1.5 h-1.5 rounded-full shrink-0 ${\n e.to_status === 'running'\n ? 'bg-green-400'\n : e.to_status === 'replied'\n ? 'bg-purple-400'\n : e.to_status === 'failed'\n ? 'bg-red-400'\n : 'bg-blue-400'\n }`}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <span data-testid=\"task-event-label\" className=\"text-gray-300 font-medium truncate\">\n {taskEventLabel(e)}\n </span>\n {e.from_status && (\n <span className=\"text-gray-600 shrink-0\">\n {e.from_status} → {e.to_status}\n </span>\n )}\n {e.actor && (\n <span data-testid=\"task-event-actor\" className=\"text-gray-500 truncate\">\n by {e.actor}\n </span>\n )}\n </div>\n {e.detail && (\n <div data-testid=\"task-event-detail\" className=\"mt-0.5 text-[11px] text-gray-500 break-words\">\n {e.detail}\n </div>\n )}\n {isDeliveryStaleObservation(e) && (\n <div data-testid=\"task-event-stale-context\" className=\"mt-0.5 text-[10px] text-amber-500/80 break-words\">\n Informational delivery observation; tasks that do not require a reply may also appear here.\n </div>\n )}\n </div>\n <span className=\"text-gray-600 ml-auto shrink-0\" title={e.created_at}>\n {timeAgo(e.created_at)}\n </span>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {(task.status === 'failed' || task.status === 'expired') && (\n <div>\n <button\n onClick={doRetry}\n disabled={retrying}\n data-testid=\"task-detail-retry\"\n className=\"text-xs text-orange-400 hover:text-orange-300 px-3 py-1.5 rounded-md border border-orange-500/30 hover:bg-orange-500/10 disabled:opacity-50 disabled:cursor-wait\"\n >\n {retrying ? 'Retrying…' : 'Retry task'}\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n"],"names":["timeAgo","dateStr","diff","Date","now","replace","getTime","s","Math","floor","TaskList","tasks","selectedId","onSelect","className","length","map","t","active","task_id","type","onClick","style","backgroundColor","status","priority","created_at","from_name","alias","size","to_name","title","content"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../app/tasks/TasksView.tsx","../../../../app/components/TaskList.tsx","../../../../app/components/TaskDetail.tsx"],"sourcesContent":["'use client';\n\nimport {\n Suspense,\n useCallback,\n useEffect,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport { useNetworkId } from '../lib/network-context';\nimport { EmptyState } from '../components/EmptyState';\nimport { TaskList, type TaskListItem } from '../components/TaskList';\nimport { TaskDetail } from '../components/TaskDetail';\nimport {\n TASK_STATUSES,\n STATUS_CHIP_CLASS,\n STATUS_DOT_HEX,\n STATUS_BAR_CLASS,\n} from '../lib/status';\n\n// #Stage-tasks (dashboard 类飞书 two-column, 07-31):\n//\n// /tasks moves from one-big-table + inline-expand + drawer to a\n// list-plus-detail layout with a shareable URL /tasks/[id]. Mirrors\n// /nodes NodesView (see app/nodes/NodesView.tsx for the pattern).\n//\n// Deliberately: the old expand-in-place row and the TaskDrawer side\n// sheet are gone from the /tasks page. The right pane replaces both\n// affordances so we don't leave the layout showing \"one thing twice\"\n// (通信龙 07-31 catch from /nodes: rail added alongside the table left\n// 199 nodes rendered in two places at once). Detail negative\n// assertions in the tests must be paired with a positive assertion so\n// \"detail integrated into pane\" and \"detail feature gone\" can't be\n// confused for each other.\n//\n// TaskDrawer.tsx itself is not deleted — no other file imports it,\n// but the boundary of this PR is app/tasks/**, and dead-code sweeps\n// are a separate concern.\n\nconst MD_QUERY = '(min-width: 768px)';\nfunction subscribeMd(cb: () => void) {\n const mql = window.matchMedia(MD_QUERY);\n mql.addEventListener('change', cb);\n return () => mql.removeEventListener('change', cb);\n}\nfunction useIsDesktop(): boolean {\n return useSyncExternalStore(\n subscribeMd,\n () => window.matchMedia(MD_QUERY).matches,\n () => true,\n );\n}\n\n// Task IDs on the CommHub side are opaque strings — usually hex, but\n// treat them as arbitrary to match the alias precedent. Decode once\n// defensively (same shape as /nodes NodesView.decodeAliasSegment).\nexport function decodeIdSegment(seg: string): string {\n try {\n return decodeURIComponent(seg);\n } catch {\n return seg;\n }\n}\n\nfunction TasksViewInner({ initialSelectedId = null }: { initialSelectedId?: string | null }) {\n const searchParams = useSearchParams();\n const { networkId } = useNetworkId();\n const [tasks, setTasks] = useState<TaskListItem[]>([]);\n const [count, setCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n\n const [filterStatus, setFilterStatus] = useState(searchParams.get('status') || '');\n // 07-31 通信龙 dispatch (临时开放此文件): let ChatPane's \"查看任务\"\n // button prefill the from/to filters via URL. Before this, the /tasks\n // link on ChatPane header carried `?alias=` which was silently ignored\n // (both filters init'd to '' regardless of URL) — user tapped, saw the\n // full unfiltered list, thought \"that's all the tasks for this alias\".\n // See feedback_verify_both_directions_with_real_data — this is a\n // silent-half-broken feature that already shipped in preview.51 and\n // needs both prefill directions.\n const [filterFrom, setFilterFrom] = useState(searchParams.get('from_name') || '');\n const [filterTo, setFilterTo] = useState(searchParams.get('to_name') || '');\n\n // #Stage-tasks: selection is seeded from /tasks/[id] URL, then plain\n // client state kept in sync with pushState (shallow — no route remount,\n // switching tasks swaps the right pane in place).\n const [selectedId, setSelectedId] = useState<string | null>(initialSelectedId);\n const isDesktop = useIsDesktop();\n\n const selectTask = (task_id: string) => {\n setSelectedId(task_id);\n try {\n window.history.pushState({}, '', `/tasks/${encodeURIComponent(task_id)}`);\n } catch {}\n };\n const closeDetail = () => {\n setSelectedId(null);\n try {\n window.history.pushState({}, '', '/tasks');\n } catch {}\n };\n\n // Back/forward — mirror URL into state.\n useEffect(() => {\n const onPop = () => {\n const m = window.location.pathname.match(/^\\/tasks\\/([^/]+)\\/?$/);\n setSelectedId(m ? decodeIdSegment(m[1]) : null);\n };\n window.addEventListener('popstate', onPop);\n return () => window.removeEventListener('popstate', onPop);\n }, []);\n\n const fetchTasks = useCallback(async () => {\n try {\n const params = new URLSearchParams();\n if (networkId) params.set('network_id', networkId);\n if (filterStatus) params.set('status', filterStatus);\n if (filterFrom) params.set('from_name', filterFrom);\n if (filterTo) params.set('to_name', filterTo);\n params.set('limit', '100');\n\n const res = await fetch(`/api/hub/tasks?${params.toString()}`);\n if (res.status === 401) {\n window.location.assign('/login');\n return;\n }\n const data = await res.json();\n setTasks(data.tasks || []);\n setCount(data.count ?? (data.tasks?.length || 0));\n setError('');\n } catch (e: unknown) {\n setError(e instanceof Error ? e.message : 'fetch failed');\n } finally {\n setLoading(false);\n }\n }, [filterStatus, filterFrom, filterTo, networkId]);\n\n useEffect(() => {\n setLoading(true);\n fetchTasks();\n const interval = setInterval(fetchTasks, 5000);\n return () => clearInterval(interval);\n }, [fetchTasks]);\n\n const counts: Record<string, number> = {};\n tasks.forEach((t) => {\n counts[t.status] = (counts[t.status] || 0) + 1;\n });\n const total = tasks.length || 1;\n const bars = TASK_STATUSES.map((key) => ({ key, color: STATUS_BAR_CLASS[key] })).filter(\n (b) => counts[b.key],\n );\n\n return (\n <div\n data-testid=\"tasks-layout\"\n data-selected-id={selectedId ?? ''}\n className=\"min-h-screen max-w-full overflow-x-hidden bg-[#0b0b0d] text-gray-100 flex\"\n >\n {/* Rail — desktop always visible; on mobile it holds the whole\n page (detail becomes a full-screen overlay). No \"toggle\n rail\" button on tasks: there is no dense one-column table\n to fall back to (unlike /nodes where Vincent's 看全局 view\n exists). Removing the old table is the whole point of this\n refactor — 通信龙 07-31 catch from /nodes: don't leave the\n layout showing \"one thing twice\". */}\n <aside\n data-testid=\"task-list-column\"\n className={`flex flex-col w-full sm:w-[380px] shrink-0 min-h-screen sticky top-0 border-r border-[#1c1c1f] ${\n selectedId && !isDesktop ? 'hidden' : 'flex'\n }`}\n >\n <div className=\"px-4 py-3 border-b border-[#1c1c1f]\">\n <div className=\"flex items-center gap-3 mb-3\">\n <h1 className=\"text-xl font-bold text-white lg:ml-0 ml-10\">Tasks</h1>\n {tasks.length < count && (\n <span\n className=\"text-xs bg-blue-900/30 text-blue-400 px-2 py-0.5 rounded-full border border-blue-800/30 tabular-nums\"\n title={`Showing ${tasks.length} of ${count} tasks`}\n >\n {tasks.length} / {count}\n </span>\n )}\n </div>\n\n {tasks.length > 0 && (\n <>\n {/* Status tab strip */}\n <div className=\"anet-tabstrip-wrap mb-2\">\n <div className=\"anet-tabstrip flex flex-wrap gap-1 bg-[#161618] rounded-lg border border-[#26262b] p-1 overflow-x-auto scrollbar-thin\">\n {['', ...TASK_STATUSES].map((s) => {\n const cnt = s === '' ? tasks.length : counts[s] || 0;\n const isActive = filterStatus === s;\n return (\n <button\n key={s || 'all'}\n onClick={() => setFilterStatus(s)}\n disabled={cnt === 0 && s !== '' && !isActive}\n className={`px-2.5 py-1 rounded-md text-xs transition-colors flex items-center gap-1 shrink-0 whitespace-nowrap disabled:opacity-30 disabled:cursor-not-allowed ${\n isActive\n ? `${STATUS_CHIP_CLASS[s] || 'bg-cyan-500/10 text-cyan-300 border-cyan-500/20'} border`\n : 'text-gray-500 hover:text-gray-300 hover:bg-[#1c1c1f]/40'\n }`}\n >\n {s && (\n <span\n aria-hidden\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: STATUS_DOT_HEX[s] || '#6b7280' }}\n />\n )}\n <span>{s || 'All'}</span>\n <span\n className={`text-[10px] tabular-nums ${\n isActive ? 'opacity-80' : 'text-gray-600'\n }`}\n >\n {cnt}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* From/To filters */}\n <div className=\"flex flex-wrap items-center gap-1.5 mb-2\">\n <div className=\"flex items-center gap-1 rounded border border-[#26262b] bg-[#161618] px-2 py-1 focus-within:border-blue-500/40\">\n <span className=\"text-[9px] uppercase tracking-wide text-gray-600\">From</span>\n <input\n type=\"text\"\n value={filterFrom}\n onChange={(e) => setFilterFrom(e.target.value)}\n placeholder=\"any\"\n data-testid=\"tasks-filter-from\"\n className=\"w-16 bg-transparent text-xs text-white placeholder-gray-700 focus:outline-none\"\n />\n </div>\n <div className=\"flex items-center gap-1 rounded border border-[#26262b] bg-[#161618] px-2 py-1 focus-within:border-blue-500/40\">\n <span className=\"text-[9px] uppercase tracking-wide text-gray-600\">To</span>\n <input\n type=\"text\"\n value={filterTo}\n onChange={(e) => setFilterTo(e.target.value)}\n placeholder=\"any\"\n data-testid=\"tasks-filter-to\"\n className=\"w-16 bg-transparent text-xs text-white placeholder-gray-700 focus:outline-none\"\n />\n </div>\n {(filterStatus || filterFrom || filterTo) && (\n <button\n type=\"button\"\n onClick={() => {\n setFilterStatus('');\n setFilterFrom('');\n setFilterTo('');\n }}\n className=\"rounded border border-gray-700 px-2 py-0.5 text-[10px] text-gray-500 hover:text-gray-200 hover:border-gray-600\"\n >\n Clear\n </button>\n )}\n </div>\n\n {/* Status distribution bar (only when no status filter) */}\n {!filterStatus && bars.length > 0 && (\n <div className=\"flex h-1 rounded-full overflow-hidden bg-gray-800\">\n {bars.map((b) => (\n <div\n key={b.key}\n className={b.color}\n style={{ width: `${(counts[b.key] / total) * 100}%` }}\n title={`${b.key}: ${counts[b.key]}`}\n />\n ))}\n </div>\n )}\n </>\n )}\n\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-3 py-1.5 rounded mt-2 text-xs\">\n {error}\n </div>\n )}\n </div>\n\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {loading ? (\n <div className=\"animate-pulse space-y-1 px-3 py-2\">\n {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => (\n <div key={i} className=\"h-14 bg-gray-800/40 rounded\" />\n ))}\n </div>\n ) : tasks.length === 0 ? (\n <div className=\"px-3 py-6\">\n <EmptyState\n variant=\"tasks\"\n sub={\n filterStatus || filterFrom || filterTo\n ? 'No tasks match the current filters. Try clearing them.'\n : 'Tasks will appear here when agents send them via CommHub.'\n }\n />\n </div>\n ) : (\n <TaskList tasks={tasks} selectedId={selectedId} onSelect={selectTask} />\n )}\n </div>\n </aside>\n\n {/* Detail — desktop: right pane inside the flex row. Mobile: full-screen\n overlay that hides the list column above. Both variants get onClose:\n on desktop it returns the right pane to the empty state (preserves\n the \"← Tasks\" return affordance the old full-page detail had);\n on mobile it dismisses the overlay. Either way the URL drops back\n to /tasks. 通信龙 07-31 constraint: 返回入口别丢. */}\n {selectedId && isDesktop && (\n <section\n data-testid=\"task-detail-column\"\n className=\"flex-1 min-w-0 min-h-screen\"\n >\n <TaskDetail taskId={selectedId} onClose={closeDetail} onRetried={fetchTasks} />\n </section>\n )}\n {selectedId && !isDesktop && (\n <section\n data-testid=\"task-detail-mobile\"\n className=\"fixed inset-0 z-40 bg-[#0b0b0d]\"\n >\n <TaskDetail taskId={selectedId} onClose={closeDetail} onRetried={fetchTasks} />\n </section>\n )}\n {!selectedId && isDesktop && (\n <section\n data-testid=\"task-detail-empty\"\n className=\"flex-1 min-w-0 min-h-screen flex items-center justify-center text-sm text-gray-600\"\n >\n 请从左侧列表选择一条任务查看详情\n </section>\n )}\n </div>\n );\n}\n\n// useSearchParams needs a Suspense boundary in Next 14+ app-router. Same\n// shape the old page.tsx had (wrapper → Inner). Fallback matches the\n// loaded layout width so the burger button doesn't crash into \"Loa…\".\nexport function TasksView({ initialSelectedId = null }: { initialSelectedId?: string | null }) {\n return (\n <Suspense\n fallback={\n <div className=\"min-h-screen bg-[#0b0b0d] text-gray-100 p-4 sm:p-6\">\n <div className=\"lg:ml-0 ml-10 text-gray-500 text-sm\">Loading tasks…</div>\n </div>\n }\n >\n <TasksViewInner initialSelectedId={initialSelectedId} />\n </Suspense>\n );\n}\n","'use client';\n\nimport { AliasAvatar } from './AliasAvatar';\nimport { relativeAgo } from '../lib/time';\nimport { previewContent } from './utils';\nimport { STATUS_CHIP_CLASS, STATUS_DOT_HEX } from '../lib/status';\n\n// Task-list rail for the /tasks two-column layout (类飞书 \"list + detail\").\n// Rendered inside TasksView's <aside> — this file is intentionally small\n// and only owns the list-row shape, so the same component can back both\n// desktop rail and (later) a mobile drawer without duplicating the row\n// template.\n//\n// #Stage-tasks: mirrors NodeList.tsx narrow-rail pattern. Row click calls\n// onSelect(task_id) so the parent can drive URL/state; row does NOT know\n// about routing.\n\nexport interface TaskListItem {\n task_id: string;\n network_id?: string;\n from_name: string;\n to_name: string;\n status: string;\n priority: string;\n content: string;\n created_at: string;\n}\n\n// 同 TaskDetail:统一到 lib/time,关掉 ISO→\"…ZZ\"→NaN 那条路径。\n// 注意这里的输出**不带 \" ago\" 后缀**(列表里空间紧),所以要把后缀去掉,\n// 保持既有视觉不变。\nfunction timeAgo(dateStr: string): string {\n const v = relativeAgo(dateStr);\n return v === null ? '--' : v.replace(/ ago$/, '');\n}\n\nexport function TaskList({\n tasks,\n selectedId,\n onSelect,\n}: {\n tasks: TaskListItem[];\n selectedId: string | null;\n onSelect: (task_id: string) => void;\n}) {\n return (\n <div\n data-testid=\"task-list-rail\"\n className=\"flex flex-col h-full max-h-screen overflow-y-auto\"\n >\n {tasks.length === 0 ? (\n <div className=\"px-4 py-6 text-xs text-gray-600 text-center\">\n 没有匹配的任务\n </div>\n ) : (\n <ul className=\"flex flex-col divide-y divide-[#1c1c1f]\">\n {tasks.map((t) => {\n const active = t.task_id === selectedId;\n return (\n <li key={t.task_id}>\n <button\n type=\"button\"\n data-task-row\n data-task-id={t.task_id}\n data-selected={active ? 'true' : 'false'}\n onClick={() => onSelect(t.task_id)}\n className={`w-full text-left px-3 py-2.5 transition-colors ${\n active\n ? 'bg-cyan-500/10 border-l-2 border-cyan-500'\n : 'border-l-2 border-transparent hover:bg-[#1c1c1f]/40'\n }`}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n {/* status dot + label */}\n <span\n aria-hidden\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: STATUS_DOT_HEX[t.status] || '#6b7280' }}\n />\n <span\n className={`text-[10px] px-1.5 py-0.5 rounded border ${\n STATUS_CHIP_CLASS[t.status] ||\n 'bg-gray-500/10 text-gray-400 border-gray-500/20'\n }`}\n >\n {t.status}\n </span>\n {t.priority === 'high' && (\n <span className=\"text-[10px] text-red-400 shrink-0\">HIGH</span>\n )}\n <span className=\"ml-auto text-[10px] text-gray-600 tabular-nums shrink-0\">\n {timeAgo(t.created_at)}\n </span>\n </div>\n <div className=\"flex items-center gap-1 text-xs text-gray-300 min-w-0 mb-1\">\n {t.from_name && <AliasAvatar alias={t.from_name} size={14} />}\n <span className=\"truncate max-w-[35%]\">{t.from_name || '--'}</span>\n <span className=\"text-gray-600 shrink-0\">→</span>\n {t.to_name && <AliasAvatar alias={t.to_name} size={14} />}\n <span className=\"truncate max-w-[35%]\">{t.to_name || '--'}</span>\n </div>\n <div\n className=\"text-[11px] text-gray-500 line-clamp-2 leading-snug\"\n title={t.content}\n >\n {previewContent(t.content) || <span className=\"italic\">(no content)</span>}\n </div>\n </button>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { relativeAgo } from '../lib/time';\nimport useSWR from 'swr';\nimport { AliasAvatar } from './AliasAvatar';\nimport { STATUS_CHIP_CLASS as STATUS_CHIP } from '../lib/status';\n\n// Detail pane for the /tasks two-column layout.\n//\n// Feature-parity target (通信龙 07-31 parity 硬门, migrating from the\n// old full-page /tasks/[id]/page.tsx): five blocks, each with its own\n// positive assertion in tests + real data visible (not just \"the div\n// is there\"):\n// 1. Timeline card — steps: created / delivered / started / completed\n// 2. Info card — task_id / from / to / priority / status / expires\n// 3. Content\n// 4. Result\n// 5. Events feed — /api/hub/task-events?limit=50 (10s poll)\n//\n// Poll cadence — the old full-page useSWR was 5s (task) + 10s (events).\n// Do NOT widen either interval: \"page's there but data's stale\" is worse\n// than \"page's not there\" because it looks fine to anyone glancing at it.\n// The intervals are part of parity — tests should assert both refetch.\n\ninterface TaskDetailData {\n task_id: string;\n network_id?: string;\n from_name: string;\n to_name: string;\n status: string;\n priority: string;\n content: string;\n result: string;\n created_at: string;\n updated_at: string;\n delivered_at: string;\n started_at: string;\n completed_at: string;\n expires_at: string;\n}\n\ninterface TaskEvent {\n id: number;\n event_type?: string | null;\n actor?: string | null;\n from_status: string;\n to_status: string;\n detail?: string | null;\n created_at: string;\n}\n\nfunction taskEventLabel(event: TaskEvent): string {\n return event.event_type?.trim() || event.to_status?.trim() || 'event';\n}\n\nfunction isDeliveryStaleObservation(event: TaskEvent): boolean {\n return event.event_type?.startsWith('task.stale.') ?? false;\n}\n\n// 🔴 Poll cadences are declared as module-scope constants so the useSWR\n// refreshInterval and the DOM `data-poll-*-ms` attribute are *literally*\n// the same number. Two separate literals meant the attribute-based test\n// assertion could go green even if someone widened refreshInterval —\n// the assertion was watching the string, not the fact.\n// (通信龙 07-31 catch: \"断言的是声明, 不是事实.\")\n// Widen either interval only alongside a paired update to the test\n// asserting cadence, and re-run witnessed-red by bumping one of these\n// to a wrong value.\nconst POLL_TASK_MS = 5000;\nconst POLL_EVENTS_MS = 10000;\n\n// Round 38 / Round 44 已经把时间戳解析统一到 lib/time;这里是漏网的一处。\n// 旧的内联写法对**已经是 ISO** 的输入会补成 \"…ZZ\" → Date.parse 得 NaN\n// → 后续 `NaN < 60` 全 false,一路落到最后一行显示 \"NaNd ago\"。\n// 现在 hub 只发裸 SQL,所以那条路径尚未发生;这是提前关掉它。\n// 同时拿到 relativeAgo 的时钟偏移兜底(未来时间戳 → 'just now',而不是负数)。\n\nfunction timeAgo(dateStr: string): string {\n return relativeAgo(dateStr) ?? '--';\n}\n\nfunction priorityClass(priority: string) {\n if (priority === 'high') return 'text-red-400';\n if (priority === 'low') return 'text-gray-600';\n return 'text-gray-400';\n}\n\nconst fetcher = async (url: string) => {\n const res = await fetch(url);\n if (res.status === 401) {\n window.location.assign('/login');\n throw new Error('unauthorized');\n }\n return res.json();\n};\n\nexport function TaskDetail({\n taskId,\n onClose,\n onRetried,\n}: {\n taskId: string;\n /** X in the header — desktop returns pane to empty, mobile dismisses overlay.\n * Either way the URL drops back to /tasks (parent handles). Preserves the\n * 返回入口 the old full-page detail had via its \"← Tasks\" link. */\n onClose?: () => void;\n /** After a successful retry so the parent list can refetch. */\n onRetried?: () => void;\n}) {\n // 🔴 Poll intervals are part of parity: 5s task, 10s events. Do not widen\n // without updating the corresponding cadence assertion.\n const { data: taskData, isLoading, error, mutate: refetchTask } = useSWR<{\n tasks: TaskDetailData[];\n }>(\n `/api/hub/tasks?task_id=${encodeURIComponent(taskId)}`,\n fetcher,\n { refreshInterval: POLL_TASK_MS },\n );\n const { data: eventsData } = useSWR<{ events: TaskEvent[] }>(\n `/api/hub/task-events?task_id=${encodeURIComponent(taskId)}&limit=50`,\n fetcher,\n { refreshInterval: POLL_EVENTS_MS },\n );\n const [retrying, setRetrying] = useState(false);\n\n const task = taskData?.tasks?.[0];\n const events = eventsData?.events || [];\n\n const doRetry = async () => {\n if (!task) return;\n setRetrying(true);\n try {\n await fetch('/api/hub/send', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n alias: task.to_name,\n task: task.content,\n priority: task.priority,\n ...(task.network_id ? { network_id: task.network_id } : {}),\n }),\n });\n refetchTask();\n onRetried?.();\n } finally {\n setRetrying(false);\n }\n };\n\n const timelineSteps: { label: string; time: string; color: string }[] = task\n ? [\n { label: 'Created', time: task.created_at, color: 'text-gray-400' },\n { label: 'Delivered', time: task.delivered_at, color: 'text-blue-400' },\n { label: 'Started', time: task.started_at, color: 'text-green-400' },\n { label: 'Completed', time: task.completed_at, color: 'text-purple-400' },\n ]\n : [];\n\n return (\n <div\n data-testid=\"task-detail-pane\"\n data-task-id={taskId}\n data-poll-task-ms={String(POLL_TASK_MS)}\n data-poll-events-ms={String(POLL_EVENTS_MS)}\n className=\"flex flex-col h-full max-h-screen overflow-hidden\"\n >\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-[#1c1c1f]\">\n <div className=\"min-w-0 flex-1 flex items-center gap-2\">\n <div className=\"text-xs text-gray-500 truncate\" title={taskId}>\n <span className=\"text-gray-600\">Task ID:</span>{' '}\n <span className=\"font-mono\">{taskId.slice(0, 12)}…</span>\n </div>\n {task && (\n <span\n data-testid=\"task-detail-status\"\n className={`text-xs px-2 py-0.5 rounded-md border ${\n STATUS_CHIP[task.status] ||\n 'bg-gray-500/10 text-gray-400 border-gray-500/20'\n }`}\n >\n {task.status}\n </span>\n )}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close detail (返回 tasks 列表)\"\n data-testid=\"task-detail-close\"\n className=\"shrink-0 rounded-md border border-[#26262b] px-2 py-1 text-xs text-gray-400 hover:text-white hover:border-[#3a3a41]\"\n >\n ←\n </button>\n )}\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-4 py-4 space-y-4\">\n {isLoading && !task && (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-6 w-1/3 bg-gray-800/40 rounded\" />\n <div className=\"h-24 bg-gray-800/40 rounded\" />\n <div className=\"h-24 bg-gray-800/40 rounded\" />\n </div>\n )}\n {error && (\n <div className=\"bg-red-900/20 border border-red-800/40 text-red-300 px-3 py-2 rounded text-sm\">\n {error instanceof Error ? error.message : 'fetch failed'}\n </div>\n )}\n {!isLoading && !error && !task && (\n <div className=\"text-gray-400 text-sm\">Task not found</div>\n )}\n\n {task && (\n <>\n {/* Block 1: Timeline card (parity #1) */}\n <section\n data-testid=\"task-detail-timeline\"\n data-block=\"timeline\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-4\">Timeline</h2>\n <div className=\"relative\">\n {timelineSteps.map((step, i) => {\n const done = !!step.time;\n const isLast = i === timelineSteps.length - 1;\n return (\n <div\n key={step.label}\n data-testid={`timeline-step-${step.label.toLowerCase()}`}\n data-timeline-step={step.label.toLowerCase()}\n data-timeline-done={done ? 'true' : 'false'}\n className=\"flex gap-3 pb-4 last:pb-0\"\n >\n <div className=\"flex flex-col items-center\">\n <div\n className={`w-3 h-3 rounded-full border-2 shrink-0 ${\n done ? `${step.color} border-current` : 'border-gray-700 bg-transparent'\n }`}\n />\n {!isLast && (\n <div\n className={`w-0.5 flex-1 mt-1 ${\n done && timelineSteps[i + 1]?.time\n ? 'bg-cyan-500/40'\n : 'bg-gray-800'\n }`}\n />\n )}\n </div>\n <div className=\"min-w-0 -mt-0.5\">\n <div className={`text-sm font-medium ${done ? 'text-gray-200' : 'text-gray-600'}`}>\n {step.label}\n </div>\n <div\n className=\"text-xs text-gray-500\"\n title={step.time || undefined}\n >\n {step.time ? `${timeAgo(step.time)} — ${step.time}` : 'Pending'}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </section>\n\n {/* Block 2: Info card (parity #2) */}\n <section\n data-testid=\"task-detail-info\"\n data-block=\"info\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">Info</h2>\n <div className=\"space-y-2 text-xs\">\n {[\n ['Task ID', task.task_id],\n ['From', task.from_name],\n ['To', task.to_name],\n ['Priority', task.priority],\n ['Status', task.status],\n ['Expires', task.expires_at],\n ].map(([label, val]) => (\n <div key={label as string} className=\"flex justify-between gap-4\">\n <span className=\"text-gray-500 shrink-0\">{label}</span>\n <span\n data-info-field={String(label).toLowerCase().replace(/\\s+/g, '-')}\n className=\"text-gray-300 truncate max-w-[240px] text-right\"\n title={String(val || '')}\n >\n {String(val || '--')}\n </span>\n </div>\n ))}\n </div>\n <div\n className=\"mt-4 pt-3 border-t border-[#1c1c1f] flex items-center gap-2 text-sm text-gray-300\"\n data-testid=\"task-detail-participants\"\n >\n {task.from_name && <AliasAvatar alias={task.from_name} size={20} />}\n <span className=\"truncate\">{task.from_name || '--'}</span>\n <span className=\"text-gray-600 shrink-0\">→</span>\n {task.to_name && <AliasAvatar alias={task.to_name} size={20} />}\n <span className=\"truncate\">{task.to_name || '--'}</span>\n </div>\n <div className=\"mt-2 text-[10px]\">\n <span\n className={priorityClass(task.priority)}\n data-testid=\"task-detail-priority\"\n >\n Priority: {task.priority || 'normal'}\n </span>\n </div>\n </section>\n\n {/* Block 3: Content (parity #3) */}\n <section\n data-testid=\"task-detail-content\"\n data-block=\"content\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Content</h2>\n <pre\n data-testid=\"task-detail-content-body\"\n className=\"text-xs text-gray-200 whitespace-pre-wrap break-words bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f] max-h-64 overflow-y-auto font-sans\"\n >\n {task.content || '--'}\n </pre>\n </section>\n\n {/* Block 4: Result (parity #4) */}\n {task.result && (\n <section\n data-testid=\"task-detail-result\"\n data-block=\"result\"\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-2\">Result</h2>\n <pre\n data-testid=\"task-detail-result-body\"\n className=\"text-xs text-gray-200 whitespace-pre-wrap break-words bg-[#0e0e10] rounded-lg px-3 py-2 border border-[#1c1c1f] max-h-64 overflow-y-auto font-sans\"\n >\n {task.result}\n </pre>\n </section>\n )}\n\n {/* Block 5: Events feed (parity #5) — 10s poll, always rendered\n even when empty so \"no events\" state is visible; a silently\n missing block would hide the difference between \"feed\n gone\" and \"task has no events yet\". */}\n <section\n data-testid=\"task-detail-events\"\n data-block=\"events\"\n data-events-count={events.length}\n className=\"bg-[#161618] border border-[#26262b] rounded-xl p-4\"\n >\n <h2 className=\"text-sm font-semibold text-gray-300 mb-3\">\n Events {events.length > 0 && <span className=\"text-gray-500\">({events.length})</span>}\n </h2>\n {events.length === 0 ? (\n <div className=\"text-xs text-gray-600 italic\">No events yet.</div>\n ) : (\n <div className=\"space-y-2 max-h-64 overflow-y-auto\">\n {events.map((e, i) => (\n <div\n key={e.id ?? i}\n data-testid=\"task-detail-event-row\"\n className=\"flex items-start gap-2 text-xs\"\n >\n <span\n aria-hidden\n className={`mt-1.5 w-1.5 h-1.5 rounded-full shrink-0 ${\n e.to_status === 'running'\n ? 'bg-green-400'\n : e.to_status === 'replied'\n ? 'bg-purple-400'\n : e.to_status === 'failed'\n ? 'bg-red-400'\n : 'bg-blue-400'\n }`}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <span data-testid=\"task-event-label\" className=\"text-gray-300 font-medium truncate\">\n {taskEventLabel(e)}\n </span>\n {e.from_status && (\n <span className=\"text-gray-600 shrink-0\">\n {e.from_status} → {e.to_status}\n </span>\n )}\n {e.actor && (\n <span data-testid=\"task-event-actor\" className=\"text-gray-500 truncate\">\n by {e.actor}\n </span>\n )}\n </div>\n {e.detail && (\n <div data-testid=\"task-event-detail\" className=\"mt-0.5 text-[11px] text-gray-500 break-words\">\n {e.detail}\n </div>\n )}\n {isDeliveryStaleObservation(e) && (\n <div data-testid=\"task-event-stale-context\" className=\"mt-0.5 text-[10px] text-amber-500/80 break-words\">\n Informational delivery observation; tasks that do not require a reply may also appear here.\n </div>\n )}\n </div>\n <span className=\"text-gray-600 ml-auto shrink-0\" title={e.created_at}>\n {timeAgo(e.created_at)}\n </span>\n </div>\n ))}\n </div>\n )}\n </section>\n\n {(task.status === 'failed' || task.status === 'expired') && (\n <div>\n <button\n onClick={doRetry}\n disabled={retrying}\n data-testid=\"task-detail-retry\"\n className=\"text-xs text-orange-400 hover:text-orange-300 px-3 py-1.5 rounded-md border border-orange-500/30 hover:bg-orange-500/10 disabled:opacity-50 disabled:cursor-wait\"\n >\n {retrying ? 'Retrying…' : 'Retry task'}\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n}\n"],"names":["timeAgo","dateStr","v","replace","TaskList","tasks","selectedId","onSelect","className","length","map","t","active","task_id","type","onClick","style","backgroundColor","status","priority","created_at","from_name","alias","size","to_name","title","content"],"mappings":"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"}
@@ -47,6 +47,10 @@
47
47
  {
48
48
  "regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?\\/admin(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
49
49
  "originalSource": "/admin"
50
+ },
51
+ {
52
+ "regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?\\/scheduled-tasks(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
53
+ "originalSource": "/scheduled-tasks"
50
54
  }
51
55
  ]
52
56
  }
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
7
7
  "static/chunks/0cz1d0mv5g_q7.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/trj9RsCWuEDMfq9BuoKfl/_buildManifest.js",
11
- "static/trj9RsCWuEDMfq9BuoKfl/_ssgManifest.js",
12
- "static/trj9RsCWuEDMfq9BuoKfl/_clientMiddlewareManifest.js"
10
+ "static/FEaCQpBc05SBAWTBHRt5h/_buildManifest.js",
11
+ "static/FEaCQpBc05SBAWTBHRt5h/_ssgManifest.js",
12
+ "static/FEaCQpBc05SBAWTBHRt5h/_clientMiddlewareManifest.js"
13
13
  ],
14
14
  "rootMainFiles": [
15
15
  "static/chunks/0az8vxg2gfuhm.js",
@@ -1 +1 @@
1
- {"version":1,"files":["../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../node_modules/@swc/helpers/package.json","../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../node_modules/next/dist/client/components/hooks-server-context.js","../../node_modules/next/dist/client/components/static-generation-bailout.js","../../node_modules/next/dist/client/lib/console.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../node_modules/next/dist/compiled/source-map/package.json","../../node_modules/next/dist/compiled/source-map/source-map.js","../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../node_modules/next/dist/compiled/ws/index.js","../../node_modules/next/dist/compiled/ws/package.json","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/framework/boundary-constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/picocolors.js","../../node_modules/next/dist/lib/scheduler.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/staged-rendering.js","../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/parse-stack.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/source-maps.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/node-environment-baseline.js","../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../node_modules/next/dist/server/node-environment-extensions/date.js","../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../node_modules/next/dist/server/node-environment-extensions/random.js","../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../node_modules/next/dist/server/node-environment.js","../../node_modules/next/dist/server/node-polyfill-crypto.js","../../node_modules/next/dist/server/patch-error-inspect.js","../../node_modules/next/dist/server/require-hook.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/server/runtime-reacts.external.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/instant-messages.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/package.json","../../node_modules/react/cjs/react.development.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react/package.json","./chunks/[externals]__1lootg5._.js","./chunks/[root-of-the-server]__0liwkmx._.js","./chunks/[turbopack]_runtime.js"],"fileHashes":["ef6ac6914a3f24c9f4a98105a3bdd310","6938dfa94ea915631fcac8c256bc3d9c","a5446fb306fcfec27c39f81de38ec842","9c53694dd40423680deefb5a1e3c25af","57ca86e5858543e1466b92725355539a","11eb668649d2434d25d26977b8e01e49","02186196a2cc227a67f668f00873f72a","fa8a4dd27dcbde144881044b2fa74f64","cd28bbc5151decba058dfd44bd7f47ef","a8da0851d005c95af6d4ff8b8db146ce","a12706461ab33eb687c93ba317f11ce4","61445cc4a73d56b154f397d2e4213b60","4e6491a35b1970e74a940d26e575216a","0bcd39f6f5be09dab16374e3bf84459e","ce87d6acf7ef1610862d34a9c59528ea","d1e9d6e75ad3a9d63cc0825ec4ebe282","b81183ad70cf2df4130a6f7853eff593","edcceea1e2a5c13a14d12f4d422f733a","92d7eec9f49250bf6325e1b4186fb521","0b3ab74e31e82ffa9b20013ed883782e","15ad04875f6d43fc8bd602b20d828566","5fe712e91d39531cd872b189115c7a25","c07db8edca1ca7e626b14dbf4e3584a8","0aa24beea9e1b8ae34954feb1be5caa6","f9295c2e844d919b0be75fffe2e10989","9b1c71085acfacbddbca5126bca3f550","6505c89743b18298e0e22489f1d956ed","8f2d8843ff7d322ecc237601ab58e1d7","d90d4f1de46d810d671d85f21ec5d352","2eecc48be406b9c64276e31215c29e95","981807b2548ffbff8d9ad94a758813fb","9f6a333435676ba7b0045e6b0d2d9b98","2701737ab664a8fe7700053638aa0db8","33916079c6a49d35edf38970b6afa990","6978bf3fb2c443a8c9022d43a243c56a","8fb4ea2a1e97dc7ad2cbbf5641b1aa23","7175e4648ef6975b79e76f0f46dc69df","7a4c4e16ecb22ffb0ba224fa37e94a70","848334e0b7acedfd5656296df4adae7c","0a201256d245b3a0e27ed288b6ba68ae","498fc15d07579c19b3cc959a96eb5bb8","40c6916156cc44db5f0c8e266c9f1e60","1acc3875adfbadf8dd6721e71e776ecd","1eb18df669f40e7a0c8e077b365c907d","08cab8a9c8062eac4f6b9cbcc303417a","bef9750470e394d3052dfe5a7847e9a0","4d1a01dfd6b6423b2d0ff0467f613bd8","7cfcc764f9b49f84e568c2a8b481ef89","ecbf1e0ab3ad74e5979ab5771d710880","59f473418a3a0c96c8ec855aa72bd02a","d3c2a37fdf66b455a0ed47d33fc12229","215309237f9a05ec8f52edadcd0565bf","5f3e641690915ca863053b107ae0493a","44cca5b4413d63e3179289d31fe1bcf1","ce930365528e6b0f94d346e8a3a6c976","85ef440bb2c4d6dcc19f40e9d77059e3","b73d42aa8f40f578ac38efd8516ad8a3","fc4f7117734aa11e26028c3a1f0e9934","4b5216f48144eab06a89f40a112df0f9","7f7c41d2d2c4e4ea0359ce7e30c4676d","a52c1bfa60cdd122eb82001cf748b39b","4daf2c54f6e769ac3f1c55e2d2356e62","67530655ee6d2037c694d851f60a4d3a","72e15054e5bb83aa2714e9aa0f2a8aaa","72944fa2cce5836dad49dfd7147626d0","3c5c716d6aebf4093db91e57fe322e0c","64c0567172a45f553110cf14514d76dc","f5232a6a89b9b1646513f6f36cfd6edc","ed734e4322f6faf639acccc2130bd1f9","3a55a78645b57706246de6914d4ce134","438a096196cbf3f40712fc244347eced","59be47cbf4cb15affb56354159123835","e124239b7fff31a73bfc3e95cfc593d3","38636bd694da4120897a2a695111039c","03f54ee64db45e6ac7025c881590f862","48538028ed97d91e767563f56035e684","217152373b3f900ae15ce0920bb06da9","6dadc2917fc514e7e4c6f4cabe7d69a6","a81a01b4510a203a8811e202d3537fe8","37ac4cbd6b18d52a47105218c3573c36","5ab4d38c634c37598fc59a79eeef302f","e2a4479a35cb46058fa5fa4148e39287","5654b3d7d7805129b98db879f3bbd2af","deef54fb4c402325da2038fd78856071","5207261de16ca76006c0e44c58a1628f","8a53755ebb136efdb940bfd9dc8bbec2","e00a5d832179933262efab3ca8e9bb83","bd95af69943c6b10d72a1520da203070","41d3d5995c60604ab07d47ae122d1262","4e94bc49cec3c621b7fb86dcc70de8f6","34725d21ceba6c7bd3a85f3e761e7f6a","9aaaa4f59fa0fcca3134ae0f5f0aec4d"],"entryHash":"e42a77284c80ddb6932f08dad286ae4e"}
1
+ {"version":1,"files":["../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../node_modules/@swc/helpers/package.json","../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../node_modules/next/dist/client/components/hooks-server-context.js","../../node_modules/next/dist/client/components/static-generation-bailout.js","../../node_modules/next/dist/client/lib/console.js","../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../node_modules/next/dist/compiled/source-map/package.json","../../node_modules/next/dist/compiled/source-map/source-map.js","../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../node_modules/next/dist/compiled/ws/index.js","../../node_modules/next/dist/compiled/ws/package.json","../../node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/next/dist/lib/constants.js","../../node_modules/next/dist/lib/framework/boundary-constants.js","../../node_modules/next/dist/lib/interop-default.js","../../node_modules/next/dist/lib/is-error.js","../../node_modules/next/dist/lib/picocolors.js","../../node_modules/next/dist/lib/scheduler.js","../../node_modules/next/dist/lib/semver-noop.js","../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/next/dist/server/app-render/staged-rendering.js","../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/next/dist/server/lib/parse-stack.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/next/dist/server/lib/source-maps.js","../../node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/next/dist/server/load-manifest.external.js","../../node_modules/next/dist/server/node-environment-baseline.js","../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../node_modules/next/dist/server/node-environment-extensions/date.js","../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../node_modules/next/dist/server/node-environment-extensions/random.js","../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../node_modules/next/dist/server/node-environment.js","../../node_modules/next/dist/server/node-polyfill-crypto.js","../../node_modules/next/dist/server/patch-error-inspect.js","../../node_modules/next/dist/server/require-hook.js","../../node_modules/next/dist/server/response-cache/types.js","../../node_modules/next/dist/server/runtime-reacts.external.js","../../node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/next/dist/shared/lib/instant-messages.js","../../node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/next/package.json","../../node_modules/react/cjs/react.development.js","../../node_modules/react/cjs/react.production.js","../../node_modules/react/index.js","../../node_modules/react/package.json","./chunks/[externals]__1lootg5._.js","./chunks/[root-of-the-server]__0liwkmx._.js","./chunks/[turbopack]_runtime.js"],"fileHashes":["ef6ac6914a3f24c9f4a98105a3bdd310","6938dfa94ea915631fcac8c256bc3d9c","a5446fb306fcfec27c39f81de38ec842","9c53694dd40423680deefb5a1e3c25af","57ca86e5858543e1466b92725355539a","11eb668649d2434d25d26977b8e01e49","02186196a2cc227a67f668f00873f72a","fa8a4dd27dcbde144881044b2fa74f64","cd28bbc5151decba058dfd44bd7f47ef","a8da0851d005c95af6d4ff8b8db146ce","a12706461ab33eb687c93ba317f11ce4","61445cc4a73d56b154f397d2e4213b60","4e6491a35b1970e74a940d26e575216a","0bcd39f6f5be09dab16374e3bf84459e","ce87d6acf7ef1610862d34a9c59528ea","d1e9d6e75ad3a9d63cc0825ec4ebe282","b81183ad70cf2df4130a6f7853eff593","edcceea1e2a5c13a14d12f4d422f733a","92d7eec9f49250bf6325e1b4186fb521","0b3ab74e31e82ffa9b20013ed883782e","15ad04875f6d43fc8bd602b20d828566","5fe712e91d39531cd872b189115c7a25","c07db8edca1ca7e626b14dbf4e3584a8","0aa24beea9e1b8ae34954feb1be5caa6","f9295c2e844d919b0be75fffe2e10989","9b1c71085acfacbddbca5126bca3f550","6505c89743b18298e0e22489f1d956ed","8f2d8843ff7d322ecc237601ab58e1d7","d90d4f1de46d810d671d85f21ec5d352","2eecc48be406b9c64276e31215c29e95","981807b2548ffbff8d9ad94a758813fb","9f6a333435676ba7b0045e6b0d2d9b98","2701737ab664a8fe7700053638aa0db8","33916079c6a49d35edf38970b6afa990","6978bf3fb2c443a8c9022d43a243c56a","8fb4ea2a1e97dc7ad2cbbf5641b1aa23","7175e4648ef6975b79e76f0f46dc69df","7a4c4e16ecb22ffb0ba224fa37e94a70","848334e0b7acedfd5656296df4adae7c","0a201256d245b3a0e27ed288b6ba68ae","498fc15d07579c19b3cc959a96eb5bb8","40c6916156cc44db5f0c8e266c9f1e60","1acc3875adfbadf8dd6721e71e776ecd","1eb18df669f40e7a0c8e077b365c907d","08cab8a9c8062eac4f6b9cbcc303417a","bef9750470e394d3052dfe5a7847e9a0","4d1a01dfd6b6423b2d0ff0467f613bd8","7cfcc764f9b49f84e568c2a8b481ef89","ecbf1e0ab3ad74e5979ab5771d710880","59f473418a3a0c96c8ec855aa72bd02a","d3c2a37fdf66b455a0ed47d33fc12229","215309237f9a05ec8f52edadcd0565bf","5f3e641690915ca863053b107ae0493a","44cca5b4413d63e3179289d31fe1bcf1","ce930365528e6b0f94d346e8a3a6c976","85ef440bb2c4d6dcc19f40e9d77059e3","b73d42aa8f40f578ac38efd8516ad8a3","fc4f7117734aa11e26028c3a1f0e9934","4b5216f48144eab06a89f40a112df0f9","7f7c41d2d2c4e4ea0359ce7e30c4676d","a52c1bfa60cdd122eb82001cf748b39b","4daf2c54f6e769ac3f1c55e2d2356e62","67530655ee6d2037c694d851f60a4d3a","72e15054e5bb83aa2714e9aa0f2a8aaa","72944fa2cce5836dad49dfd7147626d0","3c5c716d6aebf4093db91e57fe322e0c","64c0567172a45f553110cf14514d76dc","f5232a6a89b9b1646513f6f36cfd6edc","ed734e4322f6faf639acccc2130bd1f9","3a55a78645b57706246de6914d4ce134","438a096196cbf3f40712fc244347eced","59be47cbf4cb15affb56354159123835","e124239b7fff31a73bfc3e95cfc593d3","38636bd694da4120897a2a695111039c","03f54ee64db45e6ac7025c881590f862","48538028ed97d91e767563f56035e684","217152373b3f900ae15ce0920bb06da9","6dadc2917fc514e7e4c6f4cabe7d69a6","a81a01b4510a203a8811e202d3537fe8","37ac4cbd6b18d52a47105218c3573c36","5ab4d38c634c37598fc59a79eeef302f","e2a4479a35cb46058fa5fa4148e39287","5654b3d7d7805129b98db879f3bbd2af","deef54fb4c402325da2038fd78856071","5207261de16ca76006c0e44c58a1628f","8a53755ebb136efdb940bfd9dc8bbec2","e00a5d832179933262efab3ca8e9bb83","bd95af69943c6b10d72a1520da203070","41d3d5995c60604ab07d47ae122d1262","4e94bc49cec3c621b7fb86dcc70de8f6","2e89212a9dd01e893acb29da9ce67b4c","9aaaa4f59fa0fcca3134ae0f5f0aec4d"],"entryHash":"e42a77284c80ddb6932f08dad286ae4e"}
@@ -1 +1 @@
1
- self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/app/_not-found/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/admin/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/login/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/logs/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/messages/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/node/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/nodes/[alias]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/nodes/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/providers/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/scheduled-tasks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/server-logs/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/servers/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/networks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/tokens/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/skillhub/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/tasks/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/tasks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}"
1
+ self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/app/_not-found/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/admin/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/login/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/logs/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/messages/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/node/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/nodes/[alias]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/nodes/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/org/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/providers/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/requirements/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/requirements/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/scheduled-tasks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/server-logs/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/servers/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/networks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/settings/tokens/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/skillhub/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/tasks/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ],\n \"[project]/app/tasks/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2\",\n \"static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}"
@@ -32,6 +32,10 @@
32
32
  "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
33
33
  "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
34
34
  ],
35
+ "[project]/app/org/page": [
36
+ "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
37
+ "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
38
+ ],
35
39
  "[project]/app/page": [
36
40
  "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
37
41
  "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
@@ -40,6 +44,14 @@
40
44
  "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
41
45
  "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
42
46
  ],
47
+ "[project]/app/requirements/[id]/page": [
48
+ "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
49
+ "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
50
+ ],
51
+ "[project]/app/requirements/page": [
52
+ "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
53
+ "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"
54
+ ],
43
55
  "[project]/app/scheduled-tasks/page": [
44
56
  "static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2",
45
57
  "static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2"