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,5 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,465536,(e,t,r)=>{var s;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/os-browserify/"),(s={}).endianness=function(){return"LE"},s.hostname=function(){return"u">typeof location?location.hostname:""},s.loadavg=function(){return[]},s.uptime=function(){return 0},s.freemem=function(){return Number.MAX_VALUE},s.totalmem=function(){return Number.MAX_VALUE},s.cpus=function(){return[]},s.type=function(){return"Browser"},s.release=function(){return"u">typeof navigator?navigator.appVersion:""},s.networkInterfaces=s.getNetworkInterfaces=function(){return{}},s.arch=function(){return"javascript"},s.platform=function(){return"browser"},s.tmpdir=s.tmpDir=function(){return"/tmp"},s.EOL="\n",s.homedir=function(){return"/"},t.exports=s},930787,(e,t,r)=>{!function(){"use strict";var e={114:function(e){function t(e){if("string"!=typeof e)throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function r(e,t){for(var r,s="",a=0,n=-1,o=0,i=0;i<=e.length;++i){if(i<e.length)r=e.charCodeAt(i);else if(47===r)break;else r=47;if(47===r){if(n===i-1||1===o);else if(n!==i-1&&2===o){if(s.length<2||2!==a||46!==s.charCodeAt(s.length-1)||46!==s.charCodeAt(s.length-2)){if(s.length>2){var l=s.lastIndexOf("/");if(l!==s.length-1){-1===l?(s="",a=0):a=(s=s.slice(0,l)).length-1-s.lastIndexOf("/"),n=i,o=0;continue}}else if(2===s.length||1===s.length){s="",a=0,n=i,o=0;continue}}t&&(s.length>0?s+="/..":s="..",a=2)}else s.length>0?s+="/"+e.slice(n+1,i):s=e.slice(n+1,i),a=i-n-1;n=i,o=0}else 46===r&&-1!==o?++o:o=-1}return s}var s={resolve:function(){for(var e,s,a="",n=!1,o=arguments.length-1;o>=-1&&!n;o--)o>=0?s=arguments[o]:(void 0===e&&(e=""),s=e),t(s),0!==s.length&&(a=s+"/"+a,n=47===s.charCodeAt(0));if(a=r(a,!n),n)if(a.length>0)return"/"+a;else return"/";return a.length>0?a:"."},normalize:function(e){if(t(e),0===e.length)return".";var s=47===e.charCodeAt(0),a=47===e.charCodeAt(e.length-1);return(0!==(e=r(e,!s)).length||s||(e="."),e.length>0&&a&&(e+="/"),s)?"/"+e:e},isAbsolute:function(e){return t(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0==arguments.length)return".";for(var e,r=0;r<arguments.length;++r){var a=arguments[r];t(a),a.length>0&&(void 0===e?e=a:e+="/"+a)}return void 0===e?".":s.normalize(e)},relative:function(e,r){if(t(e),t(r),e===r||(e=s.resolve(e))===(r=s.resolve(r)))return"";for(var a=1;a<e.length&&47===e.charCodeAt(a);++a);for(var n=e.length,o=n-a,i=1;i<r.length&&47===r.charCodeAt(i);++i);for(var l=r.length-i,c=o<l?o:l,d=-1,u=0;u<=c;++u){if(u===c){if(l>c){if(47===r.charCodeAt(i+u))return r.slice(i+u+1);else if(0===u)return r.slice(i+u)}else o>c&&(47===e.charCodeAt(a+u)?d=u:0===u&&(d=0));break}var m=e.charCodeAt(a+u);if(m!==r.charCodeAt(i+u))break;47===m&&(d=u)}var x="";for(u=a+d+1;u<=n;++u)(u===n||47===e.charCodeAt(u))&&(0===x.length?x+="..":x+="/..");return x.length>0?x+r.slice(i+d):(i+=d,47===r.charCodeAt(i)&&++i,r.slice(i))},_makeLong:function(e){return e},dirname:function(e){if(t(e),0===e.length)return".";for(var r=e.charCodeAt(0),s=47===r,a=-1,n=!0,o=e.length-1;o>=1;--o)if(47===(r=e.charCodeAt(o))){if(!n){a=o;break}}else n=!1;return -1===a?s?"/":".":s&&1===a?"//":e.slice(0,a)},basename:function(e,r){if(void 0!==r&&"string"!=typeof r)throw TypeError('"ext" argument must be a string');t(e);var s,a=0,n=-1,o=!0;if(void 0!==r&&r.length>0&&r.length<=e.length){if(r.length===e.length&&r===e)return"";var i=r.length-1,l=-1;for(s=e.length-1;s>=0;--s){var c=e.charCodeAt(s);if(47===c){if(!o){a=s+1;break}}else -1===l&&(o=!1,l=s+1),i>=0&&(c===r.charCodeAt(i)?-1==--i&&(n=s):(i=-1,n=l))}return a===n?n=l:-1===n&&(n=e.length),e.slice(a,n)}for(s=e.length-1;s>=0;--s)if(47===e.charCodeAt(s)){if(!o){a=s+1;break}}else -1===n&&(o=!1,n=s+1);return -1===n?"":e.slice(a,n)},extname:function(e){t(e);for(var r=-1,s=0,a=-1,n=!0,o=0,i=e.length-1;i>=0;--i){var l=e.charCodeAt(i);if(47===l){if(!n){s=i+1;break}continue}-1===a&&(n=!1,a=i+1),46===l?-1===r?r=i:1!==o&&(o=1):-1!==r&&(o=-1)}return -1===r||-1===a||0===o||1===o&&r===a-1&&r===s+1?"":e.slice(r,a)},format:function(e){var t,r;if(null===e||"object"!=typeof e)throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return t=e.dir||e.root,r=e.base||(e.name||"")+(e.ext||""),t?t===e.root?t+r:t+"/"+r:r},parse:function(e){t(e);var r,s={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return s;var a=e.charCodeAt(0),n=47===a;n?(s.root="/",r=1):r=0;for(var o=-1,i=0,l=-1,c=!0,d=e.length-1,u=0;d>=r;--d){if(47===(a=e.charCodeAt(d))){if(!c){i=d+1;break}continue}-1===l&&(c=!1,l=d+1),46===a?-1===o?o=d:1!==u&&(u=1):-1!==o&&(u=-1)}return -1===o||-1===l||0===u||1===u&&o===l-1&&o===i+1?-1!==l&&(0===i&&n?s.base=s.name=e.slice(1,l):s.base=s.name=e.slice(i,l)):(0===i&&n?(s.name=e.slice(1,o),s.base=e.slice(1,l)):(s.name=e.slice(i,o),s.base=e.slice(i,l)),s.ext=e.slice(o,l)),i>0?s.dir=e.slice(0,i-1):n&&(s.dir="/"),s},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,e.exports=s}},r={};function s(t){var a=r[t];if(void 0!==a)return a.exports;var n=r[t]={exports:{}},o=!0;try{e[t](n,n.exports,s),o=!1}finally{o&&delete r[t]}return n.exports}s.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/path-browserify/",t.exports=s(114)}()},756502,e=>{"use strict";let t=(0,e.i(572989).default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);e.s(["default",0,t])},914935,e=>{"use strict";var t=e.i(289721),r=e.i(965652),s=e.i(538059),a=e.i(210702),n=e.i(487278),o=e.i(232545),i=e.i(464249),l=e.i(998626),c=e.i(49007),d=e.i(902539),u=e.i(263938),m=e.i(645378),x=e.i(453889),h=e.i(572989);let p=(0,h.default)("gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);var f=e.i(755146),g=e.i(759684),j=e.i(776639),b=e.i(746798),v=e.i(519455),w=e.i(793479),N=e.i(514798);let y=(0,N.createServerReference)("40b569469bf855a8ba6d4144ebe5b88241062fa000",N.callServer,void 0,N.findSourceMapURL,"createWorkspace"),k=(0,N.createServerReference)("60de73bafc8fc55db7389435befac3e7e0b2621517",N.callServer,void 0,N.findSourceMapURL,"updateWorkspace"),C=(0,N.createServerReference)("40994f3504b40f4224843b59eed5bde9ce4b73c103",N.callServer,void 0,N.findSourceMapURL,"deleteWorkspace"),S=(0,N.createServerReference)("405b0ae5f2024fe8c3bcb40ccc76f0552326429746",N.callServer,void 0,N.findSourceMapURL,"reorderWorkspaces");var T=e.i(951894);let D=(0,N.createServerReference)("4068d24a62a39fd8d7299189e947c4cd4a5c10f292",N.callServer,void 0,N.findSourceMapURL,"createLabel"),P=(0,N.createServerReference)("40a876f6711a99c3a8c5fff3f959fcea90a3df590d",N.callServer,void 0,N.findSourceMapURL,"deleteLabel");var M=e.i(533499),R=e.i(360112),$=e.i(720247),L=e.i(775712),A=e.i(67013);let E=["📋","🚀","🎯","💡","🔧","📦","🎨","📊","🔬","🌟","📝","🏗️"];function O({workspaces:e}){let i,l=(0,s.useRouter)(),c=(0,s.usePathname)(),{t:u}=(0,M.useI18n)(),[h,f]=(0,r.useState)(!1);(0,r.useEffect)(()=>{"true"===localStorage.getItem("sidebar-collapsed")&&f(!0)},[]);let[j,w]=(0,r.useState)(!1),[N,T]=(0,r.useState)(!1),[D,P]=(0,r.useState)(!1),[A,B]=(0,r.useState)(null),[_,W]=(0,r.useState)(""),[U,H]=(0,r.useState)(E[0]),[K,V]=(0,r.useState)(null),[q,X]=(0,r.useState)(e);(0,r.useEffect)(()=>{X(e)},[e]);let G=(0,$.useSensors)((0,$.useSensor)($.PointerSensor,{activationConstraint:{distance:8}})),J=(0,r.useCallback)(t=>{let{active:r,over:s}=t;if(!s||r.id===s.id)return;let a=q.findIndex(e=>e.id===r.id),n=q.findIndex(e=>e.id===s.id);if(-1===a||-1===n)return;let o=(0,L.arrayMove)(q,a,n);X(o),S(o.map(e=>e.id)).then(()=>l.refresh()).catch(()=>{X(e),R.toast.error(u("sidebar.reorderError"))})},[q,e,l,u]),Y=c.split("/workspaces/")[1]?.split("/")[0],Z=(0,r.useCallback)(()=>{f(e=>{let t=!e;return localStorage.setItem("sidebar-collapsed",String(t)),t})},[]),Q=(0,r.useCallback)(async()=>{if(!_.trim())return;let e=await y({name:_.trim(),description:U});W(""),H(E[0]),w(!1),l.refresh(),l.push(`/workspaces/${e.id}`)},[_,U,l]),ee=(0,r.useCallback)(async()=>{_.trim()&&K&&(await k(K,{name:_.trim(),description:U}),W(""),T(!1),V(null),l.refresh())},[_,U,K,l]),et=(0,r.useCallback)(e=>{V(e.id),W(e.name),H(e.description&&E.includes(e.description)?e.description:E[0]),T(!0)},[]),er=(0,r.useCallback)(async(t,r)=>{if(e.length<=1)return void R.toast.error(u("sidebar.lastWorkspaceError"));if(confirm(u("sidebar.deleteConfirm",{name:r})))try{await C(t),l.refresh(),Y===t&&l.push("/workspaces")}catch{R.toast.error(u("sidebar.lastWorkspaceError"))}},[Y,l,u,e.length]),es=(0,r.useCallback)(e=>{B(e),P(!0)},[]),ea=e=>e.description&&E.includes(e.description)?e.description:e.name.charAt(0).toUpperCase();if(h){let r;return(0,t.jsxs)("aside",{className:"flex h-screen w-14 flex-col items-center border-r border-border bg-sidebar py-3",children:[(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:Z,className:"mb-4 flex h-9 w-9 items-center justify-center rounded-lg bg-primary/10 ring-1 ring-primary/20 transition-transform hover:scale-105"}),children:(0,t.jsx)("img",{src:"/logo.png",alt:"Tower",className:"h-6 w-6 rounded"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("sidebar.expand")})]}),(0,t.jsx)(g.ScrollArea,{className:"flex-1 min-h-0",children:(0,t.jsxs)("div",{className:"flex flex-col items-center gap-1 px-0.5 pt-1",children:[e.map(e=>{let r=Y===e.id,s=ea(e);return(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:()=>{r||l.push(`/workspaces/${e.id}`)},className:`flex h-9 w-9 items-center justify-center rounded-lg transition-all ${r?"ring-1 ring-primary/20 text-foreground cursor-default":"text-muted-foreground hover:text-foreground cursor-pointer"}`}),children:(0,t.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-md bg-muted text-sm",children:E.includes(s)?s:(0,t.jsx)("span",{className:"text-xs font-semibold",children:s})})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:e.name})]},e.id)}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{"data-tour":"create-workspace",onClick:()=>w(!0),className:"flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"}),children:(0,t.jsx)(o.Plus,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("sidebar.newWorkspace")})]})]})}),(0,t.jsxs)("div",{className:"mt-2 flex flex-col items-center gap-1",children:[(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:()=>l.push("/missions"),className:`rounded-lg p-2 transition-colors ${"/missions"===c?"text-foreground bg-accent":"text-muted-foreground hover:bg-accent hover:text-foreground"}`}),children:(0,t.jsx)(p,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("missions.navLabel")})]}),(r=Y||e[0]?.id)?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:()=>l.push(`/workspaces/${r}/notes`),className:`rounded-lg p-2 transition-colors ${c.includes("/notes")?"text-foreground bg-accent":"text-muted-foreground hover:bg-accent hover:text-foreground"}`}),children:(0,t.jsx)(m.FileText,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("sidebar.notes")})]}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:()=>l.push(`/workspaces/${r}/assets`),className:`rounded-lg p-2 transition-colors ${c.includes("/assets")?"text-foreground bg-accent":"text-muted-foreground hover:bg-accent hover:text-foreground"}`}),children:(0,t.jsx)(x.FolderOpen,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("sidebar.assets")})]}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)("button",{onClick:()=>l.push(`/workspaces/${r}/archive`),className:`rounded-lg p-2 transition-colors ${c.includes("/archive")?"text-foreground bg-accent":"text-muted-foreground hover:bg-accent hover:text-foreground"}`}),children:(0,t.jsx)(n.Archive,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{side:"right",sideOffset:8,children:u("sidebar.archive")})]})]}):null]}),(0,t.jsx)(I,{open:j,onOpenChange:w,title:u("workspace.create"),name:_,onNameChange:W,icon:U,onIconChange:H,onSubmit:Q,submitLabel:u("common.create"),nameLabel:u("workspace.name"),iconLabel:u("workspace.icon"),namePlaceholder:u("workspace.namePlaceholder"),cancelLabel:u("common.cancel")})]})}return(0,t.jsxs)("aside",{className:"noise relative flex h-screen w-56 flex-col border-r border-border bg-sidebar",children:[(0,t.jsxs)("div",{className:"relative z-10 flex items-center gap-3 px-4 py-4",children:[(0,t.jsx)("img",{src:"/logo.png",alt:"Tower",className:"h-9 w-9 rounded-lg"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("div",{className:"text-sm font-semibold tracking-tight text-foreground",children:"Tower"}),(0,t.jsx)("div",{className:"text-[10px] font-medium uppercase tracking-widest text-muted-foreground",children:"Studio"})]}),(0,t.jsx)(v.Button,{variant:"ghost",size:"icon-xs",onClick:Z,className:"text-muted-foreground",title:u("sidebar.collapse"),children:(0,t.jsx)(d.ChevronsLeft,{className:"h-4 w-4"})})]}),(0,t.jsxs)("div",{className:"relative z-10 flex items-center justify-between px-4 py-2",children:[(0,t.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:u("sidebar.workspace")}),(0,t.jsx)(v.Button,{variant:"ghost",size:"icon-sm",className:"text-muted-foreground","data-tour":"create-workspace",onClick:()=>{W(""),H(E[0]),w(!0)},title:u("sidebar.newWorkspace"),children:(0,t.jsx)(o.Plus,{className:"h-3.5 w-3.5"})})]}),(0,t.jsx)(g.ScrollArea,{className:"relative z-10 mt-2 flex-1 min-h-0",children:(0,t.jsx)("div",{className:"px-2 py-1",children:(0,t.jsx)($.DndContext,{id:"workspace-sidebar",sensors:G,collisionDetection:$.closestCenter,onDragEnd:J,children:(0,t.jsx)(L.SortableContext,{items:q.map(e=>e.id),strategy:L.verticalListSortingStrategy,children:q.map(e=>(0,t.jsx)(z,{ws:e,isActive:Y===e.id,icon:ea(e),disableDelete:q.length<=1,t:u,onSelect:()=>{Y!==e.id&&l.push(`/workspaces/${e.id}`)},onEdit:()=>et(e),onManageLabels:()=>es(e.id),onDelete:()=>er(e.id,e.name)},e.id))})})})}),(0,t.jsxs)(a.default,{href:"/missions",className:`relative z-10 flex items-center gap-2 border-t border-border px-4 py-3 text-[11px] cursor-pointer transition-colors ${"/missions"===c?"text-foreground":"text-muted-foreground hover:text-foreground"}`,children:[(0,t.jsx)(p,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:u("missions.navLabel")})]}),(i=Y||e[0]?.id)?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(a.default,{href:`/workspaces/${i}/notes`,className:"relative z-10 flex items-center gap-2 border-t border-border px-4 py-3 text-[11px] text-muted-foreground cursor-pointer hover:text-foreground transition-colors",children:[(0,t.jsx)(m.FileText,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:u("sidebar.notes")})]}),(0,t.jsxs)(a.default,{href:`/workspaces/${i}/assets`,className:"relative z-10 flex items-center gap-2 px-4 py-3 text-[11px] text-muted-foreground cursor-pointer hover:text-foreground transition-colors",children:[(0,t.jsx)(x.FolderOpen,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:u("sidebar.assets")})]}),(0,t.jsxs)(a.default,{href:`/workspaces/${i}/archive`,className:"relative z-10 flex items-center gap-2 px-4 py-3 text-[11px] text-muted-foreground cursor-pointer hover:text-foreground transition-colors",children:[(0,t.jsx)(n.Archive,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:u("sidebar.archive")})]})]}):null,(0,t.jsx)(I,{open:j,onOpenChange:w,title:u("workspace.create"),name:_,onNameChange:W,icon:U,onIconChange:H,onSubmit:Q,submitLabel:u("common.create"),nameLabel:u("workspace.name"),iconLabel:u("workspace.icon"),namePlaceholder:u("workspace.namePlaceholder"),cancelLabel:u("common.cancel")}),(0,t.jsx)(I,{open:N,onOpenChange:e=>{T(e),e||V(null)},title:u("workspace.edit"),name:_,onNameChange:W,icon:U,onIconChange:H,onSubmit:ee,submitLabel:u("common.save"),nameLabel:u("workspace.name"),iconLabel:u("workspace.icon"),namePlaceholder:u("workspace.namePlaceholder"),cancelLabel:u("common.cancel")}),A&&(0,t.jsx)(F,{open:D,onOpenChange:e=>{P(e),e||B(null)},workspaceId:A})]})}function z({ws:e,isActive:r,icon:s,disableDelete:a,t:n,onSelect:o,onEdit:d,onManageLabels:m,onDelete:x}){var h;let p,g,j,{attributes:b,listeners:v,setNodeRef:w,transform:N,transition:y,isDragging:k}=(0,L.useSortable)({id:e.id}),C={transform:A.CSS.Transform.toString(N),transition:y,opacity:k?.4:1};return(0,t.jsxs)("div",{ref:w,style:C,...b,...v,className:`group relative flex touch-none items-center rounded-lg transition-all ${r?"bg-accent ring-1 ring-primary/15":"hover:bg-accent/60"}`,children:[(0,t.jsxs)("button",{onClick:o,className:`flex flex-1 items-center gap-2.5 px-3 py-2.5 text-left ${r?"cursor-default":"cursor-pointer"}`,children:[(0,t.jsx)("span",{className:"flex h-7 w-7 items-center justify-center rounded-md bg-muted text-sm",children:E.includes(s)?s:(0,t.jsx)("span",{className:"text-xs font-semibold text-muted-foreground",children:s})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("div",{className:`truncate text-sm font-medium ${r?"text-foreground":"text-secondary-foreground"}`,children:e.name}),(0,t.jsx)("div",{className:"text-[11px] text-muted-foreground",children:(h=e.updatedAt,g=Math.floor((p=Date.now()-new Date(h).getTime())/6e4),j=Math.floor(p/36e5),g<60?`${g}m ago`:j<24?`${j}h ago`:`${Math.floor(j/24)}d ago`)})]})]}),(0,t.jsxs)(f.DropdownMenu,{children:[(0,t.jsx)(f.DropdownMenuTrigger,{render:(0,t.jsx)("button",{className:"mr-2 rounded-md p-1 text-muted-foreground opacity-0 transition-all hover:bg-background hover:text-foreground group-hover:opacity-100",onClick:e=>e.stopPropagation()}),children:(0,t.jsx)(c.MoreHorizontal,{className:"h-3.5 w-3.5"})}),(0,t.jsxs)(f.DropdownMenuContent,{align:"start",side:"right",children:[(0,t.jsxs)(f.DropdownMenuItem,{onClick:d,children:[(0,t.jsx)(i.Pencil,{className:"mr-2 h-3.5 w-3.5"}),n("sidebar.rename")]}),(0,t.jsxs)(f.DropdownMenuItem,{onClick:m,children:[(0,t.jsx)(u.Tag,{className:"mr-2 h-3.5 w-3.5"}),n("sidebar.manageLabels")]}),(0,t.jsxs)(f.DropdownMenuItem,{className:a?"text-muted-foreground opacity-50":"text-rose-400",disabled:a,onClick:x,children:[(0,t.jsx)(l.Trash2,{className:"mr-2 h-3.5 w-3.5"}),n("sidebar.delete")]})]})]})]})}function I({open:e,onOpenChange:r,title:s,name:a,onNameChange:n,icon:o,onIconChange:i,onSubmit:l,submitLabel:c,nameLabel:d,iconLabel:u,namePlaceholder:m,cancelLabel:x}){return(0,t.jsx)(j.Dialog,{open:e,onOpenChange:r,disablePointerDismissal:!0,children:(0,t.jsxs)(j.DialogContent,{className:"sm:max-w-sm",children:[(0,t.jsx)(j.DialogHeader,{children:(0,t.jsx)(j.DialogTitle,{children:s})}),(0,t.jsxs)("div",{className:"space-y-4 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d}),(0,t.jsx)(w.Input,{placeholder:m,value:a,onChange:e=>n(e.target.value),onKeyDown:e=>"Enter"===e.key&&e.preventDefault(),className:"mt-1.5"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:u}),(0,t.jsx)("div",{className:"mt-1.5 grid grid-cols-6 gap-1.5",children:E.map(e=>(0,t.jsx)("button",{onClick:()=>i(e),className:`flex h-10 w-10 items-center justify-center rounded-lg text-lg transition-all ${o===e?"bg-primary/15 ring-2 ring-primary/30 scale-110":"bg-muted hover:bg-accent"}`,children:e},e))})]})]}),(0,t.jsxs)(j.DialogFooter,{children:[(0,t.jsx)(v.Button,{variant:"outline",onClick:()=>r(!1),children:x}),(0,t.jsx)(v.Button,{onClick:l,disabled:!a.trim(),className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:c})]})]})})}let B=["#3b82f6","#ef4444","#f59e0b","#10b981","#8b5cf6","#ec4899","#06b6d4","#f97316"];function F({open:e,onOpenChange:s,workspaceId:a}){let{t:n}=(0,M.useI18n)(),[o,i]=(0,r.useState)([]),[l,c]=(0,r.useState)(""),[d,u]=(0,r.useState)(B[0]);(0,r.useEffect)(()=>{e&&(0,T.getLabelsForWorkspace)(a).then(i)},[e,a]);let m=async()=>{l.trim()&&(await D({name:l.trim(),color:d,workspaceId:a}),i(await (0,T.getLabelsForWorkspace)(a)),c(""))},x=async e=>{await P(e),i(t=>t.filter(t=>t.id!==e))};return(0,t.jsx)(j.Dialog,{open:e,onOpenChange:s,disablePointerDismissal:!0,children:(0,t.jsxs)(j.DialogContent,{className:"sm:max-w-sm",children:[(0,t.jsx)(j.DialogHeader,{children:(0,t.jsx)(j.DialogTitle,{children:n("label.manage")})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[o.map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"h-3 w-3 rounded-full",style:{backgroundColor:e.color}}),(0,t.jsx)("span",{className:"flex-1 text-sm text-foreground",children:e.name}),e.isBuiltin?(0,t.jsx)("span",{className:"text-[10px] text-muted-foreground",children:n("label.builtin")}):(0,t.jsx)("button",{onClick:()=>x(e.id),className:"text-xs text-rose-400 hover:text-rose-300",children:n("common.delete")})]},e.id)),(0,t.jsxs)("div",{className:"border-t border-border pt-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(w.Input,{placeholder:n("label.name"),value:l,onChange:e=>c(e.target.value),onKeyDown:e=>"Enter"===e.key&&e.preventDefault(),className:"flex-1 h-8"}),(0,t.jsx)(v.Button,{size:"sm",onClick:m,disabled:!l.trim(),className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:n("label.add")})]}),(0,t.jsx)("div",{className:"mt-2 flex gap-1.5",children:B.map(e=>(0,t.jsx)("button",{onClick:()=>u(e),className:`h-5 w-5 rounded-full transition-all ${d===e?"ring-2 ring-offset-2 ring-offset-background ring-foreground/30 scale-110":""}`,style:{backgroundColor:e}},e))})]})]})]})})}var _=e.i(821957),W=e.i(738690),U=e.i(386343);let H=(0,h.default)("command",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);var K=e.i(242941),V=e.i(989548),q=e.i(387091),X=e.i(15299);e.s([],678787),e.i(678787),e.i(708878);var G=e.i(581263),J=e.i(462902);let Y=r.createContext(void 0);function Z(){let e=r.useContext(Y);if(void 0===e)throw Error((0,J.default)(13));return e}let Q={imageLoadingStatus:()=>null},ee=r.forwardRef(function(e,s){let{className:a,render:n,...o}=e,[i,l]=r.useState("idle"),c=r.useMemo(()=>({imageLoadingStatus:i,setImageLoadingStatus:l}),[i,l]),d=(0,G.useRenderElement)("span",e,{state:{imageLoadingStatus:i},ref:s,props:o,stateAttributesMapping:Q});return(0,t.jsx)(Y.Provider,{value:c,children:d})});var et=e.i(887642),er=e.i(804849),es=e.i(504068),ea=e.i(809058),en=e.i(193214),eo=e.i(954588);let ei={...Q,...ea.transitionStatusMapping},el=r.forwardRef(function(e,t){let{className:s,render:a,onLoadingStatusChange:n,referrerPolicy:o,crossOrigin:i,...l}=e,c=Z(),d=function(e,{referrerPolicy:t,crossOrigin:s}){let[a,n]=r.useState("idle");return(0,er.useIsoLayoutEffect)(()=>{if(!e)return n("error"),eo.NOOP;let r=!0,a=new window.Image,o=e=>()=>{r&&n(e)};return n("loading"),a.onload=o("loaded"),a.onerror=o("error"),t&&(a.referrerPolicy=t),a.crossOrigin=s??null,a.src=e,()=>{r=!1}},[e,s,t]),a}(e.src,{referrerPolicy:o,crossOrigin:i}),u="loaded"===d,{mounted:m,transitionStatus:x,setMounted:h}=(0,en.useTransitionStatus)(u),p=r.useRef(null),f=(0,et.useStableCallback)(e=>{n?.(e),c.setImageLoadingStatus(e)});(0,er.useIsoLayoutEffect)(()=>{"idle"!==d&&f(d)},[d,f]),(0,es.useOpenChangeComplete)({open:u,ref:p,onComplete(){u||h(!1)}});let g=(0,G.useRenderElement)("img",e,{state:{imageLoadingStatus:d,transitionStatus:x},ref:[t,p],props:l,stateAttributesMapping:ei,enabled:m});return m?g:null});var ec=e.i(161476);let ed=r.forwardRef(function(e,t){let{className:s,render:a,delay:n,...o}=e,{imageLoadingStatus:i}=Z(),[l,c]=r.useState(void 0===n),d=(0,ec.useTimeout)();return r.useEffect(()=>(void 0!==n&&d.start(n,()=>c(!0)),d.clear),[d,n]),(0,G.useRenderElement)("span",e,{state:{imageLoadingStatus:i},ref:t,props:o,stateAttributesMapping:Q,enabled:"loaded"!==i&&l})});e.s(["Fallback",0,ed,"Image",0,el,"Root",0,ee],129448);var eu=e.i(129448),eu=eu,em=e.i(975157);function ex({className:e,size:r="default",...s}){return(0,t.jsx)(eu.Root,{"data-slot":"avatar","data-size":r,className:(0,em.cn)("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",e),...s})}function eh({className:e,...r}){return(0,t.jsx)(eu.Fallback,{"data-slot":"avatar-fallback",className:(0,em.cn)("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",e),...r})}let ep=(0,h.default)("folder-kanban",[["path",{d:"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z",key:"1fr9dc"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M12 10v2",key:"hh53o1"}],["path",{d:"M16 10v6",key:"1d6xys"}]]);var ef=e.i(226145);let eg=(0,h.default)("sticky-note",[["path",{d:"M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z",key:"1dfntj"}],["path",{d:"M15 3v5a1 1 0 0 0 1 1h5",key:"6s6qgf"}]]),ej=(0,h.default)("package-2",[["path",{d:"M12 3v6",key:"1holv5"}],["path",{d:"M16.76 3a2 2 0 0 1 1.8 1.1l2.23 4.479a2 2 0 0 1 .21.891V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9.472a2 2 0 0 1 .211-.894L5.45 4.1A2 2 0 0 1 7.24 3z",key:"187q7i"}],["path",{d:"M3.054 9.013h17.893",key:"grwhos"}]]);var eb=e.i(657153);let ev=(0,N.createServerReference)("608c7a371d3ffe78157bc730852da03d74ac9d1a91",N.callServer,void 0,N.findSourceMapURL,"globalSearch");var ew=e.i(156744);let eN=[{id:"all",key:"search.all",icon:W.Search},{id:"task",key:"search.task",icon:m.FileText},{id:"project",key:"search.project",icon:ep},{id:"repository",key:"search.repository",icon:ef.GitBranch},{id:"note",key:"search.note",icon:eg},{id:"asset",key:"search.asset",icon:ej}],ey=["task","project","repository","note","asset"],ek={task:"search.task",project:"search.project",repository:"search.repository",note:"search.note",asset:"search.asset"};function eC({result:e,onSelect:r}){let s=eN.find(t=>t.id===e.type)?.icon??m.FileText;return(0,t.jsxs)("button",{onClick:()=>r(e),className:"flex w-full items-center gap-3 border-b border-border/30 px-4 py-3 text-left transition-colors hover:bg-accent last:border-b-0",children:[(0,t.jsx)("div",{className:"rounded-md bg-muted p-1.5",children:(0,t.jsx)(s,{className:"h-3.5 w-3.5 text-muted-foreground"})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("div",{className:"text-sm font-medium text-foreground truncate",children:e.title}),(0,t.jsx)("div",{className:"text-xs text-muted-foreground truncate",children:e.subtitle}),e.snippet&&(0,t.jsx)("div",{className:"text-xs text-muted-foreground/70 truncate mt-0.5",children:e.snippet})]})]})}function eS({open:e,onOpenChange:a}){let n,{t:o}=(0,M.useI18n)(),i=(0,s.useRouter)(),[l,c]=(0,r.useState)(""),[d,u]=(0,r.useState)("all"),[m,x]=(0,r.useState)([]),[h,p]=(0,r.useState)(!1),[f,b]=(0,r.useState)(250),w=(0,r.useRef)(null),N=(0,r.useRef)(null);(0,r.useEffect)(()=>{e&&((0,ew.getConfigValue)("search.debounceMs",250).then(b),setTimeout(()=>w.current?.focus(),100),c(""),x([]))},[e]),(0,r.useEffect)(()=>{if(N.current&&clearTimeout(N.current),!l.trim()){x([]),p(!1);return}p(!0);let e=!1;return N.current=setTimeout(async()=>{let t=await ev(l,d);e||(x(t),p(!1))},f),()=>{N.current&&clearTimeout(N.current),e=!0}},[l,d,f]);let y=(0,r.useCallback)(e=>{i.push(e.navigateTo),a(!1)},[i,a]);return(0,t.jsx)(j.Dialog,{open:e,onOpenChange:a,children:(0,t.jsxs)(j.DialogContent,{className:"sm:max-w-lg p-0 gap-0 overflow-hidden !top-[10vh] !-translate-y-0",showCloseButton:!1,children:[(0,t.jsxs)("div",{className:"flex items-center border-b border-border px-4",children:[(0,t.jsx)(W.Search,{className:"h-4 w-4 text-muted-foreground"}),(0,t.jsx)("input",{ref:w,value:l,onChange:e=>c(e.target.value),placeholder:o("search.placeholder"),className:"flex-1 bg-transparent px-3 py-3.5 text-sm text-foreground placeholder-muted-foreground outline-none"}),l&&(0,t.jsx)(v.Button,{variant:"ghost",size:"icon",onClick:()=>{c(""),x([])},className:"text-muted-foreground",children:(0,t.jsx)(eb.X,{className:"h-3.5 w-3.5"})})]}),(0,t.jsx)("div",{className:"flex items-center gap-1 border-b border-border px-4 py-2",children:eN.map(e=>{let r=e.icon;return(0,t.jsxs)("button",{onClick:()=>u(e.id),className:`flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-medium transition-all ${d===e.id?"bg-primary/10 text-primary ring-1 ring-primary/20":"text-muted-foreground hover:bg-accent hover:text-foreground"}`,children:[(0,t.jsx)(r,{className:"h-3 w-3"}),o(e.key)]},e.id)})}),(0,t.jsxs)(g.ScrollArea,{className:"max-h-80",children:[!l.trim()&&(0,t.jsx)("div",{className:"flex items-center justify-center py-12 text-sm text-muted-foreground",children:o("search.typeToSearch")}),l.trim()&&0===m.length&&!h&&(0,t.jsx)("div",{className:"flex items-center justify-center py-12 text-sm text-muted-foreground",children:o("search.noResults")}),"all"===d&&m.length>0&&(n=m.reduce((e,t)=>((e[t.type]??=[]).push(t),e),{}),ey.filter(e=>n[e]?.length).map(e=>(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"px-4 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground bg-muted/50",children:o(ek[e])}),n[e].map(e=>(0,t.jsx)(eC,{result:e,onSelect:y},`${e.type}-${e.id}`))]},e))),"all"!==d&&m.map(e=>(0,t.jsx)(eC,{result:e,onSelect:y},`${e.type}-${e.id}`))]})]})})}var eT=e.i(338187),eD=e.i(400355),eP=e.i(597746),eM=e.i(938499),eR=e.i(233274),e$=e.i(905455),eL=e.i(624687);function eA(e){return e.replace(/\.git\/?$/,"")}e.i(465536),e.i(930787);let eE=(0,N.createServerReference)("40374a985920b5eed78a4c831c97af2a41dd3d81fa",N.callServer,void 0,N.findSourceMapURL,"resolveGitLocalPath");var eO=e.i(286296),ez=e.i(224277);function eI({open:e,onOpenChange:s,onCreateProject:a}){let{t:n,locale:o}=(0,M.useI18n)(),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(""),[h,p]=(0,r.useState)(""),[f,g]=(0,r.useState)(""),[N,y]=(0,r.useState)(!1),[k,C]=(0,r.useState)("FRONTEND"),[S,T]=(0,r.useState)("idle"),[D,P]=(0,r.useState)(""),[$,L]=(0,r.useState)(!1),[A,E]=(0,r.useState)(!1),O=()=>{l(""),d(""),m(""),p(""),g(""),y(!1),C("FRONTEND"),T("idle"),P(""),L(!1)},z=async()=>{if(f.trim()&&!$&&"success"===S){L(!0);try{let e=await (0,eO.analyzeProjectDirectory)(f.trim(),o);m(e)}catch{R.toast.error(n("project.analyzeError"))}finally{L(!1)}}},I=async e=>{p(e),T("idle"),P("");let t=function(e){let t,r=e.match(/^git@([^:]+):(.+)$/);if(r)return{host:r[1],pathSegments:eA(r[2]).split("/").filter(Boolean)};try{t=new URL(e)}catch{return null}return{host:t.hostname,pathSegments:eA(decodeURIComponent(t.pathname)).split("/").filter(Boolean)}}(e);t&&t.pathSegments.length>0&&l(t.pathSegments[t.pathSegments.length-1]),N||g(await eE(e))},B=async()=>{if(h.trim()&&f.trim()){T("cloning"),P("");try{let e=function(e){let t=e.trim();if(!t)return"";if(t.startsWith("git@")||t.startsWith("ssh://")||t.endsWith(".git"))return t;try{let e=new URL(t),r=e.hostname,s=decodeURIComponent(e.pathname).split("/").filter(Boolean);if("code.iflytek.com"===r){let e=[...s];"osc"===e[0]&&"_source"===e[1]&&(e=e.slice(2));let a=e.indexOf("-");if(a>0&&(e=e.slice(0,a)),0===e.length)return t;return`https://${r}/${e.join("/")}.git`}return`${e.origin}${e.pathname.replace(/\/$/,"")}.git`}catch{return t}}(h.trim()),t=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clone",url:e,path:f.trim()})}),r=await t.json();if(!t.ok){T("error"),P(r.error||"Clone failed");return}T("success")}catch{T("error"),P("Network error")}}},F=async()=>{i.trim()&&(await a?.({name:i.trim(),alias:c.trim()||void 0,description:u.trim()||void 0,gitUrl:h.trim()||void 0,localPath:f.trim()||void 0,projectType:k}),O(),s(!1))};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(j.Dialog,{open:e,onOpenChange:e=>{s(e),e||O()},disablePointerDismissal:!0,children:(0,t.jsxs)(j.DialogContent,{style:{maxWidth:"32rem"},children:[(0,t.jsx)(j.DialogHeader,{children:(0,t.jsx)(j.DialogTitle,{children:n("topbar.newProject")})}),(0,t.jsxs)("div",{className:"space-y-4 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.gitUrl")}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:n("project.gitUrlHint")}),(0,t.jsx)(w.Input,{placeholder:n("project.gitPlaceholder"),value:h,onChange:e=>I(e.target.value),className:"mt-1.5 font-mono text-xs"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.localPath")}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:n("project.localPathHint")}),(0,t.jsxs)("div",{className:"mt-1.5 flex gap-2",children:[(0,t.jsx)(w.Input,{placeholder:n("project.localPathPlaceholder"),value:f,onChange:e=>{g(e.target.value),y(!0)},className:"flex-1 min-w-0 font-mono text-xs"}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsxs)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{type:"button",variant:"outline",onClick:()=>E(!0),className:"shrink-0 gap-1.5 px-2.5 text-xs text-muted-foreground"}),children:[(0,t.jsx)(x.FolderOpen,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{children:n("folder.browse")})]}),(0,t.jsx)(b.TooltipContent,{children:n("folder.selectFolder")})]})]}),f.trim().startsWith("~")&&(0,t.jsxs)("p",{className:"mt-1 flex items-center gap-1 text-[11px] text-amber-400",children:[(0,t.jsx)(eM.AlertCircle,{className:"h-3 w-3"}),n("project.tildeWarning")]}),h.trim()&&f.trim()&&(0,t.jsxs)("div",{className:"mt-2 flex items-center gap-2",children:[(0,t.jsxs)(v.Button,{type:"button",disabled:"cloning"===S||"success"===S,onClick:B,className:"gap-1.5 text-xs bg-emerald-500/15 text-emerald-300 ring-1 ring-emerald-500/25 hover:bg-emerald-500/25 disabled:opacity-50",children:["cloning"===S?(0,t.jsx)(eD.Loader2,{className:"h-3 w-3 animate-spin"}):"success"===S?(0,t.jsx)(eP.Check,{className:"h-3 w-3"}):(0,t.jsx)(ef.GitBranch,{className:"h-3 w-3"}),"cloning"===S?n("git.cloning"):"success"===S?n("git.cloned"):n("git.clone")]}),"error"===S&&(0,t.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-rose-400",children:[(0,t.jsx)(eM.AlertCircle,{className:"h-3 w-3"}),D]}),"success"===S&&(0,t.jsx)("span",{className:"text-[11px] text-emerald-400",children:n("git.cloneSuccess")})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.name")}),(0,t.jsx)(w.Input,{placeholder:n("project.namePlaceholder"),value:i,onChange:e=>l(e.target.value),className:"mt-1.5"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.type.label")}),(0,t.jsx)("div",{className:"mt-1.5",children:(0,t.jsx)(e$.SegmentedControl,{options:[{value:"FRONTEND",label:n("project.type.frontend")},{value:"BACKEND",label:n("project.type.backend")}],value:k,onChange:C})})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.alias")}),(0,t.jsx)(w.Input,{placeholder:n("project.aliasPlaceholder"),value:c,onChange:e=>d(e.target.value),className:"mt-1.5"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mt-0.5",children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.description")}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsxs)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{type:"button",variant:"ghost",onClick:z,className:`h-6 gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground ${!f.trim()||$?"opacity-50":""}`}),children:[$?(0,t.jsx)(eD.Loader2,{className:"h-3 w-3 animate-spin"}):(0,t.jsx)(eR.Sparkles,{className:"h-3 w-3"}),$?n("project.analyzing"):n("project.genDesc")]}),(0,t.jsx)(b.TooltipContent,{children:f.trim()?"success"!==S?n("project.genDescNotCloned"):n("project.genDescReady"):n("project.genDescNoPath")})]})]}),(0,t.jsx)(eL.Textarea,{placeholder:n("project.descPlaceholder"),value:u,onChange:e=>m(e.target.value),rows:3,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 max-h-[200px] overflow-y-auto"})]})]}),(0,t.jsxs)(j.DialogFooter,{children:[(0,t.jsx)(v.Button,{variant:"outline",onClick:()=>{s(!1),O()},children:n("common.cancel")}),(0,t.jsx)(v.Button,{onClick:F,disabled:!i.trim()||$,className:"bg-primary/10 text-primary ring-1 ring-primary/25 hover:bg-primary/20",children:n("common.create")})]})]})}),(0,t.jsx)(ez.FolderBrowserDialog,{open:A,onOpenChange:E,onSelect:e=>{if(g(e),y(!0),!i.trim()){let t=e.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean).pop()??"";t&&l(t)}}})]})}var eB=e.i(756502),eB=eB,eF=e.i(699375);let e_=(0,N.createServerReference)("6047abaad9371ec8470e425ad9afdca7b8a872aba5",N.callServer,void 0,N.findSourceMapURL,"migrateProjectPath"),eW=(0,N.createServerReference)("4002cddd6747fba14295c29e2de19952f1a48432d7",N.callServer,void 0,N.findSourceMapURL,"checkMigrationSafety");function eU({open:e,onOpenChange:s,onCreateProject:a}){let{t:n,locale:o}=(0,M.useI18n)(),[i,l]=(0,r.useState)(""),[c,d]=(0,r.useState)(""),[u,m]=(0,r.useState)(""),[h,p]=(0,r.useState)(""),[f,g]=(0,r.useState)(""),[N,y]=(0,r.useState)(!1),[k,C]=(0,r.useState)("FRONTEND"),[S,T]=(0,r.useState)(!1),[D,P]=(0,r.useState)(!1),[$,L]=(0,r.useState)(""),[A,E]=(0,r.useState)(!1),[O,z]=(0,r.useState)(""),[I,B]=(0,r.useState)(""),[F,_]=(0,r.useState)(!1),[W,U]=(0,r.useState)(!1),H=()=>{l(""),d(""),m(""),p(""),g(""),C("FRONTEND"),T(!1),P(!1),L(""),E(!1),z(""),B(""),_(!1),U(!1)},K=async e=>{g(e),T(!1),P(!1),L(""),z(""),B(""),_(!1),l(e.split("/").filter(Boolean).pop()??"");try{let t=await fetch(`/api/git?path=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();if(e.isGit&&e.remoteUrl){p(e.remoteUrl),T(!0);let t=e.remoteUrl.match(/\/([^/]+?)(?:\.git)?$/);t&&l(t[1])}}}catch{}},V=(0,r.useCallback)(async e=>{if(P(e),z(""),B(""),_(!1),!e)return void L("");if(h)try{let e=await eE(h);e&&(L(e),e===f&&_(!0))}catch{}if(f)try{let e=await fetch(`/api/git?path=${encodeURIComponent(f)}&checkWorktrees=true`);e.ok&&(await e.json()).hasWorktrees&&B(n("project.worktreeWarning"))}catch{}},[h,f]),q=async()=>{if(f&&!W){U(!0);try{let e=await (0,eO.analyzeProjectDirectory)(f.trim(),o);m(e)}catch{R.toast.error(n("project.analyzeError"))}finally{U(!1)}}},X=async()=>{if(!i.trim())return;let e={name:i.trim(),alias:c.trim()||void 0,description:u.trim()||void 0,gitUrl:h.trim()||void 0,localPath:f.trim()||void 0,projectType:k},t=await a?.(e);if(D&&$&&$!==f&&t&&"id"in t){E(!0),z("");try{let e=await eW(t.id);if(!e.safe)return void z(e.reason);let r=await e_(t.id,$);if(!r.success)return void z(r.error??n("project.migrateError"));R.toast.success(n("project.migrateSuccess"))}catch(t){let e=t instanceof Error?t.message:String(t);z(`${n("project.migrateError")}:${e}`);return}finally{E(!1)}}H(),s(!1)},G=!i.trim()||!f.trim()||A||W||D&&!!I;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(j.Dialog,{open:e,onOpenChange:e=>{s(e),e||H()},disablePointerDismissal:!0,children:(0,t.jsxs)(j.DialogContent,{style:{maxWidth:"32rem"},children:[(0,t.jsx)(j.DialogHeader,{children:(0,t.jsx)(j.DialogTitle,{children:n("topbar.importProject")})}),(0,t.jsxs)("div",{className:"space-y-4 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.localPath")}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:n("project.importHint")}),(0,t.jsxs)("div",{className:"mt-1.5 flex gap-2",children:[(0,t.jsx)(w.Input,{value:f,readOnly:!0,placeholder:n("project.localPathPlaceholder"),className:"flex-1 font-mono text-xs bg-muted/30"}),(0,t.jsxs)(v.Button,{type:"button",variant:"outline",onClick:()=>y(!0),className:"shrink-0 gap-1.5",children:[(0,t.jsx)(x.FolderOpen,{className:"h-3.5 w-3.5"}),n("folder.browse")]})]}),S&&(0,t.jsx)("p",{className:"mt-1.5 text-[11px] text-emerald-400",children:n("project.autoDetected")})]}),h&&(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.gitUrl")}),(0,t.jsx)(w.Input,{value:h,onChange:e=>p(e.target.value),className:"mt-1.5 font-mono text-xs"})]}),S&&f&&(0,t.jsxs)("div",{className:"rounded-md border border-border p-3 space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-xs font-medium",children:n("project.migrate")}),(0,t.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:n("project.migrateHint")})]}),(0,t.jsx)(eF.Switch,{checked:D,onCheckedChange:e=>V(e)})]}),D&&(0,t.jsxs)("div",{className:"space-y-2 pt-1",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-medium text-muted-foreground",children:n("project.targetPath")}),(0,t.jsx)(w.Input,{value:$,onChange:e=>{L(e.target.value),_(e.target.value===f)},placeholder:"/path/to/canonical/location",className:"mt-1 font-mono text-xs"})]}),F&&(0,t.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-sky-400",children:[(0,t.jsx)(eB.default,{className:"h-3 w-3"}),n("project.samePathInfo")]}),I&&(0,t.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-amber-400",children:[(0,t.jsx)(eM.AlertCircle,{className:"h-3 w-3"}),I]}),O&&(0,t.jsxs)("p",{className:"flex items-center gap-1 text-[11px] text-rose-400",children:[(0,t.jsx)(eM.AlertCircle,{className:"h-3 w-3"}),O]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.name")}),(0,t.jsx)(w.Input,{placeholder:n("project.namePlaceholder"),value:i,onChange:e=>l(e.target.value),className:"mt-1.5"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.type.label")}),(0,t.jsx)("div",{className:"mt-1.5",children:(0,t.jsx)(e$.SegmentedControl,{options:[{value:"FRONTEND",label:n("project.type.frontend")},{value:"BACKEND",label:n("project.type.backend")}],value:k,onChange:C})})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.alias")}),(0,t.jsx)(w.Input,{placeholder:n("project.aliasPlaceholder"),value:c,onChange:e=>d(e.target.value),className:"mt-1.5"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mt-0.5",children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:n("project.description")}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsxs)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{type:"button",variant:"ghost",onClick:q,className:`h-6 gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground ${!f||W?"opacity-50":""}`}),children:[W?(0,t.jsx)(eD.Loader2,{className:"h-3 w-3 animate-spin"}):(0,t.jsx)(eR.Sparkles,{className:"h-3 w-3"}),W?n("project.analyzing"):n("project.genDesc")]}),(0,t.jsx)(b.TooltipContent,{children:f?n("project.genDescReady"):n("project.genDescNoPath")})]})]}),(0,t.jsx)(eL.Textarea,{placeholder:n("project.descPlaceholder"),value:u,onChange:e=>m(e.target.value),rows:3,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 max-h-[200px] overflow-y-auto"})]})]}),(0,t.jsxs)(j.DialogFooter,{children:[(0,t.jsx)(v.Button,{variant:"outline",onClick:()=>{s(!1),H()},children:n("common.cancel")}),(0,t.jsx)(v.Button,{onClick:X,disabled:G,className:"bg-primary/10 text-primary ring-1 ring-primary/25 hover:bg-primary/20",children:A?n("project.migrating"):n("common.create")})]})]})}),(0,t.jsx)(ez.FolderBrowserDialog,{open:N,onOpenChange:y,onSelect:e=>K(e)})]})}function eH({className:e}){return(0,t.jsx)("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",className:e,children:(0,t.jsx)("path",{d:"M12 .5C5.65.5.5 5.65.5 12.02c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.56v-2c-3.2.7-3.87-1.36-3.87-1.36-.52-1.34-1.27-1.7-1.27-1.7-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.76 2.68 1.25 3.34.96.1-.74.4-1.25.72-1.54-2.56-.29-5.25-1.28-5.25-5.69 0-1.26.45-2.28 1.18-3.09-.12-.29-.51-1.46.11-3.04 0 0 .97-.31 3.18 1.18a11.1 11.1 0 0 1 5.79 0c2.2-1.49 3.18-1.18 3.18-1.18.62 1.58.23 2.75.11 3.04.74.81 1.18 1.83 1.18 3.09 0 4.42-2.69 5.4-5.25 5.69.41.36.78 1.05.78 2.12v3.14c0 .31.21.68.79.56A11.52 11.52 0 0 0 23.5 12.02C23.5 5.65 18.35.5 12 .5Z"})})}function eK({onCreateProject:e,username:a}){let{t:n,locale:i,setLocale:l}=(0,M.useI18n)(),{isOpen:c,toggleAssistant:d}=(0,eT.useAssistant)(),{resolvedTheme:u,toggleTheme:m,triggerRef:h}=function(){let{resolvedTheme:e,setTheme:t}=(0,_.useTheme)(),s=(0,r.useRef)(null),a=(0,r.useCallback)(r=>{let s="dark"===e?"light":"dark";if("u">typeof document&&"startViewTransition"in document&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches){let e=r?.clientX??window.innerWidth/2,a=r?.clientY??0,n=Math.hypot(Math.max(e,window.innerWidth-e),Math.max(a,window.innerHeight-a));document.startViewTransition(()=>{t(s)}).ready.then(()=>{document.documentElement.animate({clipPath:[`circle(0px at ${e}px ${a}px)`,`circle(${n}px at ${e}px ${a}px)`]},{duration:400,easing:"ease-in-out",pseudoElement:"::view-transition-new(root)"})})}else t(s)},[e,t]);return{resolvedTheme:e,toggleTheme:a,triggerRef:s}}(),p=(0,s.useRouter)(),[g,j]=(0,r.useState)(!1),[w,N]=(0,r.useState)(!1),[y,k]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),j(!0))};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("header",{className:"flex h-12 items-center justify-between border-b border-border bg-background/80 px-5 backdrop-blur-sm",children:[(0,t.jsx)("div",{className:"w-40"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(v.Button,{variant:"outline",onClick:()=>j(!0),className:"h-8 w-[400px] justify-start gap-2 bg-muted/50 text-muted-foreground hover:bg-muted",children:[(0,t.jsx)(W.Search,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{className:"flex-1 text-left",suppressHydrationWarning:!0,children:n("topbar.searchPlaceholder")}),(0,t.jsxs)("kbd",{className:"mr-1 flex items-center gap-0.5 rounded border border-border bg-background px-1.5 py-0.5 text-[10px] font-mono",children:[(0,t.jsx)(H,{className:"h-2.5 w-2.5"}),"K"]})]}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{delay:500,render:(0,t.jsx)("button",{"data-tour":"open-assistant",onClick:d,"aria-label":n("assistant.iconLabel"),className:["cursor-pointer rounded-lg p-2 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",c?"bg-accent text-foreground":""].join(" ")}),children:(0,t.jsx)(V.Bot,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{children:n("assistant.iconLabel")})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsxs)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{variant:"ghost",onClick:()=>l("zh"===i?"en":"zh"),className:"text-muted-foreground"}),children:[(0,t.jsx)(K.Globe,{className:"h-3.5 w-3.5"}),(0,t.jsx)("span",{className:"text-[11px] font-semibold",children:"zh"===i?"EN":"中"})]}),(0,t.jsx)(b.TooltipContent,{children:n("settings.language")})]}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{ref:h,variant:"ghost",size:"icon",onClick:m,className:"text-muted-foreground"}),children:"dark"===u?(0,t.jsx)(q.Sun,{className:"h-4 w-4"}):(0,t.jsx)(X.Moon,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{children:n("settings.theme")})]}),(0,t.jsxs)(b.Tooltip,{children:[(0,t.jsx)(b.TooltipTrigger,{render:(0,t.jsx)(v.Button,{variant:"ghost",size:"icon",onClick:()=>window.open("https://github.com/jp-liu/tower","_blank","noopener,noreferrer"),className:"text-muted-foreground","aria-label":n("topbar.github")}),children:(0,t.jsx)(eH,{className:"h-4 w-4"})}),(0,t.jsx)(b.TooltipContent,{children:n("topbar.github")})]}),(0,t.jsx)("div",{className:"h-4 w-px bg-border"}),(0,t.jsxs)(v.Button,{variant:"outline",className:"gap-1.5 ring-1 ring-border hover:bg-accent",onClick:()=>k(!0),children:[(0,t.jsx)(x.FolderOpen,{className:"h-3.5 w-3.5"}),n("topbar.importProject")]}),(0,t.jsxs)(v.Button,{"data-tour":"create-project",className:"gap-1.5 bg-primary/10 text-primary ring-1 ring-primary/25 hover:bg-primary/20",onClick:()=>N(!0),children:[(0,t.jsx)(o.Plus,{className:"h-3.5 w-3.5"}),n("topbar.newProject")]}),(0,t.jsxs)(f.DropdownMenu,{children:[(0,t.jsx)(f.DropdownMenuTrigger,{render:(0,t.jsxs)("button",{className:"ml-0.5 flex cursor-pointer items-center gap-1.5 rounded-lg px-2.5 py-1 transition-colors hover:bg-accent",children:[a&&(0,t.jsx)("span",{className:"max-w-[80px] truncate text-xs text-muted-foreground",children:a}),(0,t.jsx)(ex,{className:"h-7 w-7 ring-1 ring-border",children:(0,t.jsx)(eh,{className:"bg-emerald-500/20 text-emerald-400 text-[10px] font-semibold",children:a?a.trim().split(/\s+/).filter(e=>e.length>0).slice(0,2).map(e=>e[0].toUpperCase()).join(""):"U"})})]})}),(0,t.jsx)(f.DropdownMenuContent,{align:"end",sideOffset:8,className:"w-40",children:(0,t.jsxs)(f.DropdownMenuItem,{onClick:()=>p.push("/settings"),children:[(0,t.jsx)(U.Settings,{className:"mr-2 h-3.5 w-3.5"}),n("settings.title")]})})]})]})]}),(0,t.jsx)(eS,{open:g,onOpenChange:j}),(0,t.jsx)(eI,{open:w,onOpenChange:N,onCreateProject:e}),(0,t.jsx)(eU,{open:y,onOpenChange:k,onCreateProject:e})]})}var eV=e.i(83434),eq=e.i(966001),eX=e.i(431549),eG=e.i(19578),eJ=e.i(232280);let eY=(0,eG.default)(()=>e.A(427768).then(e=>({default:e.AssistantChat})),{loadableGenerated:{modules:[103363]},ssr:!1});function eZ({mode:e}){let{isOpen:r,closeAssistant:s,sessions:a,activeSessionId:n,createNewSession:i,switchSession:c,removeSession:d}=(0,eT.useAssistant)(),{t:u}=(0,M.useI18n)(),m=a.find(e=>e.id===n),x=m?.title??u("assistant.newSession");return(0,t.jsxs)("div",{className:"sidebar"===e?"min-w-[320px] max-w-[480px] w-[30vw] shrink-0 border-r border-border flex flex-col bg-sidebar overflow-hidden":"flex flex-col h-full overflow-hidden",children:[(0,t.jsxs)("div",{className:"header-sm flex items-center px-4 gap-2 bg-sidebar",children:[(0,t.jsx)(V.Bot,{className:"h-4 w-4 text-muted-foreground shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-semibold text-foreground shrink-0",children:u("assistant.title")}),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"flex-1"}),(0,t.jsxs)(f.DropdownMenu,{children:[(0,t.jsxs)(f.DropdownMenuTrigger,{className:"flex items-center gap-1 h-8 px-2 rounded-md text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground max-w-[120px] truncate","aria-label":u("assistant.sessionList"),children:[(0,t.jsx)("span",{className:"truncate",children:x}),(0,t.jsx)(eJ.ChevronDown,{className:"h-3 w-3 shrink-0"})]}),(0,t.jsxs)(f.DropdownMenuContent,{side:"bottom",align:"end",sideOffset:4,children:[0===a.length?(0,t.jsx)("div",{className:"px-2 py-4 text-xs text-muted-foreground text-center",children:u("assistant.noSessions")}):a.map(e=>(0,t.jsxs)(f.DropdownMenuItem,{className:"flex items-center justify-between gap-2 pr-1",onClick:()=>c(e.id),children:[(0,t.jsxs)("div",{className:"flex flex-col gap-0.5 min-w-0",children:[(0,t.jsx)("span",{className:"text-xs truncate max-w-[140px]",children:e.title}),(0,t.jsx)("span",{className:"text-[10px] text-muted-foreground",children:function(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`${t}s ago`;let r=Math.floor(t/60);if(r<60)return`${r}m ago`;let s=Math.floor(r/60);if(s<24)return`${s}h ago`;let a=Math.floor(s/24);return`${a}d ago`}(e.updatedAt)})]}),(0,t.jsx)(v.Button,{variant:"ghost",className:"h-6 w-6 p-0 shrink-0 opacity-50 hover:opacity-100 hover:text-destructive",onClick:t=>{t.stopPropagation(),d(e.id)},"aria-label":u("assistant.deleteSession"),children:(0,t.jsx)(l.Trash2,{className:"h-3 w-3"})})]},e.id)),a.length>0&&(0,t.jsx)(f.DropdownMenuSeparator,{}),(0,t.jsxs)(f.DropdownMenuItem,{onClick:i,children:[(0,t.jsx)(o.Plus,{className:"h-3 w-3 mr-1"}),(0,t.jsx)("span",{className:"text-xs",children:u("assistant.newSession")})]})]})]}),(0,t.jsx)(v.Button,{variant:"ghost",size:"icon",className:"text-muted-foreground",onClick:i,"aria-label":u("assistant.newSession"),children:(0,t.jsx)(o.Plus,{className:"h-4 w-4"})})]}),(0,t.jsx)(v.Button,{variant:"ghost",size:"icon",className:"text-muted-foreground",onClick:s,"aria-label":u("assistant.closeLabel"),children:(0,t.jsx)(eb.X,{className:"h-4 w-4"})})]}),(0,t.jsx)("div",{className:"flex-1 overflow-hidden",children:r?(0,t.jsx)(eY,{}):null})]})}var eQ=e.i(125177);function e0({onDismiss:e}){let{t:s}=(0,M.useI18n)(),[a,n]=(0,r.useState)(!1);(0,r.useEffect)(()=>{"Notification"in window&&"default"===window.Notification.permission&&n(!0)},[]);let o=async()=>{"default"!==await window.Notification.requestPermission()&&(n(!1),e?.())};return a?(0,t.jsxs)("div",{className:"fixed top-3 left-1/2 -translate-x-1/2 z-[9999] w-auto max-w-lg bg-card border rounded-lg shadow-lg px-4 py-2.5 flex items-center gap-3 animate-in fade-in slide-in-from-top-4 duration-500",children:[(0,t.jsx)(eQ.Bell,{className:"h-4 w-4 shrink-0 text-primary"}),(0,t.jsx)("span",{className:"flex-1 text-sm",children:s("notification.permissionPrompt")}),(0,t.jsx)(v.Button,{size:"default",onClick:o,children:s("notification.allow")}),(0,t.jsx)(v.Button,{variant:"ghost",size:"default",onClick:()=>{n(!1),e?.()},children:s("notification.dismiss")})]}):null}var e1=e.i(579731),e2=e.i(631650);let e5=[{target:"create-workspace",titleKey:"tour.step1.title",descKey:"tour.step1.desc",placement:"right"},{target:"create-project",titleKey:"tour.step2.title",descKey:"tour.step2.desc",placement:"bottom",waitForTarget:!0},{target:"open-assistant",titleKey:"tour.step3.title",descKey:"tour.step3.desc",placement:"bottom"}];function e4({onComplete:e}){let{t:s}=(0,M.useI18n)(),[a,n]=(0,r.useState)(0),[o,i]=(0,r.useState)(null),[l,c]=(0,r.useState)(!1),d=(0,r.useRef)(null),u=e5[a],m=(0,r.useCallback)(async()=>{await (0,e2.setConfigValue)("onboarding.tourCompleted",!0),e()},[e]),x=(0,r.useCallback)(()=>u?document.querySelector(`[data-tour="${u.target}"]`):null,[u]),h=(0,r.useCallback)(()=>{let e=x();e?(i(e.getBoundingClientRect()),c(!0)):c(!1)},[x]);(0,r.useEffect)(()=>{h();let e=null;!l&&u?.waitForTarget&&(d.current=new MutationObserver(()=>{let t=x();t&&(i(t.getBoundingClientRect()),c(!0),d.current?.disconnect(),e&&clearTimeout(e))}),d.current.observe(document.body,{childList:!0,subtree:!0}),e=setTimeout(()=>{!x()&&(n(e=>{let t=e+1;return t<e5.length?t:e}),a>=e5.length-1&&m())},5e3));let t=()=>h();return window.addEventListener("resize",t),window.addEventListener("scroll",t,!0),()=>{d.current?.disconnect(),e&&clearTimeout(e),window.removeEventListener("resize",t),window.removeEventListener("scroll",t,!0)}},[a,u,x,h,l,m]),(0,r.useEffect)(()=>{let e=setInterval(h,1e3);return()=>clearInterval(e)},[h]);let p=(0,r.useCallback)(()=>{a<e5.length-1?(n(e=>e+1),c(!1)):m()},[a]);return u?(0,t.jsx)(t.Fragment,{children:l&&o&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"fixed inset-0 z-[10000]",style:{background:`radial-gradient(
2
+ ellipse at ${o.left+o.width/2}px ${o.top+o.height/2}px,
3
+ transparent ${Math.max(o.width,o.height)}px,
4
+ rgba(0,0,0,0.6) ${Math.max(o.width,o.height)+30}px
5
+ )`},onClick:p}),(0,t.jsx)("div",{className:"pointer-events-none fixed z-[10001] rounded-lg ring-2 ring-amber-400 ring-offset-2 ring-offset-background",style:{left:o.left-4,top:o.top-4,width:o.width+8,height:o.height+8}}),(0,t.jsxs)("div",{className:"fixed z-[10002] w-72 rounded-xl border border-border bg-card p-4 shadow-2xl",style:(()=>{if(!o)return{display:"none"};let e={position:"fixed",zIndex:10001};switch(u.placement){case"right":e.left=o.right+12,e.top=o.top+o.height/2,e.transform="translateY(-50%)";break;case"bottom":e.left=o.left+o.width/2,e.top=o.bottom+12,e.transform="translateX(-50%)";break;case"left":e.right=window.innerWidth-o.left+12,e.top=o.top+o.height/2,e.transform="translateY(-50%)";break;case"top":e.left=o.left+o.width/2,e.bottom=window.innerHeight-o.top+12,e.transform="translateX(-50%)"}return e})(),children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-sm font-semibold text-foreground",children:s(u.titleKey)}),(0,t.jsx)("p",{className:"mt-1 text-xs text-muted-foreground leading-relaxed",children:s(u.descKey)})]}),(0,t.jsx)("button",{onClick:m,className:"shrink-0 rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground",children:(0,t.jsx)(eb.X,{className:"h-3.5 w-3.5"})})]}),(0,t.jsxs)("div",{className:"mt-3 flex items-center justify-between",children:[(0,t.jsx)("div",{className:"flex gap-1",children:e5.map((e,r)=>(0,t.jsx)("div",{className:`h-1.5 w-1.5 rounded-full ${r===a?"bg-amber-400":r<a?"bg-amber-400/40":"bg-muted"}`},r))}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(v.Button,{variant:"ghost",className:"h-7 px-2 text-xs text-muted-foreground",onClick:m,children:s("tour.skip")}),(0,t.jsx)(v.Button,{className:"h-7 px-3 text-xs bg-amber-500/15 text-amber-300 ring-1 ring-amber-500/25 hover:bg-amber-500/25",onClick:p,children:s(a<e5.length-1?"tour.next":"tour.done")})]})]})]})]})}):null}function e3({workspaces:e,isFirstRun:a,username:n,children:o,handleCreateProject:i}){let l=(0,s.usePathname)(),c=(0,s.useRouter)(),{isOpen:d,displayMode:u,closeAssistant:m}=(0,eT.useAssistant)();(0,r.useEffect)(()=>{a&&!l.startsWith("/onboarding")&&c.replace("/onboarding")},[a,l,c]);let[x,h]=(0,r.useState)(!1),[p,f]=(0,r.useState)(!1);(0,r.useEffect)(()=>{a||l.startsWith("/onboarding")||(0,ew.getConfigValue)("onboarding.tourCompleted",!1).then(e=>{e?f(!0):h(!0)})},[a,l]);let g=()=>{h(!1),f(!0)},[b,v]=(0,r.useState)(!0);(0,r.useEffect)(()=>{(0,ew.getConfigValue)("notification.enabled",!0).then(v)},[]);let w=l.startsWith("/onboarding");if(!function(e){let t=(0,s.useRouter)(),a=(0,r.useRef)(t),n=(0,r.useRef)(e),{t:o}=(0,M.useI18n)(),i=(0,r.useRef)(o);a.current=t,n.current=e,i.current=o,(0,r.useEffect)(()=>{if(!e)return;let t=null,r=null,s=!1;async function o(){if(s)return;let e=await (0,e1.getActualWsPort)();s||((t=new WebSocket(`ws://localhost:${e}/terminal?taskId=__notifications__`)).onmessage=e=>{if(n.current)try{let t=JSON.parse(e.data);if("type"in t&&"stop"===t.type)R.toast.success(t.taskTitle,{description:i.current("notification.taskCompleted"),duration:8e3});else if("Notification"in window&&"granted"===window.Notification.permission){let e=new window.Notification("Tower",{body:t.taskTitle,icon:"/web-app-manifest-192x192.png"});e.onclick=()=>{window.focus(),a.current.push(`/workspaces/${t.workspaceId}/tasks/${t.taskId}`),e.close()}}else R.toast.info(t.taskTitle,{description:"COMPLETED"===t.status?i.current("notification.taskCompleted"):i.current("notification.taskFailed")})}catch{}},t.onclose=()=>{s||(r=setTimeout(o,5e3))},t.onerror=()=>{t?.close()})}return o(),()=>{s=!0,r&&clearTimeout(r),t?.close()}},[e])}(b&&!w),w)return(0,t.jsx)(t.Fragment,{children:o});let N=/\/workspaces\/[^/]+\/tasks\/[^/]+/.test(l),y=/\/workspaces\/[^/]+\/(notes|assets|archive)/.test(l),k=d&&"sidebar"===u?(0,t.jsx)(eZ,{mode:"sidebar"}):null,C="dialog"===u?(0,t.jsx)(j.Dialog,{open:d,onOpenChange:e=>{e||m()},children:(0,t.jsx)(j.DialogContent,{showCloseButton:!1,style:{width:"90vw",minWidth:"360px",maxWidth:"600px",height:"70vh",minHeight:"480px",maxHeight:"800px",padding:0},children:(0,t.jsx)(eZ,{mode:"dialog"})})}):null;return N||y?(0,t.jsxs)(t.Fragment,{children:[p&&(0,t.jsx)(e0,{onDismiss:()=>f(!1)}),(0,t.jsx)("div",{className:"flex h-screen overflow-hidden",children:(0,t.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,t.jsx)(eK,{onCreateProject:i,username:n}),(0,t.jsxs)("div",{className:"flex flex-1 overflow-hidden",children:[k,(0,t.jsx)("main",{className:"flex-1 overflow-hidden bg-background",children:(0,t.jsx)(eq.ErrorBoundary,{children:o})})]})]})}),C,x&&(0,t.jsx)(e4,{onComplete:g})]}):(0,t.jsxs)(t.Fragment,{children:[p&&(0,t.jsx)(e0,{onDismiss:()=>f(!1)}),(0,t.jsxs)("div",{className:"flex h-screen overflow-hidden",children:[(0,t.jsx)(O,{workspaces:e}),(0,t.jsxs)("div",{className:"flex flex-1 flex-col overflow-hidden",children:[(0,t.jsx)(eK,{onCreateProject:i,username:n}),(0,t.jsxs)("div",{className:"flex flex-1 overflow-hidden",children:[k,(0,t.jsx)("main",{className:"flex-1 overflow-auto bg-background",children:(0,t.jsx)(eq.ErrorBoundary,{children:o})})]})]})]}),C,x&&(0,t.jsx)(e4,{onComplete:g})]})}e.s(["LayoutClient",0,function({workspaces:e,isFirstRun:r,username:a,children:n}){let o=(0,s.useRouter)(),i=(0,s.usePathname)(),l=i.split("/workspaces/")[1]?.split("/")[0],c=async t=>{let r=l||(e.length>0?e[0].id:null);if(!r){let e=await y({name:"Default Workspace"}),r=await (0,eX.createProject)({...t,workspaceId:e.id});return o.refresh(),o.push(`/workspaces/${e.id}`),{id:r.id}}let s=await (0,eX.createProject)({...t,workspaceId:r});return o.refresh(),o.push(`/workspaces/${r}`),{id:s.id}};return(0,t.jsx)(eT.AssistantProvider,{children:(0,t.jsx)(eV.TerminalPortalProvider,{children:(0,t.jsx)(e3,{workspaces:e,isFirstRun:r,username:a,handleCreateProject:c,children:n})})})}],914935)},782406,e=>{"use strict";var t=e.i(289721),r=e.i(821957);e.s(["ThemeProvider",0,function({children:e,...s}){return(0,t.jsx)(r.ThemeProvider,{...s,children:e})}])},713354,e=>{"use strict";var t=e.i(289721),r=e.i(821957),s=e.i(360112),a=e.i(59737),a=a,n=e.i(756502),n=n,o=e.i(567098),o=o;let i=(0,e.i(572989).default)("octagon-x",[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);var l=e.i(519587),l=l;e.s(["Toaster",0,({...e})=>{let{theme:c="system"}=(0,r.useTheme)();return(0,t.jsx)(s.Toaster,{theme:c,className:"toaster group",icons:{success:(0,t.jsx)(a.default,{className:"size-4"}),info:(0,t.jsx)(n.default,{className:"size-4"}),warning:(0,t.jsx)(o.default,{className:"size-4"}),error:(0,t.jsx)(i,{className:"size-4"}),loading:(0,t.jsx)(l.default,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},toastOptions:{classNames:{toast:"cn-toast"}},...e})}],713354)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,533499,e=>{"use strict";var t=e.i(289721),s=e.i(965652);let i={zh:{"sidebar.workspace":"工作空间","sidebar.newWorkspace":"新建工作空间","sidebar.collapse":"折叠侧边栏","sidebar.expand":"展开侧边栏","sidebar.rename":"重命名","sidebar.delete":"删除","sidebar.archive":"归档","sidebar.manageLabels":"管理标签","sidebar.deleteConfirm":"确认删除工作空间「{name}」?所有项目和任务将被删除。","sidebar.lastWorkspaceError":"至少需要保留一个工作空间","sidebar.reorderError":"工作空间排序保存失败","sidebar.settings":"配置","workspace.create":"新建工作空间","workspace.edit":"编辑工作空间","workspace.name":"名称","workspace.namePlaceholder":"输入工作空间名称","workspace.icon":"图标","common.cancel":"取消","common.create":"创建","common.save":"保存","common.delete":"删除","common.add":"添加","common.loading":"加载中...","common.edit":"编辑","common.search":"搜索","topbar.newProject":"新建项目","topbar.importProject":"导入项目","topbar.searchPlaceholder":"搜索任务、项目、仓库、笔记、资源...","topbar.github":"GitHub","project.name":"项目名称","project.alias":"项目别名","project.description":"项目描述","project.gitUrl":"Git 仓库地址","project.gitUrlHint":"可选,输入后自动推断本地路径","project.namePlaceholder":"输入项目名称","project.aliasPlaceholder":"可选,如:前端重构","project.descPlaceholder":"可选,项目简介","project.gitPlaceholder":"https://github.com/user/repo 或 git@github.com:user/repo.git","project.localPath":"本地路径","project.localPathPlaceholder":"/Users/you/projects/my-app","project.localPathHint":"项目在本地磁盘的文件夹路径,输入 Git 地址后自动填充","project.tildeWarning":"请输入绝对路径,不支持 ~ 别名","project.importHint":"选择本地已有项目文件夹","project.autoDetected":"已自动检测 Git 远程","project.edit":"编辑项目","git.history":"文件历史","git.noHistory":"无提交记录","git.blame":"文件标注","git.toggleBlame":"查看 Blame","git.noBlame":"无 Blame 数据","git.viewCommit":"查看此提交","git.clone":"克隆到本地","git.cloning":"正在克隆...","git.cloned":"已克隆","git.cloneSuccess":"仓库克隆成功","board.kanban":"任务看板","board.overview":"概览","board.running":"执行中","board.tip":"提示","board.newTask":"新建任务","board.allFilter":"全部","board.searchPlaceholder":"搜索任务...","board.inProgressFilter":"执行中","board.inReviewFilter":"待评审","board.allVersions":"全部版本","board.card.worktree":"Worktree · branch {branch}","board.card.version":"所属版本:{number} · {name}","board.backlogFilter":"未分配版本","board.contextMenu.changeStatus":"更改状态","board.contextMenu.launch":"启动任务","board.contextMenu.goToDetail":"查看详情","board.pin":"置顶","board.unpin":"取消置顶","board.viewAll":"查看全部","board.noTasks":"暂无任务","task.create":"新建任务","task.edit":"编辑任务","task.title":"任务标题","task.titlePlaceholder":"输入任务标题","task.description":"描述","task.descPlaceholder":"输入任务描述 (支持 Markdown)","task.priority":"优先级","task.labels":"标签","task.priorityLow":"低","task.priorityMedium":"中","task.priorityHigh":"高","task.priorityCritical":"紧急","task.baseBranch":"基础分支","task.branchLoading":"加载分支...","task.branchNone":"未找到分支","task.branchSearch":"搜索分支...","task.branchDirect":"不使用分支隔离(直接在主仓库工作)","task.worktreeLabel":"分支隔离","task.worktreeYes":"启用","task.worktreeNo":"不启用","task.autoStartLabel":"创建后自动启动","task.autoStartYes":"启用","task.autoStartNo":"不启用","task.subPath":"子路径","task.subPathPlaceholder":"例如: web、packages/api","task.subPathHint":"Mono-repo 子目录,任务将在此目录下执行","taskDetail.title":"任务对话","taskDetail.back":"返回任务列表","taskDetail.hasConversation":"已有会话","taskDetail.updatedAt":"更新于","taskDetail.directMode":"直接模式","taskDetail.send":"发送","taskDetail.sending":"处理中...","taskDetail.inputPlaceholder":"输入指令...","taskDetail.emptyState":"开始对话,让 AI 代理执行任务","taskDetail.emptyHint":"输入指令后按 Enter 发送","taskDetail.sendFailed":"发送失败,请重试","taskDetail.executionFailed":"执行失败","taskDetail.executionFailedRetry":"执行失败,请重试","taskDetail.panelDescription":"聚焦当前任务的执行对话","taskDetail.filesChanged":"个文件已更改","search.placeholder":"搜索任务、项目、仓库、笔记、资源...","search.task":"任务","search.project":"项目","search.repository":"仓库","search.all":"全部","search.note":"笔记","search.asset":"资源","search.noResults":"没有找到结果","search.typeToSearch":"输入关键词开始搜索","search.results":"搜索结果","sidebar.right.projectInfo":"项目信息","sidebar.right.repo":"仓库","sidebar.right.addRepo":"添加仓库","sidebar.right.noRepo":"暂无已关联仓库","sidebar.right.addRepoHint":"点击下方添加仓库","sidebar.right.browseRepo":"浏览磁盘上的仓库","sidebar.right.createRepo":"在磁盘上创建新仓库","sidebar.right.recent":"最近","sidebar.right.other":"其他","sidebar.right.browseWip":"浏览磁盘仓库功能开发中","sidebar.right.createWip":"创建仓库功能开发中","sidebar.right.linkWip":"关联仓库功能开发中","sidebar.right.normalType":"普通项目","sidebar.right.gitType":"Git 项目","sidebar.right.edit":"编辑项目","sidebar.right.name":"项目名称","sidebar.right.aliasLabel":"别名","sidebar.right.descLabel":"描述","sidebar.right.save":"保存","sidebar.right.cancel":"取消","sidebar.right.namePlaceholder":"输入项目名称","sidebar.right.aliasPlaceholder":"可选别名","sidebar.right.descPlaceholder":"项目描述","label.manage":"管理标签","label.name":"标签名称","label.color":"颜色","label.builtin":"内置","label.add":"添加标签","label.noLabels":"暂无标签","settings.title":"配置","settings.language":"语言","settings.languageDesc":"切换界面语言","settings.general":"通用","settings.generalDesc":"主题与语言偏好","settings.theme":"主题","settings.themeDesc":"选择界面主题","settings.themeLight":"浅色","settings.themeDark":"深色","settings.themeSystem":"跟随系统","settings.prompts":"提示词","settings.promptsDesc":"管理 AI 提示词模板","settings.prompts.title":"提示词管理","settings.prompts.newPrompt":"新建提示词","settings.prompts.editPrompt":"编辑提示词","settings.prompts.promptName":"名称","settings.prompts.promptNamePlaceholder":"输入提示词名称","settings.prompts.promptDescription":"描述","settings.prompts.promptDescriptionPlaceholder":"可选,简要描述用途","settings.prompts.promptContent":"内容","settings.prompts.promptContentPlaceholder":"输入提示词内容...","settings.prompts.deleteConfirmTitle":"确认删除","settings.prompts.deleteConfirmMessage":"删除后无法恢复。","settings.prompts.setDefault":"设为默认","settings.prompts.default":"默认","settings.prompts.empty":"暂无提示词","settings.prompts.emptyHint":"点击上方按钮创建第一个提示词","settings.prompts.save":"保存","settings.prompts.cancel":"取消","settings.prompts.delete":"删除","settings.aiTools.title":"AI 工具","settings.aiTools.cliVerification":"CLI 验证","settings.aiTools.cliVerificationDesc":"验证 AI 工具命令行是否已正确安装","settings.aiTools.testConnection":"测试连接","settings.aiTools.testing":"测试中...","settings.aiTools.testPassed":"检测通过","settings.aiTools.testFailed":"部分检测未通过","settings.config":"参数配置","settings.configDesc":"系统运行参数","settings.config.empty":"暂无可配置参数 — 后续版本将添加","settings.config.git.title":"Git 路径映射规则","settings.config.git.desc":"定义 Git URL 到本地路径的映射规则,创建项目时自动填充 localPath","settings.config.git.host":"主机","settings.config.git.hostPlaceholder":"github.com","settings.config.git.ownerMatch":"Owner 匹配","settings.config.git.ownerMatchPlaceholder":"* (匹配所有)","settings.config.git.localPathTemplate":"本地基础路径","settings.config.git.localPathTemplatePlaceholder":"/Users/you/project","settings.config.git.pickFolder":"选择文件夹","settings.config.git.pathTooltipTitle":"保留 Git 仓库的目录层级","settings.config.git.pathTooltipDetail":"开启:路径包含 owner / 子组,如 org/team/repo;关闭:只用仓库名","settings.config.git.priority":"优先级","settings.config.git.priorityHint":"数值越小优先级越高","settings.config.git.addRule":"添加规则","settings.config.git.noRules":"暂无映射规则 — 点击「添加规则」创建","settings.config.git.deleteConfirm":"确定删除此规则?","settings.config.git.deleteConfirmMessage":"此操作不可撤销。","settings.config.git.save":"保存","settings.config.git.cancel":"取消","settings.config.git.edit":"编辑","settings.config.git.delete":"删除","settings.config.git.actions":"操作","settings.config.git.templateHint":"支持 {owner} 和 {repo} 变量","settings.config.git.validationRequired":"主机和本地路径模板不能为空","settings.config.system.title":"系统参数","settings.config.system.desc":"上传限制与并发控制","settings.config.system.maxUpload":"最大上传文件大小","settings.config.system.maxUploadHint":"单个文件允许的最大上传大小","settings.config.system.maxConcurrent":"最大并发执行数","settings.config.system.maxConcurrentHint":"同时运行的 AI 任务上限","settings.config.system.maxReadable":"可读文件大小上限","settings.config.system.maxReadableHint":"代码编辑器可直接打开的文件最大大小(超过将提示强制打开)","settings.config.system.taskDefaultWorktree":"新建任务默认启用分支隔离(Worktree)","settings.config.system.taskDefaultWorktreeHint":"创建任务对话框与 MCP 创建任务时「分支隔离 / Worktree」的默认值","settings.config.system.taskDefaultAutoStart":"新建任务后默认自动启动","settings.config.system.taskDefaultAutoStartHint":"创建任务对话框与 MCP 创建任务时「创建后自动启动」的默认值","settings.config.task.title":"任务默认","settings.config.task.desc":"新建任务时的默认行为(看板与 MCP 通用)","settings.config.system.saved":"系统参数已保存","settings.config.gitParams.title":"Git 参数","settings.config.gitParams.desc":"Git 操作超时","settings.config.gitParams.timeout":"Git 操作超时","settings.config.gitParams.timeoutHint":"clone/status 等操作的超时时间","settings.config.gitParams.saved":"Git 参数已保存","settings.config.search.title":"搜索参数","settings.config.search.desc":"搜索结果数量、防抖延迟与摘要长度","settings.config.search.resultLimit":"搜索结果数量","settings.config.search.resultLimitHint":"每类搜索返回的最大结果数","settings.config.search.allModeCap":"全部模式单类上限","settings.config.search.allModeCapHint":"「全部」搜索时每个类别显示的最大结果数","settings.config.search.debounceMs":"搜索防抖延迟","settings.config.search.debounceMsHint":"输入停止后等待多久执行搜索","settings.config.search.snippetLength":"摘要长度","settings.config.search.snippetLengthHint":"搜索结果预览文本的最大字符数","settings.config.search.codeTimeout":"代码搜索超时","settings.config.search.codeTimeoutHint":"ripgrep 搜索的最长执行时间","settings.config.search.saved":"搜索参数已保存","workspace.selectHint":"选择一个工作空间","workspace.selectDesc":"从左侧选择一个工作空间开始","workspace.createError":"创建工作区失败,请重试","board.noProject":"该工作空间没有项目,请点击顶部「新建项目」创建","board.tipText":"复用现有拖拽、详情和任务创建链路","board.tipDesc":"先把工作台入口对齐原型,再逐步补 Settings、Skills、Plugins。","folder.selectFolder":"选择文件夹","folder.selectGitRepo":"选择 Git 仓库","folder.hint":"点击文件夹名称进行导航 · 使用操作按钮进行选择","folder.manualInput":"手动输入路径:","folder.goTo":"前往","folder.searchDir":"搜索当前目录:","folder.selectCurrent":"选择当前","folder.selectPath":"选择路径","folder.empty":"此目录下没有文件夹","folder.browse":"浏览","folder.newFolder":"新建文件夹","folder.newFolderPlaceholder":"文件夹名称","folder.newFolderError":"创建文件夹失败","git.section":"Git","git.currentBranch":"当前分支","git.switchBranch":"切换分支","git.localBranches":"本地分支","git.remoteBranches":"远程分支","git.modified":"已修改","git.staged":"已暂存","git.untracked":"未跟踪","git.notInitialized":"该项目尚未初始化 Git 仓库","git.initRepo":"初始化 Git 仓库","git.initSuccess":"Git 仓库初始化成功","git.initFailed":"初始化失败","git.switchSuccess":"已切换到分支","git.switchFailed":"切换分支失败","git.noLocalPath":"请先设置项目本地路径","git.loading":"加载中...","git.createBranch":"创建分支","git.branchName":"分支名称","git.branchNamePlaceholder":"feature/my-feature","git.baseBranch":"基于分支","git.branchDesc":"分支描述","git.branchDescPlaceholder":"可选,描述这个分支的用途","git.createSuccess":"分支创建成功","git.createFailed":"创建分支失败","git.fetchSuccess":"远程分支已更新","git.fetchFailed":"拉取远程分支失败","git.changes":"变更","git.stagedChanges":"已暂存","git.unstagedChanges":"未暂存","git.stageAll":"全部暂存","git.unstageAll":"全部取消","git.stageFile":"暂存此文件更改","git.unstageFile":"取消暂存此文件","git.commit":"提交","git.commitSuccess":"提交成功","git.commitMsgPlaceholder":"提交信息 (⌘+Enter 提交)","git.pull":"拉取","git.pullSuccess":"拉取成功","git.push":"推送","git.pushSuccess":"推送成功","git.commitLog":"提交历史","git.stash":"暂存区","git.stashMsgPlaceholder":"暂存描述(可选)","git.stashSaved":"已暂存变更","git.stashApply":"恢复","git.stashApplied":"已恢复暂存","git.stashDrop":"删除","git.stashDropped":"已删除暂存","git.noChanges":"工作区干净,没有变更","git.sync":"同步","git.pullFrom":"拉取自","git.pushTo":"推送到","git.fetchAll":"获取所有远程","git.stashSave":"暂存变更","git.stashPopLatest":"恢复最近暂存","git.discardAll":"放弃所有更改","git.discardSuccess":"已放弃所有更改","git.tabLabel":"Git","git.openStudio":"打开工作台","git.openStudioFailed":"打开工作台失败","git.openInFileManager":"在文件系统中打开","git.openInFileManagerFailed":"在文件系统中打开失败","git.openInEditor":"在编辑器中打开","git.openInEditorFailed":"在编辑器中打开失败(未检测到编辑器或命令行未安装)","git.openInTerminal":"在终端中打开","git.openInTerminalFailed":"在终端中打开失败","archive.title":"归档任务","archive.backToBoard":"返回看板","archive.noTasks":"暂无归档任务","archive.noTasksDesc":"已完成或已取消超过今日的任务将出现在此处","archive.completedAt":"完成于","archive.cancelledAt":"取消于","archive.createdAt":"创建于","archive.lastExecution":"最近执行","archive.status.done":"已完成","archive.status.cancelled":"已取消","archive.tasksCount":"条归档","sidebar.notes":"笔记","sidebar.assets":"资源","notes.title":"笔记","notes.newNote":"新建笔记","notes.allCategories":"全部分类","notes.category.account":"账号","notes.category.env":"环境","notes.category.requirements":"需求","notes.category.memo":"备忘","notes.edit":"编辑","notes.delete":"删除","notes.save":"保存","notes.cancel":"取消","notes.titlePlaceholder":"笔记标题","notes.contentPlaceholder":"笔记内容(支持 Markdown)","notes.categoryLabel":"分类","notes.empty":"暂无笔记","notes.emptyHint":"点击「新建笔记」创建第一条笔记","notes.deleteConfirm":"确认删除笔记「{title}」?","notes.noProject":"当前工作空间没有项目","notes.noProjectHint":"请先创建一个项目","notes.backToBoard":"返回看板","notes.loading":"加载中...","notes.workspace":"工作区","notes.project":"项目","assets.title":"资源","assets.upload":"上传文件","assets.empty":"暂无资源","assets.emptyHint":"上传文件作为项目资源","assets.filename":"文件名","assets.size":"大小","assets.uploadedAt":"上传时间","assets.preview":"预览","assets.download":"下载","assets.delete":"删除","assets.deleteConfirm":"确认删除资源「{filename}」?","assets.noProject":"当前工作空间没有项目","assets.noProjectHint":"请先创建一个项目","assets.uploading":"上传中...","assets.backToBoard":"返回看板","assets.loading":"加载中...","assets.uploadTitle":"上传资源","assets.workspace":"工作区","assets.project":"项目","assets.file":"文件","assets.selectFile":"点击选择文件...","assets.description":"描述","assets.descriptionPlaceholder":"输入资源描述(可搜索)","assets.revealInFinder":"在文件夹中显示","assets.previewNotSupported":"不支持预览此文件类型","assets.loadingPreview":"加载中...","assets.previewError":"加载预览失败","assets.fileTooLarge":"文件过大,无法预览(超过 1MB)","assets.lightbox.zoomActual":"实际尺寸","assets.lightbox.zoomFit":"适应窗口","assets.lightbox.zoomIn":"放大","assets.lightbox.zoomOut":"缩小","assets.lightbox.reset":"重置","assets.lightbox.prev":"上一张","assets.lightbox.next":"下一张","assets.lightbox.close":"关闭","taskPage.title":"任务详情","taskPage.back":"返回","taskPage.backToBoard":"返回看板","taskPage.conversation":"对话","taskPage.changes":"变更","taskPage.notes":"备注","taskPage.addNote":"添加备注","taskPage.noteTitle":"标题","taskPage.noteContent":"内容","taskPage.uploadFile":"上传附件","taskPage.attachments":"附件","taskPage.noNotes":"暂无备注","taskPage.noAttachments":"暂无附件","taskPage.deleteNote":"删除","taskPage.deleteAttachment":"删除","taskPage.noteSaved":"备注已保存","taskPage.viewDetails":"查看详情","taskPage.noChanges":"暂无变更","taskPage.branchDeleted":"任务分支已删除,无法查看变更","taskPage.startExecution":"启动执行以查看变更","taskPage.loadingDiff":"加载变更中...","taskPage.noDiff":"暂无变更(需要项目配置本地路径和基础分支)","taskPage.tabFiles":"文件","taskPage.tabPreview":"预览","taskPage.tabSearch":"搜索","taskPage.tabFileTree":"文件树","taskPage.completeTask":"完成任务","taskPage.uncommittedChanges":"工作区有 {count} 个未提交的文件,请先点击 Commit 按钮提交后再完成任务","taskPage.noChangesToComplete":"没有任何改动,无法完成任务","taskPage.markAsCancelled":"标记为已取消","taskPage.taskCancelled":"任务已取消","taskCancel.title":"确认取消任务","taskCancel.intro":"「{title}」拥有独立的 worktree 和 task 分支,取消后将一并清理。","taskCancel.irreversible":"此操作不可逆 —— 重新激活任务只能新建分支,原 worktree 和分支无法恢复。如需继续,请新建一个任务。","taskCancel.cleanNotice":"当前 worktree 没有未提交修改或未合并 commits,可安全清理。","taskCancel.uncommittedFiles":"未提交文件","taskCancel.unmergedCommits":"未合并 commits","taskCancel.filesList":"文件列表","taskCancel.commitsList":"Commit 列表","taskCancel.reflogHint":"Commits 仍在 git reflog 中(默认保留 90 天),可通过 git reflog / git fsck --lost-found 手动恢复","taskCancel.keep":"保留任务","taskCancel.confirm":"确认取消","taskPage.taskCompleted":"任务已完成","taskPage.loadDiffFailed":"加载变更失败","taskPage.fileTree.newFile":"新建文件","taskPage.fileTree.newFolder":"新建文件夹","taskPage.fileTree.rename":"重命名","taskPage.fileTree.delete":"删除","taskPage.fileTree.revealInFinder":"在文件夹中显示","taskPage.fileTree.emptyHeading":"文件树暂不可用","taskPage.fileTree.emptyBody":"启动任务执行后将在此显示 worktree 目录结构","taskPage.fileTree.emptyDir":"目录为空","taskPage.fileTree.loadError":"无法加载文件列表,请重试","taskPage.fileTree.renamePlaceholder":"输入新名称","taskPage.fileTree.newFilePlaceholder":"文件名","taskPage.fileTree.newFolderPlaceholder":"文件夹名","taskPage.fileTree.deleteConfirmHeading":"确认删除","taskPage.fileTree.deleteConfirmBody":"删除「{name}」?此操作不可撤销。","taskPage.fileTree.deleteConfirmBodyFolder":"「{name}」及其所有内容将被删除。","taskPage.fileTree.deleteConfirmAction":"删除","taskPage.fileTree.searchPlaceholder":"搜索文件…","taskPage.fileTree.searchNoResults":"无匹配文件","taskPage.fileTree.errors.listDirectory":"加载目录失败","taskPage.fileTree.errors.refresh":"刷新文件树失败","taskPage.fileTree.errors.rename":"重命名失败","taskPage.fileTree.errors.delete":"删除失败","taskPage.fileTree.errors.createFile":"创建文件失败","taskPage.fileTree.errors.createFolder":"创建文件夹失败","taskPage.fileTree.errors.listAll":"加载文件列表失败","taskPage.fileTree.errors.reveal":"无法在文件管理器中显示","taskPage.fileTree.errors.gitStatus":"Git 状态读取失败","taskPage.fileTree.retryAction":"重试","editor.selectFile":"选择文件以打开","editor.selectFileHint":"在左侧文件树中点击任意文件","editor.saveSuccess":"保存成功","editor.saveError":"保存失败,请重试","editor.closeTab":"关闭标签页","editor.diffTabSuffix":"(差异)","editor.noWorktree":"暂无工作区,请先执行任务","editor.extensionRequired":"需要安装 Monaco 扩展才能查看和编辑文件,可在 设置 → 扩展 中启用","simpleViewer.fallbackNotice":"未安装 Monaco — 纯文本只读预览,安装后可获得完整编辑器","simpleViewer.oversized":"文件过大({size},上限 {limit}),无法预览","simpleViewer.binary":"二进制文件,无法预览","diff.filesChanged":"{count} 个文件更改","diff.additions":"+{count}","diff.deletions":"-{count}","diff.binary":"二进制文件","diff.truncated":"差异过大已截断","diff.conflictWarning":"合并被阻止:检测到冲突","diff.conflictFiles":"{count} 个冲突文件","diff.commitChanges":"提交更改","diff.commitMessagePlaceholder":"第一行为标题,空行后为详细描述\n\n例如:\nfeat: 添加用户认证\n\n实现 JWT token 验证和刷新机制","diff.commit":"提交","diff.noChanges":"未检测到更改","diff.commitSuccess":"已提交 ({hash})","diff.patchTruncated":"差异内容过大,已截断显示前 {n} 行(共 {total} 行)","diff.openInDiffView":"在并排视图中打开","diff.loadDiff":"加载差异","diff.foldedLarge":"差异较大,被折叠了","diff.loadFailed":"加载差异失败","diff.binaryNotShown":"二进制文件,未显示差异","diff.retry":"重试","merge.button":"合并","merge.confirmTitle":"确认 Squash 合并","merge.targetBranch":"目标分支","merge.changedFiles":"变更文件数","merge.commitsToSquash":"待压缩提交数","merge.commitMessage":"提交信息","merge.confirm":"确认合并","merge.cancel":"取消","merge.merging":"合并中...","merge.success":"合并成功","merge.conflictError":"无法合并:检测到冲突","merge.failed":"合并失败","project.type.label":"项目类型","project.type.frontend":"前端","project.type.backend":"后端","project.previewCommand":"预览启动命令","project.previewCommandPlaceholder":"例:pnpm dev","project.previewCommandDesc":"启动本地开发服务器的命令","preview.run":"运行","preview.stop":"停止","preview.openTerminal":"在终端中打开","preview.refresh":"刷新预览","preview.back":"后退","preview.forward":"前进","preview.previewEmpty":"暂无可预览的页面","preview.previewEmptyHint":"点击「运行」启动开发服务器后,预览将出现在这里","preview.addressPlaceholder":"输入本地 URL,按 Enter 加载","preview.noWorktree":"预览面板不可用","preview.noWorktreeDesc":"启动任务执行后可在此预览前端页面","preview.statusStopped":"已停止","preview.statusStarting":"启动中...","preview.statusRunning":"运行中","preview.statusError":"启动失败","preview.errorDesc":"启动预览服务器时出错,请检查启动命令","preview.terminalError":"无法打开终端,请检查设置中的终端配置","preview.port":"端口","preview.presetDetected":"已识别为","preview.presetUnknown":"未识别","preview.presetReDetect":"重新探测","preview.presetClear":"清空","preview.presetSelect":"选择 preset","preview.installPrompt":"未检测到依赖。","preview.installNow":"立即安装","preview.runAnyway":"强制运行","preview.cancelInstall":"取消安装","preview.statusInstalling":"安装中","preview.statusStopping":"停止中...","preview.shareWith":"与其他 {count} 个任务共享","preview.stopConfirmTitle":"停止预览?","preview.stopConfirmBody":"这将停止与本任务共享同一预览的所有 {count} 个其他打开标签页。","preview.stopConfirmConfirm":"停止","preview.cancel":"取消","preview.override":"已覆盖","preview.resetOverride":"重置","preview.resetOverrideHint":"仅此任务覆盖 · 点击恢复默认","preview.projectDefaultHint":"项目默认","preview.sourceTask":"任务","preview.sourceProject":"项目","preview.sourcePreset":"预设","preview.sourceTaskTip":"当前来自任务级覆盖(仅此任务生效)","preview.sourceProjectTip":"当前来自项目级默认","preview.sourcePresetTip":"当前来自 preset 内置默认","preview.overridesLabel":"覆盖","preview.commandShort":"命令","preview.portShort":"端口","preview.taskOverrideLabel":"任务覆盖","preview.taskOverrideResetHint":"重置任务级覆盖 · 命令和端口都恢复默认","preview.syncToProject":"同步项目","preview.syncToProjectHint":"把当前任务级配置写入项目默认 · 同 project 下其他任务也会用","preview.resetCurrent":"重置","preview.resetCurrentTaskHint":"重置任务级覆盖 · 回落到项目/预设默认","preview.resetCurrentProjectHint":"重置项目级默认 · 回落到预设默认","preview.logsLabel":"日志","preview.logsClear":"清空","preview.logsCopy":"复制","preview.logsFullscreen":"全屏","preview.portInUse":"端口 {port} 已被占用","preview.noLocalPath":"项目未配置 localPath,无法预览","settings.shell.label":"默认 Shell","settings.shell.desc":"用于 PTY 终端和 AI CLI 测试的 Shell,使用系统已安装的 Shell 及其配置(别名、插件等)","settings.shell.winHint":"Claude Code 在 Windows 上需要 Git Bash 环境,建议选择 Git Bash","settings.terminal.label":"终端应用","settings.terminal.desc":'用于"在终端中打开"的 GUI 终端应用',"settings.terminal.placeholder":"Terminal","settings.editor.label":"代码编辑器","settings.editor.desc":'用于"在编辑器中打开"的编辑器命令;留空则自动选用检测到的第一个',"settings.editor.placeholder":"code / cursor / subl ...","settings.app.notInstalled":"未检测到安装,无法选择;如需支持请提 issue","settings.editor.invalid":"不支持的编辑器命令「{cmd}」,未保存","settings.terminal.idleTimeout":"空闲超时(秒)","settings.terminal.idleTimeoutDesc":"终端无输出多久后触发空闲检测(最低 180 秒)","settings.cliProfile.title":"CLI 配置","settings.cliProfile.desc":"配置 AI 命令行工具的执行参数","settings.cliProfile.navDesc":"CLI 执行参数配置","settings.cliProfile.command":"命令","settings.cliProfile.commandHint":"CLI 可执行文件名称或路径","settings.cliProfile.commandPlaceholder":"claude","settings.cliProfile.baseArgs":"基础参数","settings.cliProfile.baseArgsHint":"每次执行时附加的命令行参数,一行一个","settings.cliProfile.baseArgsPlaceholder":"--dangerously-skip-permissions","settings.cliProfile.envVars":"环境变量","settings.cliProfile.envVarsHint":"注入到 CLI 进程的环境变量,格式:KEY=VALUE,一行一个","settings.cliProfile.envVarsPlaceholder":"MY_VAR=value","settings.cliProfile.saved":"CLI 配置已保存","settings.cliProfile.saveError":"保存失败","settings.cliProfile.invalidJson":"参数格式无效","settings.cliProfile.noProfile":"未找到默认 CLI 配置,请运行 seed","terminal.connecting":"正在连接...","terminal.connected":"已连接","terminal.disconnected":"已断开","terminal.reconnecting":"正在重连...","terminal.noWorktree":"无工作区","terminal.noWorktreeDesc":"请先运行任务以启动终端","terminal.execute":"执行","terminal.executing":"执行中...","terminal.noPrompt":"请输入执行提示词","terminal.stopExecution":"停止执行","terminal.stopHint":"停止前建议在终端中让 AI 生成 commit","terminal.promptPlaceholder":"输入任务提示词...","terminal.launch":"启动终端","terminal.startFailed":"启动终端失败,请检查项目本地路径与 Git 配置","terminal.readyToLaunch":"点击启动终端开始执行任务","execution.success":"成功","execution.failed":"失败","execution.running":"运行中","execution.viewDetails":"查看详情","execution.noSummary":"暂无摘要","execution.commits":"次提交","execution.files":"个文件","execution.terminalOutput":"终端输出","execution.history":"执行历史","execution.gitLog":"Git 提交记录","execution.loading":"加载中...","execution.noHistory":"暂无执行记录","execution.resume":"恢复会话","execution.tryRecover":"尝试继续","execution.details":"详情","execution.collapse":"收起","execution.insight":"归纳","missions.navLabel":"任务控制台","missions.pageTitle":"任务控制台","missions.launchTask":"启动任务","missions.emptyTitle":"无运行中的任务","missions.emptyDesc":"点击「启动任务」开始执行","missions.gridPreset":"布局","missions.stopTask":"停止任务","missions.openFullView":"查看详情","missions.runningTime":"运行","missions.statusCompleted":"已完成","missions.statusStopped":"已停止","missions.statusRunning":"运行中","missions.dragHandle":"拖拽排序","missions.openInTerminal":"在终端打开","missions.launcher.title":"启动任务","missions.launcher.workspace":"工作空间","missions.launcher.project":"项目","missions.launcher.task":"任务","missions.launcher.selectWorkspace":"选择工作空间","missions.launcher.selectProject":"选择项目","missions.launcher.selectTask":"选择任务","missions.launcher.launch":"启动","missions.launcher.cancel":"取消","missions.launcher.noTasks":"暂无可执行任务","missions.error.launchFailed":"启动任务失败","missions.error.stopFailed":"停止任务失败","missions.filterAll":"全部工作区","missions.alreadyMonitored":"已在监控","missions.showMoreTasks":"选择其他任务...","missions.pickerTitle":"选择要启动的任务","missions.pickerFooter":"点击 Launch 启动执行","missions.noAvailableTasks":"暂无可用任务","missions.continueSession":"继续上次会话","missions.continueLabel":"继续","missions.launchNew":"启动新终端","missions.launchNewLabel":"新建","missions.fullPickerTitle":"选择任务","missions.fullPickerHint":"选择工作区和项目查看任务","missions.fullPicker.searchPlaceholder":"搜索任务标题…","missions.fullPicker.clearSearch":"清除搜索","missions.fullPicker.noSearchResults":"未找到匹配的任务","missions.gridCustom":"自定义","missions.gridCols":"列","missions.gridRows":"行","settings.config.missions.title":"任务控制台布局","settings.config.missions.desc":"自定义网格布局的列数和行数范围","settings.config.missions.minCols":"最小列数","settings.config.missions.maxCols":"最大列数","settings.config.missions.minRows":"最小行数","settings.config.missions.maxRows":"最大行数","settings.config.hooks.title":"Hooks 配置","settings.config.hooks.desc":"管理 Claude Code 的 PostToolUse 钩子","settings.config.hooks.autoUploadTypes":"自动上传文件类型","settings.config.hooks.autoUploadTypesHint":"逗号分隔的文件扩展名","settings.config.hooks.install":"安装 Hook","settings.config.hooks.uninstall":"卸载 Hook","settings.config.hooks.installed":"Hook 已安装","settings.config.hooks.notInstalled":"Hook 未安装","settings.config.hooks.installHint":"安装后,Claude Code 写入匹配类型的文件时会自动上传为任务资产","assistant.title":"Tower 助手","assistant.iconLabel":"助手","assistant.starting":"启动中...","assistant.errorTitle":"会话启动失败","assistant.errorBody":"启动失败,请重试","assistant.loading":"加载中...","assistant.emptyTitle":"我能帮你做什么?","assistant.emptyBody":"输入消息以开始","assistant.copy":"复制","assistant.suggestion.createProject":"创建一个新项目","assistant.suggestion.createTask":"创建一个任务","assistant.suggestion.checkProgress":"查看任务进度","assistant.suggestion.dailySummary":"查看今日工作总结","assistant.inputPlaceholder":"输入消息,Enter 发送,Shift+Enter 换行","assistant.sendLabel":"发送消息","assistant.cancelLabel":"取消发送","assistant.thinking":"思考中","assistant.toolLabel":"工具","assistant.parseError":"解析错误","assistant.parseErrorBody":"无法解析助手输出内容","assistant.closeLabel":"关闭助手","assistant.expandTool":"展开工具调用详情","assistant.previewImage":"预览图片","assistant.removeImage":"移除图片","assistant.removeAttachment":"移除附件","assistant.addAttachment":"添加附件(图片或文本)","assistant.attachmentLimitReached":"已达附件数量上限","assistant.dropToUpload":"松开以上传附件","assistant.attachmentTypeImages":"图片","assistant.attachmentTypeText":"文本","assistant.brokenImage":"图片不可用","assistant.imageCount":"张图片","assistant.uploadFailed":"上传失败","assistant.uploadFailedRemoveHint":"上传失败 — 点击 x 移除","assistant.closePreview":"关闭预览","assistant.inputPlaceholderWithImages":"输入消息或粘贴图片...","settings.assistant.title":"助手","settings.assistant.desc":"配置助手行为","settings.assistant.communicationMode":"通信模式","settings.assistant.communicationModeDesc":"选择与助手交互的方式","settings.assistant.modeTerminal":"终端模式","settings.assistant.modeChat":"聊天模式","assistant.newSession":"新会话","assistant.sessionList":"会话列表","assistant.deleteSession":"删除","assistant.noSessions":"暂无历史会话","project.migrate":"迁移到规范路径","project.migrateHint":"将项目文件夹移动到 Git 路径规则推导的位置","project.targetPath":"目标路径","project.migrating":"迁移中...","project.migrateSuccess":"项目已迁移到规范路径","project.migrateError":"迁移失败","project.samePathInfo":"路径已是规范路径","project.migrateSafetyWarning":"迁移前请确保没有运行中的任务","project.worktreeWarning":"该项目有活跃的 Git Worktree,迁移将被阻止","project.genDesc":"生成描述","project.analyzing":"分析中...","project.analyzeError":"分析失败,请重试","project.genDescDisabledTooltip":"请先选择路径","project.genDescNoPath":"请先输入地址","project.genDescNotCloned":"请先 clone 项目","project.genDescReady":"基于本地代码生成项目描述","project.deleteTitle":"删除项目","project.deleteWarning":"确定要删除「{name}」吗?","project.deleteIrreversible":"此操作无法撤销,所有任务和数据将被永久删除。","project.deleteConfirmLabel":"请输入「确认删除」以确认","project.deleteConfirmPlaceholder":"确认删除","project.deleteConfirmText":"确认删除","project.deleteButton":"删除项目","project.deleteSuccess":"项目已删除","project.deleteFailed":"删除失败,请重试","taskDrawer.title":"任务概览","taskDrawer.description":"描述","taskDrawer.labels":"标签","taskDrawer.createdAt":"创建时间","taskDrawer.resources":"关联资源","taskDrawer.lastExecution":"最近执行","taskDrawer.noDescription":"暂无描述","taskDrawer.noExecution":"暂无执行记录","taskDrawer.fileChanges":"文件改动","taskDrawer.noFileChanges":"无文件改动","taskDrawer.duplicate":"复制并新建任务","taskDrawer.duplicateSuccess":"已复制为新任务","taskDrawer.duplicateFailed":"复制任务失败","codeSearch.patternPlaceholder":"搜索代码(支持正则)","codeSearch.globPlaceholder":"文件过滤,如 *.ts","codeSearch.noPath":"请先配置项目本地路径","codeSearch.searching":"搜索中...","codeSearch.noResults":"无匹配结果","codeSearch.truncated":"仅显示前 200 条结果","codeSearch.hint":"输入关键词后按 Enter 搜索","codeSearch.errors.timeout":"搜索超时","codeSearch.errors.not_installed":"ripgrep 未安装","codeSearch.errors.permission_denied":"权限不足","codeSearch.errors.aborted":"已取消","codeSearch.errors.unknown":"搜索失败","codeSearch.cancel":"取消搜索","codeSearch.cancelled":"已取消搜索","codeSearch.errorBanner.viewFull":"查看完整错误","codeEditor.fileGuard.oversizedTitle":"文件过大","codeEditor.fileGuard.oversizedBody":"文件大小 {size},超过限制 {limit}。直接打开可能导致浏览器卡顿。","codeEditor.fileGuard.binaryTitle":"二进制文件","codeEditor.fileGuard.binaryBody":"检测到二进制内容,按 UTF-8 打开会出现乱码。","codeEditor.fileGuard.forceOpenAction":"强制打开 (UTF-8)","codeEditor.fileGuard.forceOpenWarning":"已强制打开,可能出现乱码或卡顿","codeEditor.readError":"读取文件失败","codeEditor.retryAction":"重试","git.discardFile":"放弃此文件更改","git.discardFileSuccess":"已放弃文件更改","settings.notifications.title":"通知","settings.notifications.desc":"任务完成提醒","settings.notifications.navDesc":"桌面通知和 Toast 提醒","settings.notifications.enable":"任务完成通知","settings.notifications.enableDesc":"任务执行完成时显示桌面通知或 Toast 提醒","settings.backup.title":"数据管理","settings.backup.desc":"备份、恢复与重置","settings.backup.navDesc":"数据备份、恢复存档、重置系统","settings.backup.sectionTitle":"备份与恢复","settings.backup.dir":"存档路径","settings.backup.dirChange":"修改","settings.backup.dirPlaceholder":"输入绝对路径","settings.backup.dirSaved":"存档路径已更新","settings.backup.dirError":"路径无效,必须是主目录下的绝对路径","settings.backup.create":"创建存档","settings.backup.createLabel":"存档名称(可选)","settings.backup.createLabelPlaceholder":"例如:上线前备份","settings.backup.creating":"正在创建存档...","settings.backup.createSuccess":"存档创建成功","settings.backup.createError":"创建存档失败","settings.backup.import":"导入存档","settings.backup.importHint":"仅支持导入本电脑的备份(不同电脑的项目路径不兼容)","settings.backup.importSuccess":"存档已导入","settings.backup.importError":"导入失败","settings.backup.importInvalid":"无效的存档文件","settings.backup.restore":"恢复","settings.backup.restoring":"正在恢复数据...","settings.backup.restoreConfirm":"确认从此存档恢复?当前数据会先自动备份。","settings.backup.restoreSuccess":"数据已恢复,请刷新页面","settings.backup.restoreError":"恢复失败","settings.backup.delete":"删除","settings.backup.deleteConfirm":"确认删除此存档?此操作不可撤销。","settings.backup.deleteSuccess":"存档已删除","settings.backup.deleteError":"删除失败","settings.backup.empty":"暂无存档","settings.backup.emptyDesc":"点击「创建存档」备份当前数据","settings.backup.autoLabel":"自动备份","settings.backup.projects":"{count} 个项目","settings.backup.tasks":"{count} 个任务","settings.backup.workspaces":"等 {count} 个工作区","settings.backup.reloadRequired":"请刷新页面以加载恢复的数据","settings.backup.reload":"立即刷新","settings.backup.dangerZone":"危险操作","settings.backup.resetDesc":"重置将清空所有数据(数据库、资源、配置),仅保留存档文件。重置前会自动创建一份存档。","settings.backup.reset":"重置系统","settings.backup.resetConfirmTitle":"确认重置系统?","settings.backup.resetConfirmDesc":"此操作不可撤销。所有数据将被清空,仅保留存档。","settings.backup.resetConfirmInput":"输入 RESET 确认","settings.backup.resetting":"正在重置系统...","settings.backup.resetSuccess":"系统已重置","settings.backup.resetError":"重置失败","settings.backup.operationInProgress":"有其他备份操作正在进行","notification.permissionPrompt":"允许 Tower 在任务完成时发送桌面通知","notification.allow":"允许","notification.dismiss":"忽略","notification.taskCompleted":"任务已完成","notification.taskFailed":"任务失败","onboarding.title":"欢迎使用 Tower","onboarding.step1.title":"设置用户名","onboarding.step1.desc":"请输入您的用户名,AI 助手将使用此名称称呼您","onboarding.step1.usernamePlaceholder":"输入用户名","onboarding.step1.usernameLabel":"用户名","onboarding.step1.next":"下一步","onboarding.step2.title":"AI 连接测试","onboarding.step2.desc":"测试与 AI 适配器的连接,确保任务可以正常调度执行","onboarding.cliRequired":"需要安装并配置 Claude CLI 才能继续,请参考文档完成安装","onboarding.complete":"完成设置","onboarding.skip":"跳过","onboarding.back":"上一步","onboarding.step3.title":"配置 Git 路径规则","onboarding.step3.desc":"配置 Git 仓库地址与本地路径的映射规则,创建 Git 项目时将自动生成本地路径","onboarding.step3.addFirst":"添加第一条规则","onboarding.step3.noRules":"还没有配置规则,创建 Git 项目时需要手动填写本地路径","onboarding.step3.hostLabel":"Git 主机","onboarding.step3.hostPlaceholder":"例如 github.com","onboarding.step3.ownerLabel":"Owner 匹配","onboarding.step3.ownerPlaceholder":"* 匹配所有,或填具体用户名","onboarding.step3.pathLabel":"本地基础路径","onboarding.step3.pathPlaceholder":"例如 /Users/you/project","onboarding.step3.pathHint":"支持变量:{path}=完整路径,{owner}=第一段,{repo}=仓库名。不含变量时自动追加仓库名","onboarding.step3.pathHintRepo":"仓库名会自动追加到路径末尾","onboarding.step3.pathHintFull":"开启后保留完整子组路径(适合 GitLab 多级分组)","onboarding.step3.added":"已添加 {count} 条规则","onboarding.step3.exampleTitle":"配置示例","onboarding.step3.exampleCase1":"规则:主机 github.com,路径 ~/project → 结果 ~/project/my-app","onboarding.step3.exampleCase2":"规则:主机 gitlab.com,路径 ~/company/{path} → 结果 ~/company/team/group/my-app","onboarding.step3.exampleDesc":"创建项目输入 Git 地址时,系统自动匹配规则填充本地路径。使用 {path} 可保留完整子组路径","onboarding.step3.previewLabel":"测试预览","onboarding.step3.previewPlaceholder":"粘贴一个 Git 地址试试效果","onboarding.step3.previewNoMatch":"无法解析此地址","onboarding.step4.title":"启用扩展(可选)","onboarding.step4.desc":"下面这些扩展能解锁文件查看和代码搜索。装一次,所有项目共享。","onboarding.step4.skipHint":"未启用的扩展可在 设置 → Extensions 中随时启用。","onboarding.step4.installing":"安装中...","onboarding.step4.continue":"完成","onboarding.step4.continueWithoutInstall":"跳过并完成","onboarding.stepIndicator":"步骤 {current}/{total}","onboarding.welcomeCta":"创建您的第一个工作区开始使用","onboarding.createWorkspace":"创建工作区","onboarding.defaultWorkspaceName":"我的工作区","tour.step1.title":"创建工作区","tour.step1.desc":"工作区是最顶层的组织单元。点击这里创建您的第一个工作区。","tour.step2.title":"创建项目","tour.step2.desc":"项目属于工作区。点击这里创建或导入一个项目,关联您的代码仓库。","tour.step3.title":"打开 AI 助手","tour.step3.desc":"AI 助手可以帮您管理任务和项目。点击这里随时与助手对话。","tour.skip":"跳过引导","tour.next":"下一步","tour.done":"完成","aiConfig.title":"AI 能力配置","aiConfig.description":"为每个 AI 功能场景独立配置 Provider 和模型","aiConfig.terminal":"终端执行","aiConfig.summary":"会话总结","aiConfig.dreaming":"知识沉淀","aiConfig.analysis":"项目分析","aiConfig.assistant":"助手聊天","aiConfig.provider":"Provider","aiConfig.mode":"模式","aiConfig.model":"模型","aiConfig.cli":"CLI(订阅)","aiConfig.api":"API(按量)","aiConfig.default":"默认","aiConfig.notConfigured":"未配置","aiConfig.cliNotFound":"CLI 未安装","aiConfig.apiKeyMissing":"API Key 未配置","aiConfig.saved":"已保存","extensions.notInstalled.title":"扩展未安装","extensions.notInstalled.desc":"需要先安装对应扩展才能使用此功能","settings.extensions.title":"扩展","settings.extensions.navDesc":"管理可选扩展","settings.extensions.desc":"可选扩展提供搜索 / 编辑器等功能。装一次,所有项目共享;不装不影响核心功能。","settings.extensions.installed":"已安装","settings.extensions.notInstalledShort":"未安装","settings.extensions.install":"安装","settings.extensions.installing":"安装中...","settings.extensions.reinstall":"重新安装","settings.extensions.reinstalling":"重新安装中...","settings.extensions.uninstall":"卸载","settings.extensions.uninstalling":"卸载中...","settings.extensions.recheck":"重新检测","settings.extensions.visitHomepage":"访问官网","settings.extensions.installViaHomepage":"前往官网安装","settings.extensions.manualInstallHintIntro":"原生二进制,跨平台自动下载不稳。推荐通过系统包管理器安装:","settings.extensions.manualInstallHintAfter":"装好后点「重新检测」,或重启 Tower 让 PATH 生效。","settings.extensions.installSuccess":"已安装 {name}","settings.extensions.installFailed":"安装 {name} 失败","settings.extensions.uninstallSuccess":"已卸载 {name}","settings.extensions.uninstallFailed":"卸载 {name} 失败","git.hoverParentsLabel":"父提交","git.hoverRefsLabel":"分支/标签","git.noCommits":"暂无提交","git.commitFiles":"提交文件","git.tabGraph":"图谱","git.commitDiff":"提交差异","git.hoverHashLabel":"哈希","git.hoverAuthorLabel":"作者","git.hoverDateLabel":"时间","git.commitMenuCheckout":"检出此提交","git.commitMenuCreateBranch":"从此处新建分支","git.commitMenuCreateTag":"创建标签...","git.commitMenuCherryPick":"Cherry-pick","git.commitMenuRevert":"回退","git.commitMenuReset":"重置到此处","git.commitMenuResetSoft":"Soft (保留索引+工作区)","git.commitMenuResetMixed":"Mixed (保留工作区, 重置索引)","git.commitMenuResetHard":"Hard (全部丢弃)","git.commitMenuAmend":"修改提交信息...","git.commitMenuCopyHash":"复制完整哈希","git.commitMenuCopyShort":"复制短哈希","git.commitResetHardConfirm":'丢弃自"{subject}"以来的所有工作区改动?此操作不可撤销。',"git.tagNamePlaceholder":"例如 v1.0.0","git.tagMessagePlaceholder":"可选消息 (annotated tag)","git.amendMessageDialogTitle":"修改提交信息","version.timeline":"版本时间线","version.new":"新建版本","version.edit":"编辑版本","version.release":"发布","version.releaseAction":"发布版本","version.current":"当前 · 默认收集","version.currentShort":"当前","version.backlog":"未归入版本","version.history":"History","version.historySub":"未归入版本的历史任务","version.historyHint":"引入版本功能前创建的历史任务,统一归档,可手动归入版本。","version.tasksCount":"任务","version.doneCount":"完成","version.allDone":"全部完成","version.type.FEATURE":"需求开发","version.type.BUGFIX":"bug修复","version.type.RESEARCH":"需求调研","version.type.uncategorized":"未分类","version.manageTypes":"管理类型","version.type.namePlaceholder":"类型名称","version.type.add":"添加类型","version.type.empty":"暂无类型","version.type.deleteConfirm":"删除该类型?已使用它的版本将变为未分类。","version.status.PLANNED":"规划中","version.status.ACTIVE":"进行中","version.status.RELEASED":"已发布","version.field.number":"版本号","version.field.name":"名称","version.field.type":"类型","version.field.baseBranch":"基线分支","version.field.baseCommit":"基线","version.field.noBranch":"不指定分支","version.field.startDate":"开始日期","version.field.targetDate":"计划完成","version.field.description":"版本说明","version.field.setCurrent":"设为当前版本","version.placeholder.number":"如 v1.1","version.placeholder.name":"版本名称","version.diff.view":"查看版本 diff","version.diff.files":"文件","version.diff.live":"实时","version.release.rolloverHint":"未完成任务将滚动到新的当前版本","version.release.nextVersion":"下一个当前版本","version.release.noCandidates":"请先创建一个 PLANNED 或 ACTIVE 状态的版本作为接替目标","version.resources":"资源","version.notes":"笔记","version.empty.resources":"暂无资源","version.empty.notes":"暂无笔记","version.empty.list":"还没有版本,点击「新建版本」开始","version.releasedAt":"发布于","version.picker.label":"版本","version.picker.none":"不归入版本(Backlog)","version.picker.empty":"该项目还没有版本,可在「版本时间线」中创建后再归入","version.diff.title":"版本改动","version.diff.empty":"该版本暂无代码改动","version.diff.loading":"加载 diff…","version.diff.truncated":"内容过长已截断,可在 Git 标签页查看完整 diff","version.taskStatus.TODO":"待办","version.taskStatus.IN_PROGRESS":"进行中","version.taskStatus.IN_REVIEW":"待评审","version.taskStatus.DONE":"已完成","version.taskStatus.CANCELLED":"已取消","version.detail":"详情","common.copy":"复制","common.copied":"已复制","common.copyFailed":"复制失败"},en:{"sidebar.workspace":"Workspaces","sidebar.newWorkspace":"New Workspace","sidebar.collapse":"Collapse Sidebar","sidebar.expand":"Expand Sidebar","sidebar.rename":"Rename","sidebar.delete":"Delete","sidebar.archive":"Archive","sidebar.manageLabels":"Manage Labels","sidebar.deleteConfirm":'Delete workspace "{name}"? All projects and tasks will be deleted.',"sidebar.lastWorkspaceError":"At least one workspace must be kept","sidebar.reorderError":"Failed to save workspace order","sidebar.settings":"Settings","workspace.create":"New Workspace","workspace.edit":"Edit Workspace","workspace.name":"Name","workspace.namePlaceholder":"Enter workspace name","workspace.icon":"Icon","common.cancel":"Cancel","common.create":"Create","common.save":"Save","common.delete":"Delete","common.add":"Add","common.loading":"Loading...","common.edit":"Edit","common.search":"Search","topbar.newProject":"New Project","topbar.importProject":"Import Project","topbar.searchPlaceholder":"Search tasks, projects, repos, notes, assets...","topbar.github":"GitHub","project.name":"Project Name","project.alias":"Alias","project.description":"Description","project.gitUrl":"Git Repository URL","project.gitUrlHint":"Optional, local path will be auto-inferred","project.namePlaceholder":"Enter project name","project.aliasPlaceholder":"Optional, e.g. Frontend Refactor","project.descPlaceholder":"Optional, project description","project.gitPlaceholder":"https://github.com/user/repo or git@github.com:user/repo.git","project.localPath":"Local Path","project.localPathPlaceholder":"/Users/you/projects/my-app","project.localPathHint":"Local folder path, auto-filled from Git URL","project.tildeWarning":"Use absolute path — ~ alias is not supported","project.importHint":"Select an existing local project folder","project.autoDetected":"Git remote auto-detected","project.edit":"Edit Project","git.history":"File History","git.noHistory":"No commit history","git.blame":"File Blame","git.toggleBlame":"Show Blame","git.noBlame":"No blame data","git.viewCommit":"View commit","git.clone":"Clone","git.cloning":"Cloning...","git.cloned":"Cloned","git.cloneSuccess":"Repository cloned successfully","board.kanban":"Task Board","board.overview":"Overview","board.running":"Running","board.tip":"Tips","board.newTask":"New Task","board.allFilter":"All","board.searchPlaceholder":"Search tasks...","board.inProgressFilter":"In Progress","board.inReviewFilter":"In Review","board.allVersions":"All Versions","board.card.worktree":"Worktree · branch {branch}","board.card.version":"Version: {number} · {name}","board.backlogFilter":"No Version","board.contextMenu.changeStatus":"Change Status","board.contextMenu.launch":"Launch Task","board.contextMenu.goToDetail":"Go to Detail","board.pin":"Pin to Top","board.unpin":"Unpin","board.viewAll":"View All","board.noTasks":"No tasks","task.create":"New Task","task.edit":"Edit Task","task.title":"Task Title","task.titlePlaceholder":"Enter task title","task.description":"Description","task.descPlaceholder":"Enter description (Markdown supported)","task.priority":"Priority","task.labels":"Labels","task.priorityLow":"Low","task.priorityMedium":"Med","task.priorityHigh":"High","task.priorityCritical":"Urgent","task.baseBranch":"Base Branch","task.branchLoading":"Loading branches...","task.branchNone":"No branches found","task.branchSearch":"Search branches...","task.branchDirect":"No branch isolation (work directly in main repo)","task.worktreeLabel":"Branch Isolation","task.worktreeYes":"On","task.worktreeNo":"Off","task.autoStartLabel":"Auto-start After Create","task.autoStartYes":"On","task.autoStartNo":"Off","task.subPath":"Sub Path","task.subPathPlaceholder":"e.g., web, packages/api","task.subPathHint":"Mono-repo subdirectory, task executes in this directory","taskDetail.title":"Task Chat","taskDetail.back":"Back to list","taskDetail.hasConversation":"Has chat","taskDetail.updatedAt":"Updated","taskDetail.directMode":"Direct Mode","taskDetail.send":"Send","taskDetail.sending":"Sending...","taskDetail.inputPlaceholder":"Enter command...","taskDetail.emptyState":"Start a conversation to execute the task","taskDetail.emptyHint":"Press Enter to send","taskDetail.sendFailed":"Send failed, please retry","taskDetail.executionFailed":"Execution failed","taskDetail.executionFailedRetry":"Execution failed, please retry","taskDetail.panelDescription":"Task execution conversation","taskDetail.filesChanged":"files changed","search.placeholder":"Search tasks, projects, repos, notes, assets...","search.task":"Tasks","search.project":"Projects","search.repository":"Repos","search.all":"All","search.note":"Notes","search.asset":"Assets","search.noResults":"No results found","search.typeToSearch":"Type to start searching","search.results":"Search Results","sidebar.right.projectInfo":"Project Info","sidebar.right.repo":"Repository","sidebar.right.addRepo":"Add Repository","sidebar.right.noRepo":"No linked repositories","sidebar.right.addRepoHint":"Add a repository below","sidebar.right.browseRepo":"Browse local repos","sidebar.right.createRepo":"Create new repo","sidebar.right.recent":"Recent","sidebar.right.other":"Other","sidebar.right.browseWip":"Browse repos - coming soon","sidebar.right.createWip":"Create repo - coming soon","sidebar.right.linkWip":"Link repo - coming soon","sidebar.right.normalType":"Normal","sidebar.right.gitType":"Git Project","sidebar.right.edit":"Edit Project","sidebar.right.name":"Project Name","sidebar.right.aliasLabel":"Alias","sidebar.right.descLabel":"Description","sidebar.right.save":"Save","sidebar.right.cancel":"Cancel","sidebar.right.namePlaceholder":"Enter project name","sidebar.right.aliasPlaceholder":"Optional alias","sidebar.right.descPlaceholder":"Project description","label.manage":"Manage Labels","label.name":"Label name","label.color":"Color","label.builtin":"Built-in","label.add":"Add Label","label.noLabels":"No labels","settings.title":"Settings","settings.language":"Language","settings.languageDesc":"Switch interface language","settings.general":"General","settings.generalDesc":"Appearance and language preferences","settings.theme":"Theme","settings.themeDesc":"Choose interface theme","settings.themeLight":"Light","settings.themeDark":"Dark","settings.themeSystem":"System","settings.prompts":"Prompts","settings.promptsDesc":"Manage AI prompt templates","settings.prompts.title":"Prompt Management","settings.prompts.newPrompt":"New Prompt","settings.prompts.editPrompt":"Edit Prompt","settings.prompts.promptName":"Name","settings.prompts.promptNamePlaceholder":"Enter prompt name","settings.prompts.promptDescription":"Description","settings.prompts.promptDescriptionPlaceholder":"Optional, brief description","settings.prompts.promptContent":"Content","settings.prompts.promptContentPlaceholder":"Enter prompt content...","settings.prompts.deleteConfirmTitle":"Confirm Delete","settings.prompts.deleteConfirmMessage":"This cannot be undone.","settings.prompts.setDefault":"Set as Default","settings.prompts.default":"Default","settings.prompts.empty":"No prompts yet","settings.prompts.emptyHint":"Click the button above to create your first prompt","settings.prompts.save":"Save","settings.prompts.cancel":"Cancel","settings.prompts.delete":"Delete","settings.aiTools.title":"AI Tools","settings.aiTools.cliVerification":"CLI Verification","settings.aiTools.cliVerificationDesc":"Verify AI CLI tools are correctly installed","settings.aiTools.testConnection":"Test Connection","settings.aiTools.testing":"Testing...","settings.aiTools.testPassed":"All checks passed","settings.aiTools.testFailed":"Some checks failed","settings.config":"Config","settings.configDesc":"System configuration parameters","settings.config.empty":"No configurable parameters yet — coming in next phases","settings.config.git.title":"Git Path Mapping Rules","settings.config.git.desc":"Define Git URL to local path mapping rules for auto-populating localPath on project creation","settings.config.git.host":"Host","settings.config.git.hostPlaceholder":"github.com","settings.config.git.ownerMatch":"Owner Match","settings.config.git.ownerMatchPlaceholder":"* (match all)","settings.config.git.localPathTemplate":"Local Base Path","settings.config.git.localPathTemplatePlaceholder":"/Users/you/project","settings.config.git.pickFolder":"Pick a folder","settings.config.git.pathTooltipTitle":"Mirror the Git folder hierarchy","settings.config.git.pathTooltipDetail":"On: path includes owner/subgroups (e.g. org/team/repo). Off: just the repo name.","settings.config.git.priority":"Priority","settings.config.git.priorityHint":"Lower number = higher priority","settings.config.git.addRule":"Add Rule","settings.config.git.noRules":"No mapping rules yet — click Add Rule to create one","settings.config.git.deleteConfirm":"Delete this rule?","settings.config.git.deleteConfirmMessage":"This cannot be undone.","settings.config.git.save":"Save","settings.config.git.cancel":"Cancel","settings.config.git.edit":"Edit","settings.config.git.delete":"Delete","settings.config.git.actions":"Actions","settings.config.git.templateHint":"Supports {owner} and {repo} variables","settings.config.git.validationRequired":"Host and local path template are required","settings.config.system.title":"System Parameters","settings.config.system.desc":"Upload limits and concurrency control","settings.config.system.maxUpload":"Max Upload File Size","settings.config.system.maxUploadHint":"Maximum allowed size for a single file upload","settings.config.system.maxConcurrent":"Max Concurrent Executions","settings.config.system.maxConcurrentHint":"Maximum number of AI tasks running simultaneously","settings.config.system.maxReadable":"Max Readable File Size","settings.config.system.maxReadableHint":"Maximum file size the code editor opens directly (larger files prompt for force-open)","settings.config.system.taskDefaultWorktree":"Default to Branch Isolation (Worktree)","settings.config.system.taskDefaultWorktreeHint":'Default for "Branch Isolation / Worktree" in the create-task dialog and MCP create_task',"settings.config.system.taskDefaultAutoStart":"Auto-start New Tasks","settings.config.system.taskDefaultAutoStartHint":'Default for "Auto-start After Create" in the create-task dialog and MCP create_task',"settings.config.task.title":"Task Defaults","settings.config.task.desc":"Default behavior for new tasks (shared by the board & MCP)","settings.config.system.saved":"System parameters saved","settings.config.gitParams.title":"Git Parameters","settings.config.gitParams.desc":"Git operation timeout","settings.config.gitParams.timeout":"Git Operation Timeout","settings.config.gitParams.timeoutHint":"Timeout for clone/status and other operations","settings.config.gitParams.saved":"Git parameters saved","settings.config.search.title":"Search Parameters","settings.config.search.desc":"Search result count, debounce delay, and snippet length","settings.config.search.resultLimit":"Search Result Limit","settings.config.search.resultLimitHint":"Maximum results returned per search category","settings.config.search.allModeCap":"All-Mode Per-Type Cap","settings.config.search.allModeCapHint":"Maximum results per category in All search mode","settings.config.search.debounceMs":"Search Debounce Delay","settings.config.search.debounceMsHint":"Wait time after typing stops before executing search","settings.config.search.snippetLength":"Snippet Length","settings.config.search.snippetLengthHint":"Maximum characters for search result preview text","settings.config.search.codeTimeout":"Code Search Timeout","settings.config.search.codeTimeoutHint":"Maximum execution time for ripgrep search","settings.config.search.saved":"Search parameters saved","workspace.selectHint":"Select a workspace","workspace.selectDesc":"Choose a workspace from the sidebar","workspace.createError":"Failed to create workspace, please try again","board.noProject":'No projects yet. Click "New Project" to create one.',"board.tipText":"Reuse existing drag, detail, and task creation pipeline","board.tipDesc":"Align workspace entry with prototype first, then add Settings, Skills, Plugins.","folder.selectFolder":"Select Folder","folder.selectGitRepo":"Select Git Repository","folder.hint":"Click folder name to navigate · Use buttons to select","folder.manualInput":"Enter path manually:","folder.goTo":"Go","folder.searchDir":"Search current directory:","folder.selectCurrent":"Select Current","folder.selectPath":"Select Path","folder.empty":"No folders in this directory","folder.browse":"Browse","folder.newFolder":"New Folder","folder.newFolderPlaceholder":"Folder name","folder.newFolderError":"Failed to create folder","git.section":"Git","git.currentBranch":"Current Branch","git.switchBranch":"Switch Branch","git.localBranches":"Local","git.remoteBranches":"Remote","git.modified":"Modified","git.staged":"Staged","git.untracked":"Untracked","git.notInitialized":"Git is not initialized for this project","git.initRepo":"Initialize Git Repository","git.initSuccess":"Git repository initialized","git.initFailed":"Initialization failed","git.switchSuccess":"Switched to branch","git.switchFailed":"Branch switch failed","git.noLocalPath":"Set project local path first","git.loading":"Loading...","git.createBranch":"Create Branch","git.branchName":"Branch Name","git.branchNamePlaceholder":"feature/my-feature","git.baseBranch":"Base Branch","git.branchDesc":"Description","git.branchDescPlaceholder":"Optional, describe this branch","git.createSuccess":"Branch created successfully","git.createFailed":"Failed to create branch","git.fetchSuccess":"Remote branches updated","git.fetchFailed":"Failed to fetch remote branches","git.changes":"Changes","git.stagedChanges":"Staged","git.unstagedChanges":"Unstaged","git.stageAll":"Stage All","git.unstageAll":"Unstage All","git.stageFile":"Stage changes","git.unstageFile":"Unstage changes","git.commit":"Commit","git.commitSuccess":"Committed successfully","git.commitMsgPlaceholder":"Commit message (⌘+Enter to commit)","git.pull":"Pull","git.pullSuccess":"Pulled successfully","git.push":"Push","git.pushSuccess":"Pushed successfully","git.commitLog":"Commit Log","git.stash":"Stash","git.stashMsgPlaceholder":"Stash message (optional)","git.stashSaved":"Changes stashed","git.stashApply":"Apply","git.stashApplied":"Stash applied","git.stashDrop":"Drop","git.stashDropped":"Stash dropped","git.noChanges":"Working tree clean","git.sync":"Sync","git.pullFrom":"Pull from","git.pushTo":"Push to","git.fetchAll":"Fetch All Remotes","git.stashSave":"Stash Changes","git.stashPopLatest":"Pop Latest Stash","git.discardAll":"Discard All Changes","git.discardSuccess":"All changes discarded","git.tabLabel":"Git","git.openStudio":"Open Studio","git.openStudioFailed":"Failed to open studio","git.openInFileManager":"Open in File Manager","git.openInFileManagerFailed":"Failed to open in file manager","git.openInEditor":"Open in Editor","git.openInEditorFailed":"Failed to open in editor (no editor detected or CLI not installed)","git.openInTerminal":"Open in Terminal","git.openInTerminalFailed":"Failed to open in terminal","archive.title":"Archived Tasks","archive.backToBoard":"Back to Board","archive.noTasks":"No archived tasks","archive.noTasksDesc":"Completed or cancelled tasks older than today will appear here","archive.completedAt":"Completed","archive.cancelledAt":"Cancelled","archive.createdAt":"Created","archive.lastExecution":"Last execution","archive.status.done":"Done","archive.status.cancelled":"Cancelled","archive.tasksCount":"archived","sidebar.notes":"Notes","sidebar.assets":"Assets","notes.title":"Notes","notes.newNote":"New Note","notes.allCategories":"All","notes.category.account":"Account","notes.category.env":"Environment","notes.category.requirements":"Requirements","notes.category.memo":"Memo","notes.edit":"Edit","notes.delete":"Delete","notes.save":"Save","notes.cancel":"Cancel","notes.titlePlaceholder":"Note title","notes.contentPlaceholder":"Note content (Markdown supported)","notes.categoryLabel":"Category","notes.empty":"No notes yet","notes.emptyHint":'Click "New Note" to create your first note',"notes.deleteConfirm":'Delete note "{title}"?',"notes.noProject":"No projects in this workspace","notes.noProjectHint":"Create a project first","notes.backToBoard":"Back to Board","notes.loading":"Loading...","notes.workspace":"Workspace","notes.project":"Project","assets.title":"Assets","assets.upload":"Upload File","assets.empty":"No assets yet","assets.emptyHint":"Upload files as project assets","assets.filename":"Filename","assets.size":"Size","assets.uploadedAt":"Uploaded At","assets.preview":"Preview","assets.download":"Download","assets.delete":"Delete","assets.deleteConfirm":'Delete asset "{filename}"?',"assets.noProject":"No projects in this workspace","assets.noProjectHint":"Create a project first","assets.uploading":"Uploading...","assets.backToBoard":"Back to Board","assets.loading":"Loading...","assets.uploadTitle":"Upload Asset","assets.workspace":"Workspace","assets.project":"Project","assets.file":"File","assets.selectFile":"Click to select file...","assets.description":"Description","assets.descriptionPlaceholder":"Enter asset description (searchable)","assets.revealInFinder":"Reveal in Finder","assets.previewNotSupported":"Preview not supported for this file type","assets.loadingPreview":"Loading...","assets.previewError":"Failed to load preview","assets.fileTooLarge":"File too large to preview (over 1MB)","assets.lightbox.zoomActual":"Actual size","assets.lightbox.zoomFit":"Fit to window","assets.lightbox.zoomIn":"Zoom in","assets.lightbox.zoomOut":"Zoom out","assets.lightbox.reset":"Reset","assets.lightbox.prev":"Previous","assets.lightbox.next":"Next","assets.lightbox.close":"Close","taskPage.title":"Task Details","taskPage.back":"Back","taskPage.backToBoard":"Back to Board","taskPage.conversation":"Conversation","taskPage.changes":"Changes","taskPage.notes":"Notes","taskPage.addNote":"Add Note","taskPage.noteTitle":"Title","taskPage.noteContent":"Content","taskPage.uploadFile":"Upload File","taskPage.attachments":"Attachments","taskPage.noNotes":"No notes yet","taskPage.noAttachments":"No attachments yet","taskPage.deleteNote":"Delete","taskPage.deleteAttachment":"Delete","taskPage.noteSaved":"Note saved","taskPage.viewDetails":"View Details","taskPage.noChanges":"No changes to display","taskPage.branchDeleted":"Task branch has been deleted, cannot view changes","taskPage.startExecution":"Start an execution to see changes","taskPage.loadingDiff":"Loading changes...","taskPage.noDiff":"No changes (project needs local path and base branch configured)","taskPage.tabFiles":"Files","taskPage.tabPreview":"Preview","taskPage.tabSearch":"Search","taskPage.tabFileTree":"Files","taskPage.completeTask":"Complete Task","taskPage.taskCompleted":"Task completed","taskPage.uncommittedChanges":"Worktree has {count} uncommitted file(s). Please click Commit button first","taskPage.noChangesToComplete":"No changes to complete — nothing was committed","taskPage.markAsCancelled":"Mark as cancelled","taskPage.taskCancelled":"Task cancelled","taskCancel.title":"Cancel Task","taskCancel.intro":'"{title}" has its own worktree and task branch. Cancelling will clean them up.',"taskCancel.irreversible":"This is irreversible — re-activating the task will only create a fresh branch; the original worktree and branch cannot be restored. To continue this work, create a new task instead.","taskCancel.cleanNotice":"The worktree has no uncommitted changes or unmerged commits — safe to clean up.","taskCancel.uncommittedFiles":"Uncommitted files","taskCancel.unmergedCommits":"Unmerged commits","taskCancel.filesList":"Files","taskCancel.commitsList":"Commits","taskCancel.reflogHint":"Commits remain in git reflog (kept ~90 days by default) and can be recovered via `git reflog` or `git fsck --lost-found`","taskCancel.keep":"Keep task","taskCancel.confirm":"Confirm cancel","taskPage.loadDiffFailed":"Failed to load changes","taskPage.fileTree.newFile":"New File","taskPage.fileTree.newFolder":"New Folder","taskPage.fileTree.rename":"Rename","taskPage.fileTree.delete":"Delete","taskPage.fileTree.revealInFinder":"Reveal in Finder","taskPage.fileTree.emptyHeading":"File tree unavailable","taskPage.fileTree.emptyBody":"Start task execution to view the worktree directory","taskPage.fileTree.emptyDir":"Empty directory","taskPage.fileTree.loadError":"Failed to load files. Try again.","taskPage.fileTree.renamePlaceholder":"Enter new name","taskPage.fileTree.newFilePlaceholder":"File name","taskPage.fileTree.newFolderPlaceholder":"Folder name","taskPage.fileTree.deleteConfirmHeading":"Confirm delete","taskPage.fileTree.deleteConfirmBody":'Delete "{name}"? This cannot be undone.',"taskPage.fileTree.deleteConfirmBodyFolder":'"{name}" and all its contents will be deleted.',"taskPage.fileTree.deleteConfirmAction":"Delete","taskPage.fileTree.searchPlaceholder":"Search files…","taskPage.fileTree.searchNoResults":"No matching files","taskPage.fileTree.errors.listDirectory":"Failed to load directory","taskPage.fileTree.errors.refresh":"Failed to refresh file tree","taskPage.fileTree.errors.rename":"Rename failed","taskPage.fileTree.errors.delete":"Delete failed","taskPage.fileTree.errors.createFile":"Failed to create file","taskPage.fileTree.errors.createFolder":"Failed to create folder","taskPage.fileTree.errors.listAll":"Failed to load file list","taskPage.fileTree.errors.reveal":"Could not reveal in file manager","taskPage.fileTree.errors.gitStatus":"Git status read failed","taskPage.fileTree.retryAction":"Retry","editor.selectFile":"Select a file to open","editor.selectFileHint":"Click any file in the file tree on the left","editor.saveSuccess":"File saved","editor.saveError":"Save failed, please try again","editor.closeTab":"Close tab","editor.diffTabSuffix":"(diff)","editor.noWorktree":"No worktree — run the task first","editor.extensionRequired":"Install the Monaco extension to view and edit files (Settings → Extensions)","simpleViewer.fallbackNotice":"Monaco not installed — plain-text read-only preview. Install for full editor.","simpleViewer.oversized":"File too large ({size}, limit {limit}) — preview unavailable","simpleViewer.binary":"Binary file — preview unavailable","diff.filesChanged":"{count} files changed","diff.additions":"+{count}","diff.deletions":"-{count}","diff.binary":"Binary","diff.truncated":"Diff truncated (too large)","diff.conflictWarning":"Merge blocked: conflicts detected","diff.conflictFiles":"{count} conflicting files","diff.commitChanges":"Commit Changes","diff.commitMessagePlaceholder":"First line is the title, blank line then description\n\ne.g.:\nfeat: add user authentication\n\nImplement JWT token verification and refresh","diff.commit":"Commit","diff.noChanges":"No changes detected","diff.commitSuccess":"Committed ({hash})","diff.patchTruncated":"Patch too large — showing first {n} of {total} lines","diff.openInDiffView":"Open in side-by-side view","diff.loadDiff":"Load diff","diff.foldedLarge":"Large diff was folded","diff.loadFailed":"Failed to load diff","diff.binaryNotShown":"Binary file — diff not shown","diff.retry":"Retry","merge.button":"Merge","merge.confirmTitle":"Confirm Squash Merge","merge.targetBranch":"Target branch","merge.changedFiles":"Changed files","merge.commitsToSquash":"Commits to squash","merge.commitMessage":"Commit message","merge.confirm":"Confirm Merge","merge.cancel":"Cancel","merge.merging":"Merging...","merge.success":"Merge completed successfully","merge.conflictError":"Cannot merge: conflicts detected","merge.failed":"Merge failed","project.type.label":"Project Type","project.type.frontend":"Frontend","project.type.backend":"Backend","project.previewCommand":"Preview Start Command","project.previewCommandPlaceholder":"e.g. pnpm dev","project.previewCommandDesc":"Command to start your local dev server","preview.run":"Run","preview.stop":"Stop","preview.openTerminal":"Open in Terminal","preview.refresh":"Refresh Preview","preview.back":"Back","preview.forward":"Forward","preview.previewEmpty":"Nothing to preview yet","preview.previewEmptyHint":"Click Run to start the dev server — the page will load here","preview.addressPlaceholder":"Enter local URL, press Enter to load","preview.noWorktree":"Preview Unavailable","preview.noWorktreeDesc":"Run a task to preview your frontend here","preview.statusStopped":"Stopped","preview.statusStarting":"Starting...","preview.statusRunning":"Running","preview.statusError":"Failed","preview.errorDesc":"Failed to start preview server. Check your start command.","preview.terminalError":"Cannot open terminal. Check terminal settings.","preview.port":"Port","preview.presetDetected":"Detected as","preview.presetUnknown":"Unknown","preview.presetReDetect":"Re-detect","preview.presetClear":"Clear","preview.presetSelect":"Select preset","preview.installPrompt":"Dependencies not detected.","preview.installNow":"Install now","preview.runAnyway":"Run anyway","preview.cancelInstall":"Cancel install","preview.statusInstalling":"Installing","preview.statusStopping":"Stopping...","preview.shareWith":"Shared with {count} other tasks","preview.stopConfirmTitle":"Stop preview?","preview.stopConfirmBody":"This will stop preview for {count} other open tabs.","preview.stopConfirmConfirm":"Stop","preview.cancel":"Cancel","preview.override":"Overridden","preview.resetOverride":"Reset","preview.resetOverrideHint":"Task-only override · click to restore default","preview.projectDefaultHint":"Project default","preview.sourceTask":"Task","preview.sourceProject":"Project","preview.sourcePreset":"Preset","preview.sourceTaskTip":"Task-level override (this task only)","preview.sourceProjectTip":"Project-level default","preview.sourcePresetTip":"Preset built-in default","preview.overridesLabel":"Overrides","preview.commandShort":"command","preview.portShort":"port","preview.taskOverrideLabel":"Task override","preview.taskOverrideResetHint":"Reset task-level override · command and port restore defaults","preview.syncToProject":"Sync to project","preview.syncToProjectHint":"Promote current task-level values to project defaults · other tasks under this project will use them too","preview.resetCurrent":"Reset","preview.resetCurrentTaskHint":"Clear task-level override · fall back to project / preset default","preview.resetCurrentProjectHint":"Clear project-level default · fall back to preset default","preview.logsLabel":"Logs","preview.logsClear":"Clear","preview.logsCopy":"Copy","preview.logsFullscreen":"Fullscreen","preview.portInUse":"Port {port} is in use","preview.noLocalPath":"Project localPath not configured, preview unavailable","settings.shell.label":"Default Shell","settings.shell.desc":"Shell for PTY terminal and AI CLI testing — uses your system shell with its aliases, plugins, etc.","settings.shell.winHint":"Claude Code requires Git Bash on Windows — select Git Bash as default","settings.terminal.label":"Terminal App","settings.terminal.desc":'GUI terminal app for "Open in Terminal"',"settings.terminal.placeholder":"Terminal","settings.editor.label":"Code Editor","settings.editor.desc":'Editor command for "Open in Editor"; leave empty to auto-pick the first detected',"settings.editor.placeholder":"code / cursor / subl ...","settings.app.notInstalled":"Not detected on this system — can't be selected; open an issue to request support","settings.editor.invalid":'Unsupported editor command "{cmd}" — not saved',"settings.terminal.idleTimeout":"Idle Timeout (seconds)","settings.terminal.idleTimeoutDesc":"How long before idle detection triggers after no terminal output (minimum 180s)","settings.cliProfile.title":"CLI Profile","settings.cliProfile.desc":"Configure AI CLI tool execution parameters","settings.cliProfile.navDesc":"CLI execution parameters","settings.cliProfile.command":"Command","settings.cliProfile.commandHint":"CLI executable name or path","settings.cliProfile.commandPlaceholder":"claude","settings.cliProfile.baseArgs":"Base Arguments","settings.cliProfile.baseArgsHint":"Arguments appended to every execution, one per line","settings.cliProfile.baseArgsPlaceholder":"--dangerously-skip-permissions","settings.cliProfile.envVars":"Environment Variables","settings.cliProfile.envVarsHint":"Environment variables injected into CLI process, format: KEY=VALUE, one per line","settings.cliProfile.envVarsPlaceholder":"MY_VAR=value","settings.cliProfile.saved":"CLI profile saved","settings.cliProfile.saveError":"Save failed","settings.cliProfile.invalidJson":"Invalid parameter format","settings.cliProfile.noProfile":"No default CLI profile found — run seed","terminal.connecting":"Connecting...","terminal.connected":"Connected","terminal.disconnected":"Disconnected","terminal.reconnecting":"Reconnecting...","terminal.noWorktree":"No Worktree","terminal.noWorktreeDesc":"Run the task first to start the terminal","terminal.execute":"Execute","terminal.executing":"Executing...","terminal.noPrompt":"Enter a prompt to execute","terminal.stopExecution":"Stop","terminal.stopHint":"Consider asking AI to commit before stopping","terminal.promptPlaceholder":"Enter task prompt...","terminal.launch":"Launch Terminal","terminal.startFailed":"Failed to launch terminal. Check the project local path and Git configuration.","terminal.readyToLaunch":"Click to launch terminal and start task execution","execution.success":"Success","execution.failed":"Failed","execution.running":"Running","execution.viewDetails":"Details","execution.noSummary":"No summary","execution.commits":"commits","execution.files":"files","execution.terminalOutput":"Terminal Output","execution.history":"Execution History","execution.gitLog":"Git Log","execution.loading":"Loading...","execution.noHistory":"No execution history","execution.resume":"Resume","execution.tryRecover":"Try Continue","execution.details":"Details","execution.collapse":"Collapse","execution.insight":"Insight","missions.navLabel":"Missions","missions.pageTitle":"Mission Control","missions.launchTask":"Launch Task","missions.emptyTitle":"No running tasks","missions.emptyDesc":'Click "Launch Task" to start an execution',"missions.gridPreset":"Layout","missions.stopTask":"Stop Task","missions.openFullView":"Open full view","missions.runningTime":"Running","missions.statusCompleted":"Completed","missions.statusStopped":"Stopped","missions.statusRunning":"Running","missions.dragHandle":"Drag to reorder","missions.openInTerminal":"Open in Terminal","missions.launcher.title":"Launch Task","missions.launcher.workspace":"Workspace","missions.launcher.project":"Project","missions.launcher.task":"Task","missions.launcher.selectWorkspace":"Select workspace","missions.launcher.selectProject":"Select project","missions.launcher.selectTask":"Select task","missions.launcher.launch":"Launch","missions.launcher.cancel":"Cancel","missions.launcher.noTasks":"No executable tasks","missions.error.launchFailed":"Failed to launch task","missions.error.stopFailed":"Failed to stop task","missions.filterAll":"All Workspaces","missions.alreadyMonitored":"Already monitored","missions.showMoreTasks":"Show more tasks...","missions.pickerTitle":"Select a task to launch","missions.pickerFooter":"Click Launch to start execution","missions.noAvailableTasks":"No available tasks","missions.continueSession":"Continue last session","missions.continueLabel":"Continue","missions.launchNew":"Start new terminal","missions.launchNewLabel":"New","missions.fullPickerTitle":"Select Task","missions.fullPickerHint":"Select a workspace and project to see tasks","missions.fullPicker.searchPlaceholder":"Search tasks by title…","missions.fullPicker.clearSearch":"Clear search","missions.fullPicker.noSearchResults":"No matching tasks","missions.gridCustom":"Custom","missions.gridCols":"Cols","missions.gridRows":"Rows","settings.config.missions.title":"Mission Control Layout","settings.config.missions.desc":"Configure min/max range for custom grid columns and rows","settings.config.missions.minCols":"Min Columns","settings.config.missions.maxCols":"Max Columns","settings.config.missions.minRows":"Min Rows","settings.config.missions.maxRows":"Max Rows","settings.config.hooks.title":"Hook Configuration","settings.config.hooks.desc":"Manage Claude Code PostToolUse hooks","settings.config.hooks.autoUploadTypes":"Auto-upload File Types","settings.config.hooks.autoUploadTypesHint":"Comma-separated file extensions","settings.config.hooks.install":"Install Hook","settings.config.hooks.uninstall":"Uninstall Hook","settings.config.hooks.installed":"Hook installed","settings.config.hooks.notInstalled":"Hook not installed","settings.config.hooks.installHint":"Once installed, files matching the configured types written by Claude Code will be auto-uploaded as task assets","assistant.title":"Tower Assistant","assistant.iconLabel":"Assistant","assistant.starting":"Starting...","assistant.errorTitle":"Session failed","assistant.errorBody":"Failed to start. Try again.","assistant.loading":"Loading...","assistant.emptyTitle":"What can I help you with?","assistant.emptyBody":"Type a message to start","assistant.copy":"Copy","assistant.suggestion.createProject":"Create a new project","assistant.suggestion.createTask":"Create a task","assistant.suggestion.checkProgress":"Check task progress","assistant.suggestion.dailySummary":"View today's work summary","assistant.inputPlaceholder":"Type a message, Enter to send, Shift+Enter for new line","assistant.sendLabel":"Send message","assistant.cancelLabel":"Cancel","assistant.thinking":"Thinking","assistant.toolLabel":"Tool","assistant.parseError":"Parse error","assistant.parseErrorBody":"Could not parse assistant output","assistant.closeLabel":"Close assistant","assistant.expandTool":"Expand tool call details","assistant.previewImage":"Preview image","assistant.removeImage":"Remove image","assistant.removeAttachment":"Remove attachment","assistant.addAttachment":"Add attachment (image or text)","assistant.attachmentLimitReached":"Attachment limit reached","assistant.dropToUpload":"Drop to upload","assistant.attachmentTypeImages":"Images","assistant.attachmentTypeText":"Text","assistant.brokenImage":"Image unavailable","assistant.imageCount":"image(s)","assistant.uploadFailed":"Upload failed","assistant.uploadFailedRemoveHint":"Upload failed — click x to remove","assistant.closePreview":"Close preview","assistant.inputPlaceholderWithImages":"Type a message or paste an image...","settings.assistant.title":"Assistant","settings.assistant.desc":"Configure assistant behavior","settings.assistant.communicationMode":"Communication Mode","settings.assistant.communicationModeDesc":"Choose how to interact with the assistant","settings.assistant.modeTerminal":"Terminal","settings.assistant.modeChat":"Chat","assistant.newSession":"New Session","assistant.sessionList":"Sessions","assistant.deleteSession":"Delete","assistant.noSessions":"No previous sessions","project.migrate":"Migrate to canonical path","project.migrateHint":"Move project folder to the location derived from Git path rules","project.targetPath":"Target Path","project.migrating":"Migrating...","project.migrateSuccess":"Project migrated to canonical path","project.migrateError":"Migration failed","project.samePathInfo":"Path is already canonical","project.migrateSafetyWarning":"Ensure no tasks are running before migration","project.worktreeWarning":"This project has active Git worktrees — migration will be blocked","project.genDesc":"Generate Description","project.analyzing":"Analyzing...","project.analyzeError":"Analysis failed, please retry","project.genDescDisabledTooltip":"Please select a path first","project.genDescNoPath":"Please enter an address first","project.genDescNotCloned":"Please clone the project first","project.genDescReady":"Generate description from local code","project.deleteTitle":"Delete Project","project.deleteWarning":'Are you sure you want to delete "{name}"?',"project.deleteIrreversible":"This action cannot be undone. All tasks and data will be permanently deleted.","project.deleteConfirmLabel":'Type "confirm delete" to confirm',"project.deleteConfirmPlaceholder":"confirm delete","project.deleteConfirmText":"confirm delete","project.deleteButton":"Delete Project","project.deleteSuccess":"Project deleted","project.deleteFailed":"Delete failed, please retry","taskDrawer.title":"Task Overview","taskDrawer.description":"Description","taskDrawer.labels":"Labels","taskDrawer.createdAt":"Created","taskDrawer.resources":"Resources","taskDrawer.lastExecution":"Last Execution","taskDrawer.noDescription":"No description","taskDrawer.noExecution":"No execution history","taskDrawer.fileChanges":"File changes","taskDrawer.noFileChanges":"No file changes","taskDrawer.duplicate":"Duplicate as new task","taskDrawer.duplicateSuccess":"Task duplicated","taskDrawer.duplicateFailed":"Failed to duplicate task","codeSearch.patternPlaceholder":"Search code (regex supported)","codeSearch.globPlaceholder":"File filter, e.g. *.ts","codeSearch.noPath":"Please configure local path first","codeSearch.searching":"Searching...","codeSearch.noResults":"No matches found","codeSearch.truncated":"Showing first 200 results","codeSearch.hint":"Type a keyword and press Enter to search","codeSearch.errors.timeout":"Search timed out","codeSearch.errors.not_installed":"ripgrep not installed","codeSearch.errors.permission_denied":"Permission denied","codeSearch.errors.aborted":"Aborted","codeSearch.errors.unknown":"Search failed","codeSearch.cancel":"Cancel","codeSearch.cancelled":"Search cancelled","codeSearch.errorBanner.viewFull":"View full error","codeEditor.fileGuard.oversizedTitle":"File too large","codeEditor.fileGuard.oversizedBody":"File size {size} exceeds limit {limit}. Opening may freeze the browser.","codeEditor.fileGuard.binaryTitle":"Binary file","codeEditor.fileGuard.binaryBody":"Binary content detected; UTF-8 decoding will produce garbled text.","codeEditor.fileGuard.forceOpenAction":"Force open (UTF-8)","codeEditor.fileGuard.forceOpenWarning":"Force-opened — content may be garbled or slow","codeEditor.readError":"Failed to read file","codeEditor.retryAction":"Retry","git.discardFile":"Discard file changes","git.discardFileSuccess":"File changes discarded","settings.notifications.title":"Notifications","settings.notifications.desc":"Task completion alerts","settings.notifications.navDesc":"Desktop and toast alerts","settings.notifications.enable":"Task Completion Notifications","settings.notifications.enableDesc":"Show a desktop notification or toast when a task finishes executing","settings.backup.title":"Data Management","settings.backup.desc":"Backup, restore & reset","settings.backup.navDesc":"Backup data, restore archives, reset system","settings.backup.sectionTitle":"Backup & Restore","settings.backup.dir":"Backup directory","settings.backup.dirChange":"Change","settings.backup.dirPlaceholder":"Enter absolute path","settings.backup.dirSaved":"Backup directory updated","settings.backup.dirError":"Invalid path, must be an absolute path within home directory","settings.backup.create":"Create Backup","settings.backup.createLabel":"Backup name (optional)","settings.backup.createLabelPlaceholder":"e.g. Pre-release backup","settings.backup.creating":"Creating backup...","settings.backup.createSuccess":"Backup created successfully","settings.backup.createError":"Failed to create backup","settings.backup.import":"Import Backup","settings.backup.importHint":"Only backups from this computer are supported (project paths differ across machines)","settings.backup.importSuccess":"Backup imported","settings.backup.importError":"Import failed","settings.backup.importInvalid":"Invalid backup file","settings.backup.restore":"Restore","settings.backup.restoring":"Restoring data...","settings.backup.restoreConfirm":"Restore from this archive? Current data will be auto-backed up first.","settings.backup.restoreSuccess":"Data restored. Please reload the page.","settings.backup.restoreError":"Restore failed","settings.backup.delete":"Delete","settings.backup.deleteConfirm":"Delete this archive? This cannot be undone.","settings.backup.deleteSuccess":"Backup deleted","settings.backup.deleteError":"Delete failed","settings.backup.empty":"No backups yet","settings.backup.emptyDesc":'Click "Create Backup" to back up current data',"settings.backup.autoLabel":"Auto backup","settings.backup.projects":"{count} projects","settings.backup.tasks":"{count} tasks","settings.backup.workspaces":"{count} workspaces total","settings.backup.reloadRequired":"Please reload to apply restored data","settings.backup.reload":"Reload Now","settings.backup.dangerZone":"Danger Zone","settings.backup.resetDesc":"Reset clears all data (database, assets, config), keeping only backup archives. A backup is created automatically before reset.","settings.backup.reset":"Reset System","settings.backup.resetConfirmTitle":"Confirm System Reset?","settings.backup.resetConfirmDesc":"This cannot be undone. All data will be erased, only archives are kept.","settings.backup.resetConfirmInput":"Type RESET to confirm","settings.backup.resetting":"Resetting system...","settings.backup.resetSuccess":"System has been reset","settings.backup.resetError":"Reset failed","settings.backup.operationInProgress":"Another backup operation is in progress","notification.permissionPrompt":"Allow Tower to send desktop notifications when tasks complete","notification.allow":"Allow","notification.dismiss":"Dismiss","notification.taskCompleted":"Task completed","notification.taskFailed":"Task failed","onboarding.title":"Welcome to Tower","onboarding.step1.title":"Set Your Username","onboarding.step1.desc":"Enter your username — the AI assistant will address you by this name","onboarding.step1.usernamePlaceholder":"Enter username","onboarding.step1.usernameLabel":"Username","onboarding.step1.next":"Next","onboarding.step2.title":"AI Connection Test","onboarding.step2.desc":"Test connectivity with AI adapters to ensure tasks can be dispatched and executed","onboarding.cliRequired":"Claude CLI must be installed and configured to continue. Please refer to the documentation.","onboarding.complete":"Complete Setup","onboarding.skip":"Skip","onboarding.back":"Back","onboarding.step3.title":"Configure Git Path Rules","onboarding.step3.desc":"Set up mapping rules between Git repository URLs and local paths — local paths will be auto-generated when creating Git projects","onboarding.step3.addFirst":"Add First Rule","onboarding.step3.noRules":"No rules configured yet — you'll need to enter local paths manually when creating Git projects","onboarding.step3.hostLabel":"Git Host","onboarding.step3.hostPlaceholder":"e.g. github.com","onboarding.step3.ownerLabel":"Owner Match","onboarding.step3.ownerPlaceholder":"* for all, or specific username","onboarding.step3.pathLabel":"Local Base Path","onboarding.step3.pathPlaceholder":"e.g. /Users/you/project","onboarding.step3.pathHint":"Variables: {path}=full path, {owner}=first segment, {repo}=repo name. Without variables, repo name is auto-appended","onboarding.step3.pathHintRepo":"Repository name is auto-appended to the path","onboarding.step3.pathHintFull":"Preserves full subgroup path (for GitLab nested groups)","onboarding.step3.added":"{count} rule(s) added","onboarding.step3.exampleTitle":"Example","onboarding.step3.exampleCase1":"Rule: host github.com, path ~/project → result ~/project/my-app","onboarding.step3.exampleCase2":"Rule: host gitlab.com, path ~/company/{path} → result ~/company/team/group/my-app","onboarding.step3.exampleDesc":"When creating a project with a Git URL, the local path is auto-filled. Use {path} to preserve full subgroup structure.","onboarding.step3.previewLabel":"Test Preview","onboarding.step3.previewPlaceholder":"Paste a Git URL to preview the result","onboarding.step3.previewNoMatch":"Cannot parse this URL","onboarding.step4.title":"Enable extensions (optional)","onboarding.step4.desc":"These extensions unlock file viewing and code search. Install once, shared across all projects.","onboarding.step4.skipHint":"Skipped extensions can be enabled later in Settings → Extensions.","onboarding.step4.installing":"Installing...","onboarding.step4.continue":"Finish","onboarding.step4.continueWithoutInstall":"Skip and finish","onboarding.stepIndicator":"Step {current}/{total}","onboarding.welcomeCta":"Create your first workspace to get started","onboarding.createWorkspace":"Create Workspace","onboarding.defaultWorkspaceName":"My Workspace","tour.step1.title":"Create Workspace","tour.step1.desc":"Workspaces are the top-level organizer. Click here to create your first workspace.","tour.step2.title":"Create Project","tour.step2.desc":"Projects belong to workspaces. Click here to create or import a project linked to your code repository.","tour.step3.title":"Open AI Assistant","tour.step3.desc":"The AI assistant helps you manage tasks and projects. Click here to start a conversation anytime.","tour.skip":"Skip tour","tour.next":"Next","tour.done":"Done","aiConfig.title":"AI Capability Config","aiConfig.description":"Configure provider and model for each AI feature independently","aiConfig.terminal":"Terminal Execution","aiConfig.summary":"Session Summary","aiConfig.dreaming":"Knowledge Distillation","aiConfig.analysis":"Project Analysis","aiConfig.assistant":"Assistant Chat","aiConfig.provider":"Provider","aiConfig.mode":"Mode","aiConfig.model":"Model","aiConfig.cli":"CLI (Subscription)","aiConfig.api":"API (Pay-per-use)","aiConfig.default":"Default","aiConfig.notConfigured":"Not configured","aiConfig.cliNotFound":"CLI not installed","aiConfig.apiKeyMissing":"API key not configured","aiConfig.saved":"Saved","extensions.notInstalled.title":"Extension not installed","extensions.notInstalled.desc":"Install this extension to enable the feature","settings.extensions.title":"Extensions","settings.extensions.navDesc":"Manage optional extensions","settings.extensions.desc":"Optional extensions that enable search / editor features. Install once, shared across all projects; skipping them won't affect core functionality.","settings.extensions.installed":"Installed","settings.extensions.notInstalledShort":"Not installed","settings.extensions.install":"Install","settings.extensions.installing":"Installing...","settings.extensions.reinstall":"Reinstall","settings.extensions.reinstalling":"Reinstalling...","settings.extensions.uninstall":"Uninstall","settings.extensions.uninstalling":"Uninstalling...","settings.extensions.recheck":"Recheck","settings.extensions.visitHomepage":"Visit homepage","settings.extensions.installViaHomepage":"Install from homepage","settings.extensions.manualInstallHintIntro":"Native binary — cross-platform auto-download is unreliable. Install via your OS package manager:","settings.extensions.manualInstallHintAfter":'Then click "Recheck", or restart Tower so the new PATH is picked up.',"settings.extensions.installSuccess":"Installed {name}","settings.extensions.installFailed":"Failed to install {name}","settings.extensions.uninstallSuccess":"Uninstalled {name}","settings.extensions.uninstallFailed":"Failed to uninstall {name}","git.hoverParentsLabel":"Parents","git.hoverRefsLabel":"Refs","git.noCommits":"No commits","git.commitFiles":"Files in commit","git.tabGraph":"Graph","git.commitDiff":"Commit diff","git.hoverHashLabel":"Hash","git.hoverAuthorLabel":"Author","git.hoverDateLabel":"Date","git.commitMenuCheckout":"Checkout","git.commitMenuCreateBranch":"Create branch from here","git.commitMenuCreateTag":"Create tag...","git.commitMenuCherryPick":"Cherry-pick","git.commitMenuRevert":"Revert","git.commitMenuReset":"Reset to here","git.commitMenuResetSoft":"Soft (keep index + worktree)","git.commitMenuResetMixed":"Mixed (keep worktree, reset index)","git.commitMenuResetHard":"Hard (discard everything)","git.commitMenuAmend":"Amend message...","git.commitMenuCopyHash":"Copy hash","git.commitMenuCopyShort":"Copy short hash","git.commitResetHardConfirm":'Discard ALL working changes since "{subject}"? This cannot be undone.',"git.tagNamePlaceholder":"e.g. v1.0.0","git.tagMessagePlaceholder":"Optional message (annotated tag)","git.amendMessageDialogTitle":"Amend commit message","version.timeline":"Version Timeline","version.new":"New Version","version.edit":"Edit Version","version.release":"Release","version.releaseAction":"Release Version","version.current":"Current · default","version.currentShort":"Current","version.backlog":"Backlog","version.history":"History","version.historySub":"Tasks not assigned to any version","version.historyHint":"Tasks created before versioning; archived here, can be assigned to a version.","version.tasksCount":"tasks","version.doneCount":"done","version.allDone":"All done","version.type.FEATURE":"Feature","version.type.BUGFIX":"Bugfix","version.type.RESEARCH":"Research","version.type.uncategorized":"Uncategorized","version.manageTypes":"Manage Types","version.type.namePlaceholder":"Type name","version.type.add":"Add type","version.type.empty":"No types yet","version.type.deleteConfirm":"Delete this type? Versions using it become uncategorized.","version.status.PLANNED":"Planned","version.status.ACTIVE":"Active","version.status.RELEASED":"Released","version.field.number":"Number","version.field.name":"Name","version.field.type":"Type","version.field.baseBranch":"Base branch","version.field.baseCommit":"Base","version.field.noBranch":"No base branch","version.field.startDate":"Start date","version.field.targetDate":"Target date","version.field.description":"Description","version.field.setCurrent":"Set as current version","version.placeholder.number":"e.g. v1.1","version.placeholder.name":"Version name","version.diff.view":"View version diff","version.diff.files":"files","version.diff.live":"live","version.release.rolloverHint":"Unfinished tasks will roll over to the new current version","version.release.nextVersion":"Next current version","version.release.noCandidates":"Create a PLANNED or ACTIVE version first to use as the rollover target","version.resources":"Resources","version.notes":"Notes","version.empty.resources":"No resources","version.empty.notes":"No notes","version.empty.list":'No versions yet — click "New Version" to start',"version.releasedAt":"Released","version.picker.label":"Version","version.picker.none":"No version (Backlog)","version.picker.empty":"This project has no versions yet — create one in the Version Timeline first","version.diff.title":"Version Diff","version.diff.empty":"No code changes in this version","version.diff.loading":"Loading diff…","version.diff.truncated":"Truncated — view full diff in the Git tab","version.taskStatus.TODO":"To Do","version.taskStatus.IN_PROGRESS":"In Progress","version.taskStatus.IN_REVIEW":"In Review","version.taskStatus.DONE":"Done","version.taskStatus.CANCELLED":"Cancelled","version.detail":"Detail","common.copy":"Copy","common.copied":"Copied","common.copyFailed":"Copy failed"}},a=(0,s.createContext)(null);e.s(["I18nProvider",0,function({children:e}){let[o,n]=(0,s.useState)("zh");(0,s.useEffect)(()=>{let e=localStorage.getItem("locale");e&&e!==o&&n(e)},[]);let r=(0,s.useCallback)(e=>{n(e),localStorage.setItem("locale",e)},[]),l=(0,s.useCallback)((e,t)=>{let s=i[o][e]??e;if(t)for(let[e,i]of Object.entries(t))s=s.replace(`{${e}}`,i);return s},[o]);return(0,t.jsx)(a.Provider,{value:{locale:o,setLocale:r,t:l},children:e})},"useI18n",0,function(){let e=(0,s.useContext)(a);if(!e)throw Error("useI18n must be used within I18nProvider");return e}],533499)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,254826,309735,e=>{"use strict";var t=e.i(990216);e.s([],254826),e.s(["Streamdown",()=>t.C],309735)},259846,e=>{"use strict";let t=(0,e.i(572989).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeft",0,t],259846)},685149,e=>{"use strict";e.s(["BOARD_COLUMNS",0,[{id:"TODO",label:"To Do",color:"bg-slate-400"},{id:"IN_PROGRESS",label:"In Progress",color:"bg-amber-400"},{id:"IN_REVIEW",label:"In Review",color:"bg-sky-400"},{id:"DONE",label:"Done",color:"bg-emerald-400"},{id:"CANCELLED",label:"Cancelled",color:"bg-rose-400"}],"NOTE_CATEGORIES_PRESET",0,["账号","环境","需求","备忘"],"PRIORITY_CONFIG",0,{LOW:{label:"低",color:"bg-slate-500/20 text-slate-300 border border-slate-500/30"},MEDIUM:{label:"中",color:"bg-amber-500/20 text-amber-300 border border-amber-500/30"},HIGH:{label:"高",color:"bg-orange-500/20 text-orange-300 border border-orange-500/30"},CRITICAL:{label:"紧急",color:"bg-rose-500/20 text-rose-300 border border-rose-500/30"}},"TOWER_LABEL_NAME",0,"Tower"])},762743,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("409ca80d5f29278e476dbb6aa42bbfbc1a6caaa8ef",t.callServer,void 0,t.findSourceMapURL,"openInTerminal");e.s(["openInTerminal",0,r])},567860,e=>{"use strict";let t=(0,e.i(572989).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);e.s(["Terminal",0,t],567860)},35967,e=>{"use strict";var t=e.i(289721);let r=(0,e.i(572989).default)("milestone",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M12 3v3",key:"1n5kay"}],["path",{d:"M18.172 6a2 2 0 0 1 1.414.586l2.06 2.06a1.207 1.207 0 0 1 0 1.708l-2.06 2.06a2 2 0 0 1-1.414.586H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z",key:"8gz4t4"}]]);var a=e.i(533499);let s=["bg-sky-500/20 text-sky-300 border border-sky-500/30","bg-amber-500/20 text-amber-300 border border-amber-500/30","bg-violet-500/20 text-violet-300 border border-violet-500/30","bg-emerald-500/20 text-emerald-300 border border-emerald-500/30","bg-rose-500/20 text-rose-300 border border-rose-500/30","bg-cyan-500/20 text-cyan-300 border border-cyan-500/30","bg-indigo-500/20 text-indigo-300 border border-indigo-500/30"];function l(e){return s[function(e){let t=0;for(let r=0;r<e.length;r++)t=31*t+e.charCodeAt(r)>>>0;return t}(e)%s.length]}let n={PLANNED:"bg-slate-500/20 text-slate-300 border border-slate-500/30",ACTIVE:"bg-emerald-500/20 text-emerald-300 border border-emerald-500/30",RELEASED:"bg-zinc-500/20 text-zinc-400 border border-zinc-500/30"};e.s(["TaskVersionTag",0,function({number:e,name:a,showName:s=!1,className:l="",title:n}){return(0,t.jsxs)("span",{className:`inline-flex items-center gap-1 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground ${l}`,title:n??(a?`${e} \xb7 ${a}`:e),children:[(0,t.jsx)(r,{className:"h-2.5 w-2.5 shrink-0"}),(0,t.jsx)("span",{className:"font-mono",children:e}),s&&a?(0,t.jsx)("span",{className:"max-w-[140px] truncate",children:a}):null]})},"VersionStatusBadge",0,function({status:e}){let{t:r}=(0,a.useI18n)();return(0,t.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${n[e]}`,children:r(`version.status.${e}`)})},"VersionTypeBadge",0,function({name:e}){let{t:r}=(0,a.useI18n)();return e?(0,t.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${l(e)}`,children:e}):(0,t.jsx)("span",{className:"inline-flex items-center rounded-full border border-border bg-muted/40 px-2 py-0.5 text-xs font-medium text-muted-foreground",children:r("version.type.uncategorized")})},"typeBadgeColor",0,l],35967)},736061,460707,e=>{"use strict";var t=e.i(572989);let r=(0,t.default)("folder-search",[["path",{d:"M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1",key:"1bw5m7"}],["path",{d:"m21 21-1.9-1.9",key:"1g2n9r"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}]]);e.s(["FolderSearch",0,r],736061);let a=(0,t.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);e.s(["Code",0,a],460707)},743232,439825,12659,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("402376b2c0dff0c4744ac8616fa45922d6af026901",t.callServer,void 0,t.findSourceMapURL,"openInFileManager");e.s(["openInFileManager",0,r],743232);let a=(0,t.createServerReference)("4049f7b8d850ad3c80f153b6d31beb75562548e4a7",t.callServer,void 0,t.findSourceMapURL,"openInEditor");e.s(["openInEditor",0,a],439825);let s=(0,e.i(572989).default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["PlayCircle",0,s],12659)},759686,e=>{"use strict";var t=e.i(567098);e.s(["AlertTriangle",()=>t.default])},618435,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("4074514d6d29b03eeff1e473e379339b6cb0956f9d",t.callServer,void 0,t.findSourceMapURL,"getPrompts");e.s(["getPrompts",0,r])},960518,e=>{"use strict";let t=(0,e.i(572989).default)("git-compare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);e.s(["GitCompare",0,t],960518)},340873,e=>{"use strict";let t=(0,e.i(572989).default)("git-commit-horizontal",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);e.s(["GitCommitHorizontal",0,t],340873)},301348,181209,e=>{"use strict";var t=e.i(59737);e.s(["CheckCircle2",()=>t.default],301348);let r=(0,e.i(572989).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",0,r],181209)},475958,e=>{"use strict";let t=(0,e.i(572989).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["ExternalLink",0,t],475958)},852724,400924,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("401482176670fe2c5adc544803137e8a2f07829723",t.callServer,void 0,t.findSourceMapURL,"createNote");e.s(["createNote",0,r],852724);let a=(0,t.createServerReference)("4010de1a930f61664169527530d8ca052f720b40bd",t.callServer,void 0,t.findSourceMapURL,"deleteNote");e.s(["deleteNote",0,a],400924)},313029,e=>{"use strict";let t=(0,e.i(572989).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);e.s(["Square",0,t],313029)},340966,e=>{"use strict";let t=(0,e.i(572989).default)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);e.s(["ClipboardList",0,t],340966)},744942,596741,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("406376c3fb81b1ee54166a615a3f1a8f99109d233f",t.callServer,void 0,t.findSourceMapURL,"stopPtyExecution");e.s(["stopPtyExecution",0,r],744942);let a=(0,t.createServerReference)("6013f12ade41b0b662255ff65a2159ad657f591a65",t.callServer,void 0,t.findSourceMapURL,"resumePtyExecution");e.s(["resumePtyExecution",0,a],596741)},455076,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("7c2c02f8d36822f8250e71ea82327a52e0d8932e0c",t.callServer,void 0,t.findSourceMapURL,"startPtyExecution");e.s(["startPtyExecution",0,r])},368490,e=>{"use strict";var t=e.i(776405);e.s(["ChevronRight",()=>t.default])},922541,e=>{"use strict";let t=(0,e.i(572989).default)("rotate-ccw",[["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"}]]);e.s(["RotateCcw",0,t],922541)},912505,e=>{"use strict";var t=e.i(289721),r=e.i(975157);e.s(["EmptyState",0,function({icon:e,title:a,description:s,action:l,className:n}){return(0,t.jsxs)("div",{className:(0,r.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",n),children:[e&&(0,t.jsx)(e,{className:"h-10 w-10 text-muted-foreground/40"}),(0,t.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:a}),s&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground/60",children:s}),l&&(0,t.jsx)("div",{className:"mt-2",children:l})]})}])},867533,e=>{"use strict";let t=(0,e.i(572989).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",0,t],867533)},631675,e=>{"use strict";let t=(0,e.i(572989).default)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);e.s(["Upload",0,t],631675)},19671,e=>{"use strict";let t=(0,e.i(572989).default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);e.s(["ChevronLeft",0,t],19671)},4433,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("40efc629ce210a8f4a1b9f6a7b0d0882678875fb95",t.callServer,void 0,t.findSourceMapURL,"uploadAsset");e.s(["uploadAsset",0,r])},898861,e=>{"use strict";var t=e.i(514798);let r=(0,t.createServerReference)("40a7ab81b3a70ee050abb5fee1d53f0fcbecb4f85a",t.callServer,void 0,t.findSourceMapURL,"deleteAsset");e.s(["deleteAsset",0,r])},235357,144640,e=>{"use strict";var t=e.i(289721),r=e.i(965652),a=e.i(585012),s=e.i(657153),l=e.i(19671),n=e.i(368490),i=e.i(902539);let o=(0,e.i(572989).default)("chevrons-right",[["path",{d:"m6 17 5-5-5-5",key:"xnjwq"}],["path",{d:"m13 17 5-5-5-5",key:"17xmmf"}]]);var c=e.i(922541),d=e.i(533499);function u({children:e,onClick:r,title:a,disabled:s,...l}){return(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),s||r()},title:a,disabled:s,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-white/80 hover:bg-white/15 hover:text-white disabled:opacity-30 disabled:hover:bg-transparent disabled:hover:text-white/80 transition-colors",...l,children:e})}e.s(["ImageLightbox",0,function({imageUrl:e,filename:x,open:h,onOpenChange:f,assets:b,currentIndex:p,onIndexChange:m}){let{t:g}=(0,d.useI18n)(),[v,y]=(0,r.useState)(1),[k,w]=(0,r.useState)({x:0,y:0}),[j,N]=(0,r.useState)(!1),S=(0,r.useRef)(null),[C,M]=(0,r.useState)(!1),E=!!b&&b.length>1&&"number"==typeof p&&!!m,R=E&&p>0,L=E&&p<b.length-1,P=E?b.length:0,I=P>0?Math.ceil(P/10):0,T=E?Math.floor(p/10):0,A=10*T,O=Math.min(A+10,P),z=I>1,D=E&&T>0,$=E&&T<I-1;(0,r.useEffect)(()=>{M(!0)},[]),(0,r.useEffect)(()=>{y(1),w({x:0,y:0})},[e]),(0,r.useEffect)(()=>{if(!h)return;let e=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=e}},[h]);let U=(0,r.useCallback)(()=>f(!1),[f]),_=(0,r.useCallback)(()=>{E&&R&&m(p-1)},[E,R,m,p]),H=(0,r.useCallback)(()=>{E&&L&&m(p+1)},[E,L,m,p]),q=(0,r.useCallback)(()=>{E&&D&&m((T-1)*10)},[E,D,m,T]),V=(0,r.useCallback)(()=>{E&&$&&m(Math.min((T+1)*10,P-1))},[E,$,m,T,P]),G=(0,r.useCallback)(()=>{y(e=>Math.min(8,1.25*e))},[]),F=(0,r.useCallback)(()=>{y(e=>{let t=Math.max(.1,e/1.25);return t<=1&&w({x:0,y:0}),t})},[]),B=(0,r.useCallback)(()=>{y(1),w({x:0,y:0})},[]);(0,r.useEffect)(()=>{if(!h)return;let e=e=>{switch(e.key){case"Escape":e.preventDefault(),U();break;case"ArrowLeft":E&&(e.preventDefault(),_());break;case"ArrowRight":E&&(e.preventDefault(),H());break;case"+":case"=":e.preventDefault(),G();break;case"-":case"_":e.preventDefault(),F();break;case"0":e.preventDefault(),B()}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[h,E,U,_,H,G,F,B]);let X=(0,r.useRef)(!1),Y=()=>{j&&N(!1),S.current=null},W=j?"cursor-grabbing":"cursor-grab";if(!h||!C)return null;let J=(0,t.jsxs)("div",{className:"fixed inset-0 z-[100] bg-black/70 dark:bg-black/40 backdrop-blur-md",role:"dialog","aria-modal":"true","aria-label":g("assets.lightbox.zoomFit"),children:[(0,t.jsxs)("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 max-w-[80vw] truncate rounded-md bg-black/40 px-3 py-1 text-xs text-white/80 backdrop-blur-sm pointer-events-none",children:[x,E?` \xb7 ${p+1} / ${b.length}`:""]}),(0,t.jsx)("div",{className:`absolute inset-0 flex items-center justify-center overflow-hidden select-none ${W}`,onClick:e=>{e.target===e.currentTarget&&U()},onWheel:e=>{e.preventDefault();let t=-e.deltaY>0?1.25:.8;y(e=>{let r=Math.min(8,Math.max(.1,e*t));return r<=1&&w({x:0,y:0}),r})},children:e&&(0,t.jsx)("img",{src:e,alt:x,onClick:e=>{e.stopPropagation(),X.current&&(X.current=!1)},onPointerDown:e=>{0===e.button&&(e.stopPropagation(),X.current=!1,e.target.setPointerCapture?.(e.pointerId),S.current={x:e.clientX,y:e.clientY,panX:k.x,panY:k.y},N(!0))},onPointerMove:e=>{if(!S.current)return;let t=e.clientX-S.current.x,r=e.clientY-S.current.y;Math.abs(t)+Math.abs(r)>5&&(X.current=!0),j&&w({x:S.current.panX+t,y:S.current.panY+r})},onPointerUp:Y,onPointerLeave:Y,onPointerCancel:Y,className:"max-h-[88vh] max-w-[92vw] object-contain pointer-events-auto",style:{transform:`translate3d(${k.x}px, ${k.y}px, 0) scale(${v})`,transformOrigin:"center center",transition:j?"none":"transform 120ms ease-out",willChange:j?"transform":"auto"},draggable:!1})}),(0,t.jsxs)("div",{className:"absolute bottom-4 left-1/2 -translate-x-1/2 z-10 flex flex-col items-center gap-2 max-w-[92vw]",onClick:e=>e.stopPropagation(),children:[E&&(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-lg bg-black/50 px-1.5 py-1.5 backdrop-blur-md ring-1 ring-white/10 max-w-[92vw]",children:[z&&(0,t.jsx)(u,{onClick:q,title:`${g("assets.lightbox.prev")} (-10)`,"aria-label":`${g("assets.lightbox.prev")} (-10)`,disabled:!D,children:(0,t.jsx)(i.ChevronsLeft,{className:"h-4 w-4"})}),(0,t.jsx)(u,{onClick:_,title:g("assets.lightbox.prev"),"aria-label":g("assets.lightbox.prev"),disabled:!R,children:(0,t.jsx)(l.ChevronLeft,{className:"h-4 w-4"})}),(0,t.jsx)("div",{className:"flex items-center gap-1.5",children:b.slice(A,O).map((e,r)=>{let a=A+r,s=a===p;return(0,t.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),s||m(a)},title:e.filename,className:`shrink-0 h-12 w-12 overflow-hidden rounded-md transition-all ${s?"ring-2 ring-white opacity-100 scale-105":"opacity-60 hover:opacity-100 ring-1 ring-white/20"}`,children:(0,t.jsx)("img",{src:e.url,alt:e.filename,className:"h-full w-full object-cover",loading:"lazy",draggable:!1})},e.url+a)})}),(0,t.jsx)(u,{onClick:H,title:g("assets.lightbox.next"),"aria-label":g("assets.lightbox.next"),disabled:!L,children:(0,t.jsx)(n.ChevronRight,{className:"h-4 w-4"})}),z&&(0,t.jsx)(u,{onClick:V,title:`${g("assets.lightbox.next")} (+10)`,"aria-label":`${g("assets.lightbox.next")} (+10)`,disabled:!$,children:(0,t.jsx)(o,{className:"h-4 w-4"})})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1 rounded-lg bg-black/50 px-2 py-1.5 backdrop-blur-md ring-1 ring-white/10",children:[(0,t.jsxs)("span",{className:"px-2 text-xs text-white/80 tabular-nums select-none min-w-12 text-center",children:[Math.round(100*v),"%"]}),(0,t.jsx)(u,{onClick:B,title:g("assets.lightbox.reset"),"aria-label":g("assets.lightbox.reset"),disabled:1===v&&0===k.x&&0===k.y,children:(0,t.jsx)(c.RotateCcw,{className:"h-4 w-4"})}),(0,t.jsx)("div",{className:"mx-1 h-5 w-px bg-white/20"}),(0,t.jsx)(u,{onClick:U,title:g("assets.lightbox.close"),"aria-label":g("assets.lightbox.close"),children:(0,t.jsx)(s.X,{className:"h-4 w-4"})})]})]})]});return(0,a.createPortal)(J,document.body)}],235357);var x=e.i(400355);e.i(254826);var h=e.i(309735),f=e.i(776639);e.s(["TextPreviewDialog",0,function({url:e,filename:a,open:s,onOpenChange:l}){let{t:n}=(0,d.useI18n)(),[i,o]=(0,r.useState)(null),[c,u]=(0,r.useState)(!1),[b,p]=(0,r.useState)(null);(0,r.useEffect)(()=>{if(!s||!e){o(null),p(null);return}let t=!1;return u(!0),p(null),o(null),fetch(e).then(e=>{let t=e.headers.get("content-length");if(t&&parseInt(t,10)>1048576)throw Error("FILE_TOO_LARGE");return e.text()}).then(e=>{if(e.length>1048576)throw Error("FILE_TOO_LARGE");t||(o(e),u(!1))}).catch(e=>{t||(e instanceof Error&&"FILE_TOO_LARGE"===e.message?p(n("assets.fileTooLarge")):p(n("assets.previewError")),u(!1))}),()=>{t=!0}},[s,e,n]);let m=a.split(".").pop()?.toLowerCase();return(0,t.jsx)(f.Dialog,{open:s,onOpenChange:l,children:(0,t.jsxs)(f.DialogContent,{className:"w-[min(960px,92vw)] max-w-none sm:max-w-none h-[85vh] max-h-[85vh] flex flex-col p-0 gap-0",children:[(0,t.jsx)("h3",{className:"text-sm font-medium truncate px-5 py-3 border-b border-border/50",children:a}),(0,t.jsx)("div",{className:"flex-1 overflow-auto px-5 py-4",children:(()=>{if(c)return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 gap-2",children:[(0,t.jsx)(x.Loader2,{className:"size-5 animate-spin text-muted-foreground"}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:n("assets.loadingPreview")})]});if(b)return(0,t.jsx)("p",{className:"text-sm text-destructive",children:b});if(null===i)return null;if("md"===m)return(0,t.jsx)("div",{className:"text-sm leading-relaxed",children:(0,t.jsx)(h.Streamdown,{children:i})});if("json"===m){let e;try{e=JSON.stringify(JSON.parse(i),null,2)}catch{e=i}return(0,t.jsx)("pre",{className:"font-mono text-xs whitespace-pre-wrap text-foreground",children:e})}return(0,t.jsx)("pre",{className:"font-mono text-sm whitespace-pre-wrap text-foreground",children:i})})()})]})})}],144640)},937304,e=>{"use strict";let t=new Set(["png","jpg","jpeg","gif","webp","svg","bmp","ico","avif","apng"]);e.s(["isImageAsset",0,function(e,r){if(r?.startsWith("image/"))return!0;let a=e.split(".").pop()?.toLowerCase();return!!a&&t.has(a)},"localPathToApiUrl",0,function(e){let t=e.match(/(?:^|\/)(?:storage|data)\/assets\/([^/]+)\/([^/]+)$/);return t?`/api/files/assets/${t[1]}/${t[2]}`:e}])},244455,e=>{e.v(t=>Promise.all(["static/chunks/075e-zs_kgc_g.js"].map(t=>e.l(t))).then(()=>t(629495)))},800307,e=>{e.v(t=>Promise.all(["static/chunks/0zm4fvu.lntrp.js"].map(t=>e.l(t))).then(()=>t(267483)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,245697,e=>{"use strict";let t=(0,e.i(572989).default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);e.s(["Package",0,t],245697)},922541,e=>{"use strict";let t=(0,e.i(572989).default)("rotate-ccw",[["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"}]]);e.s(["RotateCcw",0,t],922541)},631675,e=>{"use strict";let t=(0,e.i(572989).default)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);e.s(["Upload",0,t],631675)},301348,181209,e=>{"use strict";var t=e.i(59737);e.s(["CheckCircle2",()=>t.default],301348);let a=(0,e.i(572989).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",0,a],181209)},475958,e=>{"use strict";let t=(0,e.i(572989).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["ExternalLink",0,t],475958)},618435,e=>{"use strict";var t=e.i(514798);let a=(0,t.createServerReference)("4074514d6d29b03eeff1e473e379339b6cb0956f9d",t.callServer,void 0,t.findSourceMapURL,"getPrompts");e.s(["getPrompts",0,a])},759686,e=>{"use strict";var t=e.i(567098);e.s(["AlertTriangle",()=>t.default])},991838,e=>{"use strict";var t=e.i(965652),a=e.i(770303);e.s(["useExtension",0,function(e){let s=(0,t.useContext)(a.ExtensionContext);if(!s)throw Error("useExtension must be used inside <ExtensionProvider>");return{status:s.statusMap[e],loading:s.loading,isInstalling:s.installing.has(e),install:()=>s.install(e),uninstall:()=>s.uninstall(e),refresh:()=>s.refresh(e)}}])}]);