tower-studio 0.1.9 → 0.1.11

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 (649) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build/chunks/{0kjx__pnpm_05m.mc_._.js → 0-yb__pnpm_0dykqwq._.js} +167 -167
  3. package/.next/build/chunks/{[root-of-the-server]__13e2v6w._.js → [root-of-the-server]__01h52~y._.js} +3 -3
  4. package/.next/build/chunks/{[root-of-the-server]__0a5dngl._.js → [root-of-the-server]__097_v8t._.js} +7 -7
  5. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0n5jxhz._.js +13 -0
  6. package/.next/build/chunks/[turbopack]_runtime.js +1 -1
  7. package/.next/build/postcss.js +4 -4
  8. package/.next/build-manifest.json +9 -9
  9. package/.next/cache/.previewinfo +1 -1
  10. package/.next/cache/.rscinfo +1 -1
  11. package/.next/cache/.tsbuildinfo +1 -1
  12. package/.next/diagnostics/route-bundle-stats.json +237 -237
  13. package/.next/fallback-build-manifest.json +3 -3
  14. package/.next/prerender-manifest.json +3 -3
  15. package/.next/required-server-files.js +3 -3
  16. package/.next/required-server-files.json +3 -3
  17. package/.next/server/app/_global-error/page/build-manifest.json +6 -6
  18. package/.next/server/app/_global-error/page.js +11 -11
  19. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  20. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/_global-error.html +1 -1
  22. package/.next/server/app/_global-error.rsc +8 -8
  23. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  24. package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
  25. package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
  26. package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  27. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  28. package/.next/server/app/_not-found/page/build-manifest.json +6 -6
  29. package/.next/server/app/_not-found/page/next-font-manifest.json +1 -1
  30. package/.next/server/app/_not-found/page/react-loadable-manifest.json +7 -7
  31. package/.next/server/app/_not-found/page/server-reference-manifest.json +76 -76
  32. package/.next/server/app/_not-found/page.js +19 -19
  33. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  34. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/_not-found.html +1 -1
  36. package/.next/server/app/_not-found.rsc +14 -14
  37. package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  38. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  39. package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  40. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  41. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  42. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  43. package/.next/server/app/api/adapters/test/route.js +8 -8
  44. package/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
  45. package/.next/server/app/api/browse-fs/route.js +6 -6
  46. package/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  47. package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js +6 -6
  48. package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  49. package/.next/server/app/api/git/route.js +6 -6
  50. package/.next/server/app/api/git/route.js.nft.json +1 -1
  51. package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js +6 -6
  52. package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  53. package/.next/server/app/api/internal/assets/reveal/route.js +6 -6
  54. package/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  55. package/.next/server/app/api/internal/assistant/chat/route.js +6 -6
  56. package/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  57. package/.next/server/app/api/internal/assistant/images/route.js +8 -8
  58. package/.next/server/app/api/internal/assistant/images/route.js.nft.json +1 -1
  59. package/.next/server/app/api/internal/assistant/route.js +6 -6
  60. package/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
  61. package/.next/server/app/api/internal/assistant/sessions/route.js +6 -6
  62. package/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  63. package/.next/server/app/api/internal/cache/[...segments]/route.js +6 -6
  64. package/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  65. package/.next/server/app/api/internal/hooks/install/route.js +6 -6
  66. package/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
  67. package/.next/server/app/api/internal/hooks/session/route.js +6 -6
  68. package/.next/server/app/api/internal/hooks/session/route.js.nft.json +1 -1
  69. package/.next/server/app/api/internal/hooks/stop/route.js +7 -7
  70. package/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
  71. package/.next/server/app/api/internal/hooks/upload/route.js +6 -6
  72. package/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  73. package/.next/server/app/api/internal/notifications/pending/route.js +6 -6
  74. package/.next/server/app/api/internal/notifications/pending/route.js.nft.json +1 -1
  75. package/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +7 -7
  76. package/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/internal/terminal/[taskId]/input/route.js +7 -7
  78. package/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
  79. package/.next/server/app/api/internal/terminal/[taskId]/start/route.js +9 -9
  80. package/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  81. package/.next/server/app/api/tasks/[taskId]/diff/route.js +7 -7
  82. package/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
  83. package/.next/server/app/api/tasks/[taskId]/merge/route.js +8 -8
  84. package/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  85. package/.next/server/app/apple-icon.png/route.js +6 -6
  86. package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
  87. package/.next/server/app/favicon.ico/route.js +6 -6
  88. package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  89. package/.next/server/app/icon0.svg/route.js +6 -6
  90. package/.next/server/app/icon0.svg/route.js.nft.json +1 -1
  91. package/.next/server/app/icon1.png/route.js +6 -6
  92. package/.next/server/app/icon1.png/route.js.nft.json +1 -1
  93. package/.next/server/app/index.html +1 -1
  94. package/.next/server/app/index.rsc +14 -14
  95. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  96. package/.next/server/app/index.segments/_full.segment.rsc +14 -14
  97. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  98. package/.next/server/app/index.segments/_index.segment.rsc +9 -9
  99. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  100. package/.next/server/app/manifest.json/route.js +6 -6
  101. package/.next/server/app/manifest.json/route.js.nft.json +1 -1
  102. package/.next/server/app/missions/page/build-manifest.json +6 -6
  103. package/.next/server/app/missions/page/next-font-manifest.json +1 -1
  104. package/.next/server/app/missions/page/react-loadable-manifest.json +7 -7
  105. package/.next/server/app/missions/page/server-reference-manifest.json +144 -144
  106. package/.next/server/app/missions/page.js +21 -21
  107. package/.next/server/app/missions/page.js.nft.json +1 -1
  108. package/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/onboarding/page/build-manifest.json +6 -6
  110. package/.next/server/app/onboarding/page/next-font-manifest.json +1 -1
  111. package/.next/server/app/onboarding/page/react-loadable-manifest.json +7 -7
  112. package/.next/server/app/onboarding/page/server-reference-manifest.json +76 -76
  113. package/.next/server/app/onboarding/page.js +20 -20
  114. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  115. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  116. package/.next/server/app/onboarding.html +1 -1
  117. package/.next/server/app/onboarding.rsc +16 -16
  118. package/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  119. package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  120. package/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  121. package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
  122. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  123. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  124. package/.next/server/app/page/build-manifest.json +6 -6
  125. package/.next/server/app/page/next-font-manifest.json +1 -1
  126. package/.next/server/app/page/react-loadable-manifest.json +7 -7
  127. package/.next/server/app/page/server-reference-manifest.json +76 -76
  128. package/.next/server/app/page.js +20 -20
  129. package/.next/server/app/page.js.nft.json +1 -1
  130. package/.next/server/app/page_client-reference-manifest.js +1 -1
  131. package/.next/server/app/settings/page/build-manifest.json +6 -6
  132. package/.next/server/app/settings/page/next-font-manifest.json +1 -1
  133. package/.next/server/app/settings/page/react-loadable-manifest.json +7 -7
  134. package/.next/server/app/settings/page/server-reference-manifest.json +112 -112
  135. package/.next/server/app/settings/page.js +20 -20
  136. package/.next/server/app/settings/page.js.nft.json +1 -1
  137. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  138. package/.next/server/app/settings.html +1 -1
  139. package/.next/server/app/settings.rsc +16 -16
  140. package/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  141. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  142. package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  143. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  144. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  145. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  146. package/.next/server/app/workspaces/[workspaceId]/archive/page/build-manifest.json +6 -6
  147. package/.next/server/app/workspaces/[workspaceId]/archive/page/next-font-manifest.json +1 -1
  148. package/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +7 -7
  149. package/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +186 -186
  150. package/.next/server/app/workspaces/[workspaceId]/archive/page.js +20 -20
  151. package/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  152. package/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  153. package/.next/server/app/workspaces/[workspaceId]/assets/page/build-manifest.json +6 -6
  154. package/.next/server/app/workspaces/[workspaceId]/assets/page/next-font-manifest.json +1 -1
  155. package/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +7 -7
  156. package/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +172 -172
  157. package/.next/server/app/workspaces/[workspaceId]/assets/page.js +20 -20
  158. package/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  159. package/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/workspaces/[workspaceId]/notes/page/build-manifest.json +6 -6
  161. package/.next/server/app/workspaces/[workspaceId]/notes/page/next-font-manifest.json +1 -1
  162. package/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +7 -7
  163. package/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +146 -146
  164. package/.next/server/app/workspaces/[workspaceId]/notes/page.js +20 -20
  165. package/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  166. package/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  167. package/.next/server/app/workspaces/[workspaceId]/page/build-manifest.json +6 -6
  168. package/.next/server/app/workspaces/[workspaceId]/page/next-font-manifest.json +1 -1
  169. package/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +7 -7
  170. package/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +188 -188
  171. package/.next/server/app/workspaces/[workspaceId]/page.js +21 -21
  172. package/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  173. package/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/build-manifest.json +6 -6
  175. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/next-font-manifest.json +1 -1
  176. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +7 -7
  177. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +76 -76
  178. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +20 -20
  179. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  180. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  181. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/build-manifest.json +6 -6
  182. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/next-font-manifest.json +1 -1
  183. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +10 -10
  184. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +192 -192
  185. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +22 -22
  186. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  187. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/workspaces/page/build-manifest.json +6 -6
  189. package/.next/server/app/workspaces/page/next-font-manifest.json +1 -1
  190. package/.next/server/app/workspaces/page/react-loadable-manifest.json +7 -7
  191. package/.next/server/app/workspaces/page/server-reference-manifest.json +112 -112
  192. package/.next/server/app/workspaces/page.js +20 -20
  193. package/.next/server/app/workspaces/page.js.nft.json +1 -1
  194. package/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  195. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assets_reveal_route_actions_0znebp..js +3 -0
  196. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_chat_route_actions_00gjtz_.js +3 -0
  197. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_images_route_actions_0.n5t~i.js +3 -0
  198. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_sessions_route_actions_0-fm7rx.js +3 -0
  199. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_hooks_install_route_actions_0l972g~.js +3 -0
  200. package/.next/server/chunks/04uy__next-internal_server_app_api_internal_hooks_session_route_actions_0.suzi1.js +3 -0
  201. package/.next/server/chunks/0afp_server_app_api_files_assets_[projectId]_[filename]_route_actions_0-awt9r.js +3 -0
  202. package/.next/server/chunks/0afp_server_app_api_internal_assets_[projectId]_[filename]_route_actions_0t6ek0w.js +3 -0
  203. package/.next/server/chunks/0afp_server_app_api_internal_notifications_pending_route_actions_0f-e1l..js +3 -0
  204. package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_buffer_route_actions_0m0i0r_.js +3 -0
  205. package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_input_route_actions_0w_hflw.js +3 -0
  206. package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_start_route_actions_0tci.x0.js +3 -0
  207. package/.next/server/chunks/{03j-_@anthropic-ai_claude-agent-sdk_sdk_mjs_04597t~._.js → 0b0n_@anthropic-ai_claude-agent-sdk_sdk_mjs_0wzx_-c._.js} +2 -2
  208. package/.next/server/chunks/0l2w_next-internal_server_app_api_internal_cache_[___segments]_route_actions_0s95wfk.js +3 -0
  209. package/.next/server/chunks/0u0h_tower__next-internal_server_app_api_internal_hooks_upload_route_actions_10hulej.js +3 -0
  210. package/.next/server/chunks/0u0h_tower__next-internal_server_app_api_tasks_[taskId]_merge_route_actions_02facil.js +3 -0
  211. package/.next/server/chunks/{10ge_next_dist_08.3req._.js → 0uz~_next_dist_0auh~z2._.js} +3 -3
  212. package/.next/server/chunks/{10ge_next_dist_esm_build_templates_app-route_0liabcf.js → 0uz~_next_dist_esm_build_templates_app-route_0.k256s.js} +2 -2
  213. package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_05yec2y.js +4 -0
  214. package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_06vryvz.js +3 -0
  215. package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_0q64.kc.js +3 -0
  216. package/.next/server/chunks/{10ge_next_dist_esm_build_templates_app-route_0jwpolf.js → 0uz~_next_dist_esm_build_templates_app-route_0s-fzhv.js} +2 -2
  217. package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_12y4scn.js +3 -0
  218. package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_adapters_test_route_actions_0i51gzp.js +3 -0
  219. package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_internal_assistant_route_actions_0n4kn0g.js +3 -0
  220. package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_internal_hooks_stop_route_actions_0tddg8n.js +3 -0
  221. package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_tasks_[taskId]_diff_route_actions_0ric8cc.js +3 -0
  222. package/.next/server/chunks/121__zod_v4_classic_external_0~18d66.js +39 -0
  223. package/.next/server/chunks/[root-of-the-server]__0.9.bkp._.js +3 -0
  224. package/.next/server/chunks/[root-of-the-server]__003.cao._.js +3 -0
  225. package/.next/server/chunks/{[root-of-the-server]__11v.yk_._.js → [root-of-the-server]__02~bq0q._.js} +3 -3
  226. package/.next/server/chunks/[root-of-the-server]__05i_6jl._.js +3 -0
  227. package/.next/server/chunks/[root-of-the-server]__05mc_xk._.js +3 -0
  228. package/.next/server/chunks/[root-of-the-server]__06zd8x0._.js +3 -0
  229. package/.next/server/chunks/[root-of-the-server]__07_t6ha._.js +3 -0
  230. package/.next/server/chunks/{[root-of-the-server]__05pxb~w._.js → [root-of-the-server]__081dmfv._.js} +3 -3
  231. package/.next/server/chunks/[root-of-the-server]__0axwx7g._.js +20 -0
  232. package/.next/server/chunks/[root-of-the-server]__0bvqbq0._.js +3 -0
  233. package/.next/server/chunks/{[root-of-the-server]__12._zd-._.js → [root-of-the-server]__0hw3ulq._.js} +2 -2
  234. package/.next/server/chunks/{[root-of-the-server]__0sjsc63._.js → [root-of-the-server]__0i4isjs._.js} +3 -3
  235. package/.next/server/chunks/[root-of-the-server]__0il.3bc._.js +3 -0
  236. package/.next/server/chunks/{[root-of-the-server]__07-am_7._.js → [root-of-the-server]__0k6_.b8._.js} +2 -2
  237. package/.next/server/chunks/[root-of-the-server]__0lg6mol._.js +3 -0
  238. package/.next/server/chunks/[root-of-the-server]__0m31xle._.js +3 -0
  239. package/.next/server/chunks/[root-of-the-server]__0p-9erj._.js +3 -0
  240. package/.next/server/chunks/[root-of-the-server]__0p5iuez._.js +11 -0
  241. package/.next/server/chunks/[root-of-the-server]__0pe2bmo._.js +3 -0
  242. package/.next/server/chunks/[root-of-the-server]__0sgxys4._.js +3 -0
  243. package/.next/server/chunks/[root-of-the-server]__0t2ql2.._.js +3 -0
  244. package/.next/server/chunks/{[root-of-the-server]__0rpqx55._.js → [root-of-the-server]__0u4~z7h._.js} +2 -2
  245. package/.next/server/chunks/[root-of-the-server]__0uvjyz~._.js +3 -0
  246. package/.next/server/chunks/{[root-of-the-server]__0dqta7g._.js → [root-of-the-server]__0v.lagk._.js} +2 -2
  247. package/.next/server/chunks/[root-of-the-server]__0v6dx13._.js +3 -0
  248. package/.next/server/chunks/[root-of-the-server]__0ypx5xw._.js +3 -0
  249. package/.next/server/chunks/{[root-of-the-server]__0j3gbp7._.js → [root-of-the-server]__0ze75mm._.js} +2 -2
  250. package/.next/server/chunks/[root-of-the-server]__0~33o~m._.js +4 -0
  251. package/.next/server/chunks/[root-of-the-server]__0~_gk3k._.js +3 -0
  252. package/.next/server/chunks/[turbopack]_runtime.js +1 -1
  253. package/.next/server/chunks/project_f_tower_06227jx._.js +10 -0
  254. package/.next/server/chunks/{tower_03g~ktv._.js → project_f_tower_0ihrsvd._.js} +3 -3
  255. package/.next/server/chunks/project_f_tower_0n1s3ym._.js +3 -0
  256. package/.next/server/chunks/project_f_tower__next-internal_server_app_api_browse-fs_route_actions_0f1ms64.js +3 -0
  257. package/.next/server/chunks/project_f_tower__next-internal_server_app_api_git_route_actions_104q-kq.js +3 -0
  258. package/.next/server/chunks/project_f_tower__next-internal_server_app_apple-icon_png_route_actions_0bb5t_v.js +3 -0
  259. package/.next/server/chunks/project_f_tower__next-internal_server_app_favicon_ico_route_actions_0124g8-.js +3 -0
  260. package/.next/server/chunks/project_f_tower__next-internal_server_app_icon0_svg_route_actions_0kttj.d.js +3 -0
  261. package/.next/server/chunks/project_f_tower__next-internal_server_app_icon1_png_route_actions_12vfwry.js +3 -0
  262. package/.next/server/chunks/project_f_tower__next-internal_server_app_manifest_json_route_actions_0.~axx_.js +3 -0
  263. package/.next/server/chunks/project_f_tower_src_0er83xg._.js +3 -0
  264. package/.next/server/chunks/project_f_tower_src_11e.cv5._.js +3 -0
  265. package/.next/server/chunks/project_f_tower_src_lib_0p_b~77._.js +3 -0
  266. package/.next/server/chunks/{tower_src_lib_0uok6j3._.js → project_f_tower_src_lib_10p8sue._.js} +2 -2
  267. package/.next/server/chunks/project_f_tower_src_lib_constants_ts_020catz._.js +3 -0
  268. package/.next/server/chunks/ssr/0-yb__pnpm_072uqh4._.js +14 -0
  269. package/.next/server/chunks/ssr/0-yb__pnpm_0gui5y9._.js +3 -0
  270. package/.next/server/chunks/ssr/0-yb__pnpm_0qi3qqn._.js +3 -0
  271. package/.next/server/chunks/ssr/04uy_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_01.s1p0._.js +3 -0
  272. package/.next/server/chunks/ssr/{03j-_@anthropic-ai_claude-agent-sdk_sdk_mjs_0kr2_y.._.js → 0b0n_@anthropic-ai_claude-agent-sdk_sdk_mjs_123v~_z._.js} +2 -2
  273. package/.next/server/chunks/ssr/0j~t_@monaco-editor_react_dist_index_mjs_0m1qx-m._.js +3 -0
  274. package/.next/server/chunks/ssr/0j~t_@monaco-editor_react_dist_index_mjs_0ni7by_._.js +3 -0
  275. package/.next/server/chunks/ssr/0rvf_@dnd-kit_core_dist_core_esm_0qazy~h.js +3 -0
  276. package/.next/server/chunks/ssr/0uz~_next_0smzj1m._.js +18 -0
  277. package/.next/server/chunks/ssr/0uz~_next_dist_058ju5m._.js +3 -0
  278. package/.next/server/chunks/ssr/0uz~_next_dist_0ot5z96._.js +19 -0
  279. package/.next/server/chunks/ssr/{10ge_next_dist_0pw4my6._.js → 0uz~_next_dist_0tnc.0z._.js} +2 -2
  280. package/.next/server/chunks/ssr/0uz~_next_dist_0viyn-6._.js +6 -0
  281. package/.next/server/chunks/ssr/{10ge_next_dist_0wjbiu9._.js → 0uz~_next_dist_0xqqv-_._.js} +2 -2
  282. package/.next/server/chunks/ssr/0uz~_next_dist_11y31c8._.js +3 -0
  283. package/.next/server/chunks/ssr/{10ge_next_dist_client_components_0--gzcy._.js → 0uz~_next_dist_client_components_0m_m~4r._.js} +2 -2
  284. package/.next/server/chunks/ssr/{10ge_next_dist_client_components_0eil7-a._.js → 0uz~_next_dist_client_components_0neff21._.js} +3 -3
  285. package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_forbidden_0kvxu2~.js +3 -0
  286. package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_global-error_0377e9o.js +3 -0
  287. package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_unauthorized_0wz-f2j.js +3 -0
  288. package/.next/server/chunks/ssr/{10ge_next_dist_compiled_0g45ze2._.js → 0uz~_next_dist_compiled_0m~qqw~._.js} +2 -2
  289. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_01q4vlm.js +4 -0
  290. package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_0fjd2ua.js → 0uz~_next_dist_esm_build_templates_app-page_0553tiz.js} +3 -3
  291. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0as2amp.js +4 -0
  292. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0crer~s.js +4 -0
  293. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0cu4e.5.js +4 -0
  294. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0gn6gc1.js +4 -0
  295. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0h.vao6.js +4 -0
  296. package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_11pz1fw.js → 0uz~_next_dist_esm_build_templates_app-page_0k4fbs6.js} +3 -3
  297. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0n2032y.js +4 -0
  298. package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_080g02v.js → 0uz~_next_dist_esm_build_templates_app-page_0y10ld_.js} +3 -3
  299. package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_0zgisbd.js → 0uz~_next_dist_esm_build_templates_app-page_0ysuakv.js} +3 -3
  300. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_136sj3a.js +4 -0
  301. package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_13jghu9.js +4 -0
  302. package/.next/server/chunks/ssr/0xjs_lucide-react_dist_esm_icons_0l6be37._.js +3 -0
  303. package/.next/server/chunks/ssr/{tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0zfgzhi._.js → 0y0r_f_tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0n4g3bn._.js} +2 -2
  304. package/.next/server/chunks/ssr/[root-of-the-server]__0.hh.2a._.js +3 -0
  305. package/.next/server/chunks/ssr/[root-of-the-server]__0.r38oo._.js +3 -0
  306. package/.next/server/chunks/ssr/{[root-of-the-server]__05452ke._.js → [root-of-the-server]__00.lowc._.js} +3 -3
  307. package/.next/server/chunks/ssr/{[root-of-the-server]__0d5p5d.._.js → [root-of-the-server]__007tg36._.js} +3 -3
  308. package/.next/server/chunks/ssr/[root-of-the-server]__012ko5_._.js +3 -0
  309. package/.next/server/chunks/ssr/{[root-of-the-server]__0i6glcp._.js → [root-of-the-server]__025.0xa._.js} +3 -3
  310. package/.next/server/chunks/ssr/{[root-of-the-server]__0gsj3~.._.js → [root-of-the-server]__04u4kb4._.js} +3 -3
  311. package/.next/server/chunks/ssr/[root-of-the-server]__055w_hn._.js +3 -0
  312. package/.next/server/chunks/ssr/{[root-of-the-server]__0adx8p4._.js → [root-of-the-server]__05a17ca._.js} +3 -3
  313. package/.next/server/chunks/ssr/[root-of-the-server]__06japut._.js +3 -0
  314. package/.next/server/chunks/ssr/[root-of-the-server]__06qzctf._.js +3 -0
  315. package/.next/server/chunks/ssr/[root-of-the-server]__09mr4e7._.js +3 -0
  316. package/.next/server/chunks/ssr/[root-of-the-server]__0c1i04u._.js +3 -0
  317. package/.next/server/chunks/ssr/[root-of-the-server]__0db_p8v._.js +3 -0
  318. package/.next/server/chunks/ssr/[root-of-the-server]__0ffdrwp._.js +3 -0
  319. package/.next/server/chunks/ssr/[root-of-the-server]__0fkkh9j._.js +3 -0
  320. package/.next/server/chunks/ssr/[root-of-the-server]__0fu82np._.js +3 -0
  321. package/.next/server/chunks/ssr/[root-of-the-server]__0fwuc5u._.js +3 -0
  322. package/.next/server/chunks/ssr/{[root-of-the-server]__06sm5cw._.js → [root-of-the-server]__0hiekzn._.js} +2 -2
  323. package/.next/server/chunks/ssr/[root-of-the-server]__0i4rk9v._.js +47 -0
  324. package/.next/server/chunks/ssr/[root-of-the-server]__0m28~~t._.js +3 -0
  325. package/.next/server/chunks/ssr/[root-of-the-server]__0mf.3xq._.js +3 -0
  326. package/.next/server/chunks/ssr/[root-of-the-server]__0nmyvwk._.js +3 -0
  327. package/.next/server/chunks/ssr/[root-of-the-server]__0np-y3i._.js +3 -0
  328. package/.next/server/chunks/ssr/{[root-of-the-server]__0jux8~h._.js → [root-of-the-server]__0p_hwna._.js} +3 -3
  329. package/.next/server/chunks/ssr/[root-of-the-server]__0qwr~nq._.js +3 -0
  330. package/.next/server/chunks/ssr/[root-of-the-server]__0r6gkos._.js +30 -0
  331. package/.next/server/chunks/ssr/{[root-of-the-server]__1223b0_._.js → [root-of-the-server]__0u26l~e._.js} +3 -3
  332. package/.next/server/chunks/ssr/{[root-of-the-server]__04xn50b._.js → [root-of-the-server]__0uca1bc._.js} +3 -3
  333. package/.next/server/chunks/ssr/[root-of-the-server]__0v7fjw6._.js +3 -0
  334. package/.next/server/chunks/ssr/[root-of-the-server]__0v94jfv._.js +3 -0
  335. package/.next/server/chunks/ssr/[root-of-the-server]__0vn5cvq._.js +3 -0
  336. package/.next/server/chunks/ssr/{[root-of-the-server]__13-by9r._.js → [root-of-the-server]__0w.hk6m._.js} +3 -3
  337. package/.next/server/chunks/ssr/[root-of-the-server]__0w7gbe7._.js +3 -0
  338. package/.next/server/chunks/ssr/[root-of-the-server]__0w8l-4s._.js +3 -0
  339. package/.next/server/chunks/ssr/[root-of-the-server]__0wkjslq._.js +3 -0
  340. package/.next/server/chunks/ssr/[root-of-the-server]__0wsvmkr._.js +3 -0
  341. package/.next/server/chunks/ssr/[root-of-the-server]__0xe-o3g._.js +30 -0
  342. package/.next/server/chunks/ssr/[root-of-the-server]__0xe9b6_._.js +3 -0
  343. package/.next/server/chunks/ssr/[root-of-the-server]__0zemnbk._.js +3 -0
  344. package/.next/server/chunks/ssr/[root-of-the-server]__0zugnux._.js +3 -0
  345. package/.next/server/chunks/ssr/[root-of-the-server]__105vrk3._.js +3 -0
  346. package/.next/server/chunks/ssr/[root-of-the-server]__112new_._.js +3 -0
  347. package/.next/server/chunks/ssr/[root-of-the-server]__11j4k9o._.js +3 -0
  348. package/.next/server/chunks/ssr/[root-of-the-server]__13cjs8r._.js +3 -0
  349. package/.next/server/chunks/ssr/[root-of-the-server]__13eo85g._.js +3 -0
  350. package/.next/server/chunks/ssr/[root-of-the-server]__13x5mmo._.js +30 -0
  351. package/.next/server/chunks/ssr/[turbopack]_runtime.js +1 -1
  352. package/.next/server/chunks/ssr/project_f_tower_0-0bopv._.js +30 -0
  353. package/.next/server/chunks/ssr/project_f_tower_0.txwd8._.js +3 -0
  354. package/.next/server/chunks/ssr/{tower_0d.car1._.js → project_f_tower_02411e5._.js} +3 -3
  355. package/.next/server/chunks/ssr/project_f_tower_02x5vbj._.js +3 -0
  356. package/.next/server/chunks/ssr/project_f_tower_03k0qr1._.js +3 -0
  357. package/.next/server/chunks/ssr/{tower_0egtw-7._.js → project_f_tower_04g3~44._.js} +3 -3
  358. package/.next/server/chunks/ssr/project_f_tower_0cjk_8x._.js +30 -0
  359. package/.next/server/chunks/ssr/project_f_tower_0d-6.rs._.js +39 -0
  360. package/.next/server/chunks/ssr/project_f_tower_0ea6ill._.js +3 -0
  361. package/.next/server/chunks/ssr/project_f_tower_0f0-wva._.js +3 -0
  362. package/.next/server/chunks/ssr/project_f_tower_0ghw~2t._.js +3 -0
  363. package/.next/server/chunks/ssr/{tower_0c8unc1._.js → project_f_tower_0h79vn0._.js} +2 -2
  364. package/.next/server/chunks/ssr/project_f_tower_0hgtev9._.js +7 -0
  365. package/.next/server/chunks/ssr/project_f_tower_0ivvjwd._.js +3 -0
  366. package/.next/server/chunks/ssr/project_f_tower_0jdkold._.js +3 -0
  367. package/.next/server/chunks/ssr/project_f_tower_0jy~1uf._.js +3 -0
  368. package/.next/server/chunks/ssr/{tower_0tuq2iz._.js → project_f_tower_0knz136._.js} +3 -3
  369. package/.next/server/chunks/ssr/project_f_tower_0l6ssf8._.js +3 -0
  370. package/.next/server/chunks/ssr/project_f_tower_0n6q9zh._.js +3 -0
  371. package/.next/server/chunks/ssr/project_f_tower_0ntkd-l._.js +6 -0
  372. package/.next/server/chunks/ssr/project_f_tower_0o5.y1e._.js +3 -0
  373. package/.next/server/chunks/ssr/project_f_tower_0p39h1r._.js +3 -0
  374. package/.next/server/chunks/ssr/project_f_tower_0sj3voe._.js +3 -0
  375. package/.next/server/chunks/ssr/project_f_tower_0u6dr5n._.js +3 -0
  376. package/.next/server/chunks/ssr/project_f_tower_0xkqjno._.js +3 -0
  377. package/.next/server/chunks/ssr/project_f_tower_0ym-aea._.js +3 -0
  378. package/.next/server/chunks/ssr/project_f_tower_10lk3gb._.js +30 -0
  379. package/.next/server/chunks/ssr/{tower_0h3r32m._.js → project_f_tower_10~x~zx._.js} +3 -3
  380. package/.next/server/chunks/ssr/project_f_tower__next-internal_server_app__global-error_page_actions_0r22s5i.js +3 -0
  381. package/.next/server/chunks/ssr/project_f_tower_src_0yr8rna._.js +3 -0
  382. package/.next/server/chunks/ssr/project_f_tower_src_actions_agent-actions_ts_0.s4~m-._.js +4 -0
  383. package/.next/server/chunks/ssr/project_f_tower_src_actions_file-actions_ts_02i742t._.js +3 -0
  384. package/.next/server/chunks/ssr/{tower_src_app_missions_missions-client_tsx_0a9vjyr._.js → project_f_tower_src_app_missions_missions-client_tsx_0ums4qx._.js} +2 -2
  385. package/.next/server/chunks/ssr/project_f_tower_src_app_onboarding_page_tsx_0_9_yoq._.js +3 -0
  386. package/.next/server/chunks/ssr/project_f_tower_src_app_settings_page_tsx_0oo06~d._.js +3 -0
  387. package/.next/server/chunks/ssr/project_f_tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0jmj1xz._.js +7 -0
  388. package/.next/server/chunks/ssr/project_f_tower_src_components_ui_select_tsx_07scqtg._.js +3 -0
  389. package/.next/server/chunks/ssr/project_f_tower_src_lib_0-pi47a._.js +3 -0
  390. package/.next/server/chunks/ssr/project_f_tower_src_lib_0._5zby._.js +3 -0
  391. package/.next/server/chunks/ssr/project_f_tower_src_lib_0kwu.w7._.js +3 -0
  392. package/.next/server/chunks/ssr/project_f_tower_src_lib_0q3t9-e._.js +3 -0
  393. package/.next/server/chunks/ssr/project_f_tower_src_lib_11g-ixh._.js +3 -0
  394. package/.next/server/chunks/ssr/project_f_tower_src_lib_constants_ts_0.qkxto._.js +3 -0
  395. package/.next/server/edge/chunks/0s6b_next_dist_esm_build_templates_edge-wrapper_0gir.8i.js +3 -0
  396. package/.next/server/edge/chunks/project_f_tower_0zwq2~l._.js +3 -0
  397. package/.next/server/instrumentation/middleware-manifest.json +2 -2
  398. package/.next/server/instrumentation.js +3 -3
  399. package/.next/server/instrumentation.js.nft.json +1 -1
  400. package/.next/server/middleware-build-manifest.js +9 -9
  401. package/.next/server/next-font-manifest.js +1 -1
  402. package/.next/server/next-font-manifest.json +12 -12
  403. package/.next/server/pages/404.html +1 -1
  404. package/.next/server/pages/500.html +1 -1
  405. package/.next/server/server-reference-manifest.js +1 -1
  406. package/.next/server/server-reference-manifest.json +987 -987
  407. package/.next/static/chunks/0-49z0i7n9z_u.js +31 -0
  408. package/.next/static/chunks/0.vq_m53d7t~7.js +1 -0
  409. package/.next/static/chunks/006_yes1e~uq-.js +1 -0
  410. package/.next/static/chunks/03~7u57dwxswo.js +1 -0
  411. package/.next/static/chunks/048wsx4_3dx7m.js +1 -0
  412. package/.next/static/chunks/{0drgc-oztq6o-.css → 04pjsuj.mivbh.css} +1 -1
  413. package/.next/static/chunks/04rm7wn4pu3v9.js +1 -0
  414. package/.next/static/chunks/054pu3m7e37gx.js +1 -0
  415. package/.next/static/chunks/05fge.5j9lnpa.js +1 -0
  416. package/.next/static/chunks/{03e.4ymu.j5wl.js → 05r51bf1-_-x4.js} +1 -1
  417. package/.next/static/chunks/{0465wja5wuj_t.js → 06hfc~t6~gtz9.js} +1 -1
  418. package/.next/static/chunks/{0_dgukndtuspa.js → 06xnbktd_jmb4.js} +2 -2
  419. package/.next/static/chunks/07_bc0h5~tysp.js +1 -0
  420. package/.next/static/chunks/09mkfd6kg8s2..js +1 -0
  421. package/.next/static/chunks/0afji0z13kos5.js +5 -0
  422. package/.next/static/chunks/0ayhcszr5.75h.js +1 -0
  423. package/.next/static/chunks/0azbwlqgcxx~9.js +1 -0
  424. package/.next/static/chunks/0c5h4.yuzpzs5.js +12 -0
  425. package/.next/static/chunks/0dlrmobwx~tvz.js +1 -0
  426. package/.next/static/chunks/0g-rx4evmd.pa.js +1 -0
  427. package/.next/static/chunks/0i5zk6woum~cm.js +1 -0
  428. package/.next/static/chunks/0kyb0fcxzykkx.js +1 -0
  429. package/.next/static/chunks/0odp5708u_28m.js +1 -0
  430. package/.next/static/chunks/0q6i_n.rkxpn0.js +1 -0
  431. package/.next/static/chunks/0qnz9q6uieuv8.js +1 -0
  432. package/.next/static/chunks/0qrp0pov94ecf.js +1 -0
  433. package/.next/static/chunks/0sa5eiyws1~n0.js +1 -0
  434. package/.next/static/chunks/0sdq_svi-w4cf.js +1 -0
  435. package/.next/static/chunks/0smj3ii_egywx.js +1 -0
  436. package/.next/static/chunks/0u6p4i4aoeb4m.js +1 -0
  437. package/.next/static/chunks/0upxmdjt9neoj.js +5 -0
  438. package/.next/static/chunks/0xvn7yrj70a9v.js +1 -0
  439. package/.next/static/chunks/0yjtd51nb081_.js +4 -0
  440. package/.next/static/chunks/10_azh3_hkhxj.js +1 -0
  441. package/.next/static/chunks/10xx474hrm.03.js +1 -0
  442. package/.next/static/chunks/116on53madp~2.js +2 -0
  443. package/.next/static/chunks/16ow8w3exqm6p.js +1 -0
  444. package/.next/static/chunks/{turbopack-0wjmrsi.z32s0.js → turbopack-12rg1oczocj42.js} +1 -1
  445. package/.next/trace +2 -2
  446. package/.next/trace-build +1 -1
  447. package/bin/tower.mjs +46 -8
  448. package/package.json +10 -4
  449. package/scripts/generate-prisma-client.js +43 -0
  450. package/scripts/link-prisma.js +144 -0
  451. package/scripts/post-tool-hook.js +188 -0
  452. package/scripts/session-start-hook.js +79 -0
  453. package/scripts/stop-hook.js +78 -0
  454. package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0y_r.ay._.js +0 -13
  455. package/.next/server/chunks/0cve_next-internal_server_app_api_internal_cache_[___segments]_route_actions_09n1sa3.js +0 -3
  456. package/.next/server/chunks/0tp-_server_app_api_files_assets_[projectId]_[filename]_route_actions_02i2urs.js +0 -3
  457. package/.next/server/chunks/0tp-_server_app_api_internal_assets_[projectId]_[filename]_route_actions_0kjz576.js +0 -3
  458. package/.next/server/chunks/0tp-_server_app_api_internal_notifications_pending_route_actions_08bx38r.js +0 -3
  459. package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_buffer_route_actions_0bpyf5x.js +0 -3
  460. package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_input_route_actions_0alu32r.js +0 -3
  461. package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_start_route_actions_0swqog2.js +0 -3
  462. package/.next/server/chunks/0w1v_zod_v4_classic_external_0m-7hz_.js +0 -39
  463. package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_chat_route_actions_0x-qbrh.js +0 -3
  464. package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_images_route_actions_0vws40t.js +0 -3
  465. package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_sessions_route_actions_0p09rcp.js +0 -3
  466. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_00gmiw_.js +0 -3
  467. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_0z9_0_i.js +0 -3
  468. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13w3ubu.js +0 -3
  469. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13~vb_i.js +0 -4
  470. package/.next/server/chunks/[root-of-the-server]__02p-gd5._.js +0 -3
  471. package/.next/server/chunks/[root-of-the-server]__0319djr._.js +0 -3
  472. package/.next/server/chunks/[root-of-the-server]__043lk8~._.js +0 -4
  473. package/.next/server/chunks/[root-of-the-server]__053y9tf._.js +0 -3
  474. package/.next/server/chunks/[root-of-the-server]__09gjz6h._.js +0 -3
  475. package/.next/server/chunks/[root-of-the-server]__0_irb2s._.js +0 -3
  476. package/.next/server/chunks/[root-of-the-server]__0c4edwt._.js +0 -3
  477. package/.next/server/chunks/[root-of-the-server]__0c7y1r0._.js +0 -3
  478. package/.next/server/chunks/[root-of-the-server]__0dj34zn._.js +0 -3
  479. package/.next/server/chunks/[root-of-the-server]__0ko_rm_._.js +0 -3
  480. package/.next/server/chunks/[root-of-the-server]__0miy2g.._.js +0 -3
  481. package/.next/server/chunks/[root-of-the-server]__0mt-eeb._.js +0 -3
  482. package/.next/server/chunks/[root-of-the-server]__0n-6-hc._.js +0 -3
  483. package/.next/server/chunks/[root-of-the-server]__0nur_ir._.js +0 -3
  484. package/.next/server/chunks/[root-of-the-server]__0pz60q-._.js +0 -20
  485. package/.next/server/chunks/[root-of-the-server]__0q~5ya5._.js +0 -3
  486. package/.next/server/chunks/[root-of-the-server]__0th.w7w._.js +0 -3
  487. package/.next/server/chunks/[root-of-the-server]__0u..agy._.js +0 -11
  488. package/.next/server/chunks/[root-of-the-server]__0umzekq._.js +0 -3
  489. package/.next/server/chunks/[root-of-the-server]__0wu61w.._.js +0 -3
  490. package/.next/server/chunks/[root-of-the-server]__130shf~._.js +0 -3
  491. package/.next/server/chunks/ssr/040e_@monaco-editor_react_dist_index_mjs_0t4i-ho._.js +0 -3
  492. package/.next/server/chunks/ssr/040e_@monaco-editor_react_dist_index_mjs_0z6t1fr._.js +0 -3
  493. package/.next/server/chunks/ssr/0kjx__pnpm_0g9g8h6._.js +0 -3
  494. package/.next/server/chunks/ssr/0kjx__pnpm_0l.5ii.._.js +0 -3
  495. package/.next/server/chunks/ssr/0kjx__pnpm_0wrn.h9._.js +0 -14
  496. package/.next/server/chunks/ssr/0rik_@dnd-kit_core_dist_core_esm_11giptg.js +0 -3
  497. package/.next/server/chunks/ssr/0~.g_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_0bbseig._.js +0 -3
  498. package/.next/server/chunks/ssr/10ge_next_00.-vj.._.js +0 -18
  499. package/.next/server/chunks/ssr/10ge_next_dist_01n~t8z._.js +0 -6
  500. package/.next/server/chunks/ssr/10ge_next_dist_06_-w96._.js +0 -19
  501. package/.next/server/chunks/ssr/10ge_next_dist_0~ti7jc._.js +0 -3
  502. package/.next/server/chunks/ssr/10ge_next_dist_10.ihny._.js +0 -3
  503. package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_forbidden_0nzsnb2.js +0 -3
  504. package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_global-error_125sopd.js +0 -3
  505. package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_unauthorized_0z93cpe.js +0 -3
  506. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_08khzah.js +0 -4
  507. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_09~o5q0.js +0 -4
  508. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0_rj_f4.js +0 -4
  509. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0c-wmj1.js +0 -4
  510. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0hpuyf0.js +0 -4
  511. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0knnyic.js +0 -4
  512. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0oi86k6.js +0 -4
  513. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0rmwdra.js +0 -4
  514. package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_12reczc.js +0 -4
  515. package/.next/server/chunks/ssr/119e_lucide-react_dist_esm_icons_0636jyq._.js +0 -3
  516. package/.next/server/chunks/ssr/[root-of-the-server]__0-0j_z3._.js +0 -3
  517. package/.next/server/chunks/ssr/[root-of-the-server]__0.8y0n9._.js +0 -3
  518. package/.next/server/chunks/ssr/[root-of-the-server]__0.uoh7q._.js +0 -3
  519. package/.next/server/chunks/ssr/[root-of-the-server]__01ws4-7._.js +0 -3
  520. package/.next/server/chunks/ssr/[root-of-the-server]__024-5kd._.js +0 -3
  521. package/.next/server/chunks/ssr/[root-of-the-server]__02ipahf._.js +0 -3
  522. package/.next/server/chunks/ssr/[root-of-the-server]__03.14vw._.js +0 -3
  523. package/.next/server/chunks/ssr/[root-of-the-server]__06o5v8i._.js +0 -30
  524. package/.next/server/chunks/ssr/[root-of-the-server]__09m32ch._.js +0 -3
  525. package/.next/server/chunks/ssr/[root-of-the-server]__0_0kxz4._.js +0 -3
  526. package/.next/server/chunks/ssr/[root-of-the-server]__0bk3s4l._.js +0 -3
  527. package/.next/server/chunks/ssr/[root-of-the-server]__0d7u1lw._.js +0 -3
  528. package/.next/server/chunks/ssr/[root-of-the-server]__0fg8.hp._.js +0 -3
  529. package/.next/server/chunks/ssr/[root-of-the-server]__0i1tzvg._.js +0 -3
  530. package/.next/server/chunks/ssr/[root-of-the-server]__0i52qt7._.js +0 -3
  531. package/.next/server/chunks/ssr/[root-of-the-server]__0ibsor_._.js +0 -3
  532. package/.next/server/chunks/ssr/[root-of-the-server]__0j5~a_o._.js +0 -3
  533. package/.next/server/chunks/ssr/[root-of-the-server]__0jgbj6l._.js +0 -3
  534. package/.next/server/chunks/ssr/[root-of-the-server]__0l~dc3x._.js +0 -3
  535. package/.next/server/chunks/ssr/[root-of-the-server]__0n32nv5._.js +0 -30
  536. package/.next/server/chunks/ssr/[root-of-the-server]__0n8qufu._.js +0 -3
  537. package/.next/server/chunks/ssr/[root-of-the-server]__0ndt9h3._.js +0 -3
  538. package/.next/server/chunks/ssr/[root-of-the-server]__0p~u4y6._.js +0 -3
  539. package/.next/server/chunks/ssr/[root-of-the-server]__0q.du4s._.js +0 -3
  540. package/.next/server/chunks/ssr/[root-of-the-server]__0rs7pkn._.js +0 -3
  541. package/.next/server/chunks/ssr/[root-of-the-server]__0sysz2q._.js +0 -47
  542. package/.next/server/chunks/ssr/[root-of-the-server]__0t25~v8._.js +0 -3
  543. package/.next/server/chunks/ssr/[root-of-the-server]__0ti70do._.js +0 -3
  544. package/.next/server/chunks/ssr/[root-of-the-server]__0uevudp._.js +0 -30
  545. package/.next/server/chunks/ssr/[root-of-the-server]__0wwqzmm._.js +0 -3
  546. package/.next/server/chunks/ssr/[root-of-the-server]__0xt3-qb._.js +0 -3
  547. package/.next/server/chunks/ssr/[root-of-the-server]__0y-lkvf._.js +0 -3
  548. package/.next/server/chunks/ssr/[root-of-the-server]__0yuwh~5._.js +0 -3
  549. package/.next/server/chunks/ssr/[root-of-the-server]__0zvf.ro._.js +0 -3
  550. package/.next/server/chunks/ssr/[root-of-the-server]__11m7m-q._.js +0 -3
  551. package/.next/server/chunks/ssr/[root-of-the-server]__12f810l._.js +0 -3
  552. package/.next/server/chunks/ssr/[root-of-the-server]__13-egel._.js +0 -3
  553. package/.next/server/chunks/ssr/tower_0-nwtka._.js +0 -3
  554. package/.next/server/chunks/ssr/tower_0-omr_b._.js +0 -30
  555. package/.next/server/chunks/ssr/tower_0.csoof._.js +0 -3
  556. package/.next/server/chunks/ssr/tower_005_jvc._.js +0 -3
  557. package/.next/server/chunks/ssr/tower_01szasw._.js +0 -3
  558. package/.next/server/chunks/ssr/tower_035l~qv._.js +0 -3
  559. package/.next/server/chunks/ssr/tower_03jazku._.js +0 -3
  560. package/.next/server/chunks/ssr/tower_0cmuq4n._.js +0 -3
  561. package/.next/server/chunks/ssr/tower_0ih8lcc._.js +0 -3
  562. package/.next/server/chunks/ssr/tower_0kl_bfy._.js +0 -7
  563. package/.next/server/chunks/ssr/tower_0mz4ut.._.js +0 -3
  564. package/.next/server/chunks/ssr/tower_0nuj.0p._.js +0 -39
  565. package/.next/server/chunks/ssr/tower_0pcqezm._.js +0 -3
  566. package/.next/server/chunks/ssr/tower_0r7uuim._.js +0 -30
  567. package/.next/server/chunks/ssr/tower_0sojjnu._.js +0 -3
  568. package/.next/server/chunks/ssr/tower_0tc~.xl._.js +0 -30
  569. package/.next/server/chunks/ssr/tower_0tjo~2z._.js +0 -3
  570. package/.next/server/chunks/ssr/tower_0wvk~r.._.js +0 -3
  571. package/.next/server/chunks/ssr/tower_10p15te._.js +0 -3
  572. package/.next/server/chunks/ssr/tower_10t13p4._.js +0 -6
  573. package/.next/server/chunks/ssr/tower_117pzh8._.js +0 -3
  574. package/.next/server/chunks/ssr/tower_11q5_.m._.js +0 -3
  575. package/.next/server/chunks/ssr/tower_138qlx5._.js +0 -3
  576. package/.next/server/chunks/ssr/tower__next-internal_server_app__global-error_page_actions_13t5~qk.js +0 -3
  577. package/.next/server/chunks/ssr/tower_src_0lq.aoc._.js +0 -3
  578. package/.next/server/chunks/ssr/tower_src_actions_agent-actions_ts_0j.e1tn._.js +0 -4
  579. package/.next/server/chunks/ssr/tower_src_actions_file-actions_ts_0424lna._.js +0 -3
  580. package/.next/server/chunks/ssr/tower_src_app_onboarding_page_tsx_0_3krz1._.js +0 -3
  581. package/.next/server/chunks/ssr/tower_src_app_settings_page_tsx_0vo5e-o._.js +0 -3
  582. package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0kjp1u0._.js +0 -7
  583. package/.next/server/chunks/ssr/tower_src_components_ui_select_tsx_10ajx~2._.js +0 -3
  584. package/.next/server/chunks/ssr/tower_src_lib_01420_4._.js +0 -3
  585. package/.next/server/chunks/ssr/tower_src_lib_0i-zjpa._.js +0 -3
  586. package/.next/server/chunks/ssr/tower_src_lib_0ja~kdb._.js +0 -3
  587. package/.next/server/chunks/ssr/tower_src_lib_0obw2r8._.js +0 -3
  588. package/.next/server/chunks/ssr/tower_src_lib_0rgfsuf._.js +0 -3
  589. package/.next/server/chunks/ssr/tower_src_lib_constants_ts_0o218_c._.js +0 -3
  590. package/.next/server/chunks/tower_05du07.._.js +0 -10
  591. package/.next/server/chunks/tower_0a-x6m.._.js +0 -3
  592. package/.next/server/chunks/tower__next-internal_server_app_api_adapters_test_route_actions_13jw~9b.js +0 -3
  593. package/.next/server/chunks/tower__next-internal_server_app_api_browse-fs_route_actions_0k5p2xy.js +0 -3
  594. package/.next/server/chunks/tower__next-internal_server_app_api_git_route_actions_0rvpodb.js +0 -3
  595. package/.next/server/chunks/tower__next-internal_server_app_api_internal_assets_reveal_route_actions_0idwm6j.js +0 -3
  596. package/.next/server/chunks/tower__next-internal_server_app_api_internal_assistant_route_actions_0rdz1d..js +0 -3
  597. package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_install_route_actions_06dxleu.js +0 -3
  598. package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_session_route_actions_0wlv4lf.js +0 -3
  599. package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_stop_route_actions_101_oub.js +0 -3
  600. package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_upload_route_actions_0439qz_.js +0 -3
  601. package/.next/server/chunks/tower__next-internal_server_app_api_tasks_[taskId]_diff_route_actions_0nthc84.js +0 -3
  602. package/.next/server/chunks/tower__next-internal_server_app_api_tasks_[taskId]_merge_route_actions_0g.x0nb.js +0 -3
  603. package/.next/server/chunks/tower__next-internal_server_app_apple-icon_png_route_actions_0bni-sb.js +0 -3
  604. package/.next/server/chunks/tower__next-internal_server_app_favicon_ico_route_actions_0kw~xj2.js +0 -3
  605. package/.next/server/chunks/tower__next-internal_server_app_icon0_svg_route_actions_0nww9-e.js +0 -3
  606. package/.next/server/chunks/tower__next-internal_server_app_icon1_png_route_actions_09h.ywu.js +0 -3
  607. package/.next/server/chunks/tower__next-internal_server_app_manifest_json_route_actions_080ob~r.js +0 -3
  608. package/.next/server/chunks/tower_src_0..vg-t._.js +0 -3
  609. package/.next/server/chunks/tower_src_05rqj.1._.js +0 -3
  610. package/.next/server/chunks/tower_src_lib_0w8qt4s._.js +0 -3
  611. package/.next/server/chunks/tower_src_lib_constants_ts_0cxd4.p._.js +0 -3
  612. package/.next/server/edge/chunks/0y9m_next_dist_esm_build_templates_edge-wrapper_0cx_eo..js +0 -3
  613. package/.next/server/edge/chunks/tower_0wvfs38._.js +0 -3
  614. package/.next/static/chunks/00z-g3x93ngvn.js +0 -1
  615. package/.next/static/chunks/01499ombtjk9..js +0 -1
  616. package/.next/static/chunks/04zt_ewq9gd.f.js +0 -5
  617. package/.next/static/chunks/05-b9qqm3av9~.js +0 -1
  618. package/.next/static/chunks/05~v02mkan5z..js +0 -1
  619. package/.next/static/chunks/07ll8eylriw_..js +0 -5
  620. package/.next/static/chunks/08kdkf9zhbx5h.js +0 -1
  621. package/.next/static/chunks/0abtpeymj-58i.js +0 -1
  622. package/.next/static/chunks/0eaa2lmymh2fx.js +0 -1
  623. package/.next/static/chunks/0focg9l2pd5qe.js +0 -1
  624. package/.next/static/chunks/0j9qriqni_r1..js +0 -2
  625. package/.next/static/chunks/0jod832.e8dvp.js +0 -1
  626. package/.next/static/chunks/0k.u8sxy~e469.js +0 -4
  627. package/.next/static/chunks/0lvd52mjiit6s.js +0 -1
  628. package/.next/static/chunks/0mq0uqbbbb1~2.js +0 -1
  629. package/.next/static/chunks/0o0v~cegree8o.js +0 -1
  630. package/.next/static/chunks/0omj~p3uxkic-.js +0 -1
  631. package/.next/static/chunks/0t-gr6j-c65qb.js +0 -1
  632. package/.next/static/chunks/0tcl81ybuob5i.js +0 -1
  633. package/.next/static/chunks/0uqimvsni_op~.js +0 -1
  634. package/.next/static/chunks/0uukquowg_doj.js +0 -1
  635. package/.next/static/chunks/0v593lcts~8.5.js +0 -1
  636. package/.next/static/chunks/0wt3kws~_yr8z.js +0 -1
  637. package/.next/static/chunks/0yz33_rbgu2sz.js +0 -1
  638. package/.next/static/chunks/0z2bzovqhl2f5.js +0 -1
  639. package/.next/static/chunks/0z7bwntvfhxzi.js +0 -12
  640. package/.next/static/chunks/0~2w0fbj7o3fv.js +0 -1
  641. package/.next/static/chunks/10n23t.1hpb-1.js +0 -1
  642. package/.next/static/chunks/12p4plfwlovc5.js +0 -1
  643. package/.next/static/chunks/13juk.piouzom.js +0 -1
  644. package/.next/static/chunks/14xzmrt5ly6gq.js +0 -31
  645. package/.next/static/chunks/151wr~6x8aclx.js +0 -1
  646. package/.next/static/chunks/16w-ap~msrwpj.js +0 -1
  647. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_buildManifest.js +0 -0
  648. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_clientMiddlewareManifest.js +0 -0
  649. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_ssgManifest.js +0 -0
package/bin/tower.mjs CHANGED
@@ -16,15 +16,17 @@
16
16
 
17
17
  import { existsSync, readFileSync, mkdirSync } from "fs";
18
18
  import { join, dirname, resolve } from "path";
19
- import { execSync } from "child_process";
19
+ import { execFileSync } from "child_process";
20
20
  import { createServer } from "http";
21
21
  import { fileURLToPath } from "url";
22
22
  import { parseArgs } from "node:util";
23
23
  import { homedir } from "os";
24
+ import { createRequire } from "module";
24
25
 
25
26
  const __filename = fileURLToPath(import.meta.url);
26
27
  const __dirname = dirname(__filename);
27
28
  const PROJECT_ROOT = resolve(__dirname, "..");
29
+ const require = createRequire(import.meta.url);
28
30
 
29
31
  // ─── Data directory: ~/.tower ───
30
32
  const TOWER_DIR = join(homedir(), ".tower");
@@ -85,15 +87,27 @@ function logError(msg) {
85
87
  console.error(`\x1b[31m[tower]\x1b[0m ${msg}`);
86
88
  }
87
89
 
88
- function run(cmd) {
90
+ function resolveBin(pkgName, binName) {
91
+ const pkgJsonPath = require.resolve(`${pkgName}/package.json`, { paths: [PROJECT_ROOT] });
92
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
93
+ const binField = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.[binName];
94
+
95
+ if (!binField) {
96
+ throw new Error(`No bin entry found for ${pkgName}`);
97
+ }
98
+
99
+ return resolve(dirname(pkgJsonPath), binField);
100
+ }
101
+
102
+ function run(binPath, args) {
89
103
  try {
90
- execSync(cmd, {
104
+ execFileSync(process.execPath, [binPath, ...args], {
91
105
  cwd: PROJECT_ROOT,
92
106
  stdio: "inherit",
93
107
  env: { ...process.env, DATABASE_URL: DB_URL },
94
108
  });
95
109
  } catch {
96
- logError(`Command failed: ${cmd}`);
110
+ logError(`Command failed: ${binPath} ${args.join(" ")}`);
97
111
  process.exit(1);
98
112
  }
99
113
  }
@@ -111,26 +125,30 @@ function ensureDirs() {
111
125
  }
112
126
 
113
127
  async function initDatabase() {
128
+ const prismaBin = resolveBin("prisma", "prisma");
129
+ const tsxBin = resolveBin("tsx", "tsx");
130
+
114
131
  log("Initializing Tower...");
115
132
  ensureDirs();
116
133
  log(`Data directory: ${TOWER_DIR}`);
117
134
 
118
135
  log("Syncing database schema...");
119
- run("npx prisma db push --skip-generate");
136
+ run(prismaBin, ["db", "push", "--skip-generate"]);
120
137
 
121
138
  log("Seeding initial data...");
122
- run("npx tsx scripts/init-db.ts");
139
+ run(tsxBin, ["scripts/init-db.ts"]);
123
140
 
124
141
  log("Initializing full-text search...");
125
- run("npx tsx prisma/init-fts.ts");
142
+ run(tsxBin, ["prisma/init-fts.ts"]);
126
143
 
127
144
  log("Initialization complete!");
128
145
  }
129
146
 
130
147
  // ─── Commands ───
131
148
  async function cmdMigrate() {
149
+ const tsxBin = resolveBin("tsx", "tsx");
132
150
  log("Running data migration...");
133
- run("npx tsx scripts/migrate-data.ts --run");
151
+ run(tsxBin, ["scripts/migrate-data.ts", "--run"]);
134
152
  }
135
153
 
136
154
  async function cmdStart() {
@@ -150,6 +168,26 @@ async function cmdStart() {
150
168
  await app.prepare();
151
169
 
152
170
  const server = createServer(handle);
171
+ let shuttingDown = false;
172
+
173
+ const shutdown = (signal) => {
174
+ if (shuttingDown) return;
175
+ shuttingDown = true;
176
+ log(`Received ${signal}, shutting down...`);
177
+
178
+ const forceExitTimer = setTimeout(() => {
179
+ process.exit(0);
180
+ }, 2000);
181
+ forceExitTimer.unref();
182
+
183
+ server.close(() => {
184
+ process.exit(0);
185
+ });
186
+ };
187
+
188
+ process.once("SIGINT", () => shutdown("SIGINT"));
189
+ process.once("SIGTERM", () => shutdown("SIGTERM"));
190
+
153
191
  server.listen(PORT, HOST, () => {
154
192
  log(`Tower running on http://${HOST === "0.0.0.0" ? "localhost" : HOST}:${PORT}`);
155
193
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tower-studio",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
5
5
  "bin": {
6
6
  "tower": "bin/tower.mjs"
@@ -12,8 +12,13 @@
12
12
  "prisma/schema.prisma",
13
13
  "prisma/init-fts.ts",
14
14
  "scripts/init-db.ts",
15
+ "scripts/generate-prisma-client.js",
16
+ "scripts/link-prisma.js",
15
17
  "scripts/migrate-data.ts",
16
18
  "scripts/copy-monaco.js",
19
+ "scripts/post-tool-hook.js",
20
+ "scripts/session-start-hook.js",
21
+ "scripts/stop-hook.js",
17
22
  "src/mcp/",
18
23
  "next.config.ts",
19
24
  "tsconfig.json"
@@ -26,6 +31,7 @@
26
31
  "build": "next build",
27
32
  "build:clean": "rm -rf .next && next build && find .next -name '*.map' -delete",
28
33
  "release": "pnpm build:clean && npm pack",
34
+ "release:smoke": "node scripts/release-smoke.js",
29
35
  "release:publish": "pnpm build:clean && npm publish",
30
36
  "start": "next start",
31
37
  "lint": "eslint",
@@ -40,7 +46,7 @@
40
46
  "test:e2e": "NO_PROXY=localhost,127.0.0.1 no_proxy=localhost,127.0.0.1 playwright test",
41
47
  "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
42
48
  "mcp": "tsx src/mcp/index.ts",
43
- "postinstall": "node scripts/copy-monaco.js && node scripts/link-prisma.js"
49
+ "postinstall": "node scripts/copy-monaco.js && node scripts/generate-prisma-client.js && node scripts/link-prisma.js"
44
50
  },
45
51
  "pnpm": {
46
52
  "onlyBuiltDependencies": [
@@ -83,11 +89,13 @@
83
89
  "react-resizable-panels": "^2.1.9",
84
90
  "react-reverse-portal": "^2.3.0",
85
91
  "remark-gfm": "^4.0.1",
92
+ "prisma": "^6.19.2",
86
93
  "shadcn": "^4.1.0",
87
94
  "simple-git": "^3.36.0",
88
95
  "sonner": "^2.0.7",
89
96
  "tailwind-merge": "^3.5.0",
90
97
  "tw-animate-css": "^1.4.0",
98
+ "tsx": "^4.21.0",
91
99
  "ws": "^8.20.0",
92
100
  "zod": "^4.3.6",
93
101
  "zustand": "^5.0.12"
@@ -110,9 +118,7 @@
110
118
  "eslint": "^9",
111
119
  "eslint-config-next": "16.2.1",
112
120
  "jsdom": "^29.0.1",
113
- "prisma": "^6.19.2",
114
121
  "tailwindcss": "^4",
115
- "tsx": "^4.21.0",
116
122
  "typescript": "^5",
117
123
  "vitest": "^4.1.1"
118
124
  }
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ const { execFileSync } = require("child_process");
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+
6
+ const packageRoot = path.join(__dirname, "..");
7
+
8
+ function resolvePrismaBin() {
9
+ const pkgJsonPath = require.resolve("prisma/package.json", { paths: [packageRoot] });
10
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
11
+ const binField = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.prisma;
12
+
13
+ if (!binField) {
14
+ throw new Error("No prisma bin entry found");
15
+ }
16
+
17
+ return path.resolve(path.dirname(pkgJsonPath), binField);
18
+ }
19
+
20
+ function hasGeneratedClient() {
21
+ try {
22
+ require.resolve(".prisma/client/default", { paths: [packageRoot] });
23
+ return true;
24
+ } catch {
25
+ return false;
26
+ }
27
+ }
28
+
29
+ if (hasGeneratedClient()) {
30
+ console.log("[generate-prisma] Prisma client already generated");
31
+ process.exit(0);
32
+ }
33
+
34
+ try {
35
+ execFileSync(process.execPath, [resolvePrismaBin(), "generate", "--schema", "prisma/schema.prisma"], {
36
+ cwd: packageRoot,
37
+ stdio: "inherit",
38
+ env: process.env,
39
+ });
40
+ } catch (error) {
41
+ console.warn(`[generate-prisma] Failed to generate Prisma client: ${error.message}`);
42
+ process.exit(0);
43
+ }
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Turbopack may rewrite external package names with content hashes
4
+ * (for example `@prisma/client-<hash>` or `node-pty-<hash>`).
5
+ * This script scans the build output and creates symlinks so Node.js
6
+ * can resolve those hashed names at runtime after global install.
7
+ */
8
+ const fs = require("fs");
9
+ const path = require("path");
10
+
11
+ const packageRoot = path.join(__dirname, "..");
12
+ const serverDir = path.join(packageRoot, ".next", "server");
13
+ const supportedPackages = [
14
+ "@prisma/client",
15
+ "node-pty",
16
+ "@vscode/ripgrep",
17
+ "ws",
18
+ ];
19
+
20
+ if (!fs.existsSync(serverDir)) {
21
+ process.exit(0);
22
+ }
23
+
24
+ function escapeRegExp(value) {
25
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
26
+ }
27
+
28
+ function collectJsFiles(dir, result = []) {
29
+ if (!fs.existsSync(dir)) return result;
30
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
31
+ const full = path.join(dir, entry.name);
32
+ if (entry.isDirectory()) {
33
+ collectJsFiles(full, result);
34
+ } else if (entry.name.endsWith(".js")) {
35
+ result.push(full);
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+
41
+ function detectHashedReferences(files) {
42
+ const matches = new Map();
43
+
44
+ for (const pkg of supportedPackages) {
45
+ matches.set(pkg, new Set());
46
+ }
47
+
48
+ for (const file of files) {
49
+ const content = fs.readFileSync(file, "utf-8");
50
+ for (const pkg of supportedPackages) {
51
+ const pattern = new RegExp(`${escapeRegExp(pkg)}-([0-9a-f]+)`, "g");
52
+ let match;
53
+ while ((match = pattern.exec(content)) !== null) {
54
+ matches.get(pkg).add(match[1]);
55
+ }
56
+ }
57
+ }
58
+
59
+ return matches;
60
+ }
61
+
62
+ function getPackageParts(pkg) {
63
+ if (pkg.startsWith("@")) {
64
+ const [scope, name] = pkg.split("/");
65
+ return { scope, name };
66
+ }
67
+
68
+ return { scope: null, name: pkg };
69
+ }
70
+
71
+ function getVisiblePackageDir(pkg) {
72
+ const { scope, name } = getPackageParts(pkg);
73
+ return scope
74
+ ? path.join(packageRoot, "node_modules", scope, name)
75
+ : path.join(packageRoot, "node_modules", name);
76
+ }
77
+
78
+ function collectAliasTargets(pkg) {
79
+ const pkgJsonPath = require.resolve(`${pkg}/package.json`, { paths: [packageRoot] });
80
+ const realPackageDir = path.dirname(pkgJsonPath);
81
+ const visiblePackageDir = getVisiblePackageDir(pkg);
82
+ const candidates = new Map();
83
+
84
+ if (fs.existsSync(visiblePackageDir)) {
85
+ candidates.set(visiblePackageDir, path.dirname(visiblePackageDir));
86
+ }
87
+
88
+ candidates.set(realPackageDir, path.dirname(realPackageDir));
89
+
90
+ return {
91
+ targetDir: visiblePackageDir,
92
+ aliasBaseDirs: [...candidates.values()],
93
+ packageName: getPackageParts(pkg).name,
94
+ };
95
+ }
96
+
97
+ function linkHashedPackage(pkg, hash) {
98
+ let paths;
99
+ try {
100
+ paths = collectAliasTargets(pkg);
101
+ } catch (error) {
102
+ console.warn(`[link-prisma] Cannot resolve ${pkg}: ${error.message}`);
103
+ return;
104
+ }
105
+
106
+ if (!fs.existsSync(paths.targetDir)) {
107
+ console.warn(`[link-prisma] Target package directory missing for ${pkg}, skipping`);
108
+ return;
109
+ }
110
+
111
+ const linkName = `${paths.packageName}-${hash}`;
112
+
113
+ for (const aliasBaseDir of paths.aliasBaseDirs) {
114
+ const linkPath = path.join(aliasBaseDir, linkName);
115
+ if (fs.existsSync(linkPath)) {
116
+ console.log(`[link-prisma] ${pkg}-${hash} already exists in ${aliasBaseDir}`);
117
+ continue;
118
+ }
119
+
120
+ try {
121
+ fs.symlinkSync(paths.targetDir, linkPath, "junction");
122
+ console.log(`[link-prisma] Linked ${pkg}-${hash} -> ${pkg} in ${aliasBaseDir}`);
123
+ } catch (error) {
124
+ console.warn(
125
+ `[link-prisma] Failed to create symlink for ${pkg}-${hash} in ${aliasBaseDir}: ${error.message}`
126
+ );
127
+ }
128
+ }
129
+ }
130
+
131
+ const jsFiles = collectJsFiles(serverDir);
132
+ const references = detectHashedReferences(jsFiles);
133
+ let createdAny = false;
134
+
135
+ for (const [pkg, hashes] of references.entries()) {
136
+ for (const hash of hashes) {
137
+ createdAny = true;
138
+ linkHashedPackage(pkg, hash);
139
+ }
140
+ }
141
+
142
+ if (!createdAny) {
143
+ console.log("[link-prisma] No hashed external package references found, skipping");
144
+ }
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower PostToolUse Hook
4
+ *
5
+ * Claude Code PostToolUse hook that auto-captures file outputs as task assets.
6
+ * When Claude writes/edits a file matching the configured extension whitelist,
7
+ * this hook uploads it to Tower's internal API for asset tracking.
8
+ *
9
+ * Environment:
10
+ * TOWER_TASK_ID - Required. The task ID to associate the asset with.
11
+ * TOWER_API_URL - Required. Base URL of the Tower server (e.g. http://localhost:3000).
12
+ *
13
+ * Stdin: JSON object from Claude Code with { tool_name, tool_input, session_id, cwd, ... }
14
+ * Exit: Always 0 (hook must never block Claude Code).
15
+ */
16
+
17
+ "use strict";
18
+
19
+ const fs = require("fs");
20
+ const path = require("path");
21
+ const http = require("http");
22
+ const https = require("https");
23
+
24
+ const DEFAULT_TYPES = ["png", "jpg", "jpeg", "gif", "webp", "svg", "pdf", "md", "txt", "json"];
25
+ const FILE_WRITE_TOOLS = new Set(["Write", "Edit", "MultiEdit"]);
26
+
27
+ function main() {
28
+ const taskId = process.env.TOWER_TASK_ID;
29
+ if (!taskId) {
30
+ process.exit(0);
31
+ }
32
+
33
+ const apiUrl = process.env.TOWER_API_URL;
34
+ if (!apiUrl) {
35
+ process.exit(0);
36
+ }
37
+
38
+ // SECURITY: Only talk to localhost — refuse remote servers
39
+ try {
40
+ const parsed = new URL(apiUrl);
41
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
42
+ process.exit(0);
43
+ }
44
+ } catch {
45
+ process.exit(0);
46
+ }
47
+
48
+ // Read stdin with timeout
49
+ let input = "";
50
+ const timeout = setTimeout(() => {
51
+ // Stdin timeout — exit silently
52
+ process.exit(0);
53
+ }, 10000);
54
+
55
+ process.stdin.setEncoding("utf8");
56
+ process.stdin.on("data", (chunk) => {
57
+ input += chunk;
58
+ });
59
+
60
+ process.stdin.on("end", () => {
61
+ clearTimeout(timeout);
62
+ processInput(input, taskId, apiUrl);
63
+ });
64
+
65
+ process.stdin.on("error", () => {
66
+ clearTimeout(timeout);
67
+ process.exit(0);
68
+ });
69
+
70
+ // If stdin is not a pipe (e.g., running interactively), exit
71
+ if (process.stdin.isTTY) {
72
+ clearTimeout(timeout);
73
+ process.exit(0);
74
+ }
75
+ }
76
+
77
+ function processInput(input, taskId, apiUrl) {
78
+ let data;
79
+ try {
80
+ data = JSON.parse(input);
81
+ } catch {
82
+ process.exit(0);
83
+ }
84
+
85
+ const toolName = data.tool_name;
86
+ if (!toolName || !FILE_WRITE_TOOLS.has(toolName)) {
87
+ process.exit(0);
88
+ }
89
+
90
+ const filePath = data.tool_input && data.tool_input.file_path;
91
+ if (!filePath) {
92
+ process.exit(0);
93
+ }
94
+
95
+ // Resolve to absolute path
96
+ const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(data.cwd || process.cwd(), filePath);
97
+
98
+ // Check extension against whitelist
99
+ const ext = path.extname(absolutePath).slice(1).toLowerCase();
100
+ if (!ext) {
101
+ process.exit(0);
102
+ }
103
+
104
+ // Try to fetch config from Tower, fall back to defaults
105
+ fetchAllowedTypes(apiUrl, (types) => {
106
+ if (!types.includes(ext)) {
107
+ process.exit(0);
108
+ }
109
+
110
+ // Check file exists
111
+ try {
112
+ fs.statSync(absolutePath);
113
+ } catch {
114
+ process.exit(0);
115
+ }
116
+
117
+ // Upload to Tower
118
+ uploadFile(apiUrl, taskId, absolutePath);
119
+ });
120
+ }
121
+
122
+ function fetchAllowedTypes(apiUrl, callback) {
123
+ const url = apiUrl + "/api/internal/hooks/upload";
124
+ const mod = url.startsWith("https") ? https : http;
125
+
126
+ const req = mod.get(url, (res) => {
127
+ let body = "";
128
+ res.on("data", (chunk) => { body += chunk; });
129
+ res.on("end", () => {
130
+ try {
131
+ const json = JSON.parse(body);
132
+ if (Array.isArray(json.types)) {
133
+ callback(json.types);
134
+ return;
135
+ }
136
+ } catch {
137
+ // Fall through to defaults
138
+ }
139
+ callback(DEFAULT_TYPES);
140
+ });
141
+ });
142
+
143
+ req.on("error", () => {
144
+ callback(DEFAULT_TYPES);
145
+ });
146
+
147
+ req.setTimeout(3000, () => {
148
+ req.destroy();
149
+ callback(DEFAULT_TYPES);
150
+ });
151
+ }
152
+
153
+ function uploadFile(apiUrl, taskId, filePath) {
154
+ const url = new URL("/api/internal/hooks/upload", apiUrl);
155
+ const payload = JSON.stringify({ taskId, filePath });
156
+ const mod = url.protocol === "https:" ? https : http;
157
+
158
+ const options = {
159
+ hostname: url.hostname,
160
+ port: url.port,
161
+ path: url.pathname,
162
+ method: "POST",
163
+ headers: {
164
+ "Content-Type": "application/json",
165
+ "Content-Length": Buffer.byteLength(payload),
166
+ },
167
+ timeout: 5000,
168
+ };
169
+
170
+ const req = mod.request(options, () => {
171
+ // Response doesn't matter — fire and forget
172
+ process.exit(0);
173
+ });
174
+
175
+ req.on("error", () => {
176
+ process.exit(0);
177
+ });
178
+
179
+ req.on("timeout", () => {
180
+ req.destroy();
181
+ process.exit(0);
182
+ });
183
+
184
+ req.write(payload);
185
+ req.end();
186
+ }
187
+
188
+ main();
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower SessionStart Hook
4
+ *
5
+ * Reports the Claude CLI session_id to Tower's API so resume/continue works.
6
+ * Runs once when a Claude Code session starts.
7
+ *
8
+ * Environment:
9
+ * TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
10
+ * TOWER_API_URL - Required. Base URL of the Tower server.
11
+ *
12
+ * Stdin: JSON object from Claude Code with { session_id, cwd, ... }
13
+ */
14
+
15
+ "use strict";
16
+
17
+ const http = require("http");
18
+ const https = require("https");
19
+
20
+ function main() {
21
+ const taskId = process.env.TOWER_TASK_ID;
22
+ if (!taskId) process.exit(0);
23
+
24
+ const apiUrl = process.env.TOWER_API_URL;
25
+ if (!apiUrl) process.exit(0);
26
+
27
+ // Validate localhost
28
+ try {
29
+ const parsed = new URL(apiUrl);
30
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
31
+ process.exit(0);
32
+ }
33
+ } catch {
34
+ process.exit(0);
35
+ }
36
+
37
+ let input = "";
38
+ const timeout = setTimeout(() => process.exit(0), 5000);
39
+
40
+ process.stdin.setEncoding("utf8");
41
+ process.stdin.on("data", (chunk) => { input += chunk; });
42
+
43
+ process.stdin.on("end", () => {
44
+ clearTimeout(timeout);
45
+
46
+ let data;
47
+ try { data = JSON.parse(input); } catch { process.exit(0); }
48
+
49
+ const sessionId = data.session_id;
50
+ if (!sessionId) process.exit(0);
51
+
52
+ // POST sessionId to Tower
53
+ const url = new URL("/api/internal/hooks/session", apiUrl);
54
+ const payload = JSON.stringify({ taskId, sessionId });
55
+ const mod = url.protocol === "https:" ? https : http;
56
+
57
+ const req = mod.request({
58
+ hostname: url.hostname,
59
+ port: url.port,
60
+ path: url.pathname,
61
+ method: "POST",
62
+ headers: {
63
+ "Content-Type": "application/json",
64
+ "Content-Length": Buffer.byteLength(payload),
65
+ },
66
+ timeout: 3000,
67
+ }, () => process.exit(0));
68
+
69
+ req.on("error", () => process.exit(0));
70
+ req.on("timeout", () => { req.destroy(); process.exit(0); });
71
+ req.write(payload);
72
+ req.end();
73
+ });
74
+
75
+ process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
76
+ if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
77
+ }
78
+
79
+ main();
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tower Stop Hook
4
+ *
5
+ * Claude Code Stop hook that fires when Claude finishes responding.
6
+ * Notifies Tower so the UI can show a "response complete" indicator.
7
+ *
8
+ * Environment:
9
+ * TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
10
+ * TOWER_API_URL - Required. Base URL of the Tower server.
11
+ *
12
+ * Stdin: JSON object from Claude Code with { session_id, cwd, ... }
13
+ */
14
+
15
+ "use strict";
16
+
17
+ const http = require("http");
18
+ const https = require("https");
19
+
20
+ function main() {
21
+ const taskId = process.env.TOWER_TASK_ID;
22
+ if (!taskId) process.exit(0);
23
+
24
+ const apiUrl = process.env.TOWER_API_URL;
25
+ if (!apiUrl) process.exit(0);
26
+
27
+ // SECURITY: Only talk to localhost
28
+ try {
29
+ const parsed = new URL(apiUrl);
30
+ if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
31
+ process.exit(0);
32
+ }
33
+ } catch {
34
+ process.exit(0);
35
+ }
36
+
37
+ let input = "";
38
+ const timeout = setTimeout(() => process.exit(0), 5000);
39
+
40
+ process.stdin.setEncoding("utf8");
41
+ process.stdin.on("data", (chunk) => { input += chunk; });
42
+
43
+ process.stdin.on("end", () => {
44
+ clearTimeout(timeout);
45
+
46
+ let data;
47
+ try { data = JSON.parse(input); } catch { process.exit(0); }
48
+
49
+ const sessionId = data.session_id || "";
50
+
51
+ // POST to Tower
52
+ const url = new URL("/api/internal/hooks/stop", apiUrl);
53
+ const payload = JSON.stringify({ taskId, sessionId });
54
+ const mod = url.protocol === "https:" ? https : http;
55
+
56
+ const req = mod.request({
57
+ hostname: url.hostname,
58
+ port: url.port,
59
+ path: url.pathname,
60
+ method: "POST",
61
+ headers: {
62
+ "Content-Type": "application/json",
63
+ "Content-Length": Buffer.byteLength(payload),
64
+ },
65
+ timeout: 3000,
66
+ }, () => process.exit(0));
67
+
68
+ req.on("error", () => process.exit(0));
69
+ req.on("timeout", () => { req.destroy(); process.exit(0); });
70
+ req.write(payload);
71
+ req.end();
72
+ });
73
+
74
+ process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
75
+ if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
76
+ }
77
+
78
+ main();