conductor-oss 0.2.20 → 0.3.1

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 (538) hide show
  1. package/README.md +16 -0
  2. package/dist/commands/start.d.ts.map +1 -1
  3. package/dist/commands/start.js +28 -2
  4. package/dist/commands/start.js.map +1 -1
  5. package/dist/launcher.d.ts +3 -0
  6. package/dist/launcher.d.ts.map +1 -0
  7. package/dist/launcher.js +3 -0
  8. package/dist/launcher.js.map +1 -0
  9. package/node_modules/@conductor-oss/core/dist/config.d.ts.map +1 -1
  10. package/node_modules/@conductor-oss/core/dist/config.js +106 -1
  11. package/node_modules/@conductor-oss/core/dist/config.js.map +1 -1
  12. package/node_modules/@conductor-oss/core/dist/types.d.ts +4 -4
  13. package/node_modules/@conductor-oss/core/dist/types.d.ts.map +1 -1
  14. package/node_modules/@conductor-oss/core/dist/types.js +185 -8
  15. package/node_modules/@conductor-oss/core/dist/types.js.map +1 -1
  16. package/node_modules/@conductor-oss/plugin-agent-amp/package.json +1 -1
  17. package/node_modules/@conductor-oss/plugin-agent-ccr/package.json +1 -1
  18. package/node_modules/@conductor-oss/plugin-agent-claude-code/package.json +1 -1
  19. package/node_modules/@conductor-oss/plugin-agent-codex/package.json +1 -1
  20. package/node_modules/@conductor-oss/plugin-agent-cursor-cli/package.json +1 -1
  21. package/node_modules/@conductor-oss/plugin-agent-droid/package.json +1 -1
  22. package/node_modules/@conductor-oss/plugin-agent-gemini/package.json +1 -1
  23. package/node_modules/@conductor-oss/plugin-agent-github-copilot/package.json +1 -1
  24. package/node_modules/@conductor-oss/plugin-agent-opencode/package.json +1 -1
  25. package/node_modules/@conductor-oss/plugin-agent-qwen-code/package.json +1 -1
  26. package/node_modules/@conductor-oss/plugin-mcp-server/package.json +1 -1
  27. package/node_modules/@conductor-oss/plugin-notifier-desktop/package.json +1 -1
  28. package/node_modules/@conductor-oss/plugin-notifier-discord/package.json +1 -1
  29. package/node_modules/@conductor-oss/plugin-runtime-tmux/package.json +1 -1
  30. package/node_modules/@conductor-oss/plugin-scm-github/package.json +1 -1
  31. package/node_modules/@conductor-oss/plugin-terminal-web/package.json +1 -1
  32. package/node_modules/@conductor-oss/plugin-tracker-github/package.json +1 -1
  33. package/node_modules/@conductor-oss/plugin-workspace-worktree/package.json +1 -1
  34. package/package.json +29 -25
  35. package/web/.next/standalone/packages/web/.next/BUILD_ID +1 -1
  36. package/web/.next/standalone/packages/web/.next/app-path-routes-manifest.json +5 -0
  37. package/web/.next/standalone/packages/web/.next/build-manifest.json +2 -2
  38. package/web/.next/standalone/packages/web/.next/prerender-manifest.json +3 -3
  39. package/web/.next/standalone/packages/web/.next/routes-manifest.json +34 -0
  40. package/web/.next/standalone/packages/web/.next/server/app/_global-error.html +2 -2
  41. package/web/.next/standalone/packages/web/.next/server/app/_global-error.rsc +1 -1
  42. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  43. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/web/.next/standalone/packages/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  48. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  49. package/web/.next/standalone/packages/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/web/.next/standalone/packages/web/.next/server/app/_not-found.html +1 -1
  51. package/web/.next/standalone/packages/web/.next/server/app/_not-found.rsc +3 -3
  52. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  53. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  54. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  55. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  56. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  57. package/web/.next/standalone/packages/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  58. package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js +3 -4
  59. package/web/.next/standalone/packages/web/.next/server/app/api/access/route.js.nft.json +1 -1
  60. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/app-paths-manifest.json +3 -0
  61. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/build-manifest.json +11 -0
  62. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route/server-reference-manifest.json +4 -0
  63. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js +10 -0
  64. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.map +5 -0
  65. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route.js.nft.json +1 -0
  66. package/web/.next/standalone/packages/web/.next/server/app/api/agents/route_client-reference-manifest.js +2 -0
  67. package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js +2 -2
  68. package/web/.next/standalone/packages/web/.next/server/app/api/attachments/route.js.nft.json +1 -1
  69. package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js +3 -1
  70. package/web/.next/standalone/packages/web/.next/server/app/api/auth/session/route.js.nft.json +1 -1
  71. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js +3 -5
  72. package/web/.next/standalone/packages/web/.next/server/app/api/boards/route.js.nft.json +1 -1
  73. package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js +2 -2
  74. package/web/.next/standalone/packages/web/.next/server/app/api/config/route.js.nft.json +1 -1
  75. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js +2 -2
  76. package/web/.next/standalone/packages/web/.next/server/app/api/context-files/route.js.nft.json +1 -1
  77. package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js +3 -3
  78. package/web/.next/standalone/packages/web/.next/server/app/api/events/route.js.nft.json +1 -1
  79. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route/app-paths-manifest.json +3 -0
  80. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route/build-manifest.json +11 -0
  81. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route/server-reference-manifest.json +4 -0
  82. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js +10 -0
  83. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.map +5 -0
  84. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route.js.nft.json +1 -0
  85. package/web/.next/standalone/packages/web/.next/server/app/api/executor/health/route_client-reference-manifest.js +2 -0
  86. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js +2 -2
  87. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/directory/route.js.nft.json +1 -1
  88. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route/app-paths-manifest.json +3 -0
  89. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route/build-manifest.json +11 -0
  90. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route/server-reference-manifest.json +4 -0
  91. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js +10 -0
  92. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.map +5 -0
  93. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route.js.nft.json +1 -0
  94. package/web/.next/standalone/packages/web/.next/server/app/api/filesystem/pick-directory/route_client-reference-manifest.js +2 -0
  95. package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js +2 -2
  96. package/web/.next/standalone/packages/web/.next/server/app/api/github/repos/route.js.nft.json +1 -1
  97. package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js +2 -2
  98. package/web/.next/standalone/packages/web/.next/server/app/api/health/boards/route.js.nft.json +1 -1
  99. package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js +2 -2
  100. package/web/.next/standalone/packages/web/.next/server/app/api/health/sessions/route.js.nft.json +1 -1
  101. package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js +2 -2
  102. package/web/.next/standalone/packages/web/.next/server/app/api/notifications/route.js.nft.json +1 -1
  103. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js +3 -4
  104. package/web/.next/standalone/packages/web/.next/server/app/api/preferences/route.js.nft.json +1 -1
  105. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route/app-paths-manifest.json +3 -0
  106. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route/build-manifest.json +11 -0
  107. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route/server-reference-manifest.json +4 -0
  108. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js +10 -0
  109. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.map +5 -0
  110. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -0
  111. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +2 -0
  112. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js +4 -6
  113. package/web/.next/standalone/packages/web/.next/server/app/api/repositories/route.js.nft.json +1 -1
  114. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js +2 -2
  115. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/actions/route.js.nft.json +1 -1
  116. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route/app-paths-manifest.json +3 -0
  117. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route/build-manifest.json +11 -0
  118. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route/server-reference-manifest.json +4 -0
  119. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js +10 -0
  120. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.map +5 -0
  121. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route.js.nft.json +1 -0
  122. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/archive/route_client-reference-manifest.js +2 -0
  123. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js +2 -2
  124. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/checks/route.js.nft.json +1 -1
  125. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js +4 -5
  126. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/diff/route.js.nft.json +1 -1
  127. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js +2 -2
  128. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feed/route.js.nft.json +1 -1
  129. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js +2 -2
  130. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/feedback/route.js.nft.json +1 -1
  131. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js +2 -2
  132. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/files/route.js.nft.json +1 -1
  133. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js +2 -2
  134. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/keys/route.js.nft.json +1 -1
  135. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js +2 -2
  136. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/kill/route.js.nft.json +1 -1
  137. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js +2 -2
  138. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/route.js.nft.json +1 -1
  139. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js +3 -3
  140. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/output/stream/route.js.nft.json +1 -1
  141. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js +2 -2
  142. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/restore/route.js.nft.json +1 -1
  143. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js +2 -2
  144. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  145. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js +2 -2
  146. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/[id]/send/route.js.nft.json +1 -1
  147. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js +2 -2
  148. package/web/.next/standalone/packages/web/.next/server/app/api/sessions/route.js.nft.json +1 -1
  149. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js +3 -4
  150. package/web/.next/standalone/packages/web/.next/server/app/api/spawn/route.js.nft.json +1 -1
  151. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js +2 -2
  152. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/branches/route.js.nft.json +1 -1
  153. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js +4 -6
  154. package/web/.next/standalone/packages/web/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  155. package/web/.next/standalone/packages/web/.next/server/app/index.html +1 -1
  156. package/web/.next/standalone/packages/web/.next/server/app/index.rsc +4 -4
  157. package/web/.next/standalone/packages/web/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  158. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_full.segment.rsc +4 -4
  159. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  160. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_index.segment.rsc +3 -3
  161. package/web/.next/standalone/packages/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  162. package/web/.next/standalone/packages/web/.next/server/app/page/react-loadable-manifest.json +2 -2
  163. package/web/.next/standalone/packages/web/.next/server/app/page/server-reference-manifest.json +7 -7
  164. package/web/.next/standalone/packages/web/.next/server/app/page.js.nft.json +1 -1
  165. package/web/.next/standalone/packages/web/.next/server/app/page_client-reference-manifest.js +1 -1
  166. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +7 -7
  167. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  168. package/web/.next/standalone/packages/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  169. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page/server-reference-manifest.json +7 -7
  170. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page.js.nft.json +1 -1
  171. package/web/.next/standalone/packages/web/.next/server/app/sign-in/[[...sign-in]]/page_client-reference-manifest.js +1 -1
  172. package/web/.next/standalone/packages/web/.next/server/app/unlock/page/server-reference-manifest.json +7 -7
  173. package/web/.next/standalone/packages/web/.next/server/app/unlock/page.js.nft.json +1 -1
  174. package/web/.next/standalone/packages/web/.next/server/app/unlock/page_client-reference-manifest.js +1 -1
  175. package/web/.next/standalone/packages/web/.next/server/app-paths-manifest.json +5 -0
  176. package/web/.next/standalone/packages/web/.next/server/chunks/29f24__next-internal_server_app_api_filesystem_pick-directory_route_actions_51e42977.js +3 -0
  177. package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_executor_health_route_actions_8e415531.js +3 -0
  178. package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_repositories_[id]_route_actions_4d42b4b5.js +3 -0
  179. package/web/.next/standalone/packages/web/.next/server/chunks/730ea_web__next-internal_server_app_api_sessions_[id]_archive_route_actions_bdb25739.js +3 -0
  180. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0074ebac._.js +3 -0
  181. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__03a6b3e6._.js +3 -0
  182. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__049daed6._.js +3 -0
  183. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__6023a748._.js → [root-of-the-server]__095ffdaa._.js} +1 -1
  184. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__2a83553a._.js → [root-of-the-server]__0c7f79b1._.js} +1 -1
  185. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__137c9740._.js +3 -0
  186. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__1aa339ea._.js → [root-of-the-server]__144e8e60._.js} +1 -1
  187. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__1ed2e6c1._.js → [root-of-the-server]__14949257._.js} +17 -163
  188. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__15594e11._.js +3 -0
  189. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__159ecc1b._.js +3 -0
  190. package/web/.next/standalone/packages/web/.next/server/chunks/{[root-of-the-server]__29be362d._.js → [root-of-the-server]__16d4a78f._.js} +1 -1
  191. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__171dd44e._.js +3 -0
  192. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__177505ca._.js +3 -0
  193. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__18aa1fa3._.js +3 -0
  194. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c3521a3._.js +3 -0
  195. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1c793b78._.js +3 -0
  196. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__22fbbc7b._.js +3 -0
  197. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__25bbe81a._.js +3 -0
  198. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2d10de49._.js +3 -0
  199. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30442998._.js +3 -0
  200. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31d22800._.js +3 -0
  201. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3d6b30a3._.js +1 -1
  202. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__44892736._.js +3 -0
  203. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__495221b1._.js +3 -0
  204. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ff9e8b0._.js +3 -0
  205. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54eb1ef0._.js +3 -0
  206. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5c375e13._.js +3 -0
  207. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6362697f._.js +3 -0
  208. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__69b36e36._.js +3 -0
  209. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6badbf4e._.js +3 -0
  210. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c4cd852._.js +3 -0
  211. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6f7b329b._.js +3 -0
  212. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__70b7af90._.js +3 -0
  213. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__71077192._.js +3 -0
  214. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__758687ca._.js +3 -0
  215. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7604e43b._.js +3 -0
  216. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__77b23eae._.js +3 -0
  217. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78650ac9._.js +3 -0
  218. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__789107eb._.js +3 -0
  219. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78c062a8._.js +3 -0
  220. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__78c4bb1e._.js +3 -0
  221. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__790d1d4b._.js +3 -0
  222. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8132442f._.js +3 -0
  223. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__833a2cd9._.js +3 -0
  224. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__85d6ae4c._.js +3 -0
  225. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8d933120._.js +3 -0
  226. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__90ac5665._.js +3 -0
  227. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__92a4f9bf._.js +3 -0
  228. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__93d550e2._.js +3 -0
  229. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96e59c1f._.js +3 -0
  230. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9d98fee2._.js +3 -0
  231. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9fcf6265._.js +3 -0
  232. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a5b78741._.js +3 -0
  233. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a8a4b101._.js +3 -0
  234. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a8d11727._.js +3 -0
  235. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b2e0e81c._.js +3 -0
  236. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bf756716._.js +3 -0
  237. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c09452b3._.js +3 -0
  238. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c43dcff1._.js +3 -0
  239. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c923cbdc._.js +3 -0
  240. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ce993e7b._.js +3 -0
  241. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cfbdd2bf._.js +3 -0
  242. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d1d8bfb5._.js +3 -0
  243. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d4d1744d._.js +3 -0
  244. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d8852803._.js +3 -0
  245. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea1961bd._.js +3 -0
  246. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ee8a3221._.js +3 -0
  247. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef8c815b._.js +3 -0
  248. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef918d06._.js +3 -0
  249. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f3693403._.js +3 -0
  250. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f62cac3a._.js +3 -0
  251. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f73117e9._.js +3 -0
  252. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f7651519._.js +3 -0
  253. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fc6ffe6c._.js +3 -0
  254. package/web/.next/standalone/packages/web/.next/server/chunks/packages_web__next-internal_server_app_api_agents_route_actions_29063d1a.js +3 -0
  255. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__6622b514._.js +1 -1
  256. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__869d9ac0._.js +1 -1
  257. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/[root-of-the-server]__b388693f._.js +1 -1
  258. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{[root-of-the-server]__48817f02._.js → [root-of-the-server]__c3eb4913._.js} +2 -2
  259. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_0e1412de._.js +1 -1
  260. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{_20a4007d._.js → _3acfb388._.js} +2 -2
  261. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_668c9201._.js +3 -0
  262. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_69e05fca._.js +1 -1
  263. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_80efe193._.js +1 -1
  264. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b6d31783._.js +1 -1
  265. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_c0f0e227._.js +1 -1
  266. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_f36ddaa9._.js +1 -1
  267. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_129dde21._.js +3 -0
  268. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_1776df7f._.js +3 -0
  269. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_f2ebd7a9._.js +1 -1
  270. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_79316445._.js +1 -1
  271. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_a078c137._.js +1 -1
  272. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_page_tsx_cd282e82._.js +1 -1
  273. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_app_unlock_UnlockForm_tsx_ce3149a7._.js +1 -1
  274. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/{packages_web_src_components_6cab1c8c._.js → packages_web_src_components_aad7de7c._.js} +1 -1
  275. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/packages_web_src_components_board_WorkspaceKanban_tsx_735b7999._.js +1 -1
  276. package/web/.next/standalone/packages/web/.next/server/pages/404.html +1 -1
  277. package/web/.next/standalone/packages/web/.next/server/pages/500.html +2 -2
  278. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.js +1 -1
  279. package/web/.next/standalone/packages/web/.next/server/server-reference-manifest.json +8 -8
  280. package/web/.next/standalone/packages/web/.next/static/chunks/{5c7e8425945ad682.js → 07a5ac7389686572.js} +1 -1
  281. package/web/.next/standalone/packages/web/.next/static/chunks/3603312f8407bd12.js +1 -0
  282. package/web/.next/standalone/packages/web/.next/static/chunks/382be8f0b30c5f08.js +1 -0
  283. package/web/.next/standalone/packages/web/.next/static/chunks/479b8cb58c95a8a0.js +1 -0
  284. package/web/.next/standalone/packages/web/.next/static/chunks/53e4f3b495e423c9.js +1 -0
  285. package/web/.next/{static/chunks/3b757dce050133c8.js → standalone/packages/web/.next/static/chunks/5c5637796e242130.js} +2 -2
  286. package/web/.next/standalone/packages/web/.next/static/chunks/{695b7cb206c6dadd.js → 5e05e67a26b7ecbc.js} +1 -1
  287. package/web/.next/standalone/packages/web/.next/static/chunks/6d083840413686dd.css +3 -0
  288. package/web/.next/standalone/packages/web/.next/static/chunks/870a993d28314a90.js +1 -0
  289. package/web/.next/standalone/packages/web/.next/static/chunks/c5caacf383990e7b.js +1 -0
  290. package/web/.next/standalone/packages/web/.next/static/chunks/c7c1bd729f17c8bf.js +1 -0
  291. package/web/.next/standalone/packages/web/.next/static/chunks/e8d146cc2723147b.js +1 -0
  292. package/web/.next/standalone/packages/web/package.json +1 -1
  293. package/web/.next/standalone/packages/web/src/app/api/access/route.ts +3 -211
  294. package/web/.next/standalone/packages/web/src/app/api/agents/route.ts +5 -0
  295. package/web/.next/standalone/packages/web/src/app/api/attachments/route.ts +2 -166
  296. package/web/.next/standalone/packages/web/src/app/api/auth/session/route.ts +4 -52
  297. package/web/.next/standalone/packages/web/src/app/api/boards/route.ts +3 -517
  298. package/web/.next/standalone/packages/web/src/app/api/config/route.ts +2 -78
  299. package/web/.next/standalone/packages/web/src/app/api/context-files/route.ts +2 -198
  300. package/web/.next/standalone/packages/web/src/app/api/events/route.ts +2 -122
  301. package/web/.next/standalone/packages/web/src/app/api/executor/health/route.ts +5 -0
  302. package/web/.next/standalone/packages/web/src/app/api/filesystem/directory/route.ts +2 -142
  303. package/web/.next/standalone/packages/web/src/app/api/filesystem/pick-directory/route.ts +5 -0
  304. package/web/.next/standalone/packages/web/src/app/api/github/repos/route.ts +2 -103
  305. package/web/.next/standalone/packages/web/src/app/api/health/boards/route.ts +2 -69
  306. package/web/.next/standalone/packages/web/src/app/api/health/sessions/route.ts +2 -74
  307. package/web/.next/standalone/packages/web/src/app/api/notifications/route.ts +3 -88
  308. package/web/.next/standalone/packages/web/src/app/api/preferences/route.ts +3 -191
  309. package/web/.next/standalone/packages/web/src/app/api/repositories/[id]/route.ts +8 -0
  310. package/web/.next/standalone/packages/web/src/app/api/repositories/route.ts +4 -416
  311. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/actions/route.ts +5 -77
  312. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/archive/route.ts +8 -0
  313. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/checks/route.ts +5 -172
  314. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/diff/route.ts +5 -423
  315. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/feed/route.ts +5 -94
  316. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/feedback/route.ts +5 -44
  317. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/files/route.ts +5 -194
  318. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/keys/route.ts +6 -138
  319. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/kill/route.ts +5 -42
  320. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/output/route.ts +5 -259
  321. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/output/stream/route.ts +5 -108
  322. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/restore/route.ts +5 -46
  323. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/route.ts +6 -204
  324. package/web/.next/standalone/packages/web/src/app/api/sessions/[id]/send/route.ts +5 -55
  325. package/web/.next/standalone/packages/web/src/app/api/sessions/route.ts +2 -102
  326. package/web/.next/standalone/packages/web/src/app/api/spawn/route.ts +3 -214
  327. package/web/.next/standalone/packages/web/src/app/api/workspaces/branches/route.ts +2 -230
  328. package/web/.next/standalone/packages/web/src/app/api/workspaces/route.ts +3 -589
  329. package/web/.next/standalone/packages/web/src/app/unlock/UnlockForm.tsx +25 -4
  330. package/web/.next/standalone/packages/web/src/components/board/WorkspaceKanban.tsx +8 -8
  331. package/web/.next/standalone/packages/web/src/components/layout/WorkspaceSidebarPanel.tsx +199 -84
  332. package/web/.next/standalone/packages/web/src/components/sessions/ChatPanel.tsx +36 -5
  333. package/web/.next/standalone/packages/web/src/features/dashboard/DashboardClient.tsx +86 -36
  334. package/web/.next/standalone/packages/web/src/features/dashboard/components/WorkspaceOverview.tsx +57 -9
  335. package/web/.next/standalone/packages/web/src/hooks/useSessionOutputStream.ts +11 -0
  336. package/web/.next/standalone/packages/web/src/lib/auth.ts +90 -14
  337. package/web/.next/standalone/packages/web/src/lib/guardedRustProxy.ts +25 -0
  338. package/web/.next/standalone/packages/web/src/lib/liveEvents.ts +64 -7
  339. package/web/.next/standalone/packages/web/src/lib/proxyRoutes.ts +46 -0
  340. package/web/.next/standalone/packages/web/src/lib/runtimeAgentModels.ts +1 -1
  341. package/web/.next/standalone/packages/web/src/lib/rustBackendProxy.ts +154 -0
  342. package/web/.next/standalone/packages/web/src/proxy.ts +3 -20
  343. package/web/.next/static/chunks/{5c7e8425945ad682.js → 07a5ac7389686572.js} +1 -1
  344. package/web/.next/static/chunks/3603312f8407bd12.js +1 -0
  345. package/web/.next/static/chunks/382be8f0b30c5f08.js +1 -0
  346. package/web/.next/static/chunks/479b8cb58c95a8a0.js +1 -0
  347. package/web/.next/static/chunks/53e4f3b495e423c9.js +1 -0
  348. package/web/.next/{standalone/packages/web/.next/static/chunks/3b757dce050133c8.js → static/chunks/5c5637796e242130.js} +2 -2
  349. package/web/.next/static/chunks/{695b7cb206c6dadd.js → 5e05e67a26b7ecbc.js} +1 -1
  350. package/web/.next/static/chunks/6d083840413686dd.css +3 -0
  351. package/web/.next/static/chunks/870a993d28314a90.js +1 -0
  352. package/web/.next/static/chunks/c5caacf383990e7b.js +1 -0
  353. package/web/.next/static/chunks/c7c1bd729f17c8bf.js +1 -0
  354. package/web/.next/static/chunks/e8d146cc2723147b.js +1 -0
  355. package/native/conductor +0 -0
  356. package/web/.next/standalone/packages/web/.next/server/chunks/[externals]__f25f12d4._.js +0 -3
  357. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__005aa909._.js +0 -3
  358. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__008d962e._.js +0 -3
  359. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__00cf28e7._.js +0 -3
  360. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__03ff76ee._.js +0 -3
  361. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__06365513._.js +0 -3
  362. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__075f8697._.js +0 -3
  363. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__097be5a7._.js +0 -3
  364. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__0a0f0f01._.js +0 -3
  365. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1003246b._.js +0 -3
  366. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__11918223._.js +0 -3
  367. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__13ad088c._.js +0 -3
  368. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1458f8ec._.js +0 -3
  369. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__14b1d4a3._.js +0 -3
  370. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1741fb8a._.js +0 -3
  371. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1875f00e._.js +0 -3
  372. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1beced71._.js +0 -3
  373. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__1f626a16._.js +0 -129
  374. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2062aaab._.js +0 -3
  375. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__206c3d8a._.js +0 -3
  376. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__22f8f0d6._.js +0 -129
  377. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__23bebaf9._.js +0 -3
  378. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2556a816._.js +0 -3
  379. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__25788ed3._.js +0 -54
  380. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2c3f6397._.js +0 -3
  381. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__2c909fe3._.js +0 -3
  382. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__30921756._.js +0 -3
  383. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__31eea08c._.js +0 -3
  384. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__346d9484._.js +0 -3
  385. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3edd3509._.js +0 -3
  386. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3f8b49ba._.js +0 -3
  387. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__3f8e82c2._.js +0 -3
  388. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__44d59fd0._.js +0 -3
  389. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__48875cbb._.js +0 -7
  390. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__49c6a20e._.js +0 -3
  391. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ac9d639._.js +0 -3
  392. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4c3fb752._.js +0 -3
  393. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4ca8b259._.js +0 -3
  394. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__4dab6a6a._.js +0 -3
  395. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__53385c40._.js +0 -3
  396. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__544326ac._.js +0 -3
  397. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__54a218f0._.js +0 -54
  398. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__55e337f7._.js +0 -3
  399. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5661ca72._.js +0 -3
  400. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5cd49624._.js +0 -3
  401. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e0533de._.js +0 -3
  402. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5e161db4._.js +0 -3
  403. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5ebcb223._.js +0 -3
  404. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__5fd609c9._.js +0 -3
  405. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__60cf7bf4._.js +0 -3
  406. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__60ee4897._.js +0 -3
  407. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6559c1a4._.js +0 -3
  408. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__659938b1._.js +0 -3
  409. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6712f45a._.js +0 -3
  410. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__69227de6._.js +0 -3
  411. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6ab08a39._.js +0 -129
  412. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6c10c03b._.js +0 -3
  413. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6cd54de1._.js +0 -3
  414. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6ce2b5d7._.js +0 -3
  415. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6cfd00d2._.js +0 -3
  416. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6d62709d._.js +0 -129
  417. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__6e08e4e4._.js +0 -3
  418. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__749331b0._.js +0 -54
  419. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__74a53184._.js +0 -3
  420. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__76c16426._.js +0 -3
  421. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__778e46a1._.js +0 -129
  422. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7a26e452._.js +0 -3
  423. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7ba96fa5._.js +0 -3
  424. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__7e684560._.js +0 -3
  425. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__848eb266._.js +0 -3
  426. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8596d782._.js +0 -7
  427. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__85d8966b._.js +0 -3
  428. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__86aff2b8._.js +0 -3
  429. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__879cf4d2._.js +0 -3
  430. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__881858fa._.js +0 -3
  431. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__885e3a00._.js +0 -54
  432. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__887ea436._.js +0 -3
  433. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__893f6b3b._.js +0 -3
  434. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__89dfcd05._.js +0 -3
  435. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__8cc5826f._.js +0 -3
  436. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__913af875._.js +0 -3
  437. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__91b42119._.js +0 -3
  438. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__93ce1b75._.js +0 -3
  439. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96633022._.js +0 -3
  440. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__96951362._.js +0 -3
  441. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__971fcc75._.js +0 -9
  442. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__99da6324._.js +0 -3
  443. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9f07930d._.js +0 -3
  444. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9f36b7ec._.js +0 -129
  445. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__9fd08bbc._.js +0 -3
  446. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a05953cc._.js +0 -3
  447. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a0b6570d._.js +0 -3
  448. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a3766ac1._.js +0 -3
  449. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a3bfaabf._.js +0 -3
  450. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a420e374._.js +0 -3
  451. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__a4a33247._.js +0 -54
  452. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ac544bb5._.js +0 -3
  453. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ad84d2e0._.js +0 -54
  454. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b3095e9d._.js +0 -3
  455. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b59abfbd._.js +0 -3
  456. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__b9692a3c._.js +0 -3
  457. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bcc08c70._.js +0 -3
  458. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__be051d52._.js +0 -3
  459. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__bea07e07._.js +0 -3
  460. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c1759514._.js +0 -3
  461. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c2ef2bfc._.js +0 -3
  462. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__c8618cb1._.js +0 -3
  463. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ca8a18f8._.js +0 -3
  464. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cafd7bb3._.js +0 -3
  465. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cb112606._.js +0 -3
  466. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cc74ea40._.js +0 -3
  467. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cd3692a0._.js +0 -3
  468. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__cf3cdecd._.js +0 -3
  469. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d09e7a99._.js +0 -3
  470. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d40b50e7._.js +0 -3
  471. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d4721d30._.js +0 -3
  472. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d538c110._.js +0 -3
  473. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__d73ea818._.js +0 -3
  474. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__db3d0133._.js +0 -3
  475. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__dd0cf085._.js +0 -3
  476. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__de0f2533._.js +0 -7
  477. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e113f6df._.js +0 -3
  478. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e1a418bc._.js +0 -3
  479. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__e6c1d827._.js +0 -3
  480. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ea69c4ce._.js +0 -3
  481. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eac16890._.js +0 -3
  482. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__eb1dfcc6._.js +0 -3
  483. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ee75d43a._.js +0 -3
  484. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__ef773ea6._.js +0 -3
  485. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f0d15920._.js +0 -3
  486. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f15cbcfc._.js +0 -3
  487. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__f48eb2d4._.js +0 -3
  488. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fb6ab669._.js +0 -3
  489. package/web/.next/standalone/packages/web/.next/server/chunks/[root-of-the-server]__fe8419b5._.js +0 -129
  490. package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0e4dc4f7.js +0 -4
  491. package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_dd27f857.js +0 -3
  492. package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_e445b36c.js +0 -3
  493. package/web/.next/standalone/packages/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f375f3c4.js +0 -28
  494. package/web/.next/standalone/packages/web/.next/server/chunks/packages_core_dist_index_cdd30418.js +0 -3
  495. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-amp_dist_index_bf3d8239.js +0 -3
  496. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-ccr_dist_index_69cbf726.js +0 -3
  497. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-claude-code_dist_index_31314e43.js +0 -125
  498. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-cursor-cli_dist_index_8d5cc426.js +0 -3
  499. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-droid_dist_index_f731227a.js +0 -3
  500. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-gemini_dist_index_b2d219e8.js +0 -54
  501. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-github-copilot_dist_index_9f80cb45.js +0 -3
  502. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-opencode_dist_index_7c7015da.js +0 -3
  503. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_agent-qwen-code_dist_index_46dd8653.js +0 -3
  504. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-desktop_dist_index_ef3473f0.js +0 -3
  505. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_notifier-discord_dist_index_34257226.js +0 -3
  506. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_scm-github_dist_index_3b5a621e.js +0 -3
  507. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_terminal-web_dist_index_1e0706d3.js +0 -3
  508. package/web/.next/standalone/packages/web/.next/server/chunks/packages_plugins_tracker-github_dist_index_2d7af62f.js +0 -3
  509. package/web/.next/standalone/packages/web/.next/server/chunks/packages_web_src_lib_13fee5eb._.js +0 -3
  510. package/web/.next/standalone/packages/web/.next/server/chunks/packages_web_src_lib_d64596cc._.js +0 -3
  511. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/_b88bcf2c._.js +0 -3
  512. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_38e7b35d._.js +0 -3
  513. package/web/.next/standalone/packages/web/.next/server/chunks/ssr/node_modules_@clerk_nextjs_dist_esm_app-router_f665760b._.js +0 -3
  514. package/web/.next/standalone/packages/web/.next/static/chunks/062888342200567f.js +0 -1
  515. package/web/.next/standalone/packages/web/.next/static/chunks/6c9a11faed9daf4d.js +0 -1
  516. package/web/.next/standalone/packages/web/.next/static/chunks/8221b78965a50858.js +0 -1
  517. package/web/.next/standalone/packages/web/.next/static/chunks/8de84e208e201d72.css +0 -3
  518. package/web/.next/standalone/packages/web/.next/static/chunks/a8d4e0d75ca51921.js +0 -1
  519. package/web/.next/standalone/packages/web/.next/static/chunks/ac6a06c17a4f651f.js +0 -1
  520. package/web/.next/standalone/packages/web/.next/static/chunks/c4ea57fb949fb623.js +0 -1
  521. package/web/.next/standalone/packages/web/.next/static/chunks/d9d05e7b540400af.js +0 -1
  522. package/web/.next/standalone/packages/web/.next/static/chunks/f5d9ad0f62ede339.js +0 -1
  523. package/web/.next/standalone/packages/web/src/lib/services.ts +0 -319
  524. package/web/.next/static/chunks/062888342200567f.js +0 -1
  525. package/web/.next/static/chunks/6c9a11faed9daf4d.js +0 -1
  526. package/web/.next/static/chunks/8221b78965a50858.js +0 -1
  527. package/web/.next/static/chunks/8de84e208e201d72.css +0 -3
  528. package/web/.next/static/chunks/a8d4e0d75ca51921.js +0 -1
  529. package/web/.next/static/chunks/ac6a06c17a4f651f.js +0 -1
  530. package/web/.next/static/chunks/c4ea57fb949fb623.js +0 -1
  531. package/web/.next/static/chunks/d9d05e7b540400af.js +0 -1
  532. package/web/.next/static/chunks/f5d9ad0f62ede339.js +0 -1
  533. /package/web/.next/standalone/packages/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_buildManifest.js +0 -0
  534. /package/web/.next/standalone/packages/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_clientMiddlewareManifest.json +0 -0
  535. /package/web/.next/standalone/packages/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_ssgManifest.js +0 -0
  536. /package/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_buildManifest.js +0 -0
  537. /package/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_clientMiddlewareManifest.json +0 -0
  538. /package/web/.next/static/{P8IBAo_woCzrGXJiYCZto → oFTStwDpHHac4pinj0rAJ}/_ssgManifest.js +0 -0
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
 
3
- import { memo, useMemo } from "react";
4
- import { Layers3, Plus } from "lucide-react";
3
+ import { memo, useMemo, useState } from "react";
4
+ import { Layers3, Plus, X } from "lucide-react";
5
5
  import { cn } from "@/lib/cn";
6
6
  import { getAttentionLevel, type DashboardSession } from "@/lib/types";
7
7
  import { Sidebar } from "@/components/layout/Sidebar";
8
+ import { Button } from "@/components/ui/Button";
8
9
 
9
10
  interface ProjectItem {
10
11
  id: string;
@@ -16,6 +17,7 @@ interface WorkspaceSidebarPanelProps {
16
17
  projects: ProjectItem[];
17
18
  selectedProjectId: string | null;
18
19
  onSelectProject: (projectId: string | null) => void;
20
+ onUnlinkProject?: (projectId: string) => Promise<void>;
19
21
  sessions: DashboardSession[];
20
22
  selectedSessionId: string | null;
21
23
  onSelectSession: (sessionId: string) => void;
@@ -28,12 +30,16 @@ export const WorkspaceSidebarPanel = memo(function WorkspaceSidebarPanel({
28
30
  projects,
29
31
  selectedProjectId,
30
32
  onSelectProject,
33
+ onUnlinkProject,
31
34
  sessions,
32
35
  selectedSessionId,
33
36
  onSelectSession,
34
37
  onArchiveSession,
35
38
  onCreateWorkspace,
36
39
  }: WorkspaceSidebarPanelProps) {
40
+ const [unlinkingId, setUnlinkingId] = useState<string | null>(null);
41
+ const [confirmUnlinkProjectId, setConfirmUnlinkProjectId] = useState<string | null>(null);
42
+ const [unlinkError, setUnlinkError] = useState<string | null>(null);
37
43
  const sessionCountByProject = useMemo(() => {
38
44
  const counts = new Map<string, { total: number; active: number }>();
39
45
 
@@ -54,98 +60,207 @@ export const WorkspaceSidebarPanel = memo(function WorkspaceSidebarPanel({
54
60
  return sessions.filter((session) => session.status !== "archived" && getAttentionLevel(session) !== "done").length;
55
61
  }, [sessions]);
56
62
 
63
+ const confirmUnlinkProject = useMemo(
64
+ () => projects.find((project) => project.id === confirmUnlinkProjectId) ?? null,
65
+ [confirmUnlinkProjectId, projects],
66
+ );
67
+
68
+ async function handleConfirmUnlink(): Promise<void> {
69
+ if (!onUnlinkProject || !confirmUnlinkProjectId) return;
70
+ setUnlinkingId(confirmUnlinkProjectId);
71
+ setUnlinkError(null);
72
+ try {
73
+ await onUnlinkProject(confirmUnlinkProjectId);
74
+ setConfirmUnlinkProjectId(null);
75
+ } catch (err) {
76
+ setUnlinkError(err instanceof Error ? err.message : "Failed to unlink project.");
77
+ } finally {
78
+ setUnlinkingId(null);
79
+ }
80
+ }
81
+
57
82
  return (
58
- <div className="flex h-full min-h-0 w-full flex-col bg-[var(--vk-bg-panel)]">
59
- <section className="border-b border-[var(--vk-border)] px-4 py-4">
60
- <div className="flex items-start gap-3">
61
- <span className="inline-flex h-10 w-10 items-center justify-center rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] text-[var(--vk-text-normal)]">
62
- <Layers3 className="h-4 w-4" />
63
- </span>
64
- <div className="min-w-0 flex-1">
65
- <p className="truncate text-[15px] font-medium leading-[21px] text-[var(--vk-text-strong)]">
66
- {orgLabel}
67
- </p>
68
- <p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
69
- {projects.length} projects, {totalActiveSessions} active sessions
70
- </p>
83
+ <>
84
+ <div className="flex h-full min-h-0 w-full flex-col bg-[var(--vk-bg-panel)]">
85
+ <section className="border-b border-[var(--vk-border)] px-4 py-4">
86
+ <div className="flex items-start gap-3">
87
+ <span className="inline-flex h-10 w-10 items-center justify-center rounded-[10px] border border-[var(--vk-border)] bg-[var(--vk-bg-main)] text-[var(--vk-text-normal)]">
88
+ <Layers3 className="h-4 w-4" />
89
+ </span>
90
+ <div className="min-w-0 flex-1">
91
+ <p className="truncate text-[15px] font-medium leading-[21px] text-[var(--vk-text-strong)]">
92
+ {orgLabel}
93
+ </p>
94
+ <p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
95
+ {projects.length} projects, {totalActiveSessions} active sessions
96
+ </p>
97
+ </div>
71
98
  </div>
72
- </div>
73
99
 
74
- <button
75
- type="button"
76
- onClick={onCreateWorkspace}
77
- 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)]"
78
- aria-label="Add workspace"
79
- >
80
- <Plus className="h-3.5 w-3.5" />
81
- <span>Add Workspace</span>
82
- </button>
83
- </section>
84
-
85
- <section className="border-b border-[var(--vk-border)] pb-2 pt-1.5">
86
- <div className="flex h-[28px] items-center px-3">
87
- <p className="text-[11px] uppercase tracking-[0.08em] text-[var(--vk-text-muted)]">Projects</p>
88
- </div>
89
- <div className="max-h-[260px] overflow-y-auto px-2">
90
100
  <button
91
101
  type="button"
92
- onClick={() => onSelectProject(null)}
93
- className={cn(
94
- "mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",
95
- selectedProjectId === null
96
- ? "bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]"
97
- : "text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]",
98
- )}
102
+ onClick={onCreateWorkspace}
103
+ 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)]"
104
+ aria-label="Add workspace"
99
105
  >
100
- <span className="h-2.5 w-2.5 rounded-full bg-[var(--vk-text-muted)]" />
101
- <span className="truncate">All projects</span>
102
- <span className="ml-auto text-[11px] text-[var(--vk-text-muted)]">{sessions.length}</span>
106
+ <Plus className="h-3.5 w-3.5" />
107
+ <span>Add Workspace</span>
103
108
  </button>
109
+ </section>
110
+
111
+ <section className="border-b border-[var(--vk-border)] pb-2 pt-1.5">
112
+ <div className="flex h-[28px] items-center px-3">
113
+ <p className="text-[11px] uppercase tracking-[0.08em] text-[var(--vk-text-muted)]">Projects</p>
114
+ </div>
115
+ <div className="max-h-[260px] overflow-y-auto px-2">
116
+ <button
117
+ type="button"
118
+ onClick={() => onSelectProject(null)}
119
+ className={cn(
120
+ "mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",
121
+ selectedProjectId === null
122
+ ? "bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]"
123
+ : "text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]",
124
+ )}
125
+ >
126
+ <span className="h-2.5 w-2.5 rounded-full bg-[var(--vk-text-muted)]" />
127
+ <span className="truncate">All projects</span>
128
+ <span className="ml-auto text-[11px] text-[var(--vk-text-muted)]">{projects.length}</span>
129
+ </button>
104
130
 
105
- {projects.map((project) => {
106
- const selected = selectedProjectId === project.id;
107
- const counts = sessionCountByProject.get(project.id) ?? { total: 0, active: 0 };
108
- return (
109
- <button
110
- key={project.id}
131
+ {projects.map((project) => {
132
+ const selected = selectedProjectId === project.id;
133
+ const counts = sessionCountByProject.get(project.id) ?? { total: 0, active: 0 };
134
+ const isUnlinking = unlinkingId === project.id;
135
+ return (
136
+ <div
137
+ key={project.id}
138
+ className={cn(
139
+ "group relative mb-1.5 flex items-center rounded-[6px]",
140
+ selected
141
+ ? "bg-[var(--vk-bg-hover)]"
142
+ : "hover:bg-[var(--vk-bg-hover)]",
143
+ )}
144
+ >
145
+ <button
146
+ type="button"
147
+ onClick={() => onSelectProject(project.id)}
148
+ className={cn(
149
+ "flex min-w-0 flex-1 items-center gap-3 px-3 py-2.5 text-left text-[14px] leading-[21px]",
150
+ selected
151
+ ? "text-[var(--vk-text-normal)]"
152
+ : "text-[var(--vk-text-muted)]",
153
+ )}
154
+ >
155
+ <span className="mt-1 h-2.5 w-2.5 shrink-0 rounded-full bg-[#3c83f6]" />
156
+ <span className="min-w-0 flex-1">
157
+ <span className="block truncate">{project.id}</span>
158
+ {project.description ? (
159
+ <span className="block truncate text-[11px] text-[var(--vk-text-muted)]">
160
+ {project.description}
161
+ </span>
162
+ ) : null}
163
+ </span>
164
+ <span className="shrink-0 text-right">
165
+ <span className="block text-[11px] text-[var(--vk-text-normal)]">{counts.active} active</span>
166
+ <span className="block text-[10px] text-[var(--vk-text-muted)]">{counts.total} total</span>
167
+ </span>
168
+ </button>
169
+ {onUnlinkProject && (
170
+ <button
171
+ type="button"
172
+ disabled={isUnlinking}
173
+ onClick={(e) => {
174
+ e.stopPropagation();
175
+ setUnlinkError(null);
176
+ setConfirmUnlinkProjectId(project.id);
177
+ }}
178
+ className="mr-2 hidden 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)] group-hover:inline-flex disabled:opacity-50"
179
+ aria-label={`Unlink ${project.id}`}
180
+ title="Unlink project"
181
+ >
182
+ <X className="h-3.5 w-3.5" />
183
+ </button>
184
+ )}
185
+ </div>
186
+ );
187
+ })}
188
+ </div>
189
+ </section>
190
+
191
+ <section className="flex min-h-0 flex-1 flex-col pt-1.5">
192
+ <Sidebar
193
+ sessions={sessions}
194
+ selectedId={selectedSessionId}
195
+ onSelect={onSelectSession}
196
+ onArchive={onArchiveSession}
197
+ onCreateWorkspace={onCreateWorkspace}
198
+ showHeader={false}
199
+ />
200
+ </section>
201
+ </div>
202
+
203
+ {confirmUnlinkProject && (
204
+ <div
205
+ className="fixed inset-0 z-[80] flex items-center justify-center bg-black/60 px-4"
206
+ onClick={() => {
207
+ if (unlinkingId) return;
208
+ setConfirmUnlinkProjectId(null);
209
+ setUnlinkError(null);
210
+ }}
211
+ >
212
+ <div
213
+ className="surface-card w-full max-w-md rounded-[var(--radius-lg)] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)]"
214
+ onClick={(event) => event.stopPropagation()}
215
+ role="dialog"
216
+ aria-modal="true"
217
+ aria-labelledby="unlink-project-title"
218
+ >
219
+ <div className="border-b border-[var(--vk-border)] px-4 py-3">
220
+ <h2 id="unlink-project-title" className="text-[17px] font-medium text-[var(--vk-text-strong)]">
221
+ Unlink Project
222
+ </h2>
223
+ <p className="mt-1 text-[12px] text-[var(--vk-text-muted)]">
224
+ Remove <span className="font-medium text-[var(--vk-text-normal)]">{confirmUnlinkProject.id}</span> from this workspace configuration.
225
+ </p>
226
+ </div>
227
+
228
+ <div className="space-y-3 px-4 py-4">
229
+ <p className="text-[13px] leading-5 text-[var(--vk-text-normal)]">
230
+ This only removes the project from Conductor. Repository files on disk are not deleted.
231
+ </p>
232
+
233
+ {unlinkError ? (
234
+ <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)]">
235
+ {unlinkError}
236
+ </div>
237
+ ) : null}
238
+ </div>
239
+
240
+ <div className="flex items-center justify-end gap-2 border-t border-[var(--vk-border)] px-4 py-3">
241
+ <Button
111
242
  type="button"
112
- onClick={() => onSelectProject(project.id)}
113
- className={cn(
114
- "mb-1.5 flex w-full items-center gap-3 rounded-[6px] px-3 py-2.5 text-left text-[14px] leading-[21px]",
115
- selected
116
- ? "bg-[var(--vk-bg-hover)] text-[var(--vk-text-normal)]"
117
- : "text-[var(--vk-text-muted)] hover:bg-[var(--vk-bg-hover)]",
118
- )}
243
+ variant="ghost"
244
+ onClick={() => {
245
+ setConfirmUnlinkProjectId(null);
246
+ setUnlinkError(null);
247
+ }}
248
+ disabled={unlinkingId !== null}
119
249
  >
120
- <span className="mt-1 h-2.5 w-2.5 shrink-0 rounded-full bg-[#3c83f6]" />
121
- <span className="min-w-0 flex-1">
122
- <span className="block truncate">{project.id}</span>
123
- {project.description ? (
124
- <span className="block truncate text-[11px] text-[var(--vk-text-muted)]">
125
- {project.description}
126
- </span>
127
- ) : null}
128
- </span>
129
- <span className="shrink-0 text-right">
130
- <span className="block text-[11px] text-[var(--vk-text-normal)]">{counts.active} active</span>
131
- <span className="block text-[10px] text-[var(--vk-text-muted)]">{counts.total} total</span>
132
- </span>
133
- </button>
134
- );
135
- })}
250
+ Cancel
251
+ </Button>
252
+ <Button
253
+ type="button"
254
+ variant="danger"
255
+ onClick={() => void handleConfirmUnlink()}
256
+ disabled={unlinkingId !== null}
257
+ >
258
+ {unlinkingId === confirmUnlinkProject.id ? "Unlinking..." : "Unlink Project"}
259
+ </Button>
260
+ </div>
261
+ </div>
136
262
  </div>
137
- </section>
138
-
139
- <section className="flex min-h-0 flex-1 flex-col pt-1.5">
140
- <Sidebar
141
- sessions={sessions}
142
- selectedId={selectedSessionId}
143
- onSelect={onSelectSession}
144
- onArchive={onArchiveSession}
145
- onCreateWorkspace={onCreateWorkspace}
146
- showHeader={false}
147
- />
148
- </section>
149
- </div>
263
+ )}
264
+ </>
150
265
  );
151
266
  });
@@ -37,6 +37,7 @@ import { useAgents } from "@/hooks/useAgents";
37
37
  import { useSessionFeed } from "@/hooks/useSessionFeed";
38
38
  import type { NormalizedChatEntry } from "@/lib/chatFeed";
39
39
  import { normalizeAgentName } from "@/lib/agentUtils";
40
+ import { getAvailableAgentModels, resolveAgentModelAccess } from "@conductor-oss/core/types";
40
41
 
41
42
  interface ChatPanelProps {
42
43
  sessionId: string;
@@ -128,6 +129,17 @@ function getModelOptions(
128
129
  const options = new Map<string, ModelOption>();
129
130
  const normalizedAgentName = normalizeAgentName(agentName);
130
131
 
132
+ const fallbackModels = getAvailableAgentModels(agentName, undefined);
133
+ for (const model of fallbackModels) {
134
+ const id = model.id.trim();
135
+ if (!id || options.has(id)) continue;
136
+ options.set(id, {
137
+ id,
138
+ label: model.label.trim() || id,
139
+ helper: "Built-in catalog",
140
+ });
141
+ }
142
+
131
143
  for (const agent of agents) {
132
144
  if (normalizedAgentName && normalizeAgentName(agent.name) !== normalizedAgentName) {
133
145
  continue;
@@ -284,6 +296,25 @@ const markdownComponents = {
284
296
  className={[props.className, "whitespace-pre-wrap"].filter(Boolean).join(" ")}
285
297
  />
286
298
  ),
299
+ pre: (props: ComponentProps<"pre">) => (
300
+ <pre
301
+ {...props}
302
+ className={[
303
+ props.className,
304
+ "max-w-full overflow-x-hidden whitespace-pre-wrap break-words rounded-[6px] border border-[#333] bg-[#1c1c1c] px-3 py-3 text-[12px] leading-[18px] [overflow-wrap:anywhere] sm:text-[13px] sm:leading-[20px]",
305
+ ].filter(Boolean).join(" ")}
306
+ />
307
+ ),
308
+ code: (props: ComponentProps<"code"> & { inline?: boolean }) => (
309
+ <code
310
+ {...props}
311
+ className={[
312
+ props.className,
313
+ "font-mono whitespace-pre-wrap break-all [overflow-wrap:anywhere]",
314
+ props.inline ? "rounded bg-[rgba(0,0,0,0.22)] px-1 py-[1px] text-[#f1f1f1]" : "",
315
+ ].filter(Boolean).join(" ")}
316
+ />
317
+ ),
287
318
  };
288
319
 
289
320
  function SetupScriptHint() {
@@ -738,7 +769,7 @@ function ParserStateBanner({
738
769
  <p className="whitespace-pre-wrap break-words text-[13px] leading-[20px]">{message}</p>
739
770
  {command ? (
740
771
  <p className="text-[12px] leading-[18px] text-[#c4c4c4]">
741
- Run locally: <code className="rounded bg-[rgba(0,0,0,0.22)] px-1 py-[1px] text-[#f1f1f1]">{command}</code>
772
+ Run locally: <code className="rounded bg-[rgba(0,0,0,0.22)] px-1 py-[1px] whitespace-pre-wrap break-all text-[#f1f1f1] [overflow-wrap:anywhere]">{command}</code>
742
773
  </p>
743
774
  ) : null}
744
775
  </div>
@@ -843,12 +874,12 @@ function ToolEntry({ entry }: { entry: NormalizedChatEntry }) {
843
874
  {statusIndicator}
844
875
  <Icon className="mt-[2px] h-[14px] w-[14px] shrink-0 text-[var(--vk-text-muted)]" strokeWidth={1.7} />
845
876
  <div className="min-w-0 flex-1">
846
- <div className="flex min-w-0 flex-wrap items-center gap-2">
847
- <span className="shrink-0 text-[14px] font-medium leading-[21px] text-[#d0d0d0]">
877
+ <div className="flex min-w-0 flex-col items-start gap-1 sm:flex-row sm:flex-wrap sm:items-center sm:gap-2">
878
+ <span className="min-w-0 max-w-full break-words text-[13px] font-medium leading-[20px] text-[#d0d0d0] sm:text-[14px] sm:leading-[21px]">
848
879
  {toolTitle}
849
880
  </span>
850
881
  {inlineSummary ? (
851
- <span className="min-w-0 max-w-full truncate rounded-[3px] bg-[rgba(255,255,255,0.06)] px-2 py-[2px] font-mono text-[12px] leading-[18px] text-[#a9a9a9]">
882
+ <span className="min-w-0 w-full whitespace-pre-wrap break-all rounded-[3px] bg-[rgba(255,255,255,0.06)] px-2 py-[2px] font-mono text-[11px] leading-[17px] text-[#a9a9a9] [overflow-wrap:anywhere] sm:w-auto sm:max-w-full sm:text-[12px] sm:leading-[18px]">
852
883
  {inlineSummary}
853
884
  </span>
854
885
  ) : null}
@@ -945,7 +976,7 @@ function ToolGroup({
945
976
  <span>{countLabel}</span>
946
977
  </button>
947
978
  {expanded ? (
948
- <div className="space-y-1 pl-5">
979
+ <div className="space-y-1 pl-3 sm:pl-5">
949
980
  {entries.map((entry) => (
950
981
  <ToolEntry key={entry.id} entry={entry} />
951
982
  ))}
@@ -4,7 +4,11 @@ import dynamic from "next/dynamic";
4
4
  import { type FormEvent, memo, useCallback, useEffect, useMemo, useState } from "react";
5
5
  import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
6
6
  import {
7
+ getAvailableAgentModels,
8
+ getAvailableAgentReasoningEfforts,
7
9
  getAgentModelCatalog,
10
+ getDefaultAgentModel,
11
+ getDefaultAgentReasoningEffort,
8
12
  resolveAgentModelAccess,
9
13
  supportsAgentModelSelection,
10
14
  type AgentModelOption,
@@ -32,7 +36,6 @@ import {
32
36
  Hand,
33
37
  List,
34
38
  Loader2,
35
- Paperclip,
36
39
  PlugZap,
37
40
  RefreshCcw,
38
41
  Search,
@@ -527,7 +530,17 @@ function getSelectableAgentModels(
527
530
  const runtimeCatalog = getRuntimeModelCatalog(agent, runtimeModelCatalogs);
528
531
  const access = resolveAgentModelAccess(agent, modelAccess);
529
532
  const scopedModels = getRuntimeCatalogModelsForAccess(runtimeCatalog, access);
530
- return scopedModels.length > 0 ? scopedModels : getAllRuntimeCatalogModels(runtimeCatalog);
533
+ const staticModels = getAvailableAgentModels(agent, modelAccess);
534
+ const merged: AgentModelOption[] = [];
535
+ const seen = new Set<string>();
536
+
537
+ for (const model of [...scopedModels, ...staticModels, ...getAllRuntimeCatalogModels(runtimeCatalog)]) {
538
+ if (!model?.id || seen.has(model.id)) continue;
539
+ seen.add(model.id);
540
+ merged.push(model);
541
+ }
542
+
543
+ return merged;
531
544
  }
532
545
 
533
546
  function getSelectableAgentReasoningOptions(
@@ -538,7 +551,18 @@ function getSelectableAgentReasoningOptions(
538
551
  ): AgentReasoningOption[] {
539
552
  const runtimeCatalog = getRuntimeModelCatalog(agent, runtimeModelCatalogs);
540
553
  const access = resolveAgentModelAccess(agent, modelAccess);
541
- return getRuntimeCatalogReasoningOptions(runtimeCatalog, model, access);
554
+ const runtimeOptions = getRuntimeCatalogReasoningOptions(runtimeCatalog, model, access);
555
+ const staticOptions = getAvailableAgentReasoningEfforts(agent, modelAccess);
556
+ const merged: AgentReasoningOption[] = [];
557
+ const seen = new Set<string>();
558
+
559
+ for (const option of [...runtimeOptions, ...staticOptions]) {
560
+ if (!option?.id || seen.has(option.id)) continue;
561
+ seen.add(option.id);
562
+ merged.push(option);
563
+ }
564
+
565
+ return merged;
542
566
  }
543
567
 
544
568
  function getSelectableDefaultAgentModel(
@@ -549,6 +573,7 @@ function getSelectableDefaultAgentModel(
549
573
  const runtimeCatalog = getRuntimeModelCatalog(agent, runtimeModelCatalogs);
550
574
  const access = resolveAgentModelAccess(agent, modelAccess);
551
575
  return getRuntimeCatalogDefaultModelForAccess(runtimeCatalog, access)
576
+ ?? getDefaultAgentModel(agent, modelAccess)
552
577
  ?? getAllRuntimeCatalogModels(runtimeCatalog)[0]?.id
553
578
  ?? "";
554
579
  }
@@ -561,7 +586,9 @@ function getSelectableDefaultReasoningEffort(
561
586
  ): string {
562
587
  const runtimeCatalog = getRuntimeModelCatalog(agent, runtimeModelCatalogs);
563
588
  const access = resolveAgentModelAccess(agent, modelAccess);
564
- return getRuntimeCatalogDefaultReasoning(runtimeCatalog, model, access) ?? "";
589
+ return getRuntimeCatalogDefaultReasoning(runtimeCatalog, model, access)
590
+ ?? getDefaultAgentReasoningEffort(agent, modelAccess)
591
+ ?? "";
565
592
  }
566
593
 
567
594
  function getSelectableModelPlaceholder(
@@ -1065,14 +1092,6 @@ export default function DashboardClient() {
1065
1092
  }
1066
1093
  }, [preferences, preferencesLoading]);
1067
1094
 
1068
- useEffect(() => {
1069
- if (selectedAgent) return;
1070
- const fromProject = projects.find((p) => p.id === selectedProjectId)?.agent;
1071
- if (fromProject) {
1072
- setSelectedAgent(fromProject);
1073
- }
1074
- }, [projects, selectedAgent, selectedProjectId]);
1075
-
1076
1095
  useEffect(() => {
1077
1096
  if (agentOptions.length === 0) return;
1078
1097
  if (!selectedAgent || !agentOptions.includes(selectedAgent)) {
@@ -1319,12 +1338,9 @@ export default function DashboardClient() {
1319
1338
  const handleSelectProject = useCallback((projectId: string | null) => {
1320
1339
  setSelectedProjectId(projectId);
1321
1340
  setSelectedSessionId(null);
1322
- const nextAgent = projectId
1323
- ? projects.find((project) => project.id === projectId)?.agent
1324
- : preferences?.codingAgent;
1325
- setSelectedAgent(nextAgent || DEFAULT_AGENT);
1341
+ setSelectedAgent(preferences?.codingAgent || DEFAULT_AGENT);
1326
1342
  closeSidebarOnMobile();
1327
- }, [closeSidebarOnMobile, preferences?.codingAgent, projects]);
1343
+ }, [closeSidebarOnMobile, preferences?.codingAgent]);
1328
1344
 
1329
1345
  const handleSelectSession = useCallback((id: string) => {
1330
1346
  setSelectedSessionId(id);
@@ -1346,12 +1362,29 @@ export default function DashboardClient() {
1346
1362
  setPreferencesError(null);
1347
1363
  }, [onboardingRequired, preferencesSaving]);
1348
1364
 
1365
+ const handleUnlinkProject = useCallback(async (projectId: string) => {
1366
+ const encodedProjectId = encodeURIComponent(projectId);
1367
+ let res = await fetch(`/api/repositories/${encodedProjectId}`, { method: "DELETE" });
1368
+
1369
+ // Fall back to the query-string endpoint for older servers that only expose DELETE /api/repositories?id=...
1370
+ if (res.status === 404 || res.status === 405) {
1371
+ res = await fetch(`/api/repositories?id=${encodedProjectId}`, { method: "DELETE" });
1372
+ }
1373
+
1374
+ const data = (await res.json().catch(() => null)) as { ok?: boolean; error?: string } | null;
1375
+ if (!res.ok) {
1376
+ throw new Error(data?.error ?? `Failed to unlink project (${res.status})`);
1377
+ }
1378
+ await refreshConfig();
1379
+ }, [refreshConfig]);
1380
+
1349
1381
  const sidebarContent = useMemo(() => (
1350
1382
  <WorkspaceSidebarPanel
1351
1383
  orgLabel="conductor-oss"
1352
1384
  projects={projects}
1353
1385
  selectedProjectId={selectedProjectId}
1354
1386
  onSelectProject={handleSelectProject}
1387
+ onUnlinkProject={handleUnlinkProject}
1355
1388
  sessions={dashboardSessions}
1356
1389
  selectedSessionId={selectedSessionId}
1357
1390
  onSelectSession={handleSelectSession}
@@ -1363,6 +1396,7 @@ export default function DashboardClient() {
1363
1396
  handleArchiveSession,
1364
1397
  handleSelectProject,
1365
1398
  handleSelectSession,
1399
+ handleUnlinkProject,
1366
1400
  openWorkspaceDialog,
1367
1401
  projects,
1368
1402
  selectedProjectId,
@@ -1437,7 +1471,7 @@ export default function DashboardClient() {
1437
1471
  }
1438
1472
 
1439
1473
  return (
1440
- <div className="flex h-full min-h-0 flex-col">
1474
+ <div className="min-h-0 flex-1 overflow-auto">
1441
1475
  <WorkspaceOverview
1442
1476
  projects={projects}
1443
1477
  sessions={dashboardSessions}
@@ -1449,10 +1483,6 @@ export default function DashboardClient() {
1449
1483
  onSelectSession={handleSelectSession}
1450
1484
  onShowView={setWorkspaceView}
1451
1485
  />
1452
-
1453
- <div className="min-h-0 flex-1 overflow-hidden">
1454
- {workspaceMainPanel}
1455
- </div>
1456
1486
  </div>
1457
1487
  );
1458
1488
  }, [
@@ -2090,6 +2120,7 @@ function FolderPickerDialog({
2090
2120
  const [search, setSearch] = useState("");
2091
2121
  const [loading, setLoading] = useState(false);
2092
2122
  const [error, setError] = useState<string | null>(null);
2123
+ const [browseLoading, setBrowseLoading] = useState(false);
2093
2124
 
2094
2125
  useEffect(() => {
2095
2126
  if (!open) return;
@@ -2154,12 +2185,35 @@ function FolderPickerDialog({
2154
2185
  const handleGoParent = () => {
2155
2186
  if (!currentPath) return;
2156
2187
  const normalized = currentPath.replace(/\\/g, "/");
2188
+ // Handle Windows drive root (e.g. "C:/")
2189
+ if (/^[A-Za-z]:\/?$/.test(currentPath)) return;
2157
2190
  if (normalized === "/") return;
2158
2191
  const parts = normalized.split("/").filter(Boolean);
2159
- const parent = parts.length > 1 ? `/${parts.slice(0, -1).join("/")}` : "/";
2192
+ // Preserve Windows drive letter when going up
2193
+ const driveMatch = currentPath.match(/^([A-Za-z]):[/\\]/);
2194
+ const parent = driveMatch
2195
+ ? parts.length > 1 ? `${driveMatch[1]}:/${parts.slice(1, -1).join("/")}` : `${driveMatch[1]}:/`
2196
+ : parts.length > 1 ? `/${parts.slice(0, -1).join("/")}` : "/";
2160
2197
  void loadDirectory(parent);
2161
2198
  };
2162
2199
 
2200
+ const handleNativeBrowse = async () => {
2201
+ setBrowseLoading(true);
2202
+ try {
2203
+ const res = await fetch("/api/filesystem/pick-directory", { method: "POST" });
2204
+ const data = (await res.json().catch(() => null)) as
2205
+ | { path?: string; cancelled?: boolean; error?: string }
2206
+ | null;
2207
+ if (!data || data.cancelled || !data.path) return;
2208
+ setManualPath(data.path);
2209
+ void loadDirectory(data.path);
2210
+ } catch {
2211
+ // Native picker unavailable — user can still use manual path entry
2212
+ } finally {
2213
+ setBrowseLoading(false);
2214
+ }
2215
+ };
2216
+
2163
2217
  if (!open) return null;
2164
2218
 
2165
2219
  return (
@@ -2216,6 +2270,15 @@ function FolderPickerDialog({
2216
2270
  >
2217
2271
  Up
2218
2272
  </button>
2273
+ <button
2274
+ type="button"
2275
+ disabled={browseLoading}
2276
+ onClick={() => { void handleNativeBrowse(); }}
2277
+ className="inline-flex h-8 items-center gap-1 rounded-[4px] border border-[var(--vk-border)] px-2 text-[12px] text-[var(--vk-text-normal)] hover:bg-[var(--vk-bg-hover)] disabled:opacity-50"
2278
+ >
2279
+ {browseLoading ? <Loader2 className="h-3 w-3 animate-spin" /> : <FolderOpen className="h-3 w-3" />}
2280
+ {browseLoading ? "Opening..." : "Browse"}
2281
+ </button>
2219
2282
  <div className="truncate text-[12px] text-[var(--vk-text-muted)]">{currentPath || "Home"}</div>
2220
2283
  </div>
2221
2284
 
@@ -2812,10 +2875,6 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
2812
2875
  </DropdownMenu.Portal>
2813
2876
  </DropdownMenu.Root>
2814
2877
 
2815
- <div className="inline-flex h-[29px] w-[29px] items-center justify-center rounded-[3px] border border-[var(--vk-border)] bg-[var(--vk-bg-panel)] text-[var(--vk-text-normal)]">
2816
- <ChevronsRight className="h-[15px] w-[15px]" />
2817
- </div>
2818
-
2819
2878
  <DropdownMenu.Root>
2820
2879
  <DropdownMenu.Trigger asChild>
2821
2880
  <button
@@ -2846,15 +2905,6 @@ const CreateWorkspacePanel = memo(function CreateWorkspacePanel({
2846
2905
  </DropdownMenu.Portal>
2847
2906
  </DropdownMenu.Root>
2848
2907
 
2849
- <button
2850
- type="button"
2851
- onClick={onOpenAddWorkspace}
2852
- className="inline-flex h-[29px] w-[20px] items-center justify-center text-[var(--vk-text-muted)] hover:text-[var(--vk-text-normal)]"
2853
- aria-label="Add workspace"
2854
- >
2855
- <Paperclip className="h-[18px] w-[18px]" />
2856
- </button>
2857
-
2858
2908
  <DropdownMenu.Root>
2859
2909
  <DropdownMenu.Trigger asChild>
2860
2910
  <button