@mndrk/agx 2.0.22 → 2.0.24

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 (378) hide show
  1. package/cloud-runtime/standalone/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/cloud-runtime/standalone/.next/build-manifest.json +6 -6
  4. package/cloud-runtime/standalone/.next/prerender-manifest.json +3 -3
  5. package/cloud-runtime/standalone/.next/routes-manifest.json +6 -0
  6. package/cloud-runtime/standalone/.next/server/app/_global-error/page/build-manifest.json +4 -4
  7. package/cloud-runtime/standalone/.next/server/app/_global-error/page.js +2 -2
  8. package/cloud-runtime/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/cloud-runtime/standalone/.next/server/app/_global-error.html +2 -2
  10. package/cloud-runtime/standalone/.next/server/app/_global-error.rsc +1 -1
  11. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/cloud-runtime/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/.next/server/app/_not-found/page/build-manifest.json +4 -4
  17. package/cloud-runtime/standalone/.next/server/app/_not-found/page.js +6 -5
  18. package/cloud-runtime/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/cloud-runtime/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/cloud-runtime/standalone/.next/server/app/_not-found.html +14 -2
  21. package/cloud-runtime/standalone/.next/server/app/_not-found.rsc +11 -11
  22. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
  23. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  24. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +7 -7
  25. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  26. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  27. package/cloud-runtime/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page/build-manifest.json +4 -4
  29. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page.js +5 -5
  30. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  31. package/cloud-runtime/standalone/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  32. package/cloud-runtime/standalone/.next/server/app/agents/page/build-manifest.json +4 -4
  33. package/cloud-runtime/standalone/.next/server/app/agents/page.js +5 -5
  34. package/cloud-runtime/standalone/.next/server/app/agents/page.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  36. package/cloud-runtime/standalone/.next/server/app/agents.html +14 -2
  37. package/cloud-runtime/standalone/.next/server/app/agents.rsc +10 -10
  38. package/cloud-runtime/standalone/.next/server/app/agents.segments/_full.segment.rsc +10 -10
  39. package/cloud-runtime/standalone/.next/server/app/agents.segments/_head.segment.rsc +3 -3
  40. package/cloud-runtime/standalone/.next/server/app/agents.segments/_index.segment.rsc +4 -4
  41. package/cloud-runtime/standalone/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  42. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +4 -4
  43. package/cloud-runtime/standalone/.next/server/app/agents.segments/agents.segment.rsc +3 -3
  44. package/cloud-runtime/standalone/.next/server/app/api/file-search/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route/app-paths-manifest.json +3 -0
  46. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route/build-manifest.json +11 -0
  47. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route/server-reference-manifest.json +4 -0
  48. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route.js +7 -0
  49. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route.js.map +5 -0
  50. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route.js.nft.json +1 -0
  51. package/cloud-runtime/standalone/.next/server/app/api/filesystem/browse/route_client-reference-manifest.js +2 -0
  52. package/cloud-runtime/standalone/.next/server/app/api/providers/route.js +1 -1
  53. package/cloud-runtime/standalone/.next/server/app/api/providers/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/.next/server/app/api/status/route.js +1 -1
  55. package/cloud-runtime/standalone/.next/server/app/api/status/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/.next/server/app/automations/page/build-manifest.json +4 -4
  57. package/cloud-runtime/standalone/.next/server/app/automations/page.js +5 -5
  58. package/cloud-runtime/standalone/.next/server/app/automations/page.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/.next/server/app/automations/page_client-reference-manifest.js +1 -1
  60. package/cloud-runtime/standalone/.next/server/app/automations.html +14 -2
  61. package/cloud-runtime/standalone/.next/server/app/automations.rsc +11 -11
  62. package/cloud-runtime/standalone/.next/server/app/automations.segments/_full.segment.rsc +11 -11
  63. package/cloud-runtime/standalone/.next/server/app/automations.segments/_head.segment.rsc +3 -3
  64. package/cloud-runtime/standalone/.next/server/app/automations.segments/_index.segment.rsc +4 -4
  65. package/cloud-runtime/standalone/.next/server/app/automations.segments/_tree.segment.rsc +3 -3
  66. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +5 -5
  67. package/cloud-runtime/standalone/.next/server/app/automations.segments/automations.segment.rsc +3 -3
  68. package/cloud-runtime/standalone/.next/server/app/board/page/build-manifest.json +4 -4
  69. package/cloud-runtime/standalone/.next/server/app/board/page.js +6 -6
  70. package/cloud-runtime/standalone/.next/server/app/board/page.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/.next/server/app/board/page_client-reference-manifest.js +1 -1
  72. package/cloud-runtime/standalone/.next/server/app/board.html +14 -2
  73. package/cloud-runtime/standalone/.next/server/app/board.rsc +8 -8
  74. package/cloud-runtime/standalone/.next/server/app/board.segments/_full.segment.rsc +8 -8
  75. package/cloud-runtime/standalone/.next/server/app/board.segments/_head.segment.rsc +3 -3
  76. package/cloud-runtime/standalone/.next/server/app/board.segments/_index.segment.rsc +4 -4
  77. package/cloud-runtime/standalone/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  78. package/cloud-runtime/standalone/.next/server/app/board.segments/board/__PAGE__.segment.rsc +2 -2
  79. package/cloud-runtime/standalone/.next/server/app/board.segments/board.segment.rsc +3 -3
  80. package/cloud-runtime/standalone/.next/server/app/execution-graph/page/build-manifest.json +4 -4
  81. package/cloud-runtime/standalone/.next/server/app/execution-graph/page.js +5 -5
  82. package/cloud-runtime/standalone/.next/server/app/execution-graph/page.js.nft.json +1 -1
  83. package/cloud-runtime/standalone/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  84. package/cloud-runtime/standalone/.next/server/app/execution-graph.html +14 -2
  85. package/cloud-runtime/standalone/.next/server/app/execution-graph.rsc +10 -10
  86. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_full.segment.rsc +10 -10
  87. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_head.segment.rsc +3 -3
  88. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_index.segment.rsc +4 -4
  89. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  90. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +4 -4
  91. package/cloud-runtime/standalone/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +3 -3
  92. package/cloud-runtime/standalone/.next/server/app/index.html +14 -2
  93. package/cloud-runtime/standalone/.next/server/app/index.rsc +10 -10
  94. package/cloud-runtime/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  95. package/cloud-runtime/standalone/.next/server/app/index.segments/_full.segment.rsc +10 -10
  96. package/cloud-runtime/standalone/.next/server/app/index.segments/_head.segment.rsc +3 -3
  97. package/cloud-runtime/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  98. package/cloud-runtime/standalone/.next/server/app/index.segments/_tree.segment.rsc +3 -3
  99. package/cloud-runtime/standalone/.next/server/app/page/build-manifest.json +4 -4
  100. package/cloud-runtime/standalone/.next/server/app/page.js +5 -5
  101. package/cloud-runtime/standalone/.next/server/app/page.js.nft.json +1 -1
  102. package/cloud-runtime/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  103. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page/build-manifest.json +4 -4
  104. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page.js +5 -5
  105. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  107. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page/build-manifest.json +4 -4
  108. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page.js +5 -5
  109. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  110. package/cloud-runtime/standalone/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  111. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page/build-manifest.json +4 -4
  112. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page.js +5 -5
  113. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page.js.nft.json +1 -1
  114. package/cloud-runtime/standalone/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  115. package/cloud-runtime/standalone/.next/server/app/projects/orphans.html +13 -1
  116. package/cloud-runtime/standalone/.next/server/app/projects/orphans.rsc +10 -10
  117. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_full.segment.rsc +10 -10
  118. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_head.segment.rsc +3 -3
  119. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_index.segment.rsc +4 -4
  120. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  121. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +4 -4
  122. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +3 -3
  123. package/cloud-runtime/standalone/.next/server/app/projects/orphans.segments/projects.segment.rsc +3 -3
  124. package/cloud-runtime/standalone/.next/server/app/projects/page/build-manifest.json +4 -4
  125. package/cloud-runtime/standalone/.next/server/app/projects/page.js +5 -5
  126. package/cloud-runtime/standalone/.next/server/app/projects/page.js.nft.json +1 -1
  127. package/cloud-runtime/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  128. package/cloud-runtime/standalone/.next/server/app/projects.html +14 -2
  129. package/cloud-runtime/standalone/.next/server/app/projects.rsc +10 -10
  130. package/cloud-runtime/standalone/.next/server/app/projects.segments/_full.segment.rsc +10 -10
  131. package/cloud-runtime/standalone/.next/server/app/projects.segments/_head.segment.rsc +3 -3
  132. package/cloud-runtime/standalone/.next/server/app/projects.segments/_index.segment.rsc +4 -4
  133. package/cloud-runtime/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  134. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +4 -4
  135. package/cloud-runtime/standalone/.next/server/app/projects.segments/projects.segment.rsc +3 -3
  136. package/cloud-runtime/standalone/.next/server/app/settings/page/build-manifest.json +4 -4
  137. package/cloud-runtime/standalone/.next/server/app/settings/page.js +5 -5
  138. package/cloud-runtime/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  139. package/cloud-runtime/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  140. package/cloud-runtime/standalone/.next/server/app/settings.html +14 -2
  141. package/cloud-runtime/standalone/.next/server/app/settings.rsc +9 -9
  142. package/cloud-runtime/standalone/.next/server/app/settings.segments/_full.segment.rsc +9 -9
  143. package/cloud-runtime/standalone/.next/server/app/settings.segments/_head.segment.rsc +3 -3
  144. package/cloud-runtime/standalone/.next/server/app/settings.segments/_index.segment.rsc +4 -4
  145. package/cloud-runtime/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  146. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +3 -3
  147. package/cloud-runtime/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  148. package/cloud-runtime/standalone/.next/server/app/status/page/build-manifest.json +4 -4
  149. package/cloud-runtime/standalone/.next/server/app/status/page.js +5 -5
  150. package/cloud-runtime/standalone/.next/server/app/status/page.js.nft.json +1 -1
  151. package/cloud-runtime/standalone/.next/server/app/status/page_client-reference-manifest.js +1 -1
  152. package/cloud-runtime/standalone/.next/server/app/status.html +14 -2
  153. package/cloud-runtime/standalone/.next/server/app/status.rsc +10 -10
  154. package/cloud-runtime/standalone/.next/server/app/status.segments/_full.segment.rsc +10 -10
  155. package/cloud-runtime/standalone/.next/server/app/status.segments/_head.segment.rsc +3 -3
  156. package/cloud-runtime/standalone/.next/server/app/status.segments/_index.segment.rsc +4 -4
  157. package/cloud-runtime/standalone/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  158. package/cloud-runtime/standalone/.next/server/app/status.segments/status/__PAGE__.segment.rsc +4 -4
  159. package/cloud-runtime/standalone/.next/server/app/status.segments/status.segment.rsc +3 -3
  160. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page/build-manifest.json +4 -4
  161. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page.js +5 -5
  162. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page.js.nft.json +1 -1
  163. package/cloud-runtime/standalone/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  164. package/cloud-runtime/standalone/.next/server/app/welcome/page/build-manifest.json +4 -4
  165. package/cloud-runtime/standalone/.next/server/app/welcome/page.js +5 -5
  166. package/cloud-runtime/standalone/.next/server/app/welcome/page.js.nft.json +1 -1
  167. package/cloud-runtime/standalone/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
  168. package/cloud-runtime/standalone/.next/server/app/welcome.html +14 -2
  169. package/cloud-runtime/standalone/.next/server/app/welcome.rsc +10 -10
  170. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_full.segment.rsc +10 -10
  171. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_head.segment.rsc +3 -3
  172. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_index.segment.rsc +4 -4
  173. package/cloud-runtime/standalone/.next/server/app/welcome.segments/_tree.segment.rsc +2 -2
  174. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +4 -4
  175. package/cloud-runtime/standalone/.next/server/app/welcome.segments/welcome.segment.rsc +3 -3
  176. package/cloud-runtime/standalone/.next/server/app-paths-manifest.json +1 -0
  177. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__60ba5058._.js +1 -1
  178. package/cloud-runtime/standalone/.next/server/chunks/[root-of-the-server]__621dcb4a._.js +3 -0
  179. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__babd2675._.js → [root-of-the-server]__82d76712._.js} +2 -2
  180. package/cloud-runtime/standalone/.next/server/chunks/{[root-of-the-server]__d36da34d._.js → [root-of-the-server]__c2767ca5._.js} +2 -2
  181. package/cloud-runtime/standalone/.next/server/chunks/_next-internal_server_app_api_filesystem_browse_route_actions_8e268170.js +3 -0
  182. package/cloud-runtime/standalone/.next/server/chunks/lib_history-store_ts_2e721df2._.js +4 -4
  183. package/cloud-runtime/standalone/.next/server/chunks/lib_history-store_ts_74d1c060._.js +6 -6
  184. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__fb05a385._.js → [root-of-the-server]__056cdf7d._.js} +2 -2
  185. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__113d6767._.js +3 -0
  186. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__8d1af2c9._.js → [root-of-the-server]__11e33b9b._.js} +2 -2
  187. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__296a25b5._.js → [root-of-the-server]__19cd257e._.js} +2 -2
  188. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__226f8a19._.js +13 -1
  189. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__51980630._.js → [root-of-the-server]__26d669c2._.js} +2 -2
  190. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__47caef59._.js +1 -1
  191. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0a103abc._.js → [root-of-the-server]__4ebf5947._.js} +2 -2
  192. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ffa2883._.js +1 -1
  193. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__6a9d3855._.js +1 -1
  194. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__942ca438._.js +3 -0
  195. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__c45c7360._.js → [root-of-the-server]__a667191a._.js} +2 -2
  196. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1cfbd715._.js → [root-of-the-server]__aa28d46f._.js} +2 -2
  197. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__bd4d5430._.js +3 -0
  198. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__ab36b420._.js → [root-of-the-server]__bde5bc78._.js} +2 -2
  199. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__cde88183._.js +3 -0
  200. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__ce3b51aa._.js +3 -0
  201. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__2503b467._.js → [root-of-the-server]__d36dd8bc._.js} +2 -2
  202. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__b77ae83d._.js → [root-of-the-server]__dac5ab29._.js} +2 -2
  203. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__3405b8e4._.js → [root-of-the-server]__e87ba2b0._.js} +2 -2
  204. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__b9356576._.js → [root-of-the-server]__f62d412e._.js} +2 -2
  205. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__756711b8._.js → [root-of-the-server]__f63d6594._.js} +2 -2
  206. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__46de03a9._.js → [root-of-the-server]__febbd0b8._.js} +2 -2
  207. package/cloud-runtime/standalone/.next/server/chunks/ssr/{[root-of-the-server]__89c70d6f._.js → [root-of-the-server]__ff22a10e._.js} +2 -2
  208. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_a19a362a._.js → _02c78cac._.js} +3 -3
  209. package/cloud-runtime/standalone/.next/server/chunks/ssr/{node_modules_next_dist_08570d7f._.js → _0b36c9d6._.js} +3 -3
  210. package/cloud-runtime/standalone/.next/server/chunks/ssr/_0ff7c687._.js +3 -3
  211. package/cloud-runtime/standalone/.next/server/chunks/ssr/_0ffd2660._.js +2 -2
  212. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_37435df3._.js → _173da79d._.js} +3 -3
  213. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_4fe611fe._.js → _1c58ab2d._.js} +3 -3
  214. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_a88b4884._.js → _222af282._.js} +3 -3
  215. package/cloud-runtime/standalone/.next/server/chunks/ssr/_27cb3359._.js +95 -0
  216. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_8ebf36f6._.js → _3aa32c11._.js} +3 -3
  217. package/cloud-runtime/standalone/.next/server/chunks/ssr/_43472af3._.js +3 -0
  218. package/cloud-runtime/standalone/.next/server/chunks/ssr/_4b5d7c9b._.js +95 -0
  219. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_c52176ad._.js → _4d4ba84b._.js} +3 -3
  220. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_194cda6c._.js → _50d04b8f._.js} +3 -3
  221. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_a8eaf6bc._.js → _629dc55c._.js} +3 -3
  222. package/cloud-runtime/standalone/.next/server/chunks/ssr/_6a367524._.js +1 -1
  223. package/cloud-runtime/standalone/.next/server/chunks/ssr/_93914ecd._.js +2 -2
  224. package/cloud-runtime/standalone/.next/server/chunks/ssr/_94effa0f._.js +1 -1
  225. package/cloud-runtime/standalone/.next/server/chunks/ssr/_a696e9b3._.js +95 -0
  226. package/cloud-runtime/standalone/.next/server/chunks/ssr/_ae20456d._.js +4 -0
  227. package/cloud-runtime/standalone/.next/server/chunks/ssr/_c838f593._.js +95 -0
  228. package/cloud-runtime/standalone/.next/server/chunks/ssr/_cd5e154b._.js +1 -1
  229. package/cloud-runtime/standalone/.next/server/chunks/ssr/_d021529a._.js +3 -0
  230. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_fc18d7b5._.js → _e04b4053._.js} +3 -3
  231. package/cloud-runtime/standalone/.next/server/chunks/ssr/_e1769638._.js +3 -3
  232. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_b9d3574c._.js → _f1465cc8._.js} +3 -3
  233. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_d4878ef1._.js → _f2a7beb1._.js} +3 -3
  234. package/cloud-runtime/standalone/.next/server/chunks/ssr/_fbced30b._.js +3 -0
  235. package/cloud-runtime/standalone/.next/server/chunks/ssr/{_8d8836a8._.js → _fc1aaf9e._.js} +3 -3
  236. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_agents_[id]_page_tsx_9c49d8c8._.js +1 -1
  237. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_agents_page_tsx_f5f08ed8._.js +1 -1
  238. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_automations_page_tsx_3d732184._.js +1 -1
  239. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_execution-graph_page_tsx_f854185a._.js +2 -2
  240. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_global-error_tsx_9170b7a0._.js +3 -0
  241. package/cloud-runtime/standalone/.next/server/chunks/ssr/app_projects_[slug]_page_tsx_e0fabf6e._.js +2 -2
  242. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_chat-ui_bfeda794._.js +5 -5
  243. package/cloud-runtime/standalone/.next/server/chunks/ssr/components_thread_WorkspaceSidebar_tsx_e660301b._.js +1 -1
  244. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_next_dist_03ec2107._.js +4 -0
  245. package/cloud-runtime/standalone/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_d92e159d.js → node_modules_next_dist_esm_build_templates_app-page_61c49327.js} +3 -3
  246. package/cloud-runtime/standalone/.next/server/middleware-build-manifest.js +4 -4
  247. package/cloud-runtime/standalone/.next/server/middleware-manifest.json +5 -5
  248. package/cloud-runtime/standalone/.next/server/pages/404.html +13 -1
  249. package/cloud-runtime/standalone/.next/server/pages/500.html +2 -2
  250. package/cloud-runtime/standalone/.next/server/server-reference-manifest.js +1 -1
  251. package/cloud-runtime/standalone/.next/server/server-reference-manifest.json +1 -1
  252. package/cloud-runtime/standalone/.next/static/chunks/{785cb91c31bb3303.js → 09f9eeea393db0fd.js} +3 -3
  253. package/cloud-runtime/standalone/.next/static/chunks/1184bf1bfdf97666.js +1 -0
  254. package/cloud-runtime/standalone/.next/static/chunks/2acd153dc5252e88.js +30 -0
  255. package/cloud-runtime/standalone/.next/static/chunks/2deeba875ec50761.js +1 -0
  256. package/cloud-runtime/standalone/.next/static/chunks/45b4d0ee5c92d45b.js +93 -0
  257. package/cloud-runtime/standalone/.next/static/chunks/5ace4b4f4475962a.js +1 -0
  258. package/cloud-runtime/standalone/.next/static/chunks/616d66dbec9e4b8b.js +93 -0
  259. package/cloud-runtime/standalone/.next/static/chunks/64f812259cf8c243.js +18 -0
  260. package/cloud-runtime/standalone/.next/static/chunks/6dbf5940e30fa9c7.js +1 -0
  261. package/cloud-runtime/standalone/.next/static/chunks/7d4c1d97169c8522.js +1 -0
  262. package/cloud-runtime/standalone/.next/static/chunks/7f13efe9329d3f97.js +1 -0
  263. package/cloud-runtime/standalone/.next/static/chunks/80219bbddcf65109.js +1 -0
  264. package/cloud-runtime/standalone/.next/static/chunks/{47ef8bb2118ea917.js → 86ace6febb11ad71.js} +1 -1
  265. package/cloud-runtime/standalone/.next/static/chunks/{90c7dbc004f59a42.js → 88e24940a5d5d386.js} +1 -1
  266. package/cloud-runtime/standalone/.next/static/chunks/9d50c2514f72d926.css +1 -0
  267. package/cloud-runtime/standalone/.next/static/chunks/b079c677d9b39f98.js +5 -0
  268. package/cloud-runtime/standalone/.next/static/chunks/b4e298542d366e31.js +93 -0
  269. package/cloud-runtime/standalone/.next/static/chunks/b88352740262931f.js +6 -0
  270. package/cloud-runtime/standalone/.next/static/chunks/bd6c5b5b4fbd6413.css +2 -0
  271. package/cloud-runtime/standalone/.next/static/chunks/c5609fd2abb65850.js +1 -0
  272. package/cloud-runtime/standalone/.next/static/chunks/{7ca3e4f9ed7425a8.js → d95cd010361834be.js} +1 -1
  273. package/cloud-runtime/standalone/.next/static/chunks/da434b1ad885d636.js +30 -0
  274. package/cloud-runtime/standalone/.next/static/chunks/e44264686aa5ecbf.js +93 -0
  275. package/cloud-runtime/standalone/.next/static/chunks/eab1c7d0246592f8.js +8 -0
  276. package/cloud-runtime/standalone/.next/static/chunks/f7bbf5cfcfed8ba9.js +1 -0
  277. package/cloud-runtime/standalone/.next/static/chunks/{turbopack-92401168917c21f2.js → turbopack-5b5918f610666d2d.js} +1 -1
  278. package/cloud-runtime/standalone/README.md +15 -3
  279. package/cloud-runtime/standalone/app/agents/[id]/page.tsx +147 -147
  280. package/cloud-runtime/standalone/app/agents/page.tsx +115 -310
  281. package/cloud-runtime/standalone/app/api/filesystem/browse/route.ts +39 -0
  282. package/cloud-runtime/standalone/app/api/status/route.ts +1 -1
  283. package/cloud-runtime/standalone/app/api/threads/route.ts +4 -5
  284. package/cloud-runtime/standalone/app/automations/page.tsx +1 -1
  285. package/cloud-runtime/standalone/app/execution-graph/page.tsx +86 -86
  286. package/cloud-runtime/standalone/app/global-error.tsx +54 -0
  287. package/cloud-runtime/standalone/app/globals.css +165 -59
  288. package/cloud-runtime/standalone/app/layout.tsx +17 -0
  289. package/cloud-runtime/standalone/app/projects/[slug]/layout.tsx +1 -1
  290. package/cloud-runtime/standalone/app/projects/[slug]/page.tsx +58 -58
  291. package/cloud-runtime/standalone/app/status/page.tsx +20 -20
  292. package/cloud-runtime/standalone/app/welcome/page.tsx +20 -15
  293. package/cloud-runtime/standalone/components/AutomationsBoard.tsx +1 -1
  294. package/cloud-runtime/standalone/components/ClientOnly.tsx +17 -0
  295. package/cloud-runtime/standalone/components/ConsentToggle/index.tsx +3 -3
  296. package/cloud-runtime/standalone/components/ContextMenu.tsx +123 -0
  297. package/cloud-runtime/standalone/components/DaemonBar.tsx +9 -9
  298. package/cloud-runtime/standalone/components/DirectoryBrowser.tsx +140 -0
  299. package/cloud-runtime/standalone/components/FirstRunModal/index.tsx +10 -10
  300. package/cloud-runtime/standalone/components/KanbanBoard.tsx +9 -9
  301. package/cloud-runtime/standalone/components/OfflineIndicator.tsx +149 -0
  302. package/cloud-runtime/standalone/components/ProjectModal.tsx +32 -8
  303. package/cloud-runtime/standalone/components/TaskCard.tsx +3 -3
  304. package/cloud-runtime/standalone/components/WorkspaceRootsList/index.tsx +57 -35
  305. package/cloud-runtime/standalone/components/chat-ui/AttachmentTray.tsx +7 -7
  306. package/cloud-runtime/standalone/components/chat-ui/ChatContainer.tsx +218 -121
  307. package/cloud-runtime/standalone/components/chat-ui/ChatPreview.tsx +4 -4
  308. package/cloud-runtime/standalone/components/chat-ui/CommandPopover.tsx +4 -4
  309. package/cloud-runtime/standalone/components/chat-ui/Composer.tsx +65 -29
  310. package/cloud-runtime/standalone/components/chat-ui/FileMentionPopover.tsx +4 -4
  311. package/cloud-runtime/standalone/components/chat-ui/FileMentionPopoverItem.tsx +9 -9
  312. package/cloud-runtime/standalone/components/chat-ui/LogPanel.tsx +5 -5
  313. package/cloud-runtime/standalone/components/chat-ui/Markdown.tsx +11 -11
  314. package/cloud-runtime/standalone/components/chat-ui/MentionPopover.tsx +11 -11
  315. package/cloud-runtime/standalone/components/chat-ui/MessageAttachments.tsx +5 -5
  316. package/cloud-runtime/standalone/components/chat-ui/MessageBubble.tsx +6 -6
  317. package/cloud-runtime/standalone/components/chat-ui/MessageList.tsx +60 -135
  318. package/cloud-runtime/standalone/components/chat-ui/ParticipantBar.tsx +507 -263
  319. package/cloud-runtime/standalone/components/chat-ui/ProjectPicker.tsx +17 -17
  320. package/cloud-runtime/standalone/components/chat-ui/ReactionChip.tsx +1 -1
  321. package/cloud-runtime/standalone/components/chat-ui/SearchResults.tsx +14 -14
  322. package/cloud-runtime/standalone/components/chat-ui/StatusIndicator.tsx +7 -7
  323. package/cloud-runtime/standalone/components/chat-ui/TaskDraftCard.tsx +14 -14
  324. package/cloud-runtime/standalone/components/chat-ui/TaskStatusCard.tsx +10 -10
  325. package/cloud-runtime/standalone/components/chat-ui/ThreadMentionPopover.tsx +8 -8
  326. package/cloud-runtime/standalone/components/chat-ui/ThreadView.tsx +36 -33
  327. package/cloud-runtime/standalone/components/chat-ui/TypingIndicator.tsx +7 -7
  328. package/cloud-runtime/standalone/components/errors/StartupGuardWrapper.tsx +96 -0
  329. package/cloud-runtime/standalone/components/thread/WorkspaceSidebar.tsx +173 -193
  330. package/cloud-runtime/standalone/fix-primary.js +30 -0
  331. package/cloud-runtime/standalone/fix-theme.js +78 -0
  332. package/cloud-runtime/standalone/hooks/useKeyboardShortcuts.ts +131 -0
  333. package/cloud-runtime/standalone/lib/history-store.ts +6 -1
  334. package/cloud-runtime/standalone/lib/storage/thread-adapter.ts +3 -3
  335. package/cloud-runtime/standalone/state/windowState.ts +179 -0
  336. package/cloud-runtime/standalone/styles/workspaceSidebar.css +89 -94
  337. package/cloud-runtime/standalone/tsconfig.tsbuildinfo +1 -1
  338. package/package.json +1 -1
  339. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__3fe0b1a1._.js +0 -3
  340. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ea3dff5._.js +0 -3
  341. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__931817d6._.js +0 -3
  342. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__e68a6e30._.js +0 -3
  343. package/cloud-runtime/standalone/.next/server/chunks/ssr/[root-of-the-server]__fad8b80a._.js +0 -3
  344. package/cloud-runtime/standalone/.next/server/chunks/ssr/_181427d4._.js +0 -95
  345. package/cloud-runtime/standalone/.next/server/chunks/ssr/_2da02644._.js +0 -3
  346. package/cloud-runtime/standalone/.next/server/chunks/ssr/_60f7e403._.js +0 -3
  347. package/cloud-runtime/standalone/.next/server/chunks/ssr/_7dbc349d._.js +0 -95
  348. package/cloud-runtime/standalone/.next/server/chunks/ssr/_a17cabe8._.js +0 -95
  349. package/cloud-runtime/standalone/.next/server/chunks/ssr/_d743f11d._.js +0 -3
  350. package/cloud-runtime/standalone/.next/server/chunks/ssr/_e05b04a5._.js +0 -4
  351. package/cloud-runtime/standalone/.next/server/chunks/ssr/_f2970e5f._.js +0 -4
  352. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_001a8448._.js +0 -3
  353. package/cloud-runtime/standalone/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +0 -3
  354. package/cloud-runtime/standalone/.next/static/chunks/047593c886feba72.css +0 -2
  355. package/cloud-runtime/standalone/.next/static/chunks/0c589ec8063c3a1f.js +0 -30
  356. package/cloud-runtime/standalone/.next/static/chunks/1826707bd2f73ca6.js +0 -8
  357. package/cloud-runtime/standalone/.next/static/chunks/1f1b912fe2e3d5bd.js +0 -1
  358. package/cloud-runtime/standalone/.next/static/chunks/32f13ace6661115d.js +0 -93
  359. package/cloud-runtime/standalone/.next/static/chunks/3b0a3b913dd15028.js +0 -30
  360. package/cloud-runtime/standalone/.next/static/chunks/4b3358c52d01a3f9.css +0 -1
  361. package/cloud-runtime/standalone/.next/static/chunks/4ee6151684568990.js +0 -93
  362. package/cloud-runtime/standalone/.next/static/chunks/5488a71a8515e8b2.js +0 -1
  363. package/cloud-runtime/standalone/.next/static/chunks/5aad4adabb65cd20.js +0 -1
  364. package/cloud-runtime/standalone/.next/static/chunks/5ce01dbd17ce3bb2.js +0 -1
  365. package/cloud-runtime/standalone/.next/static/chunks/5f5ae2ea4fa2b8f0.js +0 -12
  366. package/cloud-runtime/standalone/.next/static/chunks/6bb1ecbc3b80922c.js +0 -1
  367. package/cloud-runtime/standalone/.next/static/chunks/7657d70cc0c40c81.js +0 -6
  368. package/cloud-runtime/standalone/.next/static/chunks/7f2513325b592f25.js +0 -18
  369. package/cloud-runtime/standalone/.next/static/chunks/8b658ccf17b771b9.js +0 -1
  370. package/cloud-runtime/standalone/.next/static/chunks/b39122b85655e5b0.js +0 -1
  371. package/cloud-runtime/standalone/.next/static/chunks/b649593a57df218f.js +0 -1
  372. package/cloud-runtime/standalone/.next/static/chunks/b8ca4cb386211980.js +0 -5
  373. package/cloud-runtime/standalone/.next/static/chunks/e103488c85a7b445.js +0 -1
  374. package/cloud-runtime/standalone/.next/static/chunks/e355ac901e70f43d.js +0 -1
  375. package/cloud-runtime/standalone/.next/static/chunks/ebebe08434070698.js +0 -93
  376. /package/cloud-runtime/standalone/.next/static/{H3MuYxcqCPfZoSC2uYW8f → Rn0z3Af30mHwrHLLwgKlz}/_buildManifest.js +0 -0
  377. /package/cloud-runtime/standalone/.next/static/{H3MuYxcqCPfZoSC2uYW8f → Rn0z3Af30mHwrHLLwgKlz}/_clientMiddlewareManifest.json +0 -0
  378. /package/cloud-runtime/standalone/.next/static/{H3MuYxcqCPfZoSC2uYW8f → Rn0z3Af30mHwrHLLwgKlz}/_ssgManifest.js +0 -0
@@ -0,0 +1,123 @@
1
+ "use client";
2
+
3
+ import React, { useEffect, useState, useRef, useCallback } from "react";
4
+
5
+ export interface ContextMenuItem {
6
+ label: string;
7
+ icon?: React.ReactNode;
8
+ shortcut?: string;
9
+ action: () => void;
10
+ destructive?: boolean;
11
+ divider?: boolean;
12
+ }
13
+
14
+ interface ContextMenuProps {
15
+ items: ContextMenuItem[];
16
+ children: React.ReactNode;
17
+ }
18
+
19
+ export function ContextMenu({ items, children }: ContextMenuProps) {
20
+ const [isOpen, setIsOpen] = useState(false);
21
+ const [position, setPosition] = useState({ x: 0, y: 0 });
22
+ const [focusIndex, setFocusIndex] = useState(-1);
23
+ const menuRef = useRef<HTMLDivElement>(null);
24
+
25
+ const close = useCallback(() => {
26
+ setIsOpen(false);
27
+ setFocusIndex(-1);
28
+ }, []);
29
+
30
+ useEffect(() => {
31
+ if (!isOpen) return;
32
+
33
+ const handleClickOutside = (e: MouseEvent) => {
34
+ if (menuRef.current && !menuRef.current.contains(e.target as Node)) {
35
+ close();
36
+ }
37
+ };
38
+
39
+ const handleKeyDown = (e: KeyboardEvent) => {
40
+ if (e.key === "Escape") {
41
+ close();
42
+ return;
43
+ }
44
+
45
+ const actionItems = items.filter((item) => !item.divider);
46
+ if (e.key === "ArrowDown") {
47
+ e.preventDefault();
48
+ setFocusIndex((prev) => (prev + 1) % actionItems.length);
49
+ } else if (e.key === "ArrowUp") {
50
+ e.preventDefault();
51
+ setFocusIndex((prev) => (prev - 1 + actionItems.length) % actionItems.length);
52
+ } else if (e.key === "Enter" && focusIndex >= 0) {
53
+ e.preventDefault();
54
+ actionItems[focusIndex]?.action();
55
+ close();
56
+ }
57
+ };
58
+
59
+ document.addEventListener("mousedown", handleClickOutside);
60
+ document.addEventListener("keydown", handleKeyDown);
61
+ return () => {
62
+ document.removeEventListener("mousedown", handleClickOutside);
63
+ document.removeEventListener("keydown", handleKeyDown);
64
+ };
65
+ }, [isOpen, close, focusIndex, items]);
66
+
67
+ // Reposition if menu would overflow viewport
68
+ useEffect(() => {
69
+ if (!isOpen || !menuRef.current) return;
70
+ const rect = menuRef.current.getBoundingClientRect();
71
+ let { x, y } = position;
72
+ if (rect.right > window.innerWidth - 8) x = window.innerWidth - rect.width - 8;
73
+ if (rect.bottom > window.innerHeight - 8) y = window.innerHeight - rect.height - 8;
74
+ if (x !== position.x || y !== position.y) setPosition({ x, y });
75
+ }, [isOpen, position]);
76
+
77
+ const handleContextMenu = (e: React.MouseEvent) => {
78
+ e.preventDefault();
79
+ setPosition({ x: e.clientX, y: e.clientY });
80
+ setFocusIndex(-1);
81
+ setIsOpen(true);
82
+ };
83
+
84
+ let actionIndex = -1;
85
+
86
+ return (
87
+ <>
88
+ <div onContextMenu={handleContextMenu} className="w-full h-full">
89
+ {children}
90
+ </div>
91
+
92
+ {isOpen && (
93
+ <div
94
+ ref={menuRef}
95
+ style={{ top: position.y, left: position.x }}
96
+ className="context-menu"
97
+ >
98
+ {items.map((item, index) => {
99
+ if (item.divider) {
100
+ return <div key={index} className="context-menu__divider" />;
101
+ }
102
+ actionIndex++;
103
+ const isFocused = actionIndex === focusIndex;
104
+ return (
105
+ <button
106
+ key={index}
107
+ onClick={() => {
108
+ item.action();
109
+ close();
110
+ }}
111
+ className={`context-menu__item ${item.destructive ? "context-menu__item--destructive" : ""} ${isFocused ? "context-menu__item--focused" : ""}`}
112
+ >
113
+ {item.icon && <span className="context-menu__icon">{item.icon}</span>}
114
+ <span className="context-menu__label">{item.label}</span>
115
+ {item.shortcut && <span className="context-menu__shortcut">{item.shortcut}</span>}
116
+ </button>
117
+ );
118
+ })}
119
+ </div>
120
+ )}
121
+ </>
122
+ );
123
+ }
@@ -73,18 +73,18 @@ export default function DaemonBar() {
73
73
  const running = status.running;
74
74
 
75
75
  return (
76
- <div className="flex items-center gap-3 py-2 text-xs text-slate-500">
76
+ <div className="flex items-center gap-3 py-2 text-xs text-[var(--muted-foreground)]">
77
77
  {/* Status dot + label */}
78
78
  <button
79
79
  type="button"
80
80
  onClick={toggle}
81
81
  disabled={loading}
82
- className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full border border-slate-200 hover:border-slate-300 transition-colors disabled:opacity-50"
82
+ className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full border border-[var(--border)] hover:border-[var(--border)] transition-colors disabled:opacity-50"
83
83
  >
84
84
  <span
85
- className={`w-1.5 h-1.5 rounded-full ${running ? "bg-emerald-500" : "bg-slate-300"}`}
85
+ className={`w-1.5 h-1.5 rounded-full ${running ? "bg-emerald-500" : "bg-[var(--app-shell-soft-text)]"}`}
86
86
  />
87
- <span className="font-medium text-slate-600">
87
+ <span className="font-medium text-[var(--muted-foreground)]">
88
88
  {loading ? "..." : running ? "Daemon running" : "Daemon stopped"}
89
89
  </span>
90
90
  </button>
@@ -92,23 +92,23 @@ export default function DaemonBar() {
92
92
  {running && (
93
93
  <>
94
94
  {/* Worker count with +/- */}
95
- <div className="inline-flex items-center rounded-full border border-slate-200 overflow-hidden">
95
+ <div className="inline-flex items-center rounded-full border border-[var(--border)] overflow-hidden">
96
96
  <button
97
97
  type="button"
98
98
  onClick={() => scale(-1)}
99
99
  disabled={loading || status.targetWorkers <= 1}
100
- className="px-1.5 py-0.5 hover:bg-slate-100 transition-colors disabled:opacity-30 text-slate-400"
100
+ className="px-1.5 py-0.5 hover:bg-[var(--muted)] transition-colors disabled:opacity-30 text-[var(--muted-foreground)]"
101
101
  >
102
102
  -
103
103
  </button>
104
- <span className="px-2 py-0.5 font-mono text-slate-600 border-x border-slate-200">
104
+ <span className="px-2 py-0.5 font-mono text-[var(--muted-foreground)] border-x border-[var(--border)]">
105
105
  {status.activeWorkers}/{status.targetWorkers}w
106
106
  </span>
107
107
  <button
108
108
  type="button"
109
109
  onClick={() => scale(1)}
110
110
  disabled={loading || status.targetWorkers >= status.maxWorkers}
111
- className="px-1.5 py-0.5 hover:bg-slate-100 transition-colors disabled:opacity-30 text-slate-400"
111
+ className="px-1.5 py-0.5 hover:bg-[var(--muted)] transition-colors disabled:opacity-30 text-[var(--muted-foreground)]"
112
112
  >
113
113
  +
114
114
  </button>
@@ -116,7 +116,7 @@ export default function DaemonBar() {
116
116
 
117
117
  {/* Uptime */}
118
118
  {status.startedAt && (
119
- <span className="text-slate-400">
119
+ <span className="text-[var(--muted-foreground)]">
120
120
  up since {new Date(status.startedAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })}
121
121
  </span>
122
122
  )}
@@ -0,0 +1,140 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+
5
+ interface DirEntry {
6
+ name: string;
7
+ path: string;
8
+ }
9
+
10
+ interface BrowseResult {
11
+ current: string;
12
+ parent: string | null;
13
+ dirs: DirEntry[];
14
+ }
15
+
16
+ export default function DirectoryBrowser({
17
+ initialPath,
18
+ onSelect,
19
+ onCancel,
20
+ }: {
21
+ initialPath: string;
22
+ onSelect: (path: string) => void;
23
+ onCancel: () => void;
24
+ }) {
25
+ const [browsePath, setBrowsePath] = useState(initialPath || "");
26
+ const [result, setResult] = useState<BrowseResult | null>(null);
27
+ const [loading, setLoading] = useState(false);
28
+ const [error, setError] = useState<string | null>(null);
29
+ const listRef = useRef<HTMLDivElement>(null);
30
+
31
+ const fetchDir = useCallback(async (dirPath: string) => {
32
+ setLoading(true);
33
+ setError(null);
34
+ try {
35
+ const params = dirPath ? `?path=${encodeURIComponent(dirPath)}` : "";
36
+ const res = await fetch(`/api/filesystem/browse${params}`);
37
+ const data = await res.json();
38
+ if (!res.ok) {
39
+ setError(data.error || "Failed to browse");
40
+ return;
41
+ }
42
+ setResult(data);
43
+ setBrowsePath(data.current);
44
+ listRef.current?.scrollTo(0, 0);
45
+ } catch {
46
+ setError("Failed to connect");
47
+ } finally {
48
+ setLoading(false);
49
+ }
50
+ }, []);
51
+
52
+ useEffect(() => {
53
+ fetchDir(initialPath || "");
54
+ }, []);
55
+
56
+ return (
57
+ <div className="rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] overflow-hidden shadow-lg">
58
+ {/* Path bar */}
59
+ <div className="flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--muted)]/30">
60
+ <input
61
+ value={browsePath}
62
+ onChange={(e) => setBrowsePath(e.target.value)}
63
+ onKeyDown={(e) => {
64
+ if (e.key === "Enter") fetchDir(browsePath);
65
+ }}
66
+ className="input text-xs flex-1 py-1"
67
+ placeholder="Enter path..."
68
+ />
69
+ <button
70
+ type="button"
71
+ onClick={() => fetchDir(browsePath)}
72
+ className="text-[10px] font-bold uppercase tracking-wider text-[var(--primary)] hover:underline px-2 py-1 shrink-0"
73
+ >
74
+ Go
75
+ </button>
76
+ </div>
77
+
78
+ {/* Directory listing */}
79
+ <div ref={listRef} className="max-h-48 overflow-y-auto">
80
+ {loading && (
81
+ <div className="px-3 py-4 text-xs text-[var(--muted-foreground)] text-center">Loading...</div>
82
+ )}
83
+ {error && (
84
+ <div className="px-3 py-4 text-xs text-[var(--destructive)] text-center">{error}</div>
85
+ )}
86
+ {!loading && result && (
87
+ <div className="py-1">
88
+ {result.parent && (
89
+ <button
90
+ type="button"
91
+ onClick={() => fetchDir(result.parent!)}
92
+ className="w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2"
93
+ >
94
+ <span className="text-[var(--muted-foreground)]">↑</span>
95
+ <span className="text-[var(--muted-foreground)]">..</span>
96
+ </button>
97
+ )}
98
+ {result.dirs.length === 0 && !result.parent && (
99
+ <div className="px-3 py-3 text-xs text-[var(--muted-foreground)] text-center">No subdirectories</div>
100
+ )}
101
+ {result.dirs.map((dir) => (
102
+ <button
103
+ key={dir.path}
104
+ type="button"
105
+ onClick={() => fetchDir(dir.path)}
106
+ className="w-full text-left px-3 py-1.5 text-sm hover:bg-[var(--muted)]/50 transition-colors flex items-center gap-2"
107
+ >
108
+ <span className="text-[var(--muted-foreground)]">📁</span>
109
+ <span className="truncate">{dir.name}</span>
110
+ </button>
111
+ ))}
112
+ </div>
113
+ )}
114
+ </div>
115
+
116
+ {/* Actions */}
117
+ <div className="flex items-center justify-between px-3 py-2 border-t border-[var(--card-border)] bg-[var(--muted)]/30">
118
+ <span className="text-[10px] text-[var(--muted-foreground)] truncate max-w-[60%]">
119
+ {result?.current || browsePath}
120
+ </span>
121
+ <div className="flex items-center gap-2">
122
+ <button
123
+ type="button"
124
+ onClick={onCancel}
125
+ className="text-xs font-medium text-[var(--muted-foreground)] hover:underline px-2 py-1"
126
+ >
127
+ Cancel
128
+ </button>
129
+ <button
130
+ type="button"
131
+ onClick={() => onSelect(result?.current || browsePath)}
132
+ className="text-xs font-bold text-[var(--primary)] hover:underline px-2 py-1"
133
+ >
134
+ Select
135
+ </button>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ );
140
+ }
@@ -111,23 +111,23 @@ export const FirstRunModal: React.FC<FirstRunModalProps> = ({
111
111
  aria-modal="true"
112
112
  aria-labelledby={headingId}
113
113
  aria-describedby={descId}
114
- className="relative w-full max-w-lg rounded-xl bg-white shadow-xl ring-1 ring-slate-200 flex flex-col max-h-[90vh] min-w-0"
114
+ className="relative w-full max-w-lg rounded-xl bg-[var(--card-bg)] shadow-xl ring-1 ring-[var(--border)] flex flex-col max-h-[90vh] min-w-0"
115
115
  >
116
116
  {/* Header */}
117
- <div className="px-4 sm:px-6 pt-5 sm:pt-6 pb-4 border-b border-slate-100">
117
+ <div className="px-4 sm:px-6 pt-5 sm:pt-6 pb-4 border-b border-[var(--border)]">
118
118
  <h2
119
119
  id={headingId}
120
- className="text-lg font-semibold text-slate-900 leading-snug"
120
+ className="text-lg font-semibold text-[var(--foreground)] leading-snug"
121
121
  >
122
122
  Set up your workspace
123
123
  </h2>
124
124
  <p
125
125
  id={descId}
126
- className="mt-1 text-sm text-slate-500 leading-relaxed"
126
+ className="mt-1 text-sm text-[var(--muted-foreground)] leading-relaxed"
127
127
  >
128
128
  Add one or more folders where you keep your projects. agx-chat will
129
129
  use these to suggest files when you type{" "}
130
- <code className="rounded bg-slate-100 px-1 py-0.5 text-xs font-mono text-slate-700">
130
+ <code className="rounded bg-[var(--muted)] px-1 py-0.5 text-xs font-mono text-[var(--foreground)]">
131
131
  @filename
132
132
  </code>
133
133
  .
@@ -140,7 +140,7 @@ export const FirstRunModal: React.FC<FirstRunModalProps> = ({
140
140
  <section aria-labelledby="first-run-roots-heading">
141
141
  <h3
142
142
  id="first-run-roots-heading"
143
- className="text-sm font-semibold text-slate-700 mb-3"
143
+ className="text-sm font-semibold text-[var(--foreground)] mb-3"
144
144
  >
145
145
  Workspace folders
146
146
  </h3>
@@ -169,11 +169,11 @@ export const FirstRunModal: React.FC<FirstRunModalProps> = ({
169
169
  {/* Home search consent */}
170
170
  <section
171
171
  aria-labelledby="first-run-consent-heading"
172
- className="border-t border-slate-100 pt-5"
172
+ className="border-t border-[var(--border)] pt-5"
173
173
  >
174
174
  <h3
175
175
  id="first-run-consent-heading"
176
- className="text-sm font-semibold text-slate-700 mb-3"
176
+ className="text-sm font-semibold text-[var(--foreground)] mb-3"
177
177
  >
178
178
  Home directory search
179
179
  </h3>
@@ -186,11 +186,11 @@ export const FirstRunModal: React.FC<FirstRunModalProps> = ({
186
186
  </div>
187
187
 
188
188
  {/* Footer */}
189
- <div className="px-4 sm:px-6 py-4 border-t border-slate-100 flex flex-col-reverse sm:flex-row justify-between gap-3">
189
+ <div className="px-4 sm:px-6 py-4 border-t border-[var(--border)] flex flex-col-reverse sm:flex-row justify-between gap-3">
190
190
  <button
191
191
  type="button"
192
192
  onClick={handleSkip}
193
- className="text-sm text-slate-500 hover:text-slate-700 underline underline-offset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-400 rounded"
193
+ className="text-sm text-[var(--muted-foreground)] hover:text-[var(--foreground)] underline underline-offset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--border)] rounded"
194
194
  >
195
195
  Skip for now
196
196
  </button>
@@ -503,21 +503,21 @@ function StageColumn({
503
503
  data-testid={stage}
504
504
  className={`
505
505
  w-full xl:flex-shrink-0 xl:w-80 flex flex-col min-h-0
506
- bg-slate-100/40 rounded-2xl border border-slate-200/50 shadow-inner overflow-hidden
506
+ bg-[var(--muted)]/40 rounded-2xl border border-[var(--border)]/50 shadow-inner overflow-hidden
507
507
  transition-all duration-200
508
508
  ${isOver ? 'ring-2 ring-[var(--primary)] ring-opacity-30 bg-[var(--primary-muted)]/10' : ''}
509
509
  `}
510
510
  style={{ animationDelay: `${index * 50}ms` }}
511
511
  >
512
512
  {/* Glassmorphic Column Header */}
513
- <div className="p-4 flex items-center justify-between bg-white/30 backdrop-blur-sm border-b border-slate-200/20">
513
+ <div className="p-4 flex items-center justify-between bg-[var(--card-bg)]/30 backdrop-blur-sm border-b border-[var(--border)]/20">
514
514
  <div className="flex items-center gap-3">
515
515
  <span className="text-lg">{config.icon}</span>
516
- <h3 className="font-bold text-[11px] uppercase tracking-widest text-slate-500">
516
+ <h3 className="font-bold text-[11px] uppercase tracking-widest text-[var(--muted-foreground)]">
517
517
  {config.label}
518
518
  </h3>
519
519
  </div>
520
- <span className="text-[10px] font-bold text-slate-400 bg-white px-2 py-0.5 rounded-full border border-slate-100">
520
+ <span className="text-[10px] font-bold text-[var(--muted-foreground)] bg-[var(--card-bg)] px-2 py-0.5 rounded-full border border-[var(--border)]">
521
521
  {tasks.length}
522
522
  </span>
523
523
  </div>
@@ -598,10 +598,10 @@ function FlatColumnContent({ stage, tasks, allTasks, selectedTaskId, setSelected
598
598
  <button
599
599
  onClick={(e) => { e.stopPropagation(); handleAddClick(); }}
600
600
  disabled={isCreating}
601
- className="w-full py-2.5 rounded-xl border border-dashed border-slate-200 text-slate-300 text-[10px] font-bold uppercase tracking-widest hover:bg-white hover:border-indigo-200 hover:text-indigo-400 transition-all flex items-center justify-center gap-2 mb-1"
601
+ className="w-full py-2.5 rounded-xl border border-dashed border-[var(--border)] text-[var(--muted-foreground)] text-[10px] font-bold uppercase tracking-widest hover:bg-[var(--card-bg)] hover:border-indigo-200 hover:text-indigo-400 transition-all flex items-center justify-center gap-2 mb-1"
602
602
  >
603
603
  {isCreating ? (
604
- <span className="spinner w-3 h-3 border-2 border-slate-300 border-t-indigo-400 rounded-full" />
604
+ <span className="spinner w-3 h-3 border-2 border-[var(--border)] border-t-indigo-400 rounded-full" />
605
605
  ) : (
606
606
  <>
607
607
  <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none"
@@ -616,7 +616,7 @@ function FlatColumnContent({ stage, tasks, allTasks, selectedTaskId, setSelected
616
616
 
617
617
  {/* Inline editable placeholder */}
618
618
  {isAdding && (
619
- <div className="bg-white border-2 border-indigo-400 rounded-xl p-3 shadow-lg shadow-indigo-50 mb-1" onClick={(e) => e.stopPropagation()}>
619
+ <div className="bg-[var(--card-bg)] border-2 border-indigo-400 rounded-xl p-3 shadow-lg shadow-indigo-50 mb-1" onClick={(e) => e.stopPropagation()}>
620
620
  <input
621
621
  ref={inputRef}
622
622
  type="text"
@@ -631,9 +631,9 @@ function FlatColumnContent({ stage, tasks, allTasks, selectedTaskId, setSelected
631
631
  else handleSave();
632
632
  }}
633
633
  placeholder="Task title..."
634
- className="w-full text-sm font-medium text-slate-800 bg-transparent outline-none placeholder:text-slate-300"
634
+ className="w-full text-sm font-medium text-[var(--foreground)] bg-transparent outline-none placeholder:text-[var(--muted-foreground)]"
635
635
  />
636
- <p className="text-[10px] text-slate-400 mt-1">Press Enter to create · Esc to cancel</p>
636
+ <p className="text-[10px] text-[var(--muted-foreground)] mt-1">Press Enter to create · Esc to cancel</p>
637
637
  </div>
638
638
  )}
639
639
 
@@ -0,0 +1,149 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect } from "react";
4
+ import { WifiOff, Wifi } from "lucide-react";
5
+
6
+ interface OfflineIndicatorProps {
7
+ /** Custom check interval in milliseconds (default: 30000) */
8
+ checkInterval?: number;
9
+ /** Custom endpoint to check (default: /api/health) */
10
+ checkEndpoint?: string;
11
+ /** Show reconnecting status when coming back online */
12
+ showReconnecting?: boolean;
13
+ }
14
+
15
+ /**
16
+ * Offline indicator that shows when the app loses connection to the backend.
17
+ * Displays a subtle banner at the top of the screen.
18
+ */
19
+ export function OfflineIndicator({
20
+ checkInterval = 30000,
21
+ checkEndpoint = "/api/health",
22
+ showReconnecting = true,
23
+ }: OfflineIndicatorProps) {
24
+ const [isOnline, setIsOnline] = useState(true);
25
+ const [isReconnecting, setIsReconnecting] = useState(false);
26
+ const [lastOnlineTime, setLastOnlineTime] = useState<Date | null>(null);
27
+
28
+ useEffect(() => {
29
+ let checkTimer: NodeJS.Timeout;
30
+ let reconnectAttempts = 0;
31
+ const maxReconnectAttempts = 5;
32
+ const reconnectDelay = 2000;
33
+
34
+ const checkConnection = async () => {
35
+ try {
36
+ const response = await fetch(checkEndpoint, {
37
+ method: "HEAD",
38
+ cache: "no-store",
39
+ });
40
+
41
+ if (response.ok) {
42
+ setIsOnline(true);
43
+ setIsReconnecting(false);
44
+ setLastOnlineTime(new Date());
45
+ reconnectAttempts = 0;
46
+ } else {
47
+ setIsOnline(false);
48
+ }
49
+ } catch {
50
+ setIsOnline(false);
51
+ }
52
+ };
53
+
54
+ const handleOffline = () => {
55
+ setIsOnline(false);
56
+ setLastOnlineTime(new Date());
57
+ };
58
+
59
+ const handleOnline = () => {
60
+ setIsReconnecting(true);
61
+ checkConnection();
62
+ };
63
+
64
+ // Listen for browser online/offline events
65
+ window.addEventListener("offline", handleOffline);
66
+ window.addEventListener("online", handleOnline);
67
+
68
+ // Periodic health checks
69
+ checkTimer = setInterval(checkConnection, checkInterval);
70
+
71
+ // Initial check
72
+ checkConnection();
73
+
74
+ return () => {
75
+ window.removeEventListener("offline", handleOffline);
76
+ window.removeEventListener("online", handleOnline);
77
+ clearInterval(checkTimer);
78
+ };
79
+ }, [checkEndpoint, checkInterval]);
80
+
81
+ // Don't render anything when online
82
+ if (isOnline && !isReconnecting) {
83
+ return null;
84
+ }
85
+
86
+ return (
87
+ <div
88
+ className="fixed top-0 left-0 right-0 z-[100] px-4 py-2 flex items-center justify-center gap-2 text-sm font-medium animate-fade-in-down"
89
+ style={{
90
+ background: isOnline
91
+ ? "var(--success-muted)"
92
+ : "var(--destructive-muted)",
93
+ color: isOnline ? "var(--success)" : "var(--destructive)",
94
+ borderBottom: `1px solid ${isOnline ? "var(--status-completed-border)" : "var(--status-failed-border)"}`,
95
+ }}
96
+ >
97
+ {isOnline ? (
98
+ <>
99
+ <Wifi size={14} />
100
+ <span>Reconnected</span>
101
+ </>
102
+ ) : (
103
+ <>
104
+ <WifiOff size={14} />
105
+ <span>Offline</span>
106
+ {lastOnlineTime && (
107
+ <span className="opacity-70">
108
+ — Last synced {formatTimeAgo(lastOnlineTime)}
109
+ </span>
110
+ )}
111
+ </>
112
+ )}
113
+ </div>
114
+ );
115
+ }
116
+
117
+ function formatTimeAgo(date: Date): string {
118
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
119
+
120
+ if (seconds < 60) return "just now";
121
+ if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
122
+ if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
123
+ return `${Math.floor(seconds / 86400)}d ago`;
124
+ }
125
+
126
+ // Add the animation keyframe to globals.css or inline
127
+ const styles = `
128
+ @keyframes fade-in-down {
129
+ from {
130
+ opacity: 0;
131
+ transform: translateY(-100%);
132
+ }
133
+ to {
134
+ opacity: 1;
135
+ transform: translateY(0);
136
+ }
137
+ }
138
+ `;
139
+
140
+ // Inject styles if not already present
141
+ if (typeof document !== "undefined") {
142
+ const styleId = "offline-indicator-styles";
143
+ if (!document.getElementById(styleId)) {
144
+ const style = document.createElement("style");
145
+ style.id = styleId;
146
+ style.textContent = styles;
147
+ document.head.appendChild(style);
148
+ }
149
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { useCallback, useEffect, useRef, useState } from "react";
4
4
  import { ProjectWithRepos } from "@/hooks/useProjects";
5
+ import DirectoryBrowser from "@/components/DirectoryBrowser";
5
6
 
6
7
  export interface ProjectFormState {
7
8
  name: string;
@@ -135,6 +136,7 @@ function ProjectFormFields({
135
136
  onRemoveRepo: (index: number) => void;
136
137
  }) {
137
138
  const [expandedRepoIndexes, setExpandedRepoIndexes] = useState<number[]>([]);
139
+ const [browsingRepoIndex, setBrowsingRepoIndex] = useState<number | null>(null);
138
140
  const previousRepoCountRef = useRef(0);
139
141
 
140
142
  useEffect(() => {
@@ -266,13 +268,35 @@ function ProjectFormFields({
266
268
  className="input text-sm"
267
269
  disabled={isSubmitting}
268
270
  />
269
- <input
270
- value={repo.path}
271
- onChange={(e) => onRepoChange(index, "path", e.target.value)}
272
- placeholder="Local path (mandatory)"
273
- className="input text-sm"
274
- disabled={isSubmitting}
275
- />
271
+ <div className="flex items-center gap-2">
272
+ <input
273
+ value={repo.path}
274
+ onChange={(e) => onRepoChange(index, "path", e.target.value)}
275
+ placeholder="Local path (mandatory)"
276
+ className="input text-sm flex-1"
277
+ disabled={isSubmitting}
278
+ />
279
+ <button
280
+ type="button"
281
+ onClick={() => setBrowsingRepoIndex(browsingRepoIndex === index ? null : index)}
282
+ className="px-3 py-2 rounded-xl border border-[var(--card-border)] bg-[var(--muted)]/30 hover:bg-[var(--muted)]/60 transition-colors text-xs font-semibold text-[var(--muted-foreground)] whitespace-nowrap"
283
+ disabled={isSubmitting}
284
+ >
285
+ Browse
286
+ </button>
287
+ </div>
288
+ {browsingRepoIndex === index && (
289
+ <div className="md:col-span-2">
290
+ <DirectoryBrowser
291
+ initialPath={repo.path || ""}
292
+ onSelect={(selectedPath) => {
293
+ onRepoChange(index, "path", selectedPath);
294
+ setBrowsingRepoIndex(null);
295
+ }}
296
+ onCancel={() => setBrowsingRepoIndex(null)}
297
+ />
298
+ </div>
299
+ )}
276
300
  <div className="md:col-span-2">
277
301
  <textarea
278
302
  value={repo.notes}
@@ -381,7 +405,7 @@ export default function ProjectModal({
381
405
  {projectGeneratedKnowledge.length > 0 ? (
382
406
  <div className="mt-3 space-y-2">
383
407
  {projectGeneratedKnowledge.slice(0, 5).map((item) => (
384
- <div key={item.id} className="rounded-xl border border-[var(--card-border)] bg-white px-3 py-2 text-sm text-[var(--foreground)]">
408
+ <div key={item.id} className="rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-2 text-sm text-[var(--foreground)]">
385
409
  <div>{item.content}</div>
386
410
  {item.created_at ? (
387
411
  <div className="mt-1 text-[11px] text-[var(--muted-foreground)]">{new Date(item.created_at).toLocaleString()}</div>