tower-studio 0.2.6 → 0.2.8

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 (314) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +43 -43
  13. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  16. package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
  17. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  18. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  19. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  20. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  21. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  22. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/api/adapters/test/route.js +3 -2
  24. package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js +1 -2
  28. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js +3 -2
  30. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/internal/assistant/route.js +1 -2
  32. package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +3 -2
  34. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +2 -3
  36. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js +3 -2
  38. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js +2 -3
  40. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +2 -3
  42. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js +2 -3
  44. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +3 -4
  46. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/index.html +1 -1
  48. package/.next/standalone/.next/server/app/index.rsc +14 -14
  49. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  50. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
  51. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  52. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +9 -9
  53. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  55. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +75 -75
  56. package/.next/standalone/.next/server/app/missions/page.js +5 -5
  57. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  60. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +43 -43
  61. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  64. package/.next/standalone/.next/server/app/onboarding.rsc +16 -16
  65. package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  66. package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  67. package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  68. package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  69. package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  70. package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  71. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
  72. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +43 -43
  73. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  76. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +56 -56
  77. package/.next/standalone/.next/server/app/settings/page.js +3 -3
  78. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/settings.html +1 -1
  81. package/.next/standalone/.next/server/app/settings.rsc +16 -16
  82. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  83. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  84. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  85. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  86. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  87. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  88. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  89. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +100 -100
  90. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  93. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +82 -82
  94. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  97. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +77 -77
  98. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  101. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +72 -72
  102. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +3 -3
  103. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  106. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +43 -43
  107. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
  110. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +82 -82
  111. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
  114. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +86 -86
  115. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +5 -5
  116. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  119. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +61 -61
  120. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0h5yr8p.js +1 -1
  123. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +1 -1
  124. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00mjz~7._.js +3 -0
  125. package/.next/standalone/.next/server/chunks/[root-of-the-server]__028ucbo._.js +4 -0
  126. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03gi3ue._.js +4 -0
  127. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07f7~6u._.js +4 -0
  128. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09p152b._.js +3 -0
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_90467._.js +3 -0
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b-ib~7._.js +3 -0
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c513um._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d~z6xs._.js +4 -0
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e44k3f._.js +20 -0
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h.z9fm._.js +11 -0
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lioghc._.js +3 -0
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mw.9lg._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ogh_qu._.js +20 -0
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0tys9pv._.js +3 -0
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12c9noi._.js +3 -0
  140. package/.next/standalone/.next/server/chunks/{_0trog_r._.js → _0_eodxe._.js} +1 -1
  141. package/.next/standalone/.next/server/chunks/_0_w835g._.js +4 -0
  142. package/.next/standalone/.next/server/chunks/{src_01ztl3b._.js → src_0bkvm8c._.js} +2 -2
  143. package/.next/standalone/.next/server/chunks/src_0weytpz._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/src_lib_0ba0ntr._.js +1 -1
  145. package/.next/standalone/.next/server/chunks/src_lib_ai_0q-~me1._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.ukame._.js +30 -0
  150. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__006_qh0._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01j8ix6._.js +30 -0
  152. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02px.0y._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03ebsif._.js +3 -3
  154. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-yld.d._.js → [root-of-the-server]__08901f9._.js} +2 -2
  155. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08n5qbf._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ca_ueb._.js +30 -0
  157. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dsdplu._.js +30 -0
  158. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l43.5g._.js +1 -1
  159. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0nwue~m._.js → [root-of-the-server]__0miur_1._.js} +2 -2
  160. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n.cuy2._.js +30 -0
  161. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nbj.ml._.js +30 -0
  162. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ojv-d0._.js +3 -0
  163. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pm2~fu._.js +30 -0
  164. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ps55l6._.js +1 -1
  165. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ribsk4._.js +1 -1
  166. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rjue04._.js +30 -0
  167. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0souuv~._.js +3 -0
  168. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tc6uh2._.js +30 -0
  169. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0v2eslh._.js +30 -0
  170. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjg_.n._.js +1 -1
  171. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wlmzzq._.js +30 -0
  172. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wvyks.._.js +1 -1
  173. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zbmoit._.js +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~03tpv._.js +3 -0
  175. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~a-emb._.js +30 -0
  176. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0c4.z1s._.js → [root-of-the-server]__121lss.._.js} +2 -2
  177. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13vdw4w._.js +3 -0
  178. package/.next/standalone/.next/server/chunks/ssr/{_03xwww2._.js → _0.knmg-._.js} +2 -2
  179. package/.next/standalone/.next/server/chunks/ssr/{_08t2xag._.js → _0.oe3b8._.js} +2 -2
  180. package/.next/standalone/.next/server/chunks/ssr/_04b71ua._.js +1 -1
  181. package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/_05unqgy._.js +7 -0
  183. package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/{_0f8jvpw._.js → _0_q~7z7._.js} +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/_0a2m~cj._.js +7 -0
  186. package/.next/standalone/.next/server/chunks/ssr/{_0i2usny._.js → _0c-49y3._.js} +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
  188. package/.next/standalone/.next/server/chunks/ssr/{_0vqyzrr._.js → _0d2cdox._.js} +2 -2
  189. package/.next/standalone/.next/server/chunks/ssr/_0ds6nk2._.js +1 -1
  190. package/.next/standalone/.next/server/chunks/ssr/{_0rfo51k._.js → _0fq4yrr._.js} +2 -2
  191. package/.next/standalone/.next/server/chunks/ssr/_0i4__mf._.js +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/{_054w82_._.js → _0icu6m~._.js} +2 -2
  193. package/.next/standalone/.next/server/chunks/ssr/_0ihq._v._.js +1 -1
  194. package/.next/standalone/.next/server/chunks/ssr/{_00d1y-k._.js → _0kx.c-s._.js} +2 -2
  195. package/.next/standalone/.next/server/chunks/ssr/{_0ah80pn._.js → _0niubv5._.js} +1 -1
  196. package/.next/standalone/.next/server/chunks/ssr/{_0fri5n~._.js → _0pu8x.f._.js} +2 -2
  197. package/.next/standalone/.next/server/chunks/ssr/_0r9w-k8._.js +1 -1
  198. package/.next/standalone/.next/server/chunks/ssr/{_0_gqtgq._.js → _0rbai5c._.js} +1 -1
  199. package/.next/standalone/.next/server/chunks/ssr/_0rbctq7._.js +1 -1
  200. package/.next/standalone/.next/server/chunks/ssr/_0rt8hus._.js +1 -1
  201. package/.next/standalone/.next/server/chunks/ssr/_0vnfnib._.js +7 -0
  202. package/.next/standalone/.next/server/chunks/ssr/{_0_~ftjv._.js → _0xvsyc0._.js} +2 -2
  203. package/.next/standalone/.next/server/chunks/ssr/{_0ep3sg_._.js → _0y-7tle._.js} +1 -1
  204. package/.next/standalone/.next/server/chunks/ssr/{_049.box._.js → _0zgu282._.js} +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/{_086yn8o._.js → _0zszi6-._.js} +1 -1
  206. package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
  207. package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +3 -0
  208. package/.next/standalone/.next/server/chunks/ssr/src_13jha60._.js +1 -1
  209. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
  210. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  211. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  212. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  213. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  214. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  216. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  217. package/.next/standalone/.next/server/chunks/ssr/{src_lib_08n755q._.js → src_lib_07rspg0._.js} +1 -1
  218. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0tb2yya._.js → src_lib_0_8frs_._.js} +1 -1
  219. package/.next/standalone/.next/server/chunks/ssr/{src_lib_123jf_a._.js → src_lib_0fjk3hr._.js} +1 -1
  220. package/.next/standalone/.next/server/chunks/ssr/{src_lib_12ulcxj._.js → src_lib_0g-92s-._.js} +1 -1
  221. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  222. package/.next/standalone/.next/server/pages/404.html +1 -1
  223. package/.next/standalone/.next/server/pages/500.html +1 -1
  224. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/server-reference-manifest.json +307 -307
  226. package/.next/standalone/.next/static/chunks/000k30wpair3e.js +5 -0
  227. package/.next/standalone/.next/static/chunks/005169or2nxlh.js +1 -0
  228. package/.next/standalone/.next/static/chunks/{0mfgulw-d49o9.js → 04uepvk5f~_a-.js} +1 -1
  229. package/.next/standalone/.next/static/chunks/{0nrbltth-7m~e.js → 07vas3ezrfrjg.js} +1 -1
  230. package/.next/standalone/.next/static/chunks/{0fovq74l0wh7c.js → 087l367c1psb6.js} +1 -1
  231. package/.next/standalone/.next/static/chunks/{0ee.~~ae-vl_q.js → 09m-rcwwlggjy.js} +1 -1
  232. package/.next/standalone/.next/static/chunks/{06shpikm5rcmu.js → 0h1-tehkx05kz.js} +1 -1
  233. package/.next/standalone/.next/static/chunks/0hueiuk3kjujl.js +5 -0
  234. package/.next/standalone/.next/static/chunks/0ikej72py2xo3.js +1 -0
  235. package/.next/standalone/.next/static/chunks/0lx08u-wp-gt6.js +2 -0
  236. package/.next/standalone/.next/static/chunks/0mu8uzvw4gvpf.js +1 -0
  237. package/.next/standalone/.next/static/chunks/{0r7jm27~cp-vs.js → 0ow7ynd7g7ptv.js} +1 -1
  238. package/.next/standalone/.next/static/chunks/{0v9ahxdsn0mse.js → 0szduy0e92e5g.js} +1 -1
  239. package/.next/standalone/.next/static/chunks/{0jscst0zjd2az.js → 0szie_5oyakv1.js} +1 -1
  240. package/.next/standalone/.next/static/chunks/{0m2lubto0vt0x.js → 0ur-499l_2jrc.js} +1 -1
  241. package/.next/standalone/.next/static/chunks/{0hxgzql5.szyz.js → 0xs0yzxjkoeas.js} +1 -1
  242. package/.next/standalone/.next/static/chunks/{07i~~ygu~oi26.js → 0ynbql~9oq0av.js} +1 -1
  243. package/.next/standalone/.next/static/chunks/{04-7c5m91nvj1.js → 0~88n47ys3due.js} +1 -1
  244. package/.next/standalone/.next/static/chunks/{186ahmq856rfj.js → 10nil20v3q7~..js} +1 -1
  245. package/.next/standalone/.next/static/chunks/12rh72_2o79jv.js +1 -0
  246. package/.next/standalone/.next/static/chunks/156si6w7d-_ct.js +5 -0
  247. package/.next/standalone/package.json +1 -2
  248. package/dist/mcp-server.cjs +257 -61
  249. package/package.json +1 -2
  250. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.9mj3v._.js +0 -4
  251. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05353yb._.js +0 -4
  252. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09h3i6m._.js +0 -4
  253. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_a8-jq._.js +0 -3
  254. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_mbhor._.js +0 -3
  255. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dsv3wl._.js +0 -4
  256. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jmqy_3._.js +0 -3
  257. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j~qauc._.js +0 -4
  258. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nwxhai._.js +0 -3
  259. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o4z8qp._.js +0 -3
  260. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0p_ii~p._.js +0 -3
  261. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0puw1af._.js +0 -20
  262. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0py_jdb._.js +0 -3
  263. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qie1gs._.js +0 -11
  264. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qz9-me._.js +0 -3
  265. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w2w3x.._.js +0 -20
  266. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.5rcav._.js +0 -30
  267. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05kq890._.js +0 -30
  268. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__079.nog._.js +0 -3
  269. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gaa~xc._.js +0 -30
  270. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gcf4k3._.js +0 -30
  271. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ghfuuv._.js +0 -30
  272. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k3isnk._.js +0 -3
  273. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0q7ho54._.js +0 -30
  274. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qe~p-n._.js +0 -30
  275. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tf4zp_._.js +0 -30
  276. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vh-egg._.js +0 -3
  277. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y.nw7l._.js +0 -30
  278. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11bequ2._.js +0 -30
  279. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11ko84j._.js +0 -30
  280. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12pnl8n._.js +0 -30
  281. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13k4vkg._.js +0 -3
  282. package/.next/standalone/.next/server/chunks/ssr/_0-pqb_c._.js +0 -7
  283. package/.next/standalone/.next/server/chunks/ssr/_05-r00y._.js +0 -7
  284. package/.next/standalone/.next/server/chunks/ssr/_0h_~oum._.js +0 -7
  285. package/.next/standalone/.next/server/chunks/ssr/src_095o8x6._.js +0 -3
  286. package/.next/standalone/.next/static/chunks/0.zipr1bga3lu.js +0 -1
  287. package/.next/standalone/.next/static/chunks/037-verumdykv.js +0 -5
  288. package/.next/standalone/.next/static/chunks/082cedbq4pp.-.js +0 -1
  289. package/.next/standalone/.next/static/chunks/089ktlh~nim1x.js +0 -1
  290. package/.next/standalone/.next/static/chunks/0m~ltp.wfnbf7.js +0 -5
  291. package/.next/standalone/.next/static/chunks/0tk-ju9xhoh68.js +0 -5
  292. package/.next/standalone/.next/static/chunks/0w9x-ap4dcwy..js +0 -1
  293. package/.next/standalone/.next/static/chunks/17cayeebhpt~w.js +0 -2
  294. package/src/mcp/db.ts +0 -11
  295. package/src/mcp/index.ts +0 -15
  296. package/src/mcp/server.ts +0 -52
  297. package/src/mcp/tools/__tests__/label-tools.test.ts +0 -140
  298. package/src/mcp/tools/__tests__/project-tools.test.ts +0 -182
  299. package/src/mcp/tools/__tests__/report-tools.test.ts +0 -212
  300. package/src/mcp/tools/__tests__/task-tools.test.ts +0 -418
  301. package/src/mcp/tools/__tests__/terminal-tools.test.ts +0 -318
  302. package/src/mcp/tools/__tests__/workspace-tools.test.ts +0 -146
  303. package/src/mcp/tools/knowledge-tools.ts +0 -100
  304. package/src/mcp/tools/label-tools.ts +0 -70
  305. package/src/mcp/tools/note-asset-tools.ts +0 -271
  306. package/src/mcp/tools/project-tools.ts +0 -79
  307. package/src/mcp/tools/report-tools.ts +0 -220
  308. package/src/mcp/tools/search-tools.ts +0 -32
  309. package/src/mcp/tools/task-tools.ts +0 -272
  310. package/src/mcp/tools/terminal-tools.ts +0 -154
  311. package/src/mcp/tools/workspace-tools.ts +0 -73
  312. /package/.next/standalone/.next/static/{VGoiH5uRfCRm6SKXNPZoz → 7DBkEq_6oXffs_C5TFLBR}/_buildManifest.js +0 -0
  313. /package/.next/standalone/.next/static/{VGoiH5uRfCRm6SKXNPZoz → 7DBkEq_6oXffs_C5TFLBR}/_clientMiddlewareManifest.js +0 -0
  314. /package/.next/standalone/.next/static/{VGoiH5uRfCRm6SKXNPZoz → 7DBkEq_6oXffs_C5TFLBR}/_ssgManifest.js +0 -0
@@ -26318,9 +26318,35 @@ var init_worktree = __esm({
26318
26318
  });
26319
26319
 
26320
26320
  // src/lib/platform.ts
26321
+ var platform_exports = {};
26322
+ __export2(platform_exports, {
26323
+ detectShells: () => detectShells,
26324
+ detectTerminalApps: () => detectTerminalApps,
26325
+ ensurePathInEnv: () => ensurePathInEnv,
26326
+ isWindows: () => isWindows,
26327
+ normalizePath: () => normalizePath,
26328
+ quoteForCmd: () => quoteForCmd,
26329
+ redactEnvForLogs: () => redactEnvForLogs,
26330
+ resolveCommandPath: () => resolveCommandPath,
26331
+ resolveCommandPathSync: () => resolveCommandPathSync,
26332
+ resolveSpawnTarget: () => resolveSpawnTarget,
26333
+ resolveSpawnTargetSync: () => resolveSpawnTargetSync,
26334
+ stripClaudeNestingEnv: () => stripClaudeNestingEnv,
26335
+ toForwardSlash: () => toForwardSlash
26336
+ });
26321
26337
  function isWindows(platform = process.platform) {
26322
26338
  return platform === "win32";
26323
26339
  }
26340
+ function normalizePath(p2, platform = process.platform) {
26341
+ const normalized = import_node_path2.default.normalize(p2);
26342
+ if (isWindows(platform)) {
26343
+ return normalized.replace(/\//g, "\\");
26344
+ }
26345
+ return normalized.replace(/\\/g, "/");
26346
+ }
26347
+ function toForwardSlash(p2) {
26348
+ return p2.replace(/\\/g, "/");
26349
+ }
26324
26350
  function quoteForCmd(arg) {
26325
26351
  const flat = arg.replace(/\r\n|\r|\n/g, " ");
26326
26352
  if (!flat.length) return '""';
@@ -26346,6 +26372,39 @@ function stripClaudeNestingEnv(env) {
26346
26372
  }
26347
26373
  return cleaned;
26348
26374
  }
26375
+ function redactEnvForLogs(env) {
26376
+ const result = {};
26377
+ for (const [k2, v2] of Object.entries(env)) {
26378
+ if (v2 === void 0) continue;
26379
+ result[k2] = SENSITIVE_KEY_RE.test(k2) ? "***REDACTED***" : v2;
26380
+ }
26381
+ return result;
26382
+ }
26383
+ function windowsPathExts(env) {
26384
+ return (env.PATHEXT ?? ".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean);
26385
+ }
26386
+ async function resolveCommandPath(command, opts = {}) {
26387
+ const cwd = opts.cwd ?? process.cwd();
26388
+ const env = opts.env ?? process.env;
26389
+ const platform = opts.platform ?? process.platform;
26390
+ const hasPathSeparator = command.includes("/") || command.includes("\\");
26391
+ if (hasPathSeparator) {
26392
+ const absolute = import_node_path2.default.isAbsolute(command) ? command : import_node_path2.default.resolve(cwd, command);
26393
+ return await pathExists(absolute, platform) ? absolute : null;
26394
+ }
26395
+ const pathValue = env.PATH ?? env.Path ?? "";
26396
+ const delimiter = isWindows(platform) ? ";" : ":";
26397
+ const dirs = pathValue.split(delimiter).filter(Boolean);
26398
+ const exts = isWindows(platform) ? windowsPathExts(env) : [""];
26399
+ const hasExtension = isWindows(platform) && import_node_path2.default.extname(command).length > 0;
26400
+ for (const dir of dirs) {
26401
+ const candidates = isWindows(platform) ? hasExtension ? [import_node_path2.default.join(dir, command)] : exts.map((ext) => import_node_path2.default.join(dir, `${command}${ext}`)) : [import_node_path2.default.join(dir, command)];
26402
+ for (const candidate of candidates) {
26403
+ if (await pathExists(candidate, platform)) return candidate;
26404
+ }
26405
+ }
26406
+ return null;
26407
+ }
26349
26408
  function resolveCommandPathSync(command, platform = process.platform, exec = defaultExecSync) {
26350
26409
  if (import_node_path2.default.extname(command) || command.includes("/") || command.includes("\\")) {
26351
26410
  return command;
@@ -26371,6 +26430,13 @@ function resolveCommandPathSync(command, platform = process.platform, exec = def
26371
26430
  }
26372
26431
  return command;
26373
26432
  }
26433
+ async function resolveSpawnTarget(command, args, opts = {}) {
26434
+ const env = opts.env ?? process.env;
26435
+ const platform = opts.platform ?? process.platform;
26436
+ const resolved = await resolveCommandPath(command, opts);
26437
+ const executable = resolved ?? command;
26438
+ return wrapForPlatform(executable, args, env, platform);
26439
+ }
26374
26440
  function resolveSpawnTargetSync(command, args, platform = process.platform, exec) {
26375
26441
  const resolved = resolveCommandPathSync(command, platform, exec);
26376
26442
  return wrapForPlatform(resolved, args, process.env, platform);
@@ -26390,10 +26456,123 @@ function wrapForPlatform(executable, args, env, platform) {
26390
26456
  }
26391
26457
  return { command: executable, args };
26392
26458
  }
26393
- var import_node_child_process, import_node_path2, CLAUDE_NESTING_VARS, defaultExecSync;
26459
+ async function pathExists(candidate, platform = process.platform) {
26460
+ try {
26461
+ await import_node_fs2.promises.access(candidate, isWindows(platform) ? import_node_fs2.constants.F_OK : import_node_fs2.constants.X_OK);
26462
+ return true;
26463
+ } catch {
26464
+ return false;
26465
+ }
26466
+ }
26467
+ async function detectShells(platform = process.platform) {
26468
+ if (!isWindows(platform)) {
26469
+ return detectUnixShells();
26470
+ }
26471
+ return detectWindowsShells();
26472
+ }
26473
+ async function detectUnixShells() {
26474
+ try {
26475
+ const content = await import_node_fs2.promises.readFile("/etc/shells", "utf-8");
26476
+ const shells = [];
26477
+ const seen = /* @__PURE__ */ new Map();
26478
+ for (const raw of content.split("\n")) {
26479
+ const line = raw.replace(/#.*/, "").trim();
26480
+ if (!line || !line.startsWith("/")) continue;
26481
+ if (!await pathExists(line)) continue;
26482
+ let name = import_node_path2.default.basename(line);
26483
+ const count = seen.get(name) ?? 0;
26484
+ seen.set(name, count + 1);
26485
+ if (count > 0) name = `${name} (${count + 1})`;
26486
+ shells.push({ name, path: line });
26487
+ }
26488
+ return shells;
26489
+ } catch {
26490
+ const defaults = ["/bin/zsh", "/bin/bash", "/bin/sh"];
26491
+ const shells = [];
26492
+ for (const p2 of defaults) {
26493
+ if (await pathExists(p2)) shells.push({ name: import_node_path2.default.basename(p2), path: p2 });
26494
+ }
26495
+ return shells;
26496
+ }
26497
+ }
26498
+ async function detectWindowsShells() {
26499
+ const shells = [];
26500
+ const gitBashCandidates = [];
26501
+ const gitPath = await resolveCommandPath("git", { platform: "win32" });
26502
+ if (gitPath) {
26503
+ const gitRoot = import_node_path2.default.resolve(import_node_path2.default.dirname(gitPath), "..", "..");
26504
+ gitBashCandidates.push(
26505
+ import_node_path2.default.join(gitRoot, "bin", "bash.exe"),
26506
+ import_node_path2.default.join(gitRoot, "usr", "bin", "bash.exe")
26507
+ );
26508
+ }
26509
+ const programDirs = [
26510
+ process.env.ProgramW6432,
26511
+ process.env.ProgramFiles,
26512
+ process.env["ProgramFiles(x86)"],
26513
+ process.env.LocalAppData ? import_node_path2.default.join(process.env.LocalAppData, "Programs") : null
26514
+ ].filter(Boolean);
26515
+ for (const dir of programDirs) {
26516
+ gitBashCandidates.push(
26517
+ import_node_path2.default.join(dir, "Git", "bin", "bash.exe"),
26518
+ import_node_path2.default.join(dir, "Git", "usr", "bin", "bash.exe")
26519
+ );
26520
+ }
26521
+ const home = process.env.USERPROFILE ?? "";
26522
+ if (home) {
26523
+ gitBashCandidates.push(
26524
+ import_node_path2.default.join(home, "scoop", "apps", "git", "current", "bin", "bash.exe")
26525
+ );
26526
+ }
26527
+ if (process.env.CLAUDE_CODE_GIT_BASH_PATH) {
26528
+ gitBashCandidates.unshift(process.env.CLAUDE_CODE_GIT_BASH_PATH);
26529
+ }
26530
+ for (const candidate of gitBashCandidates) {
26531
+ if (await pathExists(candidate, "win32")) {
26532
+ shells.push({ name: "Git Bash", path: candidate });
26533
+ break;
26534
+ }
26535
+ }
26536
+ const pwshPath = await resolveCommandPath("pwsh", { platform: "win32" });
26537
+ if (pwshPath) {
26538
+ shells.push({ name: "PowerShell", path: pwshPath });
26539
+ }
26540
+ const winDir = process.env.windir ?? "C:\\WINDOWS";
26541
+ const legacyPs = import_node_path2.default.join(winDir, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
26542
+ if (await pathExists(legacyPs, "win32")) {
26543
+ shells.push({ name: "Windows PowerShell", path: legacyPs });
26544
+ }
26545
+ const cmd = process.env.ComSpec ?? import_node_path2.default.join(winDir, "System32", "cmd.exe");
26546
+ if (await pathExists(cmd, "win32")) {
26547
+ shells.push({ name: "Command Prompt", path: cmd });
26548
+ }
26549
+ return shells;
26550
+ }
26551
+ async function detectTerminalApps(platform = process.platform) {
26552
+ if (platform === "darwin") {
26553
+ const results = [];
26554
+ for (const t of MAC_TERMINAL_APPS) {
26555
+ if (await pathExists(`/Applications/${t.bundleName}.app`, platform)) {
26556
+ results.push({ name: t.name, value: t.bundleName });
26557
+ }
26558
+ }
26559
+ return results;
26560
+ }
26561
+ if (isWindows(platform)) {
26562
+ const results = [];
26563
+ const wtPath = await resolveCommandPath("wt", { platform });
26564
+ if (wtPath) {
26565
+ results.push({ name: "Windows Terminal", value: wtPath });
26566
+ }
26567
+ return results;
26568
+ }
26569
+ return [];
26570
+ }
26571
+ var import_node_fs2, import_node_child_process, import_node_path2, CLAUDE_NESTING_VARS, SENSITIVE_KEY_RE, defaultExecSync, MAC_TERMINAL_APPS;
26394
26572
  var init_platform = __esm({
26395
26573
  "src/lib/platform.ts"() {
26396
26574
  "use strict";
26575
+ import_node_fs2 = require("node:fs");
26397
26576
  import_node_child_process = require("node:child_process");
26398
26577
  import_node_path2 = __toESM(require("node:path"));
26399
26578
  CLAUDE_NESTING_VARS = [
@@ -26402,7 +26581,17 @@ var init_platform = __esm({
26402
26581
  "CLAUDE_CODE_SESSION",
26403
26582
  "CLAUDE_CODE_PARENT_SESSION"
26404
26583
  ];
26584
+ SENSITIVE_KEY_RE = /key|token|secret|password|passwd|authorization|cookie/i;
26405
26585
  defaultExecSync = (cmd) => (0, import_node_child_process.execSync)(cmd, { encoding: "utf-8", timeout: 5e3 });
26586
+ MAC_TERMINAL_APPS = [
26587
+ { name: "Terminal", bundleName: "Terminal" },
26588
+ { name: "iTerm2", bundleName: "iTerm" },
26589
+ { name: "Warp", bundleName: "Warp" },
26590
+ { name: "Alacritty", bundleName: "Alacritty" },
26591
+ { name: "WezTerm", bundleName: "WezTerm" },
26592
+ { name: "kitty", bundleName: "kitty" },
26593
+ { name: "Hyper", bundleName: "Hyper" }
26594
+ ];
26406
26595
  }
26407
26596
  });
26408
26597
 
@@ -26417,11 +26606,11 @@ var init_tower_paths = __esm({
26417
26606
  });
26418
26607
 
26419
26608
  // src/lib/ai/adapters/cli/claude-cli-adapter.ts
26420
- var fs2, os2, path4, CLAUDE_MODELS, ClaudeCliAdapter;
26609
+ var fs3, os2, path4, CLAUDE_MODELS, ClaudeCliAdapter;
26421
26610
  var init_claude_cli_adapter = __esm({
26422
26611
  "src/lib/ai/adapters/cli/claude-cli-adapter.ts"() {
26423
26612
  "use strict";
26424
- fs2 = __toESM(require("node:fs"));
26613
+ fs3 = __toESM(require("node:fs"));
26425
26614
  os2 = __toESM(require("node:os"));
26426
26615
  path4 = __toESM(require("node:path"));
26427
26616
  init_platform();
@@ -26479,35 +26668,20 @@ var init_claude_cli_adapter = __esm({
26479
26668
  const settings = this.readSettings();
26480
26669
  const hooks = settings["hooks"] ?? {};
26481
26670
  const root = getPackageRoot().replace(/\\/g, "/");
26671
+ const sessionStart = path4.join(root, "scripts", "session-start-hook.js").replace(/\\/g, "/");
26672
+ const postTool = path4.join(root, "scripts", "post-tool-hook.js").replace(/\\/g, "/");
26673
+ const stop = path4.join(root, "scripts", "stop-hook.js").replace(/\\/g, "/");
26482
26674
  let changed = false;
26483
- const sessionStartEntries = this.getHookArray(hooks, "SessionStart");
26484
- if (!this.hasHook(sessionStartEntries, "session-start-hook.js")) {
26485
- const hookPath = path4.join(root, "scripts", "session-start-hook.js").replace(/\\/g, "/");
26486
- sessionStartEntries.push({
26487
- hooks: [{ command: `node "${hookPath}"`, timeout: 5, type: "command" }]
26488
- });
26489
- hooks["SessionStart"] = sessionStartEntries;
26490
- changed = true;
26491
- }
26492
- const postToolEntries = this.getHookArray(hooks, "PostToolUse");
26493
- if (!this.hasHook(postToolEntries, "post-tool-hook.js")) {
26494
- const hookPath = path4.join(root, "scripts", "post-tool-hook.js").replace(/\\/g, "/");
26495
- postToolEntries.push({
26496
- hooks: [{ command: `node "${hookPath}"`, timeout: 10, type: "command" }],
26497
- matcher: "Write|Edit|MultiEdit"
26498
- });
26499
- hooks["PostToolUse"] = postToolEntries;
26500
- changed = true;
26501
- }
26502
- const stopEntries = this.getHookArray(hooks, "Stop");
26503
- if (!this.hasHook(stopEntries, "stop-hook.js")) {
26504
- const hookPath = path4.join(root, "scripts", "stop-hook.js").replace(/\\/g, "/");
26505
- stopEntries.push({
26506
- hooks: [{ command: `node "${hookPath}"`, timeout: 5, type: "command" }]
26507
- });
26508
- hooks["Stop"] = stopEntries;
26509
- changed = true;
26510
- }
26675
+ changed = this.upsertHook(hooks, "SessionStart", "session-start-hook.js", {
26676
+ hooks: [{ command: `node "${sessionStart}"`, timeout: 5, type: "command" }]
26677
+ }) || changed;
26678
+ changed = this.upsertHook(hooks, "PostToolUse", "post-tool-hook.js", {
26679
+ hooks: [{ command: `node "${postTool}"`, timeout: 10, type: "command" }],
26680
+ matcher: "Write|Edit|MultiEdit"
26681
+ }) || changed;
26682
+ changed = this.upsertHook(hooks, "Stop", "stop-hook.js", {
26683
+ hooks: [{ command: `node "${stop}"`, timeout: 5, type: "command" }]
26684
+ }) || changed;
26511
26685
  if (changed) {
26512
26686
  settings["hooks"] = hooks;
26513
26687
  this.writeSettings(settings);
@@ -26522,6 +26696,27 @@ var init_claude_cli_adapter = __esm({
26522
26696
  };
26523
26697
  }
26524
26698
  }
26699
+ /**
26700
+ * Install-or-refresh a hook entry. Removes any existing entries that
26701
+ * reference our `filename` (caters for stale paths from older Tower versions
26702
+ * that wrote `process.cwd()/scripts/...` from inside `.next/standalone/`)
26703
+ * and pushes the freshly-built entry. Returns true when settings changed.
26704
+ */
26705
+ upsertHook(hooks, event, filename, entry) {
26706
+ const entries = this.getHookArray(hooks, event);
26707
+ const wanted = entry?.hooks?.[0]?.command;
26708
+ const existingIndex = entries.findIndex(
26709
+ (e2) => e2?.hooks?.some?.((h10) => h10.command?.includes(filename))
26710
+ );
26711
+ if (existingIndex >= 0) {
26712
+ const current = entries[existingIndex]?.hooks?.[0]?.command;
26713
+ if (current === wanted) return false;
26714
+ entries.splice(existingIndex, 1);
26715
+ }
26716
+ entries.push(entry);
26717
+ hooks[event] = entries;
26718
+ return true;
26719
+ }
26525
26720
  async uninstallHooks() {
26526
26721
  try {
26527
26722
  const settings = this.readSettings();
@@ -26619,7 +26814,7 @@ var init_claude_cli_adapter = __esm({
26619
26814
  async installSkill(skillName, sourceDir) {
26620
26815
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26621
26816
  try {
26622
- if (!fs2.existsSync(sourceDir)) {
26817
+ if (!fs3.existsSync(sourceDir)) {
26623
26818
  return {
26624
26819
  ok: false,
26625
26820
  method: "symlink",
@@ -26627,15 +26822,15 @@ var init_claude_cli_adapter = __esm({
26627
26822
  error: `Source skill dir does not exist: ${sourceDir}`
26628
26823
  };
26629
26824
  }
26630
- fs2.mkdirSync(path4.dirname(target), { recursive: true });
26631
- const existing = await fs2.promises.lstat(target).catch(() => null);
26825
+ fs3.mkdirSync(path4.dirname(target), { recursive: true });
26826
+ const existing = await fs3.promises.lstat(target).catch(() => null);
26632
26827
  if (existing) {
26633
26828
  if (existing.isSymbolicLink()) {
26634
- const current = await fs2.promises.readlink(target);
26829
+ const current = await fs3.promises.readlink(target);
26635
26830
  if (path4.resolve(current) === path4.resolve(sourceDir)) {
26636
26831
  return { ok: true, method: "symlink", detail: `${target} \u2192 ${sourceDir} (already)` };
26637
26832
  }
26638
- await fs2.promises.unlink(target);
26833
+ await fs3.promises.unlink(target);
26639
26834
  } else {
26640
26835
  return {
26641
26836
  ok: false,
@@ -26645,7 +26840,7 @@ var init_claude_cli_adapter = __esm({
26645
26840
  };
26646
26841
  }
26647
26842
  }
26648
- await fs2.promises.symlink(sourceDir, target, "dir");
26843
+ await fs3.promises.symlink(sourceDir, target, "dir");
26649
26844
  return { ok: true, method: "symlink", detail: `${target} \u2192 ${sourceDir}` };
26650
26845
  } catch (err) {
26651
26846
  return {
@@ -26659,7 +26854,7 @@ var init_claude_cli_adapter = __esm({
26659
26854
  async uninstallSkill(skillName) {
26660
26855
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26661
26856
  try {
26662
- const stat = await fs2.promises.lstat(target).catch(() => null);
26857
+ const stat = await fs3.promises.lstat(target).catch(() => null);
26663
26858
  if (!stat) return { ok: true, method: "symlink", detail: `${target} (already absent)` };
26664
26859
  if (!stat.isSymbolicLink()) {
26665
26860
  return {
@@ -26669,7 +26864,7 @@ var init_claude_cli_adapter = __esm({
26669
26864
  error: `Refusing to remove non-symlink at ${target}`
26670
26865
  };
26671
26866
  }
26672
- await fs2.promises.unlink(target);
26867
+ await fs3.promises.unlink(target);
26673
26868
  return { ok: true, method: "symlink", detail: target };
26674
26869
  } catch (err) {
26675
26870
  return {
@@ -26683,10 +26878,10 @@ var init_claude_cli_adapter = __esm({
26683
26878
  async isSkillInstalled(skillName, expectedSourceDir) {
26684
26879
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26685
26880
  try {
26686
- const stat = await fs2.promises.lstat(target);
26881
+ const stat = await fs3.promises.lstat(target);
26687
26882
  if (!stat.isSymbolicLink()) return false;
26688
26883
  if (!expectedSourceDir) return true;
26689
- const current = await fs2.promises.readlink(target);
26884
+ const current = await fs3.promises.readlink(target);
26690
26885
  const resolved = path4.isAbsolute(current) ? current : path4.resolve(path4.dirname(target), current);
26691
26886
  return path4.resolve(resolved) === path4.resolve(expectedSourceDir);
26692
26887
  } catch {
@@ -26712,9 +26907,10 @@ var init_claude_cli_adapter = __esm({
26712
26907
  try {
26713
26908
  const { execFile } = await import("child_process");
26714
26909
  const { promisify } = await import("util");
26910
+ const { resolveSpawnTarget: resolveSpawnTarget2 } = await Promise.resolve().then(() => (init_platform(), platform_exports));
26715
26911
  const execFileAsync = promisify(execFile);
26716
- const cmd = this.resolveCommand();
26717
- const { stdout } = await execFileAsync(cmd, ["--version"], { timeout: 5e3 });
26912
+ const target = await resolveSpawnTarget2(this.resolveCommand(), ["--version"]);
26913
+ const { stdout } = await execFileAsync(target.command, target.args, { timeout: 5e3 });
26718
26914
  return stdout.trim() || null;
26719
26915
  } catch {
26720
26916
  return null;
@@ -26735,10 +26931,10 @@ var init_claude_cli_adapter = __esm({
26735
26931
  getApiKeyInfo() {
26736
26932
  return { envVar: "ANTHROPIC_API_KEY", required: false };
26737
26933
  }
26738
- buildHelloProbeArgs() {
26934
+ buildHelloProbeArgs(prompt) {
26739
26935
  return {
26740
26936
  command: this.resolveCommand(),
26741
- args: ["--print", "-", "--output-format", "stream-json", "--verbose"]
26937
+ args: ["--print", prompt, "--output-format", "stream-json", "--verbose"]
26742
26938
  };
26743
26939
  }
26744
26940
  /** Resolve claude binary — env var > platform-aware resolution.
@@ -26753,15 +26949,15 @@ var init_claude_cli_adapter = __esm({
26753
26949
  }
26754
26950
  readSettings() {
26755
26951
  try {
26756
- return JSON.parse(fs2.readFileSync(this.getSettingsPath(), "utf-8"));
26952
+ return JSON.parse(fs3.readFileSync(this.getSettingsPath(), "utf-8"));
26757
26953
  } catch {
26758
26954
  return {};
26759
26955
  }
26760
26956
  }
26761
26957
  writeSettings(data) {
26762
26958
  const dir = this.getConfigDir();
26763
- if (!fs2.existsSync(dir)) fs2.mkdirSync(dir, { recursive: true });
26764
- fs2.writeFileSync(this.getSettingsPath(), JSON.stringify(data, null, 2), "utf-8");
26959
+ if (!fs3.existsSync(dir)) fs3.mkdirSync(dir, { recursive: true });
26960
+ fs3.writeFileSync(this.getSettingsPath(), JSON.stringify(data, null, 2), "utf-8");
26765
26961
  }
26766
26962
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
26767
26963
  getHookArray(hooks, event) {
@@ -47693,7 +47889,7 @@ var require_windowsPtyAgent = __commonJS({
47693
47889
  "use strict";
47694
47890
  Object.defineProperty(exports2, "__esModule", { value: true });
47695
47891
  exports2.argsToCommandLine = exports2.WindowsPtyAgent = void 0;
47696
- var fs4 = require("fs");
47892
+ var fs5 = require("fs");
47697
47893
  var os4 = require("os");
47698
47894
  var path6 = require("path");
47699
47895
  var child_process_1 = require("child_process");
@@ -47752,7 +47948,7 @@ var require_windowsPtyAgent = __commonJS({
47752
47948
  this._outSocket.on("connect", function() {
47753
47949
  _this._outSocket.emit("ready_datapipe");
47754
47950
  });
47755
- var inSocketFD = fs4.openSync(term.conin, "w");
47951
+ var inSocketFD = fs5.openSync(term.conin, "w");
47756
47952
  this._inSocket = new net_1.Socket({
47757
47953
  fd: inSocketFD,
47758
47954
  readable: false,
@@ -48186,7 +48382,7 @@ var require_unixTerminal = __commonJS({
48186
48382
  })();
48187
48383
  Object.defineProperty(exports2, "__esModule", { value: true });
48188
48384
  exports2.UnixTerminal = void 0;
48189
- var fs4 = require("fs");
48385
+ var fs5 = require("fs");
48190
48386
  var path6 = require("path");
48191
48387
  var tty = require("tty");
48192
48388
  var terminal_1 = require_terminal();
@@ -48449,7 +48645,7 @@ var require_unixTerminal = __commonJS({
48449
48645
  return;
48450
48646
  }
48451
48647
  var task = this._writeQueue[0];
48452
- fs4.write(this._fd, task.buffer, task.offset, function(err, written) {
48648
+ fs5.write(this._fd, task.buffer, task.offset, function(err, written) {
48453
48649
  if (err) {
48454
48650
  if ("code" in err && err.code === "EAGAIN") {
48455
48651
  _this._writeImmediate = setImmediate(function() {
@@ -49803,7 +49999,7 @@ var knowledgeTools = {
49803
49999
 
49804
50000
  // src/mcp/tools/note-asset-tools.ts
49805
50001
  init_zod();
49806
- var fs3 = __toESM(require("node:fs"));
50002
+ var fs4 = __toESM(require("node:fs"));
49807
50003
  var path5 = __toESM(require("node:path"));
49808
50004
 
49809
50005
  // src/lib/fts.ts
@@ -49960,17 +50156,17 @@ async function handleManageAssets(args) {
49960
50156
  const filename = args.filename ?? path5.basename(args.sourcePath);
49961
50157
  const destPath = path5.join(assetsDir, filename);
49962
50158
  try {
49963
- fs3.renameSync(args.sourcePath, destPath);
50159
+ fs4.renameSync(args.sourcePath, destPath);
49964
50160
  } catch (err) {
49965
50161
  const nodeErr = err;
49966
50162
  if (nodeErr.code === "EXDEV") {
49967
- fs3.copyFileSync(args.sourcePath, destPath);
49968
- fs3.unlinkSync(args.sourcePath);
50163
+ fs4.copyFileSync(args.sourcePath, destPath);
50164
+ fs4.unlinkSync(args.sourcePath);
49969
50165
  } else {
49970
50166
  throw err;
49971
50167
  }
49972
50168
  }
49973
- const stats = fs3.statSync(destPath);
50169
+ const stats = fs4.statSync(destPath);
49974
50170
  const asset = await db.projectAsset.create({
49975
50171
  data: {
49976
50172
  filename,
@@ -49996,13 +50192,13 @@ async function handleManageAssets(args) {
49996
50192
  filename = `upload-${Date.now()}${ext}`;
49997
50193
  }
49998
50194
  let destPath = path5.join(assetsDir, filename);
49999
- if (fs3.existsSync(destPath)) {
50195
+ if (fs4.existsSync(destPath)) {
50000
50196
  const ext = path5.extname(filename);
50001
50197
  const base = path5.basename(filename, ext);
50002
50198
  filename = `${base}-${Date.now()}${ext}`;
50003
50199
  destPath = path5.join(assetsDir, filename);
50004
50200
  }
50005
- fs3.writeFileSync(destPath, buffer);
50201
+ fs4.writeFileSync(destPath, buffer);
50006
50202
  const asset = await db.projectAsset.create({
50007
50203
  data: {
50008
50204
  filename,
@@ -50034,8 +50230,8 @@ async function handleManageAssets(args) {
50034
50230
  throw new Error("assetId required");
50035
50231
  }
50036
50232
  const asset = await db.projectAsset.findUnique({ where: { id: args.assetId } });
50037
- if (asset?.path && fs3.existsSync(asset.path)) {
50038
- fs3.unlinkSync(asset.path);
50233
+ if (asset?.path && fs4.existsSync(asset.path)) {
50234
+ fs4.unlinkSync(asset.path);
50039
50235
  }
50040
50236
  await db.projectAsset.delete({ where: { id: args.assetId } });
50041
50237
  return { deleted: true, assetId: args.assetId };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tower-studio",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
5
5
  "bin": {
6
6
  "tower": "bin/tower.mjs"
@@ -23,7 +23,6 @@
23
23
  "scripts/stop-hook.js",
24
24
  "dist/mcp-server.cjs",
25
25
  "skills/",
26
- "src/mcp/",
27
26
  "next.config.ts",
28
27
  "tsconfig.json"
29
28
  ],
@@ -1,4 +0,0 @@
1
- module.exports=[324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},980738,(e,t,r)=>{t.exports=e.x("node-pty-c710df912a232c01",()=>require("node-pty-c710df912a232c01"))},433541,e=>e.a(async(t,r)=>{try{let t=await e.y("ws-4df7fc762dfa9a52");e.n(t),r()}catch(e){r(e)}},!0),504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},933919,(e,t,r)=>{t.exports=e.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},192520,e=>{"use strict";let t;var r=e.i(750227),a=e.i(660526),n=e.i(902157);function s(){return t||(t=process.env.TOWER_DATA_DIR||(0,r.join)((0,a.homedir)(),".tower"),(0,n.existsSync)(t)||(0,n.mkdirSync)(t,{recursive:!0})),t}e.s(["getAssistantDir",0,function(){let e=(0,r.join)(s(),"assistant");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,r.join)(s(),"backups");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=(0,r.join)(s(),"storage");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getTowerDbPath",0,function(){let e;return(0,r.join)((e=(0,r.join)(s(),"database"),(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,s])},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},482819,(e,t,r)=>{"use strict";t.exports=e.r(583981).vendored["react-rsc"].ReactServerDOMTurbopackServer},921675,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"registerServerReference",{enumerable:!0,get:function(){return a.registerServerReference}});let a=e.r(482819)},86708,(e,t,r)=>{"use strict";function a(e){for(let t=0;t<e.length;t++){let r=e[t];if("function"!=typeof r)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof r}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ensureServerEntryExports",{enumerable:!0,get:function(){return a}})},843793,e=>{"use strict";var t=e.i(933919);let r=globalThis.prisma??new t.PrismaClient({log:[]});process.on("SIGTERM",()=>{r.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{r.$disconnect().catch(()=>{})}),e.s(["db",0,r])},572173,e=>{"use strict";var t=e.i(843793);async function r(e,r){let a=await t.db.systemConfig.findUnique({where:{key:e}});if(!a)return r;try{return JSON.parse(a.value)}catch{return r}}e.s(["readConfigValue",0,r])},658053,e=>{"use strict";e.s(["ASSISTANT_SESSION_KEY",0,"__assistant__"])},427699,(e,t,r)=>{t.exports=e.x("events",()=>require("events"))},687769,(e,t,r)=>{t.exports=e.x("node:events",()=>require("node:events"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},899871,(e,t,r)=>{t.exports=e.x("node:string_decoder",()=>require("node:string_decoder"))},449719,(e,t,r)=>{t.exports=e.x("assert",()=>require("assert"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},406461,(e,t,r)=>{t.exports=e.x("zlib",()=>require("zlib"))},57328,(e,t,r)=>{t.exports=e.x("node:assert",()=>require("node:assert"))},276534,e=>{"use strict";e.s(["CONFIG_DEFAULTS",0,{"git.pathMappingRules":{defaultValue:[],type:"object",label:"Git Path Mapping Rules"},"system.maxUploadBytes":{defaultValue:0x3200000,type:"number",label:"Max Upload Size (bytes)"},"system.maxConcurrentExecutions":{defaultValue:20,type:"number",label:"Max Concurrent Executions"},"system.maxReadableFileBytes":{defaultValue:5242880,type:"number",label:"Max Readable File Size (bytes)"},"system.backupDir":{defaultValue:"",type:"string",label:"Backup Directory"},"git.timeoutSec":{defaultValue:30,type:"number",label:"Git Operation Timeout (seconds)"},"search.resultLimit":{defaultValue:20,type:"number",label:"Search Result Limit"},"search.allModeCap":{defaultValue:5,type:"number",label:"All-Mode Per-Type Cap"},"search.debounceMs":{defaultValue:250,type:"number",label:"Search Debounce (ms)"},"search.snippetLength":{defaultValue:80,type:"number",label:"Snippet Length (characters)"},"search.codeTimeoutSec":{defaultValue:30,type:"number",label:"Code Search Timeout (seconds)"},"missions.grid.minCols":{defaultValue:1,type:"number",label:"Grid Min Columns"},"missions.grid.maxCols":{defaultValue:5,type:"number",label:"Grid Max Columns"},"missions.grid.minRows":{defaultValue:1,type:"number",label:"Grid Min Rows"},"missions.grid.maxRows":{defaultValue:5,type:"number",label:"Grid Max Rows"},"terminal.app":{defaultValue:"Terminal",type:"string",label:"Default Terminal App"},"terminal.wsPort":{defaultValue:3001,type:"number",label:"WebSocket Port"},"terminal.idleTimeoutSec":{defaultValue:180,type:"number",label:"Idle Timeout (seconds)"},"assistant.systemPrompt":{defaultValue:'You are Tower Assistant — the built-in AI operator for the Tower task management platform.\n\n## Identity\n- You are a task management operator, NOT a coding assistant.\n- You can ONLY use Tower MCP tools. You CANNOT read files, edit code, run shell commands, or search the web.\n- Always respond in the same language the user uses.\n\n## Capabilities\nWhen users ask what you can do, respond with EXACTLY these 6 groups. Translate to the user\'s language.\n\n1. **Workspace & Project** — View, create, update, delete workspaces and projects. Search projects and repositories.\n2. **Task Management** — Create tasks (priority, labels, worktree branch isolation, sub-path, auto-start). Move task status (TODO → IN_PROGRESS → IN_REVIEW → DONE / CANCELLED). Update task info and labels.\n3. **Execution Monitor** — Start task execution, check execution status, get terminal output, send commands to running terminals.\n4. **Daily Report & Todo** — Generate daily work summary (completed + in-progress). View pending task list sorted by priority.\n5. **Labels & Notes & Assets** — Manage workspace labels, project notes, and file attachments.\n6. **Global Search** — Search tasks, projects, repositories, notes, and assets by keyword.\n\nDo NOT list any capabilities beyond the above. Do NOT mention code editing, debugging, testing, git operations, or any development capabilities.\n\n## Scope Boundary\nIf the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply:\n"抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。"',type:"string",label:"Assistant System Prompt"},"assistant.displayMode":{defaultValue:"sidebar",type:"string",label:"Assistant Display Mode"},"assistant.communicationMode":{defaultValue:"chat",type:"string",label:"Assistant Communication Mode"}}])},61920,e=>{"use strict";var t=e.i(446786),r=e.i(814747);function a(e){return e.startsWith("~/")?r.default.join(t.default.homedir(),e.slice(2)):e}function n(e){let t,r=e.match(/^git@([^:]+):(.+)$/);if(r)return{host:r[1],pathSegments:s(r[2]).split("/").filter(Boolean)};try{t=new URL(e)}catch{return null}return{host:t.hostname,pathSegments:s(decodeURIComponent(t.pathname)).split("/").filter(Boolean)}}function s(e){return e.replace(/\.git\/?$/,"")}e.s(["gitUrlToLocalPath",0,function(e){let t=e.trim();if(!t)return"";try{let e=n(t);if(!e)return"";let{host:s,pathSegments:i}=e;if("code.iflytek.com"===s){let e,t;return a((e=[...i],"osc"===e[0]&&"_source"===e[1]&&(e=e.slice(2)),((t=e.indexOf("-"))>0&&(e=e.slice(0,t)),0===e.length)?"":`~/company/${e.join("/")}`))}if("github.com"===s){var r;let e,t;return a((e=(r=i)[0],t=r[1],e&&t?`${"jp-liu"===e?"~/project/i":"~/project/f"}/${t}`:""))}let o=i[i.length-1];return o?a(`~/project/f/${o}`):""}catch{return""}},"matchGitPathRule",0,function(e,t){if(!t.length)return"";let r=e.trim();if(!r)return"";let s=n(r);if(!s)return"";let{host:i,pathSegments:o}=s,l=o[0]??"",u=o[o.length-1]??"",c=[...t].sort((e,t)=>{let r=+("*"===e.ownerMatch),a=+("*"===t.ownerMatch);return r!==a?r-a:e.priority-t.priority}),p=o.join("/");for(let e of c){if(e.host!==i||"*"!==e.ownerMatch&&e.ownerMatch!==l)continue;let t=e.localPathTemplate;if(t.includes("{path}"))return a(t.replace("{path}",p).replace("{owner}",l).replace("{repo}",u).replace(/\/+$/,""));let r=t.replace("{owner}",l).replace("{repo}","").replace(/\/+$/,"");return a(`${r}/${u}`)}return""}])},22569,e=>e.a(async(t,r)=>{try{var a=e.i(921675),n=e.i(843793),s=e.i(276534),i=e.i(61920),o=e.i(769310),l=e.i(721390),u=e.i(86708),c=t([l]);async function p(e,t){let r=await n.db.systemConfig.findUnique({where:{key:e}});if(!r)return t;try{return JSON.parse(r.value)}catch{return t}}async function d(e,t){await n.db.systemConfig.upsert({where:{key:e},create:{key:e,value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}async function f(e){let t=e.trim();if(!t)return"";try{let e=await p("git.pathMappingRules",[]),r=(0,i.matchGitPathRule)(t,e);if(r)return r;return(0,i.gitUrlToLocalPath)(t)}catch{return(0,i.gitUrlToLocalPath)(t)}}async function m(e){let t=await n.db.systemConfig.findMany({where:{key:{in:e}}}),r=Object.fromEntries(t.map(e=>{try{return[e.key,JSON.parse(e.value)]}catch{return[e.key,null]}})),a={};for(let t of e)a[t]=t in r?r[t]:s.CONFIG_DEFAULTS[t]?.defaultValue??null;return a}async function y(){return(0,o.detectShells)()}async function b(){return(0,o.detectTerminalApps)()}async function g(){return{platform:process.platform}}async function x(){let e=(0,l.getActiveWsPort)();if(null!==e)return e;let t=parseInt(process.env.PORT||"3000",10);return p("terminal.wsPort",t+1)}[l]=c.then?(await c)():c,(0,u.ensureServerEntryExports)([p,d,f,m,y,b,g,x]),(0,a.registerServerReference)(p,"601406ecac79b3ad03802ebdad7fee412b1cd242a3",null),(0,a.registerServerReference)(d,"602a9baca17d1dfb46d6920ffa0a228eef5457ab33",null),(0,a.registerServerReference)(f,"40b05fa1832e38faf3093f26ffc25130691bc7b075",null),(0,a.registerServerReference)(m,"408a94f097a9a92d17f4ef2a81b170cb16586e0cba",null),(0,a.registerServerReference)(y,"006ca763a21e0c7b1c866f46617803dde0a13da9ea",null),(0,a.registerServerReference)(b,"0017c96cfbba10eb5558b07c346d467fafc74ba32f",null),(0,a.registerServerReference)(g,"00dbf32469ff11201d8f24aef9098bcb9fa141bcd4",null),(0,a.registerServerReference)(x,"001e1fa1609fa6f321934af3c930363baeed8b3d15",null),e.s(["getConfigValue",0,p]),r()}catch(e){r(e)}},!1)];
3
-
4
- //# sourceMappingURL=%5Broot-of-the-server%5D__0.9mj3v._.js.map
@@ -1,4 +0,0 @@
1
- module.exports=[324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},933919,(e,t,r)=>{t.exports=e.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},980738,(e,t,r)=>{t.exports=e.x("node-pty-c710df912a232c01",()=>require("node-pty-c710df912a232c01"))},433541,e=>e.a(async(t,r)=>{try{let t=await e.y("ws-4df7fc762dfa9a52");e.n(t),r()}catch(e){r(e)}},!0),504446,(e,t,r)=>{t.exports=e.x("net",()=>require("net"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},192520,e=>{"use strict";let t;var r=e.i(750227),a=e.i(660526),n=e.i(902157);function s(){return t||(t=process.env.TOWER_DATA_DIR||(0,r.join)((0,a.homedir)(),".tower"),(0,n.existsSync)(t)||(0,n.mkdirSync)(t,{recursive:!0})),t}e.s(["getAssistantDir",0,function(){let e=(0,r.join)(s(),"assistant");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,r.join)(s(),"backups");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=(0,r.join)(s(),"storage");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e},"getTowerDbPath",0,function(){let e;return(0,r.join)((e=(0,r.join)(s(),"database"),(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,s])},482819,(e,t,r)=>{"use strict";t.exports=e.r(583981).vendored["react-rsc"].ReactServerDOMTurbopackServer},921675,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"registerServerReference",{enumerable:!0,get:function(){return a.registerServerReference}});let a=e.r(482819)},86708,(e,t,r)=>{"use strict";function a(e){for(let t=0;t<e.length;t++){let r=e[t];if("function"!=typeof r)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof r}.
2
- Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ensureServerEntryExports",{enumerable:!0,get:function(){return a}})},843793,e=>{"use strict";var t=e.i(933919);let r=globalThis.prisma??new t.PrismaClient({log:[]});process.on("SIGTERM",()=>{r.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{r.$disconnect().catch(()=>{})}),e.s(["db",0,r])},572173,e=>{"use strict";var t=e.i(843793);async function r(e,r){let a=await t.db.systemConfig.findUnique({where:{key:e}});if(!a)return r;try{return JSON.parse(a.value)}catch{return r}}e.s(["readConfigValue",0,r])},658053,e=>{"use strict";e.s(["ASSISTANT_SESSION_KEY",0,"__assistant__"])},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},341291,e=>{"use strict";var t=e.i(666680),r=e.i(902157),a=e.i(750227);let n=(0,e.i(192520).getStorageDir)();function s(e){if(!e.startsWith(n+a.sep))throw Error("Path traversal detected")}let i=new Set(["image","screenshot","img","photo","picture","clipboard","paste","untitled"]);e.s(["buildCacheFilename",0,function(e,r){let n=a.basename(e,a.extname(e)),s=t.randomUUID().replace(/-/g,"").slice(0,8),o=n.toLowerCase();if(!n||i.has(o)||/^screenshot[\s_\-]/i.test(n))return`tower_image-${s}${r}`;let l=n.replace(/[^\p{L}\p{N}]/gu,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return`${l||"file"}-${s}${r}`},"ensureAssetsDir",0,function(e){let t,i=(s(t=a.join(n,"assets",e)),t);return r.mkdirSync(i,{recursive:!0}),i},"getAssistantCacheDir",0,function(e="images"){let t=new Date,i=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,o=a.join(n,"cache","assistant",i,e);return s(o),r.mkdirSync(o,{recursive:!0}),o},"getAssistantCacheRoot",0,function(){let e=a.join(n,"cache","assistant");return s(e),e}])},634712,e=>{"use strict";let t=["jpg","jpeg","png","gif","webp"],r=["md","txt","json","csv"],a=[...t,...r].join("|"),n=RegExp(`^\\d{4}-\\d{2}/(images|files)/[^/]+\\.(${a})$`,"i");function s(e){let a=e.replace(/^\./,"").toLowerCase();return t.includes(a)?"image":r.includes(a)?"text":null}[...t.map(e=>`.${e}`),...r.map(e=>`.${e}`),"image/*"].join(","),e.s(["ALLOWED_TEXT_EXTS",0,r,"ATTACHMENT_SUBPATH_RE",0,n,"MAX_ATTACHMENTS",0,10,"classifyAttachmentExt",0,s,"classifyAttachmentSubPath",0,function(e){if(!n.test(e))return null;let t=e.lastIndexOf(".");return t<0?null:s(e.slice(t+1))}])},276534,e=>{"use strict";e.s(["CONFIG_DEFAULTS",0,{"git.pathMappingRules":{defaultValue:[],type:"object",label:"Git Path Mapping Rules"},"system.maxUploadBytes":{defaultValue:0x3200000,type:"number",label:"Max Upload Size (bytes)"},"system.maxConcurrentExecutions":{defaultValue:20,type:"number",label:"Max Concurrent Executions"},"system.maxReadableFileBytes":{defaultValue:5242880,type:"number",label:"Max Readable File Size (bytes)"},"system.backupDir":{defaultValue:"",type:"string",label:"Backup Directory"},"git.timeoutSec":{defaultValue:30,type:"number",label:"Git Operation Timeout (seconds)"},"search.resultLimit":{defaultValue:20,type:"number",label:"Search Result Limit"},"search.allModeCap":{defaultValue:5,type:"number",label:"All-Mode Per-Type Cap"},"search.debounceMs":{defaultValue:250,type:"number",label:"Search Debounce (ms)"},"search.snippetLength":{defaultValue:80,type:"number",label:"Snippet Length (characters)"},"search.codeTimeoutSec":{defaultValue:30,type:"number",label:"Code Search Timeout (seconds)"},"missions.grid.minCols":{defaultValue:1,type:"number",label:"Grid Min Columns"},"missions.grid.maxCols":{defaultValue:5,type:"number",label:"Grid Max Columns"},"missions.grid.minRows":{defaultValue:1,type:"number",label:"Grid Min Rows"},"missions.grid.maxRows":{defaultValue:5,type:"number",label:"Grid Max Rows"},"terminal.app":{defaultValue:"Terminal",type:"string",label:"Default Terminal App"},"terminal.wsPort":{defaultValue:3001,type:"number",label:"WebSocket Port"},"terminal.idleTimeoutSec":{defaultValue:180,type:"number",label:"Idle Timeout (seconds)"},"assistant.systemPrompt":{defaultValue:'You are Tower Assistant — the built-in AI operator for the Tower task management platform.\n\n## Identity\n- You are a task management operator, NOT a coding assistant.\n- You can ONLY use Tower MCP tools. You CANNOT read files, edit code, run shell commands, or search the web.\n- Always respond in the same language the user uses.\n\n## Capabilities\nWhen users ask what you can do, respond with EXACTLY these 6 groups. Translate to the user\'s language.\n\n1. **Workspace & Project** — View, create, update, delete workspaces and projects. Search projects and repositories.\n2. **Task Management** — Create tasks (priority, labels, worktree branch isolation, sub-path, auto-start). Move task status (TODO → IN_PROGRESS → IN_REVIEW → DONE / CANCELLED). Update task info and labels.\n3. **Execution Monitor** — Start task execution, check execution status, get terminal output, send commands to running terminals.\n4. **Daily Report & Todo** — Generate daily work summary (completed + in-progress). View pending task list sorted by priority.\n5. **Labels & Notes & Assets** — Manage workspace labels, project notes, and file attachments.\n6. **Global Search** — Search tasks, projects, repositories, notes, and assets by keyword.\n\nDo NOT list any capabilities beyond the above. Do NOT mention code editing, debugging, testing, git operations, or any development capabilities.\n\n## Scope Boundary\nIf the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply:\n"抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。"',type:"string",label:"Assistant System Prompt"},"assistant.displayMode":{defaultValue:"sidebar",type:"string",label:"Assistant Display Mode"},"assistant.communicationMode":{defaultValue:"chat",type:"string",label:"Assistant Communication Mode"}}])},61920,e=>{"use strict";var t=e.i(446786),r=e.i(814747);function a(e){return e.startsWith("~/")?r.default.join(t.default.homedir(),e.slice(2)):e}function n(e){let t,r=e.match(/^git@([^:]+):(.+)$/);if(r)return{host:r[1],pathSegments:s(r[2]).split("/").filter(Boolean)};try{t=new URL(e)}catch{return null}return{host:t.hostname,pathSegments:s(decodeURIComponent(t.pathname)).split("/").filter(Boolean)}}function s(e){return e.replace(/\.git\/?$/,"")}e.s(["gitUrlToLocalPath",0,function(e){let t=e.trim();if(!t)return"";try{let e=n(t);if(!e)return"";let{host:s,pathSegments:i}=e;if("code.iflytek.com"===s){let e,t;return a((e=[...i],"osc"===e[0]&&"_source"===e[1]&&(e=e.slice(2)),((t=e.indexOf("-"))>0&&(e=e.slice(0,t)),0===e.length)?"":`~/company/${e.join("/")}`))}if("github.com"===s){var r;let e,t;return a((e=(r=i)[0],t=r[1],e&&t?`${"jp-liu"===e?"~/project/i":"~/project/f"}/${t}`:""))}let o=i[i.length-1];return o?a(`~/project/f/${o}`):""}catch{return""}},"matchGitPathRule",0,function(e,t){if(!t.length)return"";let r=e.trim();if(!r)return"";let s=n(r);if(!s)return"";let{host:i,pathSegments:o}=s,l=o[0]??"",u=o[o.length-1]??"",c=[...t].sort((e,t)=>{let r=+("*"===e.ownerMatch),a=+("*"===t.ownerMatch);return r!==a?r-a:e.priority-t.priority}),p=o.join("/");for(let e of c){if(e.host!==i||"*"!==e.ownerMatch&&e.ownerMatch!==l)continue;let t=e.localPathTemplate;if(t.includes("{path}"))return a(t.replace("{path}",p).replace("{owner}",l).replace("{repo}",u).replace(/\/+$/,""));let r=t.replace("{owner}",l).replace("{repo}","").replace(/\/+$/,"");return a(`${r}/${u}`)}return""}])},22569,e=>e.a(async(t,r)=>{try{var a=e.i(921675),n=e.i(843793),s=e.i(276534),i=e.i(61920),o=e.i(769310),l=e.i(721390),u=e.i(86708),c=t([l]);async function p(e,t){let r=await n.db.systemConfig.findUnique({where:{key:e}});if(!r)return t;try{return JSON.parse(r.value)}catch{return t}}async function d(e,t){await n.db.systemConfig.upsert({where:{key:e},create:{key:e,value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}async function f(e){let t=e.trim();if(!t)return"";try{let e=await p("git.pathMappingRules",[]),r=(0,i.matchGitPathRule)(t,e);if(r)return r;return(0,i.gitUrlToLocalPath)(t)}catch{return(0,i.gitUrlToLocalPath)(t)}}async function m(e){let t=await n.db.systemConfig.findMany({where:{key:{in:e}}}),r=Object.fromEntries(t.map(e=>{try{return[e.key,JSON.parse(e.value)]}catch{return[e.key,null]}})),a={};for(let t of e)a[t]=t in r?r[t]:s.CONFIG_DEFAULTS[t]?.defaultValue??null;return a}async function h(){return(0,o.detectShells)()}async function g(){return(0,o.detectTerminalApps)()}async function y(){return{platform:process.platform}}async function b(){let e=(0,l.getActiveWsPort)();if(null!==e)return e;let t=parseInt(process.env.PORT||"3000",10);return p("terminal.wsPort",t+1)}[l]=c.then?(await c)():c,(0,u.ensureServerEntryExports)([p,d,f,m,h,g,y,b]),(0,a.registerServerReference)(p,"601406ecac79b3ad03802ebdad7fee412b1cd242a3",null),(0,a.registerServerReference)(d,"602a9baca17d1dfb46d6920ffa0a228eef5457ab33",null),(0,a.registerServerReference)(f,"40b05fa1832e38faf3093f26ffc25130691bc7b075",null),(0,a.registerServerReference)(m,"408a94f097a9a92d17f4ef2a81b170cb16586e0cba",null),(0,a.registerServerReference)(h,"006ca763a21e0c7b1c866f46617803dde0a13da9ea",null),(0,a.registerServerReference)(g,"0017c96cfbba10eb5558b07c346d467fafc74ba32f",null),(0,a.registerServerReference)(y,"00dbf32469ff11201d8f24aef9098bcb9fa141bcd4",null),(0,a.registerServerReference)(b,"001e1fa1609fa6f321934af3c930363baeed8b3d15",null),e.s(["getConfigValue",0,p]),r()}catch(e){r(e)}},!1),437513,e=>{"use strict";let t=[{mime:"image/jpeg",check:e=>255===e[0]&&216===e[1]&&255===e[2]},{mime:"image/png",check:e=>137===e[0]&&80===e[1]&&78===e[2]&&71===e[3]},{mime:"image/gif",check:e=>71===e[0]&&73===e[1]&&70===e[2]},{mime:"image/webp",check:e=>82===e[0]&&73===e[1]&&70===e[2]&&70===e[3]&&87===e[8]&&69===e[9]&&66===e[10]&&80===e[11]}];e.s(["MIME_TO_EXT",0,{"image/jpeg":".jpg","image/png":".png","image/gif":".gif","image/webp":".webp"},"TEXT_EXT_TO_MIME",0,{".md":"text/markdown",".txt":"text/plain",".json":"application/json",".csv":"text/csv"},"detectImageMime",0,function(e){if(e.length<12)return null;for(let r of t)if(r.check(e))return r.mime;return null},"isLikelyTextFile",0,function(e){if(0===e.length)return!0;let t=Math.min(e.length,8192);for(let r=0;r<t;r++)if(0===e[r])return!1;return!0}])},648834,e=>e.a(async(t,r)=>{try{var a=e.i(750227),n=e.i(902157),s=e.i(855104),i=e.i(198840),o=e.i(437513),l=e.i(341291),u=e.i(22569),c=e.i(634712),p=t([u]);async function d(e){let t,r,p,d=(0,i.requireLocalhost)(e);if(d)return d;let f=(await e.formData()).get("file");if(!f)return s.NextResponse.json({error:"Missing file field"},{status:400});let m=await (0,u.getConfigValue)("system.maxUploadBytes",0x3200000);if(f.size>m)return s.NextResponse.json({error:"File too large"},{status:400});let h=Buffer.from(await f.arrayBuffer()),g=a.extname(f.name),y=(0,c.classifyAttachmentExt)(g);if(!y)return s.NextResponse.json({error:"Unsupported file type"},{status:400});if("image"===y){let e=(0,o.detectImageMime)(h);if(!e)return s.NextResponse.json({error:"Invalid image content"},{status:400});r=e,t=o.MIME_TO_EXT[e],p=(0,l.getAssistantCacheDir)("images")}else{if(!(0,o.isLikelyTextFile)(h))return s.NextResponse.json({error:"File appears to be binary, not text"},{status:400});let e=g.toLowerCase();if(!c.ALLOWED_TEXT_EXTS.includes(e.replace(/^\./,"")))return s.NextResponse.json({error:"Unsupported text type"},{status:400});t=e,r=o.TEXT_EXT_TO_MIME[e]??"text/plain",p=(0,l.getAssistantCacheDir)("files")}let b=(0,l.buildCacheFilename)(f.name,t),x=a.join(p,b);if(!x.startsWith(p+a.sep)&&x!==p)return s.NextResponse.json({error:"Invalid path"},{status:400});await n.promises.writeFile(x,h);let v=a.relative((0,l.getAssistantCacheRoot)(),x);return s.NextResponse.json({filename:v,mimeType:r,kind:y})}[u]=p.then?(await p)():p,e.s(["POST",0,d,"dynamic",0,"force-dynamic","runtime",0,"nodejs"]),r()}catch(e){r(e)}},!1),122166,e=>e.a(async(t,r)=>{try{var a=e.i(765876),n=e.i(675896),s=e.i(959160),i=e.i(97944),o=e.i(86757),l=e.i(204144),u=e.i(273436),c=e.i(743641),p=e.i(813766),d=e.i(840884),f=e.i(498814),m=e.i(780006),h=e.i(544432),g=e.i(772005),y=e.i(450223),b=e.i(193695);e.i(628400);var x=e.i(800071),v=e.i(648834),w=t([v]);[v]=w.then?(await w)():w;let S=new a.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/internal/assistant/attachments/route",pathname:"/api/internal/assistant/attachments",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/internal/assistant/attachments/route.ts",nextConfigOutput:"standalone",userland:v}),{workAsyncStorage:T,workUnitAsyncStorage:E,serverHooks:C}=S;async function R(e,t,r){r.requestMeta&&(0,i.setRequestMeta)(e,r.requestMeta),S.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let a="/api/internal/assistant/attachments/route";a=a.replace(/\/index$/,"")||"/";let s=await S.prepare(e,t,{srcPage:a,multiZoneDraftMode:!1});if(!s)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:v,params:w,nextConfig:R,parsedUrl:T,isDraftMode:E,prerenderManifest:C,routerServerContext:A,isOnDemandRevalidate:_,revalidateOnlyGenerated:j,resolvedPathname:k,clientReferenceManifest:M,serverActionsManifest:O}=s,N=(0,u.normalizeAppPath)(a),P=!!(C.dynamicRoutes[N]||C.routes[k]),D=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,T,!1):t.end("This page could not be found"),null);if(P&&!E){let e=!!C.routes[k],t=C.dynamicRoutes[N];if(t&&!1===t.fallback&&!e){if(R.adapterPath)return await D();throw new b.NoFallbackError}}let I=null;!P||S.isDev||E||(I=k,I="/index"===I?"/":I);let q=!0===S.isDev||!P,U=P&&!q;O&&M&&(0,l.setManifestsSingleton)({page:a,clientReferenceManifest:M,serverActionsManifest:O});let $=e.method||"GET",L=(0,o.getTracer)(),V=L.getActiveScopeSpan(),F=!!(null==A?void 0:A.isWrappedByNextServer),H=!!(0,i.getRequestMeta)(e,"minimalMode"),G=(0,i.getRequestMeta)(e,"incrementalCache")||await S.getIncrementalCache(e,R,C,H);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:w,previewProps:C.preview,renderOpts:{experimental:{authInterrupts:!!R.experimental.authInterrupts},cacheComponents:!!R.cacheComponents,supportsDynamicResponse:q,incrementalCache:G,cacheLifeProfiles:R.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>S.onRequestError(e,t,a,n,A)},sharedContext:{buildId:v}},X=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(X,(0,p.signalFromNodeResponse)(t));try{let s,i=async e=>S.handle(K,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=L.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${$} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",n),s.updateName(t))}else e.updateName(`${$} ${a}`)}),l=async s=>{var o,l;let u=async({previousCacheEntry:n})=>{try{if(!H&&_&&j&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(s);e.fetchMetrics=B.renderOpts.fetchMetrics;let o=B.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let l=B.renderOpts.collectedTags;if(!P)return await (0,m.sendResponse)(X,W,a,B.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[y.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=y.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,n=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=y.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==n?void 0:n.isStale)&&await S.onRequestError(e,t,{routerKind:"App Router",routePath:a,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:_})},!1,A),t}},c=await S.handleResponse({req:e,nextConfig:R,cacheKey:I,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:C,isRoutePPREnabled:!1,isOnDemandRevalidate:_,revalidateOnlyGenerated:j,responseGenerator:u,waitUntil:r.waitUntil,isMinimalMode:H});if(!P)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(l=c.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});H||t.setHeader("x-nextjs-cache",_?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let p=(0,h.fromNodeOutgoingHttpHeaders)(c.value.headers);return H&&P||p.delete(y.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||p.get("Cache-Control")||p.set("Cache-Control",(0,g.getCacheControlHeader)(c.cacheControl)),await (0,m.sendResponse)(X,W,new Response(c.value.body,{headers:p,status:c.value.status||200})),null};F&&V?await l(V):(s=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(d.BaseServerSpan.handleRequest,{spanName:`${$} ${a}`,kind:o.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l),void 0,!F))}catch(t){if(t instanceof b.NoFallbackError||await S.onRequestError(e,t,{routerKind:"App Router",routePath:N,routeType:"route",revalidateReason:(0,f.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:_})},!1,A),P)throw t;return await (0,m.sendResponse)(X,W,new Response(null,{status:500})),null}}e.s(["handler",0,R,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:T,workUnitAsyncStorage:E})},"routeModule",0,S,"serverHooks",0,C,"workAsyncStorage",0,T,"workUnitAsyncStorage",0,E]),r()}catch(e){r(e)}},!1)];
3
-
4
- //# sourceMappingURL=%5Broot-of-the-server%5D__05353yb._.js.map