tower-studio 0.2.44 → 0.2.46

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 (587) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +6 -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 +38 -0
  6. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +3 -3
  15. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +133 -85
  16. package/.next/standalone/.next/server/app/_not-found/page.js +8 -9
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/api/adapters/test/route.js +2 -2
  20. package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js +1 -1
  23. package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/git/route.js +1 -1
  25. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js +1 -1
  27. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js +2 -3
  30. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js +2 -2
  32. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/internal/assistant/route.js +5 -4
  34. package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +1 -1
  36. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +3 -4
  38. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js +1 -1
  40. package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/internal/harness/ask/route/app-paths-manifest.json +3 -0
  42. package/.next/standalone/.next/server/app/api/internal/harness/ask/route/build-manifest.json +9 -0
  43. package/.next/standalone/.next/server/app/api/internal/harness/ask/route/server-reference-manifest.json +4 -0
  44. package/.next/standalone/.next/server/app/api/internal/harness/ask/route.js +7 -0
  45. package/.next/standalone/.next/server/app/api/internal/harness/ask/route.js.nft.json +1 -0
  46. package/.next/standalone/.next/server/app/api/internal/harness/ask/route_client-reference-manifest.js +3 -0
  47. package/.next/standalone/.next/server/app/api/internal/harness/notify/route/app-paths-manifest.json +3 -0
  48. package/.next/standalone/.next/server/app/api/internal/harness/notify/route/build-manifest.json +9 -0
  49. package/.next/standalone/.next/server/app/api/internal/harness/notify/route/server-reference-manifest.json +4 -0
  50. package/.next/standalone/.next/server/app/api/internal/harness/notify/route.js +7 -0
  51. package/.next/standalone/.next/server/app/api/internal/harness/notify/route.js.nft.json +1 -0
  52. package/.next/standalone/.next/server/app/api/internal/harness/notify/route_client-reference-manifest.js +3 -0
  53. package/.next/standalone/.next/server/app/api/internal/harness/pending/route/app-paths-manifest.json +3 -0
  54. package/.next/standalone/.next/server/app/api/internal/harness/pending/route/build-manifest.json +9 -0
  55. package/.next/standalone/.next/server/app/api/internal/harness/pending/route/server-reference-manifest.json +4 -0
  56. package/.next/standalone/.next/server/app/api/internal/harness/pending/route.js +7 -0
  57. package/.next/standalone/.next/server/app/api/internal/harness/pending/route.js.nft.json +1 -0
  58. package/.next/standalone/.next/server/app/api/internal/harness/pending/route_client-reference-manifest.js +3 -0
  59. package/.next/standalone/.next/server/app/api/internal/harness/reply/route/app-paths-manifest.json +3 -0
  60. package/.next/standalone/.next/server/app/api/internal/harness/reply/route/build-manifest.json +9 -0
  61. package/.next/standalone/.next/server/app/api/internal/harness/reply/route/server-reference-manifest.json +4 -0
  62. package/.next/standalone/.next/server/app/api/internal/harness/reply/route.js +12 -0
  63. package/.next/standalone/.next/server/app/api/internal/harness/reply/route.js.nft.json +1 -0
  64. package/.next/standalone/.next/server/app/api/internal/harness/reply/route_client-reference-manifest.js +3 -0
  65. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js +1 -1
  66. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  67. package/.next/standalone/.next/server/app/api/internal/hooks/session/route.js +1 -1
  68. package/.next/standalone/.next/server/app/api/internal/hooks/session/route.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js +3 -3
  70. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js +2 -2
  72. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js +1 -1
  74. package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/resume/route.js +5 -4
  82. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/resume/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +6 -5
  84. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/stop/route.js +5 -4
  86. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/stop/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js +2 -2
  88. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js +2 -2
  90. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js +5 -3
  92. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/harness/page/app-paths-manifest.json +3 -0
  94. package/.next/standalone/.next/server/app/harness/page/build-manifest.json +18 -0
  95. package/.next/standalone/.next/server/app/harness/page/next-font-manifest.json +11 -0
  96. package/.next/standalone/.next/server/app/harness/page/react-loadable-manifest.json +18 -0
  97. package/.next/standalone/.next/server/app/harness/page/server-reference-manifest.json +437 -0
  98. package/.next/standalone/.next/server/app/harness/page.js +24 -0
  99. package/.next/standalone/.next/server/app/harness/page.js.nft.json +1 -0
  100. package/.next/standalone/.next/server/app/harness/page_client-reference-manifest.js +3 -0
  101. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +3 -2
  102. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +244 -160
  103. package/.next/standalone/.next/server/app/missions/page.js +11 -11
  104. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +3 -3
  107. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +133 -85
  108. package/.next/standalone/.next/server/app/onboarding/page.js +8 -9
  109. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +3 -3
  112. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +133 -85
  113. package/.next/standalone/.next/server/app/page.js +8 -9
  114. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +3 -3
  117. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +260 -140
  118. package/.next/standalone/.next/server/app/settings/page.js +10 -11
  119. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +3 -3
  122. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +284 -248
  123. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +9 -10
  124. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +3 -3
  127. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +247 -211
  128. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +9 -10
  129. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/app-paths-manifest.json +3 -0
  132. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/build-manifest.json +18 -0
  133. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/next-font-manifest.json +11 -0
  134. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/react-loadable-manifest.json +18 -0
  135. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/server-reference-manifest.json +401 -0
  136. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page.js +24 -0
  137. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page.js.nft.json +1 -0
  138. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page_client-reference-manifest.js +3 -0
  139. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +3 -3
  140. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +222 -186
  141. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +9 -10
  142. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +3 -3
  145. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +257 -209
  146. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +10 -11
  147. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +3 -3
  150. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +133 -85
  151. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +9 -10
  152. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +3 -3
  155. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +219 -171
  156. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +9 -10
  157. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +4 -4
  160. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +269 -221
  161. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +11 -12
  162. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +3 -3
  165. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +169 -133
  166. package/.next/standalone/.next/server/app/workspaces/page.js +8 -9
  167. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app-paths-manifest.json +6 -0
  170. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_09ikw5j.js +5 -0
  171. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0eh8dj_.js +9 -5
  172. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0gr2wxq.js +1 -1
  173. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-1~xqo._.js +3 -0
  174. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0lvlooo._.js → [root-of-the-server]__0-kboke._.js} +1 -1
  175. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.3n3t.._.js +3 -0
  176. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.wsvr6._.js +4 -0
  177. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.yf1mx._.js +3 -0
  178. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00xe-t8._.js +3 -0
  179. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02r7j6y._.js +3 -0
  180. package/.next/standalone/.next/server/chunks/[root-of-the-server]__02yvm55._.js +3 -0
  181. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__09arklv._.js → [root-of-the-server]__04-ty51._.js} +2 -2
  182. package/.next/standalone/.next/server/chunks/[root-of-the-server]__065hi6e._.js +3 -0
  183. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06iuq17._.js +3 -0
  184. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06x1zwj._.js +28 -0
  185. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06~wmlx._.js +3 -0
  186. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08-bq72._.js +3 -0
  187. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08clp-r._.js +3 -0
  188. package/.next/standalone/.next/server/chunks/[root-of-the-server]__092475e._.js +3 -0
  189. package/.next/standalone/.next/server/chunks/[root-of-the-server]__095t6ga._.js +3 -0
  190. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_7_w.g._.js +3 -0
  191. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0atap--._.js +3 -0
  192. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c3je91._.js +3 -0
  193. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dz.knv._.js +3 -0
  194. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ehwsa1._.js +4 -0
  195. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0esywxf._.js +3 -0
  196. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fd9z.r._.js +30 -0
  197. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gbyryz._.js +3 -0
  198. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gcg7i.._.js +3 -0
  199. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iyp~.k._.js +2 -2
  200. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0khq-k0._.js +3 -0
  201. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kkrbn-._.js +4 -0
  202. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l1-djp._.js +1 -1
  203. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0m8t3vi._.js +3 -0
  204. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nt7c0f._.js +3 -0
  205. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nv83.p._.js +4 -0
  206. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pr~t0y._.js +3 -0
  207. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qcpe0l._.js +3 -0
  208. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qfcg6k._.js +3 -0
  209. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sq5irw._.js +3 -0
  210. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0squ613._.js +3 -0
  211. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0u8tl88._.js +28 -0
  212. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wjr-72._.js +3 -0
  213. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wugb-9._.js +3 -0
  214. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yeg1kp._.js +4 -0
  215. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zchqv1._.js +43 -0
  216. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zcy11y._.js +3 -0
  217. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~1-i5h._.js +3 -0
  218. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~ju4-d._.js +1 -1
  219. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10aw_67._.js +3 -0
  220. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10ci~o9._.js +3 -0
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10qclz-._.js +3 -0
  222. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12fmxq0._.js +3 -0
  223. package/.next/standalone/.next/server/chunks/[root-of-the-server]__136ty69._.js +3 -0
  224. package/.next/standalone/.next/server/chunks/_02hac5p._.js +30 -0
  225. package/.next/standalone/.next/server/chunks/_0_w835g._.js +4 -0
  226. package/.next/standalone/.next/server/chunks/_0je3dz2._.js +30 -0
  227. package/.next/standalone/.next/server/chunks/_0tidm8l._.js +30 -0
  228. package/.next/standalone/.next/server/chunks/_0zok2an._.js +30 -0
  229. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_ask_route_actions_0_c62hg.js +3 -0
  230. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_notify_route_actions_08hof6m.js +3 -0
  231. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_pending_route_actions_0w9t_9m.js +3 -0
  232. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_reply_route_actions_0qatz~a.js +3 -0
  233. package/.next/standalone/.next/server/chunks/src_05balzk._.js +3 -0
  234. package/.next/standalone/.next/server/chunks/src_0aygchu._.js +3 -0
  235. package/.next/standalone/.next/server/chunks/src_0gif-f5._.js +3 -0
  236. package/.next/standalone/.next/server/chunks/src_0pg9w-x._.js +3 -0
  237. package/.next/standalone/.next/server/chunks/src_0vp6.co._.js +3 -0
  238. package/.next/standalone/.next/server/chunks/src_11k6i~l._.js +3 -0
  239. package/.next/standalone/.next/server/chunks/src_actions_agent-actions_ts_10q9r5b._.js +8 -2
  240. package/.next/standalone/.next/server/chunks/src_lib_02llcit._.js +1 -1
  241. package/.next/standalone/.next/server/chunks/src_lib_0aowbzy._.js +1 -1
  242. package/.next/standalone/.next/server/chunks/src_lib_0d~1~wz._.js +3 -0
  243. package/.next/standalone/.next/server/chunks/src_lib_0ylel_1._.js +3 -0
  244. package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
  245. package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
  246. package/.next/standalone/.next/server/chunks/src_lib_config-defaults_ts_10ayktg._.js +3 -0
  247. package/.next/standalone/.next/server/chunks/src_lib_config-reader_ts_0e5f7vk._.js +3 -0
  248. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  249. package/.next/standalone/.next/server/chunks/ssr/0se9_next_dist_0i5qmqd._.js +1 -1
  250. package/.next/standalone/.next/server/chunks/ssr/0se9_next_dist_esm_build_templates_app-page_04~dhws.js +4 -0
  251. package/.next/standalone/.next/server/chunks/ssr/0se9_next_dist_esm_build_templates_app-page_0fro4ex.js +4 -0
  252. package/.next/standalone/.next/server/chunks/ssr/0ws9_lucide-react_dist_esm_icons_0gv_cwy._.js +3 -0
  253. package/.next/standalone/.next/server/chunks/ssr/12k._sonner_dist_index_mjs_0-vmpk5._.js +3 -0
  254. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-geq20._.js +3 -0
  255. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.0m12b._.js +30 -0
  256. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00qzvly._.js +43 -0
  257. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bz3_g._.js +3 -0
  258. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02~hdzx._.js +3 -0
  259. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06sew6r._.js +43 -0
  260. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07rk6ic._.js +30 -0
  261. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__090y_.y._.js +3 -0
  262. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b.ej5q._.js +1 -1
  263. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b6fbjv._.js +30 -0
  264. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b6hugs._.js +43 -0
  265. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0br5e7w._.js +43 -0
  266. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bx_h2u._.js +4 -0
  267. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dhq_gl._.js +30 -0
  268. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e79g0v._.js +3 -0
  269. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0esg88l._.js +30 -0
  270. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h_pt4a._.js +3 -0
  271. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hzwoy5._.js +30 -0
  272. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0idkp76._.js +3 -0
  273. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j4m.1s._.js +3 -0
  274. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0jymb~t._.js +1 -1
  275. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kmonje._.js +3 -0
  276. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kqp70x._.js +30 -0
  277. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l0~scn._.js +1 -1
  278. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lh3mlq._.js +3 -0
  279. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0m8m7vc._.js +30 -0
  280. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0muf4wq._.js +49 -0
  281. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n02kfa._.js +30 -0
  282. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n3uc.v._.js +3 -0
  283. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o5ohqy._.js +47 -0
  284. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_q09t._.js +30 -0
  285. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s~4y3y._.js +1 -1
  286. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s~ak20._.js +3 -0
  287. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ta_mpj._.js +30 -0
  288. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0trmndk._.js +30 -0
  289. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3~-.g._.js +30 -0
  290. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vyl8to._.js +3 -0
  291. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ws0_c1._.js +3 -0
  292. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x7br99._.js +3 -0
  293. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xnuz05._.js +5 -0
  294. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ynq8ty._.js +3 -0
  295. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zsnp~d._.js +5 -0
  296. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~edc3d._.js +30 -0
  297. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~mhv4m._.js +3 -0
  298. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1013v_g._.js +47 -0
  299. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11fp64w._.js +3 -0
  300. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__123rmn-._.js +30 -0
  301. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0_z5hke._.js → [root-of-the-server]__12viys4._.js} +2 -2
  302. package/.next/standalone/.next/server/chunks/ssr/_0-5.hgb._.js +3 -0
  303. package/.next/standalone/.next/server/chunks/ssr/{_0dye20y._.js → _0-wp_zu._.js} +2 -2
  304. package/.next/standalone/.next/server/chunks/ssr/_0-~9em3._.js +1 -1
  305. package/.next/standalone/.next/server/chunks/ssr/_0..h3hk._.js +3 -0
  306. package/.next/standalone/.next/server/chunks/ssr/{_08bq4g8._.js → _00_h2nx._.js} +2 -2
  307. package/.next/standalone/.next/server/chunks/ssr/_02p-udo._.js +3 -0
  308. package/.next/standalone/.next/server/chunks/ssr/_05~lqg-._.js +4 -0
  309. package/.next/standalone/.next/server/chunks/ssr/_0771b4a._.js +47 -0
  310. package/.next/standalone/.next/server/chunks/ssr/{_113957g._.js → _0ak77.u._.js} +3 -3
  311. package/.next/standalone/.next/server/chunks/ssr/{_11osha9._.js → _0ami9yt._.js} +2 -2
  312. package/.next/standalone/.next/server/chunks/ssr/{_0r4_qn~._.js → _0awn2mm._.js} +2 -2
  313. package/.next/standalone/.next/server/chunks/ssr/{_07lq-bp._.js → _0b660g4._.js} +1 -1
  314. package/.next/standalone/.next/server/chunks/ssr/{_0j5.ig_._.js → _0czsddm._.js} +1 -1
  315. package/.next/standalone/.next/server/chunks/ssr/_0fmko25._.js +3 -0
  316. package/.next/standalone/.next/server/chunks/ssr/{_0_nhdgs._.js → _0gomvsp._.js} +2 -2
  317. package/.next/standalone/.next/server/chunks/ssr/_0g~p9_x._.js +3 -0
  318. package/.next/standalone/.next/server/chunks/ssr/_0hg~.4w._.js +6 -0
  319. package/.next/standalone/.next/server/chunks/ssr/_0hsuip_._.js +3 -0
  320. package/.next/standalone/.next/server/chunks/ssr/{_0zr81mw._.js → _0hx2o_8._.js} +2 -2
  321. package/.next/standalone/.next/server/chunks/ssr/{_0s.ik0k._.js → _0j7m~u6._.js} +1 -1
  322. package/.next/standalone/.next/server/chunks/ssr/{_08-x_rp._.js → _0l6byg1._.js} +1 -1
  323. package/.next/standalone/.next/server/chunks/ssr/{_0i4xdso._.js → _0mmy~98._.js} +2 -2
  324. package/.next/standalone/.next/server/chunks/ssr/_0nrxhfb._.js +47 -0
  325. package/.next/standalone/.next/server/chunks/ssr/{_02vz78l._.js → _0o_c3b2._.js} +2 -2
  326. package/.next/standalone/.next/server/chunks/ssr/_0os43sb._.js +3 -0
  327. package/.next/standalone/.next/server/chunks/ssr/{_0nze-e6._.js → _0p5ft59._.js} +1 -1
  328. package/.next/standalone/.next/server/chunks/ssr/_0q2pep_._.js +3 -0
  329. package/.next/standalone/.next/server/chunks/ssr/{_060e1u.._.js → _0snv7nt._.js} +1 -1
  330. package/.next/standalone/.next/server/chunks/ssr/_0ty4xe6._.js +43 -0
  331. package/.next/standalone/.next/server/chunks/ssr/_0vkl7.h._.js +47 -0
  332. package/.next/standalone/.next/server/chunks/ssr/_0wbcp88._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/ssr/_0x09t_o._.js +47 -0
  334. package/.next/standalone/.next/server/chunks/ssr/_0z5~opf._.js +3 -0
  335. package/.next/standalone/.next/server/chunks/ssr/_0zn.4bi._.js +47 -0
  336. package/.next/standalone/.next/server/chunks/ssr/_1086w4p._.js +47 -0
  337. package/.next/standalone/.next/server/chunks/ssr/_10q2mbe._.js +17 -0
  338. package/.next/standalone/.next/server/chunks/ssr/_11.knhq._.js +3 -0
  339. package/.next/standalone/.next/server/chunks/ssr/_1118hto._.js +43 -0
  340. package/.next/standalone/.next/server/chunks/ssr/{_0rtydyv._.js → _12s8n8g._.js} +1 -1
  341. package/.next/standalone/.next/server/chunks/ssr/src_11j0qlp._.js +3 -0
  342. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +8 -2
  343. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  344. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  345. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  346. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  347. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  348. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  349. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_notes_notes-page-client_tsx_10gyo3v._.js +1 -1
  350. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  351. package/.next/standalone/.next/server/chunks/ssr/src_components_0rowjw~._.js +7 -0
  352. package/.next/standalone/.next/server/chunks/ssr/{src_lib_00wjv6n._.js → src_lib_04nzvfd._.js} +1 -1
  353. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0.~.oo-._.js → src_lib_0_px2pz._.js} +2 -2
  354. package/.next/standalone/.next/server/chunks/ssr/src_lib_0a.zy31._.js +3 -0
  355. package/.next/standalone/.next/server/chunks/ssr/src_lib_0b73q0a._.js +3 -0
  356. package/.next/standalone/.next/server/chunks/ssr/src_lib_0cld9rt._.js +3 -0
  357. package/.next/standalone/.next/server/chunks/ssr/{src_lib_005uqbe._.js → src_lib_0dbf2qa._.js} +1 -1
  358. package/.next/standalone/.next/server/chunks/ssr/src_lib_0er7rzd._.js +3 -0
  359. package/.next/standalone/.next/server/chunks/ssr/src_lib_0f0v8_~._.js +3 -0
  360. package/.next/standalone/.next/server/chunks/ssr/src_lib_0fr6fzy._.js +3 -0
  361. package/.next/standalone/.next/server/chunks/ssr/{src_lib_01sr8_t._.js → src_lib_0h2u7a0._.js} +1 -1
  362. package/.next/standalone/.next/server/chunks/ssr/src_lib_0k04rl3._.js +3 -0
  363. package/.next/standalone/.next/server/chunks/ssr/src_lib_0lpxsj~._.js +3 -0
  364. package/.next/standalone/.next/server/chunks/ssr/src_lib_0sq6aqm._.js +3 -0
  365. package/.next/standalone/.next/server/chunks/ssr/src_lib_0ui-~7g._.js +3 -0
  366. package/.next/standalone/.next/server/chunks/ssr/src_lib_0y5zzg-._.js +3 -0
  367. package/.next/standalone/.next/server/chunks/ssr/src_lib_0z-gn78._.js +3 -0
  368. package/.next/standalone/.next/server/chunks/ssr/src_lib_13c4a4g._.js +3 -0
  369. package/.next/standalone/.next/server/chunks/ssr/src_lib_harness_harness-message_ts_0_3ygf9._.js +3 -0
  370. package/.next/standalone/.next/server/chunks/ssr/src_lib_pty_11~ojr2._.js +3 -0
  371. package/.next/standalone/.next/server/chunks/ssr/src_lib_pty_orphan-reaper_ts_0a0qmlo._.js +3 -0
  372. package/.next/standalone/.next/server/chunks/ssr/{_0ng0eku._.js → src_lib_schemas_ts_0ph~1ak._.js} +3 -3
  373. package/.next/standalone/.next/server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js +1 -1
  374. package/.next/standalone/.next/server/functions-config-manifest.json +6 -0
  375. package/.next/standalone/.next/server/instrumentation.js +1 -1
  376. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  377. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  378. package/.next/standalone/.next/server/next-font-manifest.json +8 -0
  379. package/.next/standalone/.next/server/pages/500.html +1 -1
  380. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  381. package/.next/standalone/.next/server/server-reference-manifest.json +2368 -1528
  382. package/.next/standalone/.next/static/chunks/0-kkc.ibted8y.js +1 -0
  383. package/.next/standalone/.next/static/chunks/{0xejm4ge9~cn..js → 0.2y9uc38xso-.js} +1 -1
  384. package/.next/standalone/.next/static/chunks/{0346xrw6i2bwo.js → 0.gedys.tq.~k.js} +1 -1
  385. package/.next/standalone/.next/static/chunks/00g58.es_hxli.js +1 -0
  386. package/.next/standalone/.next/static/chunks/00o_eiv12t~.1.js +1 -0
  387. package/.next/standalone/.next/static/chunks/01qtgj0xv1fsm.js +2 -0
  388. package/.next/standalone/.next/static/chunks/024euw7po0d0w.js +1 -0
  389. package/.next/standalone/.next/static/chunks/02v-9v~885t9c.js +1 -0
  390. package/.next/standalone/.next/static/chunks/03ct4d8znb7tp.js +1 -0
  391. package/.next/standalone/.next/static/chunks/03uix~1ru.ovv.js +1 -0
  392. package/.next/standalone/.next/static/chunks/04.2m8l~ws19v.js +1 -0
  393. package/.next/standalone/.next/static/chunks/06x7oq8_iu~9d.js +1 -0
  394. package/.next/standalone/.next/static/chunks/07c4b1kp_85qg.js +1 -0
  395. package/.next/standalone/.next/static/chunks/07qijq9o5jccu.js +1 -0
  396. package/.next/standalone/.next/static/chunks/{0uj-3ckujwaiy.js → 09om2gfwimh7k.js} +1 -1
  397. package/.next/standalone/.next/static/chunks/0alhq.h4~iogi.js +1 -0
  398. package/.next/standalone/.next/static/chunks/{0rcuiuax31_uh.js → 0cf7e1scao3zk.js} +1 -1
  399. package/.next/standalone/.next/static/chunks/0ck~sr0nkabl~.js +1 -0
  400. package/.next/standalone/.next/static/chunks/0d1ok-v-u-xe~.js +1 -0
  401. package/.next/standalone/.next/static/chunks/0d9u2xspag~4h.js +5 -0
  402. package/.next/standalone/.next/static/chunks/0ftptcpntzaux.js +1 -0
  403. package/.next/standalone/.next/static/chunks/0gk~m5bwgoafi.js +1 -0
  404. package/.next/standalone/.next/static/chunks/0in_7s8n4lmfr.js +1 -0
  405. package/.next/standalone/.next/static/chunks/0ix28r65.7o_r.js +12 -0
  406. package/.next/standalone/.next/static/chunks/0j5olwb~d3~3j.js +1 -0
  407. package/.next/standalone/.next/static/chunks/0mtrtl-jl46in.js +2 -0
  408. package/.next/standalone/.next/static/chunks/0ov_akpudbv96.js +5 -0
  409. package/.next/standalone/.next/static/chunks/0oyskd~8~j.j7.js +1 -0
  410. package/.next/standalone/.next/static/chunks/0q1872yhybt55.js +1 -0
  411. package/.next/standalone/.next/static/chunks/0seo-lerjdkbn.js +1 -0
  412. package/.next/standalone/.next/static/chunks/0t1awv68pnn-e.js +1 -0
  413. package/.next/standalone/.next/static/chunks/0wl8cpmvyhv0l.js +1 -0
  414. package/.next/standalone/.next/static/chunks/0~2l3wz-gxs2j.js +1 -0
  415. package/.next/standalone/.next/static/chunks/0~7h_a_dofg-4.js +1 -0
  416. package/.next/standalone/.next/static/chunks/11yhe31en~dvt.js +1 -0
  417. package/.next/standalone/.next/static/chunks/12-mlz2vukuga.js +1 -0
  418. package/.next/standalone/.next/static/chunks/14fch6~swodjf.css +1 -0
  419. package/.next/standalone/.next/static/chunks/15gztq9f12uhe.js +1 -0
  420. package/.next/standalone/.next/static/chunks/15ue90qe1sh-9.js +1 -0
  421. package/.next/standalone/.next/static/chunks/17z9uivez~kp3.js +1 -0
  422. package/.next/standalone/package.json +5 -6
  423. package/dist/mcp-server.cjs +1597 -4545
  424. package/package.json +5 -6
  425. package/prisma/schema.prisma +83 -5
  426. package/scripts/migrations/0005-add-parent-task-id.ts +29 -0
  427. package/scripts/migrations/0006-project-knowledge.ts +58 -0
  428. package/scripts/migrations/0007-product-group.ts +67 -0
  429. package/scripts/{stop-hook.js → tower-stop-hook.js} +42 -3
  430. package/skills/tower/SKILL.md +36 -75
  431. package/skills/tower/references/task-source.md +80 -0
  432. package/skills/tower/references/unattended-messaging.md +95 -0
  433. package/tsconfig.json +14 -4
  434. package/.next/standalone/.next/server/chunks/[externals]__0x_wqa7._.js +0 -3
  435. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.p6em~._.js +0 -3
  436. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.zmhk-._.js +0 -3
  437. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0042hx5._.js +0 -3
  438. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03ufxqq._.js +0 -28
  439. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04--bs7._.js +0 -3
  440. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04m2l8a._.js +0 -3
  441. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04r193~._.js +0 -3
  442. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0657y50._.js +0 -3
  443. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06ndn7a._.js +0 -4
  444. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08yqoti._.js +0 -3
  445. package/.next/standalone/.next/server/chunks/[root-of-the-server]__098.3z2._.js +0 -3
  446. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_d.s7s._.js +0 -28
  447. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_zfnj0._.js +0 -20
  448. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0clptds._.js +0 -3
  449. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g.k9o~._.js +0 -3
  450. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i34gbs._.js +0 -4
  451. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iggiij._.js +0 -3
  452. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i~3dwq._.js +0 -3
  453. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j05vlm._.js +0 -3
  454. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j1px8f._.js +0 -3
  455. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0k-5ag7._.js +0 -3
  456. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0otyifi._.js +0 -3
  457. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pl.c5.._.js +0 -3
  458. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0r~9.7c._.js +0 -4
  459. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t31ba_._.js +0 -3
  460. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t_weyi._.js +0 -3
  461. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uptkzd._.js +0 -4
  462. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x3kws1._.js +0 -3
  463. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y8w5di._.js +0 -4
  464. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zi3~a8._.js +0 -3
  465. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~g6-c~._.js +0 -3
  466. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10fv6tt._.js +0 -3
  467. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1189rd1._.js +0 -4
  468. package/.next/standalone/.next/server/chunks/_0jmdgq~._.js +0 -7
  469. package/.next/standalone/.next/server/chunks/_0q10iet._.js +0 -7
  470. package/.next/standalone/.next/server/chunks/_0qk_esg._.js +0 -4
  471. package/.next/standalone/.next/server/chunks/_0t31z6q._.js +0 -5
  472. package/.next/standalone/.next/server/chunks/_12537g8._.js +0 -7
  473. package/.next/standalone/.next/server/chunks/src_0fq3zjg._.js +0 -3
  474. package/.next/standalone/.next/server/chunks/src_0weytpz._.js +0 -3
  475. package/.next/standalone/.next/server/chunks/src_0wlyw0g._.js +0 -3
  476. package/.next/standalone/.next/server/chunks/src_0~ey84y._.js +0 -3
  477. package/.next/standalone/.next/server/chunks/src_lib_0i2.v2d._.js +0 -3
  478. package/.next/standalone/.next/server/chunks/src_lib_0nw5n~t._.js +0 -3
  479. package/.next/standalone/.next/server/chunks/src_lib_12xey8u._.js +0 -3
  480. package/.next/standalone/.next/server/chunks/ssr/0ws9_lucide-react_dist_esm_icons_0pkla8j._.js +0 -3
  481. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00ebsjb._.js +0 -30
  482. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01fmnse._.js +0 -3
  483. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01vm_46._.js +0 -47
  484. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__025ol9g._.js +0 -3
  485. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__049n47u._.js +0 -3
  486. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04ednzb._.js +0 -43
  487. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04wbr9x._.js +0 -3
  488. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05xg05r._.js +0 -3
  489. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06dfcgo._.js +0 -30
  490. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07xkj1s._.js +0 -47
  491. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__081e5n~._.js +0 -3
  492. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08tzbfh._.js +0 -3
  493. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ecd_1d._.js +0 -47
  494. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0iln7n_._.js +0 -47
  495. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j_-qk5._.js +0 -30
  496. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k6oo0n._.js +0 -43
  497. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lws68d._.js +0 -47
  498. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mpjat-._.js +0 -3
  499. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oamph.._.js +0 -47
  500. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pnv7nd._.js +0 -30
  501. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tja~wz._.js +0 -30
  502. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ug022w._.js +0 -30
  503. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ugledi._.js +0 -3
  504. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vxlsec._.js +0 -4
  505. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w0.sdz._.js +0 -3
  506. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x6k.ee._.js +0 -30
  507. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xwzk2.._.js +0 -47
  508. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yby8pl._.js +0 -47
  509. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0z7je5_._.js +0 -5
  510. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zxc81t._.js +0 -30
  511. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zzqn5z._.js +0 -43
  512. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10c.a3u._.js +0 -30
  513. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10n3vn6._.js +0 -30
  514. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__123rmyb._.js +0 -30
  515. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__124zb~p._.js +0 -30
  516. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__127w3bm._.js +0 -43
  517. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13ce7v2._.js +0 -30
  518. package/.next/standalone/.next/server/chunks/ssr/_04~mjmb._.js +0 -3
  519. package/.next/standalone/.next/server/chunks/ssr/_05a2u03._.js +0 -47
  520. package/.next/standalone/.next/server/chunks/ssr/_070t_mh._.js +0 -6
  521. package/.next/standalone/.next/server/chunks/ssr/_07q06~v._.js +0 -47
  522. package/.next/standalone/.next/server/chunks/ssr/_0_q41~z._.js +0 -47
  523. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +0 -7
  524. package/.next/standalone/.next/server/chunks/ssr/_0dxbp89._.js +0 -47
  525. package/.next/standalone/.next/server/chunks/ssr/_0foto06._.js +0 -3
  526. package/.next/standalone/.next/server/chunks/ssr/_0kojxno._.js +0 -3
  527. package/.next/standalone/.next/server/chunks/ssr/_0rdyrfd._.js +0 -3
  528. package/.next/standalone/.next/server/chunks/ssr/_0rxeqmo._.js +0 -17
  529. package/.next/standalone/.next/server/chunks/ssr/_0s.h4l2._.js +0 -43
  530. package/.next/standalone/.next/server/chunks/ssr/_0u3yt.5._.js +0 -4
  531. package/.next/standalone/.next/server/chunks/ssr/_0wqcz3w._.js +0 -47
  532. package/.next/standalone/.next/server/chunks/ssr/_0ye1-r-._.js +0 -3
  533. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_03r.9go._.js +0 -3
  534. package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_06f0dao._.js +0 -3
  535. package/.next/standalone/.next/server/chunks/ssr/src_0djxlqx._.js +0 -3
  536. package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +0 -3
  537. package/.next/standalone/.next/server/chunks/ssr/src_components_ui_select_tsx_0d2ra01._.js +0 -3
  538. package/.next/standalone/.next/server/chunks/ssr/src_lib_08jql1e._.js +0 -3
  539. package/.next/standalone/.next/server/chunks/ssr/src_lib_0b~j-9d._.js +0 -3
  540. package/.next/standalone/.next/server/chunks/ssr/src_lib_0eymyjf._.js +0 -3
  541. package/.next/standalone/.next/server/chunks/ssr/src_lib_0fkv9z3._.js +0 -3
  542. package/.next/standalone/.next/server/chunks/ssr/src_lib_0n-n0.a._.js +0 -3
  543. package/.next/standalone/.next/server/chunks/ssr/src_lib_0sgt~lv._.js +0 -3
  544. package/.next/standalone/.next/server/chunks/ssr/src_lib_0sms4xl._.js +0 -5
  545. package/.next/standalone/.next/server/chunks/ssr/src_lib_0x-iyl1._.js +0 -3
  546. package/.next/standalone/.next/server/chunks/ssr/src_lib_0yjmty1._.js +0 -3
  547. package/.next/standalone/.next/server/chunks/ssr/src_lib_13aevv6._.js +0 -3
  548. package/.next/standalone/.next/static/chunks/0-tuek2jqf0el.js +0 -1
  549. package/.next/standalone/.next/static/chunks/0.-.jc~0b~hy0.js +0 -1
  550. package/.next/standalone/.next/static/chunks/0.lqb7y9kz5z6.js +0 -1
  551. package/.next/standalone/.next/static/chunks/0.nsmn6shzidu.js +0 -2
  552. package/.next/standalone/.next/static/chunks/0.~03w.uxge40.js +0 -1
  553. package/.next/standalone/.next/static/chunks/01hdj_kw4z2zq.js +0 -2
  554. package/.next/standalone/.next/static/chunks/01j9m895w64zn.js +0 -1
  555. package/.next/standalone/.next/static/chunks/01yoibobkdz3x.js +0 -1
  556. package/.next/standalone/.next/static/chunks/041o.dh2lc-k3.js +0 -1
  557. package/.next/standalone/.next/static/chunks/07i9j5yyg4vs3.js +0 -1
  558. package/.next/standalone/.next/static/chunks/08ooaq~-.8fzu.js +0 -1
  559. package/.next/standalone/.next/static/chunks/0bylodlncwfpb.js +0 -5
  560. package/.next/standalone/.next/static/chunks/0clewc5ifaruu.js +0 -12
  561. package/.next/standalone/.next/static/chunks/0cpwtqzrjdgvs.js +0 -1
  562. package/.next/standalone/.next/static/chunks/0c~e1-nst-ze-.js +0 -1
  563. package/.next/standalone/.next/static/chunks/0ddt-snh45031.js +0 -1
  564. package/.next/standalone/.next/static/chunks/0dv4anj-j523o.js +0 -1
  565. package/.next/standalone/.next/static/chunks/0gf~0e3xpa0fj.js +0 -5
  566. package/.next/standalone/.next/static/chunks/0gvfb.b8m_i8t.js +0 -1
  567. package/.next/standalone/.next/static/chunks/0h77-u2vvr-a1.js +0 -1
  568. package/.next/standalone/.next/static/chunks/0jrje~1gt6w85.css +0 -1
  569. package/.next/standalone/.next/static/chunks/0lqp~-dlfenad.js +0 -1
  570. package/.next/standalone/.next/static/chunks/0p4w5b_p_yju8.js +0 -1
  571. package/.next/standalone/.next/static/chunks/0qkr26yz3bocs.js +0 -1
  572. package/.next/standalone/.next/static/chunks/0uf~7eqel0zra.js +0 -1
  573. package/.next/standalone/.next/static/chunks/0w71r_sj_fibx.js +0 -1
  574. package/.next/standalone/.next/static/chunks/0xg6rcq6g4bbh.js +0 -1
  575. package/.next/standalone/.next/static/chunks/0yff8rwmrl5m4.js +0 -1
  576. package/.next/standalone/.next/static/chunks/0ymipmkk2uqby.js +0 -1
  577. package/.next/standalone/.next/static/chunks/0znfclapbniaa.js +0 -1
  578. package/.next/standalone/.next/static/chunks/11pe3kpxuj33f.js +0 -1
  579. package/.next/standalone/.next/static/chunks/172s9cg35qt7i.js +0 -1
  580. package/.next/standalone/.next/static/chunks/17m4o~gdsvuo3.js +0 -1
  581. package/.next/standalone/.next/static/chunks/184-zu89wwa4u.js +0 -1
  582. package/next.config.ts +0 -18
  583. /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_buildManifest.js +0 -0
  584. /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_clientMiddlewareManifest.js +0 -0
  585. /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_ssgManifest.js +0 -0
  586. /package/scripts/{post-tool-hook.js → tower-post-tool-hook.js} +0 -0
  587. /package/scripts/{session-start-hook.js → tower-session-start-hook.js} +0 -0
@@ -0,0 +1,43 @@
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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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)},103071,a=>{"use strict";a.s(["SESSION_INSIGHT_CATEGORY",0,"经验洞见","TASK_OVERVIEW_CATEGORY",0,"任务笔记","TOWER_LABEL_COLOR",0,"#8b5cf6","TOWER_LABEL_NAME",0,"Tower"])},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])},626564,a=>{"use strict";var b=a.i(233405);a.s(["checkConflicts",0,function(a,c,d){try{return(0,b.execFileSync)("git",["merge-tree","--write-tree",c,d],{cwd:a,encoding:"utf-8",timeout:1e4,stdio:"pipe"}),{hasConflicts:!1,conflictFiles:[]}}catch(a){return{hasConflicts:!0,conflictFiles:(a instanceof Error&&"stdout"in a?String(a.stdout??""):"").split("\n").filter(a=>a.includes("CONFLICT")).map(a=>{let b=a.match(/CONFLICT.*?:\s*(.+)$/);return b?b[1].trim():a.trim()}).filter(Boolean)}}},"parseDiffOutput",0,function(a,b){let c=[];for(let b of a.split("\n")){let a=b.trim();if(!a)continue;let d=a.split(" ");if(d.length<3)continue;let[e,f,...g]=d,h=g.join(" ");"-"===e&&"-"===f?c.push({filename:h,added:0,removed:0,isBinary:!0}):c.push({filename:h,added:parseInt(e,10)||0,removed:parseInt(f,10)||0,isBinary:!1})}let d=/^diff --git a\/(.+) b\/(.+)$/,e=new Map;if(b.trim()){let a=b.length>512e3;for(let c of b.split(/(?=^diff --git )/m)){if(!c.trim())continue;let b=c.split("\n")[0],f=d.exec(b);if(!f)continue;let g=f[2],h=c;if(a){let a=c.split("\n");a.length>200&&(h=a.slice(0,200).join("\n")+"\n... (truncated)")}e.set(g,h)}}let f=c.map(a=>({filename:a.filename,added:a.added,removed:a.removed,isBinary:a.isBinary,patch:e.get(a.filename)??""})),g=f.reduce((a,b)=>a+b.added,0),h=f.reduce((a,b)=>a+b.removed,0);return{files:f,totalAdded:g,totalRemoved:h}}])},941750,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(761469),e=a.i(835032),f=a.i(897667);async function g(a){let e=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!e)return{kind:"error",status:404,message:"Task not found"};if(!e.project?.localPath)return{kind:"error",status:400,message:"Project has no local path"};let f=e.baseBranch||"main",g=e.project.localPath,h=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"}});if(!h)return{kind:"empty"};let{forkCommit:i,mergeCommit:j,branchTipCommit:k,worktreeBranch:l,worktreePath:m}=h;if(j&&i){let a=k||j;return{kind:"ok",data:{diffCwd:g,diffTarget:`${i}..${a}`,baseRef:i,endRef:a,worktreePath:null}}}if(i&&m&&(0,c.existsSync)(m))return{kind:"ok",data:{diffCwd:m,diffTarget:i,baseRef:i,endRef:null,worktreePath:m}};if(i&&!m)return{kind:"ok",data:{diffCwd:g,diffTarget:i,baseRef:i,endRef:null,worktreePath:null}};if(l)try{let a=(0,b.execFileSync)("git",["merge-base",f,l],{cwd:g,encoding:"utf-8",timeout:5e3}).trim(),d=m&&(0,c.existsSync)(m)?m:g;return{kind:"ok",data:{diffCwd:d,diffTarget:a,baseRef:a,endRef:null,worktreePath:m&&(0,c.existsSync)(m)?m:null}}}catch{return{kind:"branch-deleted"}}return{kind:"empty"}}var h=a.i(626564),i=a.i(103071);function j(a,c,d=1048576){try{return(0,b.execFileSync)("git",a,{cwd:c,encoding:"utf-8",timeout:3e4,maxBuffer:d,stdio:["pipe","pipe","pipe"]}).trim()}catch{return null}}async function k(a){let b=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!b||!b.project)return null;let e=b.project.localPath??null,f=[],i=null,k=0,l=null,m=e||process.cwd();if(e){let b=await g(a);if("ok"===b.kind){let{diffCwd:a,diffTarget:c}=b.data;m=a;let d=c.includes("..")?c:`${c}..HEAD`,e=j(["diff","--numstat",c],a,0x4000000);e&&(f=(0,h.parseDiffOutput)(e,"").files),i=j(["log","--oneline",d],a)||null;let g=j(["rev-list","--count",d],a);k=g&&parseInt(g,10)||0;let n=j(["diff",c],a,0x4000000);n&&(l=n.length>12288?n.slice(0,12288)+"\n...(diff truncated)":n)}}if(0===f.length&&0===k){let b=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"},select:{gitLog:!0,worktreePath:!0}});b?.gitLog&&(i=b.gitLog,k=b.gitLog.split("\n").filter(Boolean).length),b?.worktreePath&&(0,c.existsSync)(b.worktreePath)&&(m=b.worktreePath)}if(0===f.length&&0===k)return null;let n=(await d.db.projectAsset.findMany({where:{taskId:a},orderBy:{createdAt:"asc"},select:{filename:!0,description:!0}})).map(a=>({filename:a.filename,description:a.description}));return{taskId:a,taskTitle:b.title,projectId:b.projectId,projectName:b.project.name,files:f,commitLog:i,commitCount:k,diffText:l,assets:n,cwd:m}}async function l(a){let b=a.files.slice(0,60).map(a=>a.isBinary?`${a.filename} (binary)`:`${a.filename} (+${a.added}/-${a.removed})`).join("\n")||"(无文件清单)",d=`你是资深工程师。下面是一个刚完成的开发任务的代码改动信息,请用简洁中文写一段「改动摘要」:说明这次改动做了什么、解决了什么问题、主要涉及哪些模块或逻辑。要求 3-6 句、纯文本,不要 markdown 标题,不要逐条罗列文件(文件清单会另外展示)。
29
+
30
+ 任务标题:${a.taskTitle}
31
+
32
+ 提交记录:
33
+ ${a.commitLog??"(无提交记录)"}
34
+
35
+ 变更文件(共 ${a.files.length} 个):
36
+ ${b}
37
+
38
+ diff(可能已截断):
39
+ \`\`\`diff
40
+ ${a.diffText??"(无 diff)"}
41
+ \`\`\``,e=(0,c.existsSync)(a.cwd)?a.cwd:process.cwd(),g=await (0,f.aiQuery)(d,e,{maxTurns:1});if(g){let a=g.replace(/^[#*\->"'\s]+/,"").trim();if(a)return a}var h=a.commitLog;if(!h)return null;let i=h.split("\n").filter(Boolean);if(0===i.length)return null;let j=i[0].replace(/^[a-f0-9]+\s+/,"");return 1===i.length?j:`${i.length} 个提交:${j}`}async function m(a,b={}){let c=b.kind??"done",f=null;try{f=await k(a)}catch(a){console.error("[captureTaskOverview] Failed to gather change data:",a);return}if(!f)return void console.error(`[captureTaskOverview] No changes for task=${a.slice(0,8)} — skip`);let g=f;(async()=>{try{let b=await l(g),f=new Date().toISOString(),h=function(a,b,c,d="done"){let e=[];if(e.push("cancelled"===d?"> 本笔记由任务取消时自动生成,记录已产生的改动,作为下次重启该任务的参考经验。":"> 本笔记由任务完成时自动生成,记录本次任务的改动概览,便于后续复盘与排查。"),e.push(""),e.push("## 改动摘要"),e.push(b??"(未能生成改动摘要)"),e.push(""),e.push("## 文件清单"),a.files.length>0){let b=a.files.slice(0,100);for(let a of b)e.push(a.isBinary?`- \`${a.filename}\`(二进制)`:`- \`${a.filename}\` (+${a.added} / -${a.removed})`);a.files.length>b.length&&e.push(`- …其余 ${a.files.length-b.length} 个文件`),e.push(""),e.push(`共 ${a.files.length} 个文件、${a.commitCount} 个提交。`)}else e.push(`(未能获取精确文件清单,本次约 ${a.commitCount} 个提交。)`);if(e.push(""),e.push("## 相关附件与参考资料"),a.assets.length>0)for(let b of a.assets)e.push(b.description?`- ${b.filename} — ${b.description}`:`- ${b.filename}`);else e.push("(无)");return e.push(""),e.push("---"),e.push(`> 关联任务:${a.taskTitle} (\`${a.taskId}\`)`),e.push(`> 项目:${a.projectName}`),e.push(`> 生成时间:${c}`),e.join("\n")}(g,b,f,c),j=function(a,b="done"){return`${"cancelled"===b?"任务概览(已取消):":"任务概览:"}${a}`.slice(0,200)}(g.taskTitle,c),k=await d.db.projectNote.create({data:{title:j,content:h,category:i.TASK_OVERVIEW_CATEGORY,projectId:g.projectId,taskId:g.taskId}});await (0,e.syncNoteToFts)(d.db,{id:k.id,title:k.title,content:k.content}),console.error(`[captureTaskOverview] Note created: ${k.id} for task=${a.slice(0,8)}`)}catch(a){console.error("[captureTaskOverview] Failed to create overview note:",a)}})()}a.s(["captureTaskOverview",0,m],941750)},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)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0ti8vng._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
42
+
43
+ //# sourceMappingURL=%5Broot-of-the-server%5D__06sew6r._.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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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]__0ti8vng._.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__07rk6ic._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},989927,a=>{"use strict";var b=a.i(446786),c=a.i(814747);function d(a){return a.startsWith("~/")?c.default.join(b.default.homedir(),a.slice(2)):a}function e(a){let b,c=a.match(/^git@([^:]+):(.+)$/);if(c)return{host:c[1],pathSegments:f(c[2]).split("/").filter(Boolean)};try{b=new URL(a)}catch{return null}return{host:b.hostname,pathSegments:f(decodeURIComponent(b.pathname)).split("/").filter(Boolean)}}function f(a){return a.replace(/\.git\/?$/,"")}a.s(["expandHome",0,d,"gitUrlToLocalPath",0,function(a){let b=a.trim();if(!b)return"";try{let a=e(b);if(!a)return"";let{host:f,pathSegments:g}=a;if("code.iflytek.com"===f){let a,b;return d((a=[...g],"osc"===a[0]&&"_source"===a[1]&&(a=a.slice(2)),((b=a.indexOf("-"))>0&&(a=a.slice(0,b)),0===a.length)?"":`~/company/${a.join("/")}`))}if("github.com"===f){var c;let a,b;return d((a=(c=g)[0],b=c[1],a&&b?`${"jp-liu"===a?"~/project/i":"~/project/f"}/${b}`:""))}let h=g[g.length-1];return h?d(`~/project/f/${h}`):""}catch{return""}},"matchGitPathRule",0,function(a,b){if(!b.length)return"";let c=a.trim();if(!c)return"";let f=e(c);if(!f)return"";let{host:g,pathSegments:h}=f,i=h[0]??"",j=h[h.length-1]??"",k=[...b].sort((a,b)=>{let c=+("*"===a.ownerMatch),d=+("*"===b.ownerMatch);return c!==d?c-d:a.priority-b.priority}),l=h.join("/");for(let a of k){if(a.host!==g||"*"!==a.ownerMatch&&a.ownerMatch!==i)continue;let b=a.localPathTemplate;if(b.includes("{path}"))return d(b.replace("{path}",l).replace("{owner}",i).replace("{repo}",j).replace(/\/+$/,""));let c=b.replace("{owner}",i).replace("{repo}","").replace(/\/+$/,"");return d(`${c}/${j}`)}return""}])},244256,742978,292380,a=>{"use strict";var b=a.i(815429),c=a.i(924868),d=a.i(912714),e=a.i(814747),f=a.i(761469),g=a.i(188139),h=a.i(496877),i=a.i(989927),j=a.i(902157),k=a.i(750227);function l(a,b){let c=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return null}}(a.files["package.json"]);return!!c&&b in{...c.dependencies,...c.devDependencies}}let m=[{id:"next",name:"Next.js",icon:"simple-icons:nextdotjs",detect:a=>l(a,"next"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Ready in \d+/i,urlExtractRegex:/(https?:\/\/[^\s]+)/,docUrl:"https://nextjs.org/docs"},{id:"nuxt",name:"Nuxt",icon:"simple-icons:nuxtdotjs",detect:a=>l(a,"nuxt"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Nuxt .* ready in/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"uniapp",name:"uni-app",icon:"simple-icons:vuedotjs",detect:a=>l(a,"@dcloudio/uni-app"),command:"pnpm dev:h5",port:9e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in|App running at|Network:/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://uniapp.dcloud.net.cn/"},{id:"vue-cli",name:"Vue (CLI)",icon:"simple-icons:vuedotjs",detect:a=>l(a,"@vue/cli-service"),command:"pnpm serve",port:8080,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/App running at|DONE\s+Compiled successfully/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://cli.vuejs.org/"},{id:"cra",name:"Create React App",icon:"simple-icons:react",detect:a=>l(a,"react-scripts"),command:"pnpm start",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|webpack compiled/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://create-react-app.dev/"},{id:"vite",name:"Vite",icon:"simple-icons:vite",detect:a=>l(a,"vite"),command:"pnpm dev",port:5173,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in \d+\s*ms/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/},{id:"angular",name:"Angular",icon:"simple-icons:angular",detect:a=>l(a,"@angular/core"),command:"pnpm start",port:4200,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|Application bundle generation complete/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"spring-boot-maven",name:"Spring Boot (Maven)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["pom.xml"];return!!(b&&/spring-boot-starter/.test(b))},command:"./mvnw spring-boot:run",port:8080,installCommand:"./mvnw dependency:resolve",installMarker:["target"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"spring-boot-gradle",name:"Spring Boot (Gradle)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["build.gradle"]??a.files["build.gradle.kts"];return!!(b&&/spring-boot/.test(b))},command:"./gradlew bootRun",port:8080,installCommand:"./gradlew --refresh-dependencies",installMarker:[".gradle"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"django",name:"Django",icon:"simple-icons:django",detect:a=>null!==a.files["manage.py"]&&void 0!==a.files["manage.py"],command:"python manage.py runserver",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Starting development server at/i,urlExtractRegex:/at\s+(https?:\/\/[^\s]+)/},{id:"fastapi",name:"FastAPI",icon:"simple-icons:fastapi",detect:a=>{let b=a.files["requirements.txt"]??"",c=a.files["pyproject.toml"]??"";return/fastapi/i.test((b??"")+(c??""))},command:"uvicorn main:app --reload",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Application startup complete|Uvicorn running on/i,urlExtractRegex:/running on\s+(https?:\/\/[^\s]+)/},{id:"flask",name:"Flask",icon:"simple-icons:flask",detect:a=>{let b=a.files["requirements.txt"]??"";return/^flask/im.test(b??"")},command:"flask --app app run",port:5e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Running on\s+http/i,urlExtractRegex:/Running on\s+(https?:\/\/[^\s]+)/},{id:"go-generic",name:"Go",icon:"simple-icons:go",detect:a=>null!==a.files["go.mod"]&&void 0!==a.files["go.mod"],command:"go run .",port:8080,installCommand:"go mod download",installMarker:["go.sum"],readyRegex:null,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"static",name:"Static HTML",icon:"simple-icons:html5",detect:a=>null!==a.files["index.html"]&&void 0!==a.files["index.html"]&&!a.files["package.json"]&&!a.files["pom.xml"],command:"npx serve -l {port} .",port:3e3,installCommand:null,installMarker:null,readyRegex:/Accepting connections at/i,urlExtractRegex:/(https?:\/\/[^\s]+)/}];a.s(["PRESETS",0,m],742978);let n=["package.json","pom.xml","build.gradle","build.gradle.kts","manage.py","requirements.txt","pyproject.toml","go.mod","index.html"];async function o(a){return Object.fromEntries(await Promise.all(n.map(async b=>{try{let c=await (0,d.readFile)((0,k.join)(a,b),"utf-8");return[b,c]}catch{return[b,null]}})))}async function p(a){return{files:await o(a),hasDir:()=>!1}}async function q(a){try{await (0,d.access)(a,j.constants.R_OK)}catch{return null}let b=await p(a);for(let a of m)try{if(a.detect(b))return a}catch{}return null}async function r(){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function s(a){return f.db.workspace.findUnique({where:{id:a},include:{projects:{include:{tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}]},repositories:!0}}}})}async function t(a){let b=h.createWorkspaceSchema.parse(a),c=await f.db.workspace.create({data:b});return(0,g.revalidatePath)("/workspaces"),c}async function u(a,b){let c=h.updateWorkspaceSchema.parse(b),d=await f.db.workspace.update({where:{id:a},data:c});return(0,g.revalidatePath)("/workspaces"),d}async function v(a){let b=h.reorderWorkspacesSchema.parse(a);if(new Set(b).size!==b.length)throw Error("Duplicate workspace ids in reorder request");let c=new Set((await f.db.workspace.findMany({select:{id:!0}})).map(a=>a.id));for(let a of b)if(!c.has(a))throw Error("Unknown workspace id in reorder request");if(b.length!==c.size)throw Error("Reorder request must include every workspace");await f.db.$transaction(b.map((a,b)=>f.db.workspace.update({where:{id:a},data:{order:b}}))),(0,g.revalidatePath)("/workspaces")}async function w(a){if(await f.db.workspace.count()<=1)throw Error("Cannot delete the last workspace");await f.db.workspace.delete({where:{id:a}}),(0,g.revalidatePath)("/workspaces")}async function x(b){let j=h.createProjectSchema.parse(b),k=j.localPath?(0,i.expandHome)(j.localPath):void 0;if(k&&!j.gitUrl&&e.default.isAbsolute(k))try{await (0,c.mkdir)(k,{recursive:!0})}catch(a){throw Error(`无法创建项目目录 ${k}: ${a.message}`)}let l=await f.db.project.create({data:{name:j.name,alias:j.alias,description:j.description,type:j.gitUrl?"GIT":"NORMAL",gitUrl:j.gitUrl||void 0,localPath:k,projectType:j.projectType,previewCommand:j.previewCommand,workspaceId:j.workspaceId}});try{let{ensureTowerTask:b}=await a.A(76052);await b(l.id,j.name)}catch(a){console.warn("Failed to auto-create Tower task",a)}if(k)try{if((await (0,d.readdir)(k).catch(()=>[])).length>0){let a=await q(k);a&&await f.db.project.update({where:{id:l.id},data:{previewPreset:a.id}})}}catch{}return(0,g.revalidatePath)("/workspaces"),l}async function y(a,b){let c={...h.updateProjectSchema.parse(b)};c.localPath&&(c.localPath=(0,i.expandHome)(c.localPath));let e=await f.db.project.update({where:{id:a},data:c});if(void 0!==b.localPath){let c=b.localPath?(0,i.expandHome)(b.localPath):null;if(c)try{if((await (0,d.readdir)(c).catch(()=>[])).length>0){let b=await q(c);await f.db.project.update({where:{id:a},data:{previewPreset:b?.id??null}})}}catch{}}return(0,g.revalidatePath)("/workspaces"),e}async function z(b){let c=await f.db.task.findMany({where:{projectId:b},include:{project:{select:{localPath:!0}}}}),{destroySession:d}=await a.A(98813),{removeWorktree:e}=await a.A(507502);for(let a of c){try{d(a.id)}catch{}if(await f.db.taskExecution.updateMany({where:{taskId:a.id,status:{in:["PENDING","RUNNING","PAUSED"]}},data:{status:"FAILED",endedAt:new Date}}),a.project?.localPath)try{await e(a.project.localPath,a.id)}catch{}["DONE","CANCELLED"].includes(a.status)||await f.db.task.update({where:{id:a.id},data:{status:"CANCELLED"}})}await f.db.project.delete({where:{id:b}}),(0,g.revalidatePath)("/workspaces")}async function A(a){return f.db.project.findFirst({where:{localPath:a},include:{workspace:!0}})}async function B(a=3){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0,tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}},select:{id:!0,title:!0,status:!0,priority:!0,executions:{where:{sessionId:{not:null}},select:{sessionId:!0},orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"},take:a},_count:{select:{tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}}}}}},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function C(){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0,tasks:{where:{OR:[{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]}},{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}]},select:{id:!0,title:!0,status:!0,priority:!0,labels:{where:{label:{name:"Tower",isBuiltin:!0}},select:{labelId:!0}},executions:{where:{sessionId:{not:null}},select:{sessionId:!0},orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"}},_count:{select:{tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}}}}}},orderBy:{createdAt:"asc"}}},orderBy:[{order:"asc"},{updatedAt:"desc"}]})}async function D(a=10){return f.db.project.findMany({where:{localPath:{not:null}},select:{id:!0,name:!0,alias:!0,localPath:!0,workspaceId:!0,type:!0,updatedAt:!0},orderBy:{updatedAt:"desc"},take:a})}async function E(b){let c=await f.db.project.findUnique({where:{id:b},select:{id:!0,name:!0}});if(!c)throw Error("Project not found");let{ensureTowerTask:d}=await a.A(76052);return d(c.id,c.name)}a.s(["detectPreset",0,q],292380),(0,a.i(630048).ensureServerEntryExports)([r,s,t,u,v,w,x,y,z,A,B,C,D,E]),(0,b.registerServerReference)(r,"0069b845452752e9c446565ecc887751ceb88f8302",null),(0,b.registerServerReference)(s,"401472f5ccde34a5097af17d34e7c4b762b7f06897",null),(0,b.registerServerReference)(t,"4036232b529af0e5d065629d1878dc1a6e82f9ab45",null),(0,b.registerServerReference)(u,"60bc9436cec7b2f26cf49b181625cda9710fd3e4cc",null),(0,b.registerServerReference)(v,"40da1ea17360e58bedf2e6bf6d1f53246b673da623",null),(0,b.registerServerReference)(w,"404f73addc943bb8455a63e7ceecb59ca89b3e445c",null),(0,b.registerServerReference)(x,"40b03ac97723fe879d9efe21b71e56c5a984151d22",null),(0,b.registerServerReference)(y,"60806208d6a0c1cf587a38272b9d04a5dc6fa482a9",null),(0,b.registerServerReference)(z,"4085404f2d1faa5e8fdd79c16d85def519c2fa908b",null),(0,b.registerServerReference)(A,"40f07f15c4e15502583cc6816b1c3602b884a639d7",null),(0,b.registerServerReference)(B,"40a5c16cb6d57f99e1aa8a84f5700b65bed226f706",null),(0,b.registerServerReference)(C,"006389a16e7883de77d87812fd40e182aee5a45e3f",null),(0,b.registerServerReference)(D,"40aa00cb1b7401bf7165ef056e99d7df17164ea888",null),(0,b.registerServerReference)(E,"400cf53948723e0d18f6efd6d898586f3ff0447b6d",null),a.s(["createProject",0,x,"createWorkspace",0,t,"deleteProject",0,z,"deleteWorkspace",0,w,"getOrCreateTowerTaskId",0,E,"getProjectByLocalPath",0,A,"getRecentLocalProjects",0,D,"getWorkspaceById",0,s,"getWorkspacesWithActiveTasks",0,C,"getWorkspacesWithProjects",0,r,"getWorkspacesWithRecentTasks",0,B,"reorderWorkspaces",0,v,"updateProject",0,y,"updateWorkspace",0,u],244256)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__090y_.y._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[193695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},123811,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},934670,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},416997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={REDIRECT_ERROR_CODE:function(){return g},isRedirectError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(934670),g="NEXT_REDIRECT";function h(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),h=Number(b.at(-2));return c===g&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(h)&&h in f.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},657327,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(934670),g=a.r(416997),h=a.r(120635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},860207,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},659708,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(860207),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},462553,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(860207).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},378477,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(860207).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},894891,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},807003,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(860207),e=a.r(416997);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},756353,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(54196),e=a.r(894891),f=a.r(375619),g=a.r(807003),h=a.r(856987),i=a.r(174054);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},155152,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(756353).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},82806,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(123811),g=a.r(657327),h=a.r(659708),i=a.r(462553),j=a.r(378477),k=a.r(155152);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},929493,a=>{"use strict";a.i(82806),a.s([])},737769,a=>{a.v("/_next/static/media/apple-icon.16aocl-s-v2qz.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},809361,a=>{"use strict";let b={src:a.i(737769).default,width:180,height:180};a.s(["default",0,b])},110585,a=>{a.v("/_next/static/media/favicon.0y2d6j9cou~8p.ico"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},68611,a=>{"use strict";let b={src:a.i(110585).default,width:48,height:48};a.s(["default",0,b])},234057,a=>{a.v("/_next/static/media/icon1.04ux133882seb.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},926452,a=>{"use strict";let b={src:a.i(234057).default,width:96,height:96};a.s(["default",0,b])},134900,a=>{"use strict";a.s(["BoardPageClient",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call BoardPageClient() from the server but BoardPageClient is 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]/src/app/workspaces/[workspaceId]/board-page-client.tsx <module evaluation>","BoardPageClient")},364104,a=>{"use strict";a.s(["BoardPageClient",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call BoardPageClient() from the server but BoardPageClient is 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]/src/app/workspaces/[workspaceId]/board-page-client.tsx","BoardPageClient")},610492,a=>{"use strict";a.i(134900);var b=a.i(364104);a.n(b)},164392,a=>a.a(async(b,c)=>{try{var d=a.i(203469);a.i(929493);var e=a.i(82806),f=a.i(761469),g=a.i(495370),h=a.i(980999),i=a.i(279697),j=a.i(610492),k=b([h]);async function l({params:a,searchParams:b}){let{workspaceId:c}=await a,{projectId:k,taskId:m}=await b,n=await (0,h.getArchiveDelayDays)(),o=await f.db.workspace.findUnique({where:{id:c},include:{projects:{include:{tasks:{where:(0,i.visibleTaskWhere)(n),orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},version:{select:{id:!0,number:!0,name:!0}},_count:{select:{executions:!0}}}},repositories:!0}}}});o||(0,e.notFound)();let p=await (0,g.getLabelsForWorkspace)(c);if(0===o.projects.length)return(0,d.jsx)("div",{className:"flex h-full items-center justify-center text-gray-500",children:(0,d.jsx)("p",{children:"该工作空间没有项目,请点击顶部「新建项目」创建"})});let q=k?o.projects.find(a=>a.id===k)??o.projects[0]:o.projects[0],r=q.tasks;return(0,d.jsx)(j.BoardPageClient,{workspaceId:c,projectId:q.id,project:{id:q.id,name:q.name,alias:q.alias,description:q.description,type:q.type,gitUrl:q.gitUrl,localPath:q.localPath},projects:o.projects.map(a=>({id:a.id,name:a.name,alias:a.alias,totalTasks:a.tasks.length,runningTasks:a.tasks.filter(a=>"IN_PROGRESS"===a.status).length})),initialTasks:r,labels:p.map(a=>({id:a.id,name:a.name,color:a.color,isBuiltin:a.isBuiltin})),openTaskId:m})}[h]=k.then?(await k)():k,a.s(["default",0,l]),c()}catch(a){c(a)}},!1),350060,a=>{a.n(a.i(164392))}];
1
+ module.exports=[193695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},123811,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},934670,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},416997,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={REDIRECT_ERROR_CODE:function(){return g},isRedirectError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(934670),g="NEXT_REDIRECT";function h(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),h=Number(b.at(-2));return c===g&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(h)&&h in f.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},657327,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(934670),g=a.r(416997),h=a.r(120635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},860207,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},659708,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(860207),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},462553,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(860207).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},378477,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(860207).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},894891,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},807003,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(860207),e=a.r(416997);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},756353,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(54196),e=a.r(894891),f=a.r(375619),g=a.r(807003),h=a.r(856987),i=a.r(174054);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},155152,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(756353).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},82806,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(123811),g=a.r(657327),h=a.r(659708),i=a.r(462553),j=a.r(378477),k=a.r(155152);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},929493,a=>{"use strict";a.i(82806),a.s([])},737769,a=>{a.v("/_next/static/media/apple-icon.16aocl-s-v2qz.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},809361,a=>{"use strict";let b={src:a.i(737769).default,width:180,height:180};a.s(["default",0,b])},110585,a=>{a.v("/_next/static/media/favicon.0y2d6j9cou~8p.ico"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},68611,a=>{"use strict";let b={src:a.i(110585).default,width:48,height:48};a.s(["default",0,b])},234057,a=>{a.v("/_next/static/media/icon1.04ux133882seb.png"+(globalThis.NEXT_CLIENT_ASSET_SUFFIX||""))},926452,a=>{"use strict";let b={src:a.i(234057).default,width:96,height:96};a.s(["default",0,b])},134900,a=>{"use strict";a.s(["BoardPageClient",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call BoardPageClient() from the server but BoardPageClient is 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]/src/app/workspaces/[workspaceId]/board-page-client.tsx <module evaluation>","BoardPageClient")},364104,a=>{"use strict";a.s(["BoardPageClient",()=>b]);let b=(0,a.i(797225).registerClientReference)(function(){throw Error("Attempted to call BoardPageClient() from the server but BoardPageClient is 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]/src/app/workspaces/[workspaceId]/board-page-client.tsx","BoardPageClient")},610492,a=>{"use strict";a.i(134900);var b=a.i(364104);a.n(b)},164392,a=>{"use strict";var b=a.i(203469);a.i(929493);var c=a.i(82806),d=a.i(761469),e=a.i(495370),f=a.i(980999),g=a.i(279697),h=a.i(610492);async function i({params:a,searchParams:j}){let{workspaceId:k}=await a,{projectId:l,taskId:m}=await j,n=await (0,f.getArchiveDelayDays)(),o=await d.db.workspace.findUnique({where:{id:k},include:{projects:{include:{tasks:{where:(0,g.visibleTaskWhere)(n),orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},version:{select:{id:!0,number:!0,name:!0}},_count:{select:{executions:!0}}}},repositories:!0}}}});o||(0,c.notFound)();let p=await (0,e.getLabelsForWorkspace)(k);if(0===o.projects.length)return(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-gray-500",children:(0,b.jsx)("p",{children:"该工作空间没有项目,请点击顶部「新建项目」创建"})});let q=l?o.projects.find(a=>a.id===l)??o.projects[0]:o.projects[0],r=q.tasks;return(0,b.jsx)(h.BoardPageClient,{workspaceId:k,projectId:q.id,project:{id:q.id,name:q.name,alias:q.alias,description:q.description,type:q.type,gitUrl:q.gitUrl,localPath:q.localPath,groupId:q.groupId},projects:o.projects.map(a=>({id:a.id,name:a.name,alias:a.alias,totalTasks:a.tasks.length,runningTasks:a.tasks.filter(a=>"IN_PROGRESS"===a.status).length})),initialTasks:r,labels:p.map(a=>({id:a.id,name:a.name,color:a.color,isBuiltin:a.isBuiltin})),openTaskId:m})}a.s(["default",0,i])},350060,a=>{a.n(a.i(164392))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0b.ej5q._.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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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])},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)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0ti8vng._.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__0b6fbjv._.js.map
@@ -0,0 +1,43 @@
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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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)},103071,a=>{"use strict";a.s(["SESSION_INSIGHT_CATEGORY",0,"经验洞见","TASK_OVERVIEW_CATEGORY",0,"任务笔记","TOWER_LABEL_COLOR",0,"#8b5cf6","TOWER_LABEL_NAME",0,"Tower"])},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])},626564,a=>{"use strict";var b=a.i(233405);a.s(["checkConflicts",0,function(a,c,d){try{return(0,b.execFileSync)("git",["merge-tree","--write-tree",c,d],{cwd:a,encoding:"utf-8",timeout:1e4,stdio:"pipe"}),{hasConflicts:!1,conflictFiles:[]}}catch(a){return{hasConflicts:!0,conflictFiles:(a instanceof Error&&"stdout"in a?String(a.stdout??""):"").split("\n").filter(a=>a.includes("CONFLICT")).map(a=>{let b=a.match(/CONFLICT.*?:\s*(.+)$/);return b?b[1].trim():a.trim()}).filter(Boolean)}}},"parseDiffOutput",0,function(a,b){let c=[];for(let b of a.split("\n")){let a=b.trim();if(!a)continue;let d=a.split(" ");if(d.length<3)continue;let[e,f,...g]=d,h=g.join(" ");"-"===e&&"-"===f?c.push({filename:h,added:0,removed:0,isBinary:!0}):c.push({filename:h,added:parseInt(e,10)||0,removed:parseInt(f,10)||0,isBinary:!1})}let d=/^diff --git a\/(.+) b\/(.+)$/,e=new Map;if(b.trim()){let a=b.length>512e3;for(let c of b.split(/(?=^diff --git )/m)){if(!c.trim())continue;let b=c.split("\n")[0],f=d.exec(b);if(!f)continue;let g=f[2],h=c;if(a){let a=c.split("\n");a.length>200&&(h=a.slice(0,200).join("\n")+"\n... (truncated)")}e.set(g,h)}}let f=c.map(a=>({filename:a.filename,added:a.added,removed:a.removed,isBinary:a.isBinary,patch:e.get(a.filename)??""})),g=f.reduce((a,b)=>a+b.added,0),h=f.reduce((a,b)=>a+b.removed,0);return{files:f,totalAdded:g,totalRemoved:h}}])},941750,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(761469),e=a.i(835032),f=a.i(897667);async function g(a){let e=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!e)return{kind:"error",status:404,message:"Task not found"};if(!e.project?.localPath)return{kind:"error",status:400,message:"Project has no local path"};let f=e.baseBranch||"main",g=e.project.localPath,h=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"}});if(!h)return{kind:"empty"};let{forkCommit:i,mergeCommit:j,branchTipCommit:k,worktreeBranch:l,worktreePath:m}=h;if(j&&i){let a=k||j;return{kind:"ok",data:{diffCwd:g,diffTarget:`${i}..${a}`,baseRef:i,endRef:a,worktreePath:null}}}if(i&&m&&(0,c.existsSync)(m))return{kind:"ok",data:{diffCwd:m,diffTarget:i,baseRef:i,endRef:null,worktreePath:m}};if(i&&!m)return{kind:"ok",data:{diffCwd:g,diffTarget:i,baseRef:i,endRef:null,worktreePath:null}};if(l)try{let a=(0,b.execFileSync)("git",["merge-base",f,l],{cwd:g,encoding:"utf-8",timeout:5e3}).trim(),d=m&&(0,c.existsSync)(m)?m:g;return{kind:"ok",data:{diffCwd:d,diffTarget:a,baseRef:a,endRef:null,worktreePath:m&&(0,c.existsSync)(m)?m:null}}}catch{return{kind:"branch-deleted"}}return{kind:"empty"}}var h=a.i(626564),i=a.i(103071);function j(a,c,d=1048576){try{return(0,b.execFileSync)("git",a,{cwd:c,encoding:"utf-8",timeout:3e4,maxBuffer:d,stdio:["pipe","pipe","pipe"]}).trim()}catch{return null}}async function k(a){let b=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!b||!b.project)return null;let e=b.project.localPath??null,f=[],i=null,k=0,l=null,m=e||process.cwd();if(e){let b=await g(a);if("ok"===b.kind){let{diffCwd:a,diffTarget:c}=b.data;m=a;let d=c.includes("..")?c:`${c}..HEAD`,e=j(["diff","--numstat",c],a,0x4000000);e&&(f=(0,h.parseDiffOutput)(e,"").files),i=j(["log","--oneline",d],a)||null;let g=j(["rev-list","--count",d],a);k=g&&parseInt(g,10)||0;let n=j(["diff",c],a,0x4000000);n&&(l=n.length>12288?n.slice(0,12288)+"\n...(diff truncated)":n)}}if(0===f.length&&0===k){let b=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"},select:{gitLog:!0,worktreePath:!0}});b?.gitLog&&(i=b.gitLog,k=b.gitLog.split("\n").filter(Boolean).length),b?.worktreePath&&(0,c.existsSync)(b.worktreePath)&&(m=b.worktreePath)}if(0===f.length&&0===k)return null;let n=(await d.db.projectAsset.findMany({where:{taskId:a},orderBy:{createdAt:"asc"},select:{filename:!0,description:!0}})).map(a=>({filename:a.filename,description:a.description}));return{taskId:a,taskTitle:b.title,projectId:b.projectId,projectName:b.project.name,files:f,commitLog:i,commitCount:k,diffText:l,assets:n,cwd:m}}async function l(a){let b=a.files.slice(0,60).map(a=>a.isBinary?`${a.filename} (binary)`:`${a.filename} (+${a.added}/-${a.removed})`).join("\n")||"(无文件清单)",d=`你是资深工程师。下面是一个刚完成的开发任务的代码改动信息,请用简洁中文写一段「改动摘要」:说明这次改动做了什么、解决了什么问题、主要涉及哪些模块或逻辑。要求 3-6 句、纯文本,不要 markdown 标题,不要逐条罗列文件(文件清单会另外展示)。
29
+
30
+ 任务标题:${a.taskTitle}
31
+
32
+ 提交记录:
33
+ ${a.commitLog??"(无提交记录)"}
34
+
35
+ 变更文件(共 ${a.files.length} 个):
36
+ ${b}
37
+
38
+ diff(可能已截断):
39
+ \`\`\`diff
40
+ ${a.diffText??"(无 diff)"}
41
+ \`\`\``,e=(0,c.existsSync)(a.cwd)?a.cwd:process.cwd(),g=await (0,f.aiQuery)(d,e,{maxTurns:1});if(g){let a=g.replace(/^[#*\->"'\s]+/,"").trim();if(a)return a}var h=a.commitLog;if(!h)return null;let i=h.split("\n").filter(Boolean);if(0===i.length)return null;let j=i[0].replace(/^[a-f0-9]+\s+/,"");return 1===i.length?j:`${i.length} 个提交:${j}`}async function m(a,b={}){let c=b.kind??"done",f=null;try{f=await k(a)}catch(a){console.error("[captureTaskOverview] Failed to gather change data:",a);return}if(!f)return void console.error(`[captureTaskOverview] No changes for task=${a.slice(0,8)} — skip`);let g=f;(async()=>{try{let b=await l(g),f=new Date().toISOString(),h=function(a,b,c,d="done"){let e=[];if(e.push("cancelled"===d?"> 本笔记由任务取消时自动生成,记录已产生的改动,作为下次重启该任务的参考经验。":"> 本笔记由任务完成时自动生成,记录本次任务的改动概览,便于后续复盘与排查。"),e.push(""),e.push("## 改动摘要"),e.push(b??"(未能生成改动摘要)"),e.push(""),e.push("## 文件清单"),a.files.length>0){let b=a.files.slice(0,100);for(let a of b)e.push(a.isBinary?`- \`${a.filename}\`(二进制)`:`- \`${a.filename}\` (+${a.added} / -${a.removed})`);a.files.length>b.length&&e.push(`- …其余 ${a.files.length-b.length} 个文件`),e.push(""),e.push(`共 ${a.files.length} 个文件、${a.commitCount} 个提交。`)}else e.push(`(未能获取精确文件清单,本次约 ${a.commitCount} 个提交。)`);if(e.push(""),e.push("## 相关附件与参考资料"),a.assets.length>0)for(let b of a.assets)e.push(b.description?`- ${b.filename} — ${b.description}`:`- ${b.filename}`);else e.push("(无)");return e.push(""),e.push("---"),e.push(`> 关联任务:${a.taskTitle} (\`${a.taskId}\`)`),e.push(`> 项目:${a.projectName}`),e.push(`> 生成时间:${c}`),e.join("\n")}(g,b,f,c),j=function(a,b="done"){return`${"cancelled"===b?"任务概览(已取消):":"任务概览:"}${a}`.slice(0,200)}(g.taskTitle,c),k=await d.db.projectNote.create({data:{title:j,content:h,category:i.TASK_OVERVIEW_CATEGORY,projectId:g.projectId,taskId:g.taskId}});await (0,e.syncNoteToFts)(d.db,{id:k.id,title:k.title,content:k.content}),console.error(`[captureTaskOverview] Note created: ${k.id} for task=${a.slice(0,8)}`)}catch(a){console.error("[captureTaskOverview] Failed to create overview note:",a)}})()}a.s(["captureTaskOverview",0,m],941750)},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)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0ti8vng._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
42
+
43
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0b6hugs._.js.map
@@ -0,0 +1,43 @@
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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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)},103071,a=>{"use strict";a.s(["SESSION_INSIGHT_CATEGORY",0,"经验洞见","TASK_OVERVIEW_CATEGORY",0,"任务笔记","TOWER_LABEL_COLOR",0,"#8b5cf6","TOWER_LABEL_NAME",0,"Tower"])},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])},626564,a=>{"use strict";var b=a.i(233405);a.s(["checkConflicts",0,function(a,c,d){try{return(0,b.execFileSync)("git",["merge-tree","--write-tree",c,d],{cwd:a,encoding:"utf-8",timeout:1e4,stdio:"pipe"}),{hasConflicts:!1,conflictFiles:[]}}catch(a){return{hasConflicts:!0,conflictFiles:(a instanceof Error&&"stdout"in a?String(a.stdout??""):"").split("\n").filter(a=>a.includes("CONFLICT")).map(a=>{let b=a.match(/CONFLICT.*?:\s*(.+)$/);return b?b[1].trim():a.trim()}).filter(Boolean)}}},"parseDiffOutput",0,function(a,b){let c=[];for(let b of a.split("\n")){let a=b.trim();if(!a)continue;let d=a.split(" ");if(d.length<3)continue;let[e,f,...g]=d,h=g.join(" ");"-"===e&&"-"===f?c.push({filename:h,added:0,removed:0,isBinary:!0}):c.push({filename:h,added:parseInt(e,10)||0,removed:parseInt(f,10)||0,isBinary:!1})}let d=/^diff --git a\/(.+) b\/(.+)$/,e=new Map;if(b.trim()){let a=b.length>512e3;for(let c of b.split(/(?=^diff --git )/m)){if(!c.trim())continue;let b=c.split("\n")[0],f=d.exec(b);if(!f)continue;let g=f[2],h=c;if(a){let a=c.split("\n");a.length>200&&(h=a.slice(0,200).join("\n")+"\n... (truncated)")}e.set(g,h)}}let f=c.map(a=>({filename:a.filename,added:a.added,removed:a.removed,isBinary:a.isBinary,patch:e.get(a.filename)??""})),g=f.reduce((a,b)=>a+b.added,0),h=f.reduce((a,b)=>a+b.removed,0);return{files:f,totalAdded:g,totalRemoved:h}}])},941750,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(761469),e=a.i(835032),f=a.i(897667);async function g(a){let e=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!e)return{kind:"error",status:404,message:"Task not found"};if(!e.project?.localPath)return{kind:"error",status:400,message:"Project has no local path"};let f=e.baseBranch||"main",g=e.project.localPath,h=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"}});if(!h)return{kind:"empty"};let{forkCommit:i,mergeCommit:j,branchTipCommit:k,worktreeBranch:l,worktreePath:m}=h;if(j&&i){let a=k||j;return{kind:"ok",data:{diffCwd:g,diffTarget:`${i}..${a}`,baseRef:i,endRef:a,worktreePath:null}}}if(i&&m&&(0,c.existsSync)(m))return{kind:"ok",data:{diffCwd:m,diffTarget:i,baseRef:i,endRef:null,worktreePath:m}};if(i&&!m)return{kind:"ok",data:{diffCwd:g,diffTarget:i,baseRef:i,endRef:null,worktreePath:null}};if(l)try{let a=(0,b.execFileSync)("git",["merge-base",f,l],{cwd:g,encoding:"utf-8",timeout:5e3}).trim(),d=m&&(0,c.existsSync)(m)?m:g;return{kind:"ok",data:{diffCwd:d,diffTarget:a,baseRef:a,endRef:null,worktreePath:m&&(0,c.existsSync)(m)?m:null}}}catch{return{kind:"branch-deleted"}}return{kind:"empty"}}var h=a.i(626564),i=a.i(103071);function j(a,c,d=1048576){try{return(0,b.execFileSync)("git",a,{cwd:c,encoding:"utf-8",timeout:3e4,maxBuffer:d,stdio:["pipe","pipe","pipe"]}).trim()}catch{return null}}async function k(a){let b=await d.db.task.findUnique({where:{id:a},include:{project:!0}});if(!b||!b.project)return null;let e=b.project.localPath??null,f=[],i=null,k=0,l=null,m=e||process.cwd();if(e){let b=await g(a);if("ok"===b.kind){let{diffCwd:a,diffTarget:c}=b.data;m=a;let d=c.includes("..")?c:`${c}..HEAD`,e=j(["diff","--numstat",c],a,0x4000000);e&&(f=(0,h.parseDiffOutput)(e,"").files),i=j(["log","--oneline",d],a)||null;let g=j(["rev-list","--count",d],a);k=g&&parseInt(g,10)||0;let n=j(["diff",c],a,0x4000000);n&&(l=n.length>12288?n.slice(0,12288)+"\n...(diff truncated)":n)}}if(0===f.length&&0===k){let b=await d.db.taskExecution.findFirst({where:{taskId:a},orderBy:{createdAt:"desc"},select:{gitLog:!0,worktreePath:!0}});b?.gitLog&&(i=b.gitLog,k=b.gitLog.split("\n").filter(Boolean).length),b?.worktreePath&&(0,c.existsSync)(b.worktreePath)&&(m=b.worktreePath)}if(0===f.length&&0===k)return null;let n=(await d.db.projectAsset.findMany({where:{taskId:a},orderBy:{createdAt:"asc"},select:{filename:!0,description:!0}})).map(a=>({filename:a.filename,description:a.description}));return{taskId:a,taskTitle:b.title,projectId:b.projectId,projectName:b.project.name,files:f,commitLog:i,commitCount:k,diffText:l,assets:n,cwd:m}}async function l(a){let b=a.files.slice(0,60).map(a=>a.isBinary?`${a.filename} (binary)`:`${a.filename} (+${a.added}/-${a.removed})`).join("\n")||"(无文件清单)",d=`你是资深工程师。下面是一个刚完成的开发任务的代码改动信息,请用简洁中文写一段「改动摘要」:说明这次改动做了什么、解决了什么问题、主要涉及哪些模块或逻辑。要求 3-6 句、纯文本,不要 markdown 标题,不要逐条罗列文件(文件清单会另外展示)。
29
+
30
+ 任务标题:${a.taskTitle}
31
+
32
+ 提交记录:
33
+ ${a.commitLog??"(无提交记录)"}
34
+
35
+ 变更文件(共 ${a.files.length} 个):
36
+ ${b}
37
+
38
+ diff(可能已截断):
39
+ \`\`\`diff
40
+ ${a.diffText??"(无 diff)"}
41
+ \`\`\``,e=(0,c.existsSync)(a.cwd)?a.cwd:process.cwd(),g=await (0,f.aiQuery)(d,e,{maxTurns:1});if(g){let a=g.replace(/^[#*\->"'\s]+/,"").trim();if(a)return a}var h=a.commitLog;if(!h)return null;let i=h.split("\n").filter(Boolean);if(0===i.length)return null;let j=i[0].replace(/^[a-f0-9]+\s+/,"");return 1===i.length?j:`${i.length} 个提交:${j}`}async function m(a,b={}){let c=b.kind??"done",f=null;try{f=await k(a)}catch(a){console.error("[captureTaskOverview] Failed to gather change data:",a);return}if(!f)return void console.error(`[captureTaskOverview] No changes for task=${a.slice(0,8)} — skip`);let g=f;(async()=>{try{let b=await l(g),f=new Date().toISOString(),h=function(a,b,c,d="done"){let e=[];if(e.push("cancelled"===d?"> 本笔记由任务取消时自动生成,记录已产生的改动,作为下次重启该任务的参考经验。":"> 本笔记由任务完成时自动生成,记录本次任务的改动概览,便于后续复盘与排查。"),e.push(""),e.push("## 改动摘要"),e.push(b??"(未能生成改动摘要)"),e.push(""),e.push("## 文件清单"),a.files.length>0){let b=a.files.slice(0,100);for(let a of b)e.push(a.isBinary?`- \`${a.filename}\`(二进制)`:`- \`${a.filename}\` (+${a.added} / -${a.removed})`);a.files.length>b.length&&e.push(`- …其余 ${a.files.length-b.length} 个文件`),e.push(""),e.push(`共 ${a.files.length} 个文件、${a.commitCount} 个提交。`)}else e.push(`(未能获取精确文件清单,本次约 ${a.commitCount} 个提交。)`);if(e.push(""),e.push("## 相关附件与参考资料"),a.assets.length>0)for(let b of a.assets)e.push(b.description?`- ${b.filename} — ${b.description}`:`- ${b.filename}`);else e.push("(无)");return e.push(""),e.push("---"),e.push(`> 关联任务:${a.taskTitle} (\`${a.taskId}\`)`),e.push(`> 项目:${a.projectName}`),e.push(`> 生成时间:${c}`),e.join("\n")}(g,b,f,c),j=function(a,b="done"){return`${"cancelled"===b?"任务概览(已取消):":"任务概览:"}${a}`.slice(0,200)}(g.taskTitle,c),k=await d.db.projectNote.create({data:{title:j,content:h,category:i.TASK_OVERVIEW_CATEGORY,projectId:g.projectId,taskId:g.taskId}});await (0,e.syncNoteToFts)(d.db,{id:k.id,title:k.title,content:k.content}),console.error(`[captureTaskOverview] Note created: ${k.id} for task=${a.slice(0,8)}`)}catch(a){console.error("[captureTaskOverview] Failed to create overview note:",a)}})()}a.s(["captureTaskOverview",0,m],941750)},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)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0ti8vng._.js","server/chunks/ssr/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0myippv._.js"].map(b=>a.l(b))).then(()=>b(845454)))}];
42
+
43
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0br5e7w._.js.map
@@ -0,0 +1,4 @@
1
+ module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},786304,a=>{"use strict";var b=a.i(475295),c=a.i(213200),d=a.i(142261),e=a.i(368114);let f=(0,d.cva)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});a.s(["Badge",0,function({className:a,variant:d="default",render:g,...h}){var i;return i={defaultTagName:"span",props:(0,b.mergeProps)({className:(0,e.cn)(f({variant:d}),a)},h),render:g,state:{slot:"badge",variant:d}},(0,c.useRenderElement)(i.defaultTagName??"div",i,i)}],786304)},161664,a=>{"use strict";let b=(0,a.i(711796).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",0,b],161664)},816282,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("404c5f6bb80cc0d10b604e5640d83816a765fc59f3",b.callServer,void 0,b.findSourceMapURL,"openInTerminal");a.s(["openInTerminal",0,c])},269280,a=>{"use strict";let b=(0,a.i(711796).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,b],269280)},551578,a=>{"use strict";var b=a.i(728778);let c=(0,a.i(711796).default)("milestone",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M12 3v3",key:"1n5kay"}],["path",{d:"M18.172 6a2 2 0 0 1 1.414.586l2.06 2.06a1.207 1.207 0 0 1 0 1.708l-2.06 2.06a2 2 0 0 1-1.414.586H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z",key:"8gz4t4"}]]);var d=a.i(951192);let e=["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 f(a){return e[function(a){let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)>>>0;return b}(a)%e.length]}let g={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"};a.s(["TaskVersionTag",0,function({number:a,name:d,showName:e=!1,className:f="",title:g}){return(0,b.jsxs)("span",{className:`inline-flex items-center gap-1 rounded-md border border-border bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground ${f}`,title:g??(d?`${a} \xb7 ${d}`:a),children:[(0,b.jsx)(c,{className:"h-2.5 w-2.5 shrink-0"}),(0,b.jsx)("span",{className:"font-mono",children:a}),e&&d?(0,b.jsx)("span",{className:"max-w-[140px] truncate",children:d}):null]})},"VersionStatusBadge",0,function({status:a}){let{t:c}=(0,d.useI18n)();return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${g[a]}`,children:c(`version.status.${a}`)})},"VersionTypeBadge",0,function({name:a}){let{t:c}=(0,d.useI18n)();return a?(0,b.jsx)("span",{className:`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${f(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")})},"typeBadgeColor",0,f],551578)},267540,123089,165614,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("408215e48e1a623e4bbb685a78e3a3ada2ed9a5e8a",b.callServer,void 0,b.findSourceMapURL,"openInFileManager");a.s(["openInFileManager",0,c],267540);let d=(0,b.createServerReference)("40a305711044d42074dc8b719a62360ee159d7fe96",b.callServer,void 0,b.findSourceMapURL,"openInEditor");a.s(["openInEditor",0,d],123089);let e=(0,a.i(711796).default)("circle-play",[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z",key:"kmsa83"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["PlayCircle",0,e],165614)},625892,939859,a=>{"use strict";var b=a.i(711796);let c=(0,b.default)("folder-search",[["path",{d:"M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1",key:"1bw5m7"}],["path",{d:"m21 21-1.9-1.9",key:"1g2n9r"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}]]);a.s(["FolderSearch",0,c],625892);let d=(0,b.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);a.s(["Code",0,d],939859)},264589,a=>{"use strict";let b=(0,a.i(711796).default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);a.s(["Package",0,b],264589)},648512,a=>{"use strict";let b=(0,a.i(711796).default)("terminal",[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]]);a.s(["Terminal",0,b],648512)},509405,a=>{"use strict";let b=(0,a.i(711796).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",0,b],509405)},10390,a=>{"use strict";var b=a.i(421992);a.s(["ChevronRight",()=>b.default])},912868,a=>{"use strict";let b=(0,a.i(711796).default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",0,b],912868)},111699,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("4075ec4df24bd89711034f15cca9eb240df9f3f473",b.callServer,void 0,b.findSourceMapURL,"getConfigValues");a.s(["getConfigValues",0,c])},412783,22761,a=>{"use strict";var b=a.i(728778),c=a.i(368114);a.s(["Label",0,function({className:a,...d}){return(0,b.jsx)("label",{"data-slot":"label",className:(0,c.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",a),...d})}],412783);let d=(0,a.i(711796).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);a.s(["Copy",0,d],22761)},207339,a=>{"use strict";let b=(0,a.i(711796).default)("git-commit-horizontal",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);a.s(["GitCommitHorizontal",0,b],207339)},394869,a=>{"use strict";let b=(0,a.i(711796).default)("git-compare",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M13 6h3a2 2 0 0 1 2 2v7",key:"1yeb86"}],["path",{d:"M11 18H8a2 2 0 0 1-2-2V9",key:"19pyzm"}]]);a.s(["GitCompare",0,b],394869)},945513,(a,b,c)=>{b.exports=a=>{if(!a||"string"!=typeof a||a.match(/^\s+$/))return[];let b=a.split(`
2
+ `);if(0===b.length)return[];let c=[],d=null,e=null,g=0,i=0,j=null,k=a=>{let[b,e]=f(a)??[];d={chunks:[],deletions:0,additions:0,from:b,to:e},c.push(d)},l=()=>{(!d||d.chunks.length)&&k()},m=a=>{if(!e)return;let[b]=e.changes.slice(-1);e.changes.push({type:b.type,[b.type]:!0,ln1:b.ln1,ln2:b.ln2,ln:b.ln,content:a})},n=[[/^diff\s/,k],[/^new file mode (\d+)$/,(a,b)=>{l(),d.new=!0,d.newMode=b[1],d.from="/dev/null"}],[/^deleted file mode (\d+)$/,(a,b)=>{l(),d.deleted=!0,d.oldMode=b[1],d.to="/dev/null"}],[/^old mode (\d+)$/,(a,b)=>{l(),d.oldMode=b[1]}],[/^new mode (\d+)$/,(a,b)=>{l(),d.newMode=b[1]}],[/^index\s[\da-zA-Z]+\.\.[\da-zA-Z]+(\s(\d+))?$/,(a,b)=>{l(),d.index=a.split(" ").slice(1),b[1]&&(d.oldMode=d.newMode=b[1].trim())}],[/^---\s/,a=>{l(),d.from=h(a)}],[/^\+\+\+\s/,a=>{l(),d.to=h(a)}],[/^@@\s+-(\d+),?(\d+)?\s+\+(\d+),?(\d+)?\s@@/,(a,b)=>{d||k(a);let[c,f,h,l]=b.slice(1);g=+c,i=+h,e={content:a,changes:[],oldStart:+c,oldLines:+(f||1),newStart:+h,newLines:+(l||1)},j={oldLines:+(f||1),newLines:+(l||1)},d.chunks.push(e)}],[/^\$/,m]],o=[[/^\$/,m],[/^-/,a=>{e&&(e.changes.push({type:"del",del:!0,ln:g++,content:a}),d.deletions++,j.oldLines--)}],[/^\+/,a=>{e&&(e.changes.push({type:"add",add:!0,ln:i++,content:a}),d.additions++,j.newLines--)}],[/^\s*/,a=>{e?.changes.push({type:"normal",normal:!0,ln1:g++,ln2:i++,content:a}),j.oldLines--,j.newLines--}]],p=a=>{j?(a=>{for(let[b,c]of o){let d=a.match(b);if(d){c(a,d);break}}0===j.oldLines&&0===j.newLines&&(j=null)})(a):(a=>{for(let[b,c]of n){let d=a.match(b);if(d){c(a,d);break}}})(a)};for(let a of b)p(a);return c};let d=/(a|i|w|c|o|1|2)\/.*(?=["']? ["']?(b|i|w|c|o|1|2)\/)|(b|i|w|c|o|1|2)\/.*$/g,e=/^(a|b|i|w|c|o|1|2)\//,f=a=>a?.match(d)?.map(a=>a.replace(e,"").replace(/("|')$/,"")),g=/^\\?['"]|\\?['"]$/g,h=a=>{let b=i(a,"-+").trim();return(b=k(b)).replace(g,"").replace(e,"")},i=(a,b)=>{if(a=m(a),!b&&String.prototype.trimLeft)return a.trimLeft();let c=l(b);return a.replace(RegExp(`^${c}+`),"")},j=/\t.*|\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d(.\d+)?\s(\+|-)\d\d\d\d/,k=a=>{let b=j.exec(a);return b&&(a=a.substring(0,b.index).trim()),a},l=a=>null==a?"\\s":a instanceof RegExp?a.source:`[${m(a).replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1")}]`,m=a=>`${a??""}`},514872,a=>{"use strict";var b=a.i(945513);function c(a){return a.replace(/\r\n/g,"\n")}a.s(["normalizeLF",0,c,"parseUnifiedDiff",0,function(a){return(0,b.default)(c(a))}])},574046,a=>{a.v(b=>Promise.all(["server/chunks/ssr/04y0_streamdown_dist_highlighted-body-OFNGDK62_0dm8t_v.js"].map(b=>a.l(b))).then(()=>b(514138)))},170967,a=>{a.v(b=>Promise.all(["server/chunks/ssr/04y0_streamdown_dist_mermaid-GHXKKRXX_0oxtju0.js"].map(b=>a.l(b))).then(()=>b(729004)))}];
3
+
4
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0bx_h2u._.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","tower-session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","tower-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,g]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let h=this.getHookArray(b,a),i=h.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(i<0)continue;let j=d.join(c,"scripts",g).replace(/\\/g,"/"),k=`node "${j}"`,l=h[i]?.hooks?.[0];l&&l.command!==k&&(l.command=k,b[a]=h,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 f=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:f,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(f),{recursive:!0});let a=await b.promises.lstat(f).catch(()=>null);if(a)if(!(a.isSymbolicLink()||(0,e.isWindows)()&&a.isDirectory()))return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`};else try{let a=await b.promises.readlink(f);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${f} → ${c} (already)`};await b.promises.unlink(f)}catch{if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:f,error:`Refusing to overwrite non-symlink at ${f}`}}let g=(0,e.isWindows)()?"junction":"dir";return await b.promises.symlink(c,f,g),{ok:!0,method:"symlink",detail:`${f} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:f,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(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,e.isWindows)()){let a=(0,e.resolveCommandPathSync)("claude-code");if("claude-code"!==a)return a}return(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)},103071,a=>{"use strict";a.s(["SESSION_INSIGHT_CATEGORY",0,"经验洞见","TASK_OVERVIEW_CATEGORY",0,"任务笔记","TOWER_LABEL_COLOR",0,"#8b5cf6","TOWER_LABEL_NAME",0,"Tower"])},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),f=a.i(103071);function g(a,c){return(0,b.execFileSync)("git",a,{cwd:c,timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function h(a,b){if(b)return b;for(let b of["main","master","develop"])try{return g(["merge-base","HEAD",b],a)}catch{}return null}function i(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 j(a,b,f,k,l,m=null){try{let b;console.error(`[captureExecutionSummary] Starting: exec=${a.slice(0,8)} exit=${f} buffer=${k.length}chars worktree=${l} fork=${m?.slice(0,8)??"none"}`);let j=null,n=null,o=null;if(l&&(0,c.existsSync)(l))try{if(g(["rev-parse","--git-dir"],l),j=function(a,b){try{let c=h(a,b);if(!c)return null;return g(["log","--oneline",`${c}..HEAD`],a)||null}catch{return null}}(l,m),(n=function(a,b){try{let c=h(a,b);if(!c)return null;let d=g(["diff","--stat",`${c}..HEAD`],a);if(!d)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}(d)}catch{return null}}(l,m))&&j){let a=j.split("\n").filter(Boolean).length;n={...n,commits:a}}o=i(j)}catch{}let p=(b=k.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:o??(j?i(j):null),gitLog:j??null,gitStats:n?JSON.stringify(n):null,exitCode:f,terminalLog:p||null}}),p&&l&&(console.error("[captureExecutionSummary] Starting background AI summary..."),(0,e.generateSummaryFromLog)(p,l).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 k(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="",g=null,h=[];for(let a of b.executions)a.terminalLog&&(c+=a.terminalLog+"\n---\n"),a.summary&&h.push(a.summary),!g&&a.worktreePath&&(g=a.worktreePath);if(!(c=c.slice(-8e3)).trim())return;let i=h.join("\n"),j=g||process.cwd();console.error(`[captureTaskDreaming] Starting for task=${a.slice(0,8)}, ${b.executions.length} executions`);let k=await (0,e.generateDreamingInsight)(c,j,i);if(!k||!k.shouldCreateNote)return void console.error("[captureTaskDreaming] No note needed");let l=await d.db.projectNote.create({data:{title:k.noteTitle||k.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")}(k),category:f.SESSION_INSIGHT_CATEGORY,projectId:b.projectId,taskId:a}}),m=b.executions[0].id;await d.db.taskExecution.update({where:{id:m},data:{insightNoteId:l.id}}),console.error(`[captureTaskDreaming] Note created: ${l.id}`)}catch(a){console.error("[captureTaskDreaming] Failed:",a)}}a.s(["captureExecutionSummary",0,j,"captureTaskDreaming",0,k])},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)))},719041,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]__0ti8vng._.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__0dhq_gl._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[980738,(a,b,c)=>{b.exports=a.x("node-pty-c710df912a232c01",()=>require("node-pty-c710df912a232c01"))},42847,a=>{"use strict";var b=a.i(980738),c=a.i(163812);class d{taskId;_pty;killed=!1;disconnectTimer=null;_buffer="";static BUFFER_MAX=51200;_onData;_exitListeners=[];_idleTimer=null;_idleThresholdMs;_onIdle;_idleFired=!1;constructor(a,e,f,g,h,i,j,k,l){this.taskId=a,this._onData=h,this._onIdle=k??null,this._idleThresholdMs=Math.max(l??18e4,18e4);const m={...(0,c.stripClaudeNestingEnv)((0,c.ensurePathInEnv)(process.env)),TERM:"xterm-color",...j};try{this._pty=b.spawn(e,f,{name:"xterm-color",cols:80,rows:24,cwd:g,env:m})}catch(a){throw console.error(`[pty] spawn failed: command="${e}", cwd="${g}", PATH="${m.PATH?.slice(0,200)}"`),a}this._pty.onData(a=>{this._buffer+=a,this._buffer.length>d.BUFFER_MAX&&(this._buffer=this._buffer.slice(this._buffer.length-d.BUFFER_MAX)),this._resetIdleTimer(),this._onData(a)}),this._pty.onExit(({exitCode:a,signal:b})=>{for(let c of(this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),i(a,b),this._exitListeners))c(a)}),this._resetIdleTimer()}_resetIdleTimer(){this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),null===this._onIdle||this.killed||this._idleFired||(this._idleTimer=setTimeout(()=>{this._idleFired=!0,this._onIdle?.()},this._idleThresholdMs))}setDataListener(a){this._onData=a}setExitListener(a){this._exitListeners=[a]}write(a){this.killed||(this._resetIdleTimer(),this._pty.write(a))}resize(a,b){this.killed||this._pty.resize(a,b)}getBuffer(){return this._buffer}get isIdle(){return this._idleFired}get pid(){return this._pty.pid}kill(a){if(!this.killed){this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);try{this._pty.kill(a)}catch{}}}forceKill(){try{this._pty.kill("SIGKILL")}catch{}this.killed=!0}killTree(a=3e3){if(this.killed)return;this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);let b=this._pty.pid;try{process.kill(-b,"SIGTERM")}catch{try{this._pty.kill()}catch{}return}let c=setTimeout(()=>{try{process.kill(-b,"SIGKILL")}catch{}},a);c.unref?.()}}a.s(["PtySession",0,d])},328521,a=>{"use strict";var b=a.i(874533),c=a.i(912714),d=a.i(750227);let e=(0,a.i(319997).getSignalDir)(),f="pid-",g=["claude","claude-code","codex"];function h(a){return(0,d.join)(e,`${f}${a}`)}async function i(a,b){try{await (0,c.mkdir)(e,{recursive:!0,mode:448}),await (0,c.writeFile)(h(a),String(b),{mode:384})}catch{}}async function j(a){try{await (0,c.unlink)(h(a))}catch{}}async function k(){let a;try{a=await (0,c.readdir)(e)}catch{return 0}let h=0;for(let i of a){let a;if(!i.startsWith(f))continue;let j=(0,d.join)(e,i);try{a=parseInt((await (0,c.readFile)(j,"utf-8")).trim(),10)}catch{continue}if((await (0,c.unlink)(j).catch(()=>{}),Number.isInteger(a)&&!(a<=1)&&function(a){try{return process.kill(a,0),!0}catch(a){return a?.code==="EPERM"}}(a)&&"win32"!==process.platform)&&function(a){try{let c=(0,b.execFileSync)("ps",["-p",String(a),"-o","command="],{encoding:"utf-8",timeout:3e3}).trim();if(!c)return!1;return g.some(a=>c.includes(a))}catch{return!1}}(a))try{process.kill(-a,"SIGKILL"),h++}catch{}}return h}a.s(["clearSessionPid",0,j,"reapOrphanedProcesses",0,k,"recordSessionPid",0,i])},962620,a=>{"use strict";var b=a.i(42847),c=a.i(163812),d=a.i(328521);let e=globalThis;e.__ptySessions||(e.__ptySessions=new Map);let f=e.__ptySessions;function g(a){let b=f.get(a);if(b)return f.delete(a),b.disconnectTimer&&(clearTimeout(b.disconnectTimer),b.disconnectTimer=null),b.killTree(),b}function h(a){g(a)&&(0,d.clearSessionPid)(a)}function i(){for(let a of f.keys())h(a)}let j=globalThis;"phase-production-build"===process.env.NEXT_PHASE||j.__ptySignalHandlersRegistered||(j.__ptySignalHandlersRegistered=!0,process.once("SIGTERM",()=>{console.error("[session-store] SIGTERM received — cleaning up PTY sessions"),i()}),process.once("SIGINT",()=>{console.error("[session-store] SIGINT received — cleaning up PTY sessions"),i()})),a.s(["createSession",0,function(a,e,h,i,j,k,l,m,n){g(a);let{command:o,args:p}=(0,c.resolveSpawnTargetSync)(e,h),q=new b.PtySession(a,o,p,i,j,k,l,m,n);return f.set(a,q),(0,d.recordSessionPid)(a,q.pid),q},"destroyAllSessions",0,i,"destroySession",0,h,"getSession",0,function(a){return f.get(a)}])}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0e79g0v._.js.map