tower-studio 0.2.12 → 0.2.15

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 (355) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/routes-manifest.json +8 -0
  6. package/.next/standalone/.next/server/app/_global-error/page.js +1 -1
  7. package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +39 -39
  17. package/.next/standalone/.next/server/app/_not-found/page.js +6 -6
  18. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  21. package/.next/standalone/.next/server/app/_not-found.rsc +15 -15
  22. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +15 -15
  23. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  24. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  25. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  26. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  27. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/api/adapters/test/route.js +3 -3
  29. package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/browse-fs/route.js +1 -1
  31. package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js +1 -1
  33. package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/git/route.js +1 -1
  35. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js +1 -1
  37. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js +1 -1
  40. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js +3 -2
  42. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/internal/assistant/route.js +2 -2
  44. package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +2 -2
  46. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +1 -1
  48. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js +1 -1
  50. package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js +1 -1
  52. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js +1 -1
  54. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route/app-paths-manifest.json +3 -0
  56. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route/build-manifest.json +9 -0
  57. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route/server-reference-manifest.json +4 -0
  58. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js +7 -0
  59. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js.nft.json +1 -0
  60. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route_client-reference-manifest.js +3 -0
  61. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +3 -3
  62. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js +1 -1
  66. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js +1 -1
  68. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/index.html +1 -1
  70. package/.next/standalone/.next/server/app/index.rsc +15 -15
  71. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  72. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  73. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  74. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +9 -9
  75. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  77. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +75 -75
  78. package/.next/standalone/.next/server/app/missions/page.js +6 -6
  79. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  82. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +39 -39
  83. package/.next/standalone/.next/server/app/onboarding/page.js +6 -6
  84. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  87. package/.next/standalone/.next/server/app/onboarding.rsc +17 -17
  88. package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +17 -17
  89. package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  90. package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  91. package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  93. package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  94. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
  95. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +39 -39
  96. package/.next/standalone/.next/server/app/page.js +6 -6
  97. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  100. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +52 -52
  101. package/.next/standalone/.next/server/app/settings/page.js +6 -6
  102. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/settings.html +1 -1
  105. package/.next/standalone/.next/server/app/settings.rsc +17 -17
  106. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +17 -17
  107. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  108. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  109. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  110. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  111. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  112. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  113. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +92 -92
  114. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +6 -6
  115. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  118. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +74 -74
  119. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +6 -6
  120. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  123. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +67 -67
  124. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +6 -6
  125. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  128. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +68 -68
  129. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +7 -7
  130. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  133. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +39 -39
  134. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +7 -7
  135. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
  138. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +74 -74
  139. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +6 -6
  140. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
  143. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +86 -86
  144. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +8 -8
  145. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  148. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +55 -55
  149. package/.next/standalone/.next/server/app/workspaces/page.js +6 -6
  150. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  153. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +1 -1
  154. package/.next/standalone/.next/server/chunks/[externals]__12any6r._.js +3 -0
  155. package/.next/standalone/.next/server/chunks/[externals]__12mj_bs._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0oc0p.b._.js → [root-of-the-server]__0.0.jeg._.js} +2 -2
  157. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00mjz~7._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__07f7~6u._.js → [root-of-the-server]__03j20vp._.js} +3 -3
  159. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05se6yk._.js +4 -0
  160. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05~g1fm._.js +3 -0
  161. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__087s5zn._.js → [root-of-the-server]__0ag-i9m._.js} +2 -2
  162. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__028ucbo._.js → [root-of-the-server]__0d1dj18._.js} +3 -3
  163. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0u7f9y0._.js → [root-of-the-server]__0g2lv9x._.js} +2 -2
  164. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0i8.umh._.js → [root-of-the-server]__0ge1~qa._.js} +2 -2
  165. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iyp~.k._.js +20 -0
  166. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jf72nm._.js +11 -0
  167. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ogh_qu._.js +2 -2
  168. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0otyifi._.js +1 -1
  169. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0d~z6xs._.js → [root-of-the-server]__0pg9aea._.js} +3 -3
  170. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q.piu~._.js +20 -0
  171. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0s__pv8._.js +4 -0
  172. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sfk~2k._.js +3 -0
  173. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0umocfj._.js +3 -0
  174. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0z-k6vg._.js +3 -0
  175. package/.next/standalone/.next/server/chunks/[root-of-the-server]__124i0i-._.js +3 -0
  176. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_monaco_[___path]_route_actions_02u8e7k.js +3 -0
  177. package/.next/standalone/.next/server/chunks/src_0bkvm8c._.js +1 -1
  178. package/.next/standalone/.next/server/chunks/src_lib_0aowbzy._.js +3 -0
  179. package/.next/standalone/.next/server/chunks/src_lib_0nw5n~t._.js +3 -0
  180. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-pcbjc._.js +30 -0
  182. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.bvw5b._.js +4 -0
  183. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04nht4_._.js +30 -0
  184. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06ci01x._.js +30 -0
  185. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__046r30r._.js → [root-of-the-server]__06zyaub._.js} +2 -2
  186. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08icsmr._.js +30 -0
  187. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__098yytg._.js +30 -0
  188. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b7rna9._.js +30 -0
  189. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b8cn~b._.js +30 -0
  190. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0clm.cb._.js +30 -0
  191. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f6jg2_._.js +3 -0
  192. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gaiasa._.js +3 -0
  193. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0akzln5._.js → [root-of-the-server]__0gzi6v8._.js} +2 -2
  194. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n-4zp8._.js +3 -0
  195. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0lipl.6._.js → [root-of-the-server]__0oht3x8._.js} +2 -2
  196. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0myrdxo._.js → [root-of-the-server]__0pj4ghy._.js} +1 -1
  197. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ps55l6._.js +1 -1
  198. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0snkwkk._.js +3 -0
  199. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ss.-i7._.js +30 -0
  200. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0hwl8ew._.js → [root-of-the-server]__0vk3eou._.js} +2 -2
  201. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vqar.7._.js +3 -0
  202. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x81w9c._.js +30 -0
  203. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xg37gu._.js +3 -0
  204. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yr--da._.js +3 -0
  205. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zb9q4h._.js → [root-of-the-server]__0z1phoe._.js} +2 -2
  206. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~8i4lj._.js +3 -0
  207. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0wvyks.._.js → [root-of-the-server]__10yxmur._.js} +2 -2
  208. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11einlk._.js +30 -0
  209. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11zjs~k._.js +3 -0
  210. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13wezd4._.js +30 -0
  211. package/.next/standalone/.next/server/chunks/ssr/{_0vcf0-e._.js → _0-anjz4._.js} +2 -2
  212. package/.next/standalone/.next/server/chunks/ssr/{_109h4z-._.js → _00-v8~4._.js} +1 -1
  213. package/.next/standalone/.next/server/chunks/ssr/{_0m5sihc._.js → _05_bfrg._.js} +2 -2
  214. package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/{_07ax4.m._.js → _065qc4e._.js} +2 -2
  216. package/.next/standalone/.next/server/chunks/ssr/{_0t4lzoj._.js → _06gydyh._.js} +3 -3
  217. package/.next/standalone/.next/server/chunks/ssr/_06sgp6h._.js +3 -0
  218. package/.next/standalone/.next/server/chunks/ssr/{_0qzkt..._.js → _09gfkbi._.js} +1 -1
  219. package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
  220. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
  221. package/.next/standalone/.next/server/chunks/ssr/_0h~yckx._.js +3 -0
  222. package/.next/standalone/.next/server/chunks/ssr/_0i4__mf._.js +1 -1
  223. package/.next/standalone/.next/server/chunks/ssr/_0kkxrcc._.js +3 -0
  224. package/.next/standalone/.next/server/chunks/ssr/{_0td~e1-._.js → _0l-ci5f._.js} +2 -2
  225. package/.next/standalone/.next/server/chunks/ssr/{_13duqz7._.js → _0of7fy7._.js} +1 -1
  226. package/.next/standalone/.next/server/chunks/ssr/{_003qoge._.js → _0ov6bwe._.js} +2 -2
  227. package/.next/standalone/.next/server/chunks/ssr/{_0_f2g9z._.js → _0q6ax60._.js} +1 -1
  228. package/.next/standalone/.next/server/chunks/ssr/{_0l4wi9q._.js → _0qxei2o._.js} +3 -3
  229. package/.next/standalone/.next/server/chunks/ssr/{_0.obv1p._.js → _0rk3o8h._.js} +1 -1
  230. package/.next/standalone/.next/server/chunks/ssr/{_008q_0v._.js → _0tb98gb._.js} +2 -2
  231. package/.next/standalone/.next/server/chunks/ssr/{_0p0-eyg._.js → _0v53yq7._.js} +2 -2
  232. package/.next/standalone/.next/server/chunks/ssr/_0wvv86n._.js +3 -0
  233. package/.next/standalone/.next/server/chunks/ssr/_0xrgx~o._.js +3 -0
  234. package/.next/standalone/.next/server/chunks/ssr/{_0bowgha._.js → _0yp1dzk._.js} +1 -1
  235. package/.next/standalone/.next/server/chunks/ssr/{_0dig3de._.js → _0ze9ezr._.js} +3 -3
  236. package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
  237. package/.next/standalone/.next/server/chunks/ssr/{_0wdm870._.js → _102gd3m._.js} +1 -1
  238. package/.next/standalone/.next/server/chunks/ssr/_10dvolb._.js +3 -0
  239. package/.next/standalone/.next/server/chunks/ssr/{_0h8g7_g._.js → _12o7r.n._.js} +2 -2
  240. package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +1 -1
  241. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__03ebsif._.js → src_0j_1~da._.js} +4 -4
  242. package/.next/standalone/.next/server/chunks/ssr/src_13jha60._.js +1 -1
  243. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
  244. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  245. package/.next/standalone/.next/server/chunks/ssr/src_actions_search-code-actions_ts_0k9u5d~._.js +3 -0
  246. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  247. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  248. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  249. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  250. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  251. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  252. package/.next/standalone/.next/server/chunks/ssr/{src_lib_05~z630._.js → src_lib_02~8o7n._.js} +1 -1
  253. package/.next/standalone/.next/server/chunks/ssr/{src_lib_061yy7e._.js → src_lib_05._ry~._.js} +1 -1
  254. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0.8j.z6._.js → src_lib_0d6br1r._.js} +1 -1
  255. package/.next/standalone/.next/server/chunks/ssr/{src_lib_02v1~f3._.js → src_lib_0d7-dyi._.js} +1 -1
  256. package/.next/standalone/.next/server/chunks/ssr/src_lib_0iq4x_.._.js +3 -0
  257. package/.next/standalone/.next/server/chunks/ssr/src_lib_0me8mly._.js +3 -0
  258. package/.next/standalone/.next/server/chunks/ssr/src_lib_0ngr9__._.js +3 -0
  259. package/.next/standalone/.next/server/chunks/ssr/src_lib_0qu3epc._.js +3 -0
  260. package/.next/standalone/.next/server/chunks/ssr/src_lib_0r2kk28._.js +3 -0
  261. package/.next/standalone/.next/server/chunks/ssr/src_lib_0v-t4im._.js +3 -0
  262. package/.next/standalone/.next/server/chunks/ssr/src_lib_0v244ym._.js +3 -0
  263. package/.next/standalone/.next/server/chunks/ssr/src_lib_0y0c60a._.js +3 -0
  264. package/.next/standalone/.next/server/chunks/ssr/src_lib_13f4e5p._.js +3 -0
  265. package/.next/standalone/.next/server/functions-config-manifest.json +1 -0
  266. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  267. package/.next/standalone/.next/server/pages/404.html +1 -1
  268. package/.next/standalone/.next/server/pages/500.html +1 -1
  269. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/server-reference-manifest.json +262 -262
  271. package/.next/standalone/.next/static/chunks/{0v-7eievh_rkh.js → 040v3khsfu0lz.js} +2 -2
  272. package/.next/standalone/.next/static/chunks/{0rgyeuy~3vua-.js → 05mx9brj-f8gw.js} +1 -1
  273. package/.next/standalone/.next/static/chunks/{0cg0zjodapp79.js → 0600r~b6rdg~2.js} +1 -1
  274. package/.next/standalone/.next/static/chunks/{0khynh_kl0aog.js → 0666bg18.a5h8.js} +1 -1
  275. package/.next/standalone/.next/static/chunks/{01e93lnruej42.js → 078tkiwi_e..w.js} +1 -1
  276. package/.next/standalone/.next/static/chunks/{0sgaa06_07.8u.js → 09nbrak~rje1..js} +2 -2
  277. package/.next/standalone/.next/static/chunks/{0q4az7r-d-n~g.js → 0_8g669_.94gk.js} +1 -1
  278. package/.next/standalone/.next/static/chunks/{0zxdsce2j9r4a.js → 0c.9g9ugtt_fi.js} +1 -1
  279. package/.next/standalone/.next/static/chunks/{0uepevftf8c0j.js → 0caf_e5zdgl2s.js} +2 -2
  280. package/.next/standalone/.next/static/chunks/{0w0vkomv~5a72.js → 0dbel03y5wo85.js} +1 -1
  281. package/.next/standalone/.next/static/chunks/0g62a2i4hk0pj.js +1 -0
  282. package/.next/standalone/.next/static/chunks/0i84hdhbjwxv3.js +1 -0
  283. package/.next/standalone/.next/static/chunks/{0azh0__hpbe-z.js → 0j94ru7oloqhp.js} +1 -1
  284. package/.next/standalone/.next/static/chunks/0k02g-ep3ca11.js +1 -0
  285. package/.next/standalone/.next/static/chunks/0kqksl8_mibg1.js +1 -0
  286. package/.next/standalone/.next/static/chunks/{0xk7u4vr-rwn8.js → 0lve_d~~~n7y4.js} +1 -1
  287. package/.next/standalone/.next/static/chunks/{0ns9v_d.3s~uo.js → 0m7mzooex9.cp.js} +1 -1
  288. package/.next/standalone/.next/static/chunks/{010xl0lpp55xe.js → 0my~5x9vknsv2.js} +1 -1
  289. package/.next/standalone/.next/static/chunks/{0f820g2c4omlb.js → 0nsoo.df~w7ez.js} +2 -2
  290. package/.next/standalone/.next/static/chunks/0unk0vfgdc4b1.js +1 -0
  291. package/.next/standalone/.next/static/chunks/{0h3-~sna4okq2.js → 0xfk375kd_~b3.js} +1 -1
  292. package/.next/standalone/package.json +1 -1
  293. package/bin/tower.mjs +57 -1
  294. package/package.json +1 -1
  295. package/.next/standalone/.next/server/chunks/[externals]__09i7990._.js +0 -3
  296. package/.next/standalone/.next/server/chunks/[externals]__0mwl_.i._.js +0 -3
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00fx8qq._.js +0 -3
  298. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03gi3ue._.js +0 -4
  299. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05eviiz._.js +0 -20
  300. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06hktr2._.js +0 -3
  301. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_90467._.js +0 -3
  302. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cwgqg2._.js +0 -3
  303. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e44k3f._.js +0 -20
  304. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h.z9fm._.js +0 -11
  305. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0n0cdrs._.js +0 -3
  306. package/.next/standalone/.next/server/chunks/_0_w835g._.js +0 -4
  307. package/.next/standalone/.next/server/chunks/src_lib_0ba0ntr._.js +0 -3
  308. package/.next/standalone/.next/server/chunks/src_lib_ai_0q-~me1._.js +0 -3
  309. package/.next/standalone/.next/server/chunks/ssr/[externals]_@vscode_ripgrep_0ylq4j7._.js +0 -3
  310. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-gtzf3._.js +0 -30
  311. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0047xda._.js +0 -30
  312. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03fx0ja._.js +0 -30
  313. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08n5qbf._.js +0 -3
  314. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__09vrijh._.js +0 -3
  315. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0a6h8gd._.js +0 -3
  316. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bpfp11._.js +0 -30
  317. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0di.lno._.js +0 -3
  318. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e.z.70._.js +0 -30
  319. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0eu0ho5._.js +0 -30
  320. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h3qzpw._.js +0 -30
  321. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hi0yzd._.js +0 -3
  322. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0i1yr6p._.js +0 -3
  323. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0iy-id0._.js +0 -4
  324. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k9v1jm._.js +0 -30
  325. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0m1rkbb._.js +0 -30
  326. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n78kqj._.js +0 -30
  327. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ribsk4._.js +0 -3
  328. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rifydx._.js +0 -3
  329. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sb.sz3._.js +0 -30
  330. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tq_14j._.js +0 -30
  331. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjg_.n._.js +0 -3
  332. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10.y4wq._.js +0 -3
  333. package/.next/standalone/.next/server/chunks/ssr/_0._ejth._.js +0 -3
  334. package/.next/standalone/.next/server/chunks/ssr/_0f6qjbg._.js +0 -3
  335. package/.next/standalone/.next/server/chunks/ssr/_0miyz-f._.js +0 -3
  336. package/.next/standalone/.next/server/chunks/ssr/_0vk31-9._.js +0 -3
  337. package/.next/standalone/.next/server/chunks/ssr/_0xtk7wi._.js +0 -3
  338. package/.next/standalone/.next/server/chunks/ssr/_0~a80th._.js +0 -3
  339. package/.next/standalone/.next/server/chunks/ssr/src_lib_09uekh_._.js +0 -3
  340. package/.next/standalone/.next/server/chunks/ssr/src_lib_09y4fnl._.js +0 -3
  341. package/.next/standalone/.next/server/chunks/ssr/src_lib_0a7f32~._.js +0 -3
  342. package/.next/standalone/.next/server/chunks/ssr/src_lib_0aeqb5m._.js +0 -3
  343. package/.next/standalone/.next/server/chunks/ssr/src_lib_0p183eh._.js +0 -3
  344. package/.next/standalone/.next/server/chunks/ssr/src_lib_0uyb_-k._.js +0 -3
  345. package/.next/standalone/.next/server/chunks/ssr/src_lib_0vhhwfe._.js +0 -3
  346. package/.next/standalone/.next/server/chunks/ssr/src_lib_10i7f.9._.js +0 -3
  347. package/.next/standalone/.next/server/chunks/ssr/src_lib_137bst6._.js +0 -3
  348. package/.next/standalone/.next/static/chunks/022_88ef~e93a.js +0 -1
  349. package/.next/standalone/.next/static/chunks/0eqr_08akp8xl.js +0 -1
  350. package/.next/standalone/.next/static/chunks/0s.g.dge529_6.js +0 -1
  351. package/.next/standalone/.next/static/chunks/0xrh8~725gqdt.js +0 -1
  352. package/.next/standalone/.next/static/chunks/14630b661zu3g.js +0 -1
  353. /package/.next/standalone/.next/static/{U-HwmuCE_TgwA_Rd4SjpZ → 9NXMylL5Ks4ehg3RIDVt3}/_buildManifest.js +0 -0
  354. /package/.next/standalone/.next/static/{U-HwmuCE_TgwA_Rd4SjpZ → 9NXMylL5Ks4ehg3RIDVt3}/_clientMiddlewareManifest.js +0 -0
  355. /package/.next/standalone/.next/static/{U-HwmuCE_TgwA_Rd4SjpZ → 9NXMylL5Ks4ehg3RIDVt3}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[53674,e=>{"use strict";e.s(["getPackageRoot",0,function(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}])},472129,e=>{"use strict";var t=e.i(902157),o=e.i(660526),r=e.i(750227),s=e.i(769310),i=e.i(53674);let n=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];e.s(["ClaudeCliAdapter",0,class{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 o={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:o}}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??{},o=(0,i.getPackageRoot)().replace(/\\/g,"/"),s=r.join(o,"scripts","session-start-hook.js").replace(/\\/g,"/"),n=r.join(o,"scripts","post-tool-hook.js").replace(/\\/g,"/"),a=r.join(o,"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 "${n}"`,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)}}}async repairHookPaths(){try{let e=this.readSettings(),t=e.hooks??{},o=(0,i.getPackageRoot)().replace(/\\/g,"/"),s=!1;for(let[e,i]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let n=this.getHookArray(t,e),a=n.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(i)));if(a<0)continue;let l=r.join(o,"scripts",i).replace(/\\/g,"/"),c=`node "${l}"`,m=n[a]?.hooks?.[0];m&&m.command!==c&&(m.command=c,t[e]=n,s=!0)}s&&(e.hooks=t,this.writeSettings(e))}catch{}}upsertHook(e,t,o,r){let s=this.getHookArray(e,t),i=r?.hooks?.[0]?.command,n=s.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(o)));if(n>=0){if(s[n]?.hooks?.[0]?.command===i)return!1;s.splice(n,1)}return s.push(r),e[t]=s,!0}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},o=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let r=this.getHookArray(t,e);t[e]=r.filter(e=>!e.hooks?.some(e=>o.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 o=t.scope??"user",r={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(r.env=e.env);let s=this.resolveCommand(),i=["mcp","add-json","-s",o,e.name,JSON.stringify(r)];try{return await this.runCli(s,["mcp","remove","-s",o,e.name],t.cwd).catch(()=>{}),await this.runCli(s,i,t.cwd),{ok:!0,method:"cli",detail:`${s} ${i.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${s} ${i.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let o=t.scope??"user",r=this.resolveCommand(),s=["mcp","remove","-s",o,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 o=this.resolveCommand();try{return await this.runCli(o,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,o){let s=r.join(this.getConfigDir(),"skills",e);try{if(!t.existsSync(o))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${o}`};t.mkdirSync(r.dirname(s),{recursive:!0});let e=await t.promises.lstat(s).catch(()=>null);if(e)if(!(e.isSymbolicLink()||"win32"===process.platform&&e.isDirectory()))return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else try{let e=await t.promises.readlink(s);if(r.resolve(e)===r.resolve(o))return{ok:!0,method:"symlink",detail:`${s} → ${o} (already)`};await t.promises.unlink(s)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`}}return await t.promises.symlink(o,s,"dir"),{ok:!0,method:"symlink",detail:`${s} → ${o}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let o=r.join(this.getConfigDir(),"skills",e);try{let e=await t.promises.lstat(o).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${o} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:o,error:`Refusing to remove non-symlink at ${o}`};return await t.promises.unlink(o),{ok:!0,method:"symlink",detail:o}}catch(e){return{ok:!1,method:"symlink",detail:o,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,o){let s=r.join(this.getConfigDir(),"skills",e);try{if(!(await t.promises.lstat(s)).isSymbolicLink())return!1;if(!o)return!0;let e=await t.promises.readlink(s),i=r.isAbsolute(e)?e:r.resolve(r.dirname(s),e);return r.resolve(i)===r.resolve(o)}catch{return!1}}async runCli(t,o,r,s=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,o,{cwd:r,timeout:s});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:o}=await e.A(534777),{resolveSpawnTarget:r}=await e.A(200628),s=o(t),i=await r(this.resolveCommand(),["--version"]),{stdout:n}=await s(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return n}getConfigDir(){return r.join(o.homedir(),".claude")}getSettingsPath(){return r.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return r.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,s.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(t.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let o=this.getConfigDir();t.existsSync(o)||t.mkdirSync(o,{recursive:!0}),t.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let o=e[t];return Array.isArray(o)?o:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}])},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 o=this.providers.get(e);return o?"api"===t?o.api?.adapter??null:o.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 o=!!t.cli&&await t.cli.adapter.isAvailable(),r=o&&t.cli?await t.cli.adapter.getVersion():null,s=!!t.api&&!!process.env[t.api.keyEnvVar],i=!!t.api&&s;e.push({name:t.name,displayName:t.displayName,cli:{available:o,version:r},api:{available:i,keyConfigured:s}})}return e}}var o=e.i(472129),r=e.i(902157),s=e.i(660526),i=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 m=new t;m.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new o.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),m.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 o={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:o}}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,"/"),o=i.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/"),r=i.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/"),s=i.join(t,"scripts","stop-hook.js").replace(/\\/g,"/"),n=!1;return n=this.upsertHook(e,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${o}"`,timeout:5,type:"command"}]})||n,n=this.upsertHook(e,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${r}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||n,(n=this.upsertHook(e,"Stop","stop-hook.js",{hooks:[{command:`node "${s}"`,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)}}}async repairHookPaths(){try{let e=this.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),o=!1;for(let[r,s]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let n=this.getHookArray(e,r),a=n.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(s)));if(a<0)continue;let l=i.join(t,"scripts",s).replace(/\\/g,"/"),c=`node "${l}"`,m=n[a]?.hooks?.[0];m&&m.command!==c&&(m.command=c,e[r]=n,o=!0)}o&&(this.writeHooks(e),this.ensureHooksFeatureEnabled())}catch{}}upsertHook(e,t,o,r){let s=this.getHookArray(e,t),i=r?.hooks?.[0]?.command,n=s.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(o)));if(n>=0){if(s[n]?.hooks?.[0]?.command===i)return!1;s.splice(n,1)}return s.push(r),e[t]=s,!0}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let o of["SessionStart","PostToolUse","Stop"]){let r=this.getHookArray(e,o);e[o]=r.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 o=this.resolveCommand(),r=["mcp","add",e.name];if(e.env)for(let[t,o]of Object.entries(e.env))r.push("--env",`${t}=${o}`);r.push("--",e.command,...e.args);try{return await this.runCli(o,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(o,r,t.cwd),{ok:!0,method:"cli",detail:`${o} ${r.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${r.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let o=this.resolveCommand(),r=["mcp","remove",e];try{return await this.runCli(o,r,t.cwd),{ok:!0,method:"cli",detail:`${o} ${r.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${r.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let o=this.resolveCommand();try{return await this.runCli(o,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,t){let o=i.join(this.getConfigDir(),"skills",e);try{if(!r.existsSync(t))return{ok:!1,method:"symlink",detail:o,error:`Source skill dir does not exist: ${t}`};r.mkdirSync(i.dirname(o),{recursive:!0});let e=await r.promises.lstat(o).catch(()=>null);if(e)if(!(e.isSymbolicLink()||"win32"===process.platform&&e.isDirectory()))return{ok:!1,method:"symlink",detail:o,error:`Refusing to overwrite non-symlink at ${o}`};else try{let e=await r.promises.readlink(o);if(i.resolve(e)===i.resolve(t))return{ok:!0,method:"symlink",detail:`${o} → ${t} (already)`};await r.promises.unlink(o)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:o,error:`Refusing to overwrite non-symlink at ${o}`}}return await r.promises.symlink(t,o,"dir"),{ok:!0,method:"symlink",detail:`${o} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:o,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=i.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 o=i.join(this.getConfigDir(),"skills",e);try{if(!(await r.promises.lstat(o)).isSymbolicLink())return!1;if(!t)return!0;let e=await r.promises.readlink(o),s=i.isAbsolute(e)?e:i.resolve(i.dirname(o),e);return i.resolve(s)===i.resolve(t)}catch{return!1}}async runCli(t,o,r,s=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,o,{cwd:r,timeout:s});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:o}=await e.A(534777),{resolveSpawnTarget:r}=await e.A(200628),s=o(t),i=await r(this.resolveCommand(),["--version"]),{stdout:n}=await s(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return i.join(s.homedir(),".codex")}getSettingsPath(){return i.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return i.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 i.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 o=this.getConfigDir();r.existsSync(o)||r.mkdirSync(o,{recursive:!0}),r.writeFileSync(e,t,"utf-8")}getHookArray(e,t){let o=e[t];return Array.isArray(o)?o:[]}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=m}let m=c.__providerRegistry;e.s(["providerRegistry",0,m],279711)}];
2
+
3
+ //# sourceMappingURL=src_lib_0nw5n~t._.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)("406a50ff15cbb93fac18d774da8354a203e5d3ae9e",W.callServer,void 0,W.findSourceMapURL,"createVersion"),Y=(0,W.createServerReference)("601b6781746a423daeea4987f08bbccdc7ff6defa0",W.callServer,void 0,W.findSourceMapURL,"updateVersion"),Z=(0,W.createServerReference)("40f2086dfd4e096f5c2d4d05e56bde1fb48eddd192",W.callServer,void 0,W.findSourceMapURL,"getVersionTypes");var $=a.i(185836),_=a.i(792754),aa=a.i(975231);let ab=(0,W.createServerReference)("40a5cf4a14c0c442d543d0c5fb8f6f15f17a13fb13",W.callServer,void 0,W.findSourceMapURL,"createVersionType"),ac=(0,W.createServerReference)("60c10a879958295c66d304af22da65655ad4c4120b",W.callServer,void 0,W.findSourceMapURL,"updateVersionType"),ad=(0,W.createServerReference)("40f8f55f4ac9134e893734574f77954033aec206b9",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)("60c8fc0b978cafd85e7147abab386fa81398a0ba23",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)("40cf4eee913bf3accdca5f64b6f110889fba268edb",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)("40f0d5d01cf02de795a062e641ec47d20ca993f263",W.callServer,void 0,W.findSourceMapURL,"createVersion"),Y=(0,W.createServerReference)("60a99da11015e14df253fc9490f2c079a6f5f4163c",W.callServer,void 0,W.findSourceMapURL,"updateVersion"),Z=(0,W.createServerReference)("4096cd0b3018d28408acad3d35093bc9457cec9296",W.callServer,void 0,W.findSourceMapURL,"getVersionTypes");var $=a.i(430413),_=a.i(262085),aa=a.i(975231);let ab=(0,W.createServerReference)("40344cb71cb5bfd721362b380be009d60ee1f3dbad",W.callServer,void 0,W.findSourceMapURL,"createVersionType"),ac=(0,W.createServerReference)("608215a2abcf647e4fd12626b0b2c02469217bd94c",W.callServer,void 0,W.findSourceMapURL,"updateVersionType"),ad=(0,W.createServerReference)("40fa7bb4ee247a90c2b24e07639075dc0a335baf20",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)("602d4cab95e66fa74cc2fc270026471ae5f78c4995",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)("4091383fe8ed934b311696024ca02a4ae075628780",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
@@ -0,0 +1,30 @@
1
+ module.exports=[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)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}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()||"win32"===process.platform&&a.isDirectory()))return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else try{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)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${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
+
3
+ \`\`\`
4
+ ${a.slice(-5e3)}
5
+ \`\`\``,e=await c(d,b);return e&&e.replace(/^[#*\->"'\s]+/,"").trim()||null}async function e(a,b,d){let e=a.slice(-8e3),f=d?`
6
+ Session summary: ${d}`:"",g=`You are analyzing a completed AI coding session. Extract reusable insights.
7
+ ${f}
8
+
9
+ Terminal log (last 8000 chars):
10
+ \`\`\`
11
+ ${e}
12
+ \`\`\`
13
+
14
+ Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
15
+ {
16
+ "summary": "one-sentence summary of what was accomplished",
17
+ "insights": [
18
+ { "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
19
+ ],
20
+ "shouldCreateNote": true/false,
21
+ "noteTitle": "short title for the note (only if shouldCreateNote is true)"
22
+ }
23
+
24
+ Rules:
25
+ - Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
26
+ - Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
27
+ - insights array can be empty if nothing notable
28
+ - Keep each insight concise (1-2 sentences)`,h=await c(g,b);if(!h)return null;try{let a=h,b=a.match(/\{[\s\S]*\}/);b&&(a=b[0]);let c=JSON.parse(a);if("string"!=typeof c.summary||"boolean"!=typeof c.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return c}catch(a){return console.error("[generateDreamingInsight] JSON parse failed:",a.message),null}}a.s(["aiQuery",0,c,"generateDreamingInsight",0,e,"generateSummaryFromLog",0,d])},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0u-vzb1._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0-pcbjc._.js.map
@@ -0,0 +1,4 @@
1
+ module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},902157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},432201,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},933919,(a,b,c)=>{b.exports=a.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},761469,a=>{"use strict";var b=a.i(933919);let c=globalThis.prisma??new b.PrismaClient({log:[]}),d=!1;async function e(){return d||(await c.$connect(),await c.$queryRaw`PRAGMA journal_mode=WAL`,await c.$queryRaw`PRAGMA busy_timeout=5000`,d=!0),c}async function f(){try{await c.$disconnect()}catch{}d=!1,await e()}process.on("SIGTERM",()=>{c.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{c.$disconnect().catch(()=>{})}),a.s(["db",0,c,"resetDbConnection",0,f])},815429,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"registerServerReference",{enumerable:!0,get:function(){return d.registerServerReference}});let d=a.r(797225)},630048,(a,b,c)=>{"use strict";function d(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
2
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ensureServerEntryExports",{enumerable:!0,get:function(){return d}})},26683,a=>{"use strict";function b(a,b,c,d){let e=new Date().toISOString(),f=`[${e}] ${a.toUpperCase()} [${b}] ${c}`;return d&&Object.keys(d).length>0?`${f} ${JSON.stringify(d)}`:f}a.s(["logger",0,{create:function(a){return{info(c,d){console.log(b("info",a,c,d))},warn(c,d){console.warn(b("warn",a,c,d))},error(c,d,e){console.error(b("error",a,c,d instanceof Error?{...e,error:d.message,stack:d.stack}:{...e,error:String(d)}))}}},info(a,c){console.log(b("info","app",a,c))},warn(a,c){console.warn(b("warn","app",a,c))},error(a,c,d){console.error(b("error","app",a,c instanceof Error?{...d,error:c.message,stack:c.stack}:{...d,error:String(c)}))}}])},319997,a=>{"use strict";let b;var c=a.i(750227),d=a.i(660526),e=a.i(902157);function f(){return b||(b=process.env.TOWER_DATA_DIR||(0,c.join)((0,d.homedir)(),".tower"),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0})),b}a.s(["getBackupsDir",0,function(){let a=(0,c.join)(f(),"backups");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getExtensionsDir",0,function(){let a=(0,c.join)(f(),"extensions");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getStorageDir",0,function(){let a=(0,c.join)(f(),"storage");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getTowerDir",0,f])},4634,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(26683),f=a.i(630048);let g=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function h(){let a=await c.db.systemConfig.findMany({where:{key:{in:[...g]}}}),b={};for(let c of a)try{b[c.key]=JSON.parse(c.value)}catch{b[c.key]=null}let d=!0===b["onboarding.completed"],e=b["onboarding.lastStep"],f=b["onboarding.username"];return{isFirstRun:!d,isCompleted:d,lastStep:"number"==typeof e?e:0,username:"string"==typeof f&&f.length>0?f:null}}async function i(a){await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(a)},update:{value:JSON.stringify(a)}}),(0,d.revalidatePath)("/","layout")}async function j(a,b=4){if(await c.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:String(b)},update:{value:String(b)}}),void 0!==a){let b=a.trim().slice(0,64).replace(/[\r\n]/g," ");b.length>0&&await c.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(b)},update:{value:JSON.stringify(b)}})}(0,d.revalidatePath)("/","layout")}async function k(a,b){await c.db.systemConfig.upsert({where:{key:"onboarding.extensions.requested"},create:{key:"onboarding.extensions.requested",value:JSON.stringify(a)},update:{value:JSON.stringify(a)}}),await c.db.systemConfig.upsert({where:{key:"onboarding.extensions.completed"},create:{key:"onboarding.extensions.completed",value:JSON.stringify(b)},update:{value:JSON.stringify(b)}}),(0,d.revalidatePath)("/","layout")}async function l(b){try{e.logger.create("task-completion").info("Task completion event dispatched",{taskId:b.taskId,taskTitle:b.taskTitle,status:b.status,executionId:b.executionId});let{broadcastNotification:c}=await a.A(904454);c({...b,type:"completion"})}catch{}}(0,f.ensureServerEntryExports)([h,i,j,k,l]),(0,b.registerServerReference)(h,"0010484639773084cb94e6ad2bdac5a6e14be0a23a",null),(0,b.registerServerReference)(i,"40fb24b16c60b0ce99d0c0ded41344ab92df72ad60",null),(0,b.registerServerReference)(j,"609037b3fc6c5c473e5df2eb17f9c72fd2c48b1f55",null),(0,b.registerServerReference)(k,"60066c2b57518407b1f582f5d62c5374be8e118331",null),(0,b.registerServerReference)(l,"40a7f20fadd067c10f6a460924ae34bd082a3e6e56",null),a.s(["completeOnboarding",0,j,"dispatchTaskCompletionEvent",0,l,"getOnboardingStatus",0,h,"setOnboardingExtensions",0,k,"setOnboardingProgress",0,i])},510095,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/.pnpm/lucide-react@1.6.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/.pnpm/lucide-react@1.6.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js <module evaluation>","default")},857188,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/node_modules/.pnpm/lucide-react@1.6.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/node_modules/.pnpm/lucide-react@1.6.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js","default")},400413,a=>{"use strict";a.i(510095);var b=a.i(857188);a.n(b)},563736,a=>{"use strict";var b=a.i(815429),c=a.i(942372);let d=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var e=a.i(400413);let f=(a,b)=>{let f=(0,c.forwardRef)(({className:f,...g},h)=>(0,c.createElement)(e.default,{ref:h,iconNode:b,className:((...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim())(`lucide-${d(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,f),...g}));return f.displayName=d(a),f},g=f("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);var h=a.i(233405),i=a.i(522734),j=a.i(814747),k=a.i(319997);function l(a,b,c){return new Promise((d,e)=>{(0,h.execFile)(a,b,c,(a,b,c)=>{a?e(a):d({stdout:String(b??""),stderr:String(c??"")})})})}let m=(0,k.getExtensionsDir)();function n(){let a=j.default.join(m,"package.json");(0,i.existsSync)(a)||((0,i.mkdirSync)(m,{recursive:!0}),(0,i.writeFileSync)(a,JSON.stringify({name:"tower-extensions",version:"1.0.0",private:!0},null,2)))}function o(a){return{timeout:a,cwd:m,shell:"win32"===process.platform}}async function p(a){try{let{stdout:b}=await l(a,["--version"],{timeout:3e3});return b.split("\n")[0]?.replace(/^ripgrep\s+/,"").split(" ")[0]||void 0}catch{return}}async function q(){try{let a=j.default.join(m,"node_modules","@vscode","ripgrep");if(!(0,i.existsSync)(a))return null;let b=(await Promise.resolve().then(()=>{let a=Error("Cannot find module 'unknown'");throw a.code="MODULE_NOT_FOUND",a})).rgPath;if(!b||!(0,i.existsSync)(b))return null;return b}catch{return null}}async function r(){try{let{stdout:a}=await l("which",["rg"],{timeout:3e3}),b=a.trim();if(!b||!(0,i.existsSync)(b))return null;return b}catch{return null}}async function s(){let a=await q();if(a){let b=await p(a);return{installed:!0,path:a,version:b}}let b=await r();if(b){let a=await p(b);return{installed:!0,path:b,version:a}}return{installed:!1}}async function t(){try{n();let{stdout:b,stderr:c}=await l("npm",["install","--prefix",m,"--no-audit","--no-fund","@vscode/ripgrep"],o(12e4));try{let{clearRgPathCache:b}=await a.A(911717);await b()}catch{}let d=j.default.join(m,"node_modules","@vscode","ripgrep");if(!(0,i.existsSync)(d))return{success:!1,error:`npm install reported success but ${d} doesn't exist. Check ~/.npmrc for a prefix= override. npm stdout: ${(b||"").slice(-300)} stderr: ${(c||"").slice(-300)}`};if(!await q())return{success:!1,error:"@vscode/ripgrep installed but the rg binary is missing — postinstall download likely failed. Check network access to GitHub releases (the package downloads its native binary on install)."};return{success:!0,message:`Installed @vscode/ripgrep at ${d}`}}catch(b){let a=[b.message];return b.stdout&&a.push(`stdout: ${String(b.stdout).slice(-300)}`),b.stderr&&a.push(`stderr: ${String(b.stderr).slice(-300)}`),{success:!1,error:a.join(" | ")}}}async function u(){try{n(),await l("npm",["uninstall","--prefix",m,"@vscode/ripgrep"],o(6e4));try{let{clearRgPathCache:b}=await a.A(911717);await b()}catch{}return{success:!0,message:"Removed @vscode/ripgrep"}}catch(a){return{success:!1,error:a.message}}}let v=f("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]),w=(0,a.i(224361).promisify)(h.execFile),x=(0,k.getExtensionsDir)(),y=j.default.join(x,"node_modules","monaco-editor","package.json"),z=j.default.join(x,"node_modules","monaco-editor","min","vs","loader.js");function A(){let a=j.default.join(x,"package.json");(0,i.existsSync)(a)||((0,i.mkdirSync)(x,{recursive:!0}),(0,i.writeFileSync)(a,JSON.stringify({name:"tower-extensions",version:"1.0.0",private:!0},null,2)))}function B(a){return{timeout:a,cwd:x,shell:"win32"===process.platform}}async function C(){try{A();let{stdout:a,stderr:b}=await w("npm",["install","--prefix",x,"--no-audit","--no-fund","monaco-editor"],B(18e4));if(!(0,i.existsSync)(y))throw Error(`npm install reported success but ${y} doesn't exist. Check your ~/.npmrc for a prefix= override. stdout: ${(a||"").slice(0,400)} stderr: ${(b||"").slice(0,400)}`);if(!(0,i.existsSync)(z))throw Error(`npm install completed but ${z} doesn't exist — the monaco-editor package may be incomplete on this registry mirror.`);return{success:!0,message:`Installed monaco-editor at ${j.default.dirname(y)}`}}catch(b){let a=[b.message];return b.stdout&&a.push(`stdout: ${String(b.stdout).slice(-400)}`),b.stderr&&a.push(`stderr: ${String(b.stderr).slice(-400)}`),{success:!1,error:a.join(" | ")}}}let D=[{id:"rg",name:"代码搜索 (ripgrep)",description:"基于 rg 的全文代码搜索",icon:g,sizeMB:5,homepageUrl:"https://github.com/BurntSushi/ripgrep#installation",check:s,install:t,uninstall:u},{id:"monaco",name:"代码编辑器 (Monaco)",description:"VS Code 同款 Web 编辑器",icon:v,sizeMB:15,homepageUrl:"https://microsoft.github.io/monaco-editor/",check:async function a(){let a;if(!(0,i.existsSync)(y)||!(0,i.existsSync)(z))return{installed:!1};try{a=JSON.parse((0,i.readFileSync)(y,"utf-8")).version}catch{}return{installed:!0,path:j.default.dirname(z),version:a}},install:C,uninstall:async function a(){try{return A(),await w("npm",["uninstall","--prefix",x,"monaco-editor"],B(6e4)),{success:!0,message:"Removed monaco-editor"}}catch(a){return{success:!1,error:a.message}}}}];function E(a){return D.find(b=>b.id===a)??null}async function F(a){let b=E(a);return b?b.check():{installed:!1,error:`unknown extension: ${a}`}}async function G(a){let b=E(a);return b?b.install():{success:!1,error:`unknown extension: ${a}`}}async function H(a){let b=E(a);return b?b.uninstall?b.uninstall():{success:!1,error:`extension ${a} does not support uninstall`}:{success:!1,error:`unknown extension: ${a}`}}async function I(){return Object.fromEntries(await Promise.all(D.map(async a=>[a.id,await a.check()])))}(0,a.i(630048).ensureServerEntryExports)([F,G,H,I]),(0,b.registerServerReference)(F,"40e9d81462fa234f633ef8bacfb055aefb3a827262",null),(0,b.registerServerReference)(G,"40ccd89f85c4639d4ebb716a5cebfafa5fdd6582cc",null),(0,b.registerServerReference)(H,"408de5dc08c6e6909935c4e63f4b0a0bc0a5d1a379",null),(0,b.registerServerReference)(I,"0009d97b9d8b4f71ccdc9ef5fb8b7a210a132de485",null),a.s(["checkExtension",0,F,"installExtension",0,G,"listAllExtensionStatus",0,I,"uninstallExtension",0,H],563736)}];
3
+
4
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0.bvw5b._.js.map
@@ -0,0 +1,30 @@
1
+ module.exports=[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)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}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()||"win32"===process.platform&&a.isDirectory()))return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else try{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)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${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
+
3
+ \`\`\`
4
+ ${a.slice(-5e3)}
5
+ \`\`\``,e=await c(d,b);return e&&e.replace(/^[#*\->"'\s]+/,"").trim()||null}async function e(a,b,d){let e=a.slice(-8e3),f=d?`
6
+ Session summary: ${d}`:"",g=`You are analyzing a completed AI coding session. Extract reusable insights.
7
+ ${f}
8
+
9
+ Terminal log (last 8000 chars):
10
+ \`\`\`
11
+ ${e}
12
+ \`\`\`
13
+
14
+ Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
15
+ {
16
+ "summary": "one-sentence summary of what was accomplished",
17
+ "insights": [
18
+ { "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
19
+ ],
20
+ "shouldCreateNote": true/false,
21
+ "noteTitle": "short title for the note (only if shouldCreateNote is true)"
22
+ }
23
+
24
+ Rules:
25
+ - Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
26
+ - Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
27
+ - insights array can be empty if nothing notable
28
+ - Keep each insight concise (1-2 sentences)`,h=await c(g,b);if(!h)return null;try{let a=h,b=a.match(/\{[\s\S]*\}/);b&&(a=b[0]);let c=JSON.parse(a);if("string"!=typeof c.summary||"boolean"!=typeof c.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return c}catch(a){return console.error("[generateDreamingInsight] JSON parse failed:",a.message),null}}a.s(["aiQuery",0,c,"generateDreamingInsight",0,e,"generateSummaryFromLog",0,d])},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0u-vzb1._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__04nht4_._.js.map
@@ -0,0 +1,30 @@
1
+ module.exports=[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)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}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()||"win32"===process.platform&&a.isDirectory()))return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else try{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)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${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
+
3
+ \`\`\`
4
+ ${a.slice(-5e3)}
5
+ \`\`\``,e=await c(d,b);return e&&e.replace(/^[#*\->"'\s]+/,"").trim()||null}async function e(a,b,d){let e=a.slice(-8e3),f=d?`
6
+ Session summary: ${d}`:"",g=`You are analyzing a completed AI coding session. Extract reusable insights.
7
+ ${f}
8
+
9
+ Terminal log (last 8000 chars):
10
+ \`\`\`
11
+ ${e}
12
+ \`\`\`
13
+
14
+ Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
15
+ {
16
+ "summary": "one-sentence summary of what was accomplished",
17
+ "insights": [
18
+ { "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
19
+ ],
20
+ "shouldCreateNote": true/false,
21
+ "noteTitle": "short title for the note (only if shouldCreateNote is true)"
22
+ }
23
+
24
+ Rules:
25
+ - Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
26
+ - Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
27
+ - insights array can be empty if nothing notable
28
+ - Keep each insight concise (1-2 sentences)`,h=await c(g,b);if(!h)return null;try{let a=h,b=a.match(/\{[\s\S]*\}/);b&&(a=b[0]);let c=JSON.parse(a);if("string"!=typeof c.summary||"boolean"!=typeof c.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return c}catch(a){return console.error("[generateDreamingInsight] JSON parse failed:",a.message),null}}a.s(["aiQuery",0,c,"generateDreamingInsight",0,e,"generateSummaryFromLog",0,d])},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0u-vzb1._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__06ci01x._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[324725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},120635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},814747,(a,b,c)=>{b.exports=a.x("path",()=>require("path"))},918622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(a,b,c)=>{b.exports=a.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},227433,(a,b,c)=>{"use strict";b.exports=a.r(918622)},797225,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].ReactServerDOMTurbopackServer},942372,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].React},224361,(a,b,c)=>{b.exports=a.x("util",()=>require("util"))},931708,(a,b,c)=>{(()=>{"use strict";"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cookie/");var a,c,d,e,f={};f.parse=function(b,c){if("string"!=typeof b)throw TypeError("argument str must be a string");for(var e={},f=b.split(d),g=(c||{}).decode||a,h=0;h<f.length;h++){var i=f[h],j=i.indexOf("=");if(!(j<0)){var k=i.substr(0,j).trim(),l=i.substr(++j,i.length).trim();'"'==l[0]&&(l=l.slice(1,-1)),void 0==e[k]&&(e[k]=function(a,b){try{return b(a)}catch(b){return a}}(l,g))}}return e},f.serialize=function(a,b,d){var f=d||{},g=f.encode||c;if("function"!=typeof g)throw TypeError("option encode is invalid");if(!e.test(a))throw TypeError("argument name is invalid");var h=g(b);if(h&&!e.test(h))throw TypeError("argument val is invalid");var i=a+"="+h;if(null!=f.maxAge){var j=f.maxAge-0;if(isNaN(j)||!isFinite(j))throw TypeError("option maxAge is invalid");i+="; Max-Age="+Math.floor(j)}if(f.domain){if(!e.test(f.domain))throw TypeError("option domain is invalid");i+="; Domain="+f.domain}if(f.path){if(!e.test(f.path))throw TypeError("option path is invalid");i+="; Path="+f.path}if(f.expires){if("function"!=typeof f.expires.toUTCString)throw TypeError("option expires is invalid");i+="; Expires="+f.expires.toUTCString()}if(f.httpOnly&&(i+="; HttpOnly"),f.secure&&(i+="; Secure"),f.sameSite)switch("string"==typeof f.sameSite?f.sameSite.toLowerCase():f.sameSite){case!0:case"strict":i+="; SameSite=Strict";break;case"lax":i+="; SameSite=Lax";break;case"none":i+="; SameSite=None";break;default:throw TypeError("option sameSite is invalid")}return i},a=decodeURIComponent,c=encodeURIComponent,d=/; */,e=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,b.exports=f})()},771751,(a,b,c)=>{(()=>{"use strict";var a={56:a=>{a.exports=function(a,b){return"string"==typeof a?g(a):"number"==typeof a?f(a,b):null},a.exports.format=f,a.exports.parse=g;var b=/\B(?=(\d{3})+(?!\d))/g,c=/(?:\.0*|(\.[^0]+)0+)$/,d={b:1,kb:1024,mb:1048576,gb:0x40000000,tb:0x10000000000,pb:0x4000000000000},e=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function f(a,e){if(!Number.isFinite(a))return null;var f=Math.abs(a),g=e&&e.thousandsSeparator||"",h=e&&e.unitSeparator||"",i=e&&void 0!==e.decimalPlaces?e.decimalPlaces:2,j=!!(e&&e.fixedDecimals),k=e&&e.unit||"";k&&d[k.toLowerCase()]||(k=f>=d.pb?"PB":f>=d.tb?"TB":f>=d.gb?"GB":f>=d.mb?"MB":f>=d.kb?"KB":"B");var l=(a/d[k.toLowerCase()]).toFixed(i);return j||(l=l.replace(c,"$1")),g&&(l=l.split(".").map(function(a,c){return 0===c?a.replace(b,g):a}).join(".")),l+h+k}function g(a){if("number"==typeof a&&!isNaN(a))return a;if("string"!=typeof a)return null;var b,c=e.exec(a),f="b";return c?(b=parseFloat(c[1]),f=c[4].toLowerCase()):(b=parseInt(a,10),f="b"),Math.floor(d[f]*b)}}},c={};function d(b){var e=c[b];if(void 0!==e)return e.exports;var f=c[b]={exports:{}},g=!0;try{a[b](f,f.exports,d),g=!1}finally{g&&delete c[b]}return f.exports}d.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/bytes/",b.exports=d(56)})()},203469,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].ReactJsxRuntime}];
1
+ module.exports=[324725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},120635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},918622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(a,b,c)=>{b.exports=a.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},814747,(a,b,c)=>{b.exports=a.x("path",()=>require("path"))},227433,(a,b,c)=>{"use strict";b.exports=a.r(918622)},797225,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].ReactServerDOMTurbopackServer},942372,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].React},224361,(a,b,c)=>{b.exports=a.x("util",()=>require("util"))},931708,(a,b,c)=>{(()=>{"use strict";"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cookie/");var a,c,d,e,f={};f.parse=function(b,c){if("string"!=typeof b)throw TypeError("argument str must be a string");for(var e={},f=b.split(d),g=(c||{}).decode||a,h=0;h<f.length;h++){var i=f[h],j=i.indexOf("=");if(!(j<0)){var k=i.substr(0,j).trim(),l=i.substr(++j,i.length).trim();'"'==l[0]&&(l=l.slice(1,-1)),void 0==e[k]&&(e[k]=function(a,b){try{return b(a)}catch(b){return a}}(l,g))}}return e},f.serialize=function(a,b,d){var f=d||{},g=f.encode||c;if("function"!=typeof g)throw TypeError("option encode is invalid");if(!e.test(a))throw TypeError("argument name is invalid");var h=g(b);if(h&&!e.test(h))throw TypeError("argument val is invalid");var i=a+"="+h;if(null!=f.maxAge){var j=f.maxAge-0;if(isNaN(j)||!isFinite(j))throw TypeError("option maxAge is invalid");i+="; Max-Age="+Math.floor(j)}if(f.domain){if(!e.test(f.domain))throw TypeError("option domain is invalid");i+="; Domain="+f.domain}if(f.path){if(!e.test(f.path))throw TypeError("option path is invalid");i+="; Path="+f.path}if(f.expires){if("function"!=typeof f.expires.toUTCString)throw TypeError("option expires is invalid");i+="; Expires="+f.expires.toUTCString()}if(f.httpOnly&&(i+="; HttpOnly"),f.secure&&(i+="; Secure"),f.sameSite)switch("string"==typeof f.sameSite?f.sameSite.toLowerCase():f.sameSite){case!0:case"strict":i+="; SameSite=Strict";break;case"lax":i+="; SameSite=Lax";break;case"none":i+="; SameSite=None";break;default:throw TypeError("option sameSite is invalid")}return i},a=decodeURIComponent,c=encodeURIComponent,d=/; */,e=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,b.exports=f})()},771751,(a,b,c)=>{(()=>{"use strict";var a={56:a=>{a.exports=function(a,b){return"string"==typeof a?g(a):"number"==typeof a?f(a,b):null},a.exports.format=f,a.exports.parse=g;var b=/\B(?=(\d{3})+(?!\d))/g,c=/(?:\.0*|(\.[^0]+)0+)$/,d={b:1,kb:1024,mb:1048576,gb:0x40000000,tb:0x10000000000,pb:0x4000000000000},e=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function f(a,e){if(!Number.isFinite(a))return null;var f=Math.abs(a),g=e&&e.thousandsSeparator||"",h=e&&e.unitSeparator||"",i=e&&void 0!==e.decimalPlaces?e.decimalPlaces:2,j=!!(e&&e.fixedDecimals),k=e&&e.unit||"";k&&d[k.toLowerCase()]||(k=f>=d.pb?"PB":f>=d.tb?"TB":f>=d.gb?"GB":f>=d.mb?"MB":f>=d.kb?"KB":"B");var l=(a/d[k.toLowerCase()]).toFixed(i);return j||(l=l.replace(c,"$1")),g&&(l=l.split(".").map(function(a,c){return 0===c?a.replace(b,g):a}).join(".")),l+h+k}function g(a){if("number"==typeof a&&!isNaN(a))return a;if("string"!=typeof a)return null;var b,c=e.exec(a),f="b";return c?(b=parseFloat(c[1]),f=c[4].toLowerCase()):(b=parseInt(a,10),f="b"),Math.floor(d[f]*b)}}},c={};function d(b){var e=c[b];if(void 0!==e)return e.exports;var f=c[b]={exports:{}},g=!0;try{a[b](f,f.exports,d),g=!1}finally{g&&delete c[b]}return f.exports}d.ab="/ROOT/node_modules/.pnpm/next@16.2.1_@babel+core@7.29.0_@playwright+test@1.58.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/bytes/",b.exports=d(56)})()},203469,(a,b,c)=>{"use strict";b.exports=a.r(227433).vendored["react-rsc"].ReactJsxRuntime}];
2
2
 
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__046r30r._.js.map
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__06zyaub._.js.map
@@ -0,0 +1,30 @@
1
+ module.exports=[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)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}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()||"win32"===process.platform&&a.isDirectory()))return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else try{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)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${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
+
3
+ \`\`\`
4
+ ${a.slice(-5e3)}
5
+ \`\`\``,e=await c(d,b);return e&&e.replace(/^[#*\->"'\s]+/,"").trim()||null}async function e(a,b,d){let e=a.slice(-8e3),f=d?`
6
+ Session summary: ${d}`:"",g=`You are analyzing a completed AI coding session. Extract reusable insights.
7
+ ${f}
8
+
9
+ Terminal log (last 8000 chars):
10
+ \`\`\`
11
+ ${e}
12
+ \`\`\`
13
+
14
+ Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
15
+ {
16
+ "summary": "one-sentence summary of what was accomplished",
17
+ "insights": [
18
+ { "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
19
+ ],
20
+ "shouldCreateNote": true/false,
21
+ "noteTitle": "short title for the note (only if shouldCreateNote is true)"
22
+ }
23
+
24
+ Rules:
25
+ - Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
26
+ - Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
27
+ - insights array can be empty if nothing notable
28
+ - Keep each insight concise (1-2 sentences)`,h=await c(g,b);if(!h)return null;try{let a=h,b=a.match(/\{[\s\S]*\}/);b&&(a=b[0]);let c=JSON.parse(a);if("string"!=typeof c.summary||"boolean"!=typeof c.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return c}catch(a){return console.error("[generateDreamingInsight] JSON parse failed:",a.message),null}}a.s(["aiQuery",0,c,"generateDreamingInsight",0,e,"generateSummaryFromLog",0,d])},818992,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(761469),e=a.i(897667);function f(a,c){return(0,b.execFileSync)("git",a,{cwd:c,timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function g(a){for(let b of["main","master","develop"])try{return f(["merge-base","HEAD",b],a)}catch{}return null}function h(a){if(!a)return null;let b=a.split("\n").filter(Boolean);if(0===b.length)return null;let c=b[0].replace(/^[a-f0-9]+\s+/,"");return 1===b.length?c:`${b.length} commits: ${c}`}async function i(a,b,i,j,k){try{let b;console.error(`[captureExecutionSummary] Starting: exec=${a.slice(0,8)} exit=${i} buffer=${j.length}chars worktree=${k}`);let l=null,m=null,n=null;if(k&&(0,c.existsSync)(k))try{if(f(["rev-parse","--git-dir"],k),l=function(a){try{let b=g(a);if(b){let c=f(["log","--oneline",`${b}..HEAD`],a);if(c)return c}return f(["log","--oneline","-3"],a)||null}catch{return null}}(k),(m=function(a){try{let b,c=g(a);if(!(b=c?f(["diff","--stat",`${c}..HEAD`],a):f(["diff","--stat","HEAD~20","HEAD"],a)))return null;return function(a){let b=a.split("\n"),c=b[b.length-1];if(!c)return null;let d=c.match(/(\d+)\s+files?\s+changed/),e=c.match(/(\d+)\s+insertions?\(\+\)/),f=c.match(/(\d+)\s+deletions?\(-\)/);return d||e||f?{commits:0,filesChanged:d?parseInt(d[1],10):0,insertions:e?parseInt(e[1],10):0,deletions:f?parseInt(f[1],10):0}:null}(b)}catch{return null}}(k))&&l){let a=l.split("\n").filter(Boolean).length;m={...m,commits:a}}n=h(l)}catch{}let o=(b=j.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g,"").replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"").replace(/\x1b[^[\]()][^\x1b]*/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"").replace(/\n{3,}/g,"\n\n").trim()).length<=10240?b:b.slice(b.length-10240);await d.db.taskExecution.update({where:{id:a},data:{summary:n??(l?h(l):null),gitLog:l??null,gitStats:m?JSON.stringify(m):null,exitCode:i,terminalLog:o||null}}),o&&k&&(console.error("[captureExecutionSummary] Starting background AI summary..."),(0,e.generateSummaryFromLog)(o,k).then(async b=>{b&&(console.error(`[captureExecutionSummary] AI summary ready: ${b.slice(0,80)}`),await d.db.taskExecution.update({where:{id:a},data:{summary:b}}))}).catch(a=>{console.error("[captureExecutionSummary] Background AI summary failed:",a)}))}catch(a){console.error("[captureExecutionSummary] Failed to capture summary:",a)}}async function j(a){try{let b=await d.db.task.findUnique({where:{id:a},select:{projectId:!0,executions:{orderBy:{createdAt:"desc"},select:{id:!0,terminalLog:!0,worktreePath:!0,summary:!0}}}});if(!b||0===b.executions.length)return;let c="",f=null,g=[];for(let a of b.executions)a.terminalLog&&(c+=a.terminalLog+"\n---\n"),a.summary&&g.push(a.summary),!f&&a.worktreePath&&(f=a.worktreePath);if(!(c=c.slice(-8e3)).trim())return;let h=g.join("\n"),i=f||process.cwd();console.error(`[captureTaskDreaming] Starting for task=${a.slice(0,8)}, ${b.executions.length} executions`);let j=await (0,e.generateDreamingInsight)(c,i,h);if(!j||!j.shouldCreateNote)return void console.error("[captureTaskDreaming] No note needed");let k=await d.db.projectNote.create({data:{title:j.noteTitle||j.summary.slice(0,50),content:function(a){let b=[];if(b.push("## Summary"),b.push(a.summary),b.push(""),a.insights.length>0)for(let c of(b.push("## Insights"),a.insights))b.push(`- **[${c.type}]**: ${c.content}`);return b.join("\n")}(j),category:"session-insight",projectId:b.projectId,taskId:a}}),l=b.executions[0].id;await d.db.taskExecution.update({where:{id:l},data:{insightNoteId:k.id}}),console.error(`[captureTaskDreaming] Note created: ${k.id}`)}catch(a){console.error("[captureTaskDreaming] Failed:",a)}}a.s(["captureExecutionSummary",0,i,"captureTaskDreaming",0,j])},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0u-vzb1._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__08icsmr._.js.map
@@ -0,0 +1,30 @@
1
+ module.exports=[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)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}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()||"win32"===process.platform&&a.isDirectory()))return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else try{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)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${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
+
3
+ \`\`\`
4
+ ${a.slice(-5e3)}
5
+ \`\`\``,e=await c(d,b);return e&&e.replace(/^[#*\->"'\s]+/,"").trim()||null}async function e(a,b,d){let e=a.slice(-8e3),f=d?`
6
+ Session summary: ${d}`:"",g=`You are analyzing a completed AI coding session. Extract reusable insights.
7
+ ${f}
8
+
9
+ Terminal log (last 8000 chars):
10
+ \`\`\`
11
+ ${e}
12
+ \`\`\`
13
+
14
+ Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
15
+ {
16
+ "summary": "one-sentence summary of what was accomplished",
17
+ "insights": [
18
+ { "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
19
+ ],
20
+ "shouldCreateNote": true/false,
21
+ "noteTitle": "short title for the note (only if shouldCreateNote is true)"
22
+ }
23
+
24
+ Rules:
25
+ - Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
26
+ - Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
27
+ - insights array can be empty if nothing notable
28
+ - Keep each insight concise (1-2 sentences)`,h=await c(g,b);if(!h)return null;try{let a=h,b=a.match(/\{[\s\S]*\}/);b&&(a=b[0]);let c=JSON.parse(a);if("string"!=typeof c.summary||"boolean"!=typeof c.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return c}catch(a){return console.error("[generateDreamingInsight] JSON parse failed:",a.message),null}}a.s(["aiQuery",0,c,"generateDreamingInsight",0,e,"generateSummaryFromLog",0,d])},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0u-vzb1._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
29
+
30
+ //# sourceMappingURL=%5Broot-of-the-server%5D__098yytg._.js.map