tower-studio 0.2.42 → 0.2.43
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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +8 -0
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +27 -27
- package/.next/standalone/.next/server/app/_not-found/page.js +6 -6
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/adapters/test/route.js +3 -3
- package/.next/standalone/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/attachments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js +3 -3
- package/.next/standalone/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/route.js +2 -2
- package/.next/standalone/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js +3 -2
- package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/session/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/session/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js +2 -2
- package/.next/standalone/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js +2 -2
- package/.next/standalone/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/monaco/[...path]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route.js +8 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/resume/route.js +4 -3
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js +6 -5
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/stop/route.js +4 -3
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/stop/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff-patch/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js +3 -3
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +64 -64
- package/.next/standalone/.next/server/app/missions/page.js +6 -6
- package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +27 -27
- package/.next/standalone/.next/server/app/onboarding/page.js +6 -6
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +27 -27
- package/.next/standalone/.next/server/app/page.js +6 -6
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +44 -44
- package/.next/standalone/.next/server/app/settings/page.js +6 -6
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +109 -109
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +88 -88
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +75 -75
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +75 -75
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +27 -27
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +7 -7
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +67 -67
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +4 -4
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +79 -79
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +3 -3
- package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +50 -50
- package/.next/standalone/.next/server/app/workspaces/page.js +6 -6
- package/.next/standalone/.next/server/app/workspaces/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_03qwlhl.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_09pca3o.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0eh8dj_.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0h5yr8p.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0m8aavq.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0yp430z.js +1 -1
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0yzw48x.js +1 -1
- package/.next/standalone/.next/server/chunks/0zjb_server_app_api_internal_terminal_[taskId]_paste-image_route_actions_0iegbi4.js +3 -0
- package/.next/standalone/.next/server/chunks/[externals]__0x_wqa7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-z_a1d._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.p6em~._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.zmhk-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0042hx5._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0b3m.jm._.js → [root-of-the-server]__03ufxqq._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04--bs7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04m2l8a._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04r193~._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05abzth._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0657y50._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__075a0hk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08yqoti._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__098.3z2._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0obk~80._.js → [root-of-the-server]__0_d.s7s._.js} +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0askhfg._.js → [root-of-the-server]__0ajay8_._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b25v3p._.js +4 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0xswbi9._.js → [root-of-the-server]__0clptds._.js} +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0ai09na._.js → [root-of-the-server]__0g.k9o~._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gn0ubd._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gwztza._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0h6bl6t._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iggiij._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i~3dwq._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j1px8f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0k-5ag7._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0l1-djp._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0-~q463._.js → [root-of-the-server]__0lvlooo._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0otyifi._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0q~uf3u._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t31ba_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t_weyi._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__06qz5fz._.js → [root-of-the-server]__0uptkzd._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wkjqrd._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x3kws1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xot7fu._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0~6py0f._.js → [root-of-the-server]__0y8w5di._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~g6-c~._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10fv6tt._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1189rd1._.js +4 -0
- package/.next/standalone/.next/server/chunks/{_06.mxka._.js → _0jmdgq~._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{_0aflzks._.js → _0q10iet._.js} +1 -1
- package/.next/standalone/.next/server/chunks/_0qk_esg._.js +2 -2
- package/.next/standalone/.next/server/chunks/_0t31z6q._.js +1 -1
- package/.next/standalone/.next/server/chunks/{_0b~hjvi._.js → _12537g8._.js} +1 -1
- package/.next/standalone/.next/server/chunks/src_0fq3zjg._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0weytpz._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_0wlyw0g._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0~ey84y._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_actions_agent-actions_ts_10q9r5b._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/0se9_next_11h0sx_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00dh103._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mmypbn._.js → [root-of-the-server]__00ebsjb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0c2mh1c._.js → [root-of-the-server]__01vm_46._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__025ol9g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__094t44p._.js → [root-of-the-server]__04ednzb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04wbr9x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05xg05r._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__065f3ii._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0pmjob9._.js → [root-of-the-server]__06dfcgo._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__038u_kv._.js → [root-of-the-server]__07xkj1s._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08k-xb7._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08tzbfh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.infp2._.js → [root-of-the-server]__0_z5hke._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ce3fpq._.js → [root-of-the-server]__0ecd_1d._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__10s67lq._.js → [root-of-the-server]__0iln7n_._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__09z_ddd._.js → [root-of-the-server]__0j_-qk5._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0jymb~t._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.u-t.1._.js → [root-of-the-server]__0k6oo0n._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0h589~0._.js → [root-of-the-server]__0lws68d._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0oq-j16._.js → [root-of-the-server]__0oamph.._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0pvaj~l._.js → [root-of-the-server]__0pnv7nd._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0whlq2_._.js → [root-of-the-server]__0stlq2_._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__03fujv7._.js → [root-of-the-server]__0tja~wz._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0391jsv._.js → [root-of-the-server]__0ug022w._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0l6bt9t._.js → [root-of-the-server]__0x6k.ee._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0dsaqeq._.js → [root-of-the-server]__0xr45lx._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__058rbx5._.js → [root-of-the-server]__0xwzk2.._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__12w35bx._.js → [root-of-the-server]__0yby8pl._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0z7je5_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rckee~._.js → [root-of-the-server]__0zxc81t._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0dux7x.._.js → [root-of-the-server]__0zzqn5z._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mq0f94._.js → [root-of-the-server]__10c.a3u._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0.2h0ux._.js → [root-of-the-server]__10n3vn6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__09t~p.u._.js → [root-of-the-server]__123rmyb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__124zb~p._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02j1enz._.js → [root-of-the-server]__127w3bm._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0h-se8t._.js → [root-of-the-server]__12ko8p6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0odeai5._.js → [root-of-the-server]__13ce7v2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0-~9em3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0f~l8kv._.js → _00l85fp._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_0c2gong._.js → _00odlgv._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0whlnt7._.js → _0463zy~._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0rq68d8._.js → _047dh-f._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_03lt1_x._.js → _05a2u03._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0_5abui._.js → _05k76ur._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0n4bq0m._.js → _060e1u.._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_070t_mh._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0n5do.z._.js → _07lq-bp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0p6p_68._.js → _07q06~v._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0mm~wxj._.js → _08-x_rp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_08bq4g8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_12ca88g._.js → _0_q41~z._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0o2tntr._.js → _0b7smy6._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0u7c6bz._.js → _0dxbp89._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0axcfvf._.js → _0gkid_a._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0tvm5af._.js → _0j5.ig_._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0py1s-f._.js → _0nze-e6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0u.n7v8._.js → _0oeih09._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0rdyrfd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0~oc5bl._.js → _0rrs.-d._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0q2mf9q._.js → _0rtydyv._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0rxeqmo._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_04bt0.3._.js → _0s.h4l2._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_09z2zmm._.js → _0s.ik0k._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_116-_2z._.js → _0syb503._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0m.wslt._.js → _0uryq~z._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0wbcp88._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_04~zqvy._.js → _0wqcz3w._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0rrzd20._.js → _113957g._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_0djxlqx._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_notes_notes-page-client_tsx_10gyo3v._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_components_ui_select_tsx_0d2ra01._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0_9avpk._.js → src_lib_0.~.oo-._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_02~3_5t._.js → src_lib_005uqbe._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_04d~c.c._.js → src_lib_00wjv6n._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_08wv1le._.js → src_lib_01sr8_t._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_08jql1e._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0b~j-9d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0eymyjf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0fkv9z3._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0n-n0.a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0sgt~lv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0x-iyl1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0yjmty1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_13aevv6._.js +3 -0
- package/.next/standalone/.next/server/functions-config-manifest.json +1 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +246 -246
- package/.next/standalone/.next/static/chunks/{17fug-zaik-v~.js → 0-vgfstmpuwnx.js} +1 -1
- package/.next/standalone/.next/static/chunks/0.lyp-cx3zt9..js +2 -0
- package/.next/standalone/.next/static/chunks/{0clewc5ifaruu.js → 00z.kuqsfrxq5.js} +2 -2
- package/.next/standalone/.next/static/chunks/01j9m895w64zn.js +1 -0
- package/.next/standalone/.next/static/chunks/01rbl6a8z.tuw.js +1 -0
- package/.next/standalone/.next/static/chunks/{0.wxa05y455w7.js → 04op7bjge~n4l.js} +1 -1
- package/.next/standalone/.next/static/chunks/{13.3woq55msp..js → 05v-c3ir3ik_1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0bdwzhoelky9-.js → 070fs6rmafi.i.js} +1 -1
- package/.next/standalone/.next/static/chunks/07i9j5yyg4vs3.js +1 -0
- package/.next/standalone/.next/static/chunks/{040j8d.w8mkyn.js → 08i9.47-_mxro.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ypd9eqm_pj-o.js → 0_yp-y9l0upp~.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ddt-snh45031.js +1 -0
- package/.next/standalone/.next/static/chunks/0evfu1ozaw5ak.js +1 -0
- package/.next/standalone/.next/static/chunks/{0wcwdbtpm0~r6.js → 0gq65t6au55oa.js} +1 -1
- package/.next/standalone/.next/static/chunks/0gz71w_~yw2iu.js +1 -0
- package/.next/standalone/.next/static/chunks/{0dewfthzwmcwb.js → 0hk3lmsij2x1c.js} +1 -1
- package/.next/standalone/.next/static/chunks/0j1hqwmeaqnn2.js +1 -0
- package/.next/standalone/.next/static/chunks/{0_d04kox03m72.css → 0jrje~1gt6w85.css} +1 -1
- package/.next/standalone/.next/static/chunks/0prrt_bws8ml6.js +1 -0
- package/.next/standalone/.next/static/chunks/0qgqjy.9.-qpi.js +1 -0
- package/.next/standalone/.next/static/chunks/{0m~m1~si.ot17.js → 0rfq8fy71hj7c.js} +1 -1
- package/.next/standalone/.next/static/chunks/{02f8-ju2se8qw.js → 0rjt_ddd~6t8r.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0.onaugl2w8ci.js → 0rnitheqdpd1..js} +1 -1
- package/.next/standalone/.next/static/chunks/{035a_v6g7ioyw.js → 0sr-m2t6vck14.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0rozlwh3y46l0.js → 0ts___1ygewqp.js} +1 -1
- package/.next/standalone/.next/static/chunks/0vmy6tsqy.xf4.js +1 -0
- package/.next/standalone/.next/static/chunks/0wbq-_8jyxjxm.js +1 -0
- package/.next/standalone/.next/static/chunks/0xejm4ge9~cn..js +1 -0
- package/.next/standalone/.next/static/chunks/0~prx0ure_1i6.js +1 -0
- package/.next/standalone/.next/static/chunks/1107zshxaajt9.js +1 -0
- package/.next/standalone/.next/static/chunks/{17m4o~gdsvuo3.js → 11p.r-9wyh7_2.js} +1 -1
- package/.next/standalone/.next/static/chunks/11x3_612u8w~9.js +1 -0
- package/.next/standalone/.next/static/chunks/14mk_a0k99wbg.js +1 -0
- package/.next/standalone/package.json +9 -9
- package/dist/mcp-server.cjs +131 -74
- package/next.config.ts +4 -0
- package/package.json +9 -9
- package/skills/tower/SKILL.md +6 -0
- package/.next/standalone/.next/server/chunks/[externals]__0izylsq._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.tbb~k._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__032d9pl._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04jduyo._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05zlbau._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05~g1fm._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__075f7rs._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08b~~wj._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0bo_6v~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c7z.~a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e~6fr~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fey.8j._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fxmnch._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gr~8aq._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0hd.0to._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j3l3l4._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0r-6wmj._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rpck4h._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0skk0fd._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t_yyy8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0v2nkck._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0z20rmt._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__11l3gud._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__126b53k._.js +0 -4
- package/.next/standalone/.next/server/chunks/src_02ruq-1._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_07gek7k._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_0mqkaid._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.-z9ts._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__045k323._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__087pocz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gt5dbj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ni-_7_._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y~ooou._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0a60u40._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0fu5szn._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0gve57o._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0koe0p0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0qdh-v4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0ramp4w._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0sn1z-s._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0x6grav._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_110am8v._.js +0 -3
- package/.next/standalone/.next/static/chunks/0-efd~h5j2ufi.js +0 -1
- package/.next/standalone/.next/static/chunks/0.z171pzeg-.7.js +0 -1
- package/.next/standalone/.next/static/chunks/01zlxs4rl~h_o.js +0 -1
- package/.next/standalone/.next/static/chunks/0af7afat3acfx.js +0 -1
- package/.next/standalone/.next/static/chunks/0ais32-8.3wlj.js +0 -1
- package/.next/standalone/.next/static/chunks/0f43x~jzb70f4.js +0 -1
- package/.next/standalone/.next/static/chunks/0i-x__600fys6.js +0 -1
- package/.next/standalone/.next/static/chunks/0l25d0nc5ygyd.js +0 -1
- package/.next/standalone/.next/static/chunks/0lyq0-a32.15m.js +0 -1
- package/.next/standalone/.next/static/chunks/0t8lz62rmr801.js +0 -2
- package/.next/standalone/.next/static/chunks/0utrquxfg25b2.js +0 -1
- package/.next/standalone/.next/static/chunks/0wcdxs4sl-gjf.js +0 -1
- package/.next/standalone/.next/static/chunks/0x-ug4iz~~qr2.js +0 -1
- package/.next/standalone/.next/static/chunks/0xj6v_80hlyv0.js +0 -1
- package/.next/standalone/.next/static/chunks/0xl7h5fsfc7zk.js +0 -1
- package/.next/standalone/.next/static/chunks/115ae91fq~slq.js +0 -1
- package/.next/standalone/.next/static/chunks/13rq33eiffqaz.js +0 -1
- /package/.next/standalone/.next/static/{LCBoYZWhXzs8PjuBmxw7g → d-Uhp63kgWdPkhPt7Fzyb}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{LCBoYZWhXzs8PjuBmxw7g → d-Uhp63kgWdPkhPt7Fzyb}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{LCBoYZWhXzs8PjuBmxw7g → d-Uhp63kgWdPkhPt7Fzyb}/_ssgManifest.js +0 -0
package/dist/mcp-server.cjs
CHANGED
|
@@ -14347,14 +14347,64 @@ var init_zod = __esm({
|
|
|
14347
14347
|
}
|
|
14348
14348
|
});
|
|
14349
14349
|
|
|
14350
|
+
// src/lib/tower-dir.ts
|
|
14351
|
+
function getTowerDir() {
|
|
14352
|
+
if (_dir) return _dir;
|
|
14353
|
+
_dir = process.env.TOWER_DATA_DIR || (0, import_node_path2.join)((0, import_node_os2.homedir)(), ".tower");
|
|
14354
|
+
if (!(0, import_node_fs.existsSync)(_dir)) {
|
|
14355
|
+
(0, import_node_fs.mkdirSync)(_dir, { recursive: true });
|
|
14356
|
+
}
|
|
14357
|
+
return _dir;
|
|
14358
|
+
}
|
|
14359
|
+
function getDatabaseDir() {
|
|
14360
|
+
const dir = (0, import_node_path2.join)(getTowerDir(), "database");
|
|
14361
|
+
if (!(0, import_node_fs.existsSync)(dir)) (0, import_node_fs.mkdirSync)(dir, { recursive: true });
|
|
14362
|
+
return dir;
|
|
14363
|
+
}
|
|
14364
|
+
function getTowerDbFilePath() {
|
|
14365
|
+
const root = process.env.TOWER_DATA_DIR || (0, import_node_path2.join)((0, import_node_os2.homedir)(), ".tower");
|
|
14366
|
+
return (0, import_node_path2.join)(root, "database", "tower.db");
|
|
14367
|
+
}
|
|
14368
|
+
function getDefaultStorageDir() {
|
|
14369
|
+
return (0, import_node_path2.join)(getTowerDir(), "storage");
|
|
14370
|
+
}
|
|
14371
|
+
function getStoragePointerFile() {
|
|
14372
|
+
return (0, import_node_path2.join)(getTowerDir(), "storage-location");
|
|
14373
|
+
}
|
|
14374
|
+
function readStoragePointer() {
|
|
14375
|
+
try {
|
|
14376
|
+
const p2 = (0, import_node_fs.readFileSync)(getStoragePointerFile(), "utf-8").trim();
|
|
14377
|
+
return p2.length > 0 ? p2 : null;
|
|
14378
|
+
} catch {
|
|
14379
|
+
return null;
|
|
14380
|
+
}
|
|
14381
|
+
}
|
|
14382
|
+
function getStorageDir() {
|
|
14383
|
+
const override = process.env.TOWER_STORAGE_DIR || readStoragePointer();
|
|
14384
|
+
const dir = override && override.length > 0 ? override : getDefaultStorageDir();
|
|
14385
|
+
if (!(0, import_node_fs.existsSync)(dir)) (0, import_node_fs.mkdirSync)(dir, { recursive: true });
|
|
14386
|
+
return dir;
|
|
14387
|
+
}
|
|
14388
|
+
var import_node_path2, import_node_os2, import_node_fs, _dir;
|
|
14389
|
+
var init_tower_dir = __esm({
|
|
14390
|
+
"src/lib/tower-dir.ts"() {
|
|
14391
|
+
"use strict";
|
|
14392
|
+
import_node_path2 = require("node:path");
|
|
14393
|
+
import_node_os2 = require("node:os");
|
|
14394
|
+
import_node_fs = require("node:fs");
|
|
14395
|
+
}
|
|
14396
|
+
});
|
|
14397
|
+
|
|
14350
14398
|
// src/lib/db.ts
|
|
14351
14399
|
var import_client2, globalForPrisma, db2;
|
|
14352
14400
|
var init_db = __esm({
|
|
14353
14401
|
"src/lib/db.ts"() {
|
|
14354
14402
|
"use strict";
|
|
14355
14403
|
import_client2 = require("@prisma/client");
|
|
14404
|
+
init_tower_dir();
|
|
14356
14405
|
globalForPrisma = globalThis;
|
|
14357
14406
|
db2 = globalForPrisma.prisma ?? new import_client2.PrismaClient({
|
|
14407
|
+
datasourceUrl: `file:${getTowerDbFilePath()}`,
|
|
14358
14408
|
log: []
|
|
14359
14409
|
});
|
|
14360
14410
|
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = db2;
|
|
@@ -26592,7 +26642,7 @@ function isWindows(platform = process.platform) {
|
|
|
26592
26642
|
return platform === "win32";
|
|
26593
26643
|
}
|
|
26594
26644
|
function normalizePath(p2, platform = process.platform) {
|
|
26595
|
-
const normalized =
|
|
26645
|
+
const normalized = import_node_path3.default.normalize(p2);
|
|
26596
26646
|
if (isWindows(platform)) {
|
|
26597
26647
|
return normalized.replace(/\//g, "\\");
|
|
26598
26648
|
}
|
|
@@ -26643,16 +26693,16 @@ async function resolveCommandPath(command, opts = {}) {
|
|
|
26643
26693
|
const platform = opts.platform ?? process.platform;
|
|
26644
26694
|
const hasPathSeparator = command.includes("/") || command.includes("\\");
|
|
26645
26695
|
if (hasPathSeparator) {
|
|
26646
|
-
const absolute =
|
|
26696
|
+
const absolute = import_node_path3.default.isAbsolute(command) ? command : import_node_path3.default.resolve(cwd, command);
|
|
26647
26697
|
return await pathExists(absolute, platform) ? absolute : null;
|
|
26648
26698
|
}
|
|
26649
26699
|
const pathValue = env.PATH ?? env.Path ?? "";
|
|
26650
26700
|
const delimiter = isWindows(platform) ? ";" : ":";
|
|
26651
26701
|
const dirs = pathValue.split(delimiter).filter(Boolean);
|
|
26652
26702
|
const exts = isWindows(platform) ? windowsPathExts(env) : [""];
|
|
26653
|
-
const hasExtension = isWindows(platform) &&
|
|
26703
|
+
const hasExtension = isWindows(platform) && import_node_path3.default.extname(command).length > 0;
|
|
26654
26704
|
for (const dir of dirs) {
|
|
26655
|
-
const candidates = isWindows(platform) ? hasExtension ? [
|
|
26705
|
+
const candidates = isWindows(platform) ? hasExtension ? [import_node_path3.default.join(dir, command)] : exts.map((ext) => import_node_path3.default.join(dir, `${command}${ext}`)) : [import_node_path3.default.join(dir, command)];
|
|
26656
26706
|
for (const candidate of candidates) {
|
|
26657
26707
|
if (await pathExists(candidate, platform)) return candidate;
|
|
26658
26708
|
}
|
|
@@ -26660,7 +26710,7 @@ async function resolveCommandPath(command, opts = {}) {
|
|
|
26660
26710
|
return null;
|
|
26661
26711
|
}
|
|
26662
26712
|
function resolveCommandPathSync(command, platform = process.platform, exec = defaultExecSync) {
|
|
26663
|
-
if (
|
|
26713
|
+
if (import_node_path3.default.extname(command) || command.includes("/") || command.includes("\\")) {
|
|
26664
26714
|
return command;
|
|
26665
26715
|
}
|
|
26666
26716
|
if (!isWindows(platform)) {
|
|
@@ -26687,13 +26737,13 @@ function resolveCommandPathSync(command, platform = process.platform, exec = def
|
|
|
26687
26737
|
}
|
|
26688
26738
|
function resolveSdkExecutable(command, platform = process.platform, readFile2 = (p2) => (0, import_node_fs2.readFileSync)(p2, "utf-8"), fileExists = (p2) => (0, import_node_fs2.existsSync)(p2)) {
|
|
26689
26739
|
if (!isWindows(platform)) return command;
|
|
26690
|
-
const ext =
|
|
26740
|
+
const ext = import_node_path3.default.extname(command).toLowerCase();
|
|
26691
26741
|
if (ext !== ".cmd" && ext !== ".bat") return command;
|
|
26692
|
-
const dir =
|
|
26742
|
+
const dir = import_node_path3.default.win32.dirname(command);
|
|
26693
26743
|
let shimSnippet = "";
|
|
26694
26744
|
const expand = (raw) => {
|
|
26695
26745
|
const p2 = raw.replace(/%~?dp0%/gi, dir).replace(/\//g, "\\");
|
|
26696
|
-
return
|
|
26746
|
+
return import_node_path3.default.win32.isAbsolute(p2) ? import_node_path3.default.win32.normalize(p2) : import_node_path3.default.win32.resolve(dir, p2);
|
|
26697
26747
|
};
|
|
26698
26748
|
try {
|
|
26699
26749
|
const shim = readFile2(command);
|
|
@@ -26706,17 +26756,17 @@ function resolveSdkExecutable(command, platform = process.platform, readFile2 =
|
|
|
26706
26756
|
}
|
|
26707
26757
|
for (const m2 of shim.matchAll(/"([^"]*\.exe)"/gi)) {
|
|
26708
26758
|
const resolved = expand(m2[1]);
|
|
26709
|
-
if (
|
|
26759
|
+
if (import_node_path3.default.win32.basename(resolved).toLowerCase() === "node.exe") continue;
|
|
26710
26760
|
if (fileExists(resolved)) return resolved;
|
|
26711
26761
|
}
|
|
26712
26762
|
} catch (e2) {
|
|
26713
26763
|
console.error(`[resolveSdkExecutable] shim read failed: ${e2 instanceof Error ? e2.message : e2}`);
|
|
26714
26764
|
}
|
|
26715
|
-
const pkgDir =
|
|
26716
|
-
const base =
|
|
26765
|
+
const pkgDir = import_node_path3.default.win32.join(dir, "node_modules", "@anthropic-ai", "claude-code");
|
|
26766
|
+
const base = import_node_path3.default.win32.basename(command, import_node_path3.default.win32.extname(command));
|
|
26717
26767
|
const guesses = [
|
|
26718
|
-
|
|
26719
|
-
|
|
26768
|
+
import_node_path3.default.win32.join(pkgDir, "cli.js"),
|
|
26769
|
+
import_node_path3.default.win32.join(pkgDir, "bin", `${base}.exe`)
|
|
26720
26770
|
];
|
|
26721
26771
|
for (const g10 of guesses) {
|
|
26722
26772
|
if (fileExists(g10)) return g10;
|
|
@@ -26748,7 +26798,7 @@ function wrapForPlatform(executable, args, env, platform) {
|
|
|
26748
26798
|
if (!isWindows(platform)) {
|
|
26749
26799
|
return { command: executable, args };
|
|
26750
26800
|
}
|
|
26751
|
-
const ext =
|
|
26801
|
+
const ext = import_node_path3.default.extname(executable).toLowerCase();
|
|
26752
26802
|
if (ext === ".cmd" || ext === ".bat" || ext === ".com") {
|
|
26753
26803
|
const shell = env.ComSpec || "cmd.exe";
|
|
26754
26804
|
const commandLine = [quoteForCmd(executable), ...args.map(quoteForCmd)].join(" ");
|
|
@@ -26782,7 +26832,7 @@ async function detectUnixShells() {
|
|
|
26782
26832
|
const line = raw.replace(/#.*/, "").trim();
|
|
26783
26833
|
if (!line || !line.startsWith("/")) continue;
|
|
26784
26834
|
if (!await pathExists(line)) continue;
|
|
26785
|
-
let name =
|
|
26835
|
+
let name = import_node_path3.default.basename(line);
|
|
26786
26836
|
const count = seen.get(name) ?? 0;
|
|
26787
26837
|
seen.set(name, count + 1);
|
|
26788
26838
|
if (count > 0) name = `${name} (${count + 1})`;
|
|
@@ -26793,7 +26843,7 @@ async function detectUnixShells() {
|
|
|
26793
26843
|
const defaults = ["/bin/zsh", "/bin/bash", "/bin/sh"];
|
|
26794
26844
|
const shells = [];
|
|
26795
26845
|
for (const p2 of defaults) {
|
|
26796
|
-
if (await pathExists(p2)) shells.push({ name:
|
|
26846
|
+
if (await pathExists(p2)) shells.push({ name: import_node_path3.default.basename(p2), path: p2 });
|
|
26797
26847
|
}
|
|
26798
26848
|
return shells;
|
|
26799
26849
|
}
|
|
@@ -26803,28 +26853,28 @@ async function detectWindowsShells() {
|
|
|
26803
26853
|
const gitBashCandidates = [];
|
|
26804
26854
|
const gitPath = await resolveCommandPath("git", { platform: "win32" });
|
|
26805
26855
|
if (gitPath) {
|
|
26806
|
-
const gitRoot =
|
|
26856
|
+
const gitRoot = import_node_path3.default.resolve(import_node_path3.default.dirname(gitPath), "..", "..");
|
|
26807
26857
|
gitBashCandidates.push(
|
|
26808
|
-
|
|
26809
|
-
|
|
26858
|
+
import_node_path3.default.join(gitRoot, "bin", "bash.exe"),
|
|
26859
|
+
import_node_path3.default.join(gitRoot, "usr", "bin", "bash.exe")
|
|
26810
26860
|
);
|
|
26811
26861
|
}
|
|
26812
26862
|
const programDirs = [
|
|
26813
26863
|
process.env.ProgramW6432,
|
|
26814
26864
|
process.env.ProgramFiles,
|
|
26815
26865
|
process.env["ProgramFiles(x86)"],
|
|
26816
|
-
process.env.LocalAppData ?
|
|
26866
|
+
process.env.LocalAppData ? import_node_path3.default.join(process.env.LocalAppData, "Programs") : null
|
|
26817
26867
|
].filter(Boolean);
|
|
26818
26868
|
for (const dir of programDirs) {
|
|
26819
26869
|
gitBashCandidates.push(
|
|
26820
|
-
|
|
26821
|
-
|
|
26870
|
+
import_node_path3.default.join(dir, "Git", "bin", "bash.exe"),
|
|
26871
|
+
import_node_path3.default.join(dir, "Git", "usr", "bin", "bash.exe")
|
|
26822
26872
|
);
|
|
26823
26873
|
}
|
|
26824
26874
|
const home = process.env.USERPROFILE ?? "";
|
|
26825
26875
|
if (home) {
|
|
26826
26876
|
gitBashCandidates.push(
|
|
26827
|
-
|
|
26877
|
+
import_node_path3.default.join(home, "scoop", "apps", "git", "current", "bin", "bash.exe")
|
|
26828
26878
|
);
|
|
26829
26879
|
}
|
|
26830
26880
|
if (process.env.CLAUDE_CODE_GIT_BASH_PATH) {
|
|
@@ -26841,11 +26891,11 @@ async function detectWindowsShells() {
|
|
|
26841
26891
|
shells.push({ name: "PowerShell", path: pwshPath });
|
|
26842
26892
|
}
|
|
26843
26893
|
const winDir = process.env.windir ?? "C:\\WINDOWS";
|
|
26844
|
-
const legacyPs =
|
|
26894
|
+
const legacyPs = import_node_path3.default.join(winDir, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
|
|
26845
26895
|
if (await pathExists(legacyPs, "win32")) {
|
|
26846
26896
|
shells.push({ name: "Windows PowerShell", path: legacyPs });
|
|
26847
26897
|
}
|
|
26848
|
-
const cmd = process.env.ComSpec ??
|
|
26898
|
+
const cmd = process.env.ComSpec ?? import_node_path3.default.join(winDir, "System32", "cmd.exe");
|
|
26849
26899
|
if (await pathExists(cmd, "win32")) {
|
|
26850
26900
|
shells.push({ name: "Command Prompt", path: cmd });
|
|
26851
26901
|
}
|
|
@@ -26898,13 +26948,13 @@ async function detectEditors(platform = process.platform) {
|
|
|
26898
26948
|
}
|
|
26899
26949
|
return results;
|
|
26900
26950
|
}
|
|
26901
|
-
var import_node_fs2, import_node_child_process,
|
|
26951
|
+
var import_node_fs2, import_node_child_process, import_node_path3, CLAUDE_NESTING_VARS, SENSITIVE_KEY_RE, defaultExecSync, MAC_TERMINAL_APPS, KNOWN_EDITORS, EDITOR_FALLBACK_PATHS;
|
|
26902
26952
|
var init_platform = __esm({
|
|
26903
26953
|
"src/lib/platform.ts"() {
|
|
26904
26954
|
"use strict";
|
|
26905
26955
|
import_node_fs2 = require("node:fs");
|
|
26906
26956
|
import_node_child_process = require("node:child_process");
|
|
26907
|
-
|
|
26957
|
+
import_node_path3 = __toESM(require("node:path"));
|
|
26908
26958
|
CLAUDE_NESTING_VARS = [
|
|
26909
26959
|
"CLAUDECODE",
|
|
26910
26960
|
"CLAUDE_CODE_ENTRYPOINT",
|
|
@@ -32133,7 +32183,7 @@ var init_pty_session = __esm({
|
|
|
32133
32183
|
|
|
32134
32184
|
// src/lib/pty/orphan-reaper.ts
|
|
32135
32185
|
function pidFilePath(sessionKey) {
|
|
32136
|
-
return (0,
|
|
32186
|
+
return (0, import_node_path4.join)(SIGNAL_DIR, `${PID_PREFIX}${sessionKey}`);
|
|
32137
32187
|
}
|
|
32138
32188
|
async function recordSessionPid(sessionKey, pid) {
|
|
32139
32189
|
try {
|
|
@@ -32148,14 +32198,14 @@ async function clearSessionPid(sessionKey) {
|
|
|
32148
32198
|
} catch {
|
|
32149
32199
|
}
|
|
32150
32200
|
}
|
|
32151
|
-
var import_promises,
|
|
32201
|
+
var import_promises, import_node_os3, import_node_path4, SIGNAL_DIR, PID_PREFIX;
|
|
32152
32202
|
var init_orphan_reaper = __esm({
|
|
32153
32203
|
"src/lib/pty/orphan-reaper.ts"() {
|
|
32154
32204
|
"use strict";
|
|
32155
32205
|
import_promises = require("node:fs/promises");
|
|
32156
|
-
|
|
32157
|
-
|
|
32158
|
-
SIGNAL_DIR = (0,
|
|
32206
|
+
import_node_os3 = require("node:os");
|
|
32207
|
+
import_node_path4 = require("node:path");
|
|
32208
|
+
SIGNAL_DIR = (0, import_node_path4.join)((0, import_node_os3.tmpdir)(), "tower-signals");
|
|
32159
32209
|
PID_PREFIX = "pid-";
|
|
32160
32210
|
}
|
|
32161
32211
|
});
|
|
@@ -53957,6 +54007,23 @@ var init_task_actions = __esm({
|
|
|
53957
54007
|
}
|
|
53958
54008
|
});
|
|
53959
54009
|
|
|
54010
|
+
// src/mcp/env-guard.ts
|
|
54011
|
+
var import_node_path = require("node:path");
|
|
54012
|
+
var import_node_os = require("node:os");
|
|
54013
|
+
function resolveTowerDataDir(env) {
|
|
54014
|
+
if (env.TOWER_DATA_DIR) return env.TOWER_DATA_DIR;
|
|
54015
|
+
const dbUrl = env.DATABASE_URL;
|
|
54016
|
+
if (dbUrl && dbUrl.startsWith("file:")) {
|
|
54017
|
+
const dbPath = dbUrl.slice("file:".length);
|
|
54018
|
+
return (0, import_node_path.dirname)((0, import_node_path.dirname)(dbPath));
|
|
54019
|
+
}
|
|
54020
|
+
return (0, import_node_path.join)((0, import_node_os.homedir)(), ".tower");
|
|
54021
|
+
}
|
|
54022
|
+
process.env.TOWER_DATA_DIR = resolveTowerDataDir({
|
|
54023
|
+
TOWER_DATA_DIR: process.env.TOWER_DATA_DIR,
|
|
54024
|
+
DATABASE_URL: process.env.DATABASE_URL
|
|
54025
|
+
});
|
|
54026
|
+
|
|
53960
54027
|
// src/mcp/index.ts
|
|
53961
54028
|
var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
53962
54029
|
|
|
@@ -53968,8 +54035,10 @@ init_zod();
|
|
|
53968
54035
|
|
|
53969
54036
|
// src/mcp/db.ts
|
|
53970
54037
|
var import_client = require("@prisma/client");
|
|
53971
|
-
|
|
54038
|
+
init_tower_dir();
|
|
54039
|
+
var db = new import_client.PrismaClient({ datasourceUrl: `file:${getTowerDbFilePath()}` });
|
|
53972
54040
|
async function initDb() {
|
|
54041
|
+
getDatabaseDir();
|
|
53973
54042
|
await db.$connect();
|
|
53974
54043
|
await db.$queryRaw(import_client.Prisma.sql`PRAGMA journal_mode=WAL`);
|
|
53975
54044
|
await db.$queryRaw(import_client.Prisma.sql`PRAGMA busy_timeout=5000`);
|
|
@@ -54129,42 +54198,7 @@ init_config_reader();
|
|
|
54129
54198
|
// src/lib/file-utils.ts
|
|
54130
54199
|
var fs = __toESM(require("node:fs"));
|
|
54131
54200
|
var path = __toESM(require("node:path"));
|
|
54132
|
-
|
|
54133
|
-
// src/lib/tower-dir.ts
|
|
54134
|
-
var import_node_path = require("node:path");
|
|
54135
|
-
var import_node_os = require("node:os");
|
|
54136
|
-
var import_node_fs = require("node:fs");
|
|
54137
|
-
var _dir;
|
|
54138
|
-
function getTowerDir() {
|
|
54139
|
-
if (_dir) return _dir;
|
|
54140
|
-
_dir = process.env.TOWER_DATA_DIR || (0, import_node_path.join)((0, import_node_os.homedir)(), ".tower");
|
|
54141
|
-
if (!(0, import_node_fs.existsSync)(_dir)) {
|
|
54142
|
-
(0, import_node_fs.mkdirSync)(_dir, { recursive: true });
|
|
54143
|
-
}
|
|
54144
|
-
return _dir;
|
|
54145
|
-
}
|
|
54146
|
-
function getDefaultStorageDir() {
|
|
54147
|
-
return (0, import_node_path.join)(getTowerDir(), "storage");
|
|
54148
|
-
}
|
|
54149
|
-
function getStoragePointerFile() {
|
|
54150
|
-
return (0, import_node_path.join)(getTowerDir(), "storage-location");
|
|
54151
|
-
}
|
|
54152
|
-
function readStoragePointer() {
|
|
54153
|
-
try {
|
|
54154
|
-
const p2 = (0, import_node_fs.readFileSync)(getStoragePointerFile(), "utf-8").trim();
|
|
54155
|
-
return p2.length > 0 ? p2 : null;
|
|
54156
|
-
} catch {
|
|
54157
|
-
return null;
|
|
54158
|
-
}
|
|
54159
|
-
}
|
|
54160
|
-
function getStorageDir() {
|
|
54161
|
-
const override = process.env.TOWER_STORAGE_DIR || readStoragePointer();
|
|
54162
|
-
const dir = override && override.length > 0 ? override : getDefaultStorageDir();
|
|
54163
|
-
if (!(0, import_node_fs.existsSync)(dir)) (0, import_node_fs.mkdirSync)(dir, { recursive: true });
|
|
54164
|
-
return dir;
|
|
54165
|
-
}
|
|
54166
|
-
|
|
54167
|
-
// src/lib/file-utils.ts
|
|
54201
|
+
init_tower_dir();
|
|
54168
54202
|
function assertWithinDataRoot(resolved) {
|
|
54169
54203
|
if (!resolved.startsWith(getStorageDir() + path.sep)) {
|
|
54170
54204
|
throw new Error("Path traversal detected");
|
|
@@ -54420,21 +54454,44 @@ ${refText}`;
|
|
|
54420
54454
|
}
|
|
54421
54455
|
},
|
|
54422
54456
|
update_task: {
|
|
54423
|
-
description: "Update a task's title, description, priority, labels, and/or
|
|
54457
|
+
description: "Update a task's title, description, priority, labels, subPath, and/or version. If labelIds is provided, replaces all existing labels. Pass versionId to file the task under a project version (use list_versions to discover options); pass null or an empty string to move it back to the backlog (no version).",
|
|
54424
54458
|
schema: external_exports.object({
|
|
54425
54459
|
taskId: external_exports.string(),
|
|
54426
54460
|
title: external_exports.string().optional(),
|
|
54427
54461
|
description: external_exports.string().optional(),
|
|
54428
54462
|
priority: Priority.optional(),
|
|
54429
54463
|
labelIds: external_exports.array(external_exports.string()).optional(),
|
|
54430
|
-
subPath: external_exports.string().optional()
|
|
54464
|
+
subPath: external_exports.string().optional(),
|
|
54465
|
+
versionId: external_exports.string().nullable().optional().describe('Version to assign the task to. Use list_versions to find valid IDs for the project. Pass null or "" to move the task to the backlog (no version).')
|
|
54431
54466
|
}),
|
|
54432
54467
|
handler: async (args) => {
|
|
54433
|
-
const { labelIds, taskId, ...updateData } = args;
|
|
54468
|
+
const { labelIds, taskId, versionId, ...updateData } = args;
|
|
54469
|
+
const versionProvided = "versionId" in args;
|
|
54434
54470
|
return db.$transaction(async (tx) => {
|
|
54471
|
+
let versionData = {};
|
|
54472
|
+
if (versionProvided) {
|
|
54473
|
+
let resolved = null;
|
|
54474
|
+
if (versionId) {
|
|
54475
|
+
const current = await tx.task.findUnique({
|
|
54476
|
+
where: { id: taskId },
|
|
54477
|
+
select: { projectId: true }
|
|
54478
|
+
});
|
|
54479
|
+
if (current) {
|
|
54480
|
+
const v2 = await tx.version.findFirst({
|
|
54481
|
+
where: { id: versionId, projectId: current.projectId },
|
|
54482
|
+
select: { id: true }
|
|
54483
|
+
});
|
|
54484
|
+
resolved = v2?.id ?? null;
|
|
54485
|
+
}
|
|
54486
|
+
}
|
|
54487
|
+
versionData = { versionId: resolved };
|
|
54488
|
+
}
|
|
54435
54489
|
const task = await tx.task.update({
|
|
54436
54490
|
where: { id: taskId },
|
|
54437
|
-
data:
|
|
54491
|
+
data: {
|
|
54492
|
+
...updateData,
|
|
54493
|
+
...versionData
|
|
54494
|
+
}
|
|
54438
54495
|
});
|
|
54439
54496
|
if (labelIds !== void 0) {
|
|
54440
54497
|
await tx.taskLabel.deleteMany({ where: { taskId } });
|
|
@@ -54488,7 +54545,7 @@ ${refText}`;
|
|
|
54488
54545
|
}
|
|
54489
54546
|
},
|
|
54490
54547
|
list_versions: {
|
|
54491
|
-
description: "List a project's active versions (excludes RELEASED) for assigning a task via create_task's versionId. Returns id, number, name, status, isCurrent.",
|
|
54548
|
+
description: "List a project's active versions (excludes RELEASED) for assigning a task via create_task's or update_task's versionId. Returns id, number, name, status, isCurrent.",
|
|
54492
54549
|
schema: external_exports.object({ projectId: external_exports.string() }),
|
|
54493
54550
|
handler: async (args) => {
|
|
54494
54551
|
return db.version.findMany({
|
package/next.config.ts
CHANGED
|
@@ -4,6 +4,10 @@ const nextConfig: NextConfig = {
|
|
|
4
4
|
// Self-contained build: traced deps land in `.next/standalone/node_modules/`,
|
|
5
5
|
// so `npm i tower-studio -g` no longer re-downloads the dependency graph.
|
|
6
6
|
output: "standalone",
|
|
7
|
+
// Dev and prod must not share a build dir, or `pnpm dev` clobbers the prod
|
|
8
|
+
// `.next/standalone` that `pnpm start` (bin/tower.mjs) loads. The `dev` script
|
|
9
|
+
// sets NEXT_DISTDIR=.next-dev; prod build/start keep the default `.next`.
|
|
10
|
+
distDir: process.env.NEXT_DISTDIR || ".next",
|
|
7
11
|
// Pin the workspace root — without this Next.js infers it from the nearest
|
|
8
12
|
// lockfile and can wrongly pick a stray ~/package-lock.json in $HOME.
|
|
9
13
|
outputFileTracingRoot: __dirname,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tower-studio",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.43",
|
|
4
4
|
"description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tower": "bin/tower.mjs"
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"tsconfig.json"
|
|
30
30
|
],
|
|
31
31
|
"scripts": {
|
|
32
|
-
"predev": "node scripts/ensure-dev-db.js && pnpm db:migrate && pnpm mcp:build",
|
|
33
|
-
"dev": "next dev --webpack -p 9022",
|
|
32
|
+
"predev": "TOWER_DATA_DIR=\"$HOME/.tower-dev\" DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" node scripts/ensure-dev-db.js && pnpm db:migrate && pnpm mcp:build",
|
|
33
|
+
"dev": "NEXT_DISTDIR=.next-dev TOWER_DATA_DIR=\"$HOME/.tower-dev\" DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" next dev --webpack -p 9022",
|
|
34
34
|
"build": "pnpm mcp:build && rm -rf .next && next build && find .next -name '*.map' -delete && cp -R .next/static .next/standalone/.next/ && cp -R public .next/standalone/ && node scripts/prune-standalone-natives.js",
|
|
35
35
|
"release": "pnpm build && npm pack",
|
|
36
36
|
"release:smoke": "node scripts/release-smoke.js",
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"start": "node bin/tower.mjs",
|
|
40
40
|
"lint": "eslint",
|
|
41
41
|
"db:generate": "prisma generate",
|
|
42
|
-
"db:push": "prisma db push",
|
|
43
|
-
"db:seed": "tsx prisma/seed.ts",
|
|
44
|
-
"db:studio": "prisma studio",
|
|
45
|
-
"db:init": "tsx scripts/init-db.ts",
|
|
46
|
-
"db:init-fts": "tsx prisma/init-fts.ts",
|
|
47
|
-
"db:migrate": "tsx scripts/run-migrations.ts",
|
|
42
|
+
"db:push": "DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" prisma db push",
|
|
43
|
+
"db:seed": "DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" tsx prisma/seed.ts",
|
|
44
|
+
"db:studio": "DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" prisma studio",
|
|
45
|
+
"db:init": "TOWER_DATA_DIR=\"$HOME/.tower-dev\" DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" tsx scripts/init-db.ts",
|
|
46
|
+
"db:init-fts": "DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" tsx prisma/init-fts.ts",
|
|
47
|
+
"db:migrate": "TOWER_DATA_DIR=\"$HOME/.tower-dev\" DATABASE_URL=\"file:$HOME/.tower-dev/database/tower.db\" tsx scripts/run-migrations.ts",
|
|
48
48
|
"test": "vitest",
|
|
49
49
|
"test:run": "vitest run",
|
|
50
50
|
"test:e2e": "NO_PROXY=localhost,127.0.0.1 no_proxy=localhost,127.0.0.1 playwright test",
|
package/skills/tower/SKILL.md
CHANGED
|
@@ -103,6 +103,12 @@ it means your previous turn produced no tool call — issue the tool call now.
|
|
|
103
103
|
|
|
104
104
|
1. Call `move_task` with taskId and the target status (DONE, CANCELLED, etc.)
|
|
105
105
|
|
|
106
|
+
### "Edit a task" / "Change its title/description/priority/labels/version"
|
|
107
|
+
|
|
108
|
+
1. Call `update_task` with `taskId` plus any of: `title`, `description`, `priority`, `labelIds`, `subPath`, `versionId`. Only the fields you pass are changed.
|
|
109
|
+
2. **Labels** (`labelIds`): full replace, not a merge — pass the complete desired set (omit to leave labels untouched).
|
|
110
|
+
3. **Version** (`versionId`): to move a task into a version, call `list_versions` with the task's projectId, let the user pick, then pass `versionId`. To move the task back to the **backlog** (no version), pass `versionId: null` (or an empty string). A `versionId` that doesn't belong to the task's project is ignored and the task falls back to backlog. Omit `versionId` entirely to leave the version unchanged.
|
|
111
|
+
|
|
106
112
|
### "Search for ..." / "Find tasks about ..."
|
|
107
113
|
|
|
108
114
|
1. Call `search` with the query string
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[874533,(e,o,r)=>{o.exports=e.x("node:child_process",()=>require("node:child_process"))},750227,(e,o,r)=>{o.exports=e.x("node:path",()=>require("node:path"))},902157,(e,o,r)=>{o.exports=e.x("node:fs",()=>require("node:fs"))},660526,(e,o,r)=>{o.exports=e.x("node:os",()=>require("node:os"))},912714,(e,o,r)=>{o.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},980738,(e,o,r)=>{o.exports=e.x("node-pty-c710df912a232c01",()=>require("node-pty-c710df912a232c01"))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Bexternals%5D__0izylsq._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},198840,e=>{"use strict";var t=e.i(855104);let r=["localhost","127.0.0.1","[::1]"],n=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]),s=/^c[a-z0-9]{20,30}$/;e.s(["requireLocalhost",0,function(e){let s=e.headers.get("x-forwarded-for");if(s&&!s.split(",").map(e=>e.trim()).every(e=>n.has(e)))return t.NextResponse.json({error:"Forbidden"},{status:403});let o=e.headers.get("host")??"";return r.some(e=>o.startsWith(e))?null:t.NextResponse.json({error:"Forbidden"},{status:403})},"validateProjectId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid projectId format"},{status:400})},"validateTaskId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid taskId format"},{status:400})}])},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},769310,e=>{"use strict";var t=e.i(902157),r=e.i(874533),n=e.i(750227);function s(e=process.platform){return"win32"===e}function o(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let r=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(r)?`"${r}"`:r}let a=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function i(e,t={}){let r=t.cwd??process.cwd(),o=t.env??process.env,a=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=n.default.isAbsolute(e)?e:n.default.resolve(r,e);return await p(t,a)?t:null}let l=o.PATH??o.Path??"",c=s(a)?";":":",d=l.split(c).filter(Boolean),u=s(a)?(o.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],m=s(a)&&n.default.extname(e).length>0;for(let t of d)for(let r of s(a)?m?[n.default.join(t,e)]:u.map(r=>n.default.join(t,`${e}${r}`)):[n.default.join(t,e)])if(await p(r,a))return r;return null}let l=e=>(0,r.execSync)(e,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]});function c(e,t=process.platform,o=l){if(n.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!s(t)){try{let t=(0,r.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t)return t}catch{}return e}try{let t=o(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),r=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(r)return r;if(t.length>0)return t[0]}catch{}return e}async function d(e,t,r={}){let n=r.env??process.env,s=r.platform??process.platform;return u(await i(e,r)??e,t,n,s)}function u(e,t,r,a){if(!s(a))return{command:e,args:t};let i=n.default.extname(e).toLowerCase();return".cmd"===i||".bat"===i||".com"===i?{command:r.ComSpec||"cmd.exe",args:["/d","/s","/c",[o(e),...t.map(o)].join(" ")]}:{command:e,args:t}}async function p(e,r=process.platform){try{return await t.promises.access(e,s(r)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function m(e=process.platform){return s(e)?f():h()}async function h(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),r=[],s=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await p(e))continue;let o=n.default.basename(e),a=s.get(o)??0;s.set(o,a+1),a>0&&(o=`${o} (${a+1})`),r.push({name:o,path:e})}return r}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await p(t)&&e.push({name:n.default.basename(t),path:t});return e}}async function f(){let e=[],t=[],r=await i("git",{platform:"win32"});if(r){let e=n.default.resolve(n.default.dirname(r),"..","..");t.push(n.default.join(e,"bin","bash.exe"),n.default.join(e,"usr","bin","bash.exe"))}for(let e of[process.env.ProgramW6432,process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData?n.default.join(process.env.LocalAppData,"Programs"):null].filter(Boolean))t.push(n.default.join(e,"Git","bin","bash.exe"),n.default.join(e,"Git","usr","bin","bash.exe"));let s=process.env.USERPROFILE??"";for(let r of(s&&t.push(n.default.join(s,"scoop","apps","git","current","bin","bash.exe")),process.env.CLAUDE_CODE_GIT_BASH_PATH&&t.unshift(process.env.CLAUDE_CODE_GIT_BASH_PATH),t))if(await p(r,"win32")){e.push({name:"Git Bash",path:r});break}let o=await i("pwsh",{platform:"win32"});o&&e.push({name:"PowerShell",path:o});let a=process.env.windir??"C:\\WINDOWS",l=n.default.join(a,"System32","WindowsPowerShell","v1.0","powershell.exe");await p(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??n.default.join(a,"System32","cmd.exe");return await p(c,"win32")&&e.push({name:"Command Prompt",path:c}),e}let g=[{name:"Terminal",bundleName:"Terminal"},{name:"iTerm2",bundleName:"iTerm"},{name:"Warp",bundleName:"Warp"},{name:"Alacritty",bundleName:"Alacritty"},{name:"WezTerm",bundleName:"WezTerm"},{name:"kitty",bundleName:"kitty"},{name:"Hyper",bundleName:"Hyper"}];async function w(e=process.platform){if("darwin"===e){let t=[];for(let r of g){let n=await p(`/Applications/${r.bundleName}.app`,e);t.push({name:r.name,value:r.bundleName,installed:n})}return t}if(s(e)){let t=[],r=await i("wt",{platform:e});return r&&t.push({name:"Windows Terminal",value:r,installed:!0}),t}return[]}let y=[{name:"VS Code",command:"code"},{name:"VS Code Insiders",command:"code-insiders"},{name:"Cursor",command:"cursor"},{name:"Windsurf",command:"windsurf"},{name:"Zed",command:"zed"},{name:"Sublime Text",command:"subl"},{name:"IntelliJ IDEA",command:"idea"},{name:"WebStorm",command:"webstorm"},{name:"PyCharm",command:"pycharm"},{name:"GoLand",command:"goland"},{name:"RubyMine",command:"rubymine"},{name:"PhpStorm",command:"phpstorm"},{name:"CLion",command:"clion"},{name:"Rider",command:"rider"}],v={code:{darwin:["/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"],win32:["%LOCALAPPDATA%\\Programs\\Microsoft VS Code\\bin\\code.cmd","%ProgramFiles%\\Microsoft VS Code\\bin\\code.cmd"]},"code-insiders":{darwin:["/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/bin/code-insiders"],win32:["%LOCALAPPDATA%\\Programs\\Microsoft VS Code Insiders\\bin\\code-insiders.cmd","%ProgramFiles%\\Microsoft VS Code Insiders\\bin\\code-insiders.cmd"]},cursor:{darwin:["/Applications/Cursor.app/Contents/Resources/app/bin/cursor"],win32:["%LOCALAPPDATA%\\Programs\\cursor\\resources\\app\\bin\\cursor.cmd"]},windsurf:{darwin:["/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf"],win32:["%LOCALAPPDATA%\\Programs\\Windsurf\\bin\\windsurf.cmd"]},zed:{darwin:["/Applications/Zed.app/Contents/MacOS/cli"]},subl:{darwin:["/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"],win32:["%ProgramFiles%\\Sublime Text\\subl.exe","%ProgramFiles%\\Sublime Text 3\\subl.exe"]},idea:{darwin:["/Applications/IntelliJ IDEA.app/Contents/MacOS/idea","/Applications/IntelliJ IDEA CE.app/Contents/MacOS/idea"]},webstorm:{darwin:["/Applications/WebStorm.app/Contents/MacOS/webstorm"]},pycharm:{darwin:["/Applications/PyCharm.app/Contents/MacOS/pycharm","/Applications/PyCharm CE.app/Contents/MacOS/pycharm"]},goland:{darwin:["/Applications/GoLand.app/Contents/MacOS/goland"]},rubymine:{darwin:["/Applications/RubyMine.app/Contents/MacOS/rubymine"]},phpstorm:{darwin:["/Applications/PhpStorm.app/Contents/MacOS/phpstorm"]},clion:{darwin:["/Applications/CLion.app/Contents/MacOS/clion"]},rider:{darwin:["/Applications/Rider.app/Contents/MacOS/rider"]}};async function k(e,t={}){let r=t.platform??process.platform,n=t.env??process.env,o=await i(e,t);if(o)return o;for(let t of v[e]?.[r]??[]){let e=s(r)?function(e,t){return e.replace(/%([^%]+)%/g,(e,r)=>{let n=t[r];if(void 0!==n)return n;let s=Object.keys(t).find(e=>e.toLowerCase()===r.toLowerCase());return s?t[s]??e:e})}(t,n):t;if(await p(e,r))return e}return null}async function S(e=process.platform){let t=[];for(let r of y){let n=!!await k(r.command,{platform:e});t.push({name:r.name,command:r.command,installed:n})}return t}e.s(["detectEditors",0,S,"detectShells",0,m,"detectTerminalApps",0,w,"ensurePathInEnv",0,function(e,t=process.platform){let r=s(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[r]:function(e=process.platform){return s(e)?"C:\\Windows\\System32;C:\\Windows;C:\\Windows\\System32\\Wbem":"/usr/local/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin"}(t)}},"isWindows",0,s,"resolveCommandPath",0,i,"resolveCommandPathSync",0,c,"resolveSdkExecutable",0,function(e,r=process.platform,o=e=>(0,t.readFileSync)(e,"utf-8"),a=e=>(0,t.existsSync)(e)){if(!s(r))return e;let i=n.default.extname(e).toLowerCase();if(".cmd"!==i&&".bat"!==i)return e;let l=n.default.win32.dirname(e),c="",d=e=>{let t=e.replace(/%~?dp0%/gi,l).replace(/\//g,"\\");return n.default.win32.isAbsolute(t)?n.default.win32.normalize(t):n.default.win32.resolve(l,t)};try{let t=o(e);c=t.replace(/\s+/g," ").slice(0,400);let r=t.match(/"([^"]*\.(?:c?js|mjs))"/i);if(r){let e=d(r[1]);if(a(e))return e;console.error(`[resolveSdkExecutable] parsed cli="${e}" but it doesn't exist`)}for(let e of t.matchAll(/"([^"]*\.exe)"/gi)){let t=d(e[1]);if("node.exe"!==n.default.win32.basename(t).toLowerCase()&&a(t))return t}}catch(e){console.error(`[resolveSdkExecutable] shim read failed: ${e instanceof Error?e.message:e}`)}let u=n.default.win32.join(l,"node_modules","@anthropic-ai","claude-code"),p=n.default.win32.basename(e,n.default.win32.extname(e)),m=[n.default.win32.join(u,"cli.js"),n.default.win32.join(u,"bin",`${p}.exe`)];for(let e of m)if(a(e))return e;return console.error(`[resolveSdkExecutable] could not convert ${e} → guesses=${JSON.stringify(m)} shim="${c}"`),e},"resolveSpawnTarget",0,d,"resolveSpawnTargetSync",0,function(e,t,r=process.platform,n){return u(c(e,r,n),t,process.env,r)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of a)delete t[e];return t}])},53674,e=>{"use strict";e.s(["getPackageRoot",0,function(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}])},472129,e=>{"use strict";var t=e.i(902157),r=e.i(660526),n=e.i(750227),s=e.i(769310),o=e.i(53674);let a=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];e.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(e){let t=["--dangerously-skip-permissions"];e.extraArgs?.length&&t.push(...e.extraArgs),e.resumeSessionId?t.push("--resume",e.resumeSessionId):e.continueLatest?t.push("--continue"):e.prompt&&t.push(e.prompt);let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readSettings(),t=e.hooks??{},r=(0,o.getPackageRoot)().replace(/\\/g,"/"),s=n.join(r,"scripts","session-start-hook.js").replace(/\\/g,"/"),a=n.join(r,"scripts","post-tool-hook.js").replace(/\\/g,"/"),i=n.join(r,"scripts","stop-hook.js").replace(/\\/g,"/"),l=!1;return l=this.upsertHook(t,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${s}"`,timeout:5,type:"command"}]})||l,l=this.upsertHook(t,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${a}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||l,(l=this.upsertHook(t,"Stop","stop-hook.js",{hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]})||l)&&(e.hooks=t,this.writeSettings(e)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async repairHookPaths(){try{let e=this.readSettings(),t=e.hooks??{},r=(0,o.getPackageRoot)().replace(/\\/g,"/"),s=!1;for(let[e,o]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let a=this.getHookArray(t,e),i=a.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(o)));if(i<0)continue;let l=n.join(r,"scripts",o).replace(/\\/g,"/"),c=`node "${l}"`,d=a[i]?.hooks?.[0];d&&d.command!==c&&(d.command=c,t[e]=a,s=!0)}s&&(e.hooks=t,this.writeSettings(e))}catch{}}upsertHook(e,t,r,n){let s=this.getHookArray(e,t),o=n?.hooks?.[0]?.command,a=s.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(a>=0){if(s[a]?.hooks?.[0]?.command===o)return!1;s.splice(a,1)}return s.push(n),e[t]=s,!0}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},r=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let n=this.getHookArray(t,e);t[e]=n.filter(e=>!e.hooks?.some(e=>r.some(t=>e.command?.includes(t))))}return e.hooks=t,this.writeSettings(e),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readSettings().hooks??{},t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=t.scope??"user",n={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(n.env=e.env);let s=this.resolveCommand(),o=["mcp","add-json","-s",r,e.name,JSON.stringify(n)];try{return await this.runCli(s,["mcp","remove","-s",r,e.name],t.cwd).catch(()=>{}),await this.runCli(s,o,t.cwd),{ok:!0,method:"cli",detail:`${s} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${s} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=t.scope??"user",n=this.resolveCommand(),s=["mcp","remove","-s",r,e];try{return await this.runCli(n,s,t.cwd),{ok:!0,method:"cli",detail:`${n} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${n} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,r){let o=n.join(this.getConfigDir(),"skills",e);try{if(!t.existsSync(r))return{ok:!1,method:"symlink",detail:o,error:`Source skill dir does not exist: ${r}`};t.mkdirSync(n.dirname(o),{recursive:!0});let e=await t.promises.lstat(o).catch(()=>null);if(e)if(!(e.isSymbolicLink()||(0,s.isWindows)()&&e.isDirectory()))return{ok:!1,method:"symlink",detail:o,error:`Refusing to overwrite non-symlink at ${o}`};else try{let e=await t.promises.readlink(o);if(n.resolve(e)===n.resolve(r))return{ok:!0,method:"symlink",detail:`${o} → ${r} (already)`};await t.promises.unlink(o)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:o,error:`Refusing to overwrite non-symlink at ${o}`}}let a=(0,s.isWindows)()?"junction":"dir";return await t.promises.symlink(r,o,a),{ok:!0,method:"symlink",detail:`${o} → ${r}`}}catch(e){return{ok:!1,method:"symlink",detail:o,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let r=n.join(this.getConfigDir(),"skills",e);try{let e=await t.promises.lstat(r).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${r} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to remove non-symlink at ${r}`};return await t.promises.unlink(r),{ok:!0,method:"symlink",detail:r}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,r){let s=n.join(this.getConfigDir(),"skills",e);try{if(!(await t.promises.lstat(s)).isSymbolicLink())return!1;if(!r)return!0;let e=await t.promises.readlink(s),o=n.isAbsolute(e)?e:n.resolve(n.dirname(s),e);return n.resolve(o)===n.resolve(r)}catch{return!1}}async runCli(t,r,n,s=1e4){let{execFile:o}=await e.A(482848),{promisify:a}=await e.A(268548),i=a(o),{stdout:l}=await i(t,r,{cwd:n,timeout:s});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),{resolveSpawnTarget:n}=await e.A(200628),s=r(t),o=await n(this.resolveCommand(),["--version"]),{stdout:a}=await s(o.command,o.args,{timeout:5e3});return a.trim()||null}catch{return null}}async getModels(){return a}getConfigDir(){return n.join(r.homedir(),".claude")}getSettingsPath(){return n.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return n.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["--print",e,"--output-format","stream-json","--verbose"]}}resolveCommand(){if(process.env.CLAUDE_CODE_PATH)return process.env.CLAUDE_CODE_PATH;if((0,s.isWindows)()){let e=(0,s.resolveCommandPathSync)("claude-code");if("claude-code"!==e)return e}return(0,s.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(t.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let r=this.getConfigDir();t.existsSync(r)||t.mkdirSync(r,{recursive:!0}),t.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}])},212019,e=>{"use strict";var t=e.i(765876),r=e.i(675896),n=e.i(959160),s=e.i(97944),o=e.i(86757),a=e.i(204144),i=e.i(273436),l=e.i(743641),c=e.i(813766),d=e.i(840884),u=e.i(498814),p=e.i(780006),m=e.i(544432),h=e.i(772005),f=e.i(450223),g=e.i(193695);e.i(628400);var w=e.i(800071),y=e.i(855104),v=e.i(198840),k=e.i(750227),S=e.i(472129),C=e.i(53674);let A=new S.ClaudeCliAdapter;async function b(e){let t=(0,v.requireLocalhost)(e);if(t)return t;let r=await A.isHooksInstalled(),n=k.join((0,C.getPackageRoot)(),"scripts","post-tool-hook.js");return y.NextResponse.json({installed:r,hookPath:n})}async function x(e){let t=(0,v.requireLocalhost)(e);if(t)return t;let r=process.env.NEXTAUTH_URL??`http://localhost:${process.env.PORT??3e3}`;return await A.installHooks(r),y.NextResponse.json({success:!0})}async function E(e){let t=(0,v.requireLocalhost)(e);return t||(await A.uninstallHooks(),y.NextResponse.json({success:!0}))}e.s(["DELETE",0,E,"GET",0,b,"POST",0,x,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],730599);var P=e.i(730599);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/internal/hooks/install/route",pathname:"/api/internal/hooks/install",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/internal/hooks/install/route.ts",nextConfigOutput:"standalone",userland:P}),{workAsyncStorage:j,workUnitAsyncStorage:T,serverHooks:O}=R;async function _(e,t,n){n.requestMeta&&(0,s.setRequestMeta)(e,n.requestMeta),R.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/internal/hooks/install/route";y=y.replace(/\/index$/,"")||"/";let v=await R.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:k,params:S,nextConfig:C,parsedUrl:A,isDraftMode:b,prerenderManifest:x,routerServerContext:E,isOnDemandRevalidate:P,revalidateOnlyGenerated:j,resolvedPathname:T,clientReferenceManifest:O,serverActionsManifest:_}=v,I=(0,i.normalizeAppPath)(y),N=!!(x.dynamicRoutes[I]||x.routes[T]),D=async()=>((null==E?void 0:E.render404)?await E.render404(e,t,A,!1):t.end("This page could not be found"),null);if(N&&!b){let e=!!x.routes[T],t=x.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await D();throw new g.NoFallbackError}}let H=null;!N||R.isDev||b||(H="/index"===(H=T)?"/":H);let L=!0===R.isDev||!N,$=N&&!L;_&&O&&(0,a.setManifestsSingleton)({page:y,clientReferenceManifest:O,serverActionsManifest:_});let M=e.method||"GET",U=(0,o.getTracer)(),q=U.getActiveScopeSpan(),W=!!(null==E?void 0:E.isWrappedByNextServer),F=!!(0,s.getRequestMeta)(e,"minimalMode"),K=(0,s.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,C,x,F);null==K||K.resetRequestCache(),globalThis.__incrementalCache=K;let B={params:S,previewProps:x.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:L,incrementalCache:K,cacheLifeProfiles:C.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,s)=>R.onRequestError(e,t,n,s,E)},sharedContext:{buildId:k}},V=new l.NodeNextRequest(e),G=new l.NodeNextResponse(t),z=c.NextRequestAdapter.fromNodeNextRequest(V,(0,c.signalFromNodeResponse)(t));try{let s,a=async e=>R.handle(z,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",n),s.updateName(t))}else e.updateName(`${M} ${y}`)}),i=async s=>{var o,i;let l=async({previousCacheEntry:r})=>{try{if(!F&&P&&j&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await a(s);e.fetchMetrics=B.renderOpts.fetchMetrics;let i=B.renderOpts.pendingWaitUntil;i&&n.waitUntil&&(n.waitUntil(i),i=void 0);let l=B.renderOpts.collectedTags;if(!N)return await (0,p.sendResponse)(V,G,o,B.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(o.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,n=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,E),t}},c=await R.handleResponse({req:e,nextConfig:C,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:x,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:j,responseGenerator:l,waitUntil:n.waitUntil,isMinimalMode:F});if(!N)return null;if((null==c||null==(o=c.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(i=c.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",P?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,m.fromNodeOutgoingHttpHeaders)(c.value.headers);return F&&N||d.delete(f.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,h.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(V,G,new Response(c.value.body,{headers:d,status:c.value.status||200})),null};W&&q?await i(q):(s=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${y}`,kind:o.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},i),void 0,!W))}catch(t){if(t instanceof g.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:P})},!1,E),N)throw t;return await (0,p.sendResponse)(V,G,new Response(null,{status:500})),null}}e.s(["handler",0,_,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:T})},"routeModule",0,R,"serverHooks",0,O,"workAsyncStorage",0,j,"workUnitAsyncStorage",0,T],212019)},482848,e=>{e.v(e=>Promise.resolve().then(()=>e(874533)))},268548,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_util_0xr.y7p._.js"].map(t=>e.l(t))).then(()=>t(812057)))},144264,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_child_process_0pwkpv9._.js"].map(t=>e.l(t))).then(()=>t(233405)))},534777,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_util_0wtvqkc._.js"].map(t=>e.l(t))).then(()=>t(224361)))},200628,e=>{e.v(e=>Promise.resolve().then(()=>e(769310)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0.tbb~k._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[660526,(e,t,s)=>{t.exports=e.x("node:os",()=>require("node:os"))},933919,(e,t,s)=>{t.exports=e.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},843793,e=>{"use strict";var t=e.i(933919);let s=globalThis.prisma??new t.PrismaClient({log:[]});process.on("SIGTERM",()=>{s.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{s.$disconnect().catch(()=>{})}),e.s(["db",0,s])},192520,e=>{"use strict";let t;var s=e.i(750227),r=e.i(660526),i=e.i(902157);function n(){return t||(t=process.env.TOWER_DATA_DIR||(0,s.join)((0,r.homedir)(),".tower"),(0,i.existsSync)(t)||(0,i.mkdirSync)(t,{recursive:!0})),t}e.s(["getAssistantDir",0,function(){let e=(0,s.join)(n(),"assistant");return(0,i.existsSync)(e)||(0,i.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,s.join)(n(),"backups");return(0,i.existsSync)(e)||(0,i.mkdirSync)(e,{recursive:!0}),e},"getExtensionsDir",0,function(){let e=(0,s.join)(n(),"extensions");return(0,i.existsSync)(e)||(0,i.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=process.env.TOWER_STORAGE_DIR||function(){try{let e=(0,i.readFileSync)((0,s.join)(n(),"storage-location"),"utf-8").trim();return e.length>0?e:null}catch{return null}}(),t=e&&e.length>0?e:(0,s.join)(n(),"storage");return(0,i.existsSync)(t)||(0,i.mkdirSync)(t,{recursive:!0}),t},"getTowerDbPath",0,function(){let e;return(0,s.join)((e=(0,s.join)(n(),"database"),(0,i.existsSync)(e)||(0,i.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,n])},540193,e=>{"use strict";var t=e.i(750227),s=e.i(902157),r=e.i(192520),i=e.i(843793);function n(e,s){let i=(0,r.getStorageDir)(),n=t.resolve(i,"assets",e,s),c=t.resolve(i,"assets")+t.sep;return n.startsWith(c)?{resolved:n,error:null}:{resolved:null,error:"Invalid path"}}async function c(e,t){let{resolved:r}=n(e,t);if(r&&(0,s.existsSync)(r))return r;let c=await i.db.projectAsset.findFirst({where:{projectId:e,filename:t},select:{path:!0},orderBy:{createdAt:"desc"}});return c?.path&&(0,s.existsSync)(c.path)?c.path:null}async function a(e){return null!==await i.db.projectAsset.findFirst({where:{path:e},select:{id:!0}})}e.s(["MIME_MAP",0,{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".pdf":"application/pdf",".txt":"text/plain",".md":"text/markdown",".json":"application/json"},"isRegisteredAssetPath",0,a,"resolveAssetFile",0,c,"resolveAssetPath",0,n])},487083,e=>{"use strict";var t=e.i(540193);e.s(["isRegisteredAssetPath",()=>t.isRegisteredAssetPath],487083)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__032d9pl._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},933919,(e,t,r)=>{t.exports=e.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},843793,e=>{"use strict";var t=e.i(933919);let r=globalThis.prisma??new t.PrismaClient({log:[]});process.on("SIGTERM",()=>{r.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{r.$disconnect().catch(()=>{})}),e.s(["db",0,r])},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},198840,e=>{"use strict";var t=e.i(855104);let r=["localhost","127.0.0.1","[::1]"],n=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]),s=/^c[a-z0-9]{20,30}$/;e.s(["requireLocalhost",0,function(e){let s=e.headers.get("x-forwarded-for");if(s&&!s.split(",").map(e=>e.trim()).every(e=>n.has(e)))return t.NextResponse.json({error:"Forbidden"},{status:403});let a=e.headers.get("host")??"";return r.some(e=>a.startsWith(e))?null:t.NextResponse.json({error:"Forbidden"},{status:403})},"validateProjectId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid projectId format"},{status:400})},"validateTaskId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid taskId format"},{status:400})}])},192520,e=>{"use strict";let t;var r=e.i(750227),n=e.i(660526),s=e.i(902157);function a(){return t||(t=process.env.TOWER_DATA_DIR||(0,r.join)((0,n.homedir)(),".tower"),(0,s.existsSync)(t)||(0,s.mkdirSync)(t,{recursive:!0})),t}e.s(["getAssistantDir",0,function(){let e=(0,r.join)(a(),"assistant");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,r.join)(a(),"backups");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getExtensionsDir",0,function(){let e=(0,r.join)(a(),"extensions");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=process.env.TOWER_STORAGE_DIR||function(){try{let e=(0,s.readFileSync)((0,r.join)(a(),"storage-location"),"utf-8").trim();return e.length>0?e:null}catch{return null}}(),t=e&&e.length>0?e:(0,r.join)(a(),"storage");return(0,s.existsSync)(t)||(0,s.mkdirSync)(t,{recursive:!0}),t},"getTowerDbPath",0,function(){let e;return(0,r.join)((e=(0,r.join)(a(),"database"),(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,a])},540193,e=>{"use strict";var t=e.i(750227),r=e.i(902157),n=e.i(192520),s=e.i(843793);function a(e,r){let s=(0,n.getStorageDir)(),a=t.resolve(s,"assets",e,r),i=t.resolve(s,"assets")+t.sep;return a.startsWith(i)?{resolved:a,error:null}:{resolved:null,error:"Invalid path"}}async function i(e,t){let{resolved:n}=a(e,t);if(n&&(0,r.existsSync)(n))return n;let i=await s.db.projectAsset.findFirst({where:{projectId:e,filename:t},select:{path:!0},orderBy:{createdAt:"desc"}});return i?.path&&(0,r.existsSync)(i.path)?i.path:null}async function o(e){return null!==await s.db.projectAsset.findFirst({where:{path:e},select:{id:!0}})}e.s(["MIME_MAP",0,{".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".pdf":"application/pdf",".txt":"text/plain",".md":"text/markdown",".json":"application/json"},"isRegisteredAssetPath",0,o,"resolveAssetFile",0,i,"resolveAssetPath",0,a])},341291,e=>{"use strict";var t=e.i(666680),r=e.i(902157),n=e.i(750227),s=e.i(192520);function a(e){if(!e.startsWith((0,s.getStorageDir)()+n.sep))throw Error("Path traversal detected")}let i=new Set(["image","screenshot","img","photo","picture","clipboard","paste","untitled"]);e.s(["buildCacheFilename",0,function(e,r){let s=n.basename(e,n.extname(e)),a=t.randomUUID().replace(/-/g,"").slice(0,8),o=s.toLowerCase();if(!s||i.has(o)||/^screenshot[\s_\-]/i.test(s))return`tower_image-${a}${r}`;let l=s.replace(/[^\p{L}\p{N}]/gu,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return`${l||"file"}-${a}${r}`},"ensureAssetsDir",0,function(e){let t,i=(a(t=n.join((0,s.getStorageDir)(),"assets",e)),t);return r.mkdirSync(i,{recursive:!0}),i},"getAssistantCacheDir",0,function(e="images"){let t=new Date,i=`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`,o=n.join((0,s.getStorageDir)(),"cache","assistant",i,e);return a(o),r.mkdirSync(o,{recursive:!0}),o},"getAssistantCacheRoot",0,function(){let e=n.join((0,s.getStorageDir)(),"cache","assistant");return a(e),e}])},634712,e=>{"use strict";let t=["jpg","jpeg","png","gif","webp"],r=["md","txt","json","csv"],n=[...t,...r].join("|"),s=RegExp(`^\\d{4}-\\d{2}/(images|files)/[^/]+\\.(${n})$`,"i");function a(e){let n=e.replace(/^\./,"").toLowerCase();return t.includes(n)?"image":r.includes(n)?"text":null}[...t.map(e=>`.${e}`),...r.map(e=>`.${e}`),"image/*"].join(","),e.s(["ALLOWED_TEXT_EXTS",0,r,"ATTACHMENT_SUBPATH_RE",0,s,"MAX_ATTACHMENTS",0,10,"classifyAttachmentExt",0,a,"classifyAttachmentSubPath",0,function(e){if(!s.test(e))return null;let t=e.lastIndexOf(".");return t<0?null:a(e.slice(t+1))}])},118951,e=>{"use strict";var t=e.i(765876),r=e.i(675896),n=e.i(959160),s=e.i(97944),a=e.i(86757),i=e.i(204144),o=e.i(273436),l=e.i(743641),c=e.i(813766),u=e.i(840884),d=e.i(498814),p=e.i(780006),h=e.i(544432),g=e.i(772005),x=e.i(450223),f=e.i(193695);e.i(628400);var m=e.i(800071),v=e.i(902157),R=e.i(750227),w=e.i(855104),y=e.i(198840),E=e.i(540193),A=e.i(341291);let S=e.i(634712).ATTACHMENT_SUBPATH_RE;async function j(e,{params:t}){let r,n=(0,y.requireLocalhost)(e);if(n)return n;let{segments:s}=await t,a=s.join("/");if(!S.test(a))return w.NextResponse.json({error:"Invalid path"},{status:400});let i=(0,A.getAssistantCacheRoot)(),o=R.resolve(i,a);if(!o.startsWith(i+R.sep))return w.NextResponse.json({error:"Invalid path"},{status:400});try{r=await v.promises.readFile(o)}catch(e){if("ENOENT"===e.code)return w.NextResponse.json({error:"Not found"},{status:404});return w.NextResponse.json({error:"Read error"},{status:500})}let l=R.extname(a).toLowerCase(),c=E.MIME_MAP[l]??"application/octet-stream";return new Response(new Uint8Array(r),{status:200,headers:{"Content-Type":c,"Cache-Control":"private, max-age=3600"}})}e.s(["GET",0,j,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],141140);var T=e.i(141140);let C=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/internal/cache/[...segments]/route",pathname:"/api/internal/cache/[...segments]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/internal/cache/[...segments]/route.ts",nextConfigOutput:"standalone",userland:T}),{workAsyncStorage:b,workUnitAsyncStorage:_,serverHooks:N}=C;async function P(e,t,n){n.requestMeta&&(0,s.setRequestMeta)(e,n.requestMeta),C.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/internal/cache/[...segments]/route";v=v.replace(/\/index$/,"")||"/";let R=await C.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:w,params:y,nextConfig:E,parsedUrl:A,isDraftMode:S,prerenderManifest:j,routerServerContext:T,isOnDemandRevalidate:b,revalidateOnlyGenerated:_,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:k}=R,I=(0,o.normalizeAppPath)(v),D=!!(j.dynamicRoutes[I]||j.routes[N]),q=async()=>((null==T?void 0:T.render404)?await T.render404(e,t,A,!1):t.end("This page could not be found"),null);if(D&&!S){let e=!!j.routes[N],t=j.dynamicRoutes[I];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await q();throw new f.NoFallbackError}}let M=null;!D||C.isDev||S||(M="/index"===(M=N)?"/":M);let O=!0===C.isDev||!D,$=D&&!O;k&&P&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:P,serverActionsManifest:k});let H=e.method||"GET",U=(0,a.getTracer)(),F=U.getActiveScopeSpan(),L=!!(null==T?void 0:T.isWrappedByNextServer),B=!!(0,s.getRequestMeta)(e,"minimalMode"),W=(0,s.getRequestMeta)(e,"incrementalCache")||await C.getIncrementalCache(e,E,j,B);null==W||W.resetRequestCache(),globalThis.__incrementalCache=W;let K={params:y,previewProps:j.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts},cacheComponents:!!E.cacheComponents,supportsDynamicResponse:O,incrementalCache:W,cacheLifeProfiles:E.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,s)=>C.onRequestError(e,t,n,s,T)},sharedContext:{buildId:w}},G=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),V=c.NextRequestAdapter.fromNodeNextRequest(G,(0,c.signalFromNodeResponse)(t));try{let s,i=async e=>C.handle(V,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=U.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",n),s.updateName(t))}else e.updateName(`${H} ${v}`)}),o=async s=>{var a,o;let l=async({previousCacheEntry:r})=>{try{if(!B&&b&&_&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await i(s);e.fetchMetrics=K.renderOpts.fetchMetrics;let o=K.renderOpts.pendingWaitUntil;o&&n.waitUntil&&(n.waitUntil(o),o=void 0);let l=K.renderOpts.collectedTags;if(!D)return await (0,p.sendResponse)(G,X,a,K.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[x.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await C.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:b})},!1,T),t}},c=await C.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:b,revalidateOnlyGenerated:_,responseGenerator:l,waitUntil:n.waitUntil,isMinimalMode:B});if(!D)return null;if((null==c||null==(a=c.value)?void 0:a.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(o=c.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",b?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(c.value.headers);return B&&D||u.delete(x.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,g.getCacheControlHeader)(c.cacheControl)),await (0,p.sendResponse)(G,X,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};L&&F?await o(F):(s=U.getActiveScopeSpan(),await U.withPropagatedContext(e.headers,()=>U.trace(u.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:a.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof f.NoFallbackError||await C.onRequestError(e,t,{routerKind:"App Router",routePath:I,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:$,isOnDemandRevalidate:b})},!1,T),D)throw t;return await (0,p.sendResponse)(G,X,new Response(null,{status:500})),null}}e.s(["handler",0,P,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:_})},"routeModule",0,C,"serverHooks",0,N,"workAsyncStorage",0,b,"workUnitAsyncStorage",0,_],118951)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__04jduyo._.js.map
|