@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
@@ -0,0 +1,299 @@
1
+ 'use client';
2
+
3
+ import { useCallback, useEffect, useMemo, useState, Suspense } from 'react';
4
+ import Link from 'next/link';
5
+ import { useRouter, useSearchParams } from 'next/navigation';
6
+ import { EmptyState } from '../components/EmptyState';
7
+
8
+ /**
9
+ * Requirements board — #1633 (read-only first slice).
10
+ *
11
+ * Why this page exists: the dashboard only ever showed dispatch tasks
12
+ * (/tasks = who asked whom). The requirement board — 需求池 / 进行中 /
13
+ * 完成, tags, owner vs agent owner, checklist progress — is what people
14
+ * actually work from in the client. This is the read half; the write half
15
+ * is #1634.
16
+ */
17
+
18
+ interface RequirementPerson { kind: 'user' | 'node'; id: string; alias?: string }
19
+ interface Requirement {
20
+ id: string;
21
+ seq: number;
22
+ name: string;
23
+ column: 'pool' | 'doing' | 'done' | 'abandoned';
24
+ priority: 'high' | 'normal' | 'low' | 'lowest';
25
+ due?: string;
26
+ tags?: string[];
27
+ owner?: RequirementPerson | null;
28
+ agent_owner?: RequirementPerson | null;
29
+ project_id?: string | null;
30
+ checklist_count?: { total: number; done: number };
31
+ children?: { total: number; done: number };
32
+ updatedAt?: string;
33
+ has_description?: boolean;
34
+ }
35
+
36
+ const COLUMNS: { key: Requirement['column'] | ''; label: string }[] = [
37
+ { key: '', label: 'All' },
38
+ { key: 'pool', label: '需求池' },
39
+ { key: 'doing', label: '进行中' },
40
+ { key: 'done', label: '完成' },
41
+ { key: 'abandoned', label: '已放弃' },
42
+ ];
43
+
44
+ const COLUMN_CHIP: Record<string, string> = {
45
+ pool: 'bg-amber-500/10 text-amber-300 border-amber-500/20',
46
+ doing: 'bg-blue-500/10 text-blue-300 border-blue-500/20',
47
+ done: 'bg-emerald-500/10 text-emerald-300 border-emerald-500/20',
48
+ abandoned: 'bg-gray-500/10 text-gray-400 border-gray-500/20',
49
+ };
50
+
51
+ function priorityClass(priority: string) {
52
+ if (priority === 'high') return 'text-red-400';
53
+ if (priority === 'low' || priority === 'lowest') return 'text-gray-600';
54
+ return 'text-gray-400';
55
+ }
56
+
57
+ function personLabel(p?: RequirementPerson | null) {
58
+ if (!p) return '—';
59
+ return p.alias || p.id;
60
+ }
61
+
62
+ function dueLabel(due?: string) {
63
+ if (!due) return '—';
64
+ const day = due.slice(0, 10);
65
+ const overdue = day < new Date().toISOString().slice(0, 10);
66
+ return overdue ? <span className="text-red-400">{day}</span> : <span className="text-gray-400">{day}</span>;
67
+ }
68
+
69
+ function RequirementsContent() {
70
+ const router = useRouter();
71
+ const searchParams = useSearchParams();
72
+
73
+ const [rows, setRows] = useState<Requirement[]>([]);
74
+ const [loading, setLoading] = useState(true);
75
+ const [error, setError] = useState('');
76
+ const [needsLogin, setNeedsLogin] = useState(false);
77
+ // #1633 follow-up: the list used to hard-stop at 200 rows with has_more ignored.
78
+ const [cursor, setCursor] = useState<string | null>(null);
79
+ const [hasMore, setHasMore] = useState(false);
80
+
81
+ const status = searchParams.get('status') || '';
82
+ const tag = searchParams.get('tag') || '';
83
+ const q = searchParams.get('q') || '';
84
+ const [tagInput, setTagInput] = useState(tag);
85
+ const [qInput, setQInput] = useState(q);
86
+
87
+ const setParam = useCallback((patch: Record<string, string>) => {
88
+ const next = new URLSearchParams(searchParams.toString());
89
+ for (const [key, value] of Object.entries(patch)) {
90
+ if (value) next.set(key, value);
91
+ else next.delete(key);
92
+ }
93
+ const qs = next.toString();
94
+ router.replace(qs ? `/requirements?${qs}` : '/requirements', { scroll: false });
95
+ }, [router, searchParams]);
96
+
97
+ const load = useCallback(async (opts: { cursor?: string | null; append?: boolean } = {}) => {
98
+ const nextCursor = opts.cursor ?? null;
99
+ const append = opts.append === true;
100
+ setLoading(true);
101
+ setError('');
102
+ try {
103
+ const params = new URLSearchParams();
104
+ if (status) params.set('status', status);
105
+ if (tag) params.set('tag', tag);
106
+ if (q) params.set('q', q);
107
+ params.set('limit', '200');
108
+ if (nextCursor) params.set('cursor', nextCursor);
109
+ const res = await fetch(`/api/hub/requirements?${params.toString()}`, { cache: 'no-store' });
110
+ if (res.status === 401) { setNeedsLogin(true); if (!append) setRows([]); return; }
111
+ const data = await res.json();
112
+ if (!res.ok || !data.ok) {
113
+ setError(data?.error || `hub_${res.status}`);
114
+ if (!append) setRows([]);
115
+ return;
116
+ }
117
+ setNeedsLogin(false);
118
+ const incoming = (data.requirements || []) as Requirement[];
119
+ setRows(prev => (append ? [...prev, ...incoming] : incoming));
120
+ setCursor(typeof data.next_cursor === 'string' ? data.next_cursor : null);
121
+ setHasMore(data.has_more === true && typeof data.next_cursor === 'string');
122
+ } catch (e: unknown) {
123
+ setError(e instanceof Error ? e.message : 'fetch failed');
124
+ if (!append) setRows([]);
125
+ } finally {
126
+ setLoading(false);
127
+ }
128
+ }, [status, tag, q]);
129
+
130
+ useEffect(() => { load(); }, [load]);
131
+
132
+ const counts = useMemo(() => {
133
+ const out: Record<string, number> = {};
134
+ for (const r of rows) out[r.column] = (out[r.column] || 0) + 1;
135
+ return out;
136
+ }, [rows]);
137
+
138
+ return (
139
+ <div className="min-h-screen bg-[var(--bg)] text-gray-200">
140
+ <div className="mx-auto max-w-6xl px-4 py-6 sm:px-6">
141
+ <div className="mb-5 flex flex-wrap items-end justify-between gap-3">
142
+ <div>
143
+ <h1 className="text-lg font-semibold text-white">Requirements</h1>
144
+ <p className="mt-1 text-xs text-gray-500">
145
+ 需求池 / 进行中 / 完成 —— 只读视图(写面见 #1634)。任务派单在 <Link href="/tasks" className="text-blue-400 hover:underline">Tasks</Link>。
146
+ </p>
147
+ </div>
148
+ <button
149
+ type="button"
150
+ onClick={() => load()}
151
+ className="rounded-lg border border-[var(--border)] px-3 py-1.5 text-xs text-gray-400 hover:text-gray-200"
152
+ >
153
+ Refresh
154
+ </button>
155
+ </div>
156
+
157
+ {/* Status tabs */}
158
+ <div className="mb-4 flex flex-wrap items-center gap-1.5">
159
+ {COLUMNS.map(col => {
160
+ const count = col.key ? counts[col.key] || 0 : rows.length;
161
+ const active = status === col.key;
162
+ return (
163
+ <button
164
+ key={col.key || 'all'}
165
+ type="button"
166
+ onClick={() => setParam({ status: col.key })}
167
+ className={`rounded-md border px-3 py-1.5 text-xs transition-colors ${
168
+ active
169
+ ? 'border-blue-500/30 bg-blue-500/10 text-blue-300'
170
+ : 'border-transparent text-gray-500 hover:bg-[var(--border)]/60 hover:text-gray-300'
171
+ }`}
172
+ >
173
+ {col.label}
174
+ <span className="ml-1.5 text-[10px] tabular-nums opacity-70">{count}</span>
175
+ </button>
176
+ );
177
+ })}
178
+ </div>
179
+
180
+ {/* Text filters */}
181
+ <div className="mb-4 flex flex-wrap items-center gap-2">
182
+ <div className="flex items-center gap-1.5 rounded-lg border border-[var(--border)] bg-[var(--bg-secondary)] px-2.5 py-1.5 focus-within:border-blue-500/40">
183
+ <span className="text-[10px] uppercase tracking-wide text-gray-600">Search</span>
184
+ <input
185
+ value={qInput}
186
+ onChange={e => setQInput(e.target.value)}
187
+ onKeyDown={e => { if (e.key === 'Enter') setParam({ q: qInput }); }}
188
+ onBlur={() => { if (qInput !== q) setParam({ q: qInput }); }}
189
+ placeholder="标题 / 人 / 标签"
190
+ className="w-40 bg-transparent text-sm text-white placeholder-gray-700 focus:outline-none sm:w-56"
191
+ />
192
+ </div>
193
+ <div className="flex items-center gap-1.5 rounded-lg border border-[var(--border)] bg-[var(--bg-secondary)] px-2.5 py-1.5 focus-within:border-blue-500/40">
194
+ <span className="text-[10px] uppercase tracking-wide text-gray-600">Tag</span>
195
+ <input
196
+ value={tagInput}
197
+ onChange={e => setTagInput(e.target.value)}
198
+ onKeyDown={e => { if (e.key === 'Enter') setParam({ tag: tagInput }); }}
199
+ onBlur={() => { if (tagInput !== tag) setParam({ tag: tagInput }); }}
200
+ placeholder="exact tag"
201
+ className="w-28 bg-transparent text-sm text-white placeholder-gray-700 focus:outline-none"
202
+ />
203
+ </div>
204
+ {(status || tag || q) && (
205
+ <button
206
+ type="button"
207
+ onClick={() => { setTagInput(''); setQInput(''); setParam({ status: '', tag: '', q: '' }); }}
208
+ className="rounded-lg border border-gray-700 px-2.5 py-1.5 text-[11px] text-gray-500 hover:border-gray-600 hover:text-gray-200"
209
+ >
210
+ Clear filters
211
+ </button>
212
+ )}
213
+ </div>
214
+
215
+ {needsLogin && (
216
+ <div className="mb-4 rounded-lg border border-amber-500/20 bg-amber-500/5 px-4 py-3 text-sm text-amber-300">
217
+ 会话已过期,<Link href="/login" className="underline">重新登录</Link> 后再看需求。
218
+ </div>
219
+ )}
220
+ {error && !needsLogin && (
221
+ <div className="mb-4 rounded-lg border border-red-500/20 bg-red-500/5 px-4 py-3 text-sm text-red-300">
222
+ 读取失败:{error}
223
+ <button type="button" onClick={() => load()} className="ml-3 underline">重试</button>
224
+ </div>
225
+ )}
226
+
227
+ {loading ? (
228
+ <div className="space-y-2">
229
+ {Array.from({ length: 8 }).map((_, i) => (
230
+ <div key={i} className="h-12 animate-pulse rounded-lg border border-[var(--border)] bg-[var(--bg-secondary)]" />
231
+ ))}
232
+ </div>
233
+ ) : rows.length === 0 ? (
234
+ <EmptyState
235
+ variant="generic"
236
+ title={status || tag || q ? '没有符合筛选的需求' : '需求池是空的'}
237
+ sub={status || tag || q ? '清掉筛选再试,或换一个标签。' : '客户端建一条需求后,这里就会出现。'}
238
+ cta={status || tag || q ? { label: '清空筛选', onClick: () => setParam({ status: '', tag: '', q: '' }) } : undefined}
239
+ />
240
+ ) : (
241
+ <ul className="divide-y divide-[var(--border)] overflow-hidden rounded-xl border border-[var(--border)] bg-[var(--bg-secondary)]">
242
+ {rows.map(row => {
243
+ const chk = row.checklist_count;
244
+ const kids = row.children;
245
+ return (
246
+ <li key={row.id} className="hover:bg-[var(--bg-secondary)]/60">
247
+ <Link href={`/requirements/${row.id}`} className="flex flex-wrap items-center gap-x-3 gap-y-1.5 px-3 py-2.5 sm:px-4">
248
+ <span className="w-12 shrink-0 text-[11px] tabular-nums text-gray-600">#{row.seq}</span>
249
+ <span className={`shrink-0 rounded border px-1.5 py-0.5 text-[10px] ${COLUMN_CHIP[row.column] || COLUMN_CHIP.abandoned}`}>
250
+ {row.column}
251
+ </span>
252
+ <span className="min-w-0 flex-1 truncate text-sm text-gray-100">{row.name}</span>
253
+ {(row.tags || []).slice(0, 3).map(t => (
254
+ <span key={t} className="hidden shrink-0 rounded bg-[var(--bg-elevated)] px-1.5 py-0.5 text-[10px] text-gray-400 sm:inline">
255
+ {t}
256
+ </span>
257
+ ))}
258
+ <span className={`shrink-0 text-[11px] ${priorityClass(row.priority)}`}>{row.priority}</span>
259
+ <span className="hidden w-24 shrink-0 truncate text-[11px] text-gray-500 sm:inline">{personLabel(row.agent_owner)}</span>
260
+ <span className="w-20 shrink-0 text-right text-[11px]">{dueLabel(row.due)}</span>
261
+ {chk && chk.total > 0 && (
262
+ <span className="hidden shrink-0 text-[10px] tabular-nums text-gray-500 sm:inline">
263
+ ✓ {chk.done}/{chk.total}
264
+ </span>
265
+ )}
266
+ {kids && kids.total > 0 && (
267
+ <span className="hidden shrink-0 text-[10px] tabular-nums text-gray-500 md:inline">
268
+ ↳ {kids.done}/{kids.total}
269
+ </span>
270
+ )}
271
+ </Link>
272
+ </li>
273
+ );
274
+ })}
275
+ </ul>
276
+ )}
277
+
278
+ {hasMore && (
279
+ <button
280
+ type="button"
281
+ disabled={loading}
282
+ onClick={() => load({ cursor, append: true })}
283
+ className="mx-auto mt-4 block rounded-lg border border-[var(--border)] px-4 py-2 text-xs text-gray-400 hover:text-gray-200 disabled:opacity-50"
284
+ >
285
+ {loading ? '加载中…' : '加载更多'}
286
+ </button>
287
+ )}
288
+ </div>
289
+ </div>
290
+ );
291
+ }
292
+
293
+ export default function RequirementsPage() {
294
+ return (
295
+ <Suspense fallback={<div className="min-h-screen bg-[var(--bg)]" />}>
296
+ <RequirementsContent />
297
+ </Suspense>
298
+ );
299
+ }
@@ -3,8 +3,9 @@
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { useNetworkId } from '../lib/network-context';
5
5
  import { pinyinMatch, usePinyinReady } from '../lib/pinyin-match';
6
+ import { isHubTimeStale, relativeAgo } from '../lib/time';
6
7
 
7
- type NodeRow = { node_id: string; alias?: string | null; node_name?: string | null; lifecycle_state?: string | null };
8
+ type NodeRow = { node_id: string; alias?: string | null; node_name?: string | null; lifecycle_state?: string | null; updated_at?: string | null };
8
9
 
9
10
  const nodeLabel = (n: NodeRow) => `${n.alias} · ${n.node_id.slice(0, 12)}`;
10
11
 
@@ -49,6 +50,15 @@ function NodePicker({ nodes, value, onChange }: {
49
50
  };
50
51
  }, [open]);
51
52
 
53
+ // 陈旧的排到后面。原因见 app/lib/time.ts 的 NODE_STALE_MS 注释:
54
+ // 生产上约三分之二的条目是几个月前的死会话,而 lifecycle_state 全是 "active",
55
+ // 所以不排序的话,一屏里最先看到的往往都是幽灵。
56
+ // 只降权不隐藏 —— 给一个临时掉线的节点排任务是合法操作,藏起来会让人以为节点没了。
57
+ const ordered = useMemo(() => {
58
+ const stale = (n: NodeRow) => (isHubTimeStale(n.updated_at) ? 1 : 0);
59
+ return [...matches].sort((a, b) => stale(a) - stale(b));
60
+ }, [matches]);
61
+
52
62
  return (
53
63
  <div className="relative mt-1" ref={boxRef}>
54
64
  <input
@@ -67,7 +77,7 @@ function NodePicker({ nodes, value, onChange }: {
67
77
  >
68
78
  {matches.length === 0 ? (
69
79
  <div className="px-3 py-2 text-sm text-[var(--fg-dim)]">无匹配节点</div>
70
- ) : matches.map(n => (
80
+ ) : ordered.map(n => (
71
81
  <button
72
82
  key={n.node_id}
73
83
  type="button"
@@ -79,7 +89,23 @@ function NodePicker({ nodes, value, onChange }: {
79
89
  n.node_id === value ? 'text-[var(--hl)]' : 'text-[var(--fg)]'
80
90
  } hover:bg-[var(--hover-tint)]`}
81
91
  >
82
- {nodeLabel(n)}
92
+ <span className="flex items-baseline justify-between gap-3">
93
+ <span className={isHubTimeStale(n.updated_at) ? 'text-[var(--fg-dim)]' : ''}>
94
+ {nodeLabel(n)}
95
+ </span>
96
+ {/* 最后活动时间。这是 /api/nodes 里唯一能分辨死活的字段 ——
97
+ lifecycle_state 对三个月没动的节点同样返回 "active"(#751)。 */}
98
+ {relativeAgo(n.updated_at) && (
99
+ <span
100
+ data-testid="schedule-node-option-lastseen"
101
+ className={`shrink-0 text-xs tabular-nums ${
102
+ isHubTimeStale(n.updated_at) ? 'text-[var(--fg-dim)]' : 'text-[var(--fg)]'
103
+ }`}
104
+ >
105
+ {relativeAgo(n.updated_at)}
106
+ </span>
107
+ )}
108
+ </span>
83
109
  </button>
84
110
  ))}
85
111
  </div>
@@ -268,6 +294,11 @@ export default function ScheduledTasksPage() {
268
294
  };
269
295
 
270
296
  const mutate = async (row: ScheduleRow, action: 'toggle' | 'run' | 'cancel') => {
297
+ // Cancel goes through POST /cancel, not DELETE. Some reverse proxies
298
+ // strip or 405 DELETE, which surfaces as HTML from the proxy layer — and
299
+ // that HTML then blew up `await res.json()` with "Unexpected token <",
300
+ // hiding the actual failure from the user. See dispatch task 08342434.
301
+ if (action === 'cancel' && typeof window !== 'undefined' && !window.confirm('确定取消这个定时计划?取消后不能恢复。')) return;
271
302
  setBusy(true); setError('');
272
303
  try {
273
304
  let path = `/api/hub/scheduled-tasks/${encodeURIComponent(row.schedule_id)}${query}`;
@@ -275,10 +306,55 @@ export default function ScheduledTasksPage() {
275
306
  if (action === 'run') {
276
307
  path = `/api/hub/scheduled-tasks/${encodeURIComponent(row.schedule_id)}/run-now${query}`;
277
308
  init = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}' };
278
- } else if (action === 'cancel') init = { method: 'DELETE' };
279
- else init = { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ revision: row.revision, status: row.status === 'active' ? 'paused' : 'active' }) };
280
- const res = await fetch(path, init);
281
- const data = await res.json();
309
+ } else if (action === 'cancel') {
310
+ path = `/api/hub/scheduled-tasks/${encodeURIComponent(row.schedule_id)}/cancel${query}`;
311
+ init = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}' };
312
+ } else init = { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ revision: row.revision, status: row.status === 'active' ? 'paused' : 'active' }) };
313
+ // Parse as text first so an empty body or an HTML error page (from a
314
+ // misbehaving proxy) doesn't throw "Unexpected token <" before we ever
315
+ // look at the status code. Empty body ⇒ {}; JSON parse errors surface
316
+ // with the status + first chunk of the body so we know which layer
317
+ // returned the non-JSON.
318
+ type MutateResponse = { error?: string; message?: string; ok?: boolean };
319
+ // 🔴 变量名保持 `res` / `raw`。tests/scheduled-tasks-module.test.mjs:30 那条
320
+ // 契约检查断言的是源码里出现 `await res.text()` 和 `JSON.parse(raw)` ——
321
+ // 我第一版把它们改名成 r / body,行为完全一样,但那条检查当场转红。
322
+ // 正确的处理是改回名字,不是去放宽那条检查:它断言的东西是对的,
323
+ // 我改的只是无关的命名。
324
+ const send = async (p: string, i: RequestInit) => {
325
+ const res = await fetch(p, i);
326
+ const raw = await res.text();
327
+ let parsed: MutateResponse = {};
328
+ if (raw.trim().length > 0) {
329
+ try { parsed = JSON.parse(raw) as MutateResponse; }
330
+ catch {
331
+ if (!res.ok) throw new Error(`HTTP ${res.status}: ${raw.slice(0, 120)}`);
332
+ }
333
+ }
334
+ return { res, data: parsed };
335
+ };
336
+
337
+ let { res, data } = await send(path, init);
338
+
339
+ // 🔴 老 hub 上没有 POST /cancel,回落到 DELETE。
340
+ //
341
+ // 服务端那条 POST 路由是 2026-08-18 才进 main 的(commit 40872732
342
+ // "accept POST /cancel alongside DELETE, both idempotent")。而当天
343
+ // 已发布的两个通道都早于它:
344
+ // commhub-server@latest = 0.8.8 发布 2026-06-24
345
+ // commhub-server@preview = 0.9.0-preview.29 发布 2026-08-12
346
+ // (核过已发布产物:里面的 `/cancel` 全是注释和标识符里的子串,没有路由。)
347
+ //
348
+ // 所以只发 POST 不留兜底,会让"取消"在**今天所有已部署的 hub 上**直接坏掉。
349
+ // 回落只认 404/405(路由不存在 / 方法不允许),不认 5xx —— 5xx 说明路由在、
350
+ // 但服务端出错了,那时重试 DELETE 只会掩盖真正的失败。
351
+ //
352
+ // 两条路径都是幂等的(见上面那个 commit 的标题),所以即使 POST 其实已经
353
+ // 生效、只是因为别的原因返回了 404,再发一次 DELETE 也不会造成二次伤害。
354
+ if (action === 'cancel' && (res.status === 404 || res.status === 405)) {
355
+ const legacyPath = `/api/hub/scheduled-tasks/${encodeURIComponent(row.schedule_id)}${query}`;
356
+ ({ res, data } = await send(legacyPath, { method: 'DELETE' }));
357
+ }
282
358
  if (res.status === 409 && data.error === 'revision_conflict') {
283
359
  await load(); setError('计划已在其他设备更新,已刷新最新内容,请重试。'); return;
284
360
  }
@@ -308,7 +384,7 @@ export default function ScheduledTasksPage() {
308
384
  <h1 className="text-2xl font-bold text-[var(--fg)] lg:ml-0 ml-10">定时任务</h1>
309
385
  <p className="mt-1 text-sm text-[var(--fg-dim)]">由 Hub 统一调度;节点只接收普通任务,离线时自动排队。</p>
310
386
  </div>
311
- <button onClick={openCreate} className="rounded-lg bg-[var(--hl)] px-4 py-2 text-sm font-semibold text-[var(--bg)] hover:opacity-90">
387
+ <button type="button" onClick={openCreate} className="rounded-lg bg-[var(--hl)] px-4 py-2 text-sm font-semibold text-[var(--bg)] hover:opacity-90">
312
388
  {showForm && !editing ? '收起' : '新建计划'}
313
389
  </button>
314
390
  </div>
@@ -335,17 +411,26 @@ export default function ScheduledTasksPage() {
335
411
  </section>
336
412
  )}
337
413
 
338
- {loading ? <div className="py-20 text-center text-[var(--fg-dim)]">加载中…</div> : schedules.length === 0 ? (
339
- <div className="rounded-xl border border-dashed border-[var(--border)] py-20 text-center text-[var(--fg-dim)]">还没有 Hub 定时任务</div>
340
- ) : <div className="space-y-3">{schedules.map(row => (
414
+ {loading ? <div className="py-20 text-center text-[var(--fg-dim)]">加载中…</div> : (() => {
415
+ // Cancelled schedules are terminal — hide them from the default view.
416
+ // Server still stores history for the audit trail, but the list is
417
+ // meant for "what's on the calendar going forward", not "what ever
418
+ // existed". Users who need the paper trail can consult run history
419
+ // per schedule (record button); a dedicated show-cancelled toggle
420
+ // was out of scope for this fix.
421
+ const visible = schedules.filter(row => row.status !== 'cancelled');
422
+ return visible.length === 0 ? (
423
+ <div className="rounded-xl border border-dashed border-[var(--border)] py-20 text-center text-[var(--fg-dim)]">还没有 Hub 定时任务</div>
424
+ ) : <div className="space-y-3">{visible.map(row => (
341
425
  <section key={row.schedule_id} className="rounded-xl border border-[var(--border)] bg-[var(--bg-secondary)] p-5">
342
426
  <div className="flex flex-wrap items-start justify-between gap-4">
343
427
  <div className="min-w-0 flex-1"><div className="flex items-center gap-2"><h2 className="font-semibold text-[var(--fg)]">{row.name}</h2><span className={`rounded-full bg-[var(--hover-tint)] px-2 py-0.5 text-xs ${row.status === 'active' ? 'text-[var(--success)]' : row.status === 'paused' ? 'text-[var(--warning)]' : 'text-[var(--fg-dim)]'}`}>{row.status}</span></div><p className="mt-1 text-sm text-[var(--hl)]">{row.target_alias}</p><p className="mt-2 line-clamp-2 text-sm text-[var(--fg-muted)]">{row.task_content}</p><p className="mt-3 text-xs text-[var(--fg-dim)]">{describeSchedule(row.schedule, row.timezone)} · {describeMisfire(row.misfire_policy)} · 下次 {formatTime(row.next_run_at)} · 上次 {formatTime(row.last_run_at)}</p></div>
344
- <div className="flex flex-wrap gap-2"><button disabled={busy || !['active','paused'].includes(row.status)} onClick={() => openEdit(row)} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">编辑</button><button disabled={busy || !['active','paused'].includes(row.status)} onClick={() => mutate(row, 'toggle')} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">{row.status === 'active' ? '暂停' : '恢复'}</button><button disabled={busy || row.status === 'cancelled'} onClick={() => mutate(row, 'run')} className="rounded-md border border-[var(--hl)] px-3 py-1.5 text-xs text-[var(--hl)]">立即执行</button><button onClick={() => openHistory(row)} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">记录</button><button disabled={busy || row.status === 'cancelled'} onClick={() => mutate(row, 'cancel')} className="rounded-md border border-[var(--danger)] px-3 py-1.5 text-xs text-[var(--danger)]">取消</button></div>
428
+ <div className="flex flex-wrap gap-2"><button type="button" disabled={busy || !['active','paused'].includes(row.status)} onClick={() => openEdit(row)} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">编辑</button><button type="button" disabled={busy || !['active','paused'].includes(row.status)} onClick={() => mutate(row, 'toggle')} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">{row.status === 'active' ? '暂停' : '恢复'}</button><button type="button" disabled={busy || row.status === 'cancelled'} onClick={() => mutate(row, 'run')} className="rounded-md border border-[var(--hl)] px-3 py-1.5 text-xs text-[var(--hl)]">立即执行</button><button type="button" onClick={() => openHistory(row)} className="rounded-md border border-[var(--border)] px-3 py-1.5 text-xs text-[var(--fg-muted)]">记录</button><button type="button" disabled={busy || row.status === 'cancelled'} onClick={() => mutate(row, 'cancel')} className="rounded-md border border-[var(--danger)] px-3 py-1.5 text-xs text-[var(--danger)]">取消</button></div>
345
429
  </div>
346
430
  {historyFor === row.schedule_id && <div className="mt-4 overflow-x-auto border-t border-[var(--border)] pt-4"><table className="w-full text-left text-xs"><thead className="text-[var(--fg-dim)]"><tr><th className="pb-2">计划时间</th><th>状态</th><th>Task ID</th><th>错误</th></tr></thead><tbody>{runs.map(run => <tr key={run.run_id} className="border-t border-[var(--col-hairline)] text-[var(--fg-muted)]"><td className="py-2">{formatTime(run.scheduled_for)}</td><td>{run.status}</td><td className="font-mono">{run.task_id?.slice(0, 12) || '—'}</td><td className="text-[var(--danger)]">{run.error_code || '—'}</td></tr>)}</tbody></table>{runs.length === 0 && <p className="text-[var(--fg-dim)]">暂无执行记录</p>}</div>}
347
431
  </section>
348
- ))}</div>}
432
+ ))}</div>;
433
+ })()}
349
434
  </main>
350
435
  );
351
436
  }
Binary file