tower-studio 0.2.16 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -100
  4. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page/next-font-manifest.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +40 -28
  14. package/.next/standalone/.next/server/app/_not-found/page.js +6 -5
  15. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/browse-fs/route.js +1 -1
  19. package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +1 -1
  29. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js +1 -1
  40. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/missions/page/next-font-manifest.json +1 -1
  42. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  43. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +87 -63
  44. package/.next/standalone/.next/server/app/missions/page.js +9 -7
  45. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/onboarding/page/next-font-manifest.json +1 -1
  48. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  49. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +40 -28
  50. package/.next/standalone/.next/server/app/onboarding/page.js +6 -5
  51. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/page/next-font-manifest.json +1 -1
  54. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
  55. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +40 -28
  56. package/.next/standalone/.next/server/app/page.js +6 -5
  57. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/settings/page/next-font-manifest.json +1 -1
  60. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  61. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +67 -43
  62. package/.next/standalone/.next/server/app/settings/page.js +7 -6
  63. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/next-font-manifest.json +1 -1
  66. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  67. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +186 -138
  68. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +8 -6
  69. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/next-font-manifest.json +1 -1
  72. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  73. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +184 -124
  74. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +8 -6
  75. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/next-font-manifest.json +1 -1
  78. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  79. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +74 -62
  80. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +6 -5
  81. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/next-font-manifest.json +1 -1
  84. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  85. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +174 -114
  86. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +9 -7
  87. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/next-font-manifest.json +1 -1
  90. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  91. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +40 -28
  92. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +7 -6
  93. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/next-font-manifest.json +1 -1
  96. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
  97. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +158 -110
  98. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +8 -6
  99. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/next-font-manifest.json +1 -1
  102. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
  103. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +126 -78
  104. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +10 -8
  105. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/workspaces/page/next-font-manifest.json +1 -1
  108. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  109. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +60 -48
  110. package/.next/standalone/.next/server/app/workspaces/page.js +6 -5
  111. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +2 -2
  114. package/.next/standalone/.next/server/chunks/[externals]__0m5smhl._.js +3 -0
  115. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-0gs-6._.js +3 -0
  116. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03j20vp._.js +2 -2
  117. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05se6yk._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06m1r8x._.js +4 -0
  119. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09p152b._.js +1 -1
  120. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_6swdz._.js +2 -2
  121. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b-ib~7._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gmwjkc._.js +3 -0
  123. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o3ggen._.js +3 -3
  124. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0.0.jeg._.js → [root-of-the-server]__0sy6lau._.js} +2 -2
  125. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wuzc5o._.js +1 -1
  126. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~rm9q.._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12c9noi._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/src_0bkvm8c._.js +1 -1
  129. package/.next/standalone/.next/server/chunks/src_lib_0aowbzy._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/{0ws9_lucide-react_dist_esm_icons_0dv2bel._.js → 0ws9_lucide-react_dist_esm_icons_0odx0ph._.js} +2 -2
  132. package/.next/standalone/.next/server/chunks/ssr/{_10.d8~a._.js → 0yzm_fuse_js_dist_fuse_mjs_0t4upxy._.js} +2 -2
  133. package/.next/standalone/.next/server/chunks/ssr/[externals]_@vscode_ripgrep_0m7itqb._.js +3 -0
  134. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vx7inx._.js → [root-of-the-server]__01evhhc._.js} +2 -2
  135. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__063j5j2._.js → [root-of-the-server]__0261~vp._.js} +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0313pct._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0o4yodb._.js → [root-of-the-server]__07ns1z8._.js} +2 -2
  138. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08xomvf._.js +47 -0
  139. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0lhroxu._.js → [root-of-the-server]__09rts_e._.js} +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b.ej5q._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0c7x0o9._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e82_jw._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__09n4g~p._.js → [root-of-the-server]__0eea3ta._.js} +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qy_98o._.js → [root-of-the-server]__0la1659._.js} +2 -2
  145. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__08g-39i._.js → [root-of-the-server]__0m1tg3c._.js} +2 -2
  146. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__057bwkf._.js → [root-of-the-server]__0oqhxfb._.js} +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0wabw~r._.js → [root-of-the-server]__0qy0o3-._.js} +2 -2
  148. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sc_a_d._.js +30 -0
  149. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-pzjth._.js → [root-of-the-server]__0sdd0qu._.js} +2 -2
  150. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sdt1y5._.js +3 -0
  151. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sk.itb._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00l2th1._.js → [root-of-the-server]__0th0_fo._.js} +4 -4
  153. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ty1ao1._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vicp7s._.js → [root-of-the-server]__0v7p~3.._.js} +2 -2
  155. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjuu0z._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wt83kv._.js +1 -1
  157. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y.s5ax._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y5wu~l._.js +3 -0
  159. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0y.2qv_._.js → [root-of-the-server]__0z7je5_._.js} +3 -3
  160. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zq.n2w._.js +30 -0
  161. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11zjs~k._.js +1 -1
  162. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zgzcl5._.js → [root-of-the-server]__12ktvsa._.js} +1 -1
  163. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__13i_x1.._.js → [root-of-the-server]__13374-3._.js} +2 -2
  164. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__134_xv.._.js +3 -0
  165. package/.next/standalone/.next/server/chunks/ssr/{_0hj6ykf._.js → _0-ez10.._.js} +1 -1
  166. package/.next/standalone/.next/server/chunks/ssr/_01e47s2._.js +4 -0
  167. package/.next/standalone/.next/server/chunks/ssr/_01yg50d._.js +3 -0
  168. package/.next/standalone/.next/server/chunks/ssr/{_0jis7fv._.js → _0574rlr._.js} +1 -1
  169. package/.next/standalone/.next/server/chunks/ssr/_05l656y._.js +3 -0
  170. package/.next/standalone/.next/server/chunks/ssr/_06-jig2._.js +3 -0
  171. package/.next/standalone/.next/server/chunks/ssr/{_0u6n.gw._.js → _08z-g~5._.js} +4 -4
  172. package/.next/standalone/.next/server/chunks/ssr/_09qgmwg._.js +3 -0
  173. package/.next/standalone/.next/server/chunks/ssr/_0_7d5_7._.js +7 -0
  174. package/.next/standalone/.next/server/chunks/ssr/{_0l0n0gc._.js → _0_vjay8._.js} +4 -4
  175. package/.next/standalone/.next/server/chunks/ssr/_0_zfpwh._.js +3 -0
  176. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +2 -2
  177. package/.next/standalone/.next/server/chunks/ssr/_0djgo-u._.js +3 -0
  178. package/.next/standalone/.next/server/chunks/ssr/_0dvltcf._.js +3 -0
  179. package/.next/standalone/.next/server/chunks/ssr/_0gv9sv3._.js +3 -0
  180. package/.next/standalone/.next/server/chunks/ssr/_0jg.s-g._.js +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/_0jz8fv8._.js +3 -0
  182. package/.next/standalone/.next/server/chunks/ssr/{_0b9lr.2._.js → _0kef0v6._.js} +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/_0n.xiu5._.js +7 -0
  184. package/.next/standalone/.next/server/chunks/ssr/{_0_in9ut._.js → _0nbufo.._.js} +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/_0ng0eku._.js +1 -1
  186. package/.next/standalone/.next/server/chunks/ssr/{_0~~v0og._.js → _0qkxdkn._.js} +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/{_0bijc0.._.js → _0r6gweb._.js} +4 -4
  188. package/.next/standalone/.next/server/chunks/ssr/_0rdyrfd._.js +1 -1
  189. package/.next/standalone/.next/server/chunks/ssr/{_08j7--7._.js → _0rqf5w7._.js} +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/{_0st9b1_._.js → _0rt8jf_._.js} +4 -4
  191. package/.next/standalone/.next/server/chunks/ssr/{_0ds16oj._.js → _0sbxdnc._.js} +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/_0ueyys5._.js +1 -1
  193. package/.next/standalone/.next/server/chunks/ssr/_0unw1fq._.js +2 -2
  194. package/.next/standalone/.next/server/chunks/ssr/{_0i2m-0~._.js → _0uuzh5m._.js} +4 -4
  195. package/.next/standalone/.next/server/chunks/ssr/{_11ixey~._.js → _0~aon4t._.js} +4 -4
  196. package/.next/standalone/.next/server/chunks/ssr/_10ogq8w._.js +3 -0
  197. package/.next/standalone/.next/server/chunks/ssr/_13esy08._.js +3 -0
  198. package/.next/standalone/.next/server/chunks/ssr/_13kwp85._.js +7 -0
  199. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0hhlpw6._.js +3 -0
  200. package/.next/standalone/.next/server/chunks/ssr/src_075s.rk._.js +3 -0
  201. package/.next/standalone/.next/server/chunks/ssr/src_0djxlqx._.js +3 -0
  202. package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +1 -1
  203. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
  204. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  206. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  207. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  208. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  209. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  210. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  211. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0f4q-6w._.js → src_lib_00tdjs9._.js} +1 -1
  212. package/.next/standalone/.next/server/chunks/ssr/{src_lib_09ajdu_._.js → src_lib_0153vha._.js} +1 -1
  213. package/.next/standalone/.next/server/chunks/ssr/{src_lib_05wgz5w._.js → src_lib_07bxr4y._.js} +1 -1
  214. package/.next/standalone/.next/server/chunks/ssr/{src_lib_078780e._.js → src_lib_0dnn~ft._.js} +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/src_lib_0e.v07~._.js +3 -0
  216. package/.next/standalone/.next/server/chunks/ssr/src_lib_0haj7_-._.js +3 -0
  217. package/.next/standalone/.next/server/chunks/ssr/src_lib_0vp4mgz._.js +3 -0
  218. package/.next/standalone/.next/server/chunks/ssr/src_lib_0wd-1.k._.js +3 -0
  219. package/.next/standalone/.next/server/chunks/ssr/src_lib_0yvdojq._.js +3 -0
  220. package/.next/standalone/.next/server/chunks/ssr/src_lib_0zfjhu1._.js +3 -0
  221. package/.next/standalone/.next/server/chunks/ssr/src_lib_0~cwhiw._.js +3 -0
  222. package/.next/standalone/.next/server/chunks/ssr/src_lib_127qa83._.js +3 -0
  223. package/.next/standalone/.next/server/chunks/ssr/src_lib_12h5txa._.js +3 -0
  224. package/.next/standalone/.next/server/chunks/ssr/src_lib_open-targets_ts_12a-_~u._.js +3 -0
  225. package/.next/standalone/.next/server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js +1 -1
  226. package/.next/standalone/.next/server/functions-config-manifest.json +10 -1
  227. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  228. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  229. package/.next/standalone/.next/server/next-font-manifest.json +13 -13
  230. package/.next/standalone/.next/server/pages/500.html +1 -1
  231. package/.next/standalone/.next/server/pages-manifest.json +0 -1
  232. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/server-reference-manifest.json +678 -456
  234. package/.next/standalone/.next/static/chunks/0._824vjqa-9k.js +5 -0
  235. package/.next/standalone/.next/static/chunks/{0e8wfpfgivr6t.js → 03og02bu96n.e.js} +1 -1
  236. package/.next/standalone/.next/static/chunks/{07idrdtj1o8zu.js → 04wsku4m5~s1q.js} +1 -1
  237. package/.next/standalone/.next/static/chunks/{123doanyjnwwq.css → 066jf0nk75nic.css} +1 -1
  238. package/.next/standalone/.next/static/chunks/06qwj~g0qwhey.js +5 -0
  239. package/.next/standalone/.next/static/chunks/08rokhw7bg_zn.js +1 -0
  240. package/.next/standalone/.next/static/chunks/08~85j56saf6q.js +1 -0
  241. package/.next/standalone/.next/static/chunks/096ysbmoa9qsb.js +1 -0
  242. package/.next/standalone/.next/static/chunks/0b6zhezopdbs2.js +1 -0
  243. package/.next/standalone/.next/static/chunks/0c7b_.6i4jef8.js +1 -0
  244. package/.next/standalone/.next/static/chunks/0esvyij44lvt6.js +1 -0
  245. package/.next/standalone/.next/static/chunks/0hniqlgz6waea.js +2 -0
  246. package/.next/standalone/.next/static/chunks/0hseznii2u-4n.js +5 -0
  247. package/.next/standalone/.next/static/chunks/0izukvmui9f8m.js +1 -0
  248. package/.next/standalone/.next/static/chunks/0kycb80.t-7_-.js +1 -0
  249. package/.next/standalone/.next/static/chunks/0lv0zqg.f66eu.js +1 -0
  250. package/.next/standalone/.next/static/chunks/0njf5husn6ovd.js +1 -0
  251. package/.next/standalone/.next/static/chunks/0okjtk-a.5lz0.css +1 -0
  252. package/.next/standalone/.next/static/chunks/0p7hamd-yspky.js +2 -0
  253. package/.next/standalone/.next/static/chunks/0s6ygn-alcm2d.js +1 -0
  254. package/.next/standalone/.next/static/chunks/0v66~34w9t3gz.js +5 -0
  255. package/.next/standalone/.next/static/chunks/0v_nmghra_n2q.js +1 -0
  256. package/.next/standalone/.next/static/chunks/{0vyurjgr0u8aw.js → 0vu_cifxk7vfu.js} +1 -1
  257. package/.next/standalone/.next/static/chunks/0zf35xwv.l3l7.js +1 -0
  258. package/.next/standalone/.next/static/chunks/{0_t7890~b8s.q.js → 10ght~j9wl9ab.js} +1 -1
  259. package/.next/standalone/.next/static/chunks/11.t9_o8cox8t.js +1 -0
  260. package/.next/standalone/.next/static/chunks/1124-9qfcr70v.js +1 -0
  261. package/.next/standalone/.next/static/chunks/116ssnh5k8ad9.js +1 -0
  262. package/.next/standalone/.next/static/chunks/162ec9.32dj73.js +1 -0
  263. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
  264. package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
  265. package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
  266. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
  267. package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
  268. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
  269. package/.next/standalone/package.json +2 -1
  270. package/dist/mcp-server.cjs +139 -31
  271. package/package.json +2 -1
  272. package/prisma/schema.prisma +1 -0
  273. package/scripts/fix-native-permissions.js +7 -0
  274. package/skills/tower/SKILL.md +12 -5
  275. package/.next/standalone/.next/server/app/_not-found.html +0 -1
  276. package/.next/standalone/.next/server/app/_not-found.meta +0 -16
  277. package/.next/standalone/.next/server/app/_not-found.rsc +0 -25
  278. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +0 -25
  279. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
  280. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +0 -13
  281. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
  282. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -5
  283. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -4
  284. package/.next/standalone/.next/server/app/index.html +0 -1
  285. package/.next/standalone/.next/server/app/index.meta +0 -16
  286. package/.next/standalone/.next/server/app/index.rsc +0 -26
  287. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -6
  288. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +0 -26
  289. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +0 -6
  290. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +0 -13
  291. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +0 -6
  292. package/.next/standalone/.next/server/app/onboarding.html +0 -1
  293. package/.next/standalone/.next/server/app/onboarding.meta +0 -15
  294. package/.next/standalone/.next/server/app/onboarding.rsc +0 -31
  295. package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +0 -31
  296. package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +0 -6
  297. package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +0 -13
  298. package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +0 -6
  299. package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +0 -9
  300. package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +0 -5
  301. package/.next/standalone/.next/server/app/settings.html +0 -1
  302. package/.next/standalone/.next/server/app/settings.meta +0 -15
  303. package/.next/standalone/.next/server/app/settings.rsc +0 -31
  304. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +0 -31
  305. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +0 -6
  306. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +0 -13
  307. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +0 -6
  308. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +0 -9
  309. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +0 -5
  310. package/.next/standalone/.next/server/chunks/[externals]__12mj_bs._.js +0 -3
  311. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0hclpb.._.js +0 -3
  312. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mizcpa._.js +0 -4
  313. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07l.j.t._.js +0 -3
  314. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e215_h._.js +0 -3
  315. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hc2ab0._.js +0 -3
  316. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n9e~0j._.js +0 -3
  317. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p_09im._.js +0 -3
  318. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qyxluw._.js +0 -3
  319. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0r54_2f._.js +0 -30
  320. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s9retv._.js +0 -3
  321. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vyqspt._.js +0 -30
  322. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10xwsl4._.js +0 -3
  323. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12c826b._.js +0 -3
  324. package/.next/standalone/.next/server/chunks/ssr/_00_enfv._.js +0 -3
  325. package/.next/standalone/.next/server/chunks/ssr/_02yhivm._.js +0 -3
  326. package/.next/standalone/.next/server/chunks/ssr/_06d.l~y._.js +0 -3
  327. package/.next/standalone/.next/server/chunks/ssr/_0_g2k44._.js +0 -3
  328. package/.next/standalone/.next/server/chunks/ssr/_0gk9bhq._.js +0 -7
  329. package/.next/standalone/.next/server/chunks/ssr/_0i8t39l._.js +0 -3
  330. package/.next/standalone/.next/server/chunks/ssr/_0kdx-ix._.js +0 -3
  331. package/.next/standalone/.next/server/chunks/ssr/_0ny8sre._.js +0 -4
  332. package/.next/standalone/.next/server/chunks/ssr/_0p~.jo1._.js +0 -7
  333. package/.next/standalone/.next/server/chunks/ssr/_0tj4yhj._.js +0 -3
  334. package/.next/standalone/.next/server/chunks/ssr/_0wxgq36._.js +0 -3
  335. package/.next/standalone/.next/server/chunks/ssr/_0x_nujv._.js +0 -7
  336. package/.next/standalone/.next/server/chunks/ssr/_0xlxdv6._.js +0 -3
  337. package/.next/standalone/.next/server/chunks/ssr/_0~fk6kp._.js +0 -3
  338. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0lqfvhm._.js +0 -3
  339. package/.next/standalone/.next/server/chunks/ssr/src_0r5zto-._.js +0 -47
  340. package/.next/standalone/.next/server/chunks/ssr/src_lib_0ffqwve._.js +0 -3
  341. package/.next/standalone/.next/server/chunks/ssr/src_lib_0i-k~x7._.js +0 -3
  342. package/.next/standalone/.next/server/chunks/ssr/src_lib_0jzfhds._.js +0 -3
  343. package/.next/standalone/.next/server/chunks/ssr/src_lib_0kjj12q._.js +0 -3
  344. package/.next/standalone/.next/server/chunks/ssr/src_lib_0lve.hi._.js +0 -3
  345. package/.next/standalone/.next/server/chunks/ssr/src_lib_0pywvqu._.js +0 -3
  346. package/.next/standalone/.next/server/chunks/ssr/src_lib_0tp-g~8._.js +0 -3
  347. package/.next/standalone/.next/server/chunks/ssr/src_lib_0vnqpwi._.js +0 -3
  348. package/.next/standalone/.next/server/chunks/ssr/src_lib_0w9nhfj._.js +0 -3
  349. package/.next/standalone/.next/server/pages/404.html +0 -1
  350. package/.next/standalone/.next/static/chunks/0.oy-y0w05vbq.js +0 -1
  351. package/.next/standalone/.next/static/chunks/04a2asn0hyy9c.js +0 -1
  352. package/.next/standalone/.next/static/chunks/06uk3fb5mkz5c.js +0 -1
  353. package/.next/standalone/.next/static/chunks/0c5ct~fi6oo0x.js +0 -5
  354. package/.next/standalone/.next/static/chunks/0d.9mkqrf._kj.js +0 -5
  355. package/.next/standalone/.next/static/chunks/0eup3utxhd.9w.js +0 -2
  356. package/.next/standalone/.next/static/chunks/0fysbcldn.s~5.js +0 -1
  357. package/.next/standalone/.next/static/chunks/0husw1q436czh.js +0 -1
  358. package/.next/standalone/.next/static/chunks/0ibjmvk~1lgfl.js +0 -2
  359. package/.next/standalone/.next/static/chunks/0m_mrbcxwb.xb.js +0 -1
  360. package/.next/standalone/.next/static/chunks/0mzr~d4ax.~nx.js +0 -5
  361. package/.next/standalone/.next/static/chunks/0q4_3y9etuu46.js +0 -1
  362. package/.next/standalone/.next/static/chunks/0qxmfi3_hxoj8.js +0 -1
  363. package/.next/standalone/.next/static/chunks/0xbblu1dqxput.js +0 -1
  364. package/.next/standalone/.next/static/chunks/0xu8d3uoqrmjl.js +0 -1
  365. package/.next/standalone/.next/static/chunks/0xx_wtcnk0sf7.js +0 -1
  366. package/.next/standalone/.next/static/chunks/0y4t-yk9428ag.js +0 -1
  367. package/.next/standalone/.next/static/chunks/0yrq3rjju-3um.js +0 -1
  368. package/.next/standalone/.next/static/chunks/0~8mebeyo5uub.css +0 -1
  369. package/.next/standalone/.next/static/chunks/10~egz2-vj..3.js +0 -5
  370. package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
  371. package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
  372. package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
  373. package/.next/standalone/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
  374. package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
  375. package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
  376. /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_buildManifest.js +0 -0
  377. /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_clientMiddlewareManifest.js +0 -0
  378. /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,14842,865514,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(368490),a=e.i(232280),n=e.i(759686),i=e.i(960518),l=e.i(340873),o=e.i(400355),c=e.i(519455),d=e.i(912505),m=e.i(487486),h=e.i(776639),u=e.i(624687),x=e.i(533499);function f({patchState:e,isLargeFold:s,onLoad:r}){let{t:a}=(0,x.useI18n)();return s?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-1 py-6",children:[(0,t.jsx)(c.Button,{variant:"link",onClick:r,className:"h-auto p-0 text-sm",children:a("diff.loadDiff")}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:a("diff.foldedLarge")})]}):e&&"loading"!==e.kind?"error"===e.kind?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-6 text-sm text-muted-foreground",children:[(0,t.jsx)("span",{children:a("diff.loadFailed")}),(0,t.jsx)(c.Button,{variant:"ghost",onClick:r,children:a("diff.retry")})]}):"binary"===e.kind?(0,t.jsx)("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:a("diff.binaryNotShown")}):"empty"===e.kind?(0,t.jsx)("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:a("diff.noChanges")}):(0,t.jsx)(p,{patch:e.patch??""}):(0,t.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,t.jsx)(o.Loader2,{className:"h-5 w-5 animate-spin text-muted-foreground"})})}function p({patch:e}){let{t:s}=(0,x.useI18n)(),r=e.split("\n"),a=r.length>500,n=a?r.slice(0,500):r;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("pre",{className:"overflow-x-auto p-0 text-xs font-mono leading-5",children:n.map((e,s)=>{let r=e.startsWith("+++")||e.startsWith("---")?"px-4 block text-muted-foreground":e.startsWith("+")?"px-4 block bg-green-500/10 text-green-400":e.startsWith("-")?"px-4 block bg-red-500/10 text-red-400":e.startsWith("@@")?"px-4 block bg-blue-500/10 text-blue-300":"px-4 block text-muted-foreground";return(0,t.jsx)("span",{className:r,children:e||" "},s)})}),a&&(0,t.jsx)("div",{className:"px-4 py-2 text-xs text-muted-foreground border-t border-border",children:s("diff.patchTruncated",{n:String(500),total:String(r.length)})})]})}e.s(["TaskDiffView",0,function({taskId:e,files:o,totalAdded:p,totalRemoved:g,hasConflicts:j,conflictFiles:b,onCommit:w,hasUncommitted:N}){let{t:y}=(0,x.useI18n)(),[v,k]=(0,s.useState)(new Set),[C,S]=(0,s.useState)(new Map),[M,D]=(0,s.useState)(!1),[L,A]=(0,s.useState)(""),[F,T]=(0,s.useState)(!1),B=t=>{S(e=>new Map(e).set(t,{kind:"loading"})),fetch(`/api/tasks/${e}/diff-patch?file=${encodeURIComponent(t)}`).then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>{S(s=>{let r=new Map(s);return"binary"===e.kind?r.set(t,{kind:"binary"}):"empty"===e.kind?r.set(t,{kind:"empty"}):r.set(t,{kind:"ready",patch:e.patch??""}),r})}).catch(()=>{S(e=>new Map(e).set(t,{kind:"error"}))})};return(0,t.jsxs)("div",{className:"flex flex-col h-full",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 text-sm text-muted-foreground",children:[(0,t.jsxs)("span",{className:"font-medium text-foreground",children:[o.length," files changed"]}),(0,t.jsxs)("span",{className:"text-green-400 font-mono text-xs",children:["+",p]}),(0,t.jsxs)("span",{className:"text-red-400 font-mono text-xs",children:["-",g]})]}),(0,t.jsx)("div",{className:"flex items-center gap-2",children:N&&w&&(0,t.jsxs)(c.Button,{variant:"outline",onClick:()=>D(!0),className:"gap-2",children:[(0,t.jsx)(l.GitCommitHorizontal,{className:"h-4 w-4"}),y("diff.commit")]})})]}),j&&(0,t.jsxs)("div",{className:"flex flex-col gap-2 border-b border-border bg-amber-500/5 px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-amber-400",children:[(0,t.jsx)(n.AlertTriangle,{className:"h-4 w-4 flex-shrink-0"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:["Merge blocked: ",b.length," conflicting file",1!==b.length?"s":""]})]}),(0,t.jsx)("ul",{className:"ml-6 space-y-1",children:b.map(e=>(0,t.jsx)("li",{className:"text-xs font-mono text-amber-300/80",children:e},e))})]}),(0,t.jsx)("div",{className:"flex-1 overflow-auto",children:0===o.length?(0,t.jsx)(d.EmptyState,{icon:i.GitCompare,title:y("diff.noChanges"),className:"h-full"}):(0,t.jsx)("div",{className:"divide-y divide-border",children:o.map(e=>{let s=v.has(e.filename),n=C.get(e.filename),i=e.added+e.removed;return(0,t.jsxs)("div",{children:[(0,t.jsxs)(c.Button,{variant:"ghost",type:"button",onClick:()=>{let t;return t=v.has(e.filename),void(k(t=>{let s=new Set(t);return s.has(e.filename)?s.delete(e.filename):s.add(e.filename),s}),t||e.isBinary||C.has(e.filename)||e.added+e.removed<=200&&B(e.filename))},className:"flex w-full items-center gap-2 px-4 py-2.5 text-left hover:bg-accent/50 transition-colors rounded-none h-auto",children:[s?(0,t.jsx)(a.ChevronDown,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}):(0,t.jsx)(r.ChevronRight,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}),(0,t.jsx)("span",{className:"flex-1 truncate text-sm font-mono text-foreground",children:e.filename}),e.isBinary?(0,t.jsx)(m.Badge,{variant:"secondary",className:"text-[10px] bg-muted text-muted-foreground border border-border",children:y("diff.binary")}):(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("span",{className:"text-xs font-mono text-green-400",children:["+",e.added]}),(0,t.jsxs)("span",{className:"text-xs font-mono text-red-400",children:["-",e.removed]})]})]}),s&&!e.isBinary&&(0,t.jsx)("div",{className:"border-t border-border bg-background",children:(0,t.jsx)(f,{filename:e.filename,patchState:n,isLargeFold:!n&&i>200,onLoad:()=>B(e.filename)})})]},e.filename)})})}),(0,t.jsx)(h.Dialog,{open:M,onOpenChange:D,children:(0,t.jsxs)(h.DialogContent,{className:"max-w-md",children:[(0,t.jsx)(h.DialogHeader,{children:(0,t.jsx)(h.DialogTitle,{children:y("diff.commitChanges")})}),(0,t.jsx)("div",{className:"flex flex-col gap-3",children:(0,t.jsx)(u.Textarea,{value:L,onChange:e=>A(e.target.value),placeholder:y("diff.commitMessagePlaceholder"),rows:5,className:"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none resize-y min-h-[80px]"})}),(0,t.jsxs)(h.DialogFooter,{children:[(0,t.jsx)(c.Button,{variant:"ghost",onClick:()=>D(!1),children:y("common.cancel")}),(0,t.jsx)(c.Button,{onClick:async()=>{if(L.trim()&&w){T(!0);try{await w(L.trim()),A(""),D(!1)}finally{T(!1)}}},disabled:!L.trim()||F,children:F?"...":y("diff.commit")})]})]})})]})}],14842);var g=e.i(538059);let j=(0,e.i(572989).default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);e.s(["TaskMergeConfirmDialog",0,function({open:e,onOpenChange:r,taskId:a,taskTitle:n,baseBranch:i,fileCount:l,commitCount:d,commitLog:m=[],onMergeComplete:u}){let x=(0,g.useRouter)(),[f,p]=(0,s.useState)(!1),[b,w]=(0,s.useState)(null),N=async()=>{p(!0),w(null);try{let e=await fetch(`/api/tasks/${a}/merge`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(e.ok){r(!1),u(),x.refresh();return}let t=await e.json().catch(()=>({error:"Merge failed"}));409===e.status?w(`Merge conflicts detected: ${Array.isArray(t.conflictFiles)?t.conflictFiles.join(", "):"unknown files"}`):w(t.error??"Merge failed")}catch{w("Network error — merge failed")}finally{p(!1)}};return(0,t.jsx)(h.Dialog,{open:e,onOpenChange:r,children:(0,t.jsxs)(h.DialogContent,{showCloseButton:!0,className:"sm:max-w-md",children:[(0,t.jsx)(h.DialogHeader,{children:(0,t.jsxs)(h.DialogTitle,{className:"flex items-center gap-2",children:[(0,t.jsx)(j,{className:"h-4 w-4 text-emerald-400"}),"Confirm Merge"]})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3 space-y-2.5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Target branch"}),(0,t.jsx)("code",{className:"text-xs font-mono bg-muted px-2 py-0.5 rounded text-foreground",children:i})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Changed files"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:l})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Commits"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:d})]})]}),m.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground mb-1 block",children:"Commits"}),(0,t.jsx)("div",{className:"rounded-md border border-border bg-muted/30 p-2 space-y-1 max-h-32 overflow-y-auto",children:m.map((e,s)=>(0,t.jsx)("div",{className:"text-xs font-mono text-foreground/80",children:e},s))})]}),b&&(0,t.jsx)("div",{className:"rounded-lg border border-red-500/20 bg-red-500/10 px-3 py-2",children:(0,t.jsx)("p",{className:"text-xs text-red-400",children:b})})]}),(0,t.jsxs)(h.DialogFooter,{children:[(0,t.jsx)(c.Button,{variant:"outline",onClick:()=>r(!1),disabled:f,children:"Cancel"}),(0,t.jsx)(c.Button,{onClick:N,disabled:f,className:"gap-2",children:f?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.Loader2,{className:"h-4 w-4 animate-spin"}),"Merging..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(j,{className:"h-4 w-4"}),"Confirm Merge"]})})]})]})})}],865514)},491911,314411,e=>{"use strict";let t=(0,e.i(572989).default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);e.s(["default",0,t],314411),e.s(["File",0,t],491911)},989383,769824,e=>{"use strict";var t=e.i(572989);let s=(0,t.default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);e.s(["Clock",0,s],989383);let r=(0,t.default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);e.s(["History",0,r],769824)},244354,e=>{"use strict";async function t(e,s,r={}){let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:s,path:e,...r})});if(!a.ok)throw Error((await a.json()).error||`${s} failed`);return a.json()}e.s(["gitAction",0,t])},48019,782516,755696,886156,586564,719493,436539,e=>{"use strict";var t=e.i(572989);let s=(0,t.default)("file-plus",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}],["path",{d:"M12 18v-6",key:"17g6i2"}]]);e.s(["FilePlus",0,s],48019);let r=(0,t.default)("file-minus",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}]]);e.s(["FileMinus",0,r],782516);let a=(0,t.default)("file-question-mark",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}]]);e.s(["FileQuestion",0,a],755696);let n=(0,t.default)("file-pen",[["path",{d:"M12.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v9.34",key:"o6klzx"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10.378 12.622a1 1 0 0 1 3 3.003L8.36 20.637a2 2 0 0 1-.854.506l-2.867.837a.5.5 0 0 1-.62-.62l.836-2.869a2 2 0 0 1 .506-.853z",key:"zhnas1"}]]);e.s(["FileEdit",0,n],886156);let i=(0,t.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,i],586564);let l=(0,t.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);e.s(["ArrowUp",0,l],719493);let o=(0,t.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["Minus",0,o],436539)},375306,e=>{"use strict";let t=(0,e.i(572989).default)("arrow-up-from-line",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);e.s(["ArrowUpFromLine",0,t],375306)},515135,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(491911),a=e.i(48019),n=e.i(782516),i=e.i(755696),l=e.i(886156),o=e.i(400355),c=e.i(586564),d=e.i(719493),m=e.i(597746),h=e.i(368490),u=e.i(232280),x=e.i(977982),f=e.i(436539),p=e.i(232545),g=e.i(49007),j=e.i(194358),b=e.i(487278),w=e.i(375306);let N=(0,e.i(572989).default)("undo-2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);var y=e.i(226145),v=e.i(738690),k=e.i(242941),C=e.i(998626),S=e.i(519455),M=e.i(755146),D=e.i(759684),L=e.i(746798),A=e.i(776639),F=e.i(793479),T=e.i(624687),B=e.i(533499);function E({open:e,onOpenChange:r,branches:a,currentBranch:n,localPath:i,onCreated:l,onError:c}){let{t:d}=(0,B.useI18n)(),[h,x]=(0,s.useState)(""),[f,p]=(0,s.useState)(n),[g,j]=(0,s.useState)(""),[b,w]=(0,s.useState)(!1),[N,k]=(0,s.useState)(""),[C,M]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&(x(""),p(n),j(""),k(""))},[e,n]);let D=[...new Set(a)].filter(e=>e.toLowerCase().includes(N.toLowerCase())),L=async()=>{if(h.trim()){w(!0);try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create-branch",path:i,branch:h.trim(),baseBranch:f})});if(e.ok)r(!1),l();else{let t=await e.json();c(t.error||"Unknown error")}}catch{c("Network error")}finally{w(!1)}}};return(0,t.jsx)(A.Dialog,{open:e,onOpenChange:r,children:(0,t.jsxs)(A.DialogContent,{className:"sm:max-w-sm",children:[(0,t.jsx)(A.DialogHeader,{children:(0,t.jsx)(A.DialogTitle,{children:d("git.createBranch")})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.branchName")}),(0,t.jsx)(F.Input,{value:h,onChange:e=>x(e.target.value),placeholder:d("git.branchNamePlaceholder"),className:"mt-1.5 font-mono text-xs",onKeyDown:e=>"Enter"===e.key&&L()})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.baseBranch")}),(0,t.jsxs)("div",{className:"relative mt-1.5",children:[(0,t.jsxs)("button",{onClick:()=>M(!C),className:"flex w-full items-center justify-between rounded-lg border border-border bg-muted/50 px-3 py-2 text-left transition-colors hover:bg-accent",children:[(0,t.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",title:f,children:f})]}),(0,t.jsx)(u.ChevronDown,{className:`h-3 w-3 text-muted-foreground transition-transform ${C?"rotate-180":""}`})]}),C&&(0,t.jsxs)("div",{className:"absolute left-0 right-0 top-full z-20 mt-1 rounded-lg border border-border bg-popover shadow-xl",children:[(0,t.jsx)("div",{className:"border-b border-border p-1.5",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(v.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground"}),(0,t.jsx)("input",{value:N,onChange:e=>k(e.target.value),placeholder:"Filter...",autoFocus:!0,className:"h-7 w-full rounded-md bg-muted/50 pl-7 pr-2 text-xs text-foreground placeholder-muted-foreground outline-none focus:ring-1 focus:ring-ring"})]})}),(0,t.jsx)("div",{className:"max-h-40 overflow-auto py-1",children:D.map(e=>(0,t.jsxs)("button",{onClick:()=>{p(e),M(!1)},className:`flex w-full items-center gap-2 px-3 py-1.5 text-left transition-colors ${e===f?"bg-emerald-500/10 text-emerald-400":"text-secondary-foreground hover:bg-accent"}`,children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e}),e===f&&(0,t.jsx)(m.Check,{className:"h-3 w-3 ml-auto shrink-0"})]},e))})]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.branchDesc")}),(0,t.jsx)(T.Textarea,{value:g,onChange:e=>j(e.target.value),placeholder:d("git.branchDescPlaceholder"),rows:2,className:"mt-1.5 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring resize-none"})]})]}),(0,t.jsxs)(A.DialogFooter,{children:[(0,t.jsx)(S.Button,{variant:"outline",onClick:()=>r(!1),children:d("common.cancel")}),(0,t.jsxs)(S.Button,{onClick:L,disabled:!h.trim()||b,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[b?(0,t.jsx)(o.Loader2,{className:"h-3 w-3 animate-spin mr-1"}):null,d("common.create")]})]})]})})}var I=e.i(360112),$=e.i(244354);let R={modified:l.FileEdit,added:a.FilePlus,deleted:n.FileMinus,untracked:i.FileQuestion,renamed:l.FileEdit},z={modified:"text-amber-400",added:"text-emerald-400",deleted:"text-rose-400",untracked:"text-muted-foreground",renamed:"text-sky-400"},P={modified:"M",added:"A",deleted:"D",untracked:"U",renamed:"R"};function U(e){let t={name:"",path:"",isDir:!0,children:[]};for(let s of e){let e=s.file.split("/"),r=t;for(let t=0;t<e.length;t++){let a=e[t],n=t===e.length-1,i=e.slice(0,t+1).join("/");if(n)r.children.push({name:a,path:i,isDir:!1,children:[],file:s});else{let e=r.children.find(e=>e.isDir&&e.name===a);e||(e={name:a,path:i,isDir:!0,children:[]},r.children.push(e)),r=e}}}return(function e(t){if(t.isDir&&(t.children=t.children.map(e),1===t.children.length&&t.children[0].isDir&&""!==t.name)){let e=t.children[0];return{...e,name:`${t.name}/${e.name}`}}return t})(t).children.sort((e,t)=>e.isDir!==t.isDir?e.isDir?-1:1:e.name.localeCompare(t.name))}function G({label:e,count:r,labelColor:a,tree:n,batchAction:i,batchLabel:l,batchIcon:o,onFileClick:c,onFileAction:d,fileActionIcon:m,fileActionLabel:x,onFileSecondaryAction:f,fileSecondaryIcon:p,fileSecondaryLabel:g}){let[j,b]=(0,s.useState)(!0);return 0===r?null:(0,t.jsxs)("div",{className:"border-b border-border",children:[(0,t.jsxs)("div",{className:"group flex items-center justify-between px-2 py-1.5 hover:bg-accent/50 transition-colors",children:[(0,t.jsxs)("button",{onClick:()=>b(!j),className:"flex items-center gap-1 flex-1 min-w-0",children:[j?(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3 shrink-0 text-muted-foreground"}):(0,t.jsx)(h.ChevronRight,{className:"h-3 w-3 shrink-0 text-muted-foreground"}),(0,t.jsxs)("span",{className:`text-[10px] font-semibold uppercase tracking-wider ${a}`,children:[e," (",r,")"]})]}),(0,t.jsx)(S.Button,{variant:"ghost",size:"icon-xs",onClick:i,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity","aria-label":l,children:o})]}),j&&(0,t.jsx)("div",{className:"pb-1",children:n.map(e=>(0,t.jsx)(O,{node:e,depth:0,onFileClick:c,onFileAction:d,fileActionIcon:m,fileActionLabel:x,onFileSecondaryAction:f,fileSecondaryIcon:p,fileSecondaryLabel:g},e.path))})]})}function O({node:e,depth:a,onFileClick:n,onFileAction:i,fileActionIcon:l,fileActionLabel:o,onFileSecondaryAction:c,fileSecondaryIcon:d,fileSecondaryLabel:m}){let[f,p]=(0,s.useState)(!0),g={paddingLeft:`calc(${a} * 8px + 4px)`};if(e.isDir)return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{onClick:()=>p(!f),className:"flex w-full items-center gap-1 py-0.5 px-1 rounded-sm min-h-[28px] hover:bg-accent hover:text-accent-foreground transition-colors text-left",style:g,children:[f?(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3 shrink-0 text-muted-foreground"}):(0,t.jsx)(h.ChevronRight,{className:"h-3 w-3 shrink-0 text-muted-foreground"}),(0,t.jsx)(x.Folder,{className:"h-3.5 w-3.5 shrink-0 text-amber-400"}),(0,t.jsx)("span",{className:"text-[13px] text-muted-foreground truncate",children:e.name})]}),f&&e.children.sort((e,t)=>e.isDir!==t.isDir?e.isDir?-1:1:e.name.localeCompare(t.name)).map(e=>(0,t.jsx)(O,{node:e,depth:a+1,onFileClick:n,onFileAction:i,fileActionIcon:l,fileActionLabel:o,onFileSecondaryAction:c,fileSecondaryIcon:d,fileSecondaryLabel:m},e.path))]});let j=e.file,b=R[j.status]||r.File,w=z[j.status]||"text-muted-foreground",N=P[j.status]||"?";return(0,t.jsxs)("div",{className:"group flex items-center gap-1 py-0.5 px-1 rounded-sm min-h-[28px] hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer",style:g,onClick:()=>n(j),children:[(0,t.jsx)("span",{className:"h-3 w-3 shrink-0"}),(0,t.jsx)(b,{className:`h-3.5 w-3.5 shrink-0 ${w}`}),(0,t.jsx)("span",{className:"text-[13px] text-foreground truncate flex-1",children:e.name}),(0,t.jsx)("span",{className:`text-[11px] font-mono font-bold shrink-0 mr-1 ${w}`,children:N}),c&&(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:e=>{e.stopPropagation(),c(j.file)},className:"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:bg-destructive/20 hover:text-destructive transition-all","aria-label":m??"",children:d}),m&&(0,t.jsx)(L.TooltipContent,{side:"bottom",children:m})]}),(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:e=>{e.stopPropagation(),i(j.file)},className:"shrink-0 rounded px-1 text-xs font-mono text-muted-foreground opacity-0 group-hover:opacity-100 hover:bg-background hover:text-foreground transition-all mr-1","aria-label":o??"",children:l}),o&&(0,t.jsx)(L.TooltipContent,{side:"bottom",children:o})]})]})}e.s(["EditorGitPanel",0,function({localPath:e,onFileSelect:r,mode:a="project"}){let n="task"===a,{t:i}=(0,B.useI18n)(),[l,h]=(0,s.useState)(null),[x,A]=(0,s.useState)(!0),[F,T]=(0,s.useState)(""),[R,z]=(0,s.useState)(!1),[P,O]=(0,s.useState)(!1),[H,W]=(0,s.useState)(!1),[V,K]=(0,s.useState)(!1),[q,J]=(0,s.useState)(!1),[Q,X]=(0,s.useState)(""),Y=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(q)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){Y.current&&!Y.current.contains(e.target)&&J(!1)}},[q]);let[Z,_]=(0,s.useState)(!1),ee=(0,s.useCallback)(async()=>{try{let t=await fetch(`/api/git?path=${encodeURIComponent(e)}`);if(t.ok){let s=await t.json();h({changedFiles:s.changedFiles??[],ahead:s.ahead??0,behind:s.behind??0,remoteUrl:s.remoteUrl??"",currentBranch:s.currentBranch??"",branches:s.branches??[],remoteBranches:s.remoteBranches??[],topLevel:s.topLevel??e})}}catch{}finally{A(!1)}},[e]);(0,s.useEffect)(()=>{ee();let e=setInterval(ee,5e3);return()=>clearInterval(e)},[ee]);let et=async t=>{try{await (0,$.gitAction)(e,"stage",{files:t}),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},es=async t=>{try{await (0,$.gitAction)(e,"unstage",{files:t}),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},er=async()=>{if(F.trim()){z(!0);try{await (0,$.gitAction)(e,"commit",{message:F}),T(""),I.toast.success(i("git.commitSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{z(!1)}}},ea=async t=>{O(!0);try{await (0,$.gitAction)(e,"pull",t?{branch:t}:{}),I.toast.success(i("git.pullSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{O(!1)}},en=async t=>{W(!0);try{await (0,$.gitAction)(e,"push",t?{branch:t}:{}),I.toast.success(i("git.pushSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{W(!1)}},ei=async()=>{K(!0);try{await (0,$.gitAction)(e,"fetch"),I.toast.success(i("git.fetchSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{K(!1)}},el=async t=>{try{await (0,$.gitAction)(e,"checkout",{branch:t}),J(!1),I.toast.success(`${i("git.switchSuccess")} ${t}`),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},eo=async()=>{try{await (0,$.gitAction)(e,"stash-save",{message:F||void 0}),T(""),I.toast.success(i("git.stashSaved")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},ec=async()=>{try{await (0,$.gitAction)(e,"stash-pop",{index:0}),I.toast.success(i("git.stashApplied")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},ed=async t=>{try{await (0,$.gitAction)(e,"discard-file",{file:t}),I.toast.success(i("git.discardFileSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},em=async()=>{try{await (0,$.gitAction)(e,"discard-all"),I.toast.success(i("git.discardSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},eh=async t=>{if("deleted"===t.status)return;let s=l?.topLevel??e;try{let a=await (0,$.gitAction)(e,"show",{file:t.file});r?.(t.file,a.content??"",s)}catch{r?.(t.file,"",s)}},eu=l?.changedFiles.filter(e=>e.staged)??[],ex=l?.changedFiles.filter(e=>!e.staged)??[],ef=(0,s.useMemo)(()=>U(eu),[eu]),ep=(0,s.useMemo)(()=>U(ex),[ex]);if(x)return(0,t.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,t.jsx)(o.Loader2,{className:"h-4 w-4 animate-spin text-muted-foreground"})});if(!l)return null;function eg(e){let t=[];for(let s of e)s.isDir?t.push(...eg(s.children)):s.file&&t.push(s.file.file);return t}let ej=[...l?.branches??[],...(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e))],eb=Q?ej.filter(e=>e.toLowerCase().includes(Q.toLowerCase())):ej;return(0,t.jsxs)("div",{className:"flex flex-col h-full overflow-hidden",children:[(0,t.jsxs)("div",{className:"shrink-0 px-2 pt-2 pb-1 flex items-center gap-1",children:[n?(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{render:(0,t.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1.5 rounded-md border border-border bg-muted/30 px-2 py-1.5",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",children:l?.currentBranch||"—"})]})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",className:"font-mono text-xs",children:l?.currentBranch||"—"})]}):(0,t.jsxs)("div",{className:"relative flex-1 min-w-0",ref:Y,children:[(0,t.jsxs)("button",{onClick:()=>{J(!q),X("")},className:"flex w-full items-center justify-between rounded-md border border-border bg-muted/50 px-2 py-1.5 text-left transition-colors hover:bg-accent",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",title:l?.currentBranch||void 0,children:l?.currentBranch||"—"})]}),(0,t.jsx)(u.ChevronDown,{className:`h-3 w-3 shrink-0 text-muted-foreground transition-transform ${q?"rotate-180":""}`})]}),q&&(0,t.jsxs)("div",{className:"absolute left-0 top-full z-30 mt-1 min-w-full w-max max-w-[320px] rounded-lg border border-border bg-popover shadow-xl",children:[(0,t.jsx)("div",{className:"border-b border-border p-1.5",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(v.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground"}),(0,t.jsx)("input",{value:Q,onChange:e=>X(e.target.value),placeholder:"Filter...",autoFocus:!0,className:"h-7 w-full rounded-md bg-muted/50 pl-7 pr-2 text-xs text-foreground placeholder-muted-foreground outline-none focus:ring-1 focus:ring-ring"})]})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-auto py-1",children:[(l?.branches??[]).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).length>0&&(0,t.jsx)("p",{className:"px-3 pt-1 pb-0.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:i("git.localBranches")}),(l?.branches??[]).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).map(e=>{let s=e===l?.currentBranch;return(0,t.jsxs)("button",{onClick:()=>{s?J(!1):el(e)},className:`flex w-full items-center gap-2 px-3 py-1 text-left transition-colors ${s?"bg-emerald-500/10 text-emerald-400":"text-secondary-foreground hover:bg-accent"}`,children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e}),s&&(0,t.jsx)(m.Check,{className:"h-3 w-3 ml-auto shrink-0"})]},`local-${e}`)}),(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e)).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).length>0&&(0,t.jsx)("p",{className:"px-3 pt-2 pb-0.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:i("git.remoteBranches")}),(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e)).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).map(e=>(0,t.jsxs)("button",{onClick:()=>el(e),className:"flex w-full items-center gap-2 px-3 py-1 text-left text-secondary-foreground transition-colors hover:bg-accent",children:[(0,t.jsx)(k.Globe,{className:"h-3 w-3 shrink-0 text-sky-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e})]},`remote-${e}`)),0===eb.length&&(0,t.jsx)("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No branches found"})]})]})]}),!n&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:ei,disabled:V,className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Fetch",children:(0,t.jsx)(j.RefreshCw,{className:`h-3.5 w-3.5 ${V?"animate-spin":""}`})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",children:"Fetch"})]}),(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:()=>{J(!1),_(!0)},className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors","aria-label":i("git.createBranch"),children:(0,t.jsx)(p.Plus,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",children:i("git.createBranch")})]})]})]}),(0,t.jsxs)("div",{className:"shrink-0 px-2 pb-2 space-y-1.5 border-b border-border",children:[(0,t.jsx)("textarea",{value:F,onChange:e=>T(e.target.value),placeholder:i("git.commitMsgPlaceholder"),rows:3,className:"w-full rounded-md border border-border bg-background px-2 py-1.5 text-xs text-foreground placeholder-muted-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring resize-none",onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&er()}}),(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsxs)(S.Button,{variant:"default",className:"flex-1 h-7 gap-1.5 text-xs",onClick:er,disabled:R||!F.trim()||0===eu.length,children:[R?(0,t.jsx)(o.Loader2,{className:"h-3 w-3 animate-spin"}):(0,t.jsx)(m.Check,{className:"h-3 w-3"}),i("git.commit")]}),(0,t.jsxs)(M.DropdownMenu,{children:[(0,t.jsx)(M.DropdownMenuTrigger,{render:(0,t.jsx)(S.Button,{variant:"outline",size:"icon-xs",className:"h-7 w-7 shrink-0"}),children:(0,t.jsx)(g.MoreHorizontal,{className:"h-3.5 w-3.5"})}),(0,t.jsxs)(M.DropdownMenuContent,{align:"end",side:"bottom",className:"w-52",children:[(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.commit")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:er,disabled:!F.trim()||0===eu.length,children:[(0,t.jsx)(m.Check,{className:"h-3.5 w-3.5 mr-2"}),i("git.commit")]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.changes")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>et(eg(ep)),disabled:0===ex.length,children:[(0,t.jsx)(p.Plus,{className:"h-3.5 w-3.5 mr-2"}),i("git.stageAll")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>es(eg(ef)),disabled:0===eu.length,children:[(0,t.jsx)(f.Minus,{className:"h-3.5 w-3.5 mr-2"}),i("git.unstageAll")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:em,disabled:0===ex.length,children:[(0,t.jsx)(N,{className:"h-3.5 w-3.5 mr-2"}),i("git.discardAll")]})]}),!n&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.sync")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(),disabled:P,children:[(0,t.jsx)(c.ArrowDown,{className:"h-3.5 w-3.5 mr-2"}),i("git.pull")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(),disabled:H,children:[(0,t.jsx)(d.ArrowUp,{className:"h-3.5 w-3.5 mr-2"}),i("git.push")]}),(0,t.jsxs)(M.DropdownMenuSub,{children:[(0,t.jsxs)(M.DropdownMenuSubTrigger,{disabled:P,children:[(0,t.jsx)(c.ArrowDown,{className:"h-3.5 w-3.5 mr-2"}),i("git.pullFrom"),"..."]}),(0,t.jsxs)(M.DropdownMenuSubContent,{className:"max-h-60 overflow-y-auto",children:[(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-emerald-400"}),l.currentBranch,l.behind>0&&(0,t.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:["↓",l.behind]})]}),l.remoteBranches.filter(e=>e!==l.currentBranch).map(e=>(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(e),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-sky-400"}),e]},e))]})]}),(0,t.jsxs)(M.DropdownMenuSub,{children:[(0,t.jsxs)(M.DropdownMenuSubTrigger,{disabled:H,children:[(0,t.jsx)(d.ArrowUp,{className:"h-3.5 w-3.5 mr-2"}),i("git.pushTo"),"..."]}),(0,t.jsxs)(M.DropdownMenuSubContent,{className:"max-h-60 overflow-y-auto",children:[(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-emerald-400"}),l.currentBranch,l.ahead>0&&(0,t.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:["↑",l.ahead]})]}),l.remoteBranches.filter(e=>e!==l.currentBranch).map(e=>(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(e),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-sky-400"}),e]},e))]})]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:ei,disabled:V,children:[(0,t.jsx)(j.RefreshCw,{className:`h-3.5 w-3.5 mr-2 ${V?"animate-spin":""}`}),i("git.fetchAll")]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.stash")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:eo,disabled:0===l.changedFiles.length,children:[(0,t.jsx)(b.Archive,{className:"h-3.5 w-3.5 mr-2"}),i("git.stashSave")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:ec,children:[(0,t.jsx)(w.ArrowUpFromLine,{className:"h-3.5 w-3.5 mr-2"}),i("git.stashPopLatest")]})]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuItem,{disabled:!0,className:"text-muted-foreground",children:[(0,t.jsx)(y.GitBranch,{className:"h-3.5 w-3.5 mr-2"}),l.currentBranch]})]})]})]})]}),(0,t.jsxs)(D.ScrollArea,{className:"flex-1 min-h-0",children:[(0,t.jsx)(G,{label:i("git.stagedChanges"),count:eu.length,labelColor:"text-emerald-400",tree:ef,batchAction:()=>es(eg(ef)),batchLabel:i("git.unstageAll"),batchIcon:(0,t.jsx)(f.Minus,{className:"h-3 w-3"}),onFileClick:eh,onFileAction:e=>es([e]),fileActionIcon:"−",fileActionLabel:i("git.unstageFile")}),(0,t.jsx)(G,{label:i("git.unstagedChanges"),count:ex.length,labelColor:"text-muted-foreground",tree:ep,batchAction:()=>et(eg(ep)),batchLabel:i("git.stageAll"),batchIcon:(0,t.jsx)(p.Plus,{className:"h-3 w-3"}),onFileClick:eh,onFileAction:e=>et([e]),fileActionIcon:"+",fileActionLabel:i("git.stageFile"),onFileSecondaryAction:e=>ed(e),fileSecondaryIcon:(0,t.jsx)(C.Trash2,{className:"h-2.5 w-2.5"}),fileSecondaryLabel:i("git.discardFile")}),0===l.changedFiles.length&&(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[(0,t.jsx)(m.Check,{className:"h-5 w-5 text-emerald-400 mb-2"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:i("git.noChanges")})]})]}),(0,t.jsx)(E,{open:Z,onOpenChange:_,branches:[...l?.branches??[],...l?.remoteBranches??[]],currentBranch:l?.currentBranch??"",localPath:e,onCreated:async()=>{I.toast.success(i("git.createSuccess")),await ee()},onError:e=>I.toast.error(`${i("git.createFailed")}: ${e}`)})]})}],515135)},501681,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("6068855649e7a729ec92e44a9a0407aefde90bf43c",t.callServer,void 0,t.findSourceMapURL,"updateTask");e.s(["updateTask",0,s])},918520,280919,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("7c7aab200ad6049d5b59c13639807c1ea11eaf8a81",t.callServer,void 0,t.findSourceMapURL,"startPtyExecutionSafe");e.s(["startPtyExecutionSafe",0,s],918520);let r=(0,t.createServerReference)("40e49611f360e36ec058b150612324ae457fde0380",t.callServer,void 0,t.findSourceMapURL,"continueLatestPtyExecution");e.s(["continueLatestPtyExecution",0,r],280919)},432307,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("401eac185ce9b2392c49243858ba5f8eefbc3a292c",t.callServer,void 0,t.findSourceMapURL,"getTaskExecutions");e.s(["getTaskExecutions",0,s])},628952,143366,764923,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("6055f0b9b800feb40d38fd60752c20caf2c2a27ac8",t.callServer,void 0,t.findSourceMapURL,"updateTaskStatus");e.s(["updateTaskStatus",0,s],628952);let r=(0,t.createServerReference)("400287b9d994490c077258a68c39b845bd76079c26",t.callServer,void 0,t.findSourceMapURL,"checkWorktreeClean");e.s(["checkWorktreeClean",0,r],143366);let a=(0,t.createServerReference)("60b74897d0e02dc94340275461ab7562e52cd211b4",t.callServer,void 0,t.findSourceMapURL,"commitWorktreeChanges");e.s(["commitWorktreeChanges",0,a],764923)},486077,e=>{"use strict";let t=(0,e.i(572989).default)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);e.s(["Lightbulb",0,t],486077)},326883,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(232280),a=e.i(472074),n=e.i(301348),i=e.i(181209),l=e.i(400355),o=e.i(989383),c=e.i(12659),d=e.i(922541),m=e.i(486077),h=e.i(769824),u=e.i(519455),x=e.i(912505),f=e.i(533499);function p({status:e}){switch(e){case"COMPLETED":return(0,t.jsx)(n.CheckCircle2,{className:"h-4 w-4 text-emerald-400"});case"FAILED":return(0,t.jsx)(i.XCircle,{className:"h-4 w-4 text-red-400"});case"RUNNING":return(0,t.jsx)(l.Loader2,{className:"h-4 w-4 text-blue-400 animate-spin"});default:return(0,t.jsx)(o.Clock,{className:"h-4 w-4 text-neutral-500"})}}e.s(["ExecutionTimeline",0,function({executions:e,onResume:n,onContinueLatest:i}){let{t:l,locale:o}=(0,f.useI18n)(),[g,j]=(0,s.useState)(null),[b,w]=(0,s.useState)(null);return 0===e.length?(0,t.jsx)(x.EmptyState,{icon:h.History,title:l("execution.noHistory")}):(0,t.jsxs)("div",{className:"space-y-2 p-3",children:[(0,t.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:l("execution.history")}),e.map(s=>{let h=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(s.gitStats??null),x=function(e,t){if(!e||!t)return"";let s=new Date(t).getTime()-new Date(e).getTime();if(s<0)return"";let r=Math.floor(s/1e3);if(r<60)return`${r}s`;let a=Math.floor(r/60);if(a<60)return`${a}m ${r%60}s`;let n=Math.floor(a/60);return`${n}h ${a%60}m`}(s.startedAt??null,s.endedAt??null),f=g===s.id;return(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-background/50 overflow-hidden",children:[(0,t.jsxs)("div",{className:"p-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(p,{status:s.status}),(0,t.jsx)("span",{className:`font-medium ${function(e){switch(e){case"COMPLETED":return"text-emerald-400";case"FAILED":return"text-red-400";case"RUNNING":return"text-blue-400";default:return"text-neutral-400"}}(s.status)}`,children:function(e,t){switch(e){case"COMPLETED":return t("execution.success");case"FAILED":return t("execution.failed");case"RUNNING":return t("execution.running");default:return e}}(s.status,l)}),(0,t.jsx)("span",{className:"text-muted-foreground",children:function(e,t="zh"){if(!e)return"";let s=new Date(e),r=Math.floor((new Date().getTime()-s.getTime())/864e5),a="zh"===t?"zh-CN":"en-US",n=s.toLocaleTimeString(a,{hour:"2-digit",minute:"2-digit"});return 0===r?n:1===r?"zh"===t?`昨天 ${n}`:`Yesterday ${n}`:r<7?"zh"===t?`${r}天前 ${n}`:`${r}d ago ${n}`:s.toLocaleDateString(a,{month:"2-digit",day:"2-digit"})+" "+n}(s.startedAt??null,o)}),x&&(0,t.jsxs)("span",{className:"text-muted-foreground/60",children:["(",x,")"]})]}),(0,t.jsx)("p",{className:"mt-1.5 text-sm text-foreground/80 line-clamp-2",children:s.summary||l("execution.noSummary")}),h&&(h.commits||h.filesChanged)&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2 text-[11px] text-muted-foreground font-mono",children:[h.commits?(0,t.jsxs)("span",{children:[h.commits," ",l("execution.commits")]}):null,h.filesChanged?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),(0,t.jsxs)("span",{children:[h.filesChanged," ",l("execution.files")]})]}):null,h.insertions||h.deletions?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),h.insertions?(0,t.jsxs)("span",{className:"text-emerald-500",children:["+",h.insertions]}):null,h.deletions?(0,t.jsxs)("span",{className:"text-red-400",children:["-",h.deletions]}):null]}):null]}),s.insightNote&&(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsxs)("button",{onClick:()=>w(b===s.id?null:s.id),className:"flex items-center gap-1.5 text-xs text-primary/90 hover:text-primary transition-colors",children:[(0,t.jsx)(m.Lightbulb,{className:"h-3.5 w-3.5"}),(0,t.jsxs)("span",{className:"font-medium",children:[l("execution.insight"),":"]}),(0,t.jsx)("span",{className:"text-foreground/70 truncate max-w-[200px]",children:s.insightNote.title}),b===s.id?(0,t.jsx)(a.ChevronUp,{className:"h-3 w-3"}):(0,t.jsx)(r.ChevronDown,{className:"h-3 w-3"})]}),b===s.id&&(0,t.jsx)("div",{className:"mt-2 rounded-md bg-primary/[0.06] border border-primary/10 p-3 text-xs text-foreground/80 whitespace-pre-wrap",children:s.insightNote.content})]}),(0,t.jsxs)("div",{className:"mt-2.5 flex items-center gap-2",children:[s.sessionId&&n?(0,t.jsxs)(u.Button,{size:"sm",onClick:()=>n(s.sessionId),className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,t.jsx)(c.PlayCircle,{className:"h-3.5 w-3.5"}),l("execution.resume")]}):!s.sessionId&&"FAILED"===s.status&&s.id===e[0]?.id&&i?(0,t.jsxs)(u.Button,{size:"sm",onClick:i,className:"bg-blue-500/15 text-blue-300 ring-1 ring-blue-500/20 hover:bg-blue-500/25",children:[(0,t.jsx)(d.RotateCcw,{className:"h-3.5 w-3.5"}),l("execution.tryRecover")]}):null,(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",onClick:()=>j(f?null:s.id),className:"bg-muted text-muted-foreground",children:[f?(0,t.jsx)(a.ChevronUp,{className:"h-3.5 w-3.5"}):(0,t.jsx)(r.ChevronDown,{className:"h-3.5 w-3.5"}),f?l("execution.collapse"):l("execution.details")]})]})]}),f&&(0,t.jsxs)("div",{className:"border-t border-border px-3 pb-3 space-y-3",children:[s.gitLog&&(0,t.jsxs)("div",{className:"mt-3",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:l("execution.gitLog")}),(0,t.jsx)("pre",{className:"rounded-md bg-muted/50 p-2.5 text-xs font-mono text-foreground/70 overflow-x-auto whitespace-pre-wrap",children:s.gitLog.split("\n").slice(0,3).join("\n")})]}),s.terminalLog&&(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:l("execution.terminalOutput")}),(0,t.jsx)("pre",{className:"rounded-md bg-[#0f1419] p-2.5 text-xs font-mono text-neutral-300 overflow-x-auto max-h-48 overflow-y-auto whitespace-pre-wrap",children:s.terminalLog})]}),"FAILED"===s.status&&null!=s.exitCode&&(0,t.jsxs)("p",{className:"text-xs text-red-400/70",children:["Exit code: ",s.exitCode]})]})]},s.id)})]})}])}]);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tower-studio",
3
- "version": "0.2.16",
3
+ "version": "0.2.19",
4
4
  "description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
5
5
  "bin": {
6
6
  "tower": "bin/tower.mjs"
@@ -61,6 +61,7 @@
61
61
  "dependencies": {
62
62
  "@modelcontextprotocol/sdk": "^1.28.0",
63
63
  "@prisma/client": "^6.19.2",
64
+ "@vscode/ripgrep": "1.18.0",
64
65
  "node-pty": "^1.1.0",
65
66
  "prisma": "^6.19.2",
66
67
  "tsx": "^4.21.0",
@@ -26115,7 +26115,7 @@ var require_cache = __commonJS({
26115
26115
  });
26116
26116
 
26117
26117
  // src/lib/schemas.ts
26118
- var cuid4, createWorkspaceSchema, updateWorkspaceSchema, createProjectSchema, updateProjectSchema, createTaskSchema, updateTaskSchema, taskStatusSchema, createLabelSchema, createVersionSchema, updateVersionSchema, createVersionTypeSchema, updateVersionTypeSchema;
26118
+ var cuid4, createWorkspaceSchema, updateWorkspaceSchema, reorderWorkspacesSchema, createProjectSchema, updateProjectSchema, createTaskSchema, updateTaskSchema, taskStatusSchema, createLabelSchema, createVersionSchema, updateVersionSchema, createVersionTypeSchema, updateVersionTypeSchema;
26119
26119
  var init_schemas3 = __esm({
26120
26120
  "src/lib/schemas.ts"() {
26121
26121
  "use strict";
@@ -26129,6 +26129,7 @@ var init_schemas3 = __esm({
26129
26129
  name: external_exports.string().min(1).max(100).optional(),
26130
26130
  description: external_exports.string().max(500).optional()
26131
26131
  });
26132
+ reorderWorkspacesSchema = external_exports.array(cuid4).min(1, "At least one workspace id is required");
26132
26133
  createProjectSchema = external_exports.object({
26133
26134
  name: external_exports.string().min(1, "Name is required").max(100),
26134
26135
  alias: external_exports.string().max(100).optional(),
@@ -26320,6 +26321,8 @@ var init_worktree = __esm({
26320
26321
  // src/lib/platform.ts
26321
26322
  var platform_exports = {};
26322
26323
  __export2(platform_exports, {
26324
+ KNOWN_EDITORS: () => KNOWN_EDITORS,
26325
+ detectEditors: () => detectEditors,
26323
26326
  detectShells: () => detectShells,
26324
26327
  detectTerminalApps: () => detectTerminalApps,
26325
26328
  ensurePathInEnv: () => ensurePathInEnv,
@@ -26552,9 +26555,8 @@ async function detectTerminalApps(platform = process.platform) {
26552
26555
  if (platform === "darwin") {
26553
26556
  const results = [];
26554
26557
  for (const t of MAC_TERMINAL_APPS) {
26555
- if (await pathExists(`/Applications/${t.bundleName}.app`, platform)) {
26556
- results.push({ name: t.name, value: t.bundleName });
26557
- }
26558
+ const installed = await pathExists(`/Applications/${t.bundleName}.app`, platform);
26559
+ results.push({ name: t.name, value: t.bundleName, installed });
26558
26560
  }
26559
26561
  return results;
26560
26562
  }
@@ -26562,13 +26564,21 @@ async function detectTerminalApps(platform = process.platform) {
26562
26564
  const results = [];
26563
26565
  const wtPath = await resolveCommandPath("wt", { platform });
26564
26566
  if (wtPath) {
26565
- results.push({ name: "Windows Terminal", value: wtPath });
26567
+ results.push({ name: "Windows Terminal", value: wtPath, installed: true });
26566
26568
  }
26567
26569
  return results;
26568
26570
  }
26569
26571
  return [];
26570
26572
  }
26571
- var import_node_fs2, import_node_child_process, import_node_path2, CLAUDE_NESTING_VARS, SENSITIVE_KEY_RE, defaultExecSync, MAC_TERMINAL_APPS;
26573
+ async function detectEditors(platform = process.platform) {
26574
+ const results = [];
26575
+ for (const e2 of KNOWN_EDITORS) {
26576
+ const installed = !!await resolveCommandPath(e2.command, { platform });
26577
+ results.push({ name: e2.name, command: e2.command, installed });
26578
+ }
26579
+ return results;
26580
+ }
26581
+ var import_node_fs2, import_node_child_process, import_node_path2, CLAUDE_NESTING_VARS, SENSITIVE_KEY_RE, defaultExecSync, MAC_TERMINAL_APPS, KNOWN_EDITORS;
26572
26582
  var init_platform = __esm({
26573
26583
  "src/lib/platform.ts"() {
26574
26584
  "use strict";
@@ -26592,6 +26602,22 @@ var init_platform = __esm({
26592
26602
  { name: "kitty", bundleName: "kitty" },
26593
26603
  { name: "Hyper", bundleName: "Hyper" }
26594
26604
  ];
26605
+ KNOWN_EDITORS = [
26606
+ { name: "VS Code", command: "code" },
26607
+ { name: "VS Code Insiders", command: "code-insiders" },
26608
+ { name: "Cursor", command: "cursor" },
26609
+ { name: "Windsurf", command: "windsurf" },
26610
+ { name: "Zed", command: "zed" },
26611
+ { name: "Sublime Text", command: "subl" },
26612
+ { name: "IntelliJ IDEA", command: "idea" },
26613
+ { name: "WebStorm", command: "webstorm" },
26614
+ { name: "PyCharm", command: "pycharm" },
26615
+ { name: "GoLand", command: "goland" },
26616
+ { name: "RubyMine", command: "rubymine" },
26617
+ { name: "PhpStorm", command: "phpstorm" },
26618
+ { name: "CLion", command: "clion" },
26619
+ { name: "Rider", command: "rider" }
26620
+ ];
26595
26621
  }
26596
26622
  });
26597
26623
 
@@ -49031,6 +49057,14 @@ async function updateTaskStatus(taskId, status) {
49031
49057
  }).catch(() => {
49032
49058
  });
49033
49059
  }
49060
+ if (status === "DONE" || status === "CANCELLED") {
49061
+ try {
49062
+ const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
49063
+ destroySession2(taskId);
49064
+ } catch (error48) {
49065
+ log.error("PTY session destroy failed", error48, { taskId });
49066
+ }
49067
+ }
49034
49068
  if (status === "CANCELLED" && task.project?.localPath) {
49035
49069
  try {
49036
49070
  await removeWorktree(task.project.localPath, taskId);
@@ -49072,17 +49106,17 @@ async function deleteTask(taskId) {
49072
49106
  where: { id: taskId },
49073
49107
  include: { project: true }
49074
49108
  });
49109
+ try {
49110
+ const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
49111
+ destroySession2(taskId);
49112
+ } catch {
49113
+ }
49075
49114
  if (task?.project?.localPath) {
49076
49115
  try {
49077
49116
  await removeWorktree(task.project.localPath, taskId);
49078
49117
  } catch {
49079
49118
  }
49080
49119
  }
49081
- try {
49082
- const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
49083
- destroySession2(taskId);
49084
- } catch {
49085
- }
49086
49120
  await db2.task.delete({ where: { id: taskId } });
49087
49121
  (0, import_cache2.revalidatePath)("/workspaces");
49088
49122
  }
@@ -49131,6 +49165,7 @@ async function getArchivedTasks(projectId) {
49131
49165
  },
49132
49166
  include: {
49133
49167
  labels: { include: { label: true } },
49168
+ version: { select: { id: true, number: true, name: true } },
49134
49169
  executions: {
49135
49170
  orderBy: { createdAt: "desc" },
49136
49171
  take: 1
@@ -49221,13 +49256,14 @@ async function getTaskOverview(taskId) {
49221
49256
  where: { id: taskId },
49222
49257
  include: {
49223
49258
  labels: { include: { label: true } },
49259
+ version: { select: { id: true, number: true, name: true } },
49224
49260
  project: {
49225
49261
  select: { id: true, name: true, type: true, localPath: true, workspaceId: true }
49226
49262
  },
49227
49263
  executions: {
49228
49264
  orderBy: { createdAt: "desc" },
49229
49265
  take: 1,
49230
- select: { summary: true, status: true, endedAt: true, gitStats: true }
49266
+ select: { summary: true, status: true, endedAt: true, gitStats: true, worktreePath: true }
49231
49267
  },
49232
49268
  _count: { select: { assets: true } }
49233
49269
  }
@@ -49428,6 +49464,18 @@ var import_child_process6 = require("child_process");
49428
49464
  var import_fs7 = require("fs");
49429
49465
  var import_path11 = require("path");
49430
49466
 
49467
+ // src/lib/config-reader.ts
49468
+ init_db();
49469
+ async function readConfigValue(key, defaultValue) {
49470
+ const row = await db2.systemConfig.findUnique({ where: { key } });
49471
+ if (!row) return defaultValue;
49472
+ try {
49473
+ return JSON.parse(row.value);
49474
+ } catch {
49475
+ return defaultValue;
49476
+ }
49477
+ }
49478
+
49431
49479
  // src/lib/file-utils.ts
49432
49480
  var fs = __toESM(require("node:fs"));
49433
49481
  var path = __toESM(require("node:path"));
@@ -49473,6 +49521,25 @@ function getAssistantCacheRoot() {
49473
49521
  assertWithinDataRoot(dir);
49474
49522
  return dir;
49475
49523
  }
49524
+ var EXT_MIME_MAP = {
49525
+ png: "image/png",
49526
+ jpg: "image/jpeg",
49527
+ jpeg: "image/jpeg",
49528
+ gif: "image/gif",
49529
+ webp: "image/webp",
49530
+ svg: "image/svg+xml",
49531
+ bmp: "image/bmp",
49532
+ ico: "image/x-icon",
49533
+ avif: "image/avif",
49534
+ pdf: "application/pdf",
49535
+ md: "text/markdown",
49536
+ txt: "text/plain",
49537
+ json: "application/json"
49538
+ };
49539
+ function guessMimeType(filename) {
49540
+ const ext = path.extname(filename).slice(1).toLowerCase();
49541
+ return EXT_MIME_MAP[ext];
49542
+ }
49476
49543
  var CACHE_UUID_SUFFIX_RE = /-([0-9a-f]{8})(\.[^.]+)$/i;
49477
49544
  function stripCacheUuidSuffix(filename) {
49478
49545
  return filename.replace(CACHE_UUID_SUFFIX_RE, "$2");
@@ -49513,7 +49580,7 @@ var taskTools = {
49513
49580
  }
49514
49581
  },
49515
49582
  create_task: {
49516
- description: "Create a new task in a project. Priority defaults to MEDIUM, status defaults to TODO. Set useWorktree=true for branch isolation. Set autoStart=true (default) to immediately start execution. Pass references as file paths to attach as project assets.",
49583
+ description: "Create a new task in a project. Priority defaults to MEDIUM, status defaults to TODO. useWorktree (branch isolation) and autoStart (run immediately after create) default to the user's saved preference; pass either explicitly to override for this one task. If the defaults have never been set, the FIRST call (without explicit useWorktree/autoStart) returns { needsDefaultsSetup: true } instead of creating the task \u2014 ask the user their preference, call set_task_defaults once, then call create_task again. Pass versionId to file the task under a project version (use list_versions to discover options). Pass references as file paths to attach as project assets.",
49517
49584
  schema: external_exports.object({
49518
49585
  projectId: external_exports.string(),
49519
49586
  title: external_exports.string(),
@@ -49522,14 +49589,35 @@ var taskTools = {
49522
49589
  status: TaskStatus.optional().default("TODO"),
49523
49590
  labelIds: external_exports.array(external_exports.string()).optional(),
49524
49591
  subPath: external_exports.string().optional(),
49525
- useWorktree: external_exports.boolean().optional().default(false),
49526
- baseBranch: external_exports.string().optional().describe("Base branch for worktree checkout. Only used when useWorktree=true. If omitted, auto-detects the project's current branch."),
49527
- autoStart: external_exports.boolean().optional().default(true),
49592
+ versionId: external_exports.string().optional().describe("Version to assign the task to. Use list_versions to find valid IDs for the project. Omit for backlog (no version)."),
49593
+ useWorktree: external_exports.boolean().optional().describe("Use a Git worktree for branch isolation. Omit to use the user's saved default; pass explicitly to override this task."),
49594
+ baseBranch: external_exports.string().optional().describe("Base branch for worktree checkout. Only used when useWorktree resolves to true. If omitted, auto-detects the project's current branch."),
49595
+ autoStart: external_exports.boolean().optional().describe("Start execution immediately after creating. Omit to use the user's saved default; pass explicitly to override this task."),
49528
49596
  references: external_exports.array(external_exports.string()).max(20).optional()
49529
49597
  }),
49530
49598
  handler: async (args) => {
49599
+ const explicitWorktree = args.useWorktree !== void 0;
49600
+ const explicitAutoStart = args.autoStart !== void 0;
49601
+ const defaultsConfigured = await readConfigValue("task.mcpDefaultsConfigured", false);
49602
+ if (!defaultsConfigured && !explicitWorktree && !explicitAutoStart) {
49603
+ return {
49604
+ needsDefaultsSetup: true,
49605
+ task: null,
49606
+ message: "\u9996\u6B21\u901A\u8FC7 MCP \u521B\u5EFA\u4EFB\u52A1\uFF0C\u5C1A\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u504F\u597D\u3002\u8BF7\u5411\u7528\u6237\u786E\u8BA4\u4E24\u4E2A\u9009\u62E9\uFF1A(1) \u4EE5\u540E\u65B0\u5EFA\u4EFB\u52A1\u662F\u5426\u9ED8\u8BA4\u4F7F\u7528 Git worktree \u9694\u79BB\uFF1F(2) \u662F\u5426\u9ED8\u8BA4\u521B\u5EFA\u540E\u81EA\u52A8\u542F\u52A8\u6267\u884C\uFF1F\u62FF\u5230\u9009\u62E9\u540E\u8C03\u7528 set_task_defaults({ useWorktree, autoStart }) \u4FDD\u5B58\uFF08\u53EA\u9700\u4E00\u6B21\uFF0C\u4EE5\u540E\u4E0D\u518D\u8BE2\u95EE\uFF09\uFF0C\u7136\u540E\u91CD\u65B0\u8C03\u7528 create_task\u3002\u82E5\u67D0\u4E2A\u4EFB\u52A1\u9700\u8981\u7279\u6B8A\u5904\u7406\uFF0C\u53EF\u5728 create_task \u91CC\u76F4\u63A5\u663E\u5F0F\u4F20 useWorktree / autoStart \u8986\u76D6\u9ED8\u8BA4\u3002"
49607
+ };
49608
+ }
49609
+ const useWorktree = explicitWorktree ? args.useWorktree : await readConfigValue("task.defaultUseWorktree", true);
49610
+ const autoStart = explicitAutoStart ? args.autoStart : await readConfigValue("task.defaultAutoStart", false);
49611
+ let versionId = null;
49612
+ if (args.versionId) {
49613
+ const v2 = await db.version.findFirst({
49614
+ where: { id: args.versionId, projectId: args.projectId },
49615
+ select: { id: true }
49616
+ });
49617
+ versionId = v2?.id ?? null;
49618
+ }
49531
49619
  let baseBranch = null;
49532
- if (args.useWorktree) {
49620
+ if (useWorktree) {
49533
49621
  if (args.baseBranch) {
49534
49622
  baseBranch = args.baseBranch;
49535
49623
  } else {
@@ -49553,7 +49641,9 @@ var taskTools = {
49553
49641
  projectId: args.projectId,
49554
49642
  priority: args.priority ?? "MEDIUM",
49555
49643
  status: args.status ?? "TODO",
49556
- baseBranch
49644
+ baseBranch,
49645
+ versionId,
49646
+ subPath: args.subPath ?? null
49557
49647
  }
49558
49648
  });
49559
49649
  if (args.labelIds && args.labelIds.length > 0) {
@@ -49593,6 +49683,7 @@ var taskTools = {
49593
49683
  filename,
49594
49684
  path: dest,
49595
49685
  size: stat.size,
49686
+ mimeType: guessMimeType(filename),
49596
49687
  projectId: args.projectId,
49597
49688
  taskId: task.id,
49598
49689
  description: `Reference: ${(0, import_path11.basename)(filePath)}`
@@ -49611,7 +49702,7 @@ ${refText}`;
49611
49702
  await db.task.update({ where: { id: task.id }, data: { description: updatedDesc } });
49612
49703
  }
49613
49704
  }
49614
- if (args.autoStart) {
49705
+ if (autoStart) {
49615
49706
  const PORT2 = process.env.PORT ?? "3000";
49616
49707
  const prompt = args.title;
49617
49708
  try {
@@ -49691,6 +49782,35 @@ ${refText}`;
49691
49782
  await db.task.delete({ where: { id: args.taskId } });
49692
49783
  return { deleted: true, taskId: args.taskId };
49693
49784
  }
49785
+ },
49786
+ set_task_defaults: {
49787
+ description: "Save the user's default behavior for new tasks: useWorktree (Git worktree branch isolation) and autoStart (run immediately after create). Call this once after asking the user their preference \u2014 subsequent create_task calls without an explicit useWorktree/autoStart use these defaults and won't prompt again. Applies globally to all projects.",
49788
+ schema: external_exports.object({
49789
+ useWorktree: external_exports.boolean(),
49790
+ autoStart: external_exports.boolean()
49791
+ }),
49792
+ handler: async (args) => {
49793
+ const set2 = (key, value) => db.systemConfig.upsert({
49794
+ where: { key },
49795
+ create: { key, value: JSON.stringify(value) },
49796
+ update: { value: JSON.stringify(value) }
49797
+ });
49798
+ await set2("task.defaultUseWorktree", args.useWorktree);
49799
+ await set2("task.defaultAutoStart", args.autoStart);
49800
+ await set2("task.mcpDefaultsConfigured", true);
49801
+ return { ok: true, useWorktree: args.useWorktree, autoStart: args.autoStart };
49802
+ }
49803
+ },
49804
+ list_versions: {
49805
+ description: "List a project's active versions (excludes RELEASED) for assigning a task via create_task's versionId. Returns id, number, name, status, isCurrent.",
49806
+ schema: external_exports.object({ projectId: external_exports.string() }),
49807
+ handler: async (args) => {
49808
+ return db.version.findMany({
49809
+ where: { projectId: args.projectId, status: { not: "RELEASED" } },
49810
+ select: { id: true, number: true, name: true, status: true, isCurrent: true },
49811
+ orderBy: [{ isCurrent: "desc" }, { order: "asc" }, { createdAt: "desc" }]
49812
+ });
49813
+ }
49694
49814
  }
49695
49815
  };
49696
49816
 
@@ -49944,18 +50064,6 @@ async function search(query, category = "task", config2) {
49944
50064
  return [];
49945
50065
  }
49946
50066
 
49947
- // src/lib/config-reader.ts
49948
- init_db();
49949
- async function readConfigValue(key, defaultValue) {
49950
- const row = await db2.systemConfig.findUnique({ where: { key } });
49951
- if (!row) return defaultValue;
49952
- try {
49953
- return JSON.parse(row.value);
49954
- } catch {
49955
- return defaultValue;
49956
- }
49957
- }
49958
-
49959
50067
  // src/mcp/tools/search-tools.ts
49960
50068
  var searchTools = {
49961
50069
  search: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tower-studio",
3
- "version": "0.2.16",
3
+ "version": "0.2.19",
4
4
  "description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
5
5
  "bin": {
6
6
  "tower": "bin/tower.mjs"
@@ -61,6 +61,7 @@
61
61
  "dependencies": {
62
62
  "@modelcontextprotocol/sdk": "^1.28.0",
63
63
  "@prisma/client": "^6.19.2",
64
+ "@vscode/ripgrep": "1.18.0",
64
65
  "node-pty": "^1.1.0",
65
66
  "prisma": "^6.19.2",
66
67
  "tsx": "^4.21.0",
@@ -11,6 +11,7 @@ model Workspace {
11
11
  id String @id @default(cuid())
12
12
  name String
13
13
  description String?
14
+ order Int @default(0)
14
15
  createdAt DateTime @default(now())
15
16
  updatedAt DateTime @updatedAt
16
17
 
@@ -14,6 +14,13 @@ const EXECUTABLES = [
14
14
  "node_modules/node-pty/prebuilds/darwin-x64/spawn-helper",
15
15
  "node_modules/node-pty/prebuilds/linux-arm64/spawn-helper",
16
16
  "node_modules/node-pty/prebuilds/linux-x64/spawn-helper",
17
+ // @vscode/ripgrep bundled `rg` binary (per-platform optionalDependency).
18
+ // Only the current platform's package is installed; the rest are skipped.
19
+ "node_modules/@vscode/ripgrep-darwin-arm64/bin/rg",
20
+ "node_modules/@vscode/ripgrep-darwin-x64/bin/rg",
21
+ "node_modules/@vscode/ripgrep-linux-arm64/bin/rg",
22
+ "node_modules/@vscode/ripgrep-linux-arm/bin/rg",
23
+ "node_modules/@vscode/ripgrep-linux-x64/bin/rg",
17
24
  ];
18
25
 
19
26
  let fixed = 0;
@@ -55,15 +55,22 @@ Use Tower tools when the user wants to:
55
55
  1. Call `list_workspaces` to find the target workspace
56
56
  2. Call `list_projects` with workspaceId to find the target project
57
57
  3. Ask user to confirm the project (or infer from context)
58
- 4. **Worktree mode**: default is direct mode (no branch isolation). If user says "use worktree", "-w", or "branch isolation", set `useWorktree: true`. Optionally pass `baseBranch` to specify which branch to check out from (e.g. `baseBranch: "develop"`). If `baseBranch` is omitted, the project's current git branch is auto-detected.
59
- 5. **SubPath detection**: check the project description for directory structure hints (e.g. "monorepo: packages/web, packages/api"). If the task clearly belongs to a subdirectory, set `subPath` (e.g. "packages/web"). If unclear, omit it it's optional.
60
- 6. **References (any files/images)**: ALL user-provided files including pasted screenshots, uploaded images, and local file paths — should be passed as `references: ["/path/to/file"]` on `create_task`. The tool copies files into the project asset library automatically.
58
+ 4. **Worktree / auto-start defaults**: `create_task`'s `useWorktree` (branch isolation) and `autoStart` (run right after create) follow the user's saved **global** preference.
59
+ - On the FIRST `create_task` where neither default has been set AND you didn't pass them explicitly, the tool does **not** create the task it returns `{ needsDefaultsSetup: true, message }`. When you see that:
60
+ - Ask the user two things: (a) default to Git **worktree** isolation for new tasks? (b) **auto-start** execution right after creating?
61
+ - Call `set_task_defaults({ useWorktree, autoStart })` once to save it (you'll never be asked again).
62
+ - Then call `create_task` again — it now succeeds using the saved defaults.
63
+ - **Per-task override**: if the user wants this one task to differ (e.g. "don't use worktree", "just create, don't start"), pass `useWorktree` / `autoStart` explicitly on `create_task`. Explicit args always win over the saved default and also skip the first-run prompt.
64
+ - When `useWorktree` resolves to true, optionally pass `baseBranch` to choose the checkout branch (e.g. `baseBranch: "develop"`); if omitted, the project's current git branch is auto-detected.
65
+ 5. **Version (optional)**: to file the task under a project version, call `list_versions` with the projectId, let the user pick, and pass `versionId`. Omit for backlog (no version).
66
+ 6. **SubPath detection**: check the project description for directory structure hints (e.g. "monorepo: packages/web, packages/api"). If the task clearly belongs to a subdirectory, set `subPath` (e.g. "packages/web"). If unclear, omit it — it's optional.
67
+ 7. **References (any files/images)**: ALL user-provided files — including pasted screenshots, uploaded images, and local file paths — should be passed as `references: ["/path/to/file"]` on `create_task`. The tool copies files into the project asset library automatically.
61
68
  - **Local file paths**: pass directly (e.g. `references: ["/path/to/doc.md", "/path/to/design.png"]`)
62
69
  - **Pasted images with known paths**: if the platform provides file paths for pasted media (e.g. OpenClaw's `{{MediaPaths}}`, Claude Code temp files), pass those paths directly — they are local files
63
70
  - **Base64 only (no file path)**: if you only have base64 data with no local path, upload first via `manage_assets` with `action: "upload"`, `projectId`, `base64`, `mimeType`. Get back `{ id: assetId, path }`. Then pass the returned `path` in `references` — `create_task` will automatically copy and link the asset, no separate `link_task` needed
64
71
  - **`link_task` only for retroactive linking**: use `manage_assets` with `action: "link_task"` only when you need to associate existing assets with an already-created task (e.g. user wants to add references after task creation)
65
- 7. Call `create_task` with projectId, title, and optional description/priority/labelIds/subPath/useWorktree/baseBranch/references
66
- 8. `autoStart` defaults to true task will be created and immediately started. If user says "don't start", "just create", or "-nostart", set `autoStart: false`
72
+ 8. Call `create_task` with projectId, title, and optional description/priority/labelIds/subPath/versionId/useWorktree/baseBranch/references
73
+ 9. After creating: if `autoStart` resolved to true the task starts immediately (check the response's `execution` field `autoStart` intent does not guarantee it actually started); otherwise the task stays TODO.
67
74
 
68
75
  ### "Start a task" / "Run this task" / "Execute task ..."
69
76