tower-studio 0.2.7 → 0.2.9

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 (247) 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 -3
  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/react-loadable-manifest.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +47 -47
  13. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/api/adapters/test/route.js +3 -2
  24. package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +1 -1
  28. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +1 -1
  29. package/.next/standalone/.next/server/app/index.html +1 -1
  30. package/.next/standalone/.next/server/app/index.rsc +14 -14
  31. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  32. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
  33. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  34. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +9 -9
  35. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  37. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +75 -75
  38. package/.next/standalone/.next/server/app/missions/page.js +5 -5
  39. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  42. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +47 -47
  43. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  46. package/.next/standalone/.next/server/app/onboarding.rsc +16 -16
  47. package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  48. package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  49. package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  50. package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  52. package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  53. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
  54. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +47 -47
  55. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  58. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +60 -60
  59. package/.next/standalone/.next/server/app/settings/page.js +3 -3
  60. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/settings.html +1 -1
  63. package/.next/standalone/.next/server/app/settings.rsc +16 -16
  64. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  65. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  66. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  67. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  69. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  70. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  71. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +98 -98
  72. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  75. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +88 -88
  76. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +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 +81 -81
  80. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  83. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +76 -76
  84. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +3 -3
  85. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  88. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +47 -47
  89. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
  92. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +84 -84
  93. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
  96. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +90 -90
  97. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +5 -5
  98. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  101. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +67 -67
  102. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0h5yr8p.js +1 -1
  105. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +1 -1
  106. package/.next/standalone/.next/server/chunks/[root-of-the-server]__028ucbo._.js +1 -1
  107. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03gi3ue._.js +1 -1
  108. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07f7~6u._.js +1 -1
  109. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_90467._.js +3 -0
  110. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d~z6xs._.js +2 -2
  111. package/.next/standalone/.next/server/chunks/_0_w835g._.js +4 -0
  112. package/.next/standalone/.next/server/chunks/src_0bkvm8c._.js +1 -1
  113. package/.next/standalone/.next/server/chunks/src_lib_0ba0ntr._.js +1 -1
  114. package/.next/standalone/.next/server/chunks/src_lib_ai_0q-~me1._.js +1 -1
  115. package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
  116. package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
  117. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  118. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.ukame._.js +1 -1
  119. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__006_qh0._.js +1 -1
  120. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01j8ix6._.js +1 -1
  121. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02px.0y._.js +1 -1
  122. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03ebsif._.js +3 -3
  123. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ca_ueb._.js +1 -1
  124. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dsdplu._.js +1 -1
  125. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l43.5g._.js +1 -1
  126. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n.cuy2._.js +1 -1
  127. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nbj.ml._.js +1 -1
  128. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ojv-d0._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pm2~fu._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ps55l6._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ribsk4._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rjue04._.js +1 -1
  133. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0souuv~._.js +3 -0
  134. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tc6uh2._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0v2eslh._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vwc25l._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjg_.n._.js +1 -1
  138. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wlmzzq._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wvyks.._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0u4gc4b._.js → [root-of-the-server]__0z7q-_5._.js} +2 -2
  141. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zbmoit._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~03tpv._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~a-emb._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zujp5l._.js → [root-of-the-server]__10o9il8._.js} +2 -2
  145. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13vdw4w._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/ssr/{_0ysygps._.js → _0-fpxu8._.js} +2 -2
  147. package/.next/standalone/.next/server/chunks/ssr/{_0pd0.8f._.js → _03zmko4._.js} +2 -2
  148. package/.next/standalone/.next/server/chunks/ssr/_04b71ua._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/{_0ysyq9g._.js → _0568hf5._.js} +2 -2
  150. package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/_07k_7zo._.js +7 -0
  152. package/.next/standalone/.next/server/chunks/ssr/{_0c-jnbs._.js → _0999z~z._.js} +2 -2
  153. package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/ssr/_0ds6nk2._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/ssr/_0gkxdta._.js +7 -0
  157. package/.next/standalone/.next/server/chunks/ssr/_0i4__mf._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/ssr/_0ihq._v._.js +1 -1
  159. package/.next/standalone/.next/server/chunks/ssr/{_0f6u19w._.js → _0jxhs~u._.js} +2 -2
  160. package/.next/standalone/.next/server/chunks/ssr/{_0b0.-sj._.js → _0r8ftmo._.js} +2 -2
  161. package/.next/standalone/.next/server/chunks/ssr/_0r9w-k8._.js +1 -1
  162. package/.next/standalone/.next/server/chunks/ssr/_0rbctq7._.js +1 -1
  163. package/.next/standalone/.next/server/chunks/ssr/_0rt8hus._.js +1 -1
  164. package/.next/standalone/.next/server/chunks/ssr/{_0bw-tx8._.js → _0zcog8w._.js} +2 -2
  165. package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
  166. package/.next/standalone/.next/server/chunks/ssr/{_0fob8fc._.js → _11uabrg._.js} +2 -2
  167. package/.next/standalone/.next/server/chunks/ssr/_13b~3az._.js +7 -0
  168. package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +3 -0
  169. package/.next/standalone/.next/server/chunks/ssr/src_13jha60._.js +1 -1
  170. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
  171. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  172. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  173. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  175. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  176. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  177. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  178. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  179. package/.next/standalone/.next/server/pages/404.html +1 -1
  180. package/.next/standalone/.next/server/pages/500.html +1 -1
  181. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/server-reference-manifest.json +317 -317
  183. package/.next/standalone/.next/static/chunks/{0v~pz9e87t99b.js → 0-9-c__gfaxpa.js} +1 -1
  184. package/.next/standalone/.next/static/chunks/{05-ui_o~3irq_.js → 04djo-eed_8rf.js} +2 -2
  185. package/.next/standalone/.next/static/chunks/{0r1mkt5qs~s6m.js → 05fy_a4boi~ym.js} +1 -1
  186. package/.next/standalone/.next/static/chunks/05mg~bkdmeovq.js +1 -0
  187. package/.next/standalone/.next/static/chunks/08o3st.fn2~6x.js +1 -0
  188. package/.next/standalone/.next/static/chunks/{08~e63d2q~cam.js → 0d5wyd0-zzb94.js} +1 -1
  189. package/.next/standalone/.next/static/chunks/{00j0mdc41wa44.js → 0e6c~o_iuvycp.js} +1 -1
  190. package/.next/standalone/.next/static/chunks/{0i55dediewjp5.js → 0h3jzfwt-f9o7.js} +1 -1
  191. package/.next/standalone/.next/static/chunks/0igfu0uxcf238.js +1 -0
  192. package/.next/standalone/.next/static/chunks/{0l3mmc866npw4.js → 0jd4uhx~x74ox.js} +2 -2
  193. package/.next/standalone/.next/static/chunks/{0bw4ahlj4~l~g.js → 0obdotk~5x07o.js} +1 -1
  194. package/.next/standalone/.next/static/chunks/0o~dk86gtjq-..js +1 -0
  195. package/.next/standalone/.next/static/chunks/{0ft77ybyq903..js → 0p_vnqgdse218.js} +1 -1
  196. package/.next/standalone/.next/static/chunks/{0~27mkhc9s5k2.js → 0sbpshsch~ak2.js} +2 -2
  197. package/.next/standalone/.next/static/chunks/{00.52653v5c~c.js → 0t.7i1ltlf~rt.js} +1 -1
  198. package/.next/standalone/.next/static/chunks/0v--ko.s9zeij.js +1 -0
  199. package/.next/standalone/.next/static/chunks/{02edbrlq~2uyx.js → 0v-8_9de2o32z.js} +1 -1
  200. package/.next/standalone/.next/static/chunks/{05hls.3r4bz.0.js → 0x~sbju1g3fjh.js} +1 -1
  201. package/.next/standalone/.next/static/chunks/{0fxm-wv..y_a_.js → 0y1m4k4hrzl33.js} +2 -2
  202. package/.next/standalone/.next/static/chunks/0ztm6whl93nyg.js +1 -0
  203. package/.next/standalone/.next/static/chunks/136efy8zbqp13.js +1 -0
  204. package/.next/standalone/package.json +1 -2
  205. package/dist/mcp-server.cjs +34 -28
  206. package/package.json +1 -2
  207. package/scripts/post-tool-hook.js +24 -39
  208. package/scripts/session-start-hook.js +21 -19
  209. package/scripts/stop-hook.js +21 -19
  210. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wbndoc._.js +0 -4
  211. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04pq37d._.js +0 -3
  212. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07_b6c.._.js +0 -3
  213. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09kc.q_._.js +0 -3
  214. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0jo1r7k._.js +0 -3
  215. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o8k4pc._.js +0 -3
  216. package/.next/standalone/.next/server/chunks/ssr/_02v3fjp._.js +0 -7
  217. package/.next/standalone/.next/server/chunks/ssr/_07~0_w6._.js +0 -7
  218. package/.next/standalone/.next/server/chunks/ssr/_08w-r6e._.js +0 -7
  219. package/.next/standalone/.next/server/chunks/ssr/src_095o8x6._.js +0 -3
  220. package/.next/standalone/.next/static/chunks/0nno5if2x1mvs.js +0 -1
  221. package/.next/standalone/.next/static/chunks/0q-u-hhre1uyw.js +0 -1
  222. package/.next/standalone/.next/static/chunks/0qazzw-pr_sv7.js +0 -1
  223. package/.next/standalone/.next/static/chunks/0w3jww1m3k77x.js +0 -1
  224. package/.next/standalone/.next/static/chunks/0z01g02xstbqe.js +0 -1
  225. package/.next/standalone/.next/static/chunks/117qu902jput3.js +0 -1
  226. package/.next/standalone/.next/static/chunks/142w-q8.7m3kl.js +0 -1
  227. package/src/mcp/db.ts +0 -11
  228. package/src/mcp/index.ts +0 -15
  229. package/src/mcp/server.ts +0 -52
  230. package/src/mcp/tools/__tests__/label-tools.test.ts +0 -140
  231. package/src/mcp/tools/__tests__/project-tools.test.ts +0 -182
  232. package/src/mcp/tools/__tests__/report-tools.test.ts +0 -212
  233. package/src/mcp/tools/__tests__/task-tools.test.ts +0 -418
  234. package/src/mcp/tools/__tests__/terminal-tools.test.ts +0 -318
  235. package/src/mcp/tools/__tests__/workspace-tools.test.ts +0 -146
  236. package/src/mcp/tools/knowledge-tools.ts +0 -100
  237. package/src/mcp/tools/label-tools.ts +0 -70
  238. package/src/mcp/tools/note-asset-tools.ts +0 -271
  239. package/src/mcp/tools/project-tools.ts +0 -79
  240. package/src/mcp/tools/report-tools.ts +0 -220
  241. package/src/mcp/tools/search-tools.ts +0 -32
  242. package/src/mcp/tools/task-tools.ts +0 -272
  243. package/src/mcp/tools/terminal-tools.ts +0 -154
  244. package/src/mcp/tools/workspace-tools.ts +0 -73
  245. /package/.next/standalone/.next/static/{om3SyUw4eAwMA0KLhpSGh → 7iWXcI7IK1tpJQ-itTcOk}/_buildManifest.js +0 -0
  246. /package/.next/standalone/.next/static/{om3SyUw4eAwMA0KLhpSGh → 7iWXcI7IK1tpJQ-itTcOk}/_clientMiddlewareManifest.js +0 -0
  247. /package/.next/standalone/.next/static/{om3SyUw4eAwMA0KLhpSGh → 7iWXcI7IK1tpJQ-itTcOk}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[279711,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),o=r&&t.cli?await t.cli.adapter.getVersion():null,i=!!t.api&&!!process.env[t.api.keyEnvVar],s=!!t.api&&i;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:o},api:{available:s,keyConfigured:i}})}return e}}var r=e.i(472129),o=e.i(902157),i=e.i(660526),s=e.i(750227),a=e.i(769310),n=e.i(53674);let l=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],c=globalThis;if(!c.__providerRegistry){let d=new t;d.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new r.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=[];e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):(t.push("--full-auto"),e.extraArgs?.length&&t.push(...e.extraArgs),e.prompt&&t.push(e.prompt));let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readHooks(),t=(0,n.getPackageRoot)().replace(/\\/g,"/"),r=!1,o=this.getHookArray(e,"SessionStart");if(!this.hasHook(o,"session-start-hook.js")){let i=s.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/");o.push({hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]}),e.SessionStart=o,r=!0}let i=this.getHookArray(e,"PostToolUse");if(!this.hasHook(i,"post-tool-hook.js")){let o=s.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${o}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),e.PostToolUse=i,r=!0}let a=this.getHookArray(e,"Stop");if(!this.hasHook(a,"stop-hook.js")){let o=s.join(t,"scripts","stop-hook.js").replace(/\\/g,"/");a.push({hooks:[{command:`node "${o}"`,timeout:5,type:"command"}]}),e.Stop=a,r=!0}return r&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let o=this.getHookArray(e,r);e[r]=o.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))o.push("--env",`${t}=${r}`);o.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","remove",e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!o.existsSync(t))return{ok:!1,method:"symlink",detail:r,error:`Source skill dir does not exist: ${t}`};o.mkdirSync(s.dirname(r),{recursive:!0});let e=await o.promises.lstat(r).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`};else{let e=await o.promises.readlink(r);if(s.resolve(e)===s.resolve(t))return{ok:!0,method:"symlink",detail:`${r} → ${t} (already)`};await o.promises.unlink(r)}return await o.promises.symlink(t,r,"dir"),{ok:!0,method:"symlink",detail:`${r} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=s.join(this.getConfigDir(),"skills",e);try{let e=await o.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await o.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!(await o.promises.lstat(r)).isSymbolicLink())return!1;if(!t)return!0;let e=await o.promises.readlink(r),i=s.isAbsolute(e)?e:s.resolve(s.dirname(r),e);return s.resolve(i)===s.resolve(t)}catch{return!1}}async runCli(t,r,o,i=1e4){let{execFile:s}=await e.A(482848),{promisify:a}=await e.A(268548),n=a(s),{stdout:l}=await n(t,r,{cwd:o,timeout:i});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:o}=await e.A(200628),i=r(t),s=await o(this.resolveCommand(),["--version"]),{stdout:a}=await i(s.command,s.args,{timeout:5e3});return a.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return s.join(i.homedir(),".codex")}getSettingsPath(){return s.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return s.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,a.resolveCommandPathSync)("codex")}getHooksPath(){return s.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(o.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();o.existsSync(t)||o.mkdirSync(t,{recursive:!0}),o.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=o.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let r=this.getConfigDir();o.existsSync(r)||o.mkdirSync(r,{recursive:!0}),o.writeFileSync(e,t,"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),c.__providerRegistry=d}let d=c.__providerRegistry;e.s(["providerRegistry",0,d],279711)},173215,e=>{"use strict";var t=e.i(902157),r=e.i(660526),o=e.i(750227),i=e.i(279711),s=e.i(192520),a=e.i(53674);let n="tower";function l(){let e=(0,s.getTowerDir)(),t=o.join((0,r.homedir)(),".tower");if(o.resolve(e)===o.resolve(t))return"tower";let i=o.basename(e),a=i.match(/^\.?tower-(.+)$/);return a?`tower-${c(a[1])}`:`tower-${c(i)}`}function c(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}async function d(e,c){let d,m,u,h,p=i.providerRegistry.get(e),g=p?.cli?.adapter;if(!g||!await g.isAvailable())return{provider:e,available:!1,ok:!1};let k="claude"===e?function(e={}){let i=e.homeDir??r.homedir(),s=e.repoRoot??process.cwd(),a=[];return a.push(function(e){let r=o.join(e,".claude","settings.json");if(!t.existsSync(r))return{removed:!1,path:r};try{let e=t.readFileSync(r,"utf-8"),o=JSON.parse(e),i=o.mcpServers;if("object"!=typeof i||null===i||Array.isArray(i)||!("tower"in i))return{removed:!1,path:r};let s=i.tower;return delete i.tower,0===Object.keys(i).length?delete o.mcpServers:o.mcpServers=i,t.writeFileSync(r,JSON.stringify(o,null,2)+"\n","utf-8"),{removed:!0,path:r,removedEntry:s,reason:"wrong-file"}}catch(e){return{removed:!1,path:r,error:e instanceof Error?e.message:String(e)}}}(i)),a.push(function(e,r,i){if(!t.existsSync(e))return{removed:!1,path:e};try{let s=t.readFileSync(e,"utf-8"),a=JSON.parse(s),n=a.mcpServers;if("object"!=typeof n||null===n||Array.isArray(n))return{removed:!1,path:e};let l=n.tower;if(!l)return{removed:!1,path:e};let c=function(e,r){let i,s=e.args;if(!Array.isArray(s))return"foreign-repo";for(let e of s)if("string"==typeof e&&o.isAbsolute(e)){i=e;break}return i?t.existsSync(i)?o.resolve(i).startsWith(o.resolve(r)+o.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,i);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete n.tower,0===Object.keys(n).length?delete a.mcpServers:a.mcpServers=n,t.writeFileSync(e,JSON.stringify(a,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${r}:${c}`}}catch(t){return{removed:!1,path:e,error:t instanceof Error?t.message:String(t)}}}(o.join(i,".mcp.json"),"home-mcp-json",s)),{steps:a,removedAny:a.some(e=>e.removed)}}():void 0,y=(d=(0,a.getPackageRoot)().replace(/\\/g,"/"),m=process.env.DATABASE_URL||`file:${(0,s.getTowerDbPath)().replace(/\\/g,"/")}`,u=`${d}/dist/mcp-server.cjs`,h=l(),(0,t.existsSync)(u)?{name:h,command:"node",args:[u],env:{DATABASE_URL:m}}:{name:h,command:`${d}/node_modules/.bin/tsx`,args:[`${d}/src/mcp/index.ts`],env:{DATABASE_URL:m}}),v=await g.installMcp(y,{scope:"user"}),f=await g.installHooks(c),S=await g.installSkill(n,o.join((0,a.getPackageRoot)(),"skills",n));return{provider:e,available:!0,migration:k,mcp:v,hooks:f,skill:S,ok:v.ok&&f.ok&&S.ok}}e.s(["getTowerMcpName",0,l,"installAllForProvider",0,d],173215)}];
1
+ module.exports=[279711,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),o=r&&t.cli?await t.cli.adapter.getVersion():null,i=!!t.api&&!!process.env[t.api.keyEnvVar],s=!!t.api&&i;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:o},api:{available:s,keyConfigured:i}})}return e}}var r=e.i(472129),o=e.i(902157),i=e.i(660526),s=e.i(750227),n=e.i(769310),a=e.i(53674);let l=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],c=globalThis;if(!c.__providerRegistry){let d=new t;d.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new r.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=[];e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):(t.push("--full-auto"),e.extraArgs?.length&&t.push(...e.extraArgs),e.prompt&&t.push(e.prompt));let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),r=s.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/"),o=s.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/"),i=s.join(t,"scripts","stop-hook.js").replace(/\\/g,"/"),n=!1;return n=this.upsertHook(e,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${r}"`,timeout:5,type:"command"}]})||n,n=this.upsertHook(e,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${o}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||n,(n=this.upsertHook(e,"Stop","stop-hook.js",{hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]})||n)&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}upsertHook(e,t,r,o){let i=this.getHookArray(e,t),s=o?.hooks?.[0]?.command,n=i.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(n>=0){if(i[n]?.hooks?.[0]?.command===s)return!1;i.splice(n,1)}return i.push(o),e[t]=i,!0}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let o=this.getHookArray(e,r);e[r]=o.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))o.push("--env",`${t}=${r}`);o.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","remove",e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!o.existsSync(t))return{ok:!1,method:"symlink",detail:r,error:`Source skill dir does not exist: ${t}`};o.mkdirSync(s.dirname(r),{recursive:!0});let e=await o.promises.lstat(r).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`};else{let e=await o.promises.readlink(r);if(s.resolve(e)===s.resolve(t))return{ok:!0,method:"symlink",detail:`${r} → ${t} (already)`};await o.promises.unlink(r)}return await o.promises.symlink(t,r,"dir"),{ok:!0,method:"symlink",detail:`${r} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=s.join(this.getConfigDir(),"skills",e);try{let e=await o.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await o.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!(await o.promises.lstat(r)).isSymbolicLink())return!1;if(!t)return!0;let e=await o.promises.readlink(r),i=s.isAbsolute(e)?e:s.resolve(s.dirname(r),e);return s.resolve(i)===s.resolve(t)}catch{return!1}}async runCli(t,r,o,i=1e4){let{execFile:s}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(s),{stdout:l}=await a(t,r,{cwd:o,timeout:i});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:o}=await e.A(200628),i=r(t),s=await o(this.resolveCommand(),["--version"]),{stdout:n}=await i(s.command,s.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return s.join(i.homedir(),".codex")}getSettingsPath(){return s.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return s.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,n.resolveCommandPathSync)("codex")}getHooksPath(){return s.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(o.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();o.existsSync(t)||o.mkdirSync(t,{recursive:!0}),o.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=o.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let r=this.getConfigDir();o.existsSync(r)||o.mkdirSync(r,{recursive:!0}),o.writeFileSync(e,t,"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),c.__providerRegistry=d}let d=c.__providerRegistry;e.s(["providerRegistry",0,d],279711)},173215,e=>{"use strict";var t=e.i(902157),r=e.i(660526),o=e.i(750227),i=e.i(279711),s=e.i(192520),n=e.i(53674);let a="tower";function l(){let e=(0,s.getTowerDir)(),t=o.join((0,r.homedir)(),".tower");if(o.resolve(e)===o.resolve(t))return"tower";let i=o.basename(e),n=i.match(/^\.?tower-(.+)$/);return n?`tower-${c(n[1])}`:`tower-${c(i)}`}function c(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}async function d(e,c){let d,m,u,p,h=i.providerRegistry.get(e),g=h?.cli?.adapter;if(!g||!await g.isAvailable())return{provider:e,available:!1,ok:!1};let k="claude"===e?function(e={}){let i=e.homeDir??r.homedir(),s=e.repoRoot??process.cwd(),n=[];return n.push(function(e){let r=o.join(e,".claude","settings.json");if(!t.existsSync(r))return{removed:!1,path:r};try{let e=t.readFileSync(r,"utf-8"),o=JSON.parse(e),i=o.mcpServers;if("object"!=typeof i||null===i||Array.isArray(i)||!("tower"in i))return{removed:!1,path:r};let s=i.tower;return delete i.tower,0===Object.keys(i).length?delete o.mcpServers:o.mcpServers=i,t.writeFileSync(r,JSON.stringify(o,null,2)+"\n","utf-8"),{removed:!0,path:r,removedEntry:s,reason:"wrong-file"}}catch(e){return{removed:!1,path:r,error:e instanceof Error?e.message:String(e)}}}(i)),n.push(function(e,r,i){if(!t.existsSync(e))return{removed:!1,path:e};try{let s=t.readFileSync(e,"utf-8"),n=JSON.parse(s),a=n.mcpServers;if("object"!=typeof a||null===a||Array.isArray(a))return{removed:!1,path:e};let l=a.tower;if(!l)return{removed:!1,path:e};let c=function(e,r){let i,s=e.args;if(!Array.isArray(s))return"foreign-repo";for(let e of s)if("string"==typeof e&&o.isAbsolute(e)){i=e;break}return i?t.existsSync(i)?o.resolve(i).startsWith(o.resolve(r)+o.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,i);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete a.tower,0===Object.keys(a).length?delete n.mcpServers:n.mcpServers=a,t.writeFileSync(e,JSON.stringify(n,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${r}:${c}`}}catch(t){return{removed:!1,path:e,error:t instanceof Error?t.message:String(t)}}}(o.join(i,".mcp.json"),"home-mcp-json",s)),{steps:n,removedAny:n.some(e=>e.removed)}}():void 0,y=(d=(0,n.getPackageRoot)().replace(/\\/g,"/"),m=process.env.DATABASE_URL||`file:${(0,s.getTowerDbPath)().replace(/\\/g,"/")}`,u=`${d}/dist/mcp-server.cjs`,p=l(),(0,t.existsSync)(u)?{name:p,command:"node",args:[u],env:{DATABASE_URL:m}}:{name:p,command:`${d}/node_modules/.bin/tsx`,args:[`${d}/src/mcp/index.ts`],env:{DATABASE_URL:m}}),v=await g.installMcp(y,{scope:"user"}),f=await g.installHooks(c),S=await g.installSkill(a,o.join((0,n.getPackageRoot)(),"skills",a));return{provider:e,available:!0,migration:k,mcp:v,hooks:f,skill:S,ok:v.ok&&f.ok&&S.ok}}e.s(["getTowerMcpName",0,l,"installAllForProvider",0,d],173215)}];
2
2
 
3
3
  //# sourceMappingURL=src_lib_ai_0xx6y51._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[136902,599603,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),s=r&&t.cli?await t.cli.adapter.getVersion():null,o=!!t.api&&!!process.env[t.api.keyEnvVar],i=!!t.api&&o;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:s},api:{available:i,keyConfigured:o}})}return e}}var r=e.i(902157),s=e.i(660526),o=e.i(750227),i=e.i(603484);function n(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}e.s(["getPackageRoot",0,n],599603);let a=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],l=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],m=globalThis;if(!m.__providerRegistry){let c=new t;c.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new class t{buildSpawnArgs(e){let t=["--dangerously-skip-permissions"];e.extraArgs?.length&&t.push(...e.extraArgs),e.resumeSessionId?t.push("--resume",e.resumeSessionId):e.continueLatest?t.push("--continue"):e.prompt&&t.push(e.prompt);let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readSettings(),t=e.hooks??{},r=n().replace(/\\/g,"/"),s=!1,i=this.getHookArray(t,"SessionStart");if(!this.hasHook(i,"session-start-hook.js")){let e=o.join(r,"scripts","session-start-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]}),t.SessionStart=i,s=!0}let a=this.getHookArray(t,"PostToolUse");if(!this.hasHook(a,"post-tool-hook.js")){let e=o.join(r,"scripts","post-tool-hook.js").replace(/\\/g,"/");a.push({hooks:[{command:`node "${e}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),t.PostToolUse=a,s=!0}let l=this.getHookArray(t,"Stop");if(!this.hasHook(l,"stop-hook.js")){let e=o.join(r,"scripts","stop-hook.js").replace(/\\/g,"/");l.push({hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]}),t.Stop=l,s=!0}return s&&(e.hooks=t,this.writeSettings(e)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},r=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(t,e);t[e]=s.filter(e=>!e.hooks?.some(e=>r.some(t=>e.command?.includes(t))))}return e.hooks=t,this.writeSettings(e),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readSettings().hooks??{},t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=t.scope??"user",s={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(s.env=e.env);let o=this.resolveCommand(),i=["mcp","add-json","-s",r,e.name,JSON.stringify(s)];try{return await this.runCli(o,["mcp","remove","-s",r,e.name],t.cwd).catch(()=>{}),await this.runCli(o,i,t.cwd),{ok:!0,method:"cli",detail:`${o} ${i.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${i.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=t.scope??"user",s=this.resolveCommand(),o=["mcp","remove","-s",r,e];try{return await this.runCli(s,o,t.cwd),{ok:!0,method:"cli",detail:`${s} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${s} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!r.existsSync(t))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${t}`};r.mkdirSync(o.dirname(s),{recursive:!0});let e=await r.promises.lstat(s).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else{let e=await r.promises.readlink(s);if(o.resolve(e)===o.resolve(t))return{ok:!0,method:"symlink",detail:`${s} → ${t} (already)`};await r.promises.unlink(s)}return await r.promises.symlink(t,s,"dir"),{ok:!0,method:"symlink",detail:`${s} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=o.join(this.getConfigDir(),"skills",e);try{let e=await r.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await r.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!(await r.promises.lstat(s)).isSymbolicLink())return!1;if(!t)return!0;let e=await r.promises.readlink(s),i=o.isAbsolute(e)?e:o.resolve(o.dirname(s),e);return o.resolve(i)===o.resolve(t)}catch{return!1}}async runCli(t,r,s,o=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,r,{cwd:s,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:s}=await e.A(998127),o=r(t),i=await s(this.resolveCommand(),["--version"]),{stdout:n}=await o(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return a}getConfigDir(){return o.join(s.homedir(),".claude")}getSettingsPath(){return o.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return o.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["--print",e,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,i.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(r.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let t=this.getConfigDir();r.existsSync(t)||r.mkdirSync(t,{recursive:!0}),r.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),c.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=[];e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):(t.push("--full-auto"),e.extraArgs?.length&&t.push(...e.extraArgs),e.prompt&&t.push(e.prompt));let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readHooks(),t=n().replace(/\\/g,"/"),r=!1,s=this.getHookArray(e,"SessionStart");if(!this.hasHook(s,"session-start-hook.js")){let i=o.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/");s.push({hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]}),e.SessionStart=s,r=!0}let i=this.getHookArray(e,"PostToolUse");if(!this.hasHook(i,"post-tool-hook.js")){let s=o.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${s}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),e.PostToolUse=i,r=!0}let a=this.getHookArray(e,"Stop");if(!this.hasHook(a,"stop-hook.js")){let s=o.join(t,"scripts","stop-hook.js").replace(/\\/g,"/");a.push({hooks:[{command:`node "${s}"`,timeout:5,type:"command"}]}),e.Stop=a,r=!0}return r&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(e,r);e[r]=s.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),s=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))s.push("--env",`${t}=${r}`);s.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,s,t.cwd),{ok:!0,method:"cli",detail:`${r} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),s=["mcp","remove",e];try{return await this.runCli(r,s,t.cwd),{ok:!0,method:"cli",detail:`${r} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!r.existsSync(t))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${t}`};r.mkdirSync(o.dirname(s),{recursive:!0});let e=await r.promises.lstat(s).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else{let e=await r.promises.readlink(s);if(o.resolve(e)===o.resolve(t))return{ok:!0,method:"symlink",detail:`${s} → ${t} (already)`};await r.promises.unlink(s)}return await r.promises.symlink(t,s,"dir"),{ok:!0,method:"symlink",detail:`${s} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=o.join(this.getConfigDir(),"skills",e);try{let e=await r.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await r.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!(await r.promises.lstat(s)).isSymbolicLink())return!1;if(!t)return!0;let e=await r.promises.readlink(s),i=o.isAbsolute(e)?e:o.resolve(o.dirname(s),e);return o.resolve(i)===o.resolve(t)}catch{return!1}}async runCli(t,r,s,o=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,r,{cwd:s,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:s}=await e.A(998127),o=r(t),i=await s(this.resolveCommand(),["--version"]),{stdout:n}=await o(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return o.join(s.homedir(),".codex")}getSettingsPath(){return o.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return o.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,i.resolveCommandPathSync)("codex")}getHooksPath(){return o.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(r.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();r.existsSync(t)||r.mkdirSync(t,{recursive:!0}),r.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=r.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let s=this.getConfigDir();r.existsSync(s)||r.mkdirSync(s,{recursive:!0}),r.writeFileSync(e,t,"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),m.__providerRegistry=c}let c=m.__providerRegistry;e.s(["providerRegistry",0,c],136902)}];
1
+ module.exports=[136902,599603,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),s=r&&t.cli?await t.cli.adapter.getVersion():null,o=!!t.api&&!!process.env[t.api.keyEnvVar],i=!!t.api&&o;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:s},api:{available:i,keyConfigured:o}})}return e}}var r=e.i(902157),s=e.i(660526),o=e.i(750227),i=e.i(603484);function n(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}e.s(["getPackageRoot",0,n],599603);let a=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],l=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],m=globalThis;if(!m.__providerRegistry){let c=new t;c.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new class t{buildSpawnArgs(e){let t=["--dangerously-skip-permissions"];e.extraArgs?.length&&t.push(...e.extraArgs),e.resumeSessionId?t.push("--resume",e.resumeSessionId):e.continueLatest?t.push("--continue"):e.prompt&&t.push(e.prompt);let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readSettings(),t=e.hooks??{},r=n().replace(/\\/g,"/"),s=o.join(r,"scripts","session-start-hook.js").replace(/\\/g,"/"),i=o.join(r,"scripts","post-tool-hook.js").replace(/\\/g,"/"),a=o.join(r,"scripts","stop-hook.js").replace(/\\/g,"/"),l=!1;return l=this.upsertHook(t,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${s}"`,timeout:5,type:"command"}]})||l,l=this.upsertHook(t,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${i}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||l,(l=this.upsertHook(t,"Stop","stop-hook.js",{hooks:[{command:`node "${a}"`,timeout:5,type:"command"}]})||l)&&(e.hooks=t,this.writeSettings(e)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}upsertHook(e,t,r,s){let o=this.getHookArray(e,t),i=s?.hooks?.[0]?.command,n=o.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(n>=0){if(o[n]?.hooks?.[0]?.command===i)return!1;o.splice(n,1)}return o.push(s),e[t]=o,!0}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},r=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(t,e);t[e]=s.filter(e=>!e.hooks?.some(e=>r.some(t=>e.command?.includes(t))))}return e.hooks=t,this.writeSettings(e),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readSettings().hooks??{},t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=t.scope??"user",s={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(s.env=e.env);let o=this.resolveCommand(),i=["mcp","add-json","-s",r,e.name,JSON.stringify(s)];try{return await this.runCli(o,["mcp","remove","-s",r,e.name],t.cwd).catch(()=>{}),await this.runCli(o,i,t.cwd),{ok:!0,method:"cli",detail:`${o} ${i.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${i.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=t.scope??"user",s=this.resolveCommand(),o=["mcp","remove","-s",r,e];try{return await this.runCli(s,o,t.cwd),{ok:!0,method:"cli",detail:`${s} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${s} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!r.existsSync(t))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${t}`};r.mkdirSync(o.dirname(s),{recursive:!0});let e=await r.promises.lstat(s).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else{let e=await r.promises.readlink(s);if(o.resolve(e)===o.resolve(t))return{ok:!0,method:"symlink",detail:`${s} → ${t} (already)`};await r.promises.unlink(s)}return await r.promises.symlink(t,s,"dir"),{ok:!0,method:"symlink",detail:`${s} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=o.join(this.getConfigDir(),"skills",e);try{let e=await r.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await r.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!(await r.promises.lstat(s)).isSymbolicLink())return!1;if(!t)return!0;let e=await r.promises.readlink(s),i=o.isAbsolute(e)?e:o.resolve(o.dirname(s),e);return o.resolve(i)===o.resolve(t)}catch{return!1}}async runCli(t,r,s,o=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,r,{cwd:s,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:s}=await e.A(998127),o=r(t),i=await s(this.resolveCommand(),["--version"]),{stdout:n}=await o(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return a}getConfigDir(){return o.join(s.homedir(),".claude")}getSettingsPath(){return o.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return o.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["--print",e,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,i.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(r.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let t=this.getConfigDir();r.existsSync(t)||r.mkdirSync(t,{recursive:!0}),r.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),c.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=[];e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):(t.push("--full-auto"),e.extraArgs?.length&&t.push(...e.extraArgs),e.prompt&&t.push(e.prompt));let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readHooks(),t=n().replace(/\\/g,"/"),r=o.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/"),s=o.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/"),i=o.join(t,"scripts","stop-hook.js").replace(/\\/g,"/"),a=!1;return a=this.upsertHook(e,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${r}"`,timeout:5,type:"command"}]})||a,a=this.upsertHook(e,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${s}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||a,(a=this.upsertHook(e,"Stop","stop-hook.js",{hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]})||a)&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}upsertHook(e,t,r,s){let o=this.getHookArray(e,t),i=s?.hooks?.[0]?.command,n=o.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(n>=0){if(o[n]?.hooks?.[0]?.command===i)return!1;o.splice(n,1)}return o.push(s),e[t]=o,!0}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(e,r);e[r]=s.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),s=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))s.push("--env",`${t}=${r}`);s.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,s,t.cwd),{ok:!0,method:"cli",detail:`${r} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),s=["mcp","remove",e];try{return await this.runCli(r,s,t.cwd),{ok:!0,method:"cli",detail:`${r} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!r.existsSync(t))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${t}`};r.mkdirSync(o.dirname(s),{recursive:!0});let e=await r.promises.lstat(s).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else{let e=await r.promises.readlink(s);if(o.resolve(e)===o.resolve(t))return{ok:!0,method:"symlink",detail:`${s} → ${t} (already)`};await r.promises.unlink(s)}return await r.promises.symlink(t,s,"dir"),{ok:!0,method:"symlink",detail:`${s} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=o.join(this.getConfigDir(),"skills",e);try{let e=await r.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await r.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let s=o.join(this.getConfigDir(),"skills",e);try{if(!(await r.promises.lstat(s)).isSymbolicLink())return!1;if(!t)return!0;let e=await r.promises.readlink(s),i=o.isAbsolute(e)?e:o.resolve(o.dirname(s),e);return o.resolve(i)===o.resolve(t)}catch{return!1}}async runCli(t,r,s,o=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,r,{cwd:s,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:s}=await e.A(998127),o=r(t),i=await s(this.resolveCommand(),["--version"]),{stdout:n}=await o(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return o.join(s.homedir(),".codex")}getSettingsPath(){return o.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return o.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,i.resolveCommandPathSync)("codex")}getHooksPath(){return o.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(r.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();r.existsSync(t)||r.mkdirSync(t,{recursive:!0}),r.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=r.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let s=this.getConfigDir();r.existsSync(s)||r.mkdirSync(s,{recursive:!0}),r.writeFileSync(e,t,"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),m.__providerRegistry=c}let c=m.__providerRegistry;e.s(["providerRegistry",0,c],136902)}];
2
2
 
3
3
  //# sourceMappingURL=src_lib_ai_providers_index_ts_0.y.3vp._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[144016,a=>{"use strict";var b=a.i(728778),c=a.i(374637),d=a.i(553798),e=a.i(634910),f=a.i(774881),g=a.i(607219),h=a.i(10390),i=a.i(269280),j=a.i(711796);let k=(0,j.default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var l=a.i(699570),m=a.i(269876),n=a.i(157551),o=a.i(577565),p=a.i(207339),q=a.i(881107),r=a.i(394869),s=a.i(347165),t=a.i(350739);let u=(0,j.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var v=a.i(690251);let w=(0,j.default)("package-check",[["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m16 17 2 2 4-4",key:"uh5qu3"}],["path",{d:"M21 11.127V8a2 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.729l7 4a2 2 0 0 0 2 .001l1.32-.753",key:"kpkbpo"}],["path",{d:"M3.29 7 12 12l8.71-5",key:"19ckod"}],["path",{d:"m7.5 4.27 8.997 5.148",key:"9yrvtv"}]]),x=(0,j.default)("panel-right",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);var y=a.i(785259),z=a.i(521007),A=a.i(951192);let B=["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 C(a){return B[function(a){let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)>>>0;return b}(a)%B.length]}let D={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"};function E({name:a}){let{t:c}=(0,A.useI18n)();return a?(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${C(a)}`,children:a}):(0,b.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:c("version.type.uncategorized")})}function F({status:a}){let{t:c}=(0,A.useI18n)();return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${D[a]}`,children:c(`version.status.${a}`)})}function G(a){if(!a)return"";let b="string"==typeof a?new Date(a):a;if(isNaN(b.getTime()))return"";let c=String(b.getMonth()+1).padStart(2,"0"),d=String(b.getDate()).padStart(2,"0");return`${c}-${d}`}let H=Object.fromEntries(z.BOARD_COLUMNS.map(a=>[a.id,a.color]));function I({children:a,className:c}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1.5 rounded-md border border-border bg-muted/40 px-2 py-0.5 text-xs text-muted-foreground ${c??""}`,children:a})}function J({task:a,onOpenDetail:d}){let{t:e}=(0,A.useI18n)(),[f,g]=(0,c.useState)(!1),i="CANCELLED"===a.status?"text-muted-foreground line-through decoration-muted-foreground/40":"DONE"===a.status?"text-muted-foreground":"text-foreground";return(0,b.jsxs)("div",{className:"rounded-[10px]",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>g(a=>!a),className:"flex w-full items-center gap-2.5 rounded-[10px] px-2.5 py-2.5 text-left transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${f?"rotate-90":""}`}),(0,b.jsx)("span",{className:`h-2 w-2 flex-none rounded-full ${H[a.status]??"bg-slate-400"}`}),(0,b.jsx)("span",{className:`text-[13.5px] font-medium ${i}`,children:a.title}),a.labels.map(({label:a})=>(0,b.jsx)("span",{className:"rounded-full border border-border px-1.5 py-px text-[10.5px] text-muted-foreground",style:a.color?{borderColor:a.color+"55",color:a.color}:void 0,children:a.name},a.id)),(0,b.jsx)("span",{className:"flex-1"}),(0,b.jsx)("span",{className:"flex w-16 flex-none justify-center",children:(0,b.jsx)("span",{className:`rounded-[5px] px-1.5 py-px text-[10.5px] font-bold ${z.PRIORITY_CONFIG[a.priority]?.color??z.PRIORITY_CONFIG.LOW.color}`,children:a.priority})}),(0,b.jsx)("span",{className:"h-3 w-px bg-border flex-none"}),(0,b.jsxs)("span",{className:"flex w-[72px] flex-none items-center gap-1.5",children:[(0,b.jsx)("span",{className:`h-1.5 w-1.5 flex-none rounded-full ${H[a.status]??"bg-slate-400"}`}),(0,b.jsx)("span",{className:"truncate text-[10.5px] text-muted-foreground",children:e(`version.taskStatus.${a.status}`)})]}),(0,b.jsx)("span",{className:"h-3 w-px bg-border flex-none"}),(0,b.jsx)("span",{className:"flex w-6 flex-none justify-center",children:d&&(0,b.jsxs)(y.Tooltip,{children:[(0,b.jsx)(y.TooltipTrigger,{render:(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 text-muted-foreground",onClick:b=>{b.stopPropagation(),d(a.id)}}),children:(0,b.jsx)(x,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(y.TooltipContent,{children:e("version.detail")})]})})]}),f&&(0,b.jsxs)("div",{className:"flex flex-col gap-2.5 pb-3 pl-[30px] pr-3 pt-1",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(s.FolderOpen,{className:"h-3 w-3 text-muted-foreground/60"}),(0,b.jsx)("span",{className:"text-[11px] font-bold uppercase tracking-wide text-muted-foreground/60",children:e("version.resources")})]}),0===a.assets.length?(0,b.jsx)("p",{className:"text-[12px] italic text-muted-foreground/60",children:e("version.empty.resources")}):(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:a.assets.map(a=>{var c;let d=a.mimeType?.startsWith("image/");return(0,b.jsxs)("span",{className:"inline-flex cursor-pointer items-center gap-1.5 rounded-lg border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground shadow-sm transition-colors hover:border-primary/50",children:[d?(0,b.jsx)(u,{className:"h-3.5 w-3.5 text-muted-foreground"}):(0,b.jsx)(t.FileText,{className:"h-3.5 w-3.5 text-muted-foreground"}),(0,b.jsx)("span",{children:a.filename}),null!=a.size&&(0,b.jsx)("span",{className:"text-[11px] text-muted-foreground/60",children:(c=a.size)<1024?`${c} B`:c<1048576?`${Math.round(c/1024)} KB`:`${(c/1048576).toFixed(1)} MB`})]},a.id)})})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(t.FileText,{className:"h-3 w-3 text-muted-foreground/60"}),(0,b.jsx)("span",{className:"text-[11px] font-bold uppercase tracking-wide text-muted-foreground/60",children:e("version.notes")})]}),0===a.notes.length?(0,b.jsx)("p",{className:"text-[12px] italic text-muted-foreground/60",children:e("version.empty.notes")}):(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:a.notes.map(a=>(0,b.jsx)("div",{className:"rounded-lg border border-border border-l-violet-500/50 bg-background px-2.5 py-2 shadow-sm [border-left-width:3px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[12.5px] font-semibold text-foreground",children:a.title}),a.category&&(0,b.jsx)("span",{className:"rounded-[5px] border border-violet-500/30 bg-violet-500/15 px-1.5 py-px text-[10px] font-bold text-violet-300",children:a.category})]})},a.id))})]})]})]})}function K({version:a,diffStat:d,onEdit:e,onRelease:f,onViewDiff:g,onOpenTaskDetail:i}){var j;let k,{t:m}=(0,A.useI18n)(),[s,t]=(0,c.useState)(a.isCurrent),u="RELEASED"===a.status,x="ACTIVE"===a.status,z=a.tasks.length,B=a.tasks.filter(a=>"DONE"===a.status).length,C=!!(a.releaseCommit||d),D=(k=`${z} ${m("version.tasksCount")}`,B>0&&B<z?`${k} \xb7 ${B} ${m("version.doneCount")}`:B>0&&B===z?`${k} \xb7 ${m("version.allDone")}`:k);return(0,b.jsxs)("div",{className:["overflow-hidden rounded-[14px] border bg-card shadow-sm transition-shadow duration-150 hover:shadow-md",a.isCurrent?"border-border border-l-2 border-l-primary ring-1 ring-primary/20":"border-border",u?"opacity-[.96]":""].filter(Boolean).join(" "),children:[(0,b.jsx)("button",{type:"button",onClick:()=>t(a=>!a),className:"w-full text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,b.jsxs)("div",{className:"px-4 py-3.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(h.ChevronRight,{className:`h-4 w-4 flex-none text-muted-foreground/60 transition-transform duration-150 ${s?"rotate-90":""}`}),(0,b.jsx)("span",{className:"font-mono text-[14.5px] font-bold text-foreground",children:a.number}),(0,b.jsx)("span",{className:"text-[14.5px] font-semibold text-foreground",children:a.name}),(0,b.jsx)(E,{name:a.type?.name??null}),(0,b.jsx)(F,{status:a.status}),a.isCurrent&&(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-primary/30 bg-primary/15 px-2.5 py-0.5 text-[11px] font-bold text-primary shadow-sm",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-primary opacity-90"}),m("version.current")]}),(0,b.jsx)("span",{className:"flex-1"}),z>0&&(0,b.jsx)("span",{className:"text-[11.5px] text-muted-foreground",children:D}),(0,b.jsxs)("span",{className:"flex items-center gap-1",onClick:a=>a.stopPropagation(),onKeyDown:a=>a.stopPropagation(),children:[e&&(0,b.jsxs)(y.Tooltip,{children:[(0,b.jsx)(y.TooltipTrigger,{render:(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground",onClick:()=>e(a.id)}),children:(0,b.jsx)(v.Pencil,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(y.TooltipContent,{children:m("version.edit")})]}),x&&f&&(0,b.jsxs)(l.Button,{variant:"outline",className:"h-7 px-2 text-xs font-semibold",onClick:()=>f(a.id),children:[(0,b.jsx)(w,{className:"h-3.5 w-3.5"}),m("version.release")]})]})]}),(0,b.jsxs)("div",{className:"mt-2.5 flex flex-wrap items-center gap-2",children:[u&&a.releasedAt?(0,b.jsxs)(I,{children:[(0,b.jsx)(n.Calendar,{className:"h-3 w-3"}),m("version.releasedAt"),(0,b.jsx)("strong",{className:"text-foreground",children:G(a.releasedAt)})]}):a.startDate||a.targetDate?(0,b.jsxs)(I,{children:[(0,b.jsx)(n.Calendar,{className:"h-3 w-3"}),a.startDate?G(a.startDate):"—"," → ",a.targetDate?(0,b.jsx)("strong",{className:"text-foreground",children:G(a.targetDate)}):"—"]}):null,a.baseBranch&&(0,b.jsxs)(I,{children:[(0,b.jsx)(o.GitBranch,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:a.baseBranch})]}),a.baseCommit&&(0,b.jsxs)(I,{children:[(0,b.jsx)(p.GitCommitHorizontal,{className:"h-3 w-3"}),m("version.field.baseCommit"),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:(j=a.baseCommit)?j.slice(0,7):""})]}),u&&(0,b.jsxs)(I,{children:[(0,b.jsx)(q.Tag,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:a.number})]}),d&&(0,b.jsxs)(I,{children:[(0,b.jsx)(r.GitCompare,{className:"h-3 w-3"}),!u&&(0,b.jsx)("span",{className:"text-muted-foreground",children:m("version.diff.live")}),(0,b.jsxs)("span",{className:"font-bold text-emerald-400",children:["+",d.additions.toLocaleString()]}),(0,b.jsxs)("span",{className:"font-bold text-rose-400",children:["−",d.deletions.toLocaleString()]}),(0,b.jsxs)("span",{className:"text-muted-foreground",children:["· ",d.files," ",m("version.diff.files")]})]}),C&&g&&(0,b.jsxs)(l.Button,{variant:"ghost",size:"sm",className:"h-6 gap-1 px-2 text-xs text-muted-foreground",onClick:b=>{b.stopPropagation(),g(a.id)},children:[(0,b.jsx)(r.GitCompare,{className:"h-3 w-3"}),m("version.diff.view")," →"]})]}),a.description&&(0,b.jsx)("p",{className:"mt-2 text-[13px] text-muted-foreground",children:a.description})]})}),s&&z>0&&(0,b.jsx)("div",{className:"border-t border-dashed border-border bg-muted/40 px-2 pb-2 pt-1.5",children:a.tasks.map(a=>(0,b.jsx)(J,{task:a,onOpenDetail:i},a.id))})]})}var L=a.i(952313),M=a.i(668116),N=a.i(113047),O=a.i(814574),P=a.i(866718),Q=a.i(412783),R=a.i(580701),S=a.i(599209),T=a.i(419622),U=a.i(563658),V=a.i(429246),W=a.i(780410);let X=(0,W.createServerReference)("4035aeb303a13bed8fda4465736df8a0f708cd37b3",W.callServer,void 0,W.findSourceMapURL,"createVersion"),Y=(0,W.createServerReference)("60f1544acac2b4bacf68d4722cb6002dc7c736d92b",W.callServer,void 0,W.findSourceMapURL,"updateVersion"),Z=(0,W.createServerReference)("40a1f5a787858b7a59a0c29558456853226fc22251",W.callServer,void 0,W.findSourceMapURL,"getVersionTypes");var $=a.i(272598),_=a.i(230913),aa=a.i(975231);let ab=(0,W.createServerReference)("40d4b3ba9413922b4366411c22d78e9ab9f88a1ee5",W.callServer,void 0,W.findSourceMapURL,"createVersionType"),ac=(0,W.createServerReference)("6038f8c3c78d0d99f4dc04aa2f57cf10af99b4d3c0",W.callServer,void 0,W.findSourceMapURL,"updateVersionType"),ad=(0,W.createServerReference)("40b69852784877dbbd5f05021bd6a9870ceed83c37",W.callServer,void 0,W.findSourceMapURL,"deleteVersionType");function ae({open:a,onOpenChange:d,workspaceId:e,onChanged:f}){let{t:g}=(0,A.useI18n)(),[h,i]=(0,c.useState)([]),[j,k]=(0,c.useState)(""),[m,n]=(0,c.useState)({}),[o,p]=(0,c.useTransition)(),q=async()=>{let a=await Z(e);i(a),n(b=>{let c={};return a.forEach(a=>{c[a.id]=a.id in b?b[a.id]:a.name}),c})};(0,c.useEffect)(()=>{a&&(q(),k(""))},[a,e]);let r=()=>{let a=j.trim();a&&p(async()=>{try{await ab({workspaceId:e,name:a}),k(""),await q(),f?.(),L.toast.success(g("version.type.add"))}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})};return(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:g("version.manageTypes")})}),(0,b.jsxs)("div",{className:"flex flex-col gap-4 py-2",children:[(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(P.Input,{value:j,onChange:a=>k(a.target.value),placeholder:g("version.type.namePlaceholder"),disabled:o,onKeyDown:a=>{"Enter"===a.key&&r()},className:"flex-1"}),(0,b.jsx)(l.Button,{onClick:r,disabled:o||!j.trim(),children:g("version.type.add")})]}),0===h.length?(0,b.jsx)("p",{className:"text-center text-sm text-muted-foreground py-4",children:g("version.type.empty")}):(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:h.map(a=>(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-2",children:[(0,b.jsx)("span",{className:`inline-flex h-2.5 w-2.5 flex-none rounded-full ${C(m[a.id]??a.name).split(" ").filter(a=>a.startsWith("bg-"))[0]??"bg-muted"}`}),(0,b.jsx)(P.Input,{value:m[a.id]??a.name,onChange:b=>n(c=>({...c,[a.id]:b.target.value})),onBlur:()=>(a=>{let b=(m[a]??"").trim();if(!b)return;let c=h.find(b=>b.id===a);c?.name!==b&&p(async()=>{try{await ac(a,{name:b}),await q(),f?.()}catch(b){L.toast.error(b instanceof Error?b.message:String(b)),n(b=>({...b,[a]:c?.name??""}))}})})(a.id),onKeyDown:a=>{"Enter"===a.key&&a.target.blur()},disabled:o,className:"h-7 flex-1 border-transparent bg-transparent shadow-none focus-visible:border-input focus-visible:bg-background focus-visible:shadow-sm"}),(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 flex-none text-muted-foreground hover:text-destructive",onClick:()=>{var b;return b=a.id,void(window.confirm(g("version.type.deleteConfirm"))&&p(async()=>{try{await ad(b),await q(),f?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}}))},disabled:o,children:(0,b.jsx)(aa.Trash2,{className:"h-3.5 w-3.5"})})]},a.id))})]})]})})}function af(a){if(!a)return"";let b="string"==typeof a?new Date(a):a;if(isNaN(b.getTime()))return"";let c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}function ag(a){if(!a)return;let b=new Date(a);return isNaN(b.getTime())?void 0:b}function ah({open:a,onOpenChange:d,projectId:e,workspaceId:f,editVersion:g,defaultBaseBranch:h,projectLocalPath:i,onSuccess:j}){let{t:k}=(0,A.useI18n)(),m=!!g,[n,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)([]),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(""),[B,C]=(0,c.useState)(""),[D,E]=(0,c.useState)(""),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)([]),[W,aa]=(0,c.useState)(!1),[ab,ac]=(0,c.useState)(!1),ad=!!i,[ai,aj]=(0,c.useTransition)();return(0,c.useEffect)(()=>{a&&(g?(p(g.number),r(g.name),t(g.typeId??""),z(g.baseBranch??""),C(af(g.startDate)),E(af(g.targetDate)),G(g.description??"")):(p(""),r(""),t(""),z(h??""),C(""),E(""),G("")),I(!1))},[a,g,h]),(0,c.useEffect)(()=>{a&&Z(f).then(v).catch(()=>v([]))},[a,f]),(0,c.useEffect)(()=>{a&&ad?(aa(!0),(0,$.getProjectBranches)(i).then(K).catch(()=>K([])).finally(()=>aa(!1)),(0,_.fetchRemoteBranches)(i).then(()=>(0,$.getProjectBranches)(i).then(K)).catch(()=>{})):K([])},[a,ad,i]),(0,b.jsxs)(O.Dialog,{open:a,onOpenChange:d,children:[(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:m?k("version.edit"):k("version.new")})}),(0,b.jsxs)("div",{className:"grid gap-4 py-2",children:[(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsxs)(Q.Label,{htmlFor:"version-number",children:[k("version.field.number"),(0,b.jsx)("span",{className:"text-destructive ml-0.5",children:"*"})]}),(0,b.jsx)(P.Input,{id:"version-number",value:n,onChange:a=>p(a.target.value),placeholder:k("version.placeholder.number"),disabled:ai})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsxs)(Q.Label,{htmlFor:"version-name",children:[k("version.field.name"),(0,b.jsx)("span",{className:"text-destructive ml-0.5",children:"*"})]}),(0,b.jsx)(P.Input,{id:"version-name",value:q,onChange:a=>r(a.target.value),placeholder:k("version.placeholder.name"),disabled:ai})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{children:k("version.field.type")}),(0,b.jsxs)(R.Select,{value:s||"__none__",onValueChange:a=>{t(a&&"__none__"!==a?a:"")},children:[(0,b.jsx)(R.SelectTrigger,{className:"w-full",disabled:ai,children:(0,b.jsx)("span",{className:"truncate",children:s?u.find(a=>a.id===s)?.name??k("version.type.uncategorized"):k("version.type.uncategorized")})}),(0,b.jsxs)(R.SelectContent,{children:[(0,b.jsx)(R.SelectItem,{value:"__none__",children:k("version.type.uncategorized")}),u.map(a=>(0,b.jsx)(R.SelectItem,{value:a.id,children:a.name},a.id))]})]}),(0,b.jsxs)(l.Button,{type:"button",variant:"ghost",size:"sm",className:"h-auto justify-start px-0 py-0.5 text-xs text-muted-foreground hover:text-foreground",onClick:()=>x(!0),disabled:ai,children:["+ ",k("version.manageTypes")]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{children:k("version.field.baseBranch")}),W?(0,b.jsx)("div",{className:"text-sm text-muted-foreground",children:k("task.branchLoading")}):ad&&J.length>0?(0,b.jsxs)(S.Popover,{open:ab,onOpenChange:ac,children:[(0,b.jsxs)(S.PopoverTrigger,{className:"flex h-8 w-full items-center gap-2 rounded-lg border border-input bg-transparent px-3 text-sm transition-colors hover:bg-accent focus:outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50",disabled:ai,"data-testid":"version-branch-selector",children:[(0,b.jsx)(o.GitBranch,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}),(0,b.jsx)("span",{className:`flex-1 truncate text-left text-xs ${y?"font-mono":"text-muted-foreground"}`,children:y||k("version.field.noBranch")}),(0,b.jsx)(N.ChevronsUpDown,{className:"h-3.5 w-3.5 shrink-0 opacity-50"})]}),(0,b.jsx)(S.PopoverContent,{className:"p-0",align:"start",children:(0,b.jsxs)(T.Command,{children:[(0,b.jsx)(T.CommandInput,{placeholder:k("task.branchSearch")}),(0,b.jsxs)(T.CommandList,{children:[(0,b.jsx)(T.CommandEmpty,{children:k("task.branchNone")}),(0,b.jsxs)(T.CommandGroup,{children:[(0,b.jsxs)(T.CommandItem,{value:"__none__",onSelect:()=>{z(""),ac(!1)},children:[(0,b.jsx)("span",{className:"flex-1 truncate text-muted-foreground",children:k("version.field.noBranch")}),!y&&(0,b.jsx)(M.Check,{className:"ml-auto h-3 w-3 shrink-0 text-primary"})]}),J.map(a=>(0,b.jsxs)(T.CommandItem,{value:a,onSelect:()=>{z(a),ac(!1)},children:[(0,b.jsx)(o.GitBranch,{className:"mr-2 h-3 w-3 shrink-0 text-muted-foreground"}),(0,b.jsx)("span",{className:"flex-1 truncate font-mono",children:a}),a===y&&(0,b.jsx)(M.Check,{className:"ml-auto h-3 w-3 shrink-0 text-primary"})]},a))]})]})]})})]}):(0,b.jsx)(P.Input,{id:"version-base-branch",value:y,onChange:a=>z(a.target.value),placeholder:"main",disabled:ai})]}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-start-date",children:k("version.field.startDate")}),(0,b.jsx)("input",{id:"version-start-date",type:"date",value:B,onChange:a=>C(a.target.value),disabled:ai,className:"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 py-1 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50"})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-target-date",children:k("version.field.targetDate")}),(0,b.jsx)("input",{id:"version-target-date",type:"date",value:D,onChange:a=>E(a.target.value),disabled:ai,className:"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 py-1 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50"})]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-description",children:k("version.field.description")}),(0,b.jsx)(V.Textarea,{id:"version-description",value:F,onChange:a=>G(a.target.value),rows:3,disabled:ai})]}),!m&&(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(U.Switch,{id:"version-set-current",checked:H,onCheckedChange:I,disabled:ai}),(0,b.jsx)(Q.Label,{htmlFor:"version-set-current",className:"cursor-pointer",children:k("version.field.setCurrent")})]})]}),(0,b.jsxs)(O.DialogFooter,{children:[(0,b.jsx)(l.Button,{variant:"outline",onClick:()=>d(!1),disabled:ai,children:k("common.cancel")}),(0,b.jsx)(l.Button,{onClick:()=>{n.trim()&&q.trim()&&aj(async()=>{try{m&&g?await Y(g.id,{number:n.trim(),name:q.trim(),typeId:s||null,baseBranch:y.trim()||null,startDate:ag(B)??null,targetDate:ag(D)??null,description:F.trim()||null}):await X({projectId:e,number:n.trim(),name:q.trim(),typeId:s||void 0,baseBranch:y.trim()||void 0,startDate:ag(B),targetDate:ag(D),description:F.trim()||void 0,setCurrent:H}),L.toast.success(m?k("version.edit"):k("version.new")),d(!1),j?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})},disabled:ai||!n.trim()||!q.trim(),children:m?k("common.save"):k("common.create")})]})]}),(0,b.jsx)(ae,{open:w,onOpenChange:x,workspaceId:f,onChanged:()=>Z(f).then(v)})]})}let ai=(0,W.createServerReference)("609bd30d0af14ce31bb49e71ad36b910c73d395bb1",W.callServer,void 0,W.findSourceMapURL,"releaseVersion");function aj({open:a,onOpenChange:d,version:e,candidates:f,onSuccess:g}){let{t:h}=(0,A.useI18n)(),[i,j]=(0,c.useState)(""),[k,m]=(0,c.useTransition)();(0,c.useEffect)(()=>{a&&j("")},[a,e]);let n=f.find(a=>a.id===i),o=f.length>0,p=o&&!!i&&!k;return(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:h("version.releaseAction")})}),(0,b.jsxs)("div",{className:"grid gap-4 py-2",children:[e&&(0,b.jsxs)("p",{className:"text-sm text-muted-foreground",children:[e.number," · ",e.name]}),(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsx)("span",{children:h("version.release.rolloverHint")}),e?.unfinishedCount!==void 0&&e.unfinishedCount>0&&(0,b.jsxs)("span",{className:"ml-1 font-medium text-foreground",children:["(",e.unfinishedCount,")"]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:h("version.release.nextVersion")}),o?(0,b.jsxs)(R.Select,{value:i,onValueChange:a=>{a&&j(a)},disabled:k,children:[(0,b.jsx)(R.SelectTrigger,{className:"w-full",children:(0,b.jsx)("span",{className:"truncate",children:n?`${n.number} \xb7 ${n.name}`:""})}),(0,b.jsx)(R.SelectContent,{children:f.map(a=>(0,b.jsxs)(R.SelectItem,{value:a.id,children:[a.number," · ",a.name]},a.id))})]}):(0,b.jsx)("p",{className:"text-xs text-destructive",children:h("version.release.noCandidates")})]})]}),(0,b.jsxs)(O.DialogFooter,{children:[(0,b.jsx)(l.Button,{variant:"outline",onClick:()=>d(!1),disabled:k,children:h("common.cancel")}),(0,b.jsx)(l.Button,{onClick:()=>{e&&i&&m(async()=>{try{await ai(e.id,i),L.toast.success(h("version.release")),d(!1),g?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})},disabled:!p,children:h("version.release")})]})]})})}var ak=a.i(704494);let al=(0,W.createServerReference)("40e6423714206788362bb8adcc18b09e831cd580c5",W.callServer,void 0,W.findSourceMapURL,"getVersionDiff");var am=a.i(514872);function an({file:a}){let{t:d}=(0,A.useI18n)(),[e,f]=(0,c.useState)(!0),g=a.to&&"/dev/null"!==a.to?a.to:a.from??"",i=a.additions??0,j=a.deletions??0,k=[];for(let b of a.chunks)for(let a of(k.push({type:"normal",content:b.content,chunkHeader:b.content}),b.changes))k.push({type:a.type,content:a.content});let l=k.length>500,m=l?k.slice(0,500):k;return(0,b.jsxs)("div",{className:"overflow-hidden rounded-[10px] border border-border",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f(a=>!a),className:"flex w-full items-center gap-2 bg-muted/40 px-3 py-2 text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${e?"rotate-90":""}`}),(0,b.jsx)("span",{className:"flex-1 truncate font-mono text-[12px] font-medium text-foreground",children:g}),(0,b.jsxs)("span",{className:"shrink-0 font-mono text-[11px] font-bold text-emerald-400",children:["+",i]}),(0,b.jsxs)("span",{className:"shrink-0 font-mono text-[11px] font-bold text-rose-400",children:["−",j]})]}),e&&(0,b.jsxs)("div",{className:"overflow-x-auto",children:[(0,b.jsx)("pre",{className:"m-0 p-0",children:m.map((a,c)=>void 0!==a.chunkHeader?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-muted-foreground bg-muted/40",children:a.content},c):"add"===a.type?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-emerald-300 bg-emerald-500/10",children:a.content},c):"del"===a.type?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-rose-300 bg-rose-500/10",children:a.content},c):(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-muted-foreground",children:a.content},c))}),l&&(0,b.jsx)("p",{className:"border-t border-border px-3 py-2 text-[11px] text-muted-foreground/70 italic",children:d("version.diff.truncated")})]})]})}function ao({open:a,onOpenChange:d,versionId:e,versionLabel:f}){let{t:g}=(0,A.useI18n)(),[h,i]=(0,c.useTransition)(),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{a&&e&&(k(null),m(!1),i(async()=>{let a=await al(e);if(!a)return void m(!0);let b=(0,am.parseUnifiedDiff)(a.patch);0===b.length||""===a.patch?m(!0):k(b)}))},[a,e]),(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-3xl max-h-[80vh] overflow-auto",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsxs)(O.DialogTitle,{children:[g("version.diff.title"),f?` — ${f}`:""]})}),h&&(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-12 text-muted-foreground",children:[(0,b.jsx)(ak.Loader2,{className:"h-5 w-5 animate-spin"}),(0,b.jsx)("span",{className:"text-sm",children:g("version.diff.loading")})]}),!h&&l&&(0,b.jsx)("p",{className:"py-10 text-center text-sm text-muted-foreground",children:g("version.diff.empty")}),!h&&j&&j.length>0&&(0,b.jsx)("div",{className:"flex flex-col gap-2",children:j.map((a,c)=>(0,b.jsx)(an,{file:a},c))})]})})}var ap=a.i(972420);function aq({version:a,isFirst:c,isLast:d,dashed:e=!1,diffStat:f,onEdit:g,onRelease:h,onViewDiff:i,onOpenTaskDetail:j}){return(0,b.jsxs)("div",{className:"flex gap-4",children:[(0,b.jsxs)("div",{className:"relative flex w-5 flex-none flex-col items-center",children:[(0,b.jsx)("div",{className:["w-px flex-none",c?"h-0":"h-6",e?"bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]":"bg-border"].filter(Boolean).join(" ")}),(0,b.jsx)("div",{className:["z-10 h-3.5 w-3.5 flex-none rounded-full border-2",a.isCurrent?"border-primary bg-primary ring-2 ring-primary/30":"ACTIVE"===a.status?"border-emerald-400 bg-emerald-400":"RELEASED"===a.status?"border-zinc-500 bg-zinc-500":"border-muted-foreground/40 bg-transparent border-dashed"].join(" ")}),!d&&(0,b.jsx)("div",{className:["w-px flex-1",e?"bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]":"bg-border"].join(" ")})]}),(0,b.jsx)("div",{className:"min-w-0 flex-1 pb-5",children:(0,b.jsx)(K,{version:a,diffStat:f??null,onEdit:g,onRelease:h,onViewDiff:i,onOpenTaskDetail:j})})]})}a.s(["VersionTimelineClient",0,function({project:a,workspaceId:j,versions:n,diffStats:o,backlog:p}){let q,{t:r}=(0,A.useI18n)(),s=(0,d.useRouter)(),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1),[z,B]=(0,c.useState)(!1),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)(null),[G,H]=(0,c.useState)(null),[I,K]=(0,c.useState)(!1),L=[...[...n.filter(a=>"RELEASED"!==a.status)].sort((a,b)=>{if(!a.targetDate&&!b.targetDate)return 0;if(!a.targetDate)return 1;if(!b.targetDate)return -1;let c=new Date(b.targetDate).getTime()-new Date(a.targetDate).getTime();return 0!==c?c:new Date(b.createdAt).getTime()-new Date(a.createdAt).getTime()}),...[...n.filter(a=>"RELEASED"===a.status)].sort((a,b)=>a.releasedAt||b.releasedAt?a.releasedAt?b.releasedAt?new Date(b.releasedAt).getTime()-new Date(a.releasedAt).getTime():-1:1:0)],M=a=>{let b=n.find(b=>b.id===a);b&&(w({id:b.id,number:b.number,name:b.name,typeId:b.typeId??null,baseBranch:b.baseBranch,startDate:b.startDate,targetDate:b.targetDate,description:b.description}),u(!0))},N=a=>{let b=n.find(b=>b.id===a);b&&(D(b),B(!0))},O=a=>{F(a)},P=()=>{w(null),u(!0)},Q=()=>{s.refresh()},R=C?n.filter(a=>a.id!==C.id&&("PLANNED"===a.status||"ACTIVE"===a.status)).map(a=>({id:a.id,number:a.number,name:a.name})):[],S=C?C.tasks.filter(a=>"DONE"!==a.status&&"CANCELLED"!==a.status).length:void 0;return(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"header-xl flex shrink-0 items-center gap-4 border-b px-6",children:[(0,b.jsxs)(e.default,{href:`/workspaces/${j}`,className:"flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground",children:[(0,b.jsx)(i.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:r("archive.backToBoard")})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)("span",{className:"truncate font-medium",children:a.name}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:r("version.timeline")})]}),(0,b.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground/70",children:r("version.historyHint")})]}),(0,b.jsxs)(l.Button,{variant:"outline",onClick:()=>y(!0),children:[(0,b.jsx)(k,{className:"h-4 w-4"}),r("version.manageTypes")]}),(0,b.jsxs)(l.Button,{onClick:P,children:[(0,b.jsx)(f.Plus,{className:"h-4 w-4"}),r("version.new")]})]}),(0,b.jsx)(m.ScrollArea,{className:"min-h-0 flex-1",children:(0,b.jsx)("div",{className:"px-6 py-6",children:(0,b.jsxs)("div",{className:"mx-auto max-w-3xl",children:[0===n.length&&0===p.length&&(0,b.jsxs)("div",{className:"flex flex-col items-center gap-4 py-20 text-center text-muted-foreground",children:[(0,b.jsx)("p",{className:"text-sm",children:r("version.empty.list")}),(0,b.jsxs)(l.Button,{variant:"outline",onClick:P,children:[(0,b.jsx)(f.Plus,{className:"h-4 w-4"}),r("version.new")]})]}),L.length>0&&(0,b.jsx)("div",{className:"relative",children:L.map((a,c)=>(0,b.jsx)(aq,{version:a,isFirst:0===c,isLast:c===L.length-1&&0===p.length,diffStat:o[a.id],onEdit:M,onRelease:N,onViewDiff:O,onOpenTaskDetail:H},a.id))}),p.length>0&&(0,b.jsxs)("div",{className:"flex gap-4",children:[(0,b.jsxs)("div",{className:"relative flex w-5 flex-none flex-col items-center",children:[(0,b.jsx)("div",{className:"h-6 w-px bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]"}),(0,b.jsx)("div",{className:"z-10 h-3.5 w-3.5 flex-none rounded-full border-2 border-dashed border-muted-foreground/40 bg-transparent"})]}),(0,b.jsx)("div",{className:"min-w-0 flex-1 pb-5",children:(0,b.jsxs)("div",{className:"overflow-hidden rounded-[14px] border border-dashed bg-muted/40 shadow-sm",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>K(a=>!a),className:"w-full px-4 py-3 text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${I?"rotate-90":""}`}),(0,b.jsx)(g.Archive,{className:"h-4 w-4 flex-none text-muted-foreground/70"}),(0,b.jsx)("span",{className:"text-sm font-semibold text-foreground",children:r("version.history")}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:r("version.historySub")}),(0,b.jsx)("span",{className:"flex-1"}),(0,b.jsxs)("span",{className:"text-[11.5px] text-muted-foreground",children:[p.length," ",r("version.tasksCount")]})]}),(0,b.jsx)("p",{className:"mt-2 text-xs text-muted-foreground/70",children:r("version.historyHint")})]}),I&&(0,b.jsx)("div",{className:"border-t border-dashed border-border px-2 pb-2 pt-1.5",children:p.map(a=>(0,b.jsx)(J,{task:a,onOpenDetail:H},a.id))})]})})]})]})})}),(0,b.jsx)(ah,{open:t,onOpenChange:a=>{u(a),a||w(null)},projectId:a.id,workspaceId:j,editVersion:v,defaultBaseBranch:null,projectLocalPath:a.localPath,onSuccess:Q}),(0,b.jsx)(ae,{open:x,onOpenChange:y,workspaceId:j,onChanged:()=>s.refresh()}),(0,b.jsx)(aj,{open:z,onOpenChange:a=>{B(a),a||D(null)},version:C?{id:C.id,number:C.number,name:C.name,unfinishedCount:S}:null,candidates:R,onSuccess:Q}),(0,b.jsx)(ao,{open:!!E,onOpenChange:a=>{a||F(null)},versionId:E,versionLabel:E&&(q=n.find(a=>a.id===E))?`${q.number} ${q.name}`:void 0}),(0,b.jsx)(ap.TaskOverviewDrawer,{open:!!G,onOpenChange:a=>{a||H(null)},taskId:G})]})}],144016)}];
1
+ module.exports=[144016,a=>{"use strict";var b=a.i(728778),c=a.i(374637),d=a.i(553798),e=a.i(634910),f=a.i(774881),g=a.i(607219),h=a.i(10390),i=a.i(269280),j=a.i(711796);let k=(0,j.default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var l=a.i(699570),m=a.i(269876),n=a.i(157551),o=a.i(577565),p=a.i(207339),q=a.i(881107),r=a.i(394869),s=a.i(347165),t=a.i(350739);let u=(0,j.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var v=a.i(690251);let w=(0,j.default)("package-check",[["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m16 17 2 2 4-4",key:"uh5qu3"}],["path",{d:"M21 11.127V8a2 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.729l7 4a2 2 0 0 0 2 .001l1.32-.753",key:"kpkbpo"}],["path",{d:"M3.29 7 12 12l8.71-5",key:"19ckod"}],["path",{d:"m7.5 4.27 8.997 5.148",key:"9yrvtv"}]]),x=(0,j.default)("panel-right",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);var y=a.i(785259),z=a.i(521007),A=a.i(951192);let B=["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 C(a){return B[function(a){let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)>>>0;return b}(a)%B.length]}let D={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"};function E({name:a}){let{t:c}=(0,A.useI18n)();return a?(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${C(a)}`,children:a}):(0,b.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:c("version.type.uncategorized")})}function F({status:a}){let{t:c}=(0,A.useI18n)();return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${D[a]}`,children:c(`version.status.${a}`)})}function G(a){if(!a)return"";let b="string"==typeof a?new Date(a):a;if(isNaN(b.getTime()))return"";let c=String(b.getMonth()+1).padStart(2,"0"),d=String(b.getDate()).padStart(2,"0");return`${c}-${d}`}let H=Object.fromEntries(z.BOARD_COLUMNS.map(a=>[a.id,a.color]));function I({children:a,className:c}){return(0,b.jsx)("span",{className:`inline-flex items-center gap-1.5 rounded-md border border-border bg-muted/40 px-2 py-0.5 text-xs text-muted-foreground ${c??""}`,children:a})}function J({task:a,onOpenDetail:d}){let{t:e}=(0,A.useI18n)(),[f,g]=(0,c.useState)(!1),i="CANCELLED"===a.status?"text-muted-foreground line-through decoration-muted-foreground/40":"DONE"===a.status?"text-muted-foreground":"text-foreground";return(0,b.jsxs)("div",{className:"rounded-[10px]",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>g(a=>!a),className:"flex w-full items-center gap-2.5 rounded-[10px] px-2.5 py-2.5 text-left transition-colors hover:bg-muted/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${f?"rotate-90":""}`}),(0,b.jsx)("span",{className:`h-2 w-2 flex-none rounded-full ${H[a.status]??"bg-slate-400"}`}),(0,b.jsx)("span",{className:`text-[13.5px] font-medium ${i}`,children:a.title}),a.labels.map(({label:a})=>(0,b.jsx)("span",{className:"rounded-full border border-border px-1.5 py-px text-[10.5px] text-muted-foreground",style:a.color?{borderColor:a.color+"55",color:a.color}:void 0,children:a.name},a.id)),(0,b.jsx)("span",{className:"flex-1"}),(0,b.jsx)("span",{className:"flex w-16 flex-none justify-center",children:(0,b.jsx)("span",{className:`rounded-[5px] px-1.5 py-px text-[10.5px] font-bold ${z.PRIORITY_CONFIG[a.priority]?.color??z.PRIORITY_CONFIG.LOW.color}`,children:a.priority})}),(0,b.jsx)("span",{className:"h-3 w-px bg-border flex-none"}),(0,b.jsxs)("span",{className:"flex w-[72px] flex-none items-center gap-1.5",children:[(0,b.jsx)("span",{className:`h-1.5 w-1.5 flex-none rounded-full ${H[a.status]??"bg-slate-400"}`}),(0,b.jsx)("span",{className:"truncate text-[10.5px] text-muted-foreground",children:e(`version.taskStatus.${a.status}`)})]}),(0,b.jsx)("span",{className:"h-3 w-px bg-border flex-none"}),(0,b.jsx)("span",{className:"flex w-6 flex-none justify-center",children:d&&(0,b.jsxs)(y.Tooltip,{children:[(0,b.jsx)(y.TooltipTrigger,{render:(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 text-muted-foreground",onClick:b=>{b.stopPropagation(),d(a.id)}}),children:(0,b.jsx)(x,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(y.TooltipContent,{children:e("version.detail")})]})})]}),f&&(0,b.jsxs)("div",{className:"flex flex-col gap-2.5 pb-3 pl-[30px] pr-3 pt-1",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(s.FolderOpen,{className:"h-3 w-3 text-muted-foreground/60"}),(0,b.jsx)("span",{className:"text-[11px] font-bold uppercase tracking-wide text-muted-foreground/60",children:e("version.resources")})]}),0===a.assets.length?(0,b.jsx)("p",{className:"text-[12px] italic text-muted-foreground/60",children:e("version.empty.resources")}):(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:a.assets.map(a=>{var c;let d=a.mimeType?.startsWith("image/");return(0,b.jsxs)("span",{className:"inline-flex cursor-pointer items-center gap-1.5 rounded-lg border border-border bg-background px-2.5 py-1.5 text-[12px] text-foreground shadow-sm transition-colors hover:border-primary/50",children:[d?(0,b.jsx)(u,{className:"h-3.5 w-3.5 text-muted-foreground"}):(0,b.jsx)(t.FileText,{className:"h-3.5 w-3.5 text-muted-foreground"}),(0,b.jsx)("span",{children:a.filename}),null!=a.size&&(0,b.jsx)("span",{className:"text-[11px] text-muted-foreground/60",children:(c=a.size)<1024?`${c} B`:c<1048576?`${Math.round(c/1024)} KB`:`${(c/1048576).toFixed(1)} MB`})]},a.id)})})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(t.FileText,{className:"h-3 w-3 text-muted-foreground/60"}),(0,b.jsx)("span",{className:"text-[11px] font-bold uppercase tracking-wide text-muted-foreground/60",children:e("version.notes")})]}),0===a.notes.length?(0,b.jsx)("p",{className:"text-[12px] italic text-muted-foreground/60",children:e("version.empty.notes")}):(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:a.notes.map(a=>(0,b.jsx)("div",{className:"rounded-lg border border-border border-l-violet-500/50 bg-background px-2.5 py-2 shadow-sm [border-left-width:3px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[12.5px] font-semibold text-foreground",children:a.title}),a.category&&(0,b.jsx)("span",{className:"rounded-[5px] border border-violet-500/30 bg-violet-500/15 px-1.5 py-px text-[10px] font-bold text-violet-300",children:a.category})]})},a.id))})]})]})]})}function K({version:a,diffStat:d,onEdit:e,onRelease:f,onViewDiff:g,onOpenTaskDetail:i}){var j;let k,{t:m}=(0,A.useI18n)(),[s,t]=(0,c.useState)(a.isCurrent),u="RELEASED"===a.status,x="ACTIVE"===a.status,z=a.tasks.length,B=a.tasks.filter(a=>"DONE"===a.status).length,C=!!(a.releaseCommit||d),D=(k=`${z} ${m("version.tasksCount")}`,B>0&&B<z?`${k} \xb7 ${B} ${m("version.doneCount")}`:B>0&&B===z?`${k} \xb7 ${m("version.allDone")}`:k);return(0,b.jsxs)("div",{className:["overflow-hidden rounded-[14px] border bg-card shadow-sm transition-shadow duration-150 hover:shadow-md",a.isCurrent?"border-border border-l-2 border-l-primary ring-1 ring-primary/20":"border-border",u?"opacity-[.96]":""].filter(Boolean).join(" "),children:[(0,b.jsx)("button",{type:"button",onClick:()=>t(a=>!a),className:"w-full text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:(0,b.jsxs)("div",{className:"px-4 py-3.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(h.ChevronRight,{className:`h-4 w-4 flex-none text-muted-foreground/60 transition-transform duration-150 ${s?"rotate-90":""}`}),(0,b.jsx)("span",{className:"font-mono text-[14.5px] font-bold text-foreground",children:a.number}),(0,b.jsx)("span",{className:"text-[14.5px] font-semibold text-foreground",children:a.name}),(0,b.jsx)(E,{name:a.type?.name??null}),(0,b.jsx)(F,{status:a.status}),a.isCurrent&&(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 rounded-full border border-primary/30 bg-primary/15 px-2.5 py-0.5 text-[11px] font-bold text-primary shadow-sm",children:[(0,b.jsx)("span",{className:"h-1.5 w-1.5 rounded-full bg-primary opacity-90"}),m("version.current")]}),(0,b.jsx)("span",{className:"flex-1"}),z>0&&(0,b.jsx)("span",{className:"text-[11.5px] text-muted-foreground",children:D}),(0,b.jsxs)("span",{className:"flex items-center gap-1",onClick:a=>a.stopPropagation(),onKeyDown:a=>a.stopPropagation(),children:[e&&(0,b.jsxs)(y.Tooltip,{children:[(0,b.jsx)(y.TooltipTrigger,{render:(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground",onClick:()=>e(a.id)}),children:(0,b.jsx)(v.Pencil,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(y.TooltipContent,{children:m("version.edit")})]}),x&&f&&(0,b.jsxs)(l.Button,{variant:"outline",className:"h-7 px-2 text-xs font-semibold",onClick:()=>f(a.id),children:[(0,b.jsx)(w,{className:"h-3.5 w-3.5"}),m("version.release")]})]})]}),(0,b.jsxs)("div",{className:"mt-2.5 flex flex-wrap items-center gap-2",children:[u&&a.releasedAt?(0,b.jsxs)(I,{children:[(0,b.jsx)(n.Calendar,{className:"h-3 w-3"}),m("version.releasedAt"),(0,b.jsx)("strong",{className:"text-foreground",children:G(a.releasedAt)})]}):a.startDate||a.targetDate?(0,b.jsxs)(I,{children:[(0,b.jsx)(n.Calendar,{className:"h-3 w-3"}),a.startDate?G(a.startDate):"—"," → ",a.targetDate?(0,b.jsx)("strong",{className:"text-foreground",children:G(a.targetDate)}):"—"]}):null,a.baseBranch&&(0,b.jsxs)(I,{children:[(0,b.jsx)(o.GitBranch,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:a.baseBranch})]}),a.baseCommit&&(0,b.jsxs)(I,{children:[(0,b.jsx)(p.GitCommitHorizontal,{className:"h-3 w-3"}),m("version.field.baseCommit"),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:(j=a.baseCommit)?j.slice(0,7):""})]}),u&&(0,b.jsxs)(I,{children:[(0,b.jsx)(q.Tag,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"font-mono text-[11px] text-foreground",children:a.number})]}),d&&(0,b.jsxs)(I,{children:[(0,b.jsx)(r.GitCompare,{className:"h-3 w-3"}),!u&&(0,b.jsx)("span",{className:"text-muted-foreground",children:m("version.diff.live")}),(0,b.jsxs)("span",{className:"font-bold text-emerald-400",children:["+",d.additions.toLocaleString()]}),(0,b.jsxs)("span",{className:"font-bold text-rose-400",children:["−",d.deletions.toLocaleString()]}),(0,b.jsxs)("span",{className:"text-muted-foreground",children:["· ",d.files," ",m("version.diff.files")]})]}),C&&g&&(0,b.jsxs)(l.Button,{variant:"ghost",size:"sm",className:"h-6 gap-1 px-2 text-xs text-muted-foreground",onClick:b=>{b.stopPropagation(),g(a.id)},children:[(0,b.jsx)(r.GitCompare,{className:"h-3 w-3"}),m("version.diff.view")," →"]})]}),a.description&&(0,b.jsx)("p",{className:"mt-2 text-[13px] text-muted-foreground",children:a.description})]})}),s&&z>0&&(0,b.jsx)("div",{className:"border-t border-dashed border-border bg-muted/40 px-2 pb-2 pt-1.5",children:a.tasks.map(a=>(0,b.jsx)(J,{task:a,onOpenDetail:i},a.id))})]})}var L=a.i(952313),M=a.i(668116),N=a.i(113047),O=a.i(814574),P=a.i(866718),Q=a.i(412783),R=a.i(580701),S=a.i(599209),T=a.i(419622),U=a.i(563658),V=a.i(429246),W=a.i(780410);let X=(0,W.createServerReference)("40d18c7680c72a010593fae70765c91c4ae4b8f486",W.callServer,void 0,W.findSourceMapURL,"createVersion"),Y=(0,W.createServerReference)("60cb78c2d2b301420780510218497e875ec33a7b1c",W.callServer,void 0,W.findSourceMapURL,"updateVersion"),Z=(0,W.createServerReference)("40349d29a0a4118119932e1feeb42a1a2aa96a05c7",W.callServer,void 0,W.findSourceMapURL,"getVersionTypes");var $=a.i(80471),_=a.i(923581),aa=a.i(975231);let ab=(0,W.createServerReference)("40e74c59b32837cb29fcb61a9cabf73ff9acfcb469",W.callServer,void 0,W.findSourceMapURL,"createVersionType"),ac=(0,W.createServerReference)("60c27dee3f8a694c147e8fd810ca0c292232f8711a",W.callServer,void 0,W.findSourceMapURL,"updateVersionType"),ad=(0,W.createServerReference)("403d00366168a8687335b6ace77c5b3ba3a0fd9935",W.callServer,void 0,W.findSourceMapURL,"deleteVersionType");function ae({open:a,onOpenChange:d,workspaceId:e,onChanged:f}){let{t:g}=(0,A.useI18n)(),[h,i]=(0,c.useState)([]),[j,k]=(0,c.useState)(""),[m,n]=(0,c.useState)({}),[o,p]=(0,c.useTransition)(),q=async()=>{let a=await Z(e);i(a),n(b=>{let c={};return a.forEach(a=>{c[a.id]=a.id in b?b[a.id]:a.name}),c})};(0,c.useEffect)(()=>{a&&(q(),k(""))},[a,e]);let r=()=>{let a=j.trim();a&&p(async()=>{try{await ab({workspaceId:e,name:a}),k(""),await q(),f?.(),L.toast.success(g("version.type.add"))}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})};return(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:g("version.manageTypes")})}),(0,b.jsxs)("div",{className:"flex flex-col gap-4 py-2",children:[(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(P.Input,{value:j,onChange:a=>k(a.target.value),placeholder:g("version.type.namePlaceholder"),disabled:o,onKeyDown:a=>{"Enter"===a.key&&r()},className:"flex-1"}),(0,b.jsx)(l.Button,{onClick:r,disabled:o||!j.trim(),children:g("version.type.add")})]}),0===h.length?(0,b.jsx)("p",{className:"text-center text-sm text-muted-foreground py-4",children:g("version.type.empty")}):(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:h.map(a=>(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-border bg-muted/30 px-3 py-2",children:[(0,b.jsx)("span",{className:`inline-flex h-2.5 w-2.5 flex-none rounded-full ${C(m[a.id]??a.name).split(" ").filter(a=>a.startsWith("bg-"))[0]??"bg-muted"}`}),(0,b.jsx)(P.Input,{value:m[a.id]??a.name,onChange:b=>n(c=>({...c,[a.id]:b.target.value})),onBlur:()=>(a=>{let b=(m[a]??"").trim();if(!b)return;let c=h.find(b=>b.id===a);c?.name!==b&&p(async()=>{try{await ac(a,{name:b}),await q(),f?.()}catch(b){L.toast.error(b instanceof Error?b.message:String(b)),n(b=>({...b,[a]:c?.name??""}))}})})(a.id),onKeyDown:a=>{"Enter"===a.key&&a.target.blur()},disabled:o,className:"h-7 flex-1 border-transparent bg-transparent shadow-none focus-visible:border-input focus-visible:bg-background focus-visible:shadow-sm"}),(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 flex-none text-muted-foreground hover:text-destructive",onClick:()=>{var b;return b=a.id,void(window.confirm(g("version.type.deleteConfirm"))&&p(async()=>{try{await ad(b),await q(),f?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}}))},disabled:o,children:(0,b.jsx)(aa.Trash2,{className:"h-3.5 w-3.5"})})]},a.id))})]})]})})}function af(a){if(!a)return"";let b="string"==typeof a?new Date(a):a;if(isNaN(b.getTime()))return"";let c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}function ag(a){if(!a)return;let b=new Date(a);return isNaN(b.getTime())?void 0:b}function ah({open:a,onOpenChange:d,projectId:e,workspaceId:f,editVersion:g,defaultBaseBranch:h,projectLocalPath:i,onSuccess:j}){let{t:k}=(0,A.useI18n)(),m=!!g,[n,p]=(0,c.useState)(""),[q,r]=(0,c.useState)(""),[s,t]=(0,c.useState)(""),[u,v]=(0,c.useState)([]),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(""),[B,C]=(0,c.useState)(""),[D,E]=(0,c.useState)(""),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)([]),[W,aa]=(0,c.useState)(!1),[ab,ac]=(0,c.useState)(!1),ad=!!i,[ai,aj]=(0,c.useTransition)();return(0,c.useEffect)(()=>{a&&(g?(p(g.number),r(g.name),t(g.typeId??""),z(g.baseBranch??""),C(af(g.startDate)),E(af(g.targetDate)),G(g.description??"")):(p(""),r(""),t(""),z(h??""),C(""),E(""),G("")),I(!1))},[a,g,h]),(0,c.useEffect)(()=>{a&&Z(f).then(v).catch(()=>v([]))},[a,f]),(0,c.useEffect)(()=>{a&&ad?(aa(!0),(0,$.getProjectBranches)(i).then(K).catch(()=>K([])).finally(()=>aa(!1)),(0,_.fetchRemoteBranches)(i).then(()=>(0,$.getProjectBranches)(i).then(K)).catch(()=>{})):K([])},[a,ad,i]),(0,b.jsxs)(O.Dialog,{open:a,onOpenChange:d,children:[(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:m?k("version.edit"):k("version.new")})}),(0,b.jsxs)("div",{className:"grid gap-4 py-2",children:[(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsxs)(Q.Label,{htmlFor:"version-number",children:[k("version.field.number"),(0,b.jsx)("span",{className:"text-destructive ml-0.5",children:"*"})]}),(0,b.jsx)(P.Input,{id:"version-number",value:n,onChange:a=>p(a.target.value),placeholder:k("version.placeholder.number"),disabled:ai})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsxs)(Q.Label,{htmlFor:"version-name",children:[k("version.field.name"),(0,b.jsx)("span",{className:"text-destructive ml-0.5",children:"*"})]}),(0,b.jsx)(P.Input,{id:"version-name",value:q,onChange:a=>r(a.target.value),placeholder:k("version.placeholder.name"),disabled:ai})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{children:k("version.field.type")}),(0,b.jsxs)(R.Select,{value:s||"__none__",onValueChange:a=>{t(a&&"__none__"!==a?a:"")},children:[(0,b.jsx)(R.SelectTrigger,{className:"w-full",disabled:ai,children:(0,b.jsx)("span",{className:"truncate",children:s?u.find(a=>a.id===s)?.name??k("version.type.uncategorized"):k("version.type.uncategorized")})}),(0,b.jsxs)(R.SelectContent,{children:[(0,b.jsx)(R.SelectItem,{value:"__none__",children:k("version.type.uncategorized")}),u.map(a=>(0,b.jsx)(R.SelectItem,{value:a.id,children:a.name},a.id))]})]}),(0,b.jsxs)(l.Button,{type:"button",variant:"ghost",size:"sm",className:"h-auto justify-start px-0 py-0.5 text-xs text-muted-foreground hover:text-foreground",onClick:()=>x(!0),disabled:ai,children:["+ ",k("version.manageTypes")]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{children:k("version.field.baseBranch")}),W?(0,b.jsx)("div",{className:"text-sm text-muted-foreground",children:k("task.branchLoading")}):ad&&J.length>0?(0,b.jsxs)(S.Popover,{open:ab,onOpenChange:ac,children:[(0,b.jsxs)(S.PopoverTrigger,{className:"flex h-8 w-full items-center gap-2 rounded-lg border border-input bg-transparent px-3 text-sm transition-colors hover:bg-accent focus:outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:opacity-50",disabled:ai,"data-testid":"version-branch-selector",children:[(0,b.jsx)(o.GitBranch,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}),(0,b.jsx)("span",{className:`flex-1 truncate text-left text-xs ${y?"font-mono":"text-muted-foreground"}`,children:y||k("version.field.noBranch")}),(0,b.jsx)(N.ChevronsUpDown,{className:"h-3.5 w-3.5 shrink-0 opacity-50"})]}),(0,b.jsx)(S.PopoverContent,{className:"p-0",align:"start",children:(0,b.jsxs)(T.Command,{children:[(0,b.jsx)(T.CommandInput,{placeholder:k("task.branchSearch")}),(0,b.jsxs)(T.CommandList,{children:[(0,b.jsx)(T.CommandEmpty,{children:k("task.branchNone")}),(0,b.jsxs)(T.CommandGroup,{children:[(0,b.jsxs)(T.CommandItem,{value:"__none__",onSelect:()=>{z(""),ac(!1)},children:[(0,b.jsx)("span",{className:"flex-1 truncate text-muted-foreground",children:k("version.field.noBranch")}),!y&&(0,b.jsx)(M.Check,{className:"ml-auto h-3 w-3 shrink-0 text-primary"})]}),J.map(a=>(0,b.jsxs)(T.CommandItem,{value:a,onSelect:()=>{z(a),ac(!1)},children:[(0,b.jsx)(o.GitBranch,{className:"mr-2 h-3 w-3 shrink-0 text-muted-foreground"}),(0,b.jsx)("span",{className:"flex-1 truncate font-mono",children:a}),a===y&&(0,b.jsx)(M.Check,{className:"ml-auto h-3 w-3 shrink-0 text-primary"})]},a))]})]})]})})]}):(0,b.jsx)(P.Input,{id:"version-base-branch",value:y,onChange:a=>z(a.target.value),placeholder:"main",disabled:ai})]}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-start-date",children:k("version.field.startDate")}),(0,b.jsx)("input",{id:"version-start-date",type:"date",value:B,onChange:a=>C(a.target.value),disabled:ai,className:"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 py-1 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50"})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-target-date",children:k("version.field.targetDate")}),(0,b.jsx)("input",{id:"version-target-date",type:"date",value:D,onChange:a=>E(a.target.value),disabled:ai,className:"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 py-1 text-sm outline-none transition-colors focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50"})]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)(Q.Label,{htmlFor:"version-description",children:k("version.field.description")}),(0,b.jsx)(V.Textarea,{id:"version-description",value:F,onChange:a=>G(a.target.value),rows:3,disabled:ai})]}),!m&&(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(U.Switch,{id:"version-set-current",checked:H,onCheckedChange:I,disabled:ai}),(0,b.jsx)(Q.Label,{htmlFor:"version-set-current",className:"cursor-pointer",children:k("version.field.setCurrent")})]})]}),(0,b.jsxs)(O.DialogFooter,{children:[(0,b.jsx)(l.Button,{variant:"outline",onClick:()=>d(!1),disabled:ai,children:k("common.cancel")}),(0,b.jsx)(l.Button,{onClick:()=>{n.trim()&&q.trim()&&aj(async()=>{try{m&&g?await Y(g.id,{number:n.trim(),name:q.trim(),typeId:s||null,baseBranch:y.trim()||null,startDate:ag(B)??null,targetDate:ag(D)??null,description:F.trim()||null}):await X({projectId:e,number:n.trim(),name:q.trim(),typeId:s||void 0,baseBranch:y.trim()||void 0,startDate:ag(B),targetDate:ag(D),description:F.trim()||void 0,setCurrent:H}),L.toast.success(m?k("version.edit"):k("version.new")),d(!1),j?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})},disabled:ai||!n.trim()||!q.trim(),children:m?k("common.save"):k("common.create")})]})]}),(0,b.jsx)(ae,{open:w,onOpenChange:x,workspaceId:f,onChanged:()=>Z(f).then(v)})]})}let ai=(0,W.createServerReference)("60fb2f40ca467a1c87188bc9ac4f7b637ecdf64feb",W.callServer,void 0,W.findSourceMapURL,"releaseVersion");function aj({open:a,onOpenChange:d,version:e,candidates:f,onSuccess:g}){let{t:h}=(0,A.useI18n)(),[i,j]=(0,c.useState)(""),[k,m]=(0,c.useTransition)();(0,c.useEffect)(()=>{a&&j("")},[a,e]);let n=f.find(a=>a.id===i),o=f.length>0,p=o&&!!i&&!k;return(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-md",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsx)(O.DialogTitle,{children:h("version.releaseAction")})}),(0,b.jsxs)("div",{className:"grid gap-4 py-2",children:[e&&(0,b.jsxs)("p",{className:"text-sm text-muted-foreground",children:[e.number," · ",e.name]}),(0,b.jsxs)("div",{className:"text-sm",children:[(0,b.jsx)("span",{children:h("version.release.rolloverHint")}),e?.unfinishedCount!==void 0&&e.unfinishedCount>0&&(0,b.jsxs)("span",{className:"ml-1 font-medium text-foreground",children:["(",e.unfinishedCount,")"]})]}),(0,b.jsxs)("div",{className:"grid gap-1.5",children:[(0,b.jsx)("label",{className:"text-sm font-medium",children:h("version.release.nextVersion")}),o?(0,b.jsxs)(R.Select,{value:i,onValueChange:a=>{a&&j(a)},disabled:k,children:[(0,b.jsx)(R.SelectTrigger,{className:"w-full",children:(0,b.jsx)("span",{className:"truncate",children:n?`${n.number} \xb7 ${n.name}`:""})}),(0,b.jsx)(R.SelectContent,{children:f.map(a=>(0,b.jsxs)(R.SelectItem,{value:a.id,children:[a.number," · ",a.name]},a.id))})]}):(0,b.jsx)("p",{className:"text-xs text-destructive",children:h("version.release.noCandidates")})]})]}),(0,b.jsxs)(O.DialogFooter,{children:[(0,b.jsx)(l.Button,{variant:"outline",onClick:()=>d(!1),disabled:k,children:h("common.cancel")}),(0,b.jsx)(l.Button,{onClick:()=>{e&&i&&m(async()=>{try{await ai(e.id,i),L.toast.success(h("version.release")),d(!1),g?.()}catch(a){L.toast.error(a instanceof Error?a.message:String(a))}})},disabled:!p,children:h("version.release")})]})]})})}var ak=a.i(704494);let al=(0,W.createServerReference)("40aaf5ed789d3a7f90544fe55a4e64fa2beabe51b1",W.callServer,void 0,W.findSourceMapURL,"getVersionDiff");var am=a.i(514872);function an({file:a}){let{t:d}=(0,A.useI18n)(),[e,f]=(0,c.useState)(!0),g=a.to&&"/dev/null"!==a.to?a.to:a.from??"",i=a.additions??0,j=a.deletions??0,k=[];for(let b of a.chunks)for(let a of(k.push({type:"normal",content:b.content,chunkHeader:b.content}),b.changes))k.push({type:a.type,content:a.content});let l=k.length>500,m=l?k.slice(0,500):k;return(0,b.jsxs)("div",{className:"overflow-hidden rounded-[10px] border border-border",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f(a=>!a),className:"flex w-full items-center gap-2 bg-muted/40 px-3 py-2 text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${e?"rotate-90":""}`}),(0,b.jsx)("span",{className:"flex-1 truncate font-mono text-[12px] font-medium text-foreground",children:g}),(0,b.jsxs)("span",{className:"shrink-0 font-mono text-[11px] font-bold text-emerald-400",children:["+",i]}),(0,b.jsxs)("span",{className:"shrink-0 font-mono text-[11px] font-bold text-rose-400",children:["−",j]})]}),e&&(0,b.jsxs)("div",{className:"overflow-x-auto",children:[(0,b.jsx)("pre",{className:"m-0 p-0",children:m.map((a,c)=>void 0!==a.chunkHeader?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-muted-foreground bg-muted/40",children:a.content},c):"add"===a.type?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-emerald-300 bg-emerald-500/10",children:a.content},c):"del"===a.type?(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-rose-300 bg-rose-500/10",children:a.content},c):(0,b.jsx)("div",{className:"whitespace-pre px-3 py-px font-mono text-xs text-muted-foreground",children:a.content},c))}),l&&(0,b.jsx)("p",{className:"border-t border-border px-3 py-2 text-[11px] text-muted-foreground/70 italic",children:d("version.diff.truncated")})]})]})}function ao({open:a,onOpenChange:d,versionId:e,versionLabel:f}){let{t:g}=(0,A.useI18n)(),[h,i]=(0,c.useTransition)(),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{a&&e&&(k(null),m(!1),i(async()=>{let a=await al(e);if(!a)return void m(!0);let b=(0,am.parseUnifiedDiff)(a.patch);0===b.length||""===a.patch?m(!0):k(b)}))},[a,e]),(0,b.jsx)(O.Dialog,{open:a,onOpenChange:d,children:(0,b.jsxs)(O.DialogContent,{className:"sm:max-w-3xl max-h-[80vh] overflow-auto",children:[(0,b.jsx)(O.DialogHeader,{children:(0,b.jsxs)(O.DialogTitle,{children:[g("version.diff.title"),f?` — ${f}`:""]})}),h&&(0,b.jsxs)("div",{className:"flex items-center justify-center gap-2 py-12 text-muted-foreground",children:[(0,b.jsx)(ak.Loader2,{className:"h-5 w-5 animate-spin"}),(0,b.jsx)("span",{className:"text-sm",children:g("version.diff.loading")})]}),!h&&l&&(0,b.jsx)("p",{className:"py-10 text-center text-sm text-muted-foreground",children:g("version.diff.empty")}),!h&&j&&j.length>0&&(0,b.jsx)("div",{className:"flex flex-col gap-2",children:j.map((a,c)=>(0,b.jsx)(an,{file:a},c))})]})})}var ap=a.i(972420);function aq({version:a,isFirst:c,isLast:d,dashed:e=!1,diffStat:f,onEdit:g,onRelease:h,onViewDiff:i,onOpenTaskDetail:j}){return(0,b.jsxs)("div",{className:"flex gap-4",children:[(0,b.jsxs)("div",{className:"relative flex w-5 flex-none flex-col items-center",children:[(0,b.jsx)("div",{className:["w-px flex-none",c?"h-0":"h-6",e?"bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]":"bg-border"].filter(Boolean).join(" ")}),(0,b.jsx)("div",{className:["z-10 h-3.5 w-3.5 flex-none rounded-full border-2",a.isCurrent?"border-primary bg-primary ring-2 ring-primary/30":"ACTIVE"===a.status?"border-emerald-400 bg-emerald-400":"RELEASED"===a.status?"border-zinc-500 bg-zinc-500":"border-muted-foreground/40 bg-transparent border-dashed"].join(" ")}),!d&&(0,b.jsx)("div",{className:["w-px flex-1",e?"bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]":"bg-border"].join(" ")})]}),(0,b.jsx)("div",{className:"min-w-0 flex-1 pb-5",children:(0,b.jsx)(K,{version:a,diffStat:f??null,onEdit:g,onRelease:h,onViewDiff:i,onOpenTaskDetail:j})})]})}a.s(["VersionTimelineClient",0,function({project:a,workspaceId:j,versions:n,diffStats:o,backlog:p}){let q,{t:r}=(0,A.useI18n)(),s=(0,d.useRouter)(),[t,u]=(0,c.useState)(!1),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1),[z,B]=(0,c.useState)(!1),[C,D]=(0,c.useState)(null),[E,F]=(0,c.useState)(null),[G,H]=(0,c.useState)(null),[I,K]=(0,c.useState)(!1),L=[...[...n.filter(a=>"RELEASED"!==a.status)].sort((a,b)=>{if(!a.targetDate&&!b.targetDate)return 0;if(!a.targetDate)return 1;if(!b.targetDate)return -1;let c=new Date(b.targetDate).getTime()-new Date(a.targetDate).getTime();return 0!==c?c:new Date(b.createdAt).getTime()-new Date(a.createdAt).getTime()}),...[...n.filter(a=>"RELEASED"===a.status)].sort((a,b)=>a.releasedAt||b.releasedAt?a.releasedAt?b.releasedAt?new Date(b.releasedAt).getTime()-new Date(a.releasedAt).getTime():-1:1:0)],M=a=>{let b=n.find(b=>b.id===a);b&&(w({id:b.id,number:b.number,name:b.name,typeId:b.typeId??null,baseBranch:b.baseBranch,startDate:b.startDate,targetDate:b.targetDate,description:b.description}),u(!0))},N=a=>{let b=n.find(b=>b.id===a);b&&(D(b),B(!0))},O=a=>{F(a)},P=()=>{w(null),u(!0)},Q=()=>{s.refresh()},R=C?n.filter(a=>a.id!==C.id&&("PLANNED"===a.status||"ACTIVE"===a.status)).map(a=>({id:a.id,number:a.number,name:a.name})):[],S=C?C.tasks.filter(a=>"DONE"!==a.status&&"CANCELLED"!==a.status).length:void 0;return(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"header-xl flex shrink-0 items-center gap-4 border-b px-6",children:[(0,b.jsxs)(e.default,{href:`/workspaces/${j}`,className:"flex items-center gap-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground",children:[(0,b.jsx)(i.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:r("archive.backToBoard")})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)("span",{className:"truncate font-medium",children:a.name}),(0,b.jsx)("span",{children:"/"}),(0,b.jsx)("span",{children:r("version.timeline")})]}),(0,b.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground/70",children:r("version.historyHint")})]}),(0,b.jsxs)(l.Button,{variant:"outline",onClick:()=>y(!0),children:[(0,b.jsx)(k,{className:"h-4 w-4"}),r("version.manageTypes")]}),(0,b.jsxs)(l.Button,{onClick:P,children:[(0,b.jsx)(f.Plus,{className:"h-4 w-4"}),r("version.new")]})]}),(0,b.jsx)(m.ScrollArea,{className:"min-h-0 flex-1",children:(0,b.jsx)("div",{className:"px-6 py-6",children:(0,b.jsxs)("div",{className:"mx-auto max-w-3xl",children:[0===n.length&&0===p.length&&(0,b.jsxs)("div",{className:"flex flex-col items-center gap-4 py-20 text-center text-muted-foreground",children:[(0,b.jsx)("p",{className:"text-sm",children:r("version.empty.list")}),(0,b.jsxs)(l.Button,{variant:"outline",onClick:P,children:[(0,b.jsx)(f.Plus,{className:"h-4 w-4"}),r("version.new")]})]}),L.length>0&&(0,b.jsx)("div",{className:"relative",children:L.map((a,c)=>(0,b.jsx)(aq,{version:a,isFirst:0===c,isLast:c===L.length-1&&0===p.length,diffStat:o[a.id],onEdit:M,onRelease:N,onViewDiff:O,onOpenTaskDetail:H},a.id))}),p.length>0&&(0,b.jsxs)("div",{className:"flex gap-4",children:[(0,b.jsxs)("div",{className:"relative flex w-5 flex-none flex-col items-center",children:[(0,b.jsx)("div",{className:"h-6 w-px bg-[repeating-linear-gradient(to_bottom,var(--border)_0_4px,transparent_4px_8px)]"}),(0,b.jsx)("div",{className:"z-10 h-3.5 w-3.5 flex-none rounded-full border-2 border-dashed border-muted-foreground/40 bg-transparent"})]}),(0,b.jsx)("div",{className:"min-w-0 flex-1 pb-5",children:(0,b.jsxs)("div",{className:"overflow-hidden rounded-[14px] border border-dashed bg-muted/40 shadow-sm",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>K(a=>!a),className:"w-full px-4 py-3 text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(h.ChevronRight,{className:`h-3.5 w-3.5 flex-none text-muted-foreground/60 transition-transform duration-150 ${I?"rotate-90":""}`}),(0,b.jsx)(g.Archive,{className:"h-4 w-4 flex-none text-muted-foreground/70"}),(0,b.jsx)("span",{className:"text-sm font-semibold text-foreground",children:r("version.history")}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:r("version.historySub")}),(0,b.jsx)("span",{className:"flex-1"}),(0,b.jsxs)("span",{className:"text-[11.5px] text-muted-foreground",children:[p.length," ",r("version.tasksCount")]})]}),(0,b.jsx)("p",{className:"mt-2 text-xs text-muted-foreground/70",children:r("version.historyHint")})]}),I&&(0,b.jsx)("div",{className:"border-t border-dashed border-border px-2 pb-2 pt-1.5",children:p.map(a=>(0,b.jsx)(J,{task:a,onOpenDetail:H},a.id))})]})})]})]})})}),(0,b.jsx)(ah,{open:t,onOpenChange:a=>{u(a),a||w(null)},projectId:a.id,workspaceId:j,editVersion:v,defaultBaseBranch:null,projectLocalPath:a.localPath,onSuccess:Q}),(0,b.jsx)(ae,{open:x,onOpenChange:y,workspaceId:j,onChanged:()=>s.refresh()}),(0,b.jsx)(aj,{open:z,onOpenChange:a=>{B(a),a||D(null)},version:C?{id:C.id,number:C.number,name:C.name,unfinishedCount:S}:null,candidates:R,onSuccess:Q}),(0,b.jsx)(ao,{open:!!E,onOpenChange:a=>{a||F(null)},versionId:E,versionLabel:E&&(q=n.find(a=>a.id===E))?`${q.number} ${q.name}`:void 0}),(0,b.jsx)(ap.TaskOverviewDrawer,{open:!!G,onOpenChange:a=>{a||H(null)},taskId:G})]})}],144016)}];
2
2
 
3
3
  //# sourceMappingURL=0iu._%5BworkspaceId%5D_projects_%5BprojectId%5D_versions_version-timeline-client_tsx_07o_kyi._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1,g=this.getHookArray(b,"SessionStart");if(!this.hasHook(g,"session-start-hook.js")){let a=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/");g.push({hooks:[{command:`node "${a}"`,timeout:5,type:"command"}]}),b.SessionStart=g,e=!0}let h=this.getHookArray(b,"PostToolUse");if(!this.hasHook(h,"post-tool-hook.js")){let a=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/");h.push({hooks:[{command:`node "${a}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),b.PostToolUse=h,e=!0}let i=this.getHookArray(b,"Stop");if(!this.hasHook(i,"stop-hook.js")){let a=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${a}"`,timeout:5,type:"command"}]}),b.Stop=i,e=!0}return e&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
1
+ module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
2
2
 
3
3
  \`\`\`
4
4
  ${a.slice(-5e3)}
@@ -1,3 +1,3 @@
1
- module.exports=[951436,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(689171),a.i(196195);var g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),354866,a=>a.a(async(b,c)=>{try{var d=a.i(951436),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(689171),n=a.i(196195),o=b([d,g,h,l]);[d,g,h,l]=o.then?(await o)():o,a.s(["000068ce2fe44507bf690991ced2f8810ee21aa06b",()=>h.getAvailableTerminalApps,"00158c921cd696ea4c1ce82a55937d11a7689d4366",()=>k.getOnboardingStatus,"00344a67d1ab405b6770b42b61d196e25061669ed5",()=>h.getActualWsPort,"00352243efe42977dfd6af7568a8910b0168021847",()=>e.getWorkspacesWithProjects,"005dfa564934754fa9e330eea2d7cf3314c7404691",()=>l.checkRgAvailable,"00917a291a1ba427a2d5757832254c170fe37954b9",()=>h.getPlatformInfo,"00c7b21fbe8ad6d8d5036d0a2d22c11f624ed54027",()=>l.clearRgPathCache,"00d83917ed4b0681fd8751d66b13765c7c6bcfad01",()=>h.getAvailableShells,"00e9060c585c3583b63be04c71492fb32c6512b5f2",()=>j.listAllExtensionStatus,"4001f8775d784fd13b7787b6535ee8883b0627ccd6",()=>m.checkWorktreeClean,"4010c23871e21313632c6e547b088728eaaaf8d6ed",()=>m.searchTasks,"40144cdabed5ebf75fcf8f5a37d9843fe89867905d",()=>n.getCurrentBranch,"401864e07f05eb5712c61726e7c45c9127437f3ed4",()=>m.createTask,"4026cce9744b390018c9fb8c8647caf6832e9c80ed",()=>n.fetchRemoteBranches,"402b1385fefcfc9db6d341b3cce5f657983b51f500",()=>k.dispatchTaskCompletionEvent,"403d34b6c07f1211d62ffcf8957d4e12c5cd30d6cb",()=>h.getConfigValues,"404bbef08c8b4cd47e625800cc0b5f3058bebe348f",()=>n.getProjectBranches,"405f319d9375c810e45a6ced3d136b541eed06d322",()=>e.getOrCreateTowerTaskId,"4066f5b7ea4a9151707d2b708464e41ca8b46f2824",()=>e.getWorkspacesWithRecentTasks,"4071d9e76239c1dd807a3e838c615246588e99889c",()=>k.setOnboardingProgress,"4079ddcb0d3bea2eb0a8f1c822f43181fc6bc7a8e1",()=>f.deleteLabel,"4083025e1088f0ea1132dc991ca3f8360acfda29d5",()=>e.createWorkspace,"408c338c2266f72bd527b82785fdd777cbec6c4d47",()=>f.createLabel,"40a1d04c2e1466451263ed2619455d05f00b9d4bce",()=>e.getProjectByLocalPath,"40adba9339d5dcdae2f99eacb52c5217bb737c9561",()=>e.deleteWorkspace,"40b36c864d4d23ff0d7f5c0345462b73016d89624e",()=>m.getTaskOverview,"40b4cb2d11c40610200181530e40845077be931004",()=>h.resolveGitLocalPath,"40b536712468b173859a6f5b7d2a1975d71a8847ca",()=>m.getArchivedTasks,"40b864e02d048dabde7fce059da3bc8340153ec409",()=>m.deleteTask,"40bad5a0ca1f19f6a0ecd2d5c4cc816552e9405e6e",()=>e.deleteProject,"40c09cce85fa62a5188f302cb8ed640c144a62a304",()=>m.getProjectTasks,"40c3ea63137ef3cd7359bf5b6962fc87c9ea9abe68",()=>m.getArchivedTaskCount,"40c937dfc6020ed56d61f7375b16690d08aba8874d",()=>e.createProject,"40cb62edcf28baf88be1c006416b1dc17a165a7708",()=>m.toggleTaskPinned,"40cc1ddd5bc652248bd8ff8007cced78a3c7830a00",()=>f.getLabelsForWorkspace,"40d6569939da4917ee5c58541cb007ec61742108cb",()=>f.getTaskLabels,"40e5d7afe519f9455de7e860e63f98482d474436c1",()=>j.uninstallExtension,"40e673386ce29ba0afa3cedc513d447e16bb423111",()=>e.getRecentLocalProjects,"40ee476cf0921ed8dfca9463a686403acc340870e7",()=>i.checkMigrationSafety,"40f7a7a324cabac3b30f90d2f71132492f0e2976f9",()=>j.checkExtension,"40face0b1894edbb9834aea9d69cd108b567a54da1",()=>j.installExtension,"40fdbf62e7bbf6381a499ec7d118cfface9d3b4b77",()=>e.getWorkspaceById,"601b9b8e5f87c7210ac53f19895be46302ae5aec4d",()=>i.analyzeProjectDirectory,"603c0264012af76a302a9257aabe7ba4f12e177654",()=>h.getConfigValue,"604cfd61cf005b488dc365cfb233fd1f0db5e21428",()=>e.updateProject,"604e2b67b2ae23ce5db8ad79e81f1456572fc96cff",()=>h.setConfigValue,"6057ade64560859b1c9eca7326d6cc20ace51d3f74",()=>m.commitWorktreeChanges,"6090b9072de227a79fc49dc75310ab3287833a57ad",()=>k.completeOnboarding,"60afb9f705474245774d13886613c57f2d1d6fe6ff",()=>m.updateTaskStatus,"60b83a9e949e27da23575e9ec56d9aed80201f2edd",()=>m.updateTask,"60c53796d27d723175d8f0a97d30a21c625456d25b",()=>e.updateWorkspace,"60c71da1164a70c3c76a887077ed5cce6ca9885b52",()=>i.migrateProjectPath,"60cca945638d621516131c1789cc32678882a18731",()=>k.setOnboardingExtensions,"60dcf8f8f6fc30c42e03b1a674c112ac4b962db064",()=>g.globalSearch,"60df8d8d4eb43e7a879400fd0034f9d364cc369261",()=>f.setTaskLabels,"7ccf83ff07956e6239cf7502476722cd7b35b9a6a5",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_05il5a6._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0v2eslh._.js"].map(b=>a.l(b))).then(()=>b(897667)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0ca_ueb._.js"].map(b=>a.l(b))).then(()=>b(818992)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
1
+ module.exports=[951436,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(689171),a.i(196195);var g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),354866,a=>a.a(async(b,c)=>{try{var d=a.i(951436),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(689171),n=a.i(196195),o=b([d,g,h,l]);[d,g,h,l]=o.then?(await o)():o,a.s(["001cc0c8ce707acc32a1fe2dc2b3f9983de0dc3dab",()=>k.getOnboardingStatus,"002d2d76b6ef4160568000224415f28f1a163652f2",()=>h.getAvailableTerminalApps,"004b4d1b5dbf506647cf1fb69d4a293f751753d3b7",()=>e.getWorkspacesWithProjects,"006cd34bb594752724ef1ddc80ce72433ecc728349",()=>h.getAvailableShells,"008a180a9553b3f07ead30ab0e175f18939c1ffb19",()=>h.getPlatformInfo,"009aedffd4c16db17eb1965cf2bbb60330782f1a41",()=>l.clearRgPathCache,"00a1c3944ebee4ec0cc8cdf24600f514e18f86abef",()=>h.getActualWsPort,"00e40eb44c2de26a48a04857526c8a598fff1952b3",()=>l.checkRgAvailable,"00fb7b97cef6c47022d90c4c3319ed53b9d34e0068",()=>j.listAllExtensionStatus,"4003dc8f24479138229e15ea57b39d34e5ba39682e",()=>e.deleteProject,"40112f31b3d2e1606525dc0afb455b2f1bcb10053e",()=>f.getLabelsForWorkspace,"4013ce3d081d708e1d28549f52560bcd70b212e282",()=>e.getWorkspaceById,"401857c05d1d57d33222cf715af015ee229d1a321c",()=>f.getTaskLabels,"4023f33471e6d805194513ee2369301411b97c0d6d",()=>j.uninstallExtension,"403b1efbbc6403f9a5684b49675fb2dfcb02c1d2f7",()=>h.resolveGitLocalPath,"403ef7d667835ea791f1104a6aff2dc197cfb768a5",()=>f.createLabel,"4042b89cef009999033e9e4024480a4656b064f04a",()=>m.getProjectTasks,"40530570a66aecec0e96f3807ec632598139384043",()=>h.getConfigValues,"405b55a40e4e436fb4f393436e274930cf84368a43",()=>m.checkWorktreeClean,"40645fc7a3e0229fa3ccfe49523972a101a21cb011",()=>m.toggleTaskPinned,"4066d06dcf62cafe8cfa125d42008add531832c917",()=>m.getTaskOverview,"4066ebe953c55de9026732401c0fe9ecf9ab502713",()=>e.getOrCreateTowerTaskId,"4067910309eb2bfd9227871f2dc35aa2859c1cee40",()=>n.fetchRemoteBranches,"4067d2bcb50262d44d7645407fae1dc1db139cdf33",()=>m.searchTasks,"406a00444dd83394b5ae0e47abc45dbf3f66572e7c",()=>e.getRecentLocalProjects,"4079828c42aabc56c151a46a1aded0d0254a08eb8a",()=>k.setOnboardingProgress,"407caec3e8d8b5df61f8ae97efa10d0b3b5563ead8",()=>m.deleteTask,"408543d4eb2a55a5cd03c96cf36d86af3458e1fe8c",()=>i.checkMigrationSafety,"408aa2a09a7dfab042c9c4e19959a7466777968173",()=>f.deleteLabel,"408f8399f5896c88e65c313c32c345941af191b5e1",()=>m.createTask,"40934342416aeeeb2e0e218a887d52a8617e5e9cd2",()=>e.createProject,"409f354f644b09f1ecfb64c96ea5cbc31d38cf60de",()=>e.getWorkspacesWithRecentTasks,"40aaeac14d4295f800e3d2bd73fcb0d89ff6d2e87c",()=>e.getProjectByLocalPath,"40bc92ed17a3887642c935f0a0ef71b659f40f842e",()=>e.deleteWorkspace,"40c308a7895442cbedb74356eafa40cbc73452fcad",()=>n.getCurrentBranch,"40ce34f4d5d299845cc928eeafca4cd91f3e9fd3da",()=>m.getArchivedTasks,"40ce477818e393cb00c838a6e959b2ccade0e865e9",()=>n.getProjectBranches,"40d754c7643e88ee16cc9fc5c8d2630e2a5aa6e427",()=>m.getArchivedTaskCount,"40d925923a1d79e4d935fa7776545f19ab4fc49e17",()=>j.installExtension,"40dce9c332ff032338b67bcbc27b5a81f611b9590d",()=>j.checkExtension,"40f75b0631dc22535e38538fe7d946365fcd4ef9d4",()=>k.dispatchTaskCompletionEvent,"40fdd5b3e47fd71389611b79c04b25083617b614bf",()=>e.createWorkspace,"60032492f456c9c8fcc032fdeb1784777f69464a6a",()=>h.getConfigValue,"60057ffba0d6e86765d25aa7f862afd42cb2a7b198",()=>m.commitWorktreeChanges,"601cbcd84cf9a562f8eeed4b64fbfe1a7e0d85a5c0",()=>i.analyzeProjectDirectory,"6035cbaedc7b7bf4e65cfd558a60b689d3d9d86474",()=>f.setTaskLabels,"60364aaabea62ad81d27f362155f2a118a9076ed88",()=>m.updateTaskStatus,"60424c49623d1d35ffde76ca971ec2050d945897cb",()=>k.setOnboardingExtensions,"607dd53d2107b38dfb27fb7c221fd48d1d4bfa8adb",()=>e.updateProject,"6086ff3961557a86636ed88aa7fbfc394db3f98ee9",()=>g.globalSearch,"60b3391f11bc580c28dcdbeb9af4075949459c6dce",()=>k.completeOnboarding,"60b65223ac19282d326b0cb58e6d5215dbe2b58e78",()=>m.updateTask,"60dcd9c388151c3e1974757b6ed257dca8cd9461bd",()=>h.setConfigValue,"60e02b5222284075e36cdb2261247574db0fd612c5",()=>e.updateWorkspace,"60fbf3618358bf85ac5b3626c452cde8bffb155891",()=>i.migrateProjectPath,"7cd6b2db117f34a85f5cafc1325c50ad3dfc21ddc8",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_05il5a6._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0v2eslh._.js"].map(b=>a.l(b))).then(()=>b(897667)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0ca_ueb._.js"].map(b=>a.l(b))).then(()=>b(818992)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__006_qh0._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1,g=this.getHookArray(b,"SessionStart");if(!this.hasHook(g,"session-start-hook.js")){let a=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/");g.push({hooks:[{command:`node "${a}"`,timeout:5,type:"command"}]}),b.SessionStart=g,e=!0}let h=this.getHookArray(b,"PostToolUse");if(!this.hasHook(h,"post-tool-hook.js")){let a=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/");h.push({hooks:[{command:`node "${a}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),b.PostToolUse=h,e=!0}let i=this.getHookArray(b,"Stop");if(!this.hasHook(i,"stop-hook.js")){let a=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${a}"`,timeout:5,type:"command"}]}),b.Stop=i,e=!0}return e&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
1
+ module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
2
2
 
3
3
  \`\`\`
4
4
  ${a.slice(-5e3)}
@@ -1,3 +1,3 @@
1
- module.exports=[748383,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877),f=a.i(233405);function g(a,b){if(!b||b.startsWith("-"))return null;try{return(0,f.execFileSync)("git",["rev-parse",b],{cwd:a,encoding:"utf-8",timeout:5e3}).trim()||null}catch(a){return null}}async function h(a){return c.db.version.findMany({where:{projectId:a},orderBy:[{targetDate:"desc"},{order:"desc"},{createdAt:"desc"}],include:{type:!0,tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},assets:{select:{id:!0,filename:!0,mimeType:!0,size:!0}},notes:{select:{id:!0,title:!0,category:!0}}}}}})}async function i(a){let b=e.createVersionSchema.parse(a),f=null;if(b.baseBranch){let a=await c.db.project.findUnique({where:{id:b.projectId},select:{localPath:!0}});a?.localPath&&(f=g(a.localPath,b.baseBranch))}let h=await c.db.version.create({data:{projectId:b.projectId,number:b.number,name:b.name,typeId:b.typeId??null,status:"PLANNED",baseBranch:b.baseBranch??null,baseCommit:f,startDate:b.startDate??null,targetDate:b.targetDate??null,description:b.description??null}});return b.setCurrent&&await q(h.id),(0,d.revalidatePath)("/workspaces"),h}async function j(a,b){let f=e.updateVersionSchema.parse(b);try{let b=await c.db.version.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}}async function k(a){try{await c.db.version.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}(0,d.revalidatePath)("/workspaces")}async function l(a,b){await c.db.task.updateMany({where:{id:a},data:{versionId:b}}),(0,d.revalidatePath)("/workspaces")}async function m(a,b){let e=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0,status:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!e)throw Error("版本不存在");if("RELEASED"===e.status)throw Error("该版本已发布");let f=null;e.baseBranch&&e.project?.localPath&&(f=g(e.project.localPath,e.baseBranch));let h=await c.db.version.findUnique({where:{id:b},select:{id:!0,projectId:!0,status:!0}});if(!h)throw Error("目标版本不存在");if(h.projectId!==e.projectId)throw Error("目标版本必须属于同一项目");if(h.id===a)throw Error("目标版本不能是正在发布的版本本身");if("RELEASED"===h.status)throw Error("目标版本已发布,不能作为下一个当前版本");await c.db.$transaction(async c=>{await c.version.update({where:{id:a},data:{status:"RELEASED",releasedAt:new Date,releaseCommit:f,isCurrent:!1}}),await c.task.updateMany({where:{versionId:a,status:{notIn:["DONE","CANCELLED"]}},data:{versionId:b}}),await c.version.updateMany({where:{projectId:e.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:b},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}async function n(a){return c.db.version.findMany({where:{projectId:a,status:{not:"RELEASED"}},select:{id:!0,number:!0,name:!0,isCurrent:!0,status:!0},orderBy:[{isCurrent:"desc"},{targetDate:"desc"},{createdAt:"desc"}]})}async function o(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?function(a,b,c){try{let d=(0,f.execFileSync)("git",["diff","--numstat",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:5e3}),e=0,g=0,h=0;for(let a of d.split("\n")){let b=a.trim();if(!b)continue;let[c,d]=b.split(" ");e+=Number.parseInt(c,10)||0,g+=Number.parseInt(d,10)||0,h+=1}return{additions:e,deletions:g,files:h}}catch(a){return{additions:0,deletions:0,files:0}}}(b.project.localPath,b.baseCommit,d):null}async function p(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?{patch:function(a,b,c){try{return(0,f.execFileSync)("git",["diff",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:15e3,maxBuffer:0x1400000})}catch(a){return""}}(b.project.localPath,b.baseCommit,d)}:null}async function q(a){let b=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0}});if(!b)throw Error("版本不存在");await c.db.$transaction(async c=>{await c.version.updateMany({where:{projectId:b.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:a},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([h,i,j,k,l,m,n,o,p,q]),(0,b.registerServerReference)(h,"405b11129c958896555c915986c5a6f9a97c6d2d4d",null),(0,b.registerServerReference)(i,"4035aeb303a13bed8fda4465736df8a0f708cd37b3",null),(0,b.registerServerReference)(j,"60f1544acac2b4bacf68d4722cb6002dc7c736d92b",null),(0,b.registerServerReference)(k,"4080b530c3524bd971f995dcb141b52ffef5b9e2f6",null),(0,b.registerServerReference)(l,"60935ff5df1e244e44ffadb8fed5537f97825d0fd6",null),(0,b.registerServerReference)(m,"609bd30d0af14ce31bb49e71ad36b910c73d395bb1",null),(0,b.registerServerReference)(n,"40aa0b118228575abc653ff9aa04ca0f29e8547ef4",null),(0,b.registerServerReference)(o,"4081ee3f3dd5a8ee9cfe148a40eefea166fa8c3dbd",null),(0,b.registerServerReference)(p,"40e6423714206788362bb8adcc18b09e831cd580c5",null),(0,b.registerServerReference)(q,"4093d5a72eeb95129c0e46869a5827377dee2f1333",null),a.s(["assignTaskVersion",0,l,"createVersion",0,i,"deleteVersion",0,k,"getProjectVersions",0,h,"getVersionDiff",0,p,"getVersionDiffStat",0,o,"getVersionsForPicker",0,n,"releaseVersion",0,m,"setCurrentVersion",0,q,"updateVersion",0,j],748383)},239499,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877);async function f(a){return c.db.versionType.findMany({where:{workspaceId:a},orderBy:{createdAt:"asc"}})}async function g(a){let b=e.createVersionTypeSchema.parse(a),f=await c.db.versionType.create({data:{name:b.name,workspaceId:b.workspaceId}});return(0,d.revalidatePath)("/workspaces"),f}async function h(a,b){let f=e.updateVersionTypeSchema.parse(b);try{let b=await c.db.versionType.update({where:{id:a},data:{name:f.name}});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("类型不存在");throw a}}async function i(a){try{await c.db.versionType.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("类型不存在");throw a}(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([f,g,h,i]),(0,b.registerServerReference)(f,"40a1f5a787858b7a59a0c29558456853226fc22251",null),(0,b.registerServerReference)(g,"40d4b3ba9413922b4366411c22d78e9ab9f88a1ee5",null),(0,b.registerServerReference)(h,"6038f8c3c78d0d99f4dc04aa2f57cf10af99b4d3c0",null),(0,b.registerServerReference)(i,"40b69852784877dbbd5f05021bd6a9870ceed83c37",null),a.s(["createVersionType",0,g,"deleteVersionType",0,i,"getVersionTypes",0,f,"updateVersionType",0,h])},89160,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(748383),a.i(239499),a.i(196195),a.i(689171);var g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),637202,a=>a.a(async(b,c)=>{try{var d=a.i(89160),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(748383),n=a.i(239499),o=a.i(196195),p=a.i(689171),q=b([d,g,h,l]);[d,g,h,l]=q.then?(await q)():q,a.s(["000068ce2fe44507bf690991ced2f8810ee21aa06b",()=>h.getAvailableTerminalApps,"00158c921cd696ea4c1ce82a55937d11a7689d4366",()=>k.getOnboardingStatus,"00344a67d1ab405b6770b42b61d196e25061669ed5",()=>h.getActualWsPort,"005dfa564934754fa9e330eea2d7cf3314c7404691",()=>l.checkRgAvailable,"00917a291a1ba427a2d5757832254c170fe37954b9",()=>h.getPlatformInfo,"00c7b21fbe8ad6d8d5036d0a2d22c11f624ed54027",()=>l.clearRgPathCache,"00d83917ed4b0681fd8751d66b13765c7c6bcfad01",()=>h.getAvailableShells,"00e9060c585c3583b63be04c71492fb32c6512b5f2",()=>j.listAllExtensionStatus,"40144cdabed5ebf75fcf8f5a37d9843fe89867905d",()=>o.getCurrentBranch,"401864e07f05eb5712c61726e7c45c9127437f3ed4",()=>p.createTask,"4026cce9744b390018c9fb8c8647caf6832e9c80ed",()=>o.fetchRemoteBranches,"402b1385fefcfc9db6d341b3cce5f657983b51f500",()=>k.dispatchTaskCompletionEvent,"4035aeb303a13bed8fda4465736df8a0f708cd37b3",()=>m.createVersion,"403d34b6c07f1211d62ffcf8957d4e12c5cd30d6cb",()=>h.getConfigValues,"404bbef08c8b4cd47e625800cc0b5f3058bebe348f",()=>o.getProjectBranches,"405b11129c958896555c915986c5a6f9a97c6d2d4d",()=>m.getProjectVersions,"4071d9e76239c1dd807a3e838c615246588e99889c",()=>k.setOnboardingProgress,"4079ddcb0d3bea2eb0a8f1c822f43181fc6bc7a8e1",()=>f.deleteLabel,"4080b530c3524bd971f995dcb141b52ffef5b9e2f6",()=>m.deleteVersion,"4081ee3f3dd5a8ee9cfe148a40eefea166fa8c3dbd",()=>m.getVersionDiffStat,"4083025e1088f0ea1132dc991ca3f8360acfda29d5",()=>e.createWorkspace,"408c338c2266f72bd527b82785fdd777cbec6c4d47",()=>f.createLabel,"4093d5a72eeb95129c0e46869a5827377dee2f1333",()=>m.setCurrentVersion,"40a1f5a787858b7a59a0c29558456853226fc22251",()=>n.getVersionTypes,"40aa0b118228575abc653ff9aa04ca0f29e8547ef4",()=>m.getVersionsForPicker,"40adba9339d5dcdae2f99eacb52c5217bb737c9561",()=>e.deleteWorkspace,"40b36c864d4d23ff0d7f5c0345462b73016d89624e",()=>p.getTaskOverview,"40b4cb2d11c40610200181530e40845077be931004",()=>h.resolveGitLocalPath,"40b69852784877dbbd5f05021bd6a9870ceed83c37",()=>n.deleteVersionType,"40c937dfc6020ed56d61f7375b16690d08aba8874d",()=>e.createProject,"40cc1ddd5bc652248bd8ff8007cced78a3c7830a00",()=>f.getLabelsForWorkspace,"40d4b3ba9413922b4366411c22d78e9ab9f88a1ee5",()=>n.createVersionType,"40e5d7afe519f9455de7e860e63f98482d474436c1",()=>j.uninstallExtension,"40e6423714206788362bb8adcc18b09e831cd580c5",()=>m.getVersionDiff,"40ee476cf0921ed8dfca9463a686403acc340870e7",()=>i.checkMigrationSafety,"40f7a7a324cabac3b30f90d2f71132492f0e2976f9",()=>j.checkExtension,"40face0b1894edbb9834aea9d69cd108b567a54da1",()=>j.installExtension,"601b9b8e5f87c7210ac53f19895be46302ae5aec4d",()=>i.analyzeProjectDirectory,"6038f8c3c78d0d99f4dc04aa2f57cf10af99b4d3c0",()=>n.updateVersionType,"603c0264012af76a302a9257aabe7ba4f12e177654",()=>h.getConfigValue,"604e2b67b2ae23ce5db8ad79e81f1456572fc96cff",()=>h.setConfigValue,"6090b9072de227a79fc49dc75310ab3287833a57ad",()=>k.completeOnboarding,"60935ff5df1e244e44ffadb8fed5537f97825d0fd6",()=>m.assignTaskVersion,"609bd30d0af14ce31bb49e71ad36b910c73d395bb1",()=>m.releaseVersion,"60c53796d27d723175d8f0a97d30a21c625456d25b",()=>e.updateWorkspace,"60c71da1164a70c3c76a887077ed5cce6ca9885b52",()=>i.migrateProjectPath,"60cca945638d621516131c1789cc32678882a18731",()=>k.setOnboardingExtensions,"60dcf8f8f6fc30c42e03b1a674c112ac4b962db064",()=>g.globalSearch,"60f1544acac2b4bacf68d4722cb6002dc7c736d92b",()=>m.updateVersion,"7ccf83ff07956e6239cf7502476722cd7b35b9a6a5",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_0yvo_x7._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__01j8ix6._.js"].map(b=>a.l(b))).then(()=>b(897667)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0~a-emb._.js"].map(b=>a.l(b))).then(()=>b(818992)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
1
+ module.exports=[748383,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877),f=a.i(233405);function g(a,b){if(!b||b.startsWith("-"))return null;try{return(0,f.execFileSync)("git",["rev-parse",b],{cwd:a,encoding:"utf-8",timeout:5e3}).trim()||null}catch(a){return null}}async function h(a){return c.db.version.findMany({where:{projectId:a},orderBy:[{targetDate:"desc"},{order:"desc"},{createdAt:"desc"}],include:{type:!0,tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},assets:{select:{id:!0,filename:!0,mimeType:!0,size:!0}},notes:{select:{id:!0,title:!0,category:!0}}}}}})}async function i(a){let b=e.createVersionSchema.parse(a),f=null;if(b.baseBranch){let a=await c.db.project.findUnique({where:{id:b.projectId},select:{localPath:!0}});a?.localPath&&(f=g(a.localPath,b.baseBranch))}let h=await c.db.version.create({data:{projectId:b.projectId,number:b.number,name:b.name,typeId:b.typeId??null,status:"PLANNED",baseBranch:b.baseBranch??null,baseCommit:f,startDate:b.startDate??null,targetDate:b.targetDate??null,description:b.description??null}});return b.setCurrent&&await q(h.id),(0,d.revalidatePath)("/workspaces"),h}async function j(a,b){let f=e.updateVersionSchema.parse(b);try{let b=await c.db.version.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}}async function k(a){try{await c.db.version.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}(0,d.revalidatePath)("/workspaces")}async function l(a,b){await c.db.task.updateMany({where:{id:a},data:{versionId:b}}),(0,d.revalidatePath)("/workspaces")}async function m(a,b){let e=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0,status:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!e)throw Error("版本不存在");if("RELEASED"===e.status)throw Error("该版本已发布");let f=null;e.baseBranch&&e.project?.localPath&&(f=g(e.project.localPath,e.baseBranch));let h=await c.db.version.findUnique({where:{id:b},select:{id:!0,projectId:!0,status:!0}});if(!h)throw Error("目标版本不存在");if(h.projectId!==e.projectId)throw Error("目标版本必须属于同一项目");if(h.id===a)throw Error("目标版本不能是正在发布的版本本身");if("RELEASED"===h.status)throw Error("目标版本已发布,不能作为下一个当前版本");await c.db.$transaction(async c=>{await c.version.update({where:{id:a},data:{status:"RELEASED",releasedAt:new Date,releaseCommit:f,isCurrent:!1}}),await c.task.updateMany({where:{versionId:a,status:{notIn:["DONE","CANCELLED"]}},data:{versionId:b}}),await c.version.updateMany({where:{projectId:e.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:b},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}async function n(a){return c.db.version.findMany({where:{projectId:a,status:{not:"RELEASED"}},select:{id:!0,number:!0,name:!0,isCurrent:!0,status:!0},orderBy:[{isCurrent:"desc"},{targetDate:"desc"},{createdAt:"desc"}]})}async function o(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?function(a,b,c){try{let d=(0,f.execFileSync)("git",["diff","--numstat",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:5e3}),e=0,g=0,h=0;for(let a of d.split("\n")){let b=a.trim();if(!b)continue;let[c,d]=b.split(" ");e+=Number.parseInt(c,10)||0,g+=Number.parseInt(d,10)||0,h+=1}return{additions:e,deletions:g,files:h}}catch(a){return{additions:0,deletions:0,files:0}}}(b.project.localPath,b.baseCommit,d):null}async function p(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?{patch:function(a,b,c){try{return(0,f.execFileSync)("git",["diff",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:15e3,maxBuffer:0x1400000})}catch(a){return""}}(b.project.localPath,b.baseCommit,d)}:null}async function q(a){let b=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0}});if(!b)throw Error("版本不存在");await c.db.$transaction(async c=>{await c.version.updateMany({where:{projectId:b.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:a},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([h,i,j,k,l,m,n,o,p,q]),(0,b.registerServerReference)(h,"40f29a5c149d0deae6f530e300474c82b57bbdecd0",null),(0,b.registerServerReference)(i,"40d18c7680c72a010593fae70765c91c4ae4b8f486",null),(0,b.registerServerReference)(j,"60cb78c2d2b301420780510218497e875ec33a7b1c",null),(0,b.registerServerReference)(k,"40f3c681a2984bde5f219991800692d20eef9dbe87",null),(0,b.registerServerReference)(l,"606b2301287336b37fa350db3e8c42be74e64da081",null),(0,b.registerServerReference)(m,"60fb2f40ca467a1c87188bc9ac4f7b637ecdf64feb",null),(0,b.registerServerReference)(n,"40ba61bac0180758cf21b2f42a5a77ab4bc1b33b23",null),(0,b.registerServerReference)(o,"404a8c55eada839aa17c2a25f8830ede05d99ac987",null),(0,b.registerServerReference)(p,"40aaf5ed789d3a7f90544fe55a4e64fa2beabe51b1",null),(0,b.registerServerReference)(q,"40cad983c783680ccddca796a48d26fa221cb5abe0",null),a.s(["assignTaskVersion",0,l,"createVersion",0,i,"deleteVersion",0,k,"getProjectVersions",0,h,"getVersionDiff",0,p,"getVersionDiffStat",0,o,"getVersionsForPicker",0,n,"releaseVersion",0,m,"setCurrentVersion",0,q,"updateVersion",0,j],748383)},239499,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877);async function f(a){return c.db.versionType.findMany({where:{workspaceId:a},orderBy:{createdAt:"asc"}})}async function g(a){let b=e.createVersionTypeSchema.parse(a),f=await c.db.versionType.create({data:{name:b.name,workspaceId:b.workspaceId}});return(0,d.revalidatePath)("/workspaces"),f}async function h(a,b){let f=e.updateVersionTypeSchema.parse(b);try{let b=await c.db.versionType.update({where:{id:a},data:{name:f.name}});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("类型不存在");throw a}}async function i(a){try{await c.db.versionType.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("类型不存在");throw a}(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([f,g,h,i]),(0,b.registerServerReference)(f,"40349d29a0a4118119932e1feeb42a1a2aa96a05c7",null),(0,b.registerServerReference)(g,"40e74c59b32837cb29fcb61a9cabf73ff9acfcb469",null),(0,b.registerServerReference)(h,"60c27dee3f8a694c147e8fd810ca0c292232f8711a",null),(0,b.registerServerReference)(i,"403d00366168a8687335b6ace77c5b3ba3a0fd9935",null),a.s(["createVersionType",0,g,"deleteVersionType",0,i,"getVersionTypes",0,f,"updateVersionType",0,h])},89160,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(748383),a.i(239499),a.i(196195),a.i(689171);var g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),637202,a=>a.a(async(b,c)=>{try{var d=a.i(89160),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(748383),n=a.i(239499),o=a.i(196195),p=a.i(689171),q=b([d,g,h,l]);[d,g,h,l]=q.then?(await q)():q,a.s(["001cc0c8ce707acc32a1fe2dc2b3f9983de0dc3dab",()=>k.getOnboardingStatus,"002d2d76b6ef4160568000224415f28f1a163652f2",()=>h.getAvailableTerminalApps,"006cd34bb594752724ef1ddc80ce72433ecc728349",()=>h.getAvailableShells,"008a180a9553b3f07ead30ab0e175f18939c1ffb19",()=>h.getPlatformInfo,"009aedffd4c16db17eb1965cf2bbb60330782f1a41",()=>l.clearRgPathCache,"00a1c3944ebee4ec0cc8cdf24600f514e18f86abef",()=>h.getActualWsPort,"00e40eb44c2de26a48a04857526c8a598fff1952b3",()=>l.checkRgAvailable,"00fb7b97cef6c47022d90c4c3319ed53b9d34e0068",()=>j.listAllExtensionStatus,"40112f31b3d2e1606525dc0afb455b2f1bcb10053e",()=>f.getLabelsForWorkspace,"4023f33471e6d805194513ee2369301411b97c0d6d",()=>j.uninstallExtension,"40349d29a0a4118119932e1feeb42a1a2aa96a05c7",()=>n.getVersionTypes,"403b1efbbc6403f9a5684b49675fb2dfcb02c1d2f7",()=>h.resolveGitLocalPath,"403d00366168a8687335b6ace77c5b3ba3a0fd9935",()=>n.deleteVersionType,"403ef7d667835ea791f1104a6aff2dc197cfb768a5",()=>f.createLabel,"404a8c55eada839aa17c2a25f8830ede05d99ac987",()=>m.getVersionDiffStat,"40530570a66aecec0e96f3807ec632598139384043",()=>h.getConfigValues,"4066d06dcf62cafe8cfa125d42008add531832c917",()=>p.getTaskOverview,"4067910309eb2bfd9227871f2dc35aa2859c1cee40",()=>o.fetchRemoteBranches,"4079828c42aabc56c151a46a1aded0d0254a08eb8a",()=>k.setOnboardingProgress,"408543d4eb2a55a5cd03c96cf36d86af3458e1fe8c",()=>i.checkMigrationSafety,"408aa2a09a7dfab042c9c4e19959a7466777968173",()=>f.deleteLabel,"408f8399f5896c88e65c313c32c345941af191b5e1",()=>p.createTask,"40934342416aeeeb2e0e218a887d52a8617e5e9cd2",()=>e.createProject,"40aaf5ed789d3a7f90544fe55a4e64fa2beabe51b1",()=>m.getVersionDiff,"40ba61bac0180758cf21b2f42a5a77ab4bc1b33b23",()=>m.getVersionsForPicker,"40bc92ed17a3887642c935f0a0ef71b659f40f842e",()=>e.deleteWorkspace,"40c308a7895442cbedb74356eafa40cbc73452fcad",()=>o.getCurrentBranch,"40cad983c783680ccddca796a48d26fa221cb5abe0",()=>m.setCurrentVersion,"40ce477818e393cb00c838a6e959b2ccade0e865e9",()=>o.getProjectBranches,"40d18c7680c72a010593fae70765c91c4ae4b8f486",()=>m.createVersion,"40d925923a1d79e4d935fa7776545f19ab4fc49e17",()=>j.installExtension,"40dce9c332ff032338b67bcbc27b5a81f611b9590d",()=>j.checkExtension,"40e74c59b32837cb29fcb61a9cabf73ff9acfcb469",()=>n.createVersionType,"40f29a5c149d0deae6f530e300474c82b57bbdecd0",()=>m.getProjectVersions,"40f3c681a2984bde5f219991800692d20eef9dbe87",()=>m.deleteVersion,"40f75b0631dc22535e38538fe7d946365fcd4ef9d4",()=>k.dispatchTaskCompletionEvent,"40fdd5b3e47fd71389611b79c04b25083617b614bf",()=>e.createWorkspace,"60032492f456c9c8fcc032fdeb1784777f69464a6a",()=>h.getConfigValue,"601cbcd84cf9a562f8eeed4b64fbfe1a7e0d85a5c0",()=>i.analyzeProjectDirectory,"60424c49623d1d35ffde76ca971ec2050d945897cb",()=>k.setOnboardingExtensions,"606b2301287336b37fa350db3e8c42be74e64da081",()=>m.assignTaskVersion,"6086ff3961557a86636ed88aa7fbfc394db3f98ee9",()=>g.globalSearch,"60b3391f11bc580c28dcdbeb9af4075949459c6dce",()=>k.completeOnboarding,"60c27dee3f8a694c147e8fd810ca0c292232f8711a",()=>n.updateVersionType,"60cb78c2d2b301420780510218497e875ec33a7b1c",()=>m.updateVersion,"60dcd9c388151c3e1974757b6ed257dca8cd9461bd",()=>h.setConfigValue,"60e02b5222284075e36cdb2261247574db0fd612c5",()=>e.updateWorkspace,"60fb2f40ca467a1c87188bc9ac4f7b637ecdf64feb",()=>m.releaseVersion,"60fbf3618358bf85ac5b3626c452cde8bffb155891",()=>i.migrateProjectPath,"7cd6b2db117f34a85f5cafc1325c50ad3dfc21ddc8",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_0yvo_x7._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__01j8ix6._.js"].map(b=>a.l(b))).then(()=>b(897667)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0~a-emb._.js"].map(b=>a.l(b))).then(()=>b(818992)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__02px.0y._.js.map