conductor-oss 0.7.0 → 0.8.0

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 (381) hide show
  1. package/README.md +173 -134
  2. package/dist/backend.d.ts.map +1 -1
  3. package/dist/backend.js +18 -2
  4. package/dist/backend.js.map +1 -1
  5. package/dist/commands/dashboard.d.ts.map +1 -1
  6. package/dist/commands/dashboard.js +13 -7
  7. package/dist/commands/dashboard.js.map +1 -1
  8. package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
  9. package/node_modules/@conductor-oss/core/dist/config.js +6 -1
  10. package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
  11. package/package.json +8 -6
  12. package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
  13. package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +2 -0
  14. package/web/.next/standalone/packages/web/.next/build-manifest.json +7 -7
  15. package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
  16. package/web/.next/standalone/packages/web/.next/routes-manifest.json +44 -1
  17. package/web/.next/standalone/packages/web/.next/server/app/_global-error/page/build-manifest.json +5 -5
  18. package/web/.next/standalone/packages/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  19. package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
  20. package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +7 -7
  21. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  22. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  23. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  24. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  25. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  26. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/build-manifest.json +5 -5
  27. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  28. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js +2 -2
  29. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  30. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  31. package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
  32. package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +11 -11
  33. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
  34. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  35. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +6 -6
  36. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  37. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  38. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  39. package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +2 -2
  40. package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
  41. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +2 -2
  42. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -1
  43. package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js +2 -2
  44. package/web/.next/standalone/packages/web/.next/server/app/api/app-update/route.js.nft.json +1 -1
  45. package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +2 -2
  46. package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
  47. package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +2 -2
  48. package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
  49. package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js +2 -2
  50. package/web/.next/standalone/packages/web/.next/server/app/api/boards/comments/route.js.nft.json +1 -1
  51. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +2 -2
  52. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
  53. package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +2 -2
  54. package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
  55. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js +2 -2
  56. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/open/route.js.nft.json +1 -1
  57. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +2 -2
  58. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
  59. package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +2 -2
  60. package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
  61. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +2 -2
  62. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -1
  63. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +2 -2
  64. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
  65. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +2 -2
  66. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -1
  67. package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +2 -2
  68. package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
  69. package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js +2 -2
  70. package/web/.next/standalone/packages/web/.next/server/app/api/github/webhook/route.js.nft.json +1 -1
  71. package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +2 -2
  72. package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
  73. package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +2 -2
  74. package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
  75. package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +2 -2
  76. package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
  77. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +2 -2
  78. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
  79. package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js +2 -2
  80. package/web/.next/standalone/packages/web/.next/server/app/api/remote-access/route.js.nft.json +1 -1
  81. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +2 -2
  82. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  83. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +2 -2
  84. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
  85. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +2 -2
  86. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
  87. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +2 -2
  88. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -1
  89. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +2 -2
  90. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
  91. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +2 -2
  92. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
  93. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +2 -2
  94. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
  95. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js +2 -2
  96. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/stream/route.js.nft.json +1 -1
  97. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +2 -2
  98. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
  99. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +2 -2
  100. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
  101. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js +2 -2
  102. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/interrupt/route.js.nft.json +1 -1
  103. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +2 -2
  104. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
  105. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +2 -2
  106. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
  107. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +2 -2
  108. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
  109. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +2 -2
  110. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
  111. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js +1 -1
  112. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/dom/route.js.nft.json +1 -1
  113. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js +1 -1
  114. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/route.js.nft.json +1 -1
  115. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js +1 -1
  116. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/preview/screenshot/route.js.nft.json +1 -1
  117. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +2 -2
  118. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
  119. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +2 -2
  120. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  121. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +2 -2
  122. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
  123. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/app-paths-manifest.json +3 -0
  124. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/build-manifest.json +11 -0
  125. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route/server-reference-manifest.json +4 -0
  126. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js +10 -0
  127. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js.map +5 -0
  128. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route.js.nft.json +1 -0
  129. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/connection/route_client-reference-manifest.js +2 -0
  130. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/app-paths-manifest.json +3 -0
  131. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/build-manifest.json +11 -0
  132. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route/server-reference-manifest.json +4 -0
  133. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js +10 -0
  134. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js.map +5 -0
  135. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route.js.nft.json +1 -0
  136. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/terminal/snapshot/route_client-reference-manifest.js +2 -0
  137. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +2 -2
  138. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  139. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +2 -2
  140. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
  141. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +2 -2
  142. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
  143. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +2 -2
  144. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  145. package/web/.next/standalone/packages/web/.next/server/app/page/build-manifest.json +5 -5
  146. package/web/.next/standalone/packages/web/.next/server/app/page/react-loadable-manifest.json +4 -4
  147. package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
  148. package/web/.next/standalone/packages/web/.next/server/app/page.js +2 -2
  149. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  150. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  151. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/build-manifest.json +5 -5
  152. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
  153. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js +2 -2
  154. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  155. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  156. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/build-manifest.json +5 -5
  157. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
  158. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  159. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  160. package/web/.next/standalone/packages/web/.next/server/app/unlock/page/build-manifest.json +5 -5
  161. package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +14 -14
  162. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  163. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  164. package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +2 -0
  165. package/web/.next/standalone/packages/web/.next/server/chunks/26076_server_app_api_sessions_[id]_terminal_connection_route_actions_46c114ee.js +3 -0
  166. package/web/.next/standalone/packages/web/.next/server/chunks/26076_server_app_api_sessions_[id]_terminal_snapshot_route_actions_cfb4de43.js +3 -0
  167. package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_sessions_[id]_restore_route_actions_41a4c356.js +1 -1
  168. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b716459f._.js → [root-of-the-server]__08556fc3._.js} +2 -2
  169. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__624bcdc9._.js → [root-of-the-server]__0e496df1._.js} +2 -2
  170. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9bf61231._.js → [root-of-the-server]__115b433b._.js} +2 -2
  171. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__70929198._.js → [root-of-the-server]__120a0868._.js} +2 -2
  172. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__17d710ef._.js → [root-of-the-server]__1a623333._.js} +2 -2
  173. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__262e987e._.js +1 -1
  174. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__31053ac2._.js → [root-of-the-server]__2713bac9._.js} +2 -2
  175. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8c576b6a._.js → [root-of-the-server]__2798ac7c._.js} +2 -2
  176. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__747e6415._.js → [root-of-the-server]__27b2bd14._.js} +2 -2
  177. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__a4b1a94c._.js → [root-of-the-server]__29d94573._.js} +2 -2
  178. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__732fc06e._.js → [root-of-the-server]__2b59cba9._.js} +2 -2
  179. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2ce39d51._.js +1 -1
  180. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3e507276._.js → [root-of-the-server]__2fea4a4c._.js} +2 -2
  181. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__59635ca5._.js → [root-of-the-server]__36559d88._.js} +2 -2
  182. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__f0ec1021._.js → [root-of-the-server]__4117784b._.js} +2 -2
  183. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__543bc377._.js → [root-of-the-server]__43b35d39._.js} +2 -2
  184. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__ba70a88e._.js → [root-of-the-server]__444bf146._.js} +2 -2
  185. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__fd0a681b._.js → [root-of-the-server]__45483f4b._.js} +2 -2
  186. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__98f4a7bd._.js → [root-of-the-server]__4644a89e._.js} +2 -2
  187. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c78886c._.js +3 -0
  188. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__e7aaee2d._.js → [root-of-the-server]__4cea5dca._.js} +2 -2
  189. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__33494588._.js → [root-of-the-server]__575c7392._.js} +2 -2
  190. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__eae97345._.js → [root-of-the-server]__57605af7._.js} +2 -2
  191. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__be233a9f._.js → [root-of-the-server]__57c8ca1a._.js} +2 -2
  192. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e2b35cd._.js +3 -0
  193. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ace49d1._.js → [root-of-the-server]__5f5433df._.js} +2 -2
  194. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6313c91e._.js +3 -3
  195. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3dc4c761._.js → [root-of-the-server]__6a8b5dc7._.js} +2 -2
  196. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3318d8a1._.js → [root-of-the-server]__717081d9._.js} +2 -2
  197. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__ae73aa49._.js → [root-of-the-server]__75668566._.js} +2 -2
  198. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b4039db5._.js → [root-of-the-server]__7a6210dc._.js} +2 -2
  199. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__34e636e5._.js → [root-of-the-server]__7ca5b93b._.js} +2 -2
  200. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b53b70e7._.js → [root-of-the-server]__8462ddf1._.js} +2 -2
  201. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__3937a996._.js → [root-of-the-server]__9e363e9c._.js} +2 -2
  202. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__4c5f7cab._.js → [root-of-the-server]__a0467c5b._.js} +2 -2
  203. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9576223c._.js → [root-of-the-server]__a8d68307._.js} +2 -2
  204. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__82e86bb6._.js → [root-of-the-server]__ac79a67b._.js} +2 -2
  205. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__bcd0c846._.js → [root-of-the-server]__af5be1d9._.js} +2 -2
  206. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b3cd93ca._.js +3 -0
  207. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__540ebc7f._.js → [root-of-the-server]__b7314f2a._.js} +2 -2
  208. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__bb2675cd._.js → [root-of-the-server]__bcbc6330._.js} +2 -2
  209. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__fe4c1384._.js → [root-of-the-server]__bfbdd808._.js} +2 -2
  210. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__b00db558._.js → [root-of-the-server]__c205eff4._.js} +2 -2
  211. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__c455995a._.js → [root-of-the-server]__c39ceb71._.js} +2 -2
  212. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c9cb9ac6._.js +3 -0
  213. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cff9ddef._.js +1 -1
  214. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__7c87a52f._.js → [root-of-the-server]__d65b8403._.js} +2 -2
  215. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__eb6e6bb9._.js → [root-of-the-server]__d7b9cb55._.js} +2 -2
  216. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__53daf5c6._.js → [root-of-the-server]__df103a4a._.js} +2 -2
  217. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea845f9f._.js +1 -1
  218. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__8ee7749b._.js → [root-of-the-server]__f5a16619._.js} +2 -2
  219. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__9940de77._.js → [root-of-the-server]__f62d8a1f._.js} +2 -2
  220. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__5df70a62._.js → [root-of-the-server]__f7c7ed71._.js} +2 -2
  221. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__520aa408._.js → [root-of-the-server]__fa5bbdc8._.js} +2 -2
  222. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__e385846c._.js → [root-of-the-server]__fed9223f._.js} +2 -2
  223. package/web/.next/standalone/packages/web/.next/server/chunks/_2c837d66._.js +5 -5
  224. package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_eaad1f33.js +1 -1
  225. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__000b8c99._.js +1 -1
  226. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__4f387f9d._.js → [root-of-the-server]__10a850c6._.js} +2 -2
  227. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__7829c78d._.js → [root-of-the-server]__17f5cb6a._.js} +2 -2
  228. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29d8d063._.js +1 -1
  229. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__99387ae7._.js → [root-of-the-server]__6647f7ec._.js} +2 -2
  230. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__7bb2062e._.js +3 -0
  231. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__a509d17d._.js → [root-of-the-server]__9f45b36b._.js} +2 -2
  232. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__bc8d015f._.js → [root-of-the-server]__f8f50c0b._.js} +2 -2
  233. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
  234. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_367680b9._.js → _1f11ad88._.js} +2 -2
  235. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_1fc34e32._.js +3 -0
  236. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_230c0c14._.js +4 -4
  237. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_4a52b10d._.js +3 -0
  238. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_b6d31783._.js → _532f707d._.js} +3 -3
  239. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
  240. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_6cfd06c2._.js +1 -1
  241. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
  242. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b214b154._.js +1 -1
  243. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b8358e63._.js +3 -0
  244. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
  245. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_8982bbf3._.js → _de3b7194._.js} +2 -2
  246. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
  247. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_226037d7._.js +3 -0
  248. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{node_modules_@clerk_nextjs_dist_esm_app-router_3c8da5a6._.js → node_modules_@clerk_nextjs_dist_esm_app-router_aed062ea._.js} +2 -2
  249. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@radix-ui_d03fdd57._.js +3 -0
  250. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_addon-fit_lib_addon-fit_mjs_9b7cb17b._.js +3 -0
  251. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_addon-search_lib_addon-search_mjs_8d69d9d7._.js +11 -0
  252. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@xterm_xterm_lib_xterm_mjs_a1a7b9e9._.js +20 -0
  253. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_afb6e107._.js +3 -0
  254. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_refresh-cw_50f1c1e7.js +3 -0
  255. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_2df23979._.js +1 -1
  256. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_cd51dad4.js +2 -2
  257. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_board_WorkspaceKanban_tsx_735b7999._.js +1 -1
  258. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_sessions_SessionDetail_tsx_5fcad270._.js +6 -0
  259. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_features_dashboard_DashboardClient_tsx_81ae42b0._.js +1 -1
  260. package/web/.next/standalone/packages/web/.next/server/functions-config-manifest.json +3 -1
  261. package/web/.next/standalone/packages/web/.next/server/middleware-build-manifest.js +5 -5
  262. package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
  263. package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
  264. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  265. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +15 -15
  266. package/web/.next/standalone/packages/web/.next/static/chunks/0cdc18649f440c71.js +1 -0
  267. package/web/.next/standalone/packages/web/.next/static/chunks/0f7eb6d5a59ee3ae.js +1 -0
  268. package/web/.next/standalone/packages/web/.next/static/chunks/12d33f33839d69eb.js +1 -0
  269. package/web/.next/standalone/packages/web/.next/static/chunks/146ec959503d40d4.js +1 -0
  270. package/web/.next/standalone/packages/web/.next/static/chunks/1fabe72716ad1fda.css +3 -0
  271. package/web/.next/standalone/packages/web/.next/static/chunks/2d61dae0bfb5ab41.js +1 -0
  272. package/web/.next/standalone/packages/web/.next/static/chunks/{c4c79d5d0b280aeb.js → 2f236954d6a65e12.js} +1 -1
  273. package/web/.next/standalone/packages/web/.next/static/chunks/3cdf839644f79d43.js +18 -0
  274. package/web/.next/standalone/packages/web/.next/static/chunks/3e3880b9a3d2d1d5.js +6 -0
  275. package/web/.next/standalone/packages/web/.next/static/chunks/486ac8976a12f1e5.js +1 -0
  276. package/web/.next/standalone/packages/web/.next/static/chunks/6850a6cda159c98d.js +1 -0
  277. package/web/.next/{static/chunks/06bdd070b8d25946.js → standalone/packages/web/.next/static/chunks/69be39811437728d.js} +1 -1
  278. package/web/.next/standalone/packages/web/.next/static/chunks/6cec31da5f555e99.js +1 -0
  279. package/web/.next/standalone/packages/web/.next/static/chunks/70d1e7a526f0f4e2.js +9 -0
  280. package/web/.next/standalone/packages/web/.next/static/chunks/{ba2aa8b54e912820.js → 723acbe92d3f9e7e.js} +1 -1
  281. package/web/.next/standalone/packages/web/.next/static/chunks/739c6f71243d76d8.js +1 -0
  282. package/web/.next/standalone/packages/web/.next/static/chunks/a6ec1ab37eb7b410.js +1 -0
  283. package/web/.next/standalone/packages/web/.next/static/chunks/af8bfb72187b7cbf.js +1 -0
  284. package/web/.next/standalone/packages/web/.next/static/chunks/c993a1a4204fce88.js +4 -0
  285. package/web/.next/standalone/packages/web/.next/static/chunks/ca3e38b4495a3d39.js +1 -0
  286. package/web/.next/standalone/packages/web/.next/static/chunks/{45bd2451c2b0790c.js → caf02f8136b16992.js} +2 -2
  287. package/web/.next/standalone/packages/web/.next/static/chunks/d4269c59429734ad.js +1 -0
  288. package/web/.next/standalone/packages/web/.next/static/chunks/{28eac764d6544827.js → e5bcec03f80af56a.js} +1 -1
  289. package/web/.next/standalone/packages/web/.next/static/chunks/{turbopack-49f4119854e8206e.js → turbopack-26870d017b23fcf0.js} +1 -1
  290. package/web/.next/standalone/packages/web/next.config.ts +16 -0
  291. package/web/.next/standalone/packages/web/package.json +3 -1
  292. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/terminal/connection/route.ts +64 -0
  293. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/terminal/snapshot/route.ts +14 -0
  294. package/web/.next/standalone/packages/web/src/app/globals.css +12 -4
  295. package/web/.next/standalone/packages/web/src/components/Dashboard.tsx +1 -5
  296. package/web/.next/standalone/packages/web/src/components/TerminalView.tsx +528 -100
  297. package/web/.next/standalone/packages/web/src/components/board/WorkspaceKanban.tsx +3 -3
  298. package/web/.next/standalone/packages/web/src/components/layout/AppShell.tsx +3 -3
  299. package/web/.next/standalone/packages/web/src/components/layout/Sidebar.tsx +29 -18
  300. package/web/.next/standalone/packages/web/src/components/layout/TopBar.tsx +3 -3
  301. package/web/.next/standalone/packages/web/src/components/sessions/ChatPanel.tsx +61 -5
  302. package/web/.next/standalone/packages/web/src/components/sessions/SessionDetail.tsx +99 -46
  303. package/web/.next/standalone/packages/web/src/components/sessions/SessionPreview.tsx +231 -233
  304. package/web/.next/standalone/packages/web/src/components/sessions/SessionTerminal.tsx +1212 -0
  305. package/web/.next/standalone/packages/web/src/components/sessions/terminalInsert.ts +6 -0
  306. package/web/.next/standalone/packages/web/src/components/terminal/xtermTheme.ts +70 -0
  307. package/web/.next/standalone/packages/web/src/components/ui/Tabs.tsx +2 -2
  308. package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +10 -12
  309. package/web/.next/standalone/packages/web/src/features/sessions/SessionPageClient.tsx +2 -2
  310. package/web/.next/standalone/packages/web/src/lib/devPreviewBrowser.ts +15 -3
  311. package/web/.next/static/chunks/0cdc18649f440c71.js +1 -0
  312. package/web/.next/static/chunks/0f7eb6d5a59ee3ae.js +1 -0
  313. package/web/.next/static/chunks/12d33f33839d69eb.js +1 -0
  314. package/web/.next/static/chunks/146ec959503d40d4.js +1 -0
  315. package/web/.next/static/chunks/1fabe72716ad1fda.css +3 -0
  316. package/web/.next/static/chunks/2d61dae0bfb5ab41.js +1 -0
  317. package/web/.next/static/chunks/{c4c79d5d0b280aeb.js → 2f236954d6a65e12.js} +1 -1
  318. package/web/.next/static/chunks/3cdf839644f79d43.js +18 -0
  319. package/web/.next/static/chunks/3e3880b9a3d2d1d5.js +6 -0
  320. package/web/.next/static/chunks/486ac8976a12f1e5.js +1 -0
  321. package/web/.next/static/chunks/6850a6cda159c98d.js +1 -0
  322. package/web/.next/{standalone/packages/web/.next/static/chunks/06bdd070b8d25946.js → static/chunks/69be39811437728d.js} +1 -1
  323. package/web/.next/static/chunks/6cec31da5f555e99.js +1 -0
  324. package/web/.next/static/chunks/70d1e7a526f0f4e2.js +9 -0
  325. package/web/.next/static/chunks/{ba2aa8b54e912820.js → 723acbe92d3f9e7e.js} +1 -1
  326. package/web/.next/static/chunks/739c6f71243d76d8.js +1 -0
  327. package/web/.next/static/chunks/a6ec1ab37eb7b410.js +1 -0
  328. package/web/.next/static/chunks/af8bfb72187b7cbf.js +1 -0
  329. package/web/.next/static/chunks/c993a1a4204fce88.js +4 -0
  330. package/web/.next/static/chunks/ca3e38b4495a3d39.js +1 -0
  331. package/web/.next/static/chunks/{45bd2451c2b0790c.js → caf02f8136b16992.js} +2 -2
  332. package/web/.next/static/chunks/d4269c59429734ad.js +1 -0
  333. package/web/.next/static/chunks/{28eac764d6544827.js → e5bcec03f80af56a.js} +1 -1
  334. package/web/.next/static/chunks/{turbopack-49f4119854e8206e.js → turbopack-26870d017b23fcf0.js} +1 -1
  335. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__29091976._.js +0 -3
  336. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b388693f._.js +0 -3
  337. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__bc9ab6c6._.js +0 -3
  338. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__d1efcbf0._.js +0 -3
  339. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_e1c18705._.js +0 -3
  340. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_af0671be._.js +0 -3
  341. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@radix-ui_02f0d3f0._.js +0 -3
  342. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_message-square_2e76b8d9.js +0 -3
  343. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_ui_Tooltip_tsx_6becc8ca._.js +0 -3
  344. package/web/.next/standalone/packages/web/.next/static/chunks/07f3b9a104ce0ff4.js +0 -1
  345. package/web/.next/standalone/packages/web/.next/static/chunks/1004422d31074d62.js +0 -1
  346. package/web/.next/standalone/packages/web/.next/static/chunks/2bc11b604b131190.js +0 -1
  347. package/web/.next/standalone/packages/web/.next/static/chunks/30ababddac1b82dc.js +0 -1
  348. package/web/.next/standalone/packages/web/.next/static/chunks/5f2995585c1ac66a.js +0 -1
  349. package/web/.next/standalone/packages/web/.next/static/chunks/64f0033534ca1ad3.css +0 -3
  350. package/web/.next/standalone/packages/web/.next/static/chunks/7daf09cc7388f426.js +0 -1
  351. package/web/.next/standalone/packages/web/.next/static/chunks/a28bcda8dd6b68ee.js +0 -1
  352. package/web/.next/standalone/packages/web/.next/static/chunks/aabc80195233b4da.js +0 -1
  353. package/web/.next/standalone/packages/web/.next/static/chunks/b31c8692e1da69ef.js +0 -6
  354. package/web/.next/standalone/packages/web/.next/static/chunks/b6069d0eb07a978f.js +0 -1
  355. package/web/.next/standalone/packages/web/.next/static/chunks/c2caa064748bb0b5.js +0 -1
  356. package/web/.next/standalone/packages/web/.next/static/chunks/c5f8e486166298c2.js +0 -1
  357. package/web/.next/standalone/packages/web/.next/static/chunks/d6a81d2f8b98b4be.js +0 -1
  358. package/web/.next/standalone/packages/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +0 -1
  359. package/web/.next/standalone/packages/web/.next/static/chunks/ebaa0c535c4135f1.js +0 -1
  360. package/web/.next/static/chunks/07f3b9a104ce0ff4.js +0 -1
  361. package/web/.next/static/chunks/1004422d31074d62.js +0 -1
  362. package/web/.next/static/chunks/2bc11b604b131190.js +0 -1
  363. package/web/.next/static/chunks/30ababddac1b82dc.js +0 -1
  364. package/web/.next/static/chunks/5f2995585c1ac66a.js +0 -1
  365. package/web/.next/static/chunks/64f0033534ca1ad3.css +0 -3
  366. package/web/.next/static/chunks/7daf09cc7388f426.js +0 -1
  367. package/web/.next/static/chunks/a28bcda8dd6b68ee.js +0 -1
  368. package/web/.next/static/chunks/aabc80195233b4da.js +0 -1
  369. package/web/.next/static/chunks/b31c8692e1da69ef.js +0 -6
  370. package/web/.next/static/chunks/b6069d0eb07a978f.js +0 -1
  371. package/web/.next/static/chunks/c2caa064748bb0b5.js +0 -1
  372. package/web/.next/static/chunks/c5f8e486166298c2.js +0 -1
  373. package/web/.next/static/chunks/d6a81d2f8b98b4be.js +0 -1
  374. package/web/.next/static/chunks/e9d0e95bbaa0f4fb.js +0 -1
  375. package/web/.next/static/chunks/ebaa0c535c4135f1.js +0 -1
  376. /package/web/.next/standalone/packages/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_buildManifest.js +0 -0
  377. /package/web/.next/standalone/packages/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_clientMiddlewareManifest.json +0 -0
  378. /package/web/.next/standalone/packages/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_ssgManifest.js +0 -0
  379. /package/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_buildManifest.js +0 -0
  380. /package/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_clientMiddlewareManifest.json +0 -0
  381. /package/web/.next/static/{X1r0VPbixkgEYAELz0R1i → 0erIuL9LSGhZ5_YeWB5Mc}/_ssgManifest.js +0 -0
@@ -0,0 +1,6 @@
1
+ export interface TerminalInsertRequest {
2
+ nonce: number;
3
+ inlineText: string;
4
+ draftText: string;
5
+ successMessage: string;
6
+ }
@@ -0,0 +1,70 @@
1
+ import type { ITerminalOptions } from "@xterm/xterm";
2
+
3
+ export const SUPERSET_TERMINAL_FONT_FAMILY = [
4
+ "MesloLGM Nerd Font",
5
+ "MesloLGM NF",
6
+ "MesloLGS NF",
7
+ "MesloLGS Nerd Font",
8
+ "Hack Nerd Font",
9
+ "FiraCode Nerd Font",
10
+ "JetBrainsMono Nerd Font",
11
+ "CaskaydiaCove Nerd Font",
12
+ "Menlo",
13
+ "Monaco",
14
+ '"Courier New"',
15
+ "SF Mono",
16
+ "SF Pro",
17
+ "monospace",
18
+ ].join(", ");
19
+
20
+ const SUPERSET_TERMINAL_THEME_DARK: NonNullable<ITerminalOptions["theme"]> = {
21
+ background: "#000000",
22
+ foreground: "#ffffff",
23
+ cursor: "#ffffff",
24
+ cursorAccent: "#000000",
25
+ selectionBackground: "#4d4d4d",
26
+ black: "#2e3436",
27
+ red: "#cc0000",
28
+ green: "#4e9a06",
29
+ yellow: "#c4a000",
30
+ blue: "#3465a4",
31
+ magenta: "#75507b",
32
+ cyan: "#06989a",
33
+ white: "#d3d7cf",
34
+ brightBlack: "#555753",
35
+ brightRed: "#ef2929",
36
+ brightGreen: "#8ae234",
37
+ brightYellow: "#fce94f",
38
+ brightBlue: "#729fcf",
39
+ brightMagenta: "#ad7fa8",
40
+ brightCyan: "#34e2e2",
41
+ brightWhite: "#eeeeec",
42
+ };
43
+
44
+ const SUPERSET_TERMINAL_THEME_LIGHT: NonNullable<ITerminalOptions["theme"]> = {
45
+ background: "#ffffff",
46
+ foreground: "#000000",
47
+ cursor: "#000000",
48
+ cursorAccent: "#ffffff",
49
+ selectionBackground: "#add6ff",
50
+ black: "#2e3436",
51
+ red: "#cc0000",
52
+ green: "#4e9a06",
53
+ yellow: "#c4a000",
54
+ blue: "#3465a4",
55
+ magenta: "#75507b",
56
+ cyan: "#06989a",
57
+ white: "#d3d7cf",
58
+ brightBlack: "#555753",
59
+ brightRed: "#ef2929",
60
+ brightGreen: "#8ae234",
61
+ brightYellow: "#fce94f",
62
+ brightBlue: "#729fcf",
63
+ brightMagenta: "#ad7fa8",
64
+ brightCyan: "#34e2e2",
65
+ brightWhite: "#eeeeec",
66
+ };
67
+
68
+ export function getSupersetLikeTerminalTheme(isLight: boolean): NonNullable<ITerminalOptions["theme"]> {
69
+ return isLight ? SUPERSET_TERMINAL_THEME_LIGHT : SUPERSET_TERMINAL_THEME_DARK;
70
+ }
@@ -13,7 +13,7 @@ export const TabsList = forwardRef<
13
13
  <TabsPrimitive.List
14
14
  ref={ref}
15
15
  className={cn(
16
- "inline-flex max-w-full items-center gap-0.5 overflow-x-auto rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-0.5 whitespace-nowrap [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
16
+ "inline-flex max-w-full items-center gap-0.5 overflow-x-auto rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] p-0.5 whitespace-nowrap touch-pan-x [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
17
17
  className,
18
18
  )}
19
19
  {...props}
@@ -28,7 +28,7 @@ export const TabsTrigger = forwardRef<
28
28
  <TabsPrimitive.Trigger
29
29
  ref={ref}
30
30
  className={cn(
31
- "inline-flex shrink-0 items-center gap-1.5 rounded-[3px] px-2.5 py-1.5 text-[12px] text-[var(--vk-text-muted)]",
31
+ "inline-flex min-h-[34px] shrink-0 items-center gap-1.5 rounded-[3px] px-2.5 py-1.5 text-[12px] text-[var(--vk-text-muted)]",
32
32
  "data-[state=active]:bg-[var(--vk-bg-active)] data-[state=active]:text-[var(--vk-text-normal)]",
33
33
  "hover:text-[var(--vk-text-normal)]",
34
34
  "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--vk-orange)]",
@@ -1490,7 +1490,6 @@ export default function DashboardClient() {
1490
1490
 
1491
1491
  const handleCreateSession = useCallback(async (options?: CreateSessionOptions) => {
1492
1492
  const trimmedPrompt = prompt.trim();
1493
- if (!trimmedPrompt) return;
1494
1493
  const resolvedModel = resolveModelSelectionValue(launchModelSelection);
1495
1494
  const resolvedReasoningEffort = resolveReasoningSelectionValue(launchModelSelection);
1496
1495
 
@@ -1552,8 +1551,7 @@ export default function DashboardClient() {
1552
1551
  {
1553
1552
  projectId,
1554
1553
  sessionId: data.session.id,
1555
- workspaceView: "chat",
1556
- tab: "chat",
1554
+ tab: null,
1557
1555
  },
1558
1556
  "push",
1559
1557
  );
@@ -1673,7 +1671,7 @@ export default function DashboardClient() {
1673
1671
  {
1674
1672
  projectId: matchedSession?.projectId ?? selectedProjectId ?? null,
1675
1673
  sessionId: id,
1676
- tab: "chat",
1674
+ tab: null,
1677
1675
  },
1678
1676
  "push",
1679
1677
  );
@@ -1815,7 +1813,7 @@ export default function DashboardClient() {
1815
1813
  : "text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"
1816
1814
  }`}
1817
1815
  >
1818
- Chat launchpad
1816
+ CLI launchpad
1819
1817
  </button>
1820
1818
  <button
1821
1819
  type="button"
@@ -1841,7 +1839,7 @@ export default function DashboardClient() {
1841
1839
 
1842
1840
  const workspaceContent = useMemo(() => {
1843
1841
  if (selectedSessionId) {
1844
- return <SessionDetail sessionId={selectedSessionId} />;
1842
+ return <SessionDetail key={selectedSessionId} sessionId={selectedSessionId} />;
1845
1843
  }
1846
1844
 
1847
1845
  if (selectedProjectId !== null) {
@@ -1957,7 +1955,7 @@ function NewWorkspaceDialog({
1957
1955
  const [path, setPath] = useState("");
1958
1956
  const [defaultBranch, setDefaultBranch] = useState("main");
1959
1957
  const [agent, setAgent] = useState(defaultAgent);
1960
- const [useWorktree, setUseWorktree] = useState(true);
1958
+ const [useWorktree, setUseWorktree] = useState(false);
1961
1959
  const [initializeGit, setInitializeGit] = useState(true);
1962
1960
  const [githubRepos, setGithubRepos] = useState<GitHubRepo[]>([]);
1963
1961
  const [githubReposLoading, setGithubReposLoading] = useState(false);
@@ -1980,7 +1978,7 @@ function NewWorkspaceDialog({
1980
1978
  setPath("");
1981
1979
  setDefaultBranch("main");
1982
1980
  setInitializeGit(true);
1983
- setUseWorktree(true);
1981
+ setUseWorktree(false);
1984
1982
  setAgent(defaultAgent);
1985
1983
  setGithubRepos([]);
1986
1984
  setGithubReposLoaded(false);
@@ -3032,7 +3030,7 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
3032
3030
  const [issueId, setIssueId] = useState("");
3033
3031
  const [availableTasks, setAvailableTasks] = useState<LinkedBoardTask[]>([]);
3034
3032
  const [taskLoading, setTaskLoading] = useState(false);
3035
- const [useWorktree, setUseWorktree] = useState(true);
3033
+ const [useWorktree, setUseWorktree] = useState(false);
3036
3034
  const [permissionMode, setPermissionMode] = useState<CreatePermissionMode>("default");
3037
3035
 
3038
3036
  useEffect(() => {
@@ -3348,7 +3346,7 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
3348
3346
  <textarea
3349
3347
  value={prompt}
3350
3348
  onChange={(e) => setPrompt(e.target.value)}
3351
- placeholder="Describe the task..."
3349
+ placeholder="Optional launch prompt. Leave empty to open the native CLI."
3352
3350
  rows={1}
3353
3351
  className="min-h-[24px] w-full resize-none bg-transparent pr-8 text-[16px] leading-[24px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"
3354
3352
  />
@@ -3567,10 +3565,10 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
3567
3565
  useWorktree,
3568
3566
  permissionMode,
3569
3567
  })}
3570
- disabled={creating || prompt.trim().length === 0 || !effectiveProjectId}
3568
+ disabled={creating || !effectiveProjectId}
3571
3569
  className="inline-flex min-h-[29px] items-center justify-center rounded-[3px] bg-[var(--vk-bg-hover)] px-[8px] py-[6.5px] text-[16px] leading-[16px] text-[var(--vk-text-strong)] transition-colors hover:bg-[var(--vk-bg-active)] disabled:cursor-not-allowed disabled:opacity-50"
3572
3570
  >
3573
- {creating ? <Loader2 className="h-4 w-4 animate-spin" /> : "Create"}
3571
+ {creating ? <Loader2 className="h-4 w-4 animate-spin" /> : "Launch"}
3574
3572
  </button>
3575
3573
  </div>
3576
3574
  </div>
@@ -109,7 +109,7 @@ export default function SessionPageClient() {
109
109
  sessions={dashboardSessions}
110
110
  selectedSessionId={params.id}
111
111
  onSelectSession={(sessionId) => {
112
- router.push(`/sessions/${encodeURIComponent(sessionId)}?tab=chat`);
112
+ router.push(`/sessions/${encodeURIComponent(sessionId)}`);
113
113
  closeSidebarOnMobile();
114
114
  }}
115
115
  onArchiveSession={handleArchiveSession}
@@ -123,7 +123,7 @@ export default function SessionPageClient() {
123
123
  title={topBarTitle}
124
124
  />
125
125
  <div className="min-h-0 flex-1 overflow-hidden">
126
- <SessionDetail sessionId={params.id} />
126
+ <SessionDetail key={params.id} sessionId={params.id} />
127
127
  </div>
128
128
  </AppShell>
129
129
  );
@@ -149,14 +149,23 @@ function normalizeNavigationInput(value: string): string {
149
149
  return trimmed;
150
150
  }
151
151
 
152
+ function isLocalHost(hostname: string): boolean {
153
+ const normalized = normalizeNavigationHostname(hostname);
154
+ return LOCAL_NAVIGATION_HOSTS.includes(normalized as (typeof LOCAL_NAVIGATION_HOSTS)[number]);
155
+ }
156
+
152
157
  function buildNavigationCandidates(value: string): string[] {
153
158
  const normalizedInput = normalizeNavigationInput(value);
154
159
  try {
155
160
  const parsed = new URL(normalizedInput);
156
161
  const normalized = parsed.toString();
157
162
  const hostname = normalizeNavigationHostname(parsed.hostname);
158
- if (!LOCAL_NAVIGATION_HOSTS.includes(hostname as (typeof LOCAL_NAVIGATION_HOSTS)[number])) {
159
- return [normalized];
163
+
164
+ // SECURITY: Only allow navigation to local addresses to prevent SSRF
165
+ if (!isLocalHost(hostname)) {
166
+ throw new Error(
167
+ `Navigation blocked: only localhost URLs are allowed. Got hostname "${parsed.hostname}".`,
168
+ );
160
169
  }
161
170
 
162
171
  const variants = new Set<string>([normalized]);
@@ -166,7 +175,10 @@ function buildNavigationCandidates(value: string): string[] {
166
175
  variants.add(candidate.toString());
167
176
  }
168
177
  return [...variants];
169
- } catch {
178
+ } catch (error) {
179
+ if (error instanceof Error && error.message.startsWith("Navigation blocked:")) {
180
+ throw error;
181
+ }
170
182
  return [normalizedInput];
171
183
  }
172
184
  }
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94102,99647,61555,40160,e=>{"use strict";var t=e.i(71645);function a(){return window.innerWidth>=1024}function r(){let[e,r]=(0,t.useState)(!1),[n,s]=(0,t.useState)(!0),l=(0,t.useCallback)(()=>{a()?s(e=>!e):r(e=>!e)},[]);return{mobileSidebarOpen:e,desktopSidebarOpen:n,toggleSidebar:l,closeSidebarOnMobile:(0,t.useCallback)(()=>{a()||r(!1)},[]),syncSidebarForViewport:(0,t.useCallback)(()=>{a()?s(!0):r(!1)},[])}}e.s(["useResponsiveSidebarState",()=>r],94102);var n=e.i(75254);let s=(0,n.default)("panel-left-open",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);e.s(["PanelLeftOpen",()=>s],99647);let l=(0,n.default)("panel-right-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]);e.s(["PanelRightClose",()=>l],61555);let i=(0,n.default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);e.s(["Download",()=>i],40160)},90092,e=>{"use strict";let t=(0,e.i(75254).default)("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);e.s(["RefreshCcw",()=>t],90092)},36832,80235,45241,e=>{"use strict";var t=e.i(43476),a=e.i(71645),r=e.i(99647),n=e.i(61555),s=e.i(18620),l=e.i(43531),i=e.i(74886),o=e.i(40160),c=e.i(31278),d=e.i(90092),u=e.i(37727),m=e.i(11077),x=e.i(97878);let p="conductor-dismissed-update-version";function h(){let[e,r]=(0,a.useState)(null),[n,h]=(0,a.useState)(null),[v,b]=(0,a.useState)(null),[f,g]=(0,a.useState)(!1),[k,w]=(0,a.useState)(!1),[y,j]=(0,a.useState)(!1),N=(0,a.useCallback)(async(e=!1)=>{try{let t=await fetch(`/api/app-update${e?"?force=1":""}`,{cache:"no-store"}),a=await t.json().catch(()=>null);if(!t.ok)throw Error("string"==typeof a?.error?a.error:`Failed to load update status (${t.status})`);r(a),h(null)}catch(e){h(e instanceof Error?e.message:"Failed to load update status.")}},[]);(0,a.useEffect)(()=>{try{let e=window.localStorage.getItem(p);b(e&&e.length>0?e:null)}catch{}N(!0);let e=(0,x.subscribeToAppUpdateEvents)(e=>{e&&(r(e),h(null))}),t=()=>{"visible"===document.visibilityState&&N(!1)};return window.addEventListener("focus",t),document.addEventListener("visibilitychange",t),()=>{e(),window.removeEventListener("focus",t),document.removeEventListener("visibilitychange",t)}},[N]);let C=e?.latestVersion&&v===e.latestVersion,S=!!e?.restarting||y,A=(0,a.useMemo)(()=>!!e?.enabled&&(!!S||"idle"!==e.jobStatus||!C&&e.updateAvailable),[C,S,e]);async function E(){e?.updateCommand&&(await navigator.clipboard.writeText(e.updateCommand),g(!0),window.setTimeout(()=>g(!1),1400))}async function M(){w(!0);try{let e=await fetch("/api/app-update",{method:"POST",headers:{"content-type":"application/json"}}),t=await e.json().catch(()=>null);if(!e.ok)throw Error("string"==typeof t?.error?t.error:`Update failed (${e.status})`);r(t),h(null)}catch(e){h(e instanceof Error?e.message:"Failed to trigger update.")}finally{w(!1)}}let R=(0,a.useCallback)(async()=>{let e=Date.now()+6e4;for(;Date.now()<e;){try{if((await fetch("/api/health",{cache:"no-store"})).ok)return void window.location.reload()}catch{}await new Promise(e=>window.setTimeout(e,1e3))}j(!1),h("Restart started, but the dashboard did not come back in time. Reload manually.")},[]);async function L(){try{let e=await fetch("/api/app-update",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"restart"})}),t=await e.json().catch(()=>null);if(!e.ok)throw Error("string"==typeof t?.error?t.error:`Restart failed (${e.status})`);r(t),h(null)}catch(e){h(e instanceof Error?e.message:"Failed to restart Conductor.")}}return((0,a.useEffect)(()=>{e?.restarting&&!y&&(j(!0),R())},[y,e?.restarting,R]),A)?(0,t.jsx)("div",{className:"pointer-events-none fixed bottom-3 right-3 z-[70] w-[min(calc(100vw-1.5rem),24rem)] sm:bottom-4 sm:right-4",children:(0,t.jsxs)("section",{className:(0,s.cn)("pointer-events-auto rounded-[14px] border bg-[var(--vk-bg-panel)] p-4 shadow-[0_16px_40px_rgba(0,0,0,0.35)]",e?.jobStatus==="failed"?"border-[color:color-mix(in_srgb,var(--vk-red)_55%,var(--vk-border))]":"border-[var(--vk-border)]"),children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[S||e?.jobStatus==="running"?(0,t.jsx)(c.Loader2,{className:"h-4 w-4 animate-spin text-[var(--vk-orange)]"}):e?.jobStatus==="completed"?(0,t.jsx)(l.Check,{className:"h-4 w-4 text-[var(--status-ready)]"}):e?.jobStatus==="failed"?(0,t.jsx)(d.RefreshCcw,{className:"h-4 w-4 text-[var(--vk-red)]"}):(0,t.jsx)(o.Download,{className:"h-4 w-4 text-[var(--vk-orange)]"}),(0,t.jsx)("h2",{className:"truncate text-[13px] font-semibold text-[var(--vk-text-normal)]",children:e?e.restarting?"Restarting Conductor":"running"===e.jobStatus?"Updating Conductor":"completed"===e.jobStatus?"Conductor updated":"failed"===e.jobStatus?"Update failed":e.latestVersion?`Conductor ${e.latestVersion} is available`:"Conductor update available":"Conductor update"})]}),(0,t.jsx)("p",{className:"mt-2 text-[12px] leading-5 text-[var(--vk-text-muted)]",children:e?function(e){if(e.restarting)return"The launcher is restarting the runtime. This tab will reconnect automatically once it is ready.";if("running"===e.jobStatus)return e.jobMessage??"Installing the latest version in the background.";if("completed"===e.jobStatus)return e.jobMessage??"The latest version has been installed. Restart Conductor to use it.";if("failed"===e.jobStatus)return e.jobMessage??"The update command did not finish successfully.";let t=e.currentVersion?`You are running ${e.currentVersion}. `:"";return e.canAutoUpdate?`${t}Install the new release now and restart when it finishes.`:"npx"===e.installMode?`${t}Copy the restart command, run it in a terminal, and the next launch will use the latest release.`:`${t}Copy the update command, run it in a terminal, then restart Conductor.`}(e):"Checking for updates..."})]}),(0,t.jsx)("button",{type:"button",onClick:function(){if(e?.latestVersion){try{window.localStorage.setItem(p,e.latestVersion)}catch{}b(e.latestVersion);return}r(e=>e?{...e,enabled:!1}:e)},className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-[7px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]","aria-label":"Dismiss update notice",children:(0,t.jsx)(u.X,{className:"h-4 w-4"})})]}),e?.updateCommand?(0,t.jsx)("div",{className:"mt-3 rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] px-3 py-2 font-mono text-[11px] leading-5 text-[var(--vk-text-muted)]",children:e.updateCommand}):null,e?(0,t.jsx)("p",{className:"mt-2 text-[11px] leading-5 text-[var(--vk-text-faint)]",children:function(e){switch(e){case"npx":return"This session was launched through npx. Copy the restart command, run it in a terminal, and the next launch will use the latest package.";case"unknown":return"Automatic updates are unavailable for this install.";default:return null}}(e.installMode)??(e.restartRequired?"Restart the current Conductor process after the installer completes.":"Update state streams from the running Conductor runtime.")}):null,n?(0,t.jsx)("p",{className:"mt-2 text-[11px] text-[var(--vk-red)]",children:n}):e?.error?(0,t.jsx)("p",{className:"mt-2 text-[11px] text-[var(--vk-red)]",children:e.error}):null,e?.logsTail&&"failed"===e.jobStatus?(0,t.jsx)("pre",{className:"mt-2 max-h-32 overflow-auto rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] p-2 text-[10px] leading-4 text-[var(--vk-text-faint)]",children:e.logsTail}):null,(0,t.jsxs)("div",{className:"mt-3 flex items-center justify-end gap-2",children:[e?.jobStatus==="failed"&&e.canAutoUpdate?(0,t.jsxs)(m.Button,{type:"button",size:"sm",variant:"primary",onClick:()=>void M(),disabled:k,children:[k?(0,t.jsx)(c.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,t.jsx)(d.RefreshCcw,{className:"h-3.5 w-3.5"}),"Retry"]}):null,e?.jobStatus==="idle"&&e.canAutoUpdate?(0,t.jsxs)(m.Button,{type:"button",size:"sm",variant:"primary",onClick:()=>void M(),disabled:k,children:[k?(0,t.jsx)(c.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,t.jsx)(o.Download,{className:"h-3.5 w-3.5"}),"Update now"]}):null,e?.jobStatus==="idle"&&!e.canAutoUpdate&&e.updateCommand?(0,t.jsxs)(m.Button,{type:"button",size:"sm",variant:"outline",onClick:()=>void E(),children:[f?(0,t.jsx)(l.Check,{className:"h-3.5 w-3.5 text-[var(--status-ready)]"}):(0,t.jsx)(i.Copy,{className:"h-3.5 w-3.5"}),f?"Copied":"npx"===e.installMode?"Copy restart command":"Copy command"]}):null,e?.restartRequired&&e.canRestart&&!e.restarting&&!y?(0,t.jsxs)(m.Button,{type:"button",size:"sm",variant:"primary",onClick:()=>void L(),children:[(0,t.jsx)(d.RefreshCcw,{className:"h-3.5 w-3.5"}),"Restart now"]}):null,e?.restarting||y?(0,t.jsxs)(m.Button,{type:"button",size:"sm",variant:"primary",disabled:!0,children:[(0,t.jsx)(c.Loader2,{className:"h-3.5 w-3.5 animate-spin"}),"Restarting"]}):null]})]})}):null}let v="conductor-workspace-sidebar-width";function b({sidebar:e,children:l,mobileSidebarOpen:i,desktopSidebarOpen:o,onToggleSidebar:c}){let[d,u]=(0,a.useState)(356),[m,x]=(0,a.useState)(!1);(0,a.useEffect)(()=>{try{let e=window.localStorage.getItem(v),t=e?Number.parseInt(e,10):NaN;Number.isFinite(t)&&u(Math.min(460,Math.max(296,t)))}catch{}},[]),(0,a.useEffect)(()=>{if(!m)return;let e=e=>{u(Math.min(460,Math.max(296,e.clientX)))},t=()=>{x(!1)};return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),document.body.style.userSelect="none",document.body.style.cursor="col-resize",()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t),document.body.style.userSelect="",document.body.style.cursor="";try{window.localStorage.setItem(v,String(d))}catch{}}},[m,d]);let p={"--workspace-sidebar-width":`${d}px`};return(0,t.jsxs)("div",{style:p,className:"relative flex h-dvh min-h-[100dvh] w-full max-w-full overflow-hidden bg-[var(--vk-bg-main)] text-[var(--vk-text-normal)] [padding-top:env(safe-area-inset-top)] [padding-bottom:env(safe-area-inset-bottom)]",children:[i&&(0,t.jsx)("button",{type:"button",className:"absolute inset-0 z-20 bg-black/45 lg:hidden",onClick:c,"aria-label":"Close workspace panel"}),(0,t.jsx)("aside",{className:(0,s.cn)("absolute inset-y-0 left-0 z-30 flex h-full w-full max-w-none flex-col border-r border-[var(--vk-border)] bg-[var(--vk-bg-panel)] transition-[transform,width] duration-200 sm:w-[min(90vw,var(--workspace-sidebar-width))] sm:max-w-[28rem]",i?"translate-x-0":"-translate-x-full",o?"lg:w-[var(--workspace-sidebar-width)]":"lg:w-0 lg:overflow-hidden lg:border-r-0","lg:relative lg:left-auto lg:translate-x-0"),children:e}),o?(0,t.jsx)("div",{className:"absolute bottom-0 left-[var(--workspace-sidebar-width)] top-0 z-30 hidden w-2 -translate-x-1/2 cursor-col-resize lg:block",onMouseDown:()=>x(!0),"aria-hidden":"true",children:(0,t.jsx)("div",{className:"mx-auto h-full w-px bg-transparent transition-colors hover:bg-[var(--vk-border)]"})}):null,o&&(0,t.jsx)("button",{type:"button",onClick:c,className:"absolute left-[var(--workspace-sidebar-width)] top-2 z-40 hidden h-7 w-7 -translate-x-1/2 items-center justify-center rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-muted)] shadow-[0_0_0_1px_rgba(0,0,0,0.25)] hover:bg-[var(--vk-bg-hover)] lg:inline-flex","aria-label":"Hide workspace panel",children:(0,t.jsx)(n.PanelRightClose,{className:"h-5 w-5"})}),(0,t.jsxs)("main",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden bg-[var(--vk-bg-main)]",children:[!i&&(0,t.jsx)("button",{type:"button",onClick:c,className:"absolute left-2 top-2 z-40 inline-flex h-8 w-8 items-center justify-center rounded-[6px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-muted)] shadow-[0_10px_24px_rgba(0,0,0,0.28)] hover:bg-[var(--vk-bg-hover)] lg:hidden","aria-label":"Open workspace panel",children:(0,t.jsx)(r.PanelLeftOpen,{className:"h-5 w-5"})}),!o&&(0,t.jsx)("button",{type:"button",onClick:c,className:"absolute left-2 top-2 z-40 hidden h-7 w-7 items-center justify-center rounded-[4px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] lg:inline-flex","aria-label":"Open workspace panel",children:(0,t.jsx)(r.PanelLeftOpen,{className:"h-5 w-5"})}),l]}),(0,t.jsx)(h,{})]})}e.s(["AppShell",()=>b],36832);var f=e.i(75254);let g=(0,f.default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),k=(0,a.memo)(function({title:e,onOpenPreferences:a}){return(0,t.jsxs)("header",{className:"flex h-11 items-center border-b border-[var(--vk-border)] bg-[var(--vk-bg-panel)] pl-12 pr-3 text-[13px] text-[var(--vk-text-muted)] sm:h-14 sm:px-5 sm:text-[14px]",children:[(0,t.jsx)("div",{className:"min-w-0 flex-1 text-left sm:text-center",children:(0,t.jsx)("span",{className:"block truncate font-medium tracking-[0.01em] text-[var(--vk-text-normal)]",children:e??"All Projects"})}),a?(0,t.jsx)("div",{className:"ml-1 flex shrink-0",children:(0,t.jsx)("button",{type:"button",onClick:a,className:"inline-flex h-9 w-9 items-center justify-center rounded-[6px] text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]","aria-label":"Open preferences",title:"Preferences",children:(0,t.jsx)(g,{className:"h-4 w-4"})})}):null]})});e.s(["TopBar",0,k],80235);var w=e.i(74080),y=e.i(7233),j=e.i(52808);let N=(0,f.default)("archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);var C=e.i(55436),S=e.i(69242);let A=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function E(e){let t=e.metadata.worktree?.trim()??"";return t&&t.replace(/\\/g,"/").replace(/\/+$/,"").includes("/worktrees/")?"worktree":"local"}function M(e){let t=e.branch?.trim();if(t)return t;let a=e.summary?.trim()||e.metadata.summary?.trim();return a||(e.status?.trim()?e.status.replace(/[_-]+/g," "):e.id.slice(0,8))}function R(e){return[e.id,e.status,e.lastActivityAt,e.branch??"",e.metadata.worktree??""].join(":")}function L(){let[e,r]=(0,a.useState)(0);return(0,a.useEffect)(()=>{let e=window.setInterval(()=>{r(e=>(e+1)%A.length)},80);return()=>window.clearInterval(e)},[]),(0,t.jsx)("span",{"aria-hidden":"true",className:"inline-block select-none font-mono text-[18px] leading-none text-[var(--vk-text-strong)]",children:A[e]})}function P({running:e}){return e?(0,t.jsx)("span",{className:"mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center",children:(0,t.jsx)(L,{})}):null}function T({additions:e,deletions:a,isSelected:r}){return(0,t.jsx)("span",{className:(0,s.cn)("inline-flex shrink-0 items-center rounded-[10px] px-3 py-1.5 font-mono text-[12px] leading-none tabular-nums",r?"bg-[rgba(255,255,255,0.1)]":"bg-[rgba(255,255,255,0.06)]"),children:(0,t.jsxs)("span",{className:"inline-flex items-center gap-3",children:[(0,t.jsxs)("span",{className:"text-[#18c58f]",children:["+",e]}),(0,t.jsxs)("span",{className:"text-[#f26d6d]",children:["−",a]})]})})}function I({sessions:e,selectedId:r,onSelect:n,onArchive:l,onCreateWorkspace:i,showHeader:o=!0}){let[c,d]=(0,a.useState)(""),[u,m]=(0,a.useState)(null),[x,p]=(0,a.useState)(null),[h,v]=(0,a.useState)({}),b=(0,a.useMemo)(()=>{let t=e.filter(e=>"archived"!==e.status);if(!c.trim())return t;let a=c.toLowerCase();return t.filter(e=>{let t=e.summary??"",r=e.branch??"",n=e.metadata.agent??"",s=E(e),l=M(e);return e.id.toLowerCase().includes(a)||e.projectId.toLowerCase().includes(a)||t.toLowerCase().includes(a)||r.toLowerCase().includes(a)||n.toLowerCase().includes(a)||s.toLowerCase().includes(a)||l.toLowerCase().includes(a)})},[c,e]),f=async(e,t)=>{if(e.stopPropagation(),e.preventDefault(),l&&u!==t){m(t);try{await l(t)}catch(e){console.error("Failed to archive session",e),p(t),window.setTimeout(()=>p(null),3e3)}finally{m(e=>e===t?null:e)}}},g=(0,a.useMemo)(()=>[...b].sort((e,t)=>new Date(t.lastActivityAt).getTime()-new Date(e.lastActivityAt).getTime()),[b]);return(0,a.useEffect)(()=>{let e=!1,t=g.filter(e=>{let t=R(e);return h[e.id]?.key!==t});return 0===t.length?()=>{e=!0}:(Promise.all(t.map(async e=>{let t=R(e);try{let a=await fetch(`/api/sessions/${encodeURIComponent(e.id)}/diff`);if(!a.ok)return[e.id,{key:t,stats:null}];let r=await a.json();return[e.id,{key:t,stats:function(e){if(!e||"object"!=typeof e)return null;let t=Array.isArray(e.files)?e.files:[],a=0,r=0;for(let e of t){let t="number"==typeof e?.additions&&Number.isFinite(e.additions)?Math.max(0,e.additions):0,n="number"==typeof e?.deletions&&Number.isFinite(e.deletions)?Math.max(0,e.deletions):0;a+=t,r+=n}return a<=0&&r<=0?null:{additions:a,deletions:r}}(r)}]}catch(a){return console.error("Failed to load session diff stats",a),[e.id,{key:t,stats:null}]}})).then(t=>{if(e)return;let a=t.filter(e=>null!==e);0!==a.length&&v(e=>{let t={...e};for(let[e,r]of a)t[e]=r;return t})}),()=>{e=!0})},[h,g]),(0,t.jsxs)("div",{className:"flex h-full min-h-0 flex-col",children:[o&&(0,t.jsxs)("div",{className:"flex h-[33px] items-center gap-1 px-2",children:[(0,t.jsx)("p",{className:"text-[16px] text-[var(--vk-text-normal)]",children:"Workspaces"}),i&&(0,t.jsx)("button",{type:"button",onClick:i,className:"ml-auto inline-flex h-5 w-5 items-center justify-center rounded-[3px] text-[var(--vk-orange)] hover:bg-[var(--vk-bg-hover)] lg:hidden","aria-label":"New workspace",children:(0,t.jsx)("span",{className:"text-[14px]",children:"+"})})]}),(0,t.jsx)("div",{className:(0,s.cn)("flex h-[38px] items-center px-2 pb-1.5",!o&&"pt-1.5"),children:(0,t.jsxs)("label",{className:"flex h-[30px] flex-1 items-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] px-2",children:[(0,t.jsx)(C.Search,{className:"h-3.5 w-3.5 text-[var(--vk-text-muted)]"}),(0,t.jsx)("input",{value:c,onChange:e=>d(e.target.value),placeholder:"Search...",className:"ml-1.5 w-full bg-transparent text-[14px] text-[var(--vk-text-normal)] outline-none placeholder:text-[var(--vk-text-muted)]"})]})}),(0,t.jsx)("div",{className:"flex-1 overflow-y-auto px-2 pb-2",children:0===g.length?(0,t.jsx)("p",{className:"px-2 py-2 text-[14px] text-[var(--vk-text-muted)]",children:"No sessions"}):(0,t.jsx)("div",{className:"space-y-2",children:g.map(e=>{let a=(0,j.getAttentionLevel)(e),i=h[e.id]?.stats??function(e){for(let t of[e.metadata.lastStderr,e.metadata.summary,e.summary]){if(!t)continue;let e=t.match(/(\d+)\s+insertions?\(\+\),\s+(\d+)\s+deletions?\(-\)/i);if(!e)continue;let a=Number.parseInt(e[1]??"0",10),r=Number.parseInt(e[2]??"0",10);if(Number.isFinite(a)&&Number.isFinite(r))return{additions:a,deletions:r}}return null}(e),o=function(e,t){let a=`${e.summary??""} ${e.metadata.summary??""}`.toLowerCase();if("killed"===e.status||a.includes("interrupted"))return{label:"Interrupted",className:"text-[var(--vk-orange)]"};switch(t){case"merge":return{label:"Ready",className:"text-[var(--vk-green)]"};case"respond":return{label:"Needs input",className:"text-[var(--vk-red)]"};case"review":return{label:"Review",className:"text-[var(--vk-orange)]"};case"working":return{label:"Running",className:"text-[#4e87f3]"};case"done":return{label:"Done",className:"text-[var(--vk-text-muted)]"};default:return{label:"Queued",className:"text-[var(--vk-text-muted)]"}}}(e,a),c=e.metadata.agent?.trim()||null,d=e.id===r,m="active"===e.activity||"spawning"===e.status||"running"===e.status||"working"===e.status,p=u===e.id,v=x===e.id;return(0,t.jsxs)("div",{onClick:()=>n(e.id),onKeyDown:t=>{var a;return a=e.id,void(("Enter"===t.key||" "===t.key)&&(t.preventDefault(),n(a)))},role:"button",tabIndex:0,className:(0,s.cn)("group flex w-full items-start gap-3 rounded-[8px] border px-3 py-3 text-left transition-colors",d?"border-[rgba(234,122,42,0.28)] bg-[rgba(255,255,255,0.08)]":"border-[var(--vk-border)] bg-[rgba(255,255,255,0.02)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,t.jsx)(P,{running:m}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("span",{className:"flex min-w-0 items-start gap-2",children:[(0,t.jsxs)("span",{className:"min-w-0 flex flex-1 items-center gap-2",children:[c?(0,t.jsx)("span",{className:"inline-flex h-5 w-5 shrink-0 items-center justify-center",title:c,"aria-label":`${c} agent`,children:(0,t.jsx)(S.AgentTileIcon,{seed:{label:c},className:"h-4 w-4"})}):null,(0,t.jsx)("span",{className:"min-w-0 truncate text-[14px] font-medium text-[var(--vk-text-strong)]",children:E(e)})]}),i?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"hidden shrink-0 sm:block",children:(0,t.jsx)(T,{additions:i.additions,deletions:i.deletions,isSelected:d})}),(0,t.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium sm:hidden",children:(0,t.jsx)("span",{className:o.className,children:o.label})})]}):(0,t.jsx)("span",{className:"shrink-0 rounded-[8px] bg-[rgba(255,255,255,0.06)] px-2.5 py-1 text-[11px] font-medium",children:(0,t.jsx)("span",{className:o.className,children:o.label})})]}),(0,t.jsx)("span",{className:"mt-1 block truncate text-[12px] text-[var(--vk-text-muted)]",children:M(e)})]}),l?(0,t.jsx)("button",{type:"button",onClick:t=>void f(t,e.id),disabled:p,className:(0,s.cn)("mt-0.5 inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-[6px] border border-[var(--vk-border)] text-[var(--vk-text-muted)] transition","opacity-70 group-hover:opacity-100 focus-visible:opacity-100","hover:border-[var(--vk-border)] hover:bg-[var(--vk-bg-hover)] hover:text-[var(--vk-text-normal)]",p&&"cursor-wait opacity-100"),"aria-label":`Archive session ${e.id}`,title:v?"Archive failed":"Archive session",children:(0,t.jsx)(N,{className:(0,s.cn)("h-3.5 w-3.5",v&&"text-red-400")})}):null]},e.id)})})})]})}let U=(0,a.memo)(function({projects:e,selectedProjectId:r,onSelectProject:n,onUnlinkProject:l,sessions:i,selectedSessionId:o,onSelectSession:c,onArchiveSession:d,onCreateWorkspace:x}){let[p,h]=(0,a.useState)(null),[v,b]=(0,a.useState)(null),[f,g]=(0,a.useState)(null),k=(0,a.useMemo)(()=>{let e=new Map;for(let t of i){if("archived"===t.status)continue;let a=e.get(t.projectId)??{total:0,active:0};a.total+=1,"done"!==(0,j.getAttentionLevel)(t)&&(a.active+=1),e.set(t.projectId,a)}return e},[i]),N=(0,a.useMemo)(()=>e.find(e=>e.id===v)??null,[v,e]);async function C(){if(l&&v){h(v),g(null);try{await l(v),b(null)}catch(e){g(e instanceof Error?e.message:"Failed to unlink project.")}finally{h(null)}}}return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex h-full min-h-0 w-full flex-col bg-[var(--vk-bg-panel)]",children:[(0,t.jsxs)("section",{className:"border-b border-[var(--vk-border)] px-4 py-4",children:[(0,t.jsx)("div",{className:"flex justify-center text-center",children:(0,t.jsx)("p",{className:"text-[22px] font-bold leading-none uppercase tracking-[0.32em] text-[var(--vk-text-strong)]",children:"Conductor"})}),(0,t.jsxs)("button",{type:"button",onClick:x,className:"mt-3 inline-flex h-8 w-full items-center justify-center gap-1 rounded-[6px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)]","aria-label":"Add workspace",children:[(0,t.jsx)(y.Plus,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:"Add Workspace"})]})]}),(0,t.jsxs)("section",{className:"border-b border-[var(--vk-border)] pb-2 pt-1.5",children:[(0,t.jsx)("div",{className:"flex h-[28px] items-center px-3",children:(0,t.jsx)("p",{className:"text-[11px] uppercase tracking-[0.08em] text-[var(--vk-text-muted)]",children:"Projects"})}),(0,t.jsxs)("div",{className:"max-h-[260px] overflow-y-auto px-2",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>n(null),className:(0,s.cn)("mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",null===r?"bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]"),children:[(0,t.jsx)("span",{className:"h-2.5 w-2.5 rounded-full bg-[var(--vk-text-muted)]"}),(0,t.jsx)("span",{className:"truncate",children:"All projects"}),(0,t.jsx)("span",{className:"ml-auto text-[11px] text-[var(--vk-text-muted)]",children:e.length})]}),e.map(e=>{let a=r===e.id,i=k.get(e.id)??{total:0,active:0},o=p===e.id;return(0,t.jsxs)("div",{className:(0,s.cn)("group relative mb-1.5 flex items-center rounded-[6px]",a?"bg-[var(--vk-bg-hover)]":"hover:bg-[var(--vk-bg-hover)]"),children:[(0,t.jsxs)("button",{type:"button",onClick:()=>n(e.id),className:(0,s.cn)("flex min-w-0 flex-1 items-center gap-3 px-3 py-2.5 text-left text-[14px] leading-[21px]",a?"text-[var(--vk-text-normal)]":"text-[var(--vk-text-muted)]"),children:[(0,t.jsx)("span",{className:"mt-1 h-2.5 w-2.5 shrink-0 rounded-full bg-[#3c83f6]"}),(0,t.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,t.jsx)("span",{className:"block truncate",children:e.id}),e.description?(0,t.jsx)("span",{className:"block truncate text-[11px] text-[var(--vk-text-muted)]",children:e.description}):null]}),(0,t.jsxs)("span",{className:"shrink-0 text-right",children:[(0,t.jsxs)("span",{className:"block text-[11px] text-[var(--vk-text-normal)]",children:[i.active," active"]}),(0,t.jsxs)("span",{className:"block text-[10px] text-[var(--vk-text-muted)]",children:[i.total," total"]})]})]}),l&&(0,t.jsx)("button",{type:"button",disabled:o,onClick:t=>{t.stopPropagation(),g(null),b(e.id)},className:"mr-2 inline-flex shrink-0 items-center justify-center rounded-[4px] p-1 text-[var(--vk-text-muted)] hover:bg-[var(--vk-red)]/10 hover:text-[var(--vk-red)] disabled:opacity-50","aria-label":`Unlink ${e.id}`,title:"Unlink project",children:(0,t.jsx)(u.X,{className:"h-3.5 w-3.5"})})]},e.id)})]})]}),(0,t.jsx)("section",{className:"flex min-h-0 flex-1 flex-col pt-1.5",children:(0,t.jsx)(I,{sessions:i,selectedId:o,onSelect:c,onArchive:d,onCreateWorkspace:x,showHeader:!1})})]}),N&&"u">typeof document?(0,w.createPortal)((0,t.jsx)("div",{className:"fixed inset-0 z-[80] flex items-center justify-center bg-black/60 px-4",onClick:()=>{p||(b(null),g(null))},children:(0,t.jsxs)("div",{className:"surface-card w-full max-w-md rounded-[var(--radius-lg)] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] shadow-[0_28px_90px_rgba(0,0,0,0.55)]",onClick:e=>e.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"unlink-project-title",children:[(0,t.jsxs)("div",{className:"border-b border-[var(--vk-border)] px-4 py-3",children:[(0,t.jsx)("h2",{id:"unlink-project-title",className:"text-[17px] font-medium text-[var(--vk-text-strong)]",children:"Unlink Project"}),(0,t.jsxs)("p",{className:"mt-1 text-[12px] text-[var(--vk-text-muted)]",children:["Remove ",(0,t.jsx)("span",{className:"font-medium text-[var(--vk-text-normal)]",children:N.id})," from this workspace configuration."]})]}),(0,t.jsxs)("div",{className:"space-y-3 px-4 py-4",children:[(0,t.jsx)("p",{className:"text-[13px] leading-5 text-[var(--vk-text-normal)]",children:"This only removes the project from Conductor. Repository files on disk are not deleted."}),f?(0,t.jsx)("div",{className:"rounded-[var(--radius-md)] border border-[var(--vk-red)]/35 bg-[color:color-mix(in_srgb,var(--vk-red)_12%,transparent)] px-3 py-2 text-[12px] text-[var(--vk-red)]",children:f}):null]}),(0,t.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-[var(--vk-border)] px-4 py-3",children:[(0,t.jsx)(m.Button,{type:"button",variant:"ghost",onClick:()=>{b(null),g(null)},disabled:null!==p,children:"Cancel"}),(0,t.jsx)(m.Button,{type:"button",variant:"danger",onClick:()=>void C(),disabled:null!==p,children:p===N.id?"Unlinking...":"Unlink Project"})]})]})}),document.body):null]})});e.s(["WorkspaceSidebarPanel",0,U],45241)},2004,e=>{"use strict";var t=e.i(71645);function a(e,t){return{id:e,repo:"string"==typeof t?.repo?t.repo:null,path:"string"==typeof t?.path?t.path:null,iconUrl:"string"==typeof t?.iconUrl?t.iconUrl:null,boardDir:"string"==typeof t?.boardDir?t.boardDir:null,boardFile:"string"==typeof t?.boardFile?t.boardFile:null,description:"string"==typeof t?.description?t.description:null,defaultBranch:"string"==typeof t?.defaultBranch&&t.defaultBranch.trim().length>0?t.defaultBranch:"main",agent:"string"==typeof t?.agent&&t.agent.trim().length>0?t.agent:"claude-code",agentPermissions:"string"==typeof t?.agentPermissions&&t.agentPermissions.trim().length>0?t.agentPermissions:null,agentModel:"string"==typeof t?.agentModel&&t.agentModel.trim().length>0?t.agentModel:null,agentReasoningEffort:"string"==typeof t?.agentReasoningEffort&&t.agentReasoningEffort.trim().length>0?t.agentReasoningEffort:null}}function r(){let[e,r]=(0,t.useState)([]),[n,s]=(0,t.useState)(!0),[l,i]=(0,t.useState)(null),o=(0,t.useRef)(!1),c=(0,t.useCallback)(async()=>{try{let e=await fetch("/api/config");if(!e.ok)throw Error(`Failed to fetch config: ${e.status}`);let t=await e.json();r(function(e){if(!e||"object"!=typeof e)return[];let t=e.projects;return t?Array.isArray(t)?t.map((e,t)=>e&&"object"==typeof e?a("string"==typeof e.id&&e.id.trim().length>0?e.id:`project-${t+1}`,e):a(`project-${t+1}`,null)):"object"==typeof t?Object.entries(t).map(([e,t])=>a(e,t&&"object"==typeof t?t:null)):[]:[]}(t)),i(null)}catch(e){r([]),i(e instanceof Error?e.message:"Failed to fetch config")}finally{s(!1)}},[]);return(0,t.useEffect)(()=>{o.current||(o.current=!0,c())},[c]),{projects:e,loading:n,error:l,refresh:c}}e.s(["useConfig",()=>r])},89965,e=>{"use strict";var t=e.i(71645),a=e.i(97878);function r(e){let[r,n]=(0,t.useState)([]),[s,l]=(0,t.useState)(!0),[i,o]=(0,t.useState)(null),c=(0,t.useRef)(!0),d=(0,t.useCallback)(e=>{n(t=>!function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let a=0;a<e.length;a+=1){let r=e[a],n=t[a];if(!r||!n||r.id!==n.id||r.status!==n.status||r.activity!==n.activity||r.projectId!==n.projectId||r.issueId!==n.issueId||r.branch!==n.branch||r.lastActivityAt!==n.lastActivityAt||r.summary!==n.summary)return!1;let s=r.metadata??{},l=n.metadata??{},i=Object.keys(s),o=Object.keys(l);if(i.length!==o.length)return!1;for(let e of i)if(s[e]!==l[e])return!1}return!0}(t,e)?e:t)},[]),u=(0,t.useCallback)(async()=>{try{let t="string"==typeof e&&e.trim().length>0?`?project=${encodeURIComponent(e.trim())}`:"",a=await fetch(`/api/sessions${t}`);if(!a.ok)throw Error(`Failed to fetch sessions: ${a.status}`);let r=await a.json(),n=Array.isArray(r)?r:Array.isArray(r.sessions)?r.sessions:[];if(!c.current)return;d(n),o(null)}catch(e){c.current&&o(e instanceof Error?e.message:"Unknown error")}finally{c.current&&l(!1)}},[d,e]);return(0,t.useEffect)(()=>{c.current=!0,l(!0),u();let t=null,r=()=>{null!==t&&(window.clearTimeout(t),t=null)},n=()=>{r(),t=window.setTimeout(async()=>{c.current&&(await u(),c.current&&n())},"visible"===document.visibilityState?15e3:45e3)};n();let s=(0,a.subscribeToSnapshotEvents)(t=>{var a;let r;c.current&&(d((a=t.sessions,(r=e?.trim())?a.filter(e=>e.projectId===r):a)),o(null),l(!1))}),i=()=>{u(),n()},m=()=>{"visible"===document.visibilityState?i():n()};return window.addEventListener("focus",i),document.addEventListener("visibilitychange",m),()=>{c.current=!1,s(),r(),window.removeEventListener("focus",i),document.removeEventListener("visibilitychange",m)}},[d,u,e]),{sessions:r,loading:s,error:i,refresh:u}}e.s(["useSessions",()=>r])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,16715,e=>{"use strict";let t=(0,e.i(75254).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],16715)}]);