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

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 +145 -95
  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 → _HZB6K84VKNaxf1K7dqqj}/_clientMiddlewareManifest.js +4 -0
  319. package/.next/static/chunks/{27b9kqyo7bmdr.js → 08-obrj2goweb.js} +2 -2
  320. package/.next/static/chunks/{0agh8mvmpke4j.js → 0cuzbmf4k1kgl.js} +1 -1
  321. package/.next/static/chunks/0fih4pzed1syn.js +9 -0
  322. package/.next/static/chunks/0iiu4-g5k8jcq.js +1 -0
  323. package/.next/static/chunks/{37booeyruo9_l.js → 0iz44n632kw4w.js} +1 -1
  324. package/.next/static/chunks/0jt-1caejz1jv.js +1 -0
  325. package/.next/static/chunks/0k-4980o5t7_r.css +1 -0
  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 → 21djd6ixldlx0.js} +1 -1
  331. package/.next/static/chunks/2anlzel60my8y.js +2 -0
  332. package/.next/static/chunks/{3jxk7q1jxyvol.js → 2juzvtg9ne4yt.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/3shtxab8cmux9.js +1 -0
  336. package/.next/static/chunks/3u059pjgl4gcw.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 +279 -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 → _HZB6K84VKNaxf1K7dqqj}/_buildManifest.js +0 -0
  718. /package/.next/static/{trj9RsCWuEDMfq9BuoKfl → _HZB6K84VKNaxf1K7dqqj}/_ssgManifest.js +0 -0
@@ -0,0 +1,279 @@
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
+
78
+ const status = searchParams.get('status') || '';
79
+ const tag = searchParams.get('tag') || '';
80
+ const q = searchParams.get('q') || '';
81
+ const [tagInput, setTagInput] = useState(tag);
82
+ const [qInput, setQInput] = useState(q);
83
+
84
+ const setParam = useCallback((patch: Record<string, string>) => {
85
+ const next = new URLSearchParams(searchParams.toString());
86
+ for (const [key, value] of Object.entries(patch)) {
87
+ if (value) next.set(key, value);
88
+ else next.delete(key);
89
+ }
90
+ const qs = next.toString();
91
+ router.replace(qs ? `/requirements?${qs}` : '/requirements', { scroll: false });
92
+ }, [router, searchParams]);
93
+
94
+ const load = useCallback(async () => {
95
+ setLoading(true);
96
+ setError('');
97
+ try {
98
+ const params = new URLSearchParams();
99
+ if (status) params.set('status', status);
100
+ if (tag) params.set('tag', tag);
101
+ if (q) params.set('q', q);
102
+ params.set('limit', '200');
103
+ const res = await fetch(`/api/hub/requirements?${params.toString()}`, { cache: 'no-store' });
104
+ if (res.status === 401) { setNeedsLogin(true); setRows([]); return; }
105
+ const data = await res.json();
106
+ if (!res.ok || !data.ok) {
107
+ setError(data?.error || `hub_${res.status}`);
108
+ setRows([]);
109
+ return;
110
+ }
111
+ setNeedsLogin(false);
112
+ setRows(data.requirements || []);
113
+ } catch (e: unknown) {
114
+ setError(e instanceof Error ? e.message : 'fetch failed');
115
+ setRows([]);
116
+ } finally {
117
+ setLoading(false);
118
+ }
119
+ }, [status, tag, q]);
120
+
121
+ useEffect(() => { load(); }, [load]);
122
+
123
+ const counts = useMemo(() => {
124
+ const out: Record<string, number> = {};
125
+ for (const r of rows) out[r.column] = (out[r.column] || 0) + 1;
126
+ return out;
127
+ }, [rows]);
128
+
129
+ return (
130
+ <div className="min-h-screen bg-[var(--bg)] text-gray-200">
131
+ <div className="mx-auto max-w-6xl px-4 py-6 sm:px-6">
132
+ <div className="mb-5 flex flex-wrap items-end justify-between gap-3">
133
+ <div>
134
+ <h1 className="text-lg font-semibold text-white">Requirements</h1>
135
+ <p className="mt-1 text-xs text-gray-500">
136
+ 需求池 / 进行中 / 完成 —— 只读视图(写面见 #1634)。任务派单在 <Link href="/tasks" className="text-blue-400 hover:underline">Tasks</Link>。
137
+ </p>
138
+ </div>
139
+ <button
140
+ type="button"
141
+ onClick={() => load()}
142
+ className="rounded-lg border border-[var(--border)] px-3 py-1.5 text-xs text-gray-400 hover:text-gray-200"
143
+ >
144
+ Refresh
145
+ </button>
146
+ </div>
147
+
148
+ {/* Status tabs */}
149
+ <div className="mb-4 flex flex-wrap items-center gap-1.5">
150
+ {COLUMNS.map(col => {
151
+ const count = col.key ? counts[col.key] || 0 : rows.length;
152
+ const active = status === col.key;
153
+ return (
154
+ <button
155
+ key={col.key || 'all'}
156
+ type="button"
157
+ onClick={() => setParam({ status: col.key })}
158
+ className={`rounded-md border px-3 py-1.5 text-xs transition-colors ${
159
+ active
160
+ ? 'border-blue-500/30 bg-blue-500/10 text-blue-300'
161
+ : 'border-transparent text-gray-500 hover:bg-[var(--border)]/60 hover:text-gray-300'
162
+ }`}
163
+ >
164
+ {col.label}
165
+ <span className="ml-1.5 text-[10px] tabular-nums opacity-70">{count}</span>
166
+ </button>
167
+ );
168
+ })}
169
+ </div>
170
+
171
+ {/* Text filters */}
172
+ <div className="mb-4 flex flex-wrap items-center gap-2">
173
+ <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">
174
+ <span className="text-[10px] uppercase tracking-wide text-gray-600">Search</span>
175
+ <input
176
+ value={qInput}
177
+ onChange={e => setQInput(e.target.value)}
178
+ onKeyDown={e => { if (e.key === 'Enter') setParam({ q: qInput }); }}
179
+ onBlur={() => { if (qInput !== q) setParam({ q: qInput }); }}
180
+ placeholder="标题 / 人 / 标签"
181
+ className="w-40 bg-transparent text-sm text-white placeholder-gray-700 focus:outline-none sm:w-56"
182
+ />
183
+ </div>
184
+ <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">
185
+ <span className="text-[10px] uppercase tracking-wide text-gray-600">Tag</span>
186
+ <input
187
+ value={tagInput}
188
+ onChange={e => setTagInput(e.target.value)}
189
+ onKeyDown={e => { if (e.key === 'Enter') setParam({ tag: tagInput }); }}
190
+ onBlur={() => { if (tagInput !== tag) setParam({ tag: tagInput }); }}
191
+ placeholder="exact tag"
192
+ className="w-28 bg-transparent text-sm text-white placeholder-gray-700 focus:outline-none"
193
+ />
194
+ </div>
195
+ {(status || tag || q) && (
196
+ <button
197
+ type="button"
198
+ onClick={() => { setTagInput(''); setQInput(''); setParam({ status: '', tag: '', q: '' }); }}
199
+ 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"
200
+ >
201
+ Clear filters
202
+ </button>
203
+ )}
204
+ </div>
205
+
206
+ {needsLogin && (
207
+ <div className="mb-4 rounded-lg border border-amber-500/20 bg-amber-500/5 px-4 py-3 text-sm text-amber-300">
208
+ 会话已过期,<Link href="/login" className="underline">重新登录</Link> 后再看需求。
209
+ </div>
210
+ )}
211
+ {error && !needsLogin && (
212
+ <div className="mb-4 rounded-lg border border-red-500/20 bg-red-500/5 px-4 py-3 text-sm text-red-300">
213
+ 读取失败:{error}
214
+ <button type="button" onClick={() => load()} className="ml-3 underline">重试</button>
215
+ </div>
216
+ )}
217
+
218
+ {loading ? (
219
+ <div className="space-y-2">
220
+ {Array.from({ length: 8 }).map((_, i) => (
221
+ <div key={i} className="h-12 animate-pulse rounded-lg border border-[var(--border)] bg-[var(--bg-secondary)]" />
222
+ ))}
223
+ </div>
224
+ ) : rows.length === 0 ? (
225
+ <EmptyState
226
+ variant="generic"
227
+ title={status || tag || q ? '没有符合筛选的需求' : '需求池是空的'}
228
+ sub={status || tag || q ? '清掉筛选再试,或换一个标签。' : '客户端建一条需求后,这里就会出现。'}
229
+ cta={status || tag || q ? { label: '清空筛选', onClick: () => setParam({ status: '', tag: '', q: '' }) } : undefined}
230
+ />
231
+ ) : (
232
+ <ul className="divide-y divide-[var(--border)] overflow-hidden rounded-xl border border-[var(--border)] bg-[var(--bg-secondary)]">
233
+ {rows.map(row => {
234
+ const chk = row.checklist_count;
235
+ const kids = row.children;
236
+ return (
237
+ <li key={row.id} className="hover:bg-[var(--bg-secondary)]/60">
238
+ <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">
239
+ <span className="w-12 shrink-0 text-[11px] tabular-nums text-gray-600">#{row.seq}</span>
240
+ <span className={`shrink-0 rounded border px-1.5 py-0.5 text-[10px] ${COLUMN_CHIP[row.column] || COLUMN_CHIP.abandoned}`}>
241
+ {row.column}
242
+ </span>
243
+ <span className="min-w-0 flex-1 truncate text-sm text-gray-100">{row.name}</span>
244
+ {(row.tags || []).slice(0, 3).map(t => (
245
+ <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">
246
+ {t}
247
+ </span>
248
+ ))}
249
+ <span className={`shrink-0 text-[11px] ${priorityClass(row.priority)}`}>{row.priority}</span>
250
+ <span className="hidden w-24 shrink-0 truncate text-[11px] text-gray-500 sm:inline">{personLabel(row.agent_owner)}</span>
251
+ <span className="w-20 shrink-0 text-right text-[11px]">{dueLabel(row.due)}</span>
252
+ {chk && chk.total > 0 && (
253
+ <span className="hidden shrink-0 text-[10px] tabular-nums text-gray-500 sm:inline">
254
+ ✓ {chk.done}/{chk.total}
255
+ </span>
256
+ )}
257
+ {kids && kids.total > 0 && (
258
+ <span className="hidden shrink-0 text-[10px] tabular-nums text-gray-500 md:inline">
259
+ ↳ {kids.done}/{kids.total}
260
+ </span>
261
+ )}
262
+ </Link>
263
+ </li>
264
+ );
265
+ })}
266
+ </ul>
267
+ )}
268
+ </div>
269
+ </div>
270
+ );
271
+ }
272
+
273
+ export default function RequirementsPage() {
274
+ return (
275
+ <Suspense fallback={<div className="min-h-screen bg-[var(--bg)]" />}>
276
+ <RequirementsContent />
277
+ </Suspense>
278
+ );
279
+ }
@@ -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