tower-studio 0.2.5 → 0.2.7

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 (305) 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 +45 -45
  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 +1 -1
  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/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js +1 -2
  31. package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js +3 -2
  33. package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/internal/assistant/route.js +1 -2
  35. package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +3 -2
  37. package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +2 -3
  39. package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +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/hooks/install/route.js +3 -2
  42. package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js +2 -3
  44. package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +2 -3
  47. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js +2 -3
  49. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +3 -4
  51. package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/index.html +1 -1
  55. package/.next/standalone/.next/server/app/index.rsc +14 -14
  56. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  57. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
  58. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
  59. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +9 -9
  60. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  62. package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +75 -75
  63. package/.next/standalone/.next/server/app/missions/page.js +1 -1
  64. package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  67. package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +45 -45
  68. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  71. package/.next/standalone/.next/server/app/onboarding.rsc +16 -16
  72. package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  73. package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  74. package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  75. package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  77. package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  78. package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
  79. package/.next/standalone/.next/server/app/page/server-reference-manifest.json +45 -45
  80. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  83. package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +58 -58
  84. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  85. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/settings.html +1 -1
  88. package/.next/standalone/.next/server/app/settings.rsc +16 -16
  89. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  90. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  91. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  92. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  93. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  94. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  95. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  96. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +102 -102
  97. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  100. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +84 -84
  101. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  104. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +77 -77
  105. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  108. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +74 -74
  109. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +1 -1
  110. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  113. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +45 -45
  114. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
  117. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +84 -84
  118. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
  121. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +88 -88
  122. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +1 -1
  123. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  126. package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +63 -63
  127. package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0h5yr8p.js +1 -1
  130. package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +1 -1
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00mjz~7._.js +3 -0
  132. package/.next/standalone/.next/server/chunks/[root-of-the-server]__028ucbo._.js +4 -0
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03gi3ue._.js +4 -0
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05eviiz._.js +2 -2
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07f7~6u._.js +4 -0
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09p152b._.js +3 -0
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b-ib~7._.js +3 -0
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c513um._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d~z6xs._.js +4 -0
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e44k3f._.js +20 -0
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h.z9fm._.js +11 -0
  142. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0lioghc._.js +3 -0
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mw.9lg._.js +3 -0
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ogh_qu._.js +20 -0
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0tys9pv._.js +3 -0
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wbndoc._.js +4 -0
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12c9noi._.js +3 -0
  148. package/.next/standalone/.next/server/chunks/{_0u-~jqd._.js → _0_eodxe._.js} +1 -1
  149. package/.next/standalone/.next/server/chunks/{src_0o_27yu._.js → src_0bkvm8c._.js} +2 -2
  150. package/.next/standalone/.next/server/chunks/src_0weytpz._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/src_lib_0ba0ntr._.js +1 -1
  152. package/.next/standalone/.next/server/chunks/src_lib_ai_0q-~me1._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.ukame._.js +30 -0
  157. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__006_qh0._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01j8ix6._.js +30 -0
  159. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02px.0y._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03ebsif._.js +3 -3
  161. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00wymqa._.js → [root-of-the-server]__04pq37d._.js} +2 -2
  162. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0cdz55-._.js → [root-of-the-server]__07_b6c.._.js} +2 -2
  163. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08n5qbf._.js +1 -1
  164. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0n8jy_r._.js → [root-of-the-server]__09kc.q_._.js} +2 -2
  165. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ca_ueb._.js +30 -0
  166. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dsdplu._.js +30 -0
  167. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-xoiaj._.js → [root-of-the-server]__0jo1r7k._.js} +2 -2
  168. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l43.5g._.js +1 -1
  169. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n.cuy2._.js +30 -0
  170. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nbj.ml._.js +30 -0
  171. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zjarb3._.js → [root-of-the-server]__0o8k4pc._.js} +2 -2
  172. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pm2~fu._.js +30 -0
  173. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ps55l6._.js +1 -1
  174. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ribsk4._.js +1 -1
  175. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rjue04._.js +30 -0
  176. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tc6uh2._.js +30 -0
  177. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ilem~v._.js → [root-of-the-server]__0u4gc4b._.js} +2 -2
  178. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0v2eslh._.js +30 -0
  179. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjg_.n._.js +1 -1
  180. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wlmzzq._.js +30 -0
  181. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wvyks.._.js +1 -1
  182. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zbmoit._.js +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zujp5l._.js +3 -0
  184. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~a-emb._.js +30 -0
  185. package/.next/standalone/.next/server/chunks/ssr/_02v3fjp._.js +7 -0
  186. package/.next/standalone/.next/server/chunks/ssr/_04b71ua._.js +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
  188. package/.next/standalone/.next/server/chunks/ssr/_07~0_w6._.js +7 -0
  189. package/.next/standalone/.next/server/chunks/ssr/_08w-r6e._.js +7 -0
  190. package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
  191. package/.next/standalone/.next/server/chunks/ssr/{_108e4..._.js → _0_q~7z7._.js} +1 -1
  192. package/.next/standalone/.next/server/chunks/ssr/{_0lcigjh._.js → _0b0.-sj._.js} +2 -2
  193. package/.next/standalone/.next/server/chunks/ssr/{_0ybhyal._.js → _0bw-tx8._.js} +2 -2
  194. package/.next/standalone/.next/server/chunks/ssr/{_13l5s-p._.js → _0c-49y3._.js} +1 -1
  195. package/.next/standalone/.next/server/chunks/ssr/{_0-t_os6._.js → _0c-jnbs._.js} +2 -2
  196. package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
  197. package/.next/standalone/.next/server/chunks/ssr/_0ds6nk2._.js +1 -1
  198. package/.next/standalone/.next/server/chunks/ssr/{_0wxd6t.._.js → _0f6u19w._.js} +2 -2
  199. package/.next/standalone/.next/server/chunks/ssr/{_0l6vadw._.js → _0fob8fc._.js} +2 -2
  200. package/.next/standalone/.next/server/chunks/ssr/_0i4__mf._.js +1 -1
  201. package/.next/standalone/.next/server/chunks/ssr/_0ihq._v._.js +1 -1
  202. package/.next/standalone/.next/server/chunks/ssr/{_0cie3rm._.js → _0niubv5._.js} +1 -1
  203. package/.next/standalone/.next/server/chunks/ssr/{_00pxhu2._.js → _0pd0.8f._.js} +2 -2
  204. package/.next/standalone/.next/server/chunks/ssr/_0r9w-k8._.js +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/{_0qu2yg4._.js → _0rbai5c._.js} +1 -1
  206. package/.next/standalone/.next/server/chunks/ssr/_0rbctq7._.js +1 -1
  207. package/.next/standalone/.next/server/chunks/ssr/_0rt8hus._.js +1 -1
  208. package/.next/standalone/.next/server/chunks/ssr/{_079ks~i._.js → _0y-7tle._.js} +1 -1
  209. package/.next/standalone/.next/server/chunks/ssr/{_0_co86q._.js → _0ysygps._.js} +2 -2
  210. package/.next/standalone/.next/server/chunks/ssr/{_13fpu~5._.js → _0ysyq9g._.js} +2 -2
  211. package/.next/standalone/.next/server/chunks/ssr/{_0a-rizg._.js → _0zgu282._.js} +1 -1
  212. package/.next/standalone/.next/server/chunks/ssr/{_07scffz._.js → _0zszi6-._.js} +1 -1
  213. package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
  214. package/.next/standalone/.next/server/chunks/ssr/src_095o8x6._.js +1 -1
  215. package/.next/standalone/.next/server/chunks/ssr/src_13jha60._.js +1 -1
  216. package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
  217. package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
  218. package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
  219. package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
  220. package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
  221. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
  222. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
  223. package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
  224. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0h36tj.._.js → src_lib_07rspg0._.js} +1 -1
  225. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0h3ouzu._.js → src_lib_0_8frs_._.js} +1 -1
  226. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0~jyveg._.js → src_lib_0fjk3hr._.js} +1 -1
  227. package/.next/standalone/.next/server/chunks/ssr/{src_lib_0~rxy~0._.js → src_lib_0g-92s-._.js} +1 -1
  228. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  229. package/.next/standalone/.next/server/pages/404.html +1 -1
  230. package/.next/standalone/.next/server/pages/500.html +1 -1
  231. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/server-reference-manifest.json +318 -318
  233. package/.next/standalone/.next/static/chunks/{14se8w2gb9pe0.js → 00.52653v5c~c.js} +1 -1
  234. package/.next/standalone/.next/static/chunks/00j0mdc41wa44.js +1 -0
  235. package/.next/standalone/.next/static/chunks/{15qi~69blu~3u.js → 02edbrlq~2uyx.js} +1 -1
  236. package/.next/standalone/.next/static/chunks/05-ui_o~3irq_.js +5 -0
  237. package/.next/standalone/.next/static/chunks/05hls.3r4bz.0.js +1 -0
  238. package/.next/standalone/.next/static/chunks/{00grznzz_zqq~.js → 08~e63d2q~cam.js} +1 -1
  239. package/.next/standalone/.next/static/chunks/{0z0a_hlsye7mo.js → 0bw4ahlj4~l~g.js} +1 -1
  240. package/.next/standalone/.next/static/chunks/{0.p7x9h8h-..l.js → 0ft77ybyq903..js} +1 -1
  241. package/.next/standalone/.next/static/chunks/0fxm-wv..y_a_.js +5 -0
  242. package/.next/standalone/.next/static/chunks/0i55dediewjp5.js +1 -0
  243. package/.next/standalone/.next/static/chunks/{094hp8ak7su7z.js → 0l3mmc866npw4.js} +2 -2
  244. package/.next/standalone/.next/static/chunks/0nno5if2x1mvs.js +1 -0
  245. package/.next/standalone/.next/static/chunks/0q-u-hhre1uyw.js +1 -0
  246. package/.next/standalone/.next/static/chunks/0qazzw-pr_sv7.js +1 -0
  247. package/.next/standalone/.next/static/chunks/{0~p32xa2eu79e.js → 0r1mkt5qs~s6m.js} +1 -1
  248. package/.next/standalone/.next/static/chunks/{0mijmksouoprl.js → 0v~pz9e87t99b.js} +1 -1
  249. package/.next/standalone/.next/static/chunks/{018vr5fdl426p.js → 0w3jww1m3k77x.js} +1 -1
  250. package/.next/standalone/.next/static/chunks/0z01g02xstbqe.js +1 -0
  251. package/.next/standalone/.next/static/chunks/0~27mkhc9s5k2.js +5 -0
  252. package/.next/standalone/.next/static/chunks/117qu902jput3.js +1 -0
  253. package/.next/standalone/.next/static/chunks/142w-q8.7m3kl.js +1 -0
  254. package/.next/standalone/package.json +2 -1
  255. package/bin/tower.mjs +3 -0
  256. package/dist/mcp-server.cjs +235 -34
  257. package/package.json +2 -1
  258. package/skills/tower/SKILL.md +381 -0
  259. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-eibah._.js +0 -4
  260. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.9mj3v._.js +0 -4
  261. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05353yb._.js +0 -4
  262. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07h7qz8._.js +0 -4
  263. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_a8-jq._.js +0 -3
  264. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_mbhor._.js +0 -3
  265. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_q8qjf._.js +0 -20
  266. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c1g5im._.js +0 -4
  267. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jmqy_3._.js +0 -3
  268. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ntb7n~._.js +0 -11
  269. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nwxhai._.js +0 -3
  270. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o4z8qp._.js +0 -3
  271. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0puw1af._.js +0 -20
  272. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0py_jdb._.js +0 -3
  273. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qz9-me._.js +0 -3
  274. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vasg9u._.js +0 -3
  275. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.5rcav._.js +0 -30
  276. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05kq890._.js +0 -30
  277. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gaa~xc._.js +0 -30
  278. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gcf4k3._.js +0 -30
  279. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ghfuuv._.js +0 -30
  280. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0q7ho54._.js +0 -30
  281. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qe~p-n._.js +0 -30
  282. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tf4zp_._.js +0 -30
  283. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y.nw7l._.js +0 -30
  284. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__102siqc._.js +0 -3
  285. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11bequ2._.js +0 -30
  286. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11ko84j._.js +0 -30
  287. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12pnl8n._.js +0 -30
  288. package/.next/standalone/.next/server/chunks/ssr/_0h0r8fk._.js +0 -7
  289. package/.next/standalone/.next/server/chunks/ssr/_0j_v~sp._.js +0 -7
  290. package/.next/standalone/.next/server/chunks/ssr/_0xh9m4.._.js +0 -7
  291. package/.next/standalone/.next/static/chunks/0-wn9b_4jrs.9.js +0 -1
  292. package/.next/standalone/.next/static/chunks/00jlfmav1nk82.js +0 -1
  293. package/.next/standalone/.next/static/chunks/0a5u1~0._dmx8.js +0 -1
  294. package/.next/standalone/.next/static/chunks/0fe_jnfm0lqm..js +0 -5
  295. package/.next/standalone/.next/static/chunks/0jk6ji4j.3jod.js +0 -5
  296. package/.next/standalone/.next/static/chunks/0lq1_ynox5frw.js +0 -1
  297. package/.next/standalone/.next/static/chunks/0qy~pj-p.oh92.js +0 -1
  298. package/.next/standalone/.next/static/chunks/0y_vg.f~zs~zl.js +0 -1
  299. package/.next/standalone/.next/static/chunks/0~2v6ague-7-t.js +0 -5
  300. package/.next/standalone/.next/static/chunks/10ih_a9~empst.js +0 -1
  301. package/.next/standalone/.next/static/chunks/16.w_z6.3sf2v.js +0 -1
  302. package/.next/standalone/.next/static/chunks/17wptayhzwy6g.js +0 -1
  303. /package/.next/standalone/.next/static/{eRr9P5hixKpzabeXJ-AvA → om3SyUw4eAwMA0KLhpSGh}/_buildManifest.js +0 -0
  304. /package/.next/standalone/.next/static/{eRr9P5hixKpzabeXJ-AvA → om3SyUw4eAwMA0KLhpSGh}/_clientMiddlewareManifest.js +0 -0
  305. /package/.next/standalone/.next/static/{eRr9P5hixKpzabeXJ-AvA → om3SyUw4eAwMA0KLhpSGh}/_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,19 +26581,40 @@ 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
+ ];
26595
+ }
26596
+ });
26597
+
26598
+ // src/lib/tower-paths.ts
26599
+ function getPackageRoot() {
26600
+ return process.env.TOWER_PACKAGE_ROOT || process.cwd();
26601
+ }
26602
+ var init_tower_paths = __esm({
26603
+ "src/lib/tower-paths.ts"() {
26604
+ "use strict";
26406
26605
  }
26407
26606
  });
26408
26607
 
26409
26608
  // src/lib/ai/adapters/cli/claude-cli-adapter.ts
26410
- var fs2, os2, path4, CLAUDE_MODELS, ClaudeCliAdapter;
26609
+ var fs3, os2, path4, CLAUDE_MODELS, ClaudeCliAdapter;
26411
26610
  var init_claude_cli_adapter = __esm({
26412
26611
  "src/lib/ai/adapters/cli/claude-cli-adapter.ts"() {
26413
26612
  "use strict";
26414
- fs2 = __toESM(require("node:fs"));
26613
+ fs3 = __toESM(require("node:fs"));
26415
26614
  os2 = __toESM(require("node:os"));
26416
26615
  path4 = __toESM(require("node:path"));
26417
26616
  init_platform();
26617
+ init_tower_paths();
26418
26618
  CLAUDE_MODELS = ["sonnet", "opus", "haiku", "claude-sonnet-4-6", "claude-opus-4-6", "claude-haiku-4-5-20251001"];
26419
26619
  ClaudeCliAdapter = class {
26420
26620
  buildSpawnArgs(opts) {
@@ -26467,7 +26667,7 @@ var init_claude_cli_adapter = __esm({
26467
26667
  try {
26468
26668
  const settings = this.readSettings();
26469
26669
  const hooks = settings["hooks"] ?? {};
26470
- const root = process.cwd().replace(/\\/g, "/");
26670
+ const root = getPackageRoot().replace(/\\/g, "/");
26471
26671
  let changed = false;
26472
26672
  const sessionStartEntries = this.getHookArray(hooks, "SessionStart");
26473
26673
  if (!this.hasHook(sessionStartEntries, "session-start-hook.js")) {
@@ -26608,7 +26808,7 @@ var init_claude_cli_adapter = __esm({
26608
26808
  async installSkill(skillName, sourceDir) {
26609
26809
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26610
26810
  try {
26611
- if (!fs2.existsSync(sourceDir)) {
26811
+ if (!fs3.existsSync(sourceDir)) {
26612
26812
  return {
26613
26813
  ok: false,
26614
26814
  method: "symlink",
@@ -26616,15 +26816,15 @@ var init_claude_cli_adapter = __esm({
26616
26816
  error: `Source skill dir does not exist: ${sourceDir}`
26617
26817
  };
26618
26818
  }
26619
- fs2.mkdirSync(path4.dirname(target), { recursive: true });
26620
- const existing = await fs2.promises.lstat(target).catch(() => null);
26819
+ fs3.mkdirSync(path4.dirname(target), { recursive: true });
26820
+ const existing = await fs3.promises.lstat(target).catch(() => null);
26621
26821
  if (existing) {
26622
26822
  if (existing.isSymbolicLink()) {
26623
- const current = await fs2.promises.readlink(target);
26823
+ const current = await fs3.promises.readlink(target);
26624
26824
  if (path4.resolve(current) === path4.resolve(sourceDir)) {
26625
26825
  return { ok: true, method: "symlink", detail: `${target} \u2192 ${sourceDir} (already)` };
26626
26826
  }
26627
- await fs2.promises.unlink(target);
26827
+ await fs3.promises.unlink(target);
26628
26828
  } else {
26629
26829
  return {
26630
26830
  ok: false,
@@ -26634,7 +26834,7 @@ var init_claude_cli_adapter = __esm({
26634
26834
  };
26635
26835
  }
26636
26836
  }
26637
- await fs2.promises.symlink(sourceDir, target, "dir");
26837
+ await fs3.promises.symlink(sourceDir, target, "dir");
26638
26838
  return { ok: true, method: "symlink", detail: `${target} \u2192 ${sourceDir}` };
26639
26839
  } catch (err) {
26640
26840
  return {
@@ -26648,7 +26848,7 @@ var init_claude_cli_adapter = __esm({
26648
26848
  async uninstallSkill(skillName) {
26649
26849
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26650
26850
  try {
26651
- const stat = await fs2.promises.lstat(target).catch(() => null);
26851
+ const stat = await fs3.promises.lstat(target).catch(() => null);
26652
26852
  if (!stat) return { ok: true, method: "symlink", detail: `${target} (already absent)` };
26653
26853
  if (!stat.isSymbolicLink()) {
26654
26854
  return {
@@ -26658,7 +26858,7 @@ var init_claude_cli_adapter = __esm({
26658
26858
  error: `Refusing to remove non-symlink at ${target}`
26659
26859
  };
26660
26860
  }
26661
- await fs2.promises.unlink(target);
26861
+ await fs3.promises.unlink(target);
26662
26862
  return { ok: true, method: "symlink", detail: target };
26663
26863
  } catch (err) {
26664
26864
  return {
@@ -26672,10 +26872,10 @@ var init_claude_cli_adapter = __esm({
26672
26872
  async isSkillInstalled(skillName, expectedSourceDir) {
26673
26873
  const target = path4.join(this.getConfigDir(), "skills", skillName);
26674
26874
  try {
26675
- const stat = await fs2.promises.lstat(target);
26875
+ const stat = await fs3.promises.lstat(target);
26676
26876
  if (!stat.isSymbolicLink()) return false;
26677
26877
  if (!expectedSourceDir) return true;
26678
- const current = await fs2.promises.readlink(target);
26878
+ const current = await fs3.promises.readlink(target);
26679
26879
  const resolved = path4.isAbsolute(current) ? current : path4.resolve(path4.dirname(target), current);
26680
26880
  return path4.resolve(resolved) === path4.resolve(expectedSourceDir);
26681
26881
  } catch {
@@ -26701,9 +26901,10 @@ var init_claude_cli_adapter = __esm({
26701
26901
  try {
26702
26902
  const { execFile } = await import("child_process");
26703
26903
  const { promisify } = await import("util");
26904
+ const { resolveSpawnTarget: resolveSpawnTarget2 } = await Promise.resolve().then(() => (init_platform(), platform_exports));
26704
26905
  const execFileAsync = promisify(execFile);
26705
- const cmd = this.resolveCommand();
26706
- const { stdout } = await execFileAsync(cmd, ["--version"], { timeout: 5e3 });
26906
+ const target = await resolveSpawnTarget2(this.resolveCommand(), ["--version"]);
26907
+ const { stdout } = await execFileAsync(target.command, target.args, { timeout: 5e3 });
26707
26908
  return stdout.trim() || null;
26708
26909
  } catch {
26709
26910
  return null;
@@ -26724,10 +26925,10 @@ var init_claude_cli_adapter = __esm({
26724
26925
  getApiKeyInfo() {
26725
26926
  return { envVar: "ANTHROPIC_API_KEY", required: false };
26726
26927
  }
26727
- buildHelloProbeArgs() {
26928
+ buildHelloProbeArgs(prompt) {
26728
26929
  return {
26729
26930
  command: this.resolveCommand(),
26730
- args: ["--print", "-", "--output-format", "stream-json", "--verbose"]
26931
+ args: ["--print", prompt, "--output-format", "stream-json", "--verbose"]
26731
26932
  };
26732
26933
  }
26733
26934
  /** Resolve claude binary — env var > platform-aware resolution.
@@ -26742,15 +26943,15 @@ var init_claude_cli_adapter = __esm({
26742
26943
  }
26743
26944
  readSettings() {
26744
26945
  try {
26745
- return JSON.parse(fs2.readFileSync(this.getSettingsPath(), "utf-8"));
26946
+ return JSON.parse(fs3.readFileSync(this.getSettingsPath(), "utf-8"));
26746
26947
  } catch {
26747
26948
  return {};
26748
26949
  }
26749
26950
  }
26750
26951
  writeSettings(data) {
26751
26952
  const dir = this.getConfigDir();
26752
- if (!fs2.existsSync(dir)) fs2.mkdirSync(dir, { recursive: true });
26753
- fs2.writeFileSync(this.getSettingsPath(), JSON.stringify(data, null, 2), "utf-8");
26953
+ if (!fs3.existsSync(dir)) fs3.mkdirSync(dir, { recursive: true });
26954
+ fs3.writeFileSync(this.getSettingsPath(), JSON.stringify(data, null, 2), "utf-8");
26754
26955
  }
26755
26956
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
26756
26957
  getHookArray(hooks, event) {
@@ -47682,7 +47883,7 @@ var require_windowsPtyAgent = __commonJS({
47682
47883
  "use strict";
47683
47884
  Object.defineProperty(exports2, "__esModule", { value: true });
47684
47885
  exports2.argsToCommandLine = exports2.WindowsPtyAgent = void 0;
47685
- var fs4 = require("fs");
47886
+ var fs5 = require("fs");
47686
47887
  var os4 = require("os");
47687
47888
  var path6 = require("path");
47688
47889
  var child_process_1 = require("child_process");
@@ -47741,7 +47942,7 @@ var require_windowsPtyAgent = __commonJS({
47741
47942
  this._outSocket.on("connect", function() {
47742
47943
  _this._outSocket.emit("ready_datapipe");
47743
47944
  });
47744
- var inSocketFD = fs4.openSync(term.conin, "w");
47945
+ var inSocketFD = fs5.openSync(term.conin, "w");
47745
47946
  this._inSocket = new net_1.Socket({
47746
47947
  fd: inSocketFD,
47747
47948
  readable: false,
@@ -48175,7 +48376,7 @@ var require_unixTerminal = __commonJS({
48175
48376
  })();
48176
48377
  Object.defineProperty(exports2, "__esModule", { value: true });
48177
48378
  exports2.UnixTerminal = void 0;
48178
- var fs4 = require("fs");
48379
+ var fs5 = require("fs");
48179
48380
  var path6 = require("path");
48180
48381
  var tty = require("tty");
48181
48382
  var terminal_1 = require_terminal();
@@ -48438,7 +48639,7 @@ var require_unixTerminal = __commonJS({
48438
48639
  return;
48439
48640
  }
48440
48641
  var task = this._writeQueue[0];
48441
- fs4.write(this._fd, task.buffer, task.offset, function(err, written) {
48642
+ fs5.write(this._fd, task.buffer, task.offset, function(err, written) {
48442
48643
  if (err) {
48443
48644
  if ("code" in err && err.code === "EAGAIN") {
48444
48645
  _this._writeImmediate = setImmediate(function() {
@@ -49792,7 +49993,7 @@ var knowledgeTools = {
49792
49993
 
49793
49994
  // src/mcp/tools/note-asset-tools.ts
49794
49995
  init_zod();
49795
- var fs3 = __toESM(require("node:fs"));
49996
+ var fs4 = __toESM(require("node:fs"));
49796
49997
  var path5 = __toESM(require("node:path"));
49797
49998
 
49798
49999
  // src/lib/fts.ts
@@ -49949,17 +50150,17 @@ async function handleManageAssets(args) {
49949
50150
  const filename = args.filename ?? path5.basename(args.sourcePath);
49950
50151
  const destPath = path5.join(assetsDir, filename);
49951
50152
  try {
49952
- fs3.renameSync(args.sourcePath, destPath);
50153
+ fs4.renameSync(args.sourcePath, destPath);
49953
50154
  } catch (err) {
49954
50155
  const nodeErr = err;
49955
50156
  if (nodeErr.code === "EXDEV") {
49956
- fs3.copyFileSync(args.sourcePath, destPath);
49957
- fs3.unlinkSync(args.sourcePath);
50157
+ fs4.copyFileSync(args.sourcePath, destPath);
50158
+ fs4.unlinkSync(args.sourcePath);
49958
50159
  } else {
49959
50160
  throw err;
49960
50161
  }
49961
50162
  }
49962
- const stats = fs3.statSync(destPath);
50163
+ const stats = fs4.statSync(destPath);
49963
50164
  const asset = await db.projectAsset.create({
49964
50165
  data: {
49965
50166
  filename,
@@ -49985,13 +50186,13 @@ async function handleManageAssets(args) {
49985
50186
  filename = `upload-${Date.now()}${ext}`;
49986
50187
  }
49987
50188
  let destPath = path5.join(assetsDir, filename);
49988
- if (fs3.existsSync(destPath)) {
50189
+ if (fs4.existsSync(destPath)) {
49989
50190
  const ext = path5.extname(filename);
49990
50191
  const base = path5.basename(filename, ext);
49991
50192
  filename = `${base}-${Date.now()}${ext}`;
49992
50193
  destPath = path5.join(assetsDir, filename);
49993
50194
  }
49994
- fs3.writeFileSync(destPath, buffer);
50195
+ fs4.writeFileSync(destPath, buffer);
49995
50196
  const asset = await db.projectAsset.create({
49996
50197
  data: {
49997
50198
  filename,
@@ -50023,8 +50224,8 @@ async function handleManageAssets(args) {
50023
50224
  throw new Error("assetId required");
50024
50225
  }
50025
50226
  const asset = await db.projectAsset.findUnique({ where: { id: args.assetId } });
50026
- if (asset?.path && fs3.existsSync(asset.path)) {
50027
- fs3.unlinkSync(asset.path);
50227
+ if (asset?.path && fs4.existsSync(asset.path)) {
50228
+ fs4.unlinkSync(asset.path);
50028
50229
  }
50029
50230
  await db.projectAsset.delete({ where: { id: args.assetId } });
50030
50231
  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.5",
3
+ "version": "0.2.7",
4
4
  "description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
5
5
  "bin": {
6
6
  "tower": "bin/tower.mjs"
@@ -22,6 +22,7 @@
22
22
  "scripts/session-start-hook.js",
23
23
  "scripts/stop-hook.js",
24
24
  "dist/mcp-server.cjs",
25
+ "skills/",
25
26
  "src/mcp/",
26
27
  "next.config.ts",
27
28
  "tsconfig.json"