tower-studio 0.1.9 → 0.1.10

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 (189) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +46 -46
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/prerender-manifest.json +3 -3
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  17. package/.next/server/app/_not-found/page/server-reference-manifest.json +23 -23
  18. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/_not-found.html +1 -1
  21. package/.next/server/app/_not-found.rsc +14 -14
  22. package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  23. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  24. package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
  25. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  26. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  27. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
  29. package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  30. package/.next/server/app/api/git/route.js.nft.json +1 -1
  31. package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  32. package/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  33. package/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  34. package/.next/server/app/api/internal/assistant/images/route.js.nft.json +1 -1
  35. package/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  36. package/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  37. package/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  38. package/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  39. package/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  40. package/.next/server/app/index.html +1 -1
  41. package/.next/server/app/index.rsc +14 -14
  42. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/index.segments/_full.segment.rsc +14 -14
  44. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  45. package/.next/server/app/index.segments/_index.segment.rsc +9 -9
  46. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  47. package/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  48. package/.next/server/app/missions/page/server-reference-manifest.json +50 -50
  49. package/.next/server/app/missions/page.js.nft.json +1 -1
  50. package/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  52. package/.next/server/app/onboarding/page/server-reference-manifest.json +23 -23
  53. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  54. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/onboarding.html +1 -1
  56. package/.next/server/app/onboarding.rsc +16 -16
  57. package/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
  58. package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  59. package/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
  60. package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
  61. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  62. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  63. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  64. package/.next/server/app/page/server-reference-manifest.json +23 -23
  65. package/.next/server/app/page.js.nft.json +1 -1
  66. package/.next/server/app/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  68. package/.next/server/app/settings/page/server-reference-manifest.json +32 -32
  69. package/.next/server/app/settings/page.js.nft.json +1 -1
  70. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/settings.html +1 -1
  72. package/.next/server/app/settings.rsc +16 -16
  73. package/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  74. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  75. package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
  76. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  77. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  78. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  79. package/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  80. package/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +75 -75
  81. package/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  82. package/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  83. package/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  84. package/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +64 -64
  85. package/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  86. package/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  87. package/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  88. package/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +49 -49
  89. package/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  90. package/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  91. package/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  92. package/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +51 -51
  93. package/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  94. package/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  95. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  96. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +23 -23
  97. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  98. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  99. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +1 -1
  100. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +56 -56
  101. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  102. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  104. package/.next/server/app/workspaces/page/server-reference-manifest.json +39 -39
  105. package/.next/server/app/workspaces/page.js.nft.json +1 -1
  106. package/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  107. package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13~vb_i.js +2 -2
  108. package/.next/server/chunks/[root-of-the-server]__043lk8~._.js +2 -2
  109. package/.next/server/chunks/ssr/0~.g_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_0bbseig._.js +1 -1
  110. package/.next/server/chunks/ssr/[root-of-the-server]__0.8y0n9._.js +1 -1
  111. package/.next/server/chunks/ssr/[root-of-the-server]__01ws4-7._.js +1 -1
  112. package/.next/server/chunks/ssr/[root-of-the-server]__02ipahf._.js +1 -1
  113. package/.next/server/chunks/ssr/{[root-of-the-server]__0i1tzvg._.js → [root-of-the-server]__08_0ex9._.js} +2 -2
  114. package/.next/server/chunks/ssr/[root-of-the-server]__0bk3s4l._.js +1 -1
  115. package/.next/server/chunks/ssr/{[root-of-the-server]__0i52qt7._.js → [root-of-the-server]__0bo1n69._.js} +2 -2
  116. package/.next/server/chunks/ssr/[root-of-the-server]__0ld6_w6._.js +3 -0
  117. package/.next/server/chunks/ssr/[root-of-the-server]__0l~dc3x._.js +1 -1
  118. package/.next/server/chunks/ssr/[root-of-the-server]__0rs7pkn._.js +1 -1
  119. package/.next/server/chunks/ssr/[root-of-the-server]__0sysz2q._.js +3 -3
  120. package/.next/server/chunks/ssr/[root-of-the-server]__0y-lkvf._.js +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__12f810l._.js +1 -1
  122. package/.next/server/chunks/ssr/tower_0donrdk._.js +3 -0
  123. package/.next/server/chunks/ssr/{tower_0cmuq4n._.js → tower_0i9k4a6._.js} +2 -2
  124. package/.next/server/chunks/ssr/tower_0kl_bfy._.js +1 -1
  125. package/.next/server/chunks/ssr/tower_0m_uudm._.js +3 -0
  126. package/.next/server/chunks/ssr/{tower_0tjo~2z._.js → tower_0mn8ig7._.js} +2 -2
  127. package/.next/server/chunks/ssr/tower_0mz4ut.._.js +1 -1
  128. package/.next/server/chunks/ssr/tower_0pcqezm._.js +1 -1
  129. package/.next/server/chunks/ssr/{tower_0.csoof._.js → tower_0pmey24._.js} +2 -2
  130. package/.next/server/chunks/ssr/{tower_0c8unc1._.js → tower_0ut7r._._.js} +2 -2
  131. package/.next/server/chunks/ssr/tower_0wvk~r.._.js +1 -1
  132. package/.next/server/chunks/ssr/tower_10p15te._.js +1 -1
  133. package/.next/server/chunks/ssr/tower_117pzh8._.js +1 -1
  134. package/.next/server/chunks/ssr/tower_11q5_.m._.js +1 -1
  135. package/.next/server/chunks/ssr/tower_138qlx5._.js +1 -1
  136. package/.next/server/chunks/ssr/tower_src_077qk8s._.js +3 -0
  137. package/.next/server/chunks/ssr/tower_src_actions_agent-actions_ts_0j.e1tn._.js +1 -1
  138. package/.next/server/chunks/ssr/tower_src_actions_file-actions_ts_0424lna._.js +1 -1
  139. package/.next/server/chunks/ssr/tower_src_app_missions_missions-client_tsx_0a9vjyr._.js +1 -1
  140. package/.next/server/chunks/ssr/tower_src_app_onboarding_page_tsx_0_3krz1._.js +1 -1
  141. package/.next/server/chunks/ssr/tower_src_app_settings_page_tsx_0vo5e-o._.js +1 -1
  142. package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0zfgzhi._.js +1 -1
  143. package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0kjp1u0._.js +1 -1
  144. package/.next/server/chunks/tower_0a-x6m.._.js +1 -1
  145. package/.next/server/chunks/tower_src_0..vg-t._.js +1 -1
  146. package/.next/server/instrumentation.js.nft.json +1 -1
  147. package/.next/server/middleware-build-manifest.js +3 -3
  148. package/.next/server/pages/404.html +1 -1
  149. package/.next/server/pages/500.html +1 -1
  150. package/.next/server/server-reference-manifest.js +1 -1
  151. package/.next/server/server-reference-manifest.json +186 -186
  152. package/.next/static/chunks/{01499ombtjk9..js → 0-z_mj0p3..hy.js} +1 -1
  153. package/.next/static/chunks/{0drgc-oztq6o-.css → 04pjsuj.mivbh.css} +1 -1
  154. package/.next/static/chunks/{04zt_ewq9gd.f.js → 053~3fys7om-7.js} +2 -2
  155. package/.next/static/chunks/0887ab.hh21q9.js +1 -0
  156. package/.next/static/chunks/0c7oqfzd78s3-.js +1 -0
  157. package/.next/static/chunks/{12p4plfwlovc5.js → 0g4scpy5b3a_n.js} +1 -1
  158. package/.next/static/chunks/{0uukquowg_doj.js → 0ho7y42kl8m7v.js} +1 -1
  159. package/.next/static/chunks/0iudqcn98ftki.js +1 -0
  160. package/.next/static/chunks/{0jod832.e8dvp.js → 0j~wmjbqds1dv.js} +1 -1
  161. package/.next/static/chunks/0mvu29h4.06~b.js +1 -0
  162. package/.next/static/chunks/{07ll8eylriw_..js → 0rej~f94o9a~6.js} +1 -1
  163. package/.next/static/chunks/{0_dgukndtuspa.js → 0xi0wi2z6otp9.js} +1 -1
  164. package/.next/static/chunks/{0465wja5wuj_t.js → 16qoc.u84jlcd.js} +1 -1
  165. package/.next/static/chunks/17tob96chk6i1.js +1 -0
  166. package/.next/static/chunks/17zywpt-0o8gl.js +1 -0
  167. package/.next/static/chunks/{0o0v~cegree8o.js → 185n7s7fwb2j_.js} +1 -1
  168. package/.next/trace +2 -2
  169. package/.next/trace-build +1 -1
  170. package/bin/tower.mjs +36 -8
  171. package/package.json +10 -4
  172. package/scripts/generate-prisma-client.js +43 -0
  173. package/scripts/link-prisma.js +144 -0
  174. package/scripts/post-tool-hook.js +188 -0
  175. package/scripts/session-start-hook.js +79 -0
  176. package/scripts/stop-hook.js +78 -0
  177. package/.next/server/chunks/ssr/[root-of-the-server]__0yuwh~5._.js +0 -3
  178. package/.next/server/chunks/ssr/tower_005_jvc._.js +0 -3
  179. package/.next/server/chunks/ssr/tower_0ih8lcc._.js +0 -3
  180. package/.next/server/chunks/ssr/tower_src_0lq.aoc._.js +0 -3
  181. package/.next/static/chunks/08kdkf9zhbx5h.js +0 -1
  182. package/.next/static/chunks/0focg9l2pd5qe.js +0 -1
  183. package/.next/static/chunks/0v593lcts~8.5.js +0 -1
  184. package/.next/static/chunks/0yz33_rbgu2sz.js +0 -1
  185. package/.next/static/chunks/0~2w0fbj7o3fv.js +0 -1
  186. package/.next/static/chunks/13juk.piouzom.js +0 -1
  187. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → KX5Si-44bPnjdFNmiHDRY}/_buildManifest.js +0 -0
  188. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → KX5Si-44bPnjdFNmiHDRY}/_clientMiddlewareManifest.js +0 -0
  189. /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → KX5Si-44bPnjdFNmiHDRY}/_ssgManifest.js +0 -0
package/.next/trace CHANGED
@@ -1,2 +1,2 @@
1
- [{"name":"generate-buildid","duration":125,"timestamp":1563988083588,"id":4,"parentId":1,"tags":{},"startTime":1777346500829,"traceId":"cb79c462853c3b82"},{"name":"load-custom-routes","duration":216,"timestamp":1563988083836,"id":5,"parentId":1,"tags":{},"startTime":1777346500829,"traceId":"cb79c462853c3b82"},{"name":"create-dist-dir","duration":249,"timestamp":1563988084068,"id":6,"parentId":1,"tags":{},"startTime":1777346500830,"traceId":"cb79c462853c3b82"},{"name":"clean","duration":143,"timestamp":1563988085249,"id":7,"parentId":1,"tags":{},"startTime":1777346500831,"traceId":"cb79c462853c3b82"},{"name":"discover-routes","duration":10912,"timestamp":1563988091462,"id":8,"parentId":1,"tags":{},"startTime":1777346500837,"traceId":"cb79c462853c3b82"},{"name":"create-root-mapping","duration":50,"timestamp":1563988102403,"id":9,"parentId":1,"tags":{},"startTime":1777346500848,"traceId":"cb79c462853c3b82"},{"name":"generate-route-types","duration":37410,"timestamp":1563988103555,"id":10,"parentId":1,"tags":{},"startTime":1777346500849,"traceId":"cb79c462853c3b82"},{"name":"public-dir-conflict-check","duration":74,"timestamp":1563988141114,"id":11,"parentId":1,"tags":{},"startTime":1777346500887,"traceId":"cb79c462853c3b82"},{"name":"generate-routes-manifest","duration":1959,"timestamp":1563988141233,"id":12,"parentId":1,"tags":{},"startTime":1777346500887,"traceId":"cb79c462853c3b82"},{"name":"run-turbopack","duration":11416611,"timestamp":1563988147272,"id":14,"parentId":1,"tags":{},"startTime":1777346500893,"traceId":"cb79c462853c3b82"},{"name":"turbopack-build-events","duration":44,"timestamp":1563988313372,"id":15,"parentId":1,"tags":{},"startTime":1777346501059,"traceId":"cb79c462853c3b82"},{"name":"run-typescript","duration":6616168,"timestamp":1563999619079,"id":16,"parentId":1,"tags":{},"startTime":1777346512365,"traceId":"cb79c462853c3b82"},{"name":"generate-required-server-files","duration":935,"timestamp":1564006235663,"id":18,"parentId":1,"tags":{},"startTime":1777346518981,"traceId":"cb79c462853c3b82"},{"name":"check-static-error-page","duration":22859,"timestamp":1564006250492,"id":20,"parentId":19,"tags":{},"startTime":1777346518996,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":212907,"timestamp":1564006275163,"id":61,"parentId":22,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":234013,"timestamp":1564006254107,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1777346519000,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":292879,"timestamp":1564006275331,"id":65,"parentId":26,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":310119,"timestamp":1564006258121,"id":26,"parentId":19,"tags":{"page":"/api/git"},"startTime":1777346519004,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":293037,"timestamp":1564006275241,"id":64,"parentId":25,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":310314,"timestamp":1564006257975,"id":25,"parentId":19,"tags":{"page":"/api/files/assets/[projectId]/[filename]"},"startTime":1777346519003,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":293098,"timestamp":1564006275216,"id":63,"parentId":24,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":313832,"timestamp":1564006254487,"id":24,"parentId":19,"tags":{"page":"/api/browse-fs"},"startTime":1777346519000,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":302931,"timestamp":1564006275445,"id":68,"parentId":44,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":313543,"timestamp":1564006264865,"id":44,"parentId":19,"tags":{"page":"/apple-icon.png"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":313969,"timestamp":1564006275557,"id":71,"parentId":47,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":319323,"timestamp":1564006270232,"id":47,"parentId":19,"tags":{"page":"/icon1.png"},"startTime":1777346519016,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":315466,"timestamp":1564006275432,"id":67,"parentId":43,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":326093,"timestamp":1564006264824,"id":43,"parentId":19,"tags":{"page":"/api/tasks/[taskId]/merge"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":315498,"timestamp":1564006275537,"id":69,"parentId":45,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":324970,"timestamp":1564006266072,"id":45,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1777346519011,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":315971,"timestamp":1564006275559,"id":72,"parentId":48,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":319159,"timestamp":1564006272390,"id":48,"parentId":19,"tags":{"page":"/manifest.json"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":316861,"timestamp":1564006277298,"id":73,"parentId":28,"tags":{},"startTime":1777346519023,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":332699,"timestamp":1564006261488,"id":28,"parentId":19,"tags":{"page":"/api/internal/assets/reveal"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":318744,"timestamp":1564006277681,"id":75,"parentId":32,"tags":{},"startTime":1777346519023,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":334476,"timestamp":1564006262007,"id":32,"parentId":19,"tags":{"page":"/api/internal/assistant/sessions"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":322131,"timestamp":1564006277857,"id":76,"parentId":33,"tags":{},"startTime":1777346519023,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":337940,"timestamp":1564006262069,"id":33,"parentId":19,"tags":{"page":"/api/internal/cache/[...segments]"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":325924,"timestamp":1564006275193,"id":62,"parentId":23,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":346709,"timestamp":1564006254431,"id":23,"parentId":19,"tags":{"page":"/api/adapters/test"},"startTime":1777346519000,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":323032,"timestamp":1564006278144,"id":77,"parentId":34,"tags":{},"startTime":1777346519024,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":339054,"timestamp":1564006262128,"id":34,"parentId":19,"tags":{"page":"/api/internal/hooks/install"},"startTime":1777346519008,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":325025,"timestamp":1564006278316,"id":78,"parentId":35,"tags":{},"startTime":1777346519024,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":340945,"timestamp":1564006262410,"id":35,"parentId":19,"tags":{"page":"/api/internal/hooks/session"},"startTime":1777346519008,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":330400,"timestamp":1564006275034,"id":60,"parentId":21,"tags":{},"startTime":1777346519020,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":352077,"timestamp":1564006253397,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1777346518999,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":330571,"timestamp":1564006275400,"id":66,"parentId":42,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":341233,"timestamp":1564006264774,"id":42,"parentId":19,"tags":{"page":"/api/tasks/[taskId]/diff"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":322806,"timestamp":1564006283419,"id":81,"parentId":38,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":341658,"timestamp":1564006264588,"id":38,"parentId":19,"tags":{"page":"/api/internal/notifications/pending"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":333689,"timestamp":1564006275552,"id":70,"parentId":46,"tags":{},"startTime":1777346519021,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":342932,"timestamp":1564006266332,"id":46,"parentId":19,"tags":{"page":"/icon0.svg"},"startTime":1777346519012,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":339240,"timestamp":1564006277550,"id":74,"parentId":31,"tags":{},"startTime":1777346519023,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":354904,"timestamp":1564006261945,"id":31,"parentId":19,"tags":{"page":"/api/internal/assistant"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":333698,"timestamp":1564006283304,"id":80,"parentId":37,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":352494,"timestamp":1564006264524,"id":37,"parentId":19,"tags":{"page":"/api/internal/hooks/upload"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":333351,"timestamp":1564006283783,"id":83,"parentId":40,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":352464,"timestamp":1564006264692,"id":40,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/input"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":333340,"timestamp":1564006283902,"id":84,"parentId":41,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":352552,"timestamp":1564006264734,"id":41,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/start"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":335208,"timestamp":1564006284058,"id":85,"parentId":27,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":360995,"timestamp":1564006258291,"id":27,"parentId":19,"tags":{"page":"/api/internal/assets/[projectId]/[filename]"},"startTime":1777346519004,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":336436,"timestamp":1564006286676,"id":86,"parentId":29,"tags":{},"startTime":1777346519032,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":361479,"timestamp":1564006261652,"id":29,"parentId":19,"tags":{"page":"/api/internal/assistant/chat"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":364533,"timestamp":1564006278477,"id":79,"parentId":36,"tags":{},"startTime":1777346519024,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":378614,"timestamp":1564006264420,"id":36,"parentId":19,"tags":{"page":"/api/internal/hooks/stop"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":363831,"timestamp":1564006286908,"id":87,"parentId":30,"tags":{},"startTime":1777346519032,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":388917,"timestamp":1564006261868,"id":30,"parentId":19,"tags":{"page":"/api/internal/assistant/images"},"startTime":1777346519007,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":367080,"timestamp":1564006287511,"id":88,"parentId":50,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":381802,"timestamp":1564006272812,"id":50,"parentId":19,"tags":{"page":"/onboarding"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":367147,"timestamp":1564006287517,"id":89,"parentId":51,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":381702,"timestamp":1564006272967,"id":51,"parentId":19,"tags":{"page":"/"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":378841,"timestamp":1564006283641,"id":82,"parentId":39,"tags":{},"startTime":1777346519029,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":397861,"timestamp":1564006264646,"id":39,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/buffer"},"startTime":1777346519010,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":377659,"timestamp":1564006287532,"id":95,"parentId":58,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":391963,"timestamp":1564006273253,"id":58,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/tasks/[taskId]"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":381266,"timestamp":1564006287535,"id":96,"parentId":49,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":396176,"timestamp":1564006272660,"id":49,"parentId":19,"tags":{"page":"/missions"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":382608,"timestamp":1564006287521,"id":90,"parentId":52,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":397217,"timestamp":1564006273013,"id":52,"parentId":19,"tags":{"page":"/settings"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":385745,"timestamp":1564006287523,"id":91,"parentId":53,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":400240,"timestamp":1564006273048,"id":53,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/archive"},"startTime":1777346519018,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":386881,"timestamp":1564006287530,"id":94,"parentId":56,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":401274,"timestamp":1564006273154,"id":56,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":388269,"timestamp":1564006287937,"id":98,"parentId":57,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":403058,"timestamp":1564006273191,"id":57,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/projects/[projectId]"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":396978,"timestamp":1564006287538,"id":97,"parentId":59,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":411246,"timestamp":1564006273294,"id":59,"parentId":19,"tags":{"page":"/workspaces"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":416805,"timestamp":1564006287525,"id":92,"parentId":54,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":431285,"timestamp":1564006273087,"id":54,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/assets"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"is-page-static","duration":417746,"timestamp":1564006287528,"id":93,"parentId":55,"tags":{},"startTime":1777346519033,"traceId":"cb79c462853c3b82"},{"name":"check-page","duration":432163,"timestamp":1564006273118,"id":55,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/notes"},"startTime":1777346519019,"traceId":"cb79c462853c3b82"},{"name":"static-check","duration":455145,"timestamp":1564006250149,"id":19,"parentId":1,"tags":{},"startTime":1777346518996,"traceId":"cb79c462853c3b82"},{"name":"write-routes-manifest","duration":286,"timestamp":1564006705887,"id":100,"parentId":1,"tags":{},"startTime":1777346519451,"traceId":"cb79c462853c3b82"},{"name":"load-dotenv","duration":14,"timestamp":1564006713181,"id":103,"parentId":102,"tags":{},"startTime":1777346519459,"traceId":"cb79c462853c3b82"},{"name":"run-export-path-map","duration":283,"timestamp":1564006714800,"id":104,"parentId":102,"tags":{},"startTime":1777346519460,"traceId":"cb79c462853c3b82"},{"name":"next-export","duration":279080,"timestamp":1564006712635,"id":102,"parentId":1,"tags":{},"startTime":1777346519458,"traceId":"cb79c462853c3b82"},{"name":"move-exported-app-not-found-","duration":607,"timestamp":1564006992857,"id":105,"parentId":101,"tags":{},"startTime":1777346519738,"traceId":"cb79c462853c3b82"},{"name":"move-exported-app-global-error-","duration":396,"timestamp":1564006993499,"id":106,"parentId":101,"tags":{},"startTime":1777346519739,"traceId":"cb79c462853c3b82"},{"name":"static-generation","duration":286206,"timestamp":1564006708703,"id":101,"parentId":1,"tags":{},"startTime":1777346519454,"traceId":"cb79c462853c3b82"},{"name":"write-routes-manifest","duration":256,"timestamp":1564006995019,"id":107,"parentId":1,"tags":{},"startTime":1777346519740,"traceId":"cb79c462853c3b82"}]
2
- [{"name":"print-tree-view","duration":1809,"timestamp":1564007001609,"id":108,"parentId":1,"tags":{},"startTime":1777346519747,"traceId":"cb79c462853c3b82"},{"name":"write-route-bundle-stats","duration":6758,"timestamp":1564007003433,"id":109,"parentId":1,"tags":{},"startTime":1777346519749,"traceId":"cb79c462853c3b82"},{"name":"telemetry-flush","duration":545014,"timestamp":1564007010204,"id":110,"parentId":1,"tags":{},"startTime":1777346519756,"traceId":"cb79c462853c3b82"},{"name":"next-build","duration":19620827,"timestamp":1563987934408,"id":1,"tags":{"buildMode":"default","version":"16.2.1","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1777346500680,"traceId":"cb79c462853c3b82"}]
1
+ [{"name":"generate-buildid","duration":109,"timestamp":1573076130986,"id":4,"parentId":1,"tags":{},"startTime":1777355588959,"traceId":"798f05024d81318f"},{"name":"load-custom-routes","duration":207,"timestamp":1573076131211,"id":5,"parentId":1,"tags":{},"startTime":1777355588959,"traceId":"798f05024d81318f"},{"name":"create-dist-dir","duration":171,"timestamp":1573076131432,"id":6,"parentId":1,"tags":{},"startTime":1777355588959,"traceId":"798f05024d81318f"},{"name":"clean","duration":147,"timestamp":1573076132261,"id":7,"parentId":1,"tags":{},"startTime":1777355588960,"traceId":"798f05024d81318f"},{"name":"discover-routes","duration":12680,"timestamp":1573076138911,"id":8,"parentId":1,"tags":{},"startTime":1777355588967,"traceId":"798f05024d81318f"},{"name":"create-root-mapping","duration":52,"timestamp":1573076151622,"id":9,"parentId":1,"tags":{},"startTime":1777355588980,"traceId":"798f05024d81318f"},{"name":"generate-route-types","duration":35642,"timestamp":1573076152765,"id":10,"parentId":1,"tags":{},"startTime":1777355588981,"traceId":"798f05024d81318f"},{"name":"public-dir-conflict-check","duration":44,"timestamp":1573076188525,"id":11,"parentId":1,"tags":{},"startTime":1777355589017,"traceId":"798f05024d81318f"},{"name":"generate-routes-manifest","duration":1923,"timestamp":1573076188608,"id":12,"parentId":1,"tags":{},"startTime":1777355589017,"traceId":"798f05024d81318f"},{"name":"run-turbopack","duration":4711064,"timestamp":1573076194176,"id":14,"parentId":1,"tags":{},"startTime":1777355589022,"traceId":"798f05024d81318f"},{"name":"turbopack-build-events","duration":35,"timestamp":1573076355743,"id":15,"parentId":1,"tags":{},"startTime":1777355589184,"traceId":"798f05024d81318f"},{"name":"run-typescript","duration":6939568,"timestamp":1573080968113,"id":16,"parentId":1,"tags":{},"startTime":1777355593796,"traceId":"798f05024d81318f"},{"name":"generate-required-server-files","duration":7011,"timestamp":1573087910414,"id":18,"parentId":1,"tags":{},"startTime":1777355600739,"traceId":"798f05024d81318f"},{"name":"check-static-error-page","duration":28627,"timestamp":1573087936913,"id":20,"parentId":19,"tags":{},"startTime":1777355600765,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":196116,"timestamp":1573087966811,"id":61,"parentId":22,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":217977,"timestamp":1573087945167,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1777355600773,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":246722,"timestamp":1573087966863,"id":63,"parentId":24,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":268128,"timestamp":1573087945519,"id":24,"parentId":19,"tags":{"page":"/api/browse-fs"},"startTime":1777355600774,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":254791,"timestamp":1573087966979,"id":65,"parentId":26,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":276186,"timestamp":1573087945613,"id":26,"parentId":19,"tags":{"page":"/api/git"},"startTime":1777355600774,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":265599,"timestamp":1573087966893,"id":64,"parentId":25,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":286956,"timestamp":1573087945571,"id":25,"parentId":19,"tags":{"page":"/api/files/assets/[projectId]/[filename]"},"startTime":1777355600774,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":265556,"timestamp":1573087967098,"id":68,"parentId":44,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":274593,"timestamp":1573087958084,"id":44,"parentId":19,"tags":{"page":"/apple-icon.png"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":265560,"timestamp":1573087967159,"id":69,"parentId":45,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":272835,"timestamp":1573087959894,"id":45,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1777355600788,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":278228,"timestamp":1573087967180,"id":72,"parentId":48,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":280815,"timestamp":1573087964616,"id":48,"parentId":19,"tags":{"page":"/manifest.json"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":290513,"timestamp":1573087967178,"id":71,"parentId":47,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":293738,"timestamp":1573087963980,"id":47,"parentId":19,"tags":{"page":"/icon1.png"},"startTime":1777355600792,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":295649,"timestamp":1573087966841,"id":62,"parentId":23,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":317190,"timestamp":1573087945445,"id":23,"parentId":19,"tags":{"page":"/api/adapters/test"},"startTime":1777355600774,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":295599,"timestamp":1573087967173,"id":70,"parentId":46,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":302562,"timestamp":1573087960233,"id":46,"parentId":19,"tags":{"page":"/icon0.svg"},"startTime":1777355600788,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":298536,"timestamp":1573087966681,"id":60,"parentId":21,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":320967,"timestamp":1573087944323,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1777355600772,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":299843,"timestamp":1573087968909,"id":76,"parentId":28,"tags":{},"startTime":1777355600797,"traceId":"798f05024d81318f"},{"name":"check-page","duration":321250,"timestamp":1573087947526,"id":28,"parentId":19,"tags":{"page":"/api/internal/assets/reveal"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":312781,"timestamp":1573087967053,"id":66,"parentId":42,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":321932,"timestamp":1573087957931,"id":42,"parentId":19,"tags":{"page":"/api/tasks/[taskId]/diff"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":313261,"timestamp":1573087968532,"id":74,"parentId":31,"tags":{},"startTime":1777355600797,"traceId":"798f05024d81318f"},{"name":"check-page","duration":333862,"timestamp":1573087947946,"id":31,"parentId":19,"tags":{"page":"/api/internal/assistant"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":314017,"timestamp":1573087968698,"id":75,"parentId":32,"tags":{},"startTime":1777355600797,"traceId":"798f05024d81318f"},{"name":"check-page","duration":334718,"timestamp":1573087948008,"id":32,"parentId":19,"tags":{"page":"/api/internal/assistant/sessions"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":314650,"timestamp":1573087969383,"id":78,"parentId":35,"tags":{},"startTime":1777355600797,"traceId":"798f05024d81318f"},{"name":"check-page","duration":332931,"timestamp":1573087951119,"id":35,"parentId":19,"tags":{"page":"/api/internal/hooks/session"},"startTime":1777355600779,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":317386,"timestamp":1573087967086,"id":67,"parentId":43,"tags":{},"startTime":1777355600795,"traceId":"798f05024d81318f"},{"name":"check-page","duration":326506,"timestamp":1573087957982,"id":43,"parentId":19,"tags":{"page":"/api/tasks/[taskId]/merge"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":316185,"timestamp":1573087969552,"id":79,"parentId":27,"tags":{},"startTime":1777355600798,"traceId":"798f05024d81318f"},{"name":"check-page","duration":340095,"timestamp":1573087945683,"id":27,"parentId":19,"tags":{"page":"/api/internal/assets/[projectId]/[filename]"},"startTime":1777355600774,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":312344,"timestamp":1573087974752,"id":83,"parentId":38,"tags":{},"startTime":1777355600803,"traceId":"798f05024d81318f"},{"name":"check-page","duration":329377,"timestamp":1573087957734,"id":38,"parentId":19,"tags":{"page":"/api/internal/notifications/pending"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":312738,"timestamp":1573087974406,"id":81,"parentId":33,"tags":{},"startTime":1777355600803,"traceId":"798f05024d81318f"},{"name":"check-page","duration":339083,"timestamp":1573087948069,"id":33,"parentId":19,"tags":{"page":"/api/internal/cache/[...segments]"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":321941,"timestamp":1573087974892,"id":84,"parentId":39,"tags":{},"startTime":1777355600803,"traceId":"798f05024d81318f"},{"name":"check-page","duration":339091,"timestamp":1573087957794,"id":39,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/buffer"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":321939,"timestamp":1573087975031,"id":85,"parentId":40,"tags":{},"startTime":1777355600803,"traceId":"798f05024d81318f"},{"name":"check-page","duration":339149,"timestamp":1573087957845,"id":40,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/input"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":323367,"timestamp":1573087977870,"id":87,"parentId":37,"tags":{},"startTime":1777355600806,"traceId":"798f05024d81318f"},{"name":"check-page","duration":343671,"timestamp":1573087957589,"id":37,"parentId":19,"tags":{"page":"/api/internal/hooks/upload"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":329240,"timestamp":1573087972057,"id":80,"parentId":29,"tags":{},"startTime":1777355600800,"traceId":"798f05024d81318f"},{"name":"check-page","duration":353656,"timestamp":1573087947648,"id":29,"parentId":19,"tags":{"page":"/api/internal/assistant/chat"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":332812,"timestamp":1573087969204,"id":77,"parentId":34,"tags":{},"startTime":1777355600797,"traceId":"798f05024d81318f"},{"name":"check-page","duration":353906,"timestamp":1573087948122,"id":34,"parentId":19,"tags":{"page":"/api/internal/hooks/install"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":330256,"timestamp":1573087976652,"id":86,"parentId":41,"tags":{},"startTime":1777355600805,"traceId":"798f05024d81318f"},{"name":"check-page","duration":349046,"timestamp":1573087957891,"id":41,"parentId":19,"tags":{"page":"/api/internal/terminal/[taskId]/start"},"startTime":1777355600786,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":341641,"timestamp":1573087968318,"id":73,"parentId":30,"tags":{},"startTime":1777355600796,"traceId":"798f05024d81318f"},{"name":"check-page","duration":362142,"timestamp":1573087947857,"id":30,"parentId":19,"tags":{"page":"/api/internal/assistant/images"},"startTime":1777355600776,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":351771,"timestamp":1573087974672,"id":82,"parentId":36,"tags":{},"startTime":1777355600803,"traceId":"798f05024d81318f"},{"name":"check-page","duration":374848,"timestamp":1573087951639,"id":36,"parentId":19,"tags":{"page":"/api/internal/hooks/stop"},"startTime":1777355600780,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":347956,"timestamp":1573087979437,"id":91,"parentId":53,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":362205,"timestamp":1573087965228,"id":53,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/archive"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":357786,"timestamp":1573087979420,"id":88,"parentId":50,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":372241,"timestamp":1573087964990,"id":50,"parentId":19,"tags":{"page":"/onboarding"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":362238,"timestamp":1573087979432,"id":89,"parentId":51,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":376568,"timestamp":1573087965148,"id":51,"parentId":19,"tags":{"page":"/"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":363195,"timestamp":1573087979435,"id":90,"parentId":52,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":377468,"timestamp":1573087965195,"id":52,"parentId":19,"tags":{"page":"/settings"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":365299,"timestamp":1573087979453,"id":96,"parentId":49,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":379963,"timestamp":1573087964834,"id":49,"parentId":19,"tags":{"page":"/missions"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":367228,"timestamp":1573087979445,"id":95,"parentId":58,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":381249,"timestamp":1573087965439,"id":58,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/tasks/[taskId]"},"startTime":1777355600794,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":368191,"timestamp":1573087979459,"id":97,"parentId":57,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":382275,"timestamp":1573087965381,"id":57,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/projects/[projectId]"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":379734,"timestamp":1573087979462,"id":98,"parentId":59,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":393742,"timestamp":1573087965482,"id":59,"parentId":19,"tags":{"page":"/workspaces"},"startTime":1777355600794,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":383865,"timestamp":1573087979441,"id":93,"parentId":55,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":398022,"timestamp":1573087965305,"id":55,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/notes"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":397660,"timestamp":1573087979443,"id":94,"parentId":56,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":411794,"timestamp":1573087965342,"id":56,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"is-page-static","duration":400183,"timestamp":1573087979439,"id":92,"parentId":54,"tags":{},"startTime":1777355600808,"traceId":"798f05024d81318f"},{"name":"check-page","duration":414370,"timestamp":1573087965263,"id":54,"parentId":19,"tags":{"page":"/workspaces/[workspaceId]/assets"},"startTime":1777355600793,"traceId":"798f05024d81318f"},{"name":"static-check","duration":443138,"timestamp":1573087936509,"id":19,"parentId":1,"tags":{},"startTime":1777355600765,"traceId":"798f05024d81318f"},{"name":"write-routes-manifest","duration":385,"timestamp":1573088380540,"id":100,"parentId":1,"tags":{},"startTime":1777355601209,"traceId":"798f05024d81318f"},{"name":"load-dotenv","duration":26,"timestamp":1573088387611,"id":103,"parentId":102,"tags":{},"startTime":1777355601216,"traceId":"798f05024d81318f"},{"name":"run-export-path-map","duration":325,"timestamp":1573088389215,"id":104,"parentId":102,"tags":{},"startTime":1777355601217,"traceId":"798f05024d81318f"},{"name":"next-export","duration":257392,"timestamp":1573088386978,"id":102,"parentId":1,"tags":{},"startTime":1777355601215,"traceId":"798f05024d81318f"},{"name":"move-exported-app-not-found-","duration":785,"timestamp":1573088645708,"id":105,"parentId":101,"tags":{},"startTime":1777355601474,"traceId":"798f05024d81318f"},{"name":"move-exported-app-global-error-","duration":301,"timestamp":1573088646529,"id":106,"parentId":101,"tags":{},"startTime":1777355601475,"traceId":"798f05024d81318f"},{"name":"static-generation","duration":264553,"timestamp":1573088383074,"id":101,"parentId":1,"tags":{},"startTime":1777355601211,"traceId":"798f05024d81318f"},{"name":"write-routes-manifest","duration":230,"timestamp":1573088647742,"id":107,"parentId":1,"tags":{},"startTime":1777355601476,"traceId":"798f05024d81318f"}]
2
+ [{"name":"print-tree-view","duration":1893,"timestamp":1573088654071,"id":108,"parentId":1,"tags":{},"startTime":1777355601482,"traceId":"798f05024d81318f"},{"name":"write-route-bundle-stats","duration":6831,"timestamp":1573088655979,"id":109,"parentId":1,"tags":{},"startTime":1777355601484,"traceId":"798f05024d81318f"},{"name":"telemetry-flush","duration":241473,"timestamp":1573088662823,"id":110,"parentId":1,"tags":{},"startTime":1777355601491,"traceId":"798f05024d81318f"},{"name":"next-build","duration":12950821,"timestamp":1573075953489,"id":1,"tags":{"buildMode":"default","version":"16.2.1","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1777355588782,"traceId":"798f05024d81318f"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":11416611,"timestamp":1563988147272,"id":14,"parentId":1,"tags":{},"startTime":1777346500893,"traceId":"cb79c462853c3b82"},{"name":"turbopack-build-events","duration":44,"timestamp":1563988313372,"id":15,"parentId":1,"tags":{},"startTime":1777346501059,"traceId":"cb79c462853c3b82"},{"name":"run-typescript","duration":6616168,"timestamp":1563999619079,"id":16,"parentId":1,"tags":{},"startTime":1777346512365,"traceId":"cb79c462853c3b82"},{"name":"static-check","duration":455145,"timestamp":1564006250149,"id":19,"parentId":1,"tags":{},"startTime":1777346518996,"traceId":"cb79c462853c3b82"},{"name":"static-generation","duration":286206,"timestamp":1564006708703,"id":101,"parentId":1,"tags":{},"startTime":1777346519454,"traceId":"cb79c462853c3b82"},{"name":"telemetry-flush","duration":545014,"timestamp":1564007010204,"id":110,"parentId":1,"tags":{},"startTime":1777346519756,"traceId":"cb79c462853c3b82"},{"name":"next-build","duration":19620827,"timestamp":1563987934408,"id":1,"tags":{"buildMode":"default","version":"16.2.1","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1777346500680,"traceId":"cb79c462853c3b82"}]
1
+ [{"name":"run-turbopack","duration":4711064,"timestamp":1573076194176,"id":14,"parentId":1,"tags":{},"startTime":1777355589022,"traceId":"798f05024d81318f"},{"name":"turbopack-build-events","duration":35,"timestamp":1573076355743,"id":15,"parentId":1,"tags":{},"startTime":1777355589184,"traceId":"798f05024d81318f"},{"name":"run-typescript","duration":6939568,"timestamp":1573080968113,"id":16,"parentId":1,"tags":{},"startTime":1777355593796,"traceId":"798f05024d81318f"},{"name":"static-check","duration":443138,"timestamp":1573087936509,"id":19,"parentId":1,"tags":{},"startTime":1777355600765,"traceId":"798f05024d81318f"},{"name":"static-generation","duration":264553,"timestamp":1573088383074,"id":101,"parentId":1,"tags":{},"startTime":1777355601211,"traceId":"798f05024d81318f"},{"name":"telemetry-flush","duration":241473,"timestamp":1573088662823,"id":110,"parentId":1,"tags":{},"startTime":1777355601491,"traceId":"798f05024d81318f"},{"name":"next-build","duration":12950821,"timestamp":1573075953489,"id":1,"tags":{"buildMode":"default","version":"16.2.1","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1777355588782,"traceId":"798f05024d81318f"}]
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
  }
@@ -110,30 +124,44 @@ function ensureDirs() {
110
124
  }
111
125
  }
112
126
 
127
+ function ensurePrismaClientGenerated() {
128
+ const prismaBin = resolveBin("prisma", "prisma");
129
+
130
+ log("Generating Prisma client...");
131
+ run(prismaBin, ["generate", "--schema", "prisma/schema.prisma"]);
132
+ }
133
+
113
134
  async function initDatabase() {
135
+ const prismaBin = resolveBin("prisma", "prisma");
136
+ const tsxBin = resolveBin("tsx", "tsx");
137
+
114
138
  log("Initializing Tower...");
115
139
  ensureDirs();
116
140
  log(`Data directory: ${TOWER_DIR}`);
141
+ ensurePrismaClientGenerated();
117
142
 
118
143
  log("Syncing database schema...");
119
- run("npx prisma db push --skip-generate");
144
+ run(prismaBin, ["db", "push", "--skip-generate"]);
120
145
 
121
146
  log("Seeding initial data...");
122
- run("npx tsx scripts/init-db.ts");
147
+ run(tsxBin, ["scripts/init-db.ts"]);
123
148
 
124
149
  log("Initializing full-text search...");
125
- run("npx tsx prisma/init-fts.ts");
150
+ run(tsxBin, ["prisma/init-fts.ts"]);
126
151
 
127
152
  log("Initialization complete!");
128
153
  }
129
154
 
130
155
  // ─── Commands ───
131
156
  async function cmdMigrate() {
157
+ const tsxBin = resolveBin("tsx", "tsx");
132
158
  log("Running data migration...");
133
- run("npx tsx scripts/migrate-data.ts --run");
159
+ run(tsxBin, ["scripts/migrate-data.ts", "--run"]);
134
160
  }
135
161
 
136
162
  async function cmdStart() {
163
+ ensurePrismaClientGenerated();
164
+
137
165
  if (needsInit()) {
138
166
  await initDatabase();
139
167
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tower-studio",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
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
+ }