tower-studio 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build/chunks/{0kjx__pnpm_05m.mc_._.js → 0-yb__pnpm_0dykqwq._.js} +167 -167
- package/.next/build/chunks/{[root-of-the-server]__13e2v6w._.js → [root-of-the-server]__01h52~y._.js} +3 -3
- package/.next/build/chunks/{[root-of-the-server]__0a5dngl._.js → [root-of-the-server]__097_v8t._.js} +7 -7
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0n5jxhz._.js +13 -0
- package/.next/build/chunks/[turbopack]_runtime.js +1 -1
- package/.next/build/postcss.js +4 -4
- package/.next/build-manifest.json +9 -9
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +237 -237
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +3 -3
- package/.next/required-server-files.json +3 -3
- package/.next/server/app/_global-error/page/build-manifest.json +6 -6
- package/.next/server/app/_global-error/page.js +11 -11
- package/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +8 -8
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_global-error.segments/_full.segment.rsc +8 -8
- package/.next/server/app/_global-error.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/build-manifest.json +6 -6
- package/.next/server/app/_not-found/page/next-font-manifest.json +1 -1
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/_not-found/page/server-reference-manifest.json +76 -76
- package/.next/server/app/_not-found/page.js +19 -19
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +14 -14
- package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/adapters/test/route.js +8 -8
- package/.next/server/app/api/adapters/test/route.js.nft.json +1 -1
- package/.next/server/app/api/browse-fs/route.js +6 -6
- package/.next/server/app/api/browse-fs/route.js.nft.json +1 -1
- package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js +6 -6
- package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/git/route.js +6 -6
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js +6 -6
- package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assets/reveal/route.js +6 -6
- package/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assistant/chat/route.js +6 -6
- package/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assistant/images/route.js +8 -8
- package/.next/server/app/api/internal/assistant/images/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assistant/route.js +6 -6
- package/.next/server/app/api/internal/assistant/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/assistant/sessions/route.js +6 -6
- package/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/cache/[...segments]/route.js +6 -6
- package/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/hooks/install/route.js +6 -6
- package/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/hooks/session/route.js +6 -6
- package/.next/server/app/api/internal/hooks/session/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/hooks/stop/route.js +7 -7
- package/.next/server/app/api/internal/hooks/stop/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/hooks/upload/route.js +6 -6
- package/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/notifications/pending/route.js +6 -6
- package/.next/server/app/api/internal/notifications/pending/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js +7 -7
- package/.next/server/app/api/internal/terminal/[taskId]/buffer/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/terminal/[taskId]/input/route.js +7 -7
- package/.next/server/app/api/internal/terminal/[taskId]/input/route.js.nft.json +1 -1
- package/.next/server/app/api/internal/terminal/[taskId]/start/route.js +9 -9
- package/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/diff/route.js +7 -7
- package/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/merge/route.js +8 -8
- package/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
- package/.next/server/app/apple-icon.png/route.js +6 -6
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
- package/.next/server/app/favicon.ico/route.js +6 -6
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/server/app/icon0.svg/route.js +6 -6
- package/.next/server/app/icon0.svg/route.js.nft.json +1 -1
- package/.next/server/app/icon1.png/route.js +6 -6
- package/.next/server/app/icon1.png/route.js.nft.json +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +14 -14
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/server/app/index.segments/_index.segment.rsc +9 -9
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/manifest.json/route.js +6 -6
- package/.next/server/app/manifest.json/route.js.nft.json +1 -1
- package/.next/server/app/missions/page/build-manifest.json +6 -6
- package/.next/server/app/missions/page/next-font-manifest.json +1 -1
- package/.next/server/app/missions/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/missions/page/server-reference-manifest.json +144 -144
- package/.next/server/app/missions/page.js +21 -21
- package/.next/server/app/missions/page.js.nft.json +1 -1
- package/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/onboarding/page/build-manifest.json +6 -6
- package/.next/server/app/onboarding/page/next-font-manifest.json +1 -1
- package/.next/server/app/onboarding/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/onboarding/page/server-reference-manifest.json +76 -76
- package/.next/server/app/onboarding/page.js +20 -20
- package/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/onboarding.html +1 -1
- package/.next/server/app/onboarding.rsc +16 -16
- package/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
- package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
- package/.next/server/app/page/build-manifest.json +6 -6
- package/.next/server/app/page/next-font-manifest.json +1 -1
- package/.next/server/app/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/page/server-reference-manifest.json +76 -76
- package/.next/server/app/page.js +20 -20
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page/build-manifest.json +6 -6
- package/.next/server/app/settings/page/next-font-manifest.json +1 -1
- package/.next/server/app/settings/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/settings/page/server-reference-manifest.json +112 -112
- package/.next/server/app/settings/page.js +20 -20
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +16 -16
- package/.next/server/app/settings.segments/_full.segment.rsc +16 -16
- package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/server/app/settings.segments/_index.segment.rsc +9 -9
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/server/app/workspaces/[workspaceId]/archive/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/archive/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +186 -186
- package/.next/server/app/workspaces/[workspaceId]/archive/page.js +20 -20
- package/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/[workspaceId]/assets/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/assets/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +172 -172
- package/.next/server/app/workspaces/[workspaceId]/assets/page.js +20 -20
- package/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/[workspaceId]/notes/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/notes/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +146 -146
- package/.next/server/app/workspaces/[workspaceId]/notes/page.js +20 -20
- package/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/[workspaceId]/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +188 -188
- package/.next/server/app/workspaces/[workspaceId]/page.js +21 -21
- package/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +76 -76
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +20 -20
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +10 -10
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +192 -192
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +22 -22
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/workspaces/page/build-manifest.json +6 -6
- package/.next/server/app/workspaces/page/next-font-manifest.json +1 -1
- package/.next/server/app/workspaces/page/react-loadable-manifest.json +7 -7
- package/.next/server/app/workspaces/page/server-reference-manifest.json +112 -112
- package/.next/server/app/workspaces/page.js +20 -20
- package/.next/server/app/workspaces/page.js.nft.json +1 -1
- package/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assets_reveal_route_actions_0znebp..js +3 -0
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_chat_route_actions_00gjtz_.js +3 -0
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_images_route_actions_0.n5t~i.js +3 -0
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_assistant_sessions_route_actions_0-fm7rx.js +3 -0
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_hooks_install_route_actions_0l972g~.js +3 -0
- package/.next/server/chunks/04uy__next-internal_server_app_api_internal_hooks_session_route_actions_0.suzi1.js +3 -0
- package/.next/server/chunks/0afp_server_app_api_files_assets_[projectId]_[filename]_route_actions_0-awt9r.js +3 -0
- package/.next/server/chunks/0afp_server_app_api_internal_assets_[projectId]_[filename]_route_actions_0t6ek0w.js +3 -0
- package/.next/server/chunks/0afp_server_app_api_internal_notifications_pending_route_actions_0f-e1l..js +3 -0
- package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_buffer_route_actions_0m0i0r_.js +3 -0
- package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_input_route_actions_0w_hflw.js +3 -0
- package/.next/server/chunks/0afp_server_app_api_internal_terminal_[taskId]_start_route_actions_0tci.x0.js +3 -0
- package/.next/server/chunks/{03j-_@anthropic-ai_claude-agent-sdk_sdk_mjs_04597t~._.js → 0b0n_@anthropic-ai_claude-agent-sdk_sdk_mjs_0wzx_-c._.js} +2 -2
- package/.next/server/chunks/0l2w_next-internal_server_app_api_internal_cache_[___segments]_route_actions_0s95wfk.js +3 -0
- package/.next/server/chunks/0u0h_tower__next-internal_server_app_api_internal_hooks_upload_route_actions_10hulej.js +3 -0
- package/.next/server/chunks/0u0h_tower__next-internal_server_app_api_tasks_[taskId]_merge_route_actions_02facil.js +3 -0
- package/.next/server/chunks/{10ge_next_dist_08.3req._.js → 0uz~_next_dist_0auh~z2._.js} +3 -3
- package/.next/server/chunks/{10ge_next_dist_esm_build_templates_app-route_0liabcf.js → 0uz~_next_dist_esm_build_templates_app-route_0.k256s.js} +2 -2
- package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_05yec2y.js +4 -0
- package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_06vryvz.js +3 -0
- package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_0q64.kc.js +3 -0
- package/.next/server/chunks/{10ge_next_dist_esm_build_templates_app-route_0jwpolf.js → 0uz~_next_dist_esm_build_templates_app-route_0s-fzhv.js} +2 -2
- package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_12y4scn.js +3 -0
- package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_adapters_test_route_actions_0i51gzp.js +3 -0
- package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_internal_assistant_route_actions_0n4kn0g.js +3 -0
- package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_internal_hooks_stop_route_actions_0tddg8n.js +3 -0
- package/.next/server/chunks/0y0r_f_tower__next-internal_server_app_api_tasks_[taskId]_diff_route_actions_0ric8cc.js +3 -0
- package/.next/server/chunks/121__zod_v4_classic_external_0~18d66.js +39 -0
- package/.next/server/chunks/[root-of-the-server]__0.9.bkp._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__003.cao._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__11v.yk_._.js → [root-of-the-server]__02~bq0q._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__05i_6jl._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05mc_xk._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__06zd8x0._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07_t6ha._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__05pxb~w._.js → [root-of-the-server]__081dmfv._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__0axwx7g._.js +20 -0
- package/.next/server/chunks/[root-of-the-server]__0bvqbq0._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__12._zd-._.js → [root-of-the-server]__0hw3ulq._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0sjsc63._.js → [root-of-the-server]__0i4isjs._.js} +3 -3
- package/.next/server/chunks/[root-of-the-server]__0il.3bc._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__07-am_7._.js → [root-of-the-server]__0k6_.b8._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0lg6mol._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0m31xle._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0p-9erj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0p5iuez._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__0pe2bmo._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0sgxys4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0t2ql2.._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0rpqx55._.js → [root-of-the-server]__0u4~z7h._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0uvjyz~._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0dqta7g._.js → [root-of-the-server]__0v.lagk._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0v6dx13._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ypx5xw._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0j3gbp7._.js → [root-of-the-server]__0ze75mm._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0~33o~m._.js +4 -0
- package/.next/server/chunks/[root-of-the-server]__0~_gk3k._.js +3 -0
- package/.next/server/chunks/[turbopack]_runtime.js +1 -1
- package/.next/server/chunks/project_f_tower_06227jx._.js +10 -0
- package/.next/server/chunks/{tower_03g~ktv._.js → project_f_tower_0ihrsvd._.js} +3 -3
- package/.next/server/chunks/project_f_tower_0n1s3ym._.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_api_browse-fs_route_actions_0f1ms64.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_api_git_route_actions_104q-kq.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_apple-icon_png_route_actions_0bb5t_v.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_favicon_ico_route_actions_0124g8-.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_icon0_svg_route_actions_0kttj.d.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_icon1_png_route_actions_12vfwry.js +3 -0
- package/.next/server/chunks/project_f_tower__next-internal_server_app_manifest_json_route_actions_0.~axx_.js +3 -0
- package/.next/server/chunks/project_f_tower_src_0er83xg._.js +3 -0
- package/.next/server/chunks/project_f_tower_src_11e.cv5._.js +3 -0
- package/.next/server/chunks/project_f_tower_src_lib_0p_b~77._.js +3 -0
- package/.next/server/chunks/{tower_src_lib_0uok6j3._.js → project_f_tower_src_lib_10p8sue._.js} +2 -2
- package/.next/server/chunks/project_f_tower_src_lib_constants_ts_020catz._.js +3 -0
- package/.next/server/chunks/ssr/0-yb__pnpm_072uqh4._.js +14 -0
- package/.next/server/chunks/ssr/0-yb__pnpm_0gui5y9._.js +3 -0
- package/.next/server/chunks/ssr/0-yb__pnpm_0qi3qqn._.js +3 -0
- package/.next/server/chunks/ssr/04uy_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_01.s1p0._.js +3 -0
- package/.next/server/chunks/ssr/{03j-_@anthropic-ai_claude-agent-sdk_sdk_mjs_0kr2_y.._.js → 0b0n_@anthropic-ai_claude-agent-sdk_sdk_mjs_123v~_z._.js} +2 -2
- package/.next/server/chunks/ssr/0j~t_@monaco-editor_react_dist_index_mjs_0m1qx-m._.js +3 -0
- package/.next/server/chunks/ssr/0j~t_@monaco-editor_react_dist_index_mjs_0ni7by_._.js +3 -0
- package/.next/server/chunks/ssr/0rvf_@dnd-kit_core_dist_core_esm_0qazy~h.js +3 -0
- package/.next/server/chunks/ssr/0uz~_next_0smzj1m._.js +18 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_058ju5m._.js +3 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_0ot5z96._.js +19 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_0pw4my6._.js → 0uz~_next_dist_0tnc.0z._.js} +2 -2
- package/.next/server/chunks/ssr/0uz~_next_dist_0viyn-6._.js +6 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_0wjbiu9._.js → 0uz~_next_dist_0xqqv-_._.js} +2 -2
- package/.next/server/chunks/ssr/0uz~_next_dist_11y31c8._.js +3 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_client_components_0--gzcy._.js → 0uz~_next_dist_client_components_0m_m~4r._.js} +2 -2
- package/.next/server/chunks/ssr/{10ge_next_dist_client_components_0eil7-a._.js → 0uz~_next_dist_client_components_0neff21._.js} +3 -3
- package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_forbidden_0kvxu2~.js +3 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_global-error_0377e9o.js +3 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_client_components_builtin_unauthorized_0wz-f2j.js +3 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_compiled_0g45ze2._.js → 0uz~_next_dist_compiled_0m~qqw~._.js} +2 -2
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_01q4vlm.js +4 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_0fjd2ua.js → 0uz~_next_dist_esm_build_templates_app-page_0553tiz.js} +3 -3
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0as2amp.js +4 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0crer~s.js +4 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0cu4e.5.js +4 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0gn6gc1.js +4 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0h.vao6.js +4 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_11pz1fw.js → 0uz~_next_dist_esm_build_templates_app-page_0k4fbs6.js} +3 -3
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_0n2032y.js +4 -0
- package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_080g02v.js → 0uz~_next_dist_esm_build_templates_app-page_0y10ld_.js} +3 -3
- package/.next/server/chunks/ssr/{10ge_next_dist_esm_build_templates_app-page_0zgisbd.js → 0uz~_next_dist_esm_build_templates_app-page_0ysuakv.js} +3 -3
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_136sj3a.js +4 -0
- package/.next/server/chunks/ssr/0uz~_next_dist_esm_build_templates_app-page_13jghu9.js +4 -0
- package/.next/server/chunks/ssr/0xjs_lucide-react_dist_esm_icons_0l6be37._.js +3 -0
- package/.next/server/chunks/ssr/{tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0zfgzhi._.js → 0y0r_f_tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0n4g3bn._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0.hh.2a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0.r38oo._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__05452ke._.js → [root-of-the-server]__00.lowc._.js} +3 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__0d5p5d.._.js → [root-of-the-server]__007tg36._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__012ko5_._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0i6glcp._.js → [root-of-the-server]__025.0xa._.js} +3 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__0gsj3~.._.js → [root-of-the-server]__04u4kb4._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__055w_hn._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0adx8p4._.js → [root-of-the-server]__05a17ca._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__06japut._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__06qzctf._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__09mr4e7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c1i04u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0db_p8v._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0ffdrwp._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fkkh9j._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fu82np._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0fwuc5u._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__06sm5cw._.js → [root-of-the-server]__0hiekzn._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0i4rk9v._.js +47 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0m28~~t._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0mf.3xq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nmyvwk._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0np-y3i._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0jux8~h._.js → [root-of-the-server]__0p_hwna._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0qwr~nq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0r6gkos._.js +30 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__1223b0_._.js → [root-of-the-server]__0u26l~e._.js} +3 -3
- package/.next/server/chunks/ssr/{[root-of-the-server]__04xn50b._.js → [root-of-the-server]__0uca1bc._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0v7fjw6._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v94jfv._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0vn5cvq._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__13-by9r._.js → [root-of-the-server]__0w.hk6m._.js} +3 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0w7gbe7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0w8l-4s._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0wkjslq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0wsvmkr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xe-o3g._.js +30 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xe9b6_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zemnbk._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0zugnux._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__105vrk3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__112new_._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11j4k9o._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__13cjs8r._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__13eo85g._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__13x5mmo._.js +30 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +1 -1
- package/.next/server/chunks/ssr/project_f_tower_0-0bopv._.js +30 -0
- package/.next/server/chunks/ssr/project_f_tower_0.txwd8._.js +3 -0
- package/.next/server/chunks/ssr/{tower_0d.car1._.js → project_f_tower_02411e5._.js} +3 -3
- package/.next/server/chunks/ssr/project_f_tower_02x5vbj._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_03k0qr1._.js +3 -0
- package/.next/server/chunks/ssr/{tower_0egtw-7._.js → project_f_tower_04g3~44._.js} +3 -3
- package/.next/server/chunks/ssr/project_f_tower_0cjk_8x._.js +30 -0
- package/.next/server/chunks/ssr/project_f_tower_0d-6.rs._.js +39 -0
- package/.next/server/chunks/ssr/project_f_tower_0ea6ill._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0f0-wva._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0ghw~2t._.js +3 -0
- package/.next/server/chunks/ssr/{tower_0c8unc1._.js → project_f_tower_0h79vn0._.js} +2 -2
- package/.next/server/chunks/ssr/project_f_tower_0hgtev9._.js +7 -0
- package/.next/server/chunks/ssr/project_f_tower_0ivvjwd._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0jdkold._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0jy~1uf._.js +3 -0
- package/.next/server/chunks/ssr/{tower_0tuq2iz._.js → project_f_tower_0knz136._.js} +3 -3
- package/.next/server/chunks/ssr/project_f_tower_0l6ssf8._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0n6q9zh._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0ntkd-l._.js +6 -0
- package/.next/server/chunks/ssr/project_f_tower_0o5.y1e._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0p39h1r._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0sj3voe._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0u6dr5n._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0xkqjno._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_0ym-aea._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_10lk3gb._.js +30 -0
- package/.next/server/chunks/ssr/{tower_0h3r32m._.js → project_f_tower_10~x~zx._.js} +3 -3
- package/.next/server/chunks/ssr/project_f_tower__next-internal_server_app__global-error_page_actions_0r22s5i.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_0yr8rna._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_actions_agent-actions_ts_0.s4~m-._.js +4 -0
- package/.next/server/chunks/ssr/project_f_tower_src_actions_file-actions_ts_02i742t._.js +3 -0
- package/.next/server/chunks/ssr/{tower_src_app_missions_missions-client_tsx_0a9vjyr._.js → project_f_tower_src_app_missions_missions-client_tsx_0ums4qx._.js} +2 -2
- package/.next/server/chunks/ssr/project_f_tower_src_app_onboarding_page_tsx_0_9_yoq._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_app_settings_page_tsx_0oo06~d._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0jmj1xz._.js +7 -0
- package/.next/server/chunks/ssr/project_f_tower_src_components_ui_select_tsx_07scqtg._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_0-pi47a._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_0._5zby._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_0kwu.w7._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_0q3t9-e._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_11g-ixh._.js +3 -0
- package/.next/server/chunks/ssr/project_f_tower_src_lib_constants_ts_0.qkxto._.js +3 -0
- package/.next/server/edge/chunks/0s6b_next_dist_esm_build_templates_edge-wrapper_0gir.8i.js +3 -0
- package/.next/server/edge/chunks/project_f_tower_0zwq2~l._.js +3 -0
- package/.next/server/instrumentation/middleware-manifest.json +2 -2
- package/.next/server/instrumentation.js +3 -3
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +9 -9
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +12 -12
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +987 -987
- package/.next/static/chunks/0-49z0i7n9z_u.js +31 -0
- package/.next/static/chunks/0.vq_m53d7t~7.js +1 -0
- package/.next/static/chunks/006_yes1e~uq-.js +1 -0
- package/.next/static/chunks/03~7u57dwxswo.js +1 -0
- package/.next/static/chunks/048wsx4_3dx7m.js +1 -0
- package/.next/static/chunks/{0drgc-oztq6o-.css → 04pjsuj.mivbh.css} +1 -1
- package/.next/static/chunks/04rm7wn4pu3v9.js +1 -0
- package/.next/static/chunks/054pu3m7e37gx.js +1 -0
- package/.next/static/chunks/05fge.5j9lnpa.js +1 -0
- package/.next/static/chunks/{03e.4ymu.j5wl.js → 05r51bf1-_-x4.js} +1 -1
- package/.next/static/chunks/{0465wja5wuj_t.js → 06hfc~t6~gtz9.js} +1 -1
- package/.next/static/chunks/{0_dgukndtuspa.js → 06xnbktd_jmb4.js} +2 -2
- package/.next/static/chunks/07_bc0h5~tysp.js +1 -0
- package/.next/static/chunks/09mkfd6kg8s2..js +1 -0
- package/.next/static/chunks/0afji0z13kos5.js +5 -0
- package/.next/static/chunks/0ayhcszr5.75h.js +1 -0
- package/.next/static/chunks/0azbwlqgcxx~9.js +1 -0
- package/.next/static/chunks/0c5h4.yuzpzs5.js +12 -0
- package/.next/static/chunks/0dlrmobwx~tvz.js +1 -0
- package/.next/static/chunks/0g-rx4evmd.pa.js +1 -0
- package/.next/static/chunks/0i5zk6woum~cm.js +1 -0
- package/.next/static/chunks/0kyb0fcxzykkx.js +1 -0
- package/.next/static/chunks/0odp5708u_28m.js +1 -0
- package/.next/static/chunks/0q6i_n.rkxpn0.js +1 -0
- package/.next/static/chunks/0qnz9q6uieuv8.js +1 -0
- package/.next/static/chunks/0qrp0pov94ecf.js +1 -0
- package/.next/static/chunks/0sa5eiyws1~n0.js +1 -0
- package/.next/static/chunks/0sdq_svi-w4cf.js +1 -0
- package/.next/static/chunks/0smj3ii_egywx.js +1 -0
- package/.next/static/chunks/0u6p4i4aoeb4m.js +1 -0
- package/.next/static/chunks/0upxmdjt9neoj.js +5 -0
- package/.next/static/chunks/0xvn7yrj70a9v.js +1 -0
- package/.next/static/chunks/0yjtd51nb081_.js +4 -0
- package/.next/static/chunks/10_azh3_hkhxj.js +1 -0
- package/.next/static/chunks/10xx474hrm.03.js +1 -0
- package/.next/static/chunks/116on53madp~2.js +2 -0
- package/.next/static/chunks/16ow8w3exqm6p.js +1 -0
- package/.next/static/chunks/{turbopack-0wjmrsi.z32s0.js → turbopack-12rg1oczocj42.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/bin/tower.mjs +46 -8
- package/package.json +10 -4
- package/scripts/generate-prisma-client.js +43 -0
- package/scripts/link-prisma.js +144 -0
- package/scripts/post-tool-hook.js +188 -0
- package/scripts/session-start-hook.js +79 -0
- package/scripts/stop-hook.js +78 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0y_r.ay._.js +0 -13
- package/.next/server/chunks/0cve_next-internal_server_app_api_internal_cache_[___segments]_route_actions_09n1sa3.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_files_assets_[projectId]_[filename]_route_actions_02i2urs.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_internal_assets_[projectId]_[filename]_route_actions_0kjz576.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_internal_notifications_pending_route_actions_08bx38r.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_buffer_route_actions_0bpyf5x.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_input_route_actions_0alu32r.js +0 -3
- package/.next/server/chunks/0tp-_server_app_api_internal_terminal_[taskId]_start_route_actions_0swqog2.js +0 -3
- package/.next/server/chunks/0w1v_zod_v4_classic_external_0m-7hz_.js +0 -39
- package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_chat_route_actions_0x-qbrh.js +0 -3
- package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_images_route_actions_0vws40t.js +0 -3
- package/.next/server/chunks/0~.g__next-internal_server_app_api_internal_assistant_sessions_route_actions_0p09rcp.js +0 -3
- package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_00gmiw_.js +0 -3
- package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_0z9_0_i.js +0 -3
- package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13w3ubu.js +0 -3
- package/.next/server/chunks/10ge_next_dist_esm_build_templates_app-route_13~vb_i.js +0 -4
- package/.next/server/chunks/[root-of-the-server]__02p-gd5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0319djr._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__043lk8~._.js +0 -4
- package/.next/server/chunks/[root-of-the-server]__053y9tf._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__09gjz6h._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0_irb2s._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0c4edwt._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0c7y1r0._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0dj34zn._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0ko_rm_._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0miy2g.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0mt-eeb._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0n-6-hc._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0nur_ir._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0pz60q-._.js +0 -20
- package/.next/server/chunks/[root-of-the-server]__0q~5ya5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0th.w7w._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0u..agy._.js +0 -11
- package/.next/server/chunks/[root-of-the-server]__0umzekq._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0wu61w.._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__130shf~._.js +0 -3
- package/.next/server/chunks/ssr/040e_@monaco-editor_react_dist_index_mjs_0t4i-ho._.js +0 -3
- package/.next/server/chunks/ssr/040e_@monaco-editor_react_dist_index_mjs_0z6t1fr._.js +0 -3
- package/.next/server/chunks/ssr/0kjx__pnpm_0g9g8h6._.js +0 -3
- package/.next/server/chunks/ssr/0kjx__pnpm_0l.5ii.._.js +0 -3
- package/.next/server/chunks/ssr/0kjx__pnpm_0wrn.h9._.js +0 -14
- package/.next/server/chunks/ssr/0rik_@dnd-kit_core_dist_core_esm_11giptg.js +0 -3
- package/.next/server/chunks/ssr/0~.g_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_0bbseig._.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_00.-vj.._.js +0 -18
- package/.next/server/chunks/ssr/10ge_next_dist_01n~t8z._.js +0 -6
- package/.next/server/chunks/ssr/10ge_next_dist_06_-w96._.js +0 -19
- package/.next/server/chunks/ssr/10ge_next_dist_0~ti7jc._.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_dist_10.ihny._.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_forbidden_0nzsnb2.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_global-error_125sopd.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_dist_client_components_builtin_unauthorized_0z93cpe.js +0 -3
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_08khzah.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_09~o5q0.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0_rj_f4.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0c-wmj1.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0hpuyf0.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0knnyic.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0oi86k6.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_0rmwdra.js +0 -4
- package/.next/server/chunks/ssr/10ge_next_dist_esm_build_templates_app-page_12reczc.js +0 -4
- package/.next/server/chunks/ssr/119e_lucide-react_dist_esm_icons_0636jyq._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0-0j_z3._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0.8y0n9._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0.uoh7q._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__01ws4-7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__024-5kd._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__02ipahf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__03.14vw._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__06o5v8i._.js +0 -30
- package/.next/server/chunks/ssr/[root-of-the-server]__09m32ch._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0_0kxz4._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0bk3s4l._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0d7u1lw._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0fg8.hp._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0i1tzvg._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0i52qt7._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ibsor_._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0j5~a_o._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0jgbj6l._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0l~dc3x._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0n32nv5._.js +0 -30
- package/.next/server/chunks/ssr/[root-of-the-server]__0n8qufu._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ndt9h3._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0p~u4y6._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0q.du4s._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0rs7pkn._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0sysz2q._.js +0 -47
- package/.next/server/chunks/ssr/[root-of-the-server]__0t25~v8._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0ti70do._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0uevudp._.js +0 -30
- package/.next/server/chunks/ssr/[root-of-the-server]__0wwqzmm._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0xt3-qb._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0y-lkvf._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0yuwh~5._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0zvf.ro._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__11m7m-q._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__12f810l._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__13-egel._.js +0 -3
- package/.next/server/chunks/ssr/tower_0-nwtka._.js +0 -3
- package/.next/server/chunks/ssr/tower_0-omr_b._.js +0 -30
- package/.next/server/chunks/ssr/tower_0.csoof._.js +0 -3
- package/.next/server/chunks/ssr/tower_005_jvc._.js +0 -3
- package/.next/server/chunks/ssr/tower_01szasw._.js +0 -3
- package/.next/server/chunks/ssr/tower_035l~qv._.js +0 -3
- package/.next/server/chunks/ssr/tower_03jazku._.js +0 -3
- package/.next/server/chunks/ssr/tower_0cmuq4n._.js +0 -3
- package/.next/server/chunks/ssr/tower_0ih8lcc._.js +0 -3
- package/.next/server/chunks/ssr/tower_0kl_bfy._.js +0 -7
- package/.next/server/chunks/ssr/tower_0mz4ut.._.js +0 -3
- package/.next/server/chunks/ssr/tower_0nuj.0p._.js +0 -39
- package/.next/server/chunks/ssr/tower_0pcqezm._.js +0 -3
- package/.next/server/chunks/ssr/tower_0r7uuim._.js +0 -30
- package/.next/server/chunks/ssr/tower_0sojjnu._.js +0 -3
- package/.next/server/chunks/ssr/tower_0tc~.xl._.js +0 -30
- package/.next/server/chunks/ssr/tower_0tjo~2z._.js +0 -3
- package/.next/server/chunks/ssr/tower_0wvk~r.._.js +0 -3
- package/.next/server/chunks/ssr/tower_10p15te._.js +0 -3
- package/.next/server/chunks/ssr/tower_10t13p4._.js +0 -6
- package/.next/server/chunks/ssr/tower_117pzh8._.js +0 -3
- package/.next/server/chunks/ssr/tower_11q5_.m._.js +0 -3
- package/.next/server/chunks/ssr/tower_138qlx5._.js +0 -3
- package/.next/server/chunks/ssr/tower__next-internal_server_app__global-error_page_actions_13t5~qk.js +0 -3
- package/.next/server/chunks/ssr/tower_src_0lq.aoc._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_actions_agent-actions_ts_0j.e1tn._.js +0 -4
- package/.next/server/chunks/ssr/tower_src_actions_file-actions_ts_0424lna._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_app_onboarding_page_tsx_0_3krz1._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_app_settings_page_tsx_0vo5e-o._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0kjp1u0._.js +0 -7
- package/.next/server/chunks/ssr/tower_src_components_ui_select_tsx_10ajx~2._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_01420_4._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_0i-zjpa._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_0ja~kdb._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_0obw2r8._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_0rgfsuf._.js +0 -3
- package/.next/server/chunks/ssr/tower_src_lib_constants_ts_0o218_c._.js +0 -3
- package/.next/server/chunks/tower_05du07.._.js +0 -10
- package/.next/server/chunks/tower_0a-x6m.._.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_adapters_test_route_actions_13jw~9b.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_browse-fs_route_actions_0k5p2xy.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_git_route_actions_0rvpodb.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_assets_reveal_route_actions_0idwm6j.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_assistant_route_actions_0rdz1d..js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_install_route_actions_06dxleu.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_session_route_actions_0wlv4lf.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_stop_route_actions_101_oub.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_internal_hooks_upload_route_actions_0439qz_.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_tasks_[taskId]_diff_route_actions_0nthc84.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_api_tasks_[taskId]_merge_route_actions_0g.x0nb.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_apple-icon_png_route_actions_0bni-sb.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_favicon_ico_route_actions_0kw~xj2.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_icon0_svg_route_actions_0nww9-e.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_icon1_png_route_actions_09h.ywu.js +0 -3
- package/.next/server/chunks/tower__next-internal_server_app_manifest_json_route_actions_080ob~r.js +0 -3
- package/.next/server/chunks/tower_src_0..vg-t._.js +0 -3
- package/.next/server/chunks/tower_src_05rqj.1._.js +0 -3
- package/.next/server/chunks/tower_src_lib_0w8qt4s._.js +0 -3
- package/.next/server/chunks/tower_src_lib_constants_ts_0cxd4.p._.js +0 -3
- package/.next/server/edge/chunks/0y9m_next_dist_esm_build_templates_edge-wrapper_0cx_eo..js +0 -3
- package/.next/server/edge/chunks/tower_0wvfs38._.js +0 -3
- package/.next/static/chunks/00z-g3x93ngvn.js +0 -1
- package/.next/static/chunks/01499ombtjk9..js +0 -1
- package/.next/static/chunks/04zt_ewq9gd.f.js +0 -5
- package/.next/static/chunks/05-b9qqm3av9~.js +0 -1
- package/.next/static/chunks/05~v02mkan5z..js +0 -1
- package/.next/static/chunks/07ll8eylriw_..js +0 -5
- package/.next/static/chunks/08kdkf9zhbx5h.js +0 -1
- package/.next/static/chunks/0abtpeymj-58i.js +0 -1
- package/.next/static/chunks/0eaa2lmymh2fx.js +0 -1
- package/.next/static/chunks/0focg9l2pd5qe.js +0 -1
- package/.next/static/chunks/0j9qriqni_r1..js +0 -2
- package/.next/static/chunks/0jod832.e8dvp.js +0 -1
- package/.next/static/chunks/0k.u8sxy~e469.js +0 -4
- package/.next/static/chunks/0lvd52mjiit6s.js +0 -1
- package/.next/static/chunks/0mq0uqbbbb1~2.js +0 -1
- package/.next/static/chunks/0o0v~cegree8o.js +0 -1
- package/.next/static/chunks/0omj~p3uxkic-.js +0 -1
- package/.next/static/chunks/0t-gr6j-c65qb.js +0 -1
- package/.next/static/chunks/0tcl81ybuob5i.js +0 -1
- package/.next/static/chunks/0uqimvsni_op~.js +0 -1
- package/.next/static/chunks/0uukquowg_doj.js +0 -1
- package/.next/static/chunks/0v593lcts~8.5.js +0 -1
- package/.next/static/chunks/0wt3kws~_yr8z.js +0 -1
- package/.next/static/chunks/0yz33_rbgu2sz.js +0 -1
- package/.next/static/chunks/0z2bzovqhl2f5.js +0 -1
- package/.next/static/chunks/0z7bwntvfhxzi.js +0 -12
- package/.next/static/chunks/0~2w0fbj7o3fv.js +0 -1
- package/.next/static/chunks/10n23t.1hpb-1.js +0 -1
- package/.next/static/chunks/12p4plfwlovc5.js +0 -1
- package/.next/static/chunks/13juk.piouzom.js +0 -1
- package/.next/static/chunks/14xzmrt5ly6gq.js +0 -31
- package/.next/static/chunks/151wr~6x8aclx.js +0 -1
- package/.next/static/chunks/16w-ap~msrwpj.js +0 -1
- /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_buildManifest.js +0 -0
- /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{uSvLXzMcHlsrWUxtSBOMM → qVmkMYUuxwdsiFTnn1wfK}/_ssgManifest.js +0 -0
package/bin/tower.mjs
CHANGED
|
@@ -16,15 +16,17 @@
|
|
|
16
16
|
|
|
17
17
|
import { existsSync, readFileSync, mkdirSync } from "fs";
|
|
18
18
|
import { join, dirname, resolve } from "path";
|
|
19
|
-
import {
|
|
19
|
+
import { execFileSync } from "child_process";
|
|
20
20
|
import { createServer } from "http";
|
|
21
21
|
import { fileURLToPath } from "url";
|
|
22
22
|
import { parseArgs } from "node:util";
|
|
23
23
|
import { homedir } from "os";
|
|
24
|
+
import { createRequire } from "module";
|
|
24
25
|
|
|
25
26
|
const __filename = fileURLToPath(import.meta.url);
|
|
26
27
|
const __dirname = dirname(__filename);
|
|
27
28
|
const PROJECT_ROOT = resolve(__dirname, "..");
|
|
29
|
+
const require = createRequire(import.meta.url);
|
|
28
30
|
|
|
29
31
|
// ─── Data directory: ~/.tower ───
|
|
30
32
|
const TOWER_DIR = join(homedir(), ".tower");
|
|
@@ -85,15 +87,27 @@ function logError(msg) {
|
|
|
85
87
|
console.error(`\x1b[31m[tower]\x1b[0m ${msg}`);
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
function
|
|
90
|
+
function resolveBin(pkgName, binName) {
|
|
91
|
+
const pkgJsonPath = require.resolve(`${pkgName}/package.json`, { paths: [PROJECT_ROOT] });
|
|
92
|
+
const pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
|
|
93
|
+
const binField = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.[binName];
|
|
94
|
+
|
|
95
|
+
if (!binField) {
|
|
96
|
+
throw new Error(`No bin entry found for ${pkgName}`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return resolve(dirname(pkgJsonPath), binField);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function run(binPath, args) {
|
|
89
103
|
try {
|
|
90
|
-
|
|
104
|
+
execFileSync(process.execPath, [binPath, ...args], {
|
|
91
105
|
cwd: PROJECT_ROOT,
|
|
92
106
|
stdio: "inherit",
|
|
93
107
|
env: { ...process.env, DATABASE_URL: DB_URL },
|
|
94
108
|
});
|
|
95
109
|
} catch {
|
|
96
|
-
logError(`Command failed: ${
|
|
110
|
+
logError(`Command failed: ${binPath} ${args.join(" ")}`);
|
|
97
111
|
process.exit(1);
|
|
98
112
|
}
|
|
99
113
|
}
|
|
@@ -111,26 +125,30 @@ function ensureDirs() {
|
|
|
111
125
|
}
|
|
112
126
|
|
|
113
127
|
async function initDatabase() {
|
|
128
|
+
const prismaBin = resolveBin("prisma", "prisma");
|
|
129
|
+
const tsxBin = resolveBin("tsx", "tsx");
|
|
130
|
+
|
|
114
131
|
log("Initializing Tower...");
|
|
115
132
|
ensureDirs();
|
|
116
133
|
log(`Data directory: ${TOWER_DIR}`);
|
|
117
134
|
|
|
118
135
|
log("Syncing database schema...");
|
|
119
|
-
run("
|
|
136
|
+
run(prismaBin, ["db", "push", "--skip-generate"]);
|
|
120
137
|
|
|
121
138
|
log("Seeding initial data...");
|
|
122
|
-
run("
|
|
139
|
+
run(tsxBin, ["scripts/init-db.ts"]);
|
|
123
140
|
|
|
124
141
|
log("Initializing full-text search...");
|
|
125
|
-
run("
|
|
142
|
+
run(tsxBin, ["prisma/init-fts.ts"]);
|
|
126
143
|
|
|
127
144
|
log("Initialization complete!");
|
|
128
145
|
}
|
|
129
146
|
|
|
130
147
|
// ─── Commands ───
|
|
131
148
|
async function cmdMigrate() {
|
|
149
|
+
const tsxBin = resolveBin("tsx", "tsx");
|
|
132
150
|
log("Running data migration...");
|
|
133
|
-
run("
|
|
151
|
+
run(tsxBin, ["scripts/migrate-data.ts", "--run"]);
|
|
134
152
|
}
|
|
135
153
|
|
|
136
154
|
async function cmdStart() {
|
|
@@ -150,6 +168,26 @@ async function cmdStart() {
|
|
|
150
168
|
await app.prepare();
|
|
151
169
|
|
|
152
170
|
const server = createServer(handle);
|
|
171
|
+
let shuttingDown = false;
|
|
172
|
+
|
|
173
|
+
const shutdown = (signal) => {
|
|
174
|
+
if (shuttingDown) return;
|
|
175
|
+
shuttingDown = true;
|
|
176
|
+
log(`Received ${signal}, shutting down...`);
|
|
177
|
+
|
|
178
|
+
const forceExitTimer = setTimeout(() => {
|
|
179
|
+
process.exit(0);
|
|
180
|
+
}, 2000);
|
|
181
|
+
forceExitTimer.unref();
|
|
182
|
+
|
|
183
|
+
server.close(() => {
|
|
184
|
+
process.exit(0);
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
process.once("SIGINT", () => shutdown("SIGINT"));
|
|
189
|
+
process.once("SIGTERM", () => shutdown("SIGTERM"));
|
|
190
|
+
|
|
153
191
|
server.listen(PORT, HOST, () => {
|
|
154
192
|
log(`Tower running on http://${HOST === "0.0.0.0" ? "localhost" : HOST}:${PORT}`);
|
|
155
193
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tower-studio",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tower": "bin/tower.mjs"
|
|
@@ -12,8 +12,13 @@
|
|
|
12
12
|
"prisma/schema.prisma",
|
|
13
13
|
"prisma/init-fts.ts",
|
|
14
14
|
"scripts/init-db.ts",
|
|
15
|
+
"scripts/generate-prisma-client.js",
|
|
16
|
+
"scripts/link-prisma.js",
|
|
15
17
|
"scripts/migrate-data.ts",
|
|
16
18
|
"scripts/copy-monaco.js",
|
|
19
|
+
"scripts/post-tool-hook.js",
|
|
20
|
+
"scripts/session-start-hook.js",
|
|
21
|
+
"scripts/stop-hook.js",
|
|
17
22
|
"src/mcp/",
|
|
18
23
|
"next.config.ts",
|
|
19
24
|
"tsconfig.json"
|
|
@@ -26,6 +31,7 @@
|
|
|
26
31
|
"build": "next build",
|
|
27
32
|
"build:clean": "rm -rf .next && next build && find .next -name '*.map' -delete",
|
|
28
33
|
"release": "pnpm build:clean && npm pack",
|
|
34
|
+
"release:smoke": "node scripts/release-smoke.js",
|
|
29
35
|
"release:publish": "pnpm build:clean && npm publish",
|
|
30
36
|
"start": "next start",
|
|
31
37
|
"lint": "eslint",
|
|
@@ -40,7 +46,7 @@
|
|
|
40
46
|
"test:e2e": "NO_PROXY=localhost,127.0.0.1 no_proxy=localhost,127.0.0.1 playwright test",
|
|
41
47
|
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
|
|
42
48
|
"mcp": "tsx src/mcp/index.ts",
|
|
43
|
-
"postinstall": "node scripts/copy-monaco.js && node scripts/link-prisma.js"
|
|
49
|
+
"postinstall": "node scripts/copy-monaco.js && node scripts/generate-prisma-client.js && node scripts/link-prisma.js"
|
|
44
50
|
},
|
|
45
51
|
"pnpm": {
|
|
46
52
|
"onlyBuiltDependencies": [
|
|
@@ -83,11 +89,13 @@
|
|
|
83
89
|
"react-resizable-panels": "^2.1.9",
|
|
84
90
|
"react-reverse-portal": "^2.3.0",
|
|
85
91
|
"remark-gfm": "^4.0.1",
|
|
92
|
+
"prisma": "^6.19.2",
|
|
86
93
|
"shadcn": "^4.1.0",
|
|
87
94
|
"simple-git": "^3.36.0",
|
|
88
95
|
"sonner": "^2.0.7",
|
|
89
96
|
"tailwind-merge": "^3.5.0",
|
|
90
97
|
"tw-animate-css": "^1.4.0",
|
|
98
|
+
"tsx": "^4.21.0",
|
|
91
99
|
"ws": "^8.20.0",
|
|
92
100
|
"zod": "^4.3.6",
|
|
93
101
|
"zustand": "^5.0.12"
|
|
@@ -110,9 +118,7 @@
|
|
|
110
118
|
"eslint": "^9",
|
|
111
119
|
"eslint-config-next": "16.2.1",
|
|
112
120
|
"jsdom": "^29.0.1",
|
|
113
|
-
"prisma": "^6.19.2",
|
|
114
121
|
"tailwindcss": "^4",
|
|
115
|
-
"tsx": "^4.21.0",
|
|
116
122
|
"typescript": "^5",
|
|
117
123
|
"vitest": "^4.1.1"
|
|
118
124
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { execFileSync } = require("child_process");
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const packageRoot = path.join(__dirname, "..");
|
|
7
|
+
|
|
8
|
+
function resolvePrismaBin() {
|
|
9
|
+
const pkgJsonPath = require.resolve("prisma/package.json", { paths: [packageRoot] });
|
|
10
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
11
|
+
const binField = typeof pkgJson.bin === "string" ? pkgJson.bin : pkgJson.bin?.prisma;
|
|
12
|
+
|
|
13
|
+
if (!binField) {
|
|
14
|
+
throw new Error("No prisma bin entry found");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return path.resolve(path.dirname(pkgJsonPath), binField);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function hasGeneratedClient() {
|
|
21
|
+
try {
|
|
22
|
+
require.resolve(".prisma/client/default", { paths: [packageRoot] });
|
|
23
|
+
return true;
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (hasGeneratedClient()) {
|
|
30
|
+
console.log("[generate-prisma] Prisma client already generated");
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
execFileSync(process.execPath, [resolvePrismaBin(), "generate", "--schema", "prisma/schema.prisma"], {
|
|
36
|
+
cwd: packageRoot,
|
|
37
|
+
stdio: "inherit",
|
|
38
|
+
env: process.env,
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.warn(`[generate-prisma] Failed to generate Prisma client: ${error.message}`);
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Turbopack may rewrite external package names with content hashes
|
|
4
|
+
* (for example `@prisma/client-<hash>` or `node-pty-<hash>`).
|
|
5
|
+
* This script scans the build output and creates symlinks so Node.js
|
|
6
|
+
* can resolve those hashed names at runtime after global install.
|
|
7
|
+
*/
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
|
|
11
|
+
const packageRoot = path.join(__dirname, "..");
|
|
12
|
+
const serverDir = path.join(packageRoot, ".next", "server");
|
|
13
|
+
const supportedPackages = [
|
|
14
|
+
"@prisma/client",
|
|
15
|
+
"node-pty",
|
|
16
|
+
"@vscode/ripgrep",
|
|
17
|
+
"ws",
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
if (!fs.existsSync(serverDir)) {
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function escapeRegExp(value) {
|
|
25
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function collectJsFiles(dir, result = []) {
|
|
29
|
+
if (!fs.existsSync(dir)) return result;
|
|
30
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
31
|
+
const full = path.join(dir, entry.name);
|
|
32
|
+
if (entry.isDirectory()) {
|
|
33
|
+
collectJsFiles(full, result);
|
|
34
|
+
} else if (entry.name.endsWith(".js")) {
|
|
35
|
+
result.push(full);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function detectHashedReferences(files) {
|
|
42
|
+
const matches = new Map();
|
|
43
|
+
|
|
44
|
+
for (const pkg of supportedPackages) {
|
|
45
|
+
matches.set(pkg, new Set());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
for (const file of files) {
|
|
49
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
50
|
+
for (const pkg of supportedPackages) {
|
|
51
|
+
const pattern = new RegExp(`${escapeRegExp(pkg)}-([0-9a-f]+)`, "g");
|
|
52
|
+
let match;
|
|
53
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
54
|
+
matches.get(pkg).add(match[1]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return matches;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function getPackageParts(pkg) {
|
|
63
|
+
if (pkg.startsWith("@")) {
|
|
64
|
+
const [scope, name] = pkg.split("/");
|
|
65
|
+
return { scope, name };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return { scope: null, name: pkg };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function getVisiblePackageDir(pkg) {
|
|
72
|
+
const { scope, name } = getPackageParts(pkg);
|
|
73
|
+
return scope
|
|
74
|
+
? path.join(packageRoot, "node_modules", scope, name)
|
|
75
|
+
: path.join(packageRoot, "node_modules", name);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function collectAliasTargets(pkg) {
|
|
79
|
+
const pkgJsonPath = require.resolve(`${pkg}/package.json`, { paths: [packageRoot] });
|
|
80
|
+
const realPackageDir = path.dirname(pkgJsonPath);
|
|
81
|
+
const visiblePackageDir = getVisiblePackageDir(pkg);
|
|
82
|
+
const candidates = new Map();
|
|
83
|
+
|
|
84
|
+
if (fs.existsSync(visiblePackageDir)) {
|
|
85
|
+
candidates.set(visiblePackageDir, path.dirname(visiblePackageDir));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
candidates.set(realPackageDir, path.dirname(realPackageDir));
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
targetDir: visiblePackageDir,
|
|
92
|
+
aliasBaseDirs: [...candidates.values()],
|
|
93
|
+
packageName: getPackageParts(pkg).name,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function linkHashedPackage(pkg, hash) {
|
|
98
|
+
let paths;
|
|
99
|
+
try {
|
|
100
|
+
paths = collectAliasTargets(pkg);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.warn(`[link-prisma] Cannot resolve ${pkg}: ${error.message}`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!fs.existsSync(paths.targetDir)) {
|
|
107
|
+
console.warn(`[link-prisma] Target package directory missing for ${pkg}, skipping`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const linkName = `${paths.packageName}-${hash}`;
|
|
112
|
+
|
|
113
|
+
for (const aliasBaseDir of paths.aliasBaseDirs) {
|
|
114
|
+
const linkPath = path.join(aliasBaseDir, linkName);
|
|
115
|
+
if (fs.existsSync(linkPath)) {
|
|
116
|
+
console.log(`[link-prisma] ${pkg}-${hash} already exists in ${aliasBaseDir}`);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
fs.symlinkSync(paths.targetDir, linkPath, "junction");
|
|
122
|
+
console.log(`[link-prisma] Linked ${pkg}-${hash} -> ${pkg} in ${aliasBaseDir}`);
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.warn(
|
|
125
|
+
`[link-prisma] Failed to create symlink for ${pkg}-${hash} in ${aliasBaseDir}: ${error.message}`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const jsFiles = collectJsFiles(serverDir);
|
|
132
|
+
const references = detectHashedReferences(jsFiles);
|
|
133
|
+
let createdAny = false;
|
|
134
|
+
|
|
135
|
+
for (const [pkg, hashes] of references.entries()) {
|
|
136
|
+
for (const hash of hashes) {
|
|
137
|
+
createdAny = true;
|
|
138
|
+
linkHashedPackage(pkg, hash);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (!createdAny) {
|
|
143
|
+
console.log("[link-prisma] No hashed external package references found, skipping");
|
|
144
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Tower PostToolUse Hook
|
|
4
|
+
*
|
|
5
|
+
* Claude Code PostToolUse hook that auto-captures file outputs as task assets.
|
|
6
|
+
* When Claude writes/edits a file matching the configured extension whitelist,
|
|
7
|
+
* this hook uploads it to Tower's internal API for asset tracking.
|
|
8
|
+
*
|
|
9
|
+
* Environment:
|
|
10
|
+
* TOWER_TASK_ID - Required. The task ID to associate the asset with.
|
|
11
|
+
* TOWER_API_URL - Required. Base URL of the Tower server (e.g. http://localhost:3000).
|
|
12
|
+
*
|
|
13
|
+
* Stdin: JSON object from Claude Code with { tool_name, tool_input, session_id, cwd, ... }
|
|
14
|
+
* Exit: Always 0 (hook must never block Claude Code).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
"use strict";
|
|
18
|
+
|
|
19
|
+
const fs = require("fs");
|
|
20
|
+
const path = require("path");
|
|
21
|
+
const http = require("http");
|
|
22
|
+
const https = require("https");
|
|
23
|
+
|
|
24
|
+
const DEFAULT_TYPES = ["png", "jpg", "jpeg", "gif", "webp", "svg", "pdf", "md", "txt", "json"];
|
|
25
|
+
const FILE_WRITE_TOOLS = new Set(["Write", "Edit", "MultiEdit"]);
|
|
26
|
+
|
|
27
|
+
function main() {
|
|
28
|
+
const taskId = process.env.TOWER_TASK_ID;
|
|
29
|
+
if (!taskId) {
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const apiUrl = process.env.TOWER_API_URL;
|
|
34
|
+
if (!apiUrl) {
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// SECURITY: Only talk to localhost — refuse remote servers
|
|
39
|
+
try {
|
|
40
|
+
const parsed = new URL(apiUrl);
|
|
41
|
+
if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Read stdin with timeout
|
|
49
|
+
let input = "";
|
|
50
|
+
const timeout = setTimeout(() => {
|
|
51
|
+
// Stdin timeout — exit silently
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}, 10000);
|
|
54
|
+
|
|
55
|
+
process.stdin.setEncoding("utf8");
|
|
56
|
+
process.stdin.on("data", (chunk) => {
|
|
57
|
+
input += chunk;
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
process.stdin.on("end", () => {
|
|
61
|
+
clearTimeout(timeout);
|
|
62
|
+
processInput(input, taskId, apiUrl);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
process.stdin.on("error", () => {
|
|
66
|
+
clearTimeout(timeout);
|
|
67
|
+
process.exit(0);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// If stdin is not a pipe (e.g., running interactively), exit
|
|
71
|
+
if (process.stdin.isTTY) {
|
|
72
|
+
clearTimeout(timeout);
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function processInput(input, taskId, apiUrl) {
|
|
78
|
+
let data;
|
|
79
|
+
try {
|
|
80
|
+
data = JSON.parse(input);
|
|
81
|
+
} catch {
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const toolName = data.tool_name;
|
|
86
|
+
if (!toolName || !FILE_WRITE_TOOLS.has(toolName)) {
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const filePath = data.tool_input && data.tool_input.file_path;
|
|
91
|
+
if (!filePath) {
|
|
92
|
+
process.exit(0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Resolve to absolute path
|
|
96
|
+
const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(data.cwd || process.cwd(), filePath);
|
|
97
|
+
|
|
98
|
+
// Check extension against whitelist
|
|
99
|
+
const ext = path.extname(absolutePath).slice(1).toLowerCase();
|
|
100
|
+
if (!ext) {
|
|
101
|
+
process.exit(0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Try to fetch config from Tower, fall back to defaults
|
|
105
|
+
fetchAllowedTypes(apiUrl, (types) => {
|
|
106
|
+
if (!types.includes(ext)) {
|
|
107
|
+
process.exit(0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Check file exists
|
|
111
|
+
try {
|
|
112
|
+
fs.statSync(absolutePath);
|
|
113
|
+
} catch {
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Upload to Tower
|
|
118
|
+
uploadFile(apiUrl, taskId, absolutePath);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function fetchAllowedTypes(apiUrl, callback) {
|
|
123
|
+
const url = apiUrl + "/api/internal/hooks/upload";
|
|
124
|
+
const mod = url.startsWith("https") ? https : http;
|
|
125
|
+
|
|
126
|
+
const req = mod.get(url, (res) => {
|
|
127
|
+
let body = "";
|
|
128
|
+
res.on("data", (chunk) => { body += chunk; });
|
|
129
|
+
res.on("end", () => {
|
|
130
|
+
try {
|
|
131
|
+
const json = JSON.parse(body);
|
|
132
|
+
if (Array.isArray(json.types)) {
|
|
133
|
+
callback(json.types);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
} catch {
|
|
137
|
+
// Fall through to defaults
|
|
138
|
+
}
|
|
139
|
+
callback(DEFAULT_TYPES);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
req.on("error", () => {
|
|
144
|
+
callback(DEFAULT_TYPES);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
req.setTimeout(3000, () => {
|
|
148
|
+
req.destroy();
|
|
149
|
+
callback(DEFAULT_TYPES);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function uploadFile(apiUrl, taskId, filePath) {
|
|
154
|
+
const url = new URL("/api/internal/hooks/upload", apiUrl);
|
|
155
|
+
const payload = JSON.stringify({ taskId, filePath });
|
|
156
|
+
const mod = url.protocol === "https:" ? https : http;
|
|
157
|
+
|
|
158
|
+
const options = {
|
|
159
|
+
hostname: url.hostname,
|
|
160
|
+
port: url.port,
|
|
161
|
+
path: url.pathname,
|
|
162
|
+
method: "POST",
|
|
163
|
+
headers: {
|
|
164
|
+
"Content-Type": "application/json",
|
|
165
|
+
"Content-Length": Buffer.byteLength(payload),
|
|
166
|
+
},
|
|
167
|
+
timeout: 5000,
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const req = mod.request(options, () => {
|
|
171
|
+
// Response doesn't matter — fire and forget
|
|
172
|
+
process.exit(0);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
req.on("error", () => {
|
|
176
|
+
process.exit(0);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
req.on("timeout", () => {
|
|
180
|
+
req.destroy();
|
|
181
|
+
process.exit(0);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
req.write(payload);
|
|
185
|
+
req.end();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
main();
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Tower SessionStart Hook
|
|
4
|
+
*
|
|
5
|
+
* Reports the Claude CLI session_id to Tower's API so resume/continue works.
|
|
6
|
+
* Runs once when a Claude Code session starts.
|
|
7
|
+
*
|
|
8
|
+
* Environment:
|
|
9
|
+
* TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
|
|
10
|
+
* TOWER_API_URL - Required. Base URL of the Tower server.
|
|
11
|
+
*
|
|
12
|
+
* Stdin: JSON object from Claude Code with { session_id, cwd, ... }
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
const http = require("http");
|
|
18
|
+
const https = require("https");
|
|
19
|
+
|
|
20
|
+
function main() {
|
|
21
|
+
const taskId = process.env.TOWER_TASK_ID;
|
|
22
|
+
if (!taskId) process.exit(0);
|
|
23
|
+
|
|
24
|
+
const apiUrl = process.env.TOWER_API_URL;
|
|
25
|
+
if (!apiUrl) process.exit(0);
|
|
26
|
+
|
|
27
|
+
// Validate localhost
|
|
28
|
+
try {
|
|
29
|
+
const parsed = new URL(apiUrl);
|
|
30
|
+
if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
} catch {
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let input = "";
|
|
38
|
+
const timeout = setTimeout(() => process.exit(0), 5000);
|
|
39
|
+
|
|
40
|
+
process.stdin.setEncoding("utf8");
|
|
41
|
+
process.stdin.on("data", (chunk) => { input += chunk; });
|
|
42
|
+
|
|
43
|
+
process.stdin.on("end", () => {
|
|
44
|
+
clearTimeout(timeout);
|
|
45
|
+
|
|
46
|
+
let data;
|
|
47
|
+
try { data = JSON.parse(input); } catch { process.exit(0); }
|
|
48
|
+
|
|
49
|
+
const sessionId = data.session_id;
|
|
50
|
+
if (!sessionId) process.exit(0);
|
|
51
|
+
|
|
52
|
+
// POST sessionId to Tower
|
|
53
|
+
const url = new URL("/api/internal/hooks/session", apiUrl);
|
|
54
|
+
const payload = JSON.stringify({ taskId, sessionId });
|
|
55
|
+
const mod = url.protocol === "https:" ? https : http;
|
|
56
|
+
|
|
57
|
+
const req = mod.request({
|
|
58
|
+
hostname: url.hostname,
|
|
59
|
+
port: url.port,
|
|
60
|
+
path: url.pathname,
|
|
61
|
+
method: "POST",
|
|
62
|
+
headers: {
|
|
63
|
+
"Content-Type": "application/json",
|
|
64
|
+
"Content-Length": Buffer.byteLength(payload),
|
|
65
|
+
},
|
|
66
|
+
timeout: 3000,
|
|
67
|
+
}, () => process.exit(0));
|
|
68
|
+
|
|
69
|
+
req.on("error", () => process.exit(0));
|
|
70
|
+
req.on("timeout", () => { req.destroy(); process.exit(0); });
|
|
71
|
+
req.write(payload);
|
|
72
|
+
req.end();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
|
|
76
|
+
if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
main();
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Tower Stop Hook
|
|
4
|
+
*
|
|
5
|
+
* Claude Code Stop hook that fires when Claude finishes responding.
|
|
6
|
+
* Notifies Tower so the UI can show a "response complete" indicator.
|
|
7
|
+
*
|
|
8
|
+
* Environment:
|
|
9
|
+
* TOWER_TASK_ID - Required. Skip if absent (not a Tower session).
|
|
10
|
+
* TOWER_API_URL - Required. Base URL of the Tower server.
|
|
11
|
+
*
|
|
12
|
+
* Stdin: JSON object from Claude Code with { session_id, cwd, ... }
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
const http = require("http");
|
|
18
|
+
const https = require("https");
|
|
19
|
+
|
|
20
|
+
function main() {
|
|
21
|
+
const taskId = process.env.TOWER_TASK_ID;
|
|
22
|
+
if (!taskId) process.exit(0);
|
|
23
|
+
|
|
24
|
+
const apiUrl = process.env.TOWER_API_URL;
|
|
25
|
+
if (!apiUrl) process.exit(0);
|
|
26
|
+
|
|
27
|
+
// SECURITY: Only talk to localhost
|
|
28
|
+
try {
|
|
29
|
+
const parsed = new URL(apiUrl);
|
|
30
|
+
if (!["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname)) {
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
} catch {
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let input = "";
|
|
38
|
+
const timeout = setTimeout(() => process.exit(0), 5000);
|
|
39
|
+
|
|
40
|
+
process.stdin.setEncoding("utf8");
|
|
41
|
+
process.stdin.on("data", (chunk) => { input += chunk; });
|
|
42
|
+
|
|
43
|
+
process.stdin.on("end", () => {
|
|
44
|
+
clearTimeout(timeout);
|
|
45
|
+
|
|
46
|
+
let data;
|
|
47
|
+
try { data = JSON.parse(input); } catch { process.exit(0); }
|
|
48
|
+
|
|
49
|
+
const sessionId = data.session_id || "";
|
|
50
|
+
|
|
51
|
+
// POST to Tower
|
|
52
|
+
const url = new URL("/api/internal/hooks/stop", apiUrl);
|
|
53
|
+
const payload = JSON.stringify({ taskId, sessionId });
|
|
54
|
+
const mod = url.protocol === "https:" ? https : http;
|
|
55
|
+
|
|
56
|
+
const req = mod.request({
|
|
57
|
+
hostname: url.hostname,
|
|
58
|
+
port: url.port,
|
|
59
|
+
path: url.pathname,
|
|
60
|
+
method: "POST",
|
|
61
|
+
headers: {
|
|
62
|
+
"Content-Type": "application/json",
|
|
63
|
+
"Content-Length": Buffer.byteLength(payload),
|
|
64
|
+
},
|
|
65
|
+
timeout: 3000,
|
|
66
|
+
}, () => process.exit(0));
|
|
67
|
+
|
|
68
|
+
req.on("error", () => process.exit(0));
|
|
69
|
+
req.on("timeout", () => { req.destroy(); process.exit(0); });
|
|
70
|
+
req.write(payload);
|
|
71
|
+
req.end();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
process.stdin.on("error", () => { clearTimeout(timeout); process.exit(0); });
|
|
75
|
+
if (process.stdin.isTTY) { clearTimeout(timeout); process.exit(0); }
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main();
|