tower-studio 0.2.44 → 0.2.46
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 +6 -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 +38 -0
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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 +133 -85
- package/.next/standalone/.next/server/app/_not-found/page.js +8 -9
- 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 +2 -2
- 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 +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 +2 -3
- 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 +2 -2
- 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 +5 -4
- 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 +3 -4
- 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/harness/ask/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/ask/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/internal/harness/ask/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/internal/harness/ask/route.js +7 -0
- package/.next/standalone/.next/server/app/api/internal/harness/ask/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/internal/harness/ask/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route.js +7 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/internal/harness/notify/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route.js +7 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/internal/harness/pending/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route/build-manifest.json +9 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route.js +12 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/internal/harness/reply/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js +1 -1
- 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 +3 -3
- 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.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/paste-image/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/resume/route.js +5 -4
- 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 +5 -4
- 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 +2 -2
- 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 +2 -2
- 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 +5 -3
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/harness/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/harness/page/build-manifest.json +18 -0
- package/.next/standalone/.next/server/app/harness/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/harness/page/react-loadable-manifest.json +18 -0
- package/.next/standalone/.next/server/app/harness/page/server-reference-manifest.json +437 -0
- package/.next/standalone/.next/server/app/harness/page.js +24 -0
- package/.next/standalone/.next/server/app/harness/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/harness/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +3 -2
- package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +244 -160
- package/.next/standalone/.next/server/app/missions/page.js +11 -11
- 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 +133 -85
- package/.next/standalone/.next/server/app/onboarding/page.js +8 -9
- 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 +133 -85
- package/.next/standalone/.next/server/app/page.js +8 -9
- 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 +260 -140
- package/.next/standalone/.next/server/app/settings/page.js +10 -11
- 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 +284 -248
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +9 -10
- 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 +247 -211
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +9 -10
- 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]/groups/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/build-manifest.json +18 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/react-loadable-manifest.json +18 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page/server-reference-manifest.json +401 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page.js +24 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/groups/page_client-reference-manifest.js +3 -0
- 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 +222 -186
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +9 -10
- 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 +257 -209
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +10 -11
- 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 +133 -85
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +9 -10
- 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 +219 -171
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +9 -10
- 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 +269 -221
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +11 -12
- 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 +169 -133
- package/.next/standalone/.next/server/app/workspaces/page.js +8 -9
- 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 +6 -0
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_09ikw5j.js +5 -0
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0eh8dj_.js +9 -5
- package/.next/standalone/.next/server/chunks/0se9_next_dist_esm_build_templates_app-route_0gr2wxq.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-1~xqo._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0lvlooo._.js → [root-of-the-server]__0-kboke._.js} +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.3n3t.._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.wsvr6._.js +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.yf1mx._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00xe-t8._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02r7j6y._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__02yvm55._.js +3 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__09arklv._.js → [root-of-the-server]__04-ty51._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__065hi6e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06iuq17._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06x1zwj._.js +28 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06~wmlx._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08-bq72._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08clp-r._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__092475e._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__095t6ga._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_7_w.g._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0atap--._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0c3je91._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dz.knv._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ehwsa1._.js +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0esywxf._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fd9z.r._.js +30 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gbyryz._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gcg7i.._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iyp~.k._.js +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0khq-k0._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0kkrbn-._.js +4 -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]__0m8t3vi._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nt7c0f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0nv83.p._.js +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pr~t0y._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qcpe0l._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qfcg6k._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0sq5irw._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0squ613._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0u8tl88._.js +28 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wjr-72._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wugb-9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0yeg1kp._.js +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zchqv1._.js +43 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zcy11y._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~1-i5h._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~ju4-d._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10aw_67._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10ci~o9._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10qclz-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12fmxq0._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__136ty69._.js +3 -0
- package/.next/standalone/.next/server/chunks/_02hac5p._.js +30 -0
- package/.next/standalone/.next/server/chunks/_0_w835g._.js +4 -0
- package/.next/standalone/.next/server/chunks/_0je3dz2._.js +30 -0
- package/.next/standalone/.next/server/chunks/_0tidm8l._.js +30 -0
- package/.next/standalone/.next/server/chunks/_0zok2an._.js +30 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_ask_route_actions_0_c62hg.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_notify_route_actions_08hof6m.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_pending_route_actions_0w9t_9m.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_internal_harness_reply_route_actions_0qatz~a.js +3 -0
- package/.next/standalone/.next/server/chunks/src_05balzk._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0aygchu._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0gif-f5._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0pg9w-x._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_0vp6.co._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_11k6i~l._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_actions_agent-actions_ts_10q9r5b._.js +8 -2
- package/.next/standalone/.next/server/chunks/src_lib_02llcit._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_0aowbzy._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_0d~1~wz._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_0ylel_1._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_config-defaults_ts_10ayktg._.js +3 -0
- package/.next/standalone/.next/server/chunks/src_lib_config-reader_ts_0e5f7vk._.js +3 -0
- 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_dist_0i5qmqd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/0se9_next_dist_esm_build_templates_app-page_04~dhws.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/0se9_next_dist_esm_build_templates_app-page_0fro4ex.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/0ws9_lucide-react_dist_esm_icons_0gv_cwy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/12k._sonner_dist_index_mjs_0-vmpk5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-geq20._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.0m12b._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00qzvly._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01bz3_g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02~hdzx._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06sew6r._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07rk6ic._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__090y_.y._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b.ej5q._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b6fbjv._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0b6hugs._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0br5e7w._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bx_h2u._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dhq_gl._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e79g0v._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0esg88l._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h_pt4a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hzwoy5._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0idkp76._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j4m.1s._.js +3 -0
- 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]__0kmonje._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0kqp70x._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l0~scn._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lh3mlq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0m8m7vc._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0muf4wq._.js +49 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n02kfa._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n3uc.v._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0o5ohqy._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s_q09t._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s~4y3y._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s~ak20._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ta_mpj._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0trmndk._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0u3~-.g._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vyl8to._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ws0_c1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x7br99._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xnuz05._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ynq8ty._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zsnp~d._.js +5 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~edc3d._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~mhv4m._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1013v_g._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11fp64w._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__123rmn-._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0_z5hke._.js → [root-of-the-server]__12viys4._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0-5.hgb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0dye20y._.js → _0-wp_zu._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0-~9em3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0..h3hk._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_08bq4g8._.js → _00_h2nx._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_02p-udo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_05~lqg-._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/_0771b4a._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/{_113957g._.js → _0ak77.u._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_11osha9._.js → _0ami9yt._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0r4_qn~._.js → _0awn2mm._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_07lq-bp._.js → _0b660g4._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0j5.ig_._.js → _0czsddm._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0fmko25._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0_nhdgs._.js → _0gomvsp._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0g~p9_x._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hg~.4w._.js +6 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hsuip_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0zr81mw._.js → _0hx2o_8._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0s.ik0k._.js → _0j7m~u6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_08-x_rp._.js → _0l6byg1._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0i4xdso._.js → _0mmy~98._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0nrxhfb._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/{_02vz78l._.js → _0o_c3b2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0os43sb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0nze-e6._.js → _0p5ft59._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0q2pep_._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_060e1u.._.js → _0snv7nt._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ty4xe6._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/_0vkl7.h._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/_0wbcp88._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0x09t_o._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/_0z5~opf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0zn.4bi._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/_1086w4p._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/_10q2mbe._.js +17 -0
- package/.next/standalone/.next/server/chunks/ssr/_11.knhq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1118hto._.js +43 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0rtydyv._.js → _12s8n8g._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_11j0qlp._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +8 -2
- 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_0rowjw~._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_00wjv6n._.js → src_lib_04nzvfd._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0.~.oo-._.js → src_lib_0_px2pz._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0a.zy31._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0b73q0a._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0cld9rt._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_005uqbe._.js → src_lib_0dbf2qa._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0er7rzd._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0f0v8_~._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0fr6fzy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_01sr8_t._.js → src_lib_0h2u7a0._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0k04rl3._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0lpxsj~._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0sq6aqm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0ui-~7g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0y5zzg-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0z-gn78._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_13c4a4g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_harness_harness-message_ts_0_3ygf9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_pty_11~ojr2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_pty_orphan-reaper_ts_0a0qmlo._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0ng0eku._.js → src_lib_schemas_ts_0ph~1ak._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +6 -0
- package/.next/standalone/.next/server/instrumentation.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +8 -0
- 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 +2368 -1528
- package/.next/standalone/.next/static/chunks/0-kkc.ibted8y.js +1 -0
- package/.next/standalone/.next/static/chunks/{0xejm4ge9~cn..js → 0.2y9uc38xso-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0346xrw6i2bwo.js → 0.gedys.tq.~k.js} +1 -1
- package/.next/standalone/.next/static/chunks/00g58.es_hxli.js +1 -0
- package/.next/standalone/.next/static/chunks/00o_eiv12t~.1.js +1 -0
- package/.next/standalone/.next/static/chunks/01qtgj0xv1fsm.js +2 -0
- package/.next/standalone/.next/static/chunks/024euw7po0d0w.js +1 -0
- package/.next/standalone/.next/static/chunks/02v-9v~885t9c.js +1 -0
- package/.next/standalone/.next/static/chunks/03ct4d8znb7tp.js +1 -0
- package/.next/standalone/.next/static/chunks/03uix~1ru.ovv.js +1 -0
- package/.next/standalone/.next/static/chunks/04.2m8l~ws19v.js +1 -0
- package/.next/standalone/.next/static/chunks/06x7oq8_iu~9d.js +1 -0
- package/.next/standalone/.next/static/chunks/07c4b1kp_85qg.js +1 -0
- package/.next/standalone/.next/static/chunks/07qijq9o5jccu.js +1 -0
- package/.next/standalone/.next/static/chunks/{0uj-3ckujwaiy.js → 09om2gfwimh7k.js} +1 -1
- package/.next/standalone/.next/static/chunks/0alhq.h4~iogi.js +1 -0
- package/.next/standalone/.next/static/chunks/{0rcuiuax31_uh.js → 0cf7e1scao3zk.js} +1 -1
- package/.next/standalone/.next/static/chunks/0ck~sr0nkabl~.js +1 -0
- package/.next/standalone/.next/static/chunks/0d1ok-v-u-xe~.js +1 -0
- package/.next/standalone/.next/static/chunks/0d9u2xspag~4h.js +5 -0
- package/.next/standalone/.next/static/chunks/0ftptcpntzaux.js +1 -0
- package/.next/standalone/.next/static/chunks/0gk~m5bwgoafi.js +1 -0
- package/.next/standalone/.next/static/chunks/0in_7s8n4lmfr.js +1 -0
- package/.next/standalone/.next/static/chunks/0ix28r65.7o_r.js +12 -0
- package/.next/standalone/.next/static/chunks/0j5olwb~d3~3j.js +1 -0
- package/.next/standalone/.next/static/chunks/0mtrtl-jl46in.js +2 -0
- package/.next/standalone/.next/static/chunks/0ov_akpudbv96.js +5 -0
- package/.next/standalone/.next/static/chunks/0oyskd~8~j.j7.js +1 -0
- package/.next/standalone/.next/static/chunks/0q1872yhybt55.js +1 -0
- package/.next/standalone/.next/static/chunks/0seo-lerjdkbn.js +1 -0
- package/.next/standalone/.next/static/chunks/0t1awv68pnn-e.js +1 -0
- package/.next/standalone/.next/static/chunks/0wl8cpmvyhv0l.js +1 -0
- package/.next/standalone/.next/static/chunks/0~2l3wz-gxs2j.js +1 -0
- package/.next/standalone/.next/static/chunks/0~7h_a_dofg-4.js +1 -0
- package/.next/standalone/.next/static/chunks/11yhe31en~dvt.js +1 -0
- package/.next/standalone/.next/static/chunks/12-mlz2vukuga.js +1 -0
- package/.next/standalone/.next/static/chunks/14fch6~swodjf.css +1 -0
- package/.next/standalone/.next/static/chunks/15gztq9f12uhe.js +1 -0
- package/.next/standalone/.next/static/chunks/15ue90qe1sh-9.js +1 -0
- package/.next/standalone/.next/static/chunks/17z9uivez~kp3.js +1 -0
- package/.next/standalone/package.json +5 -6
- package/dist/mcp-server.cjs +1597 -4545
- package/package.json +5 -6
- package/prisma/schema.prisma +83 -5
- package/scripts/migrations/0005-add-parent-task-id.ts +29 -0
- package/scripts/migrations/0006-project-knowledge.ts +58 -0
- package/scripts/migrations/0007-product-group.ts +67 -0
- package/scripts/{stop-hook.js → tower-stop-hook.js} +42 -3
- package/skills/tower/SKILL.md +36 -75
- package/skills/tower/references/task-source.md +80 -0
- package/skills/tower/references/unattended-messaging.md +95 -0
- package/tsconfig.json +14 -4
- package/.next/standalone/.next/server/chunks/[externals]__0x_wqa7._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.p6em~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.zmhk-._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0042hx5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03ufxqq._.js +0 -28
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04--bs7._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04m2l8a._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__04r193~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0657y50._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06ndn7a._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__08yqoti._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__098.3z2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_d.s7s._.js +0 -28
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_zfnj0._.js +0 -20
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0clptds._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0g.k9o~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i34gbs._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0iggiij._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i~3dwq._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j05vlm._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j1px8f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0k-5ag7._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0otyifi._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0pl.c5.._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0r~9.7c._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t31ba_._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t_weyi._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uptkzd._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x3kws1._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0y8w5di._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0zi3~a8._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~g6-c~._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__10fv6tt._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1189rd1._.js +0 -4
- package/.next/standalone/.next/server/chunks/_0jmdgq~._.js +0 -7
- package/.next/standalone/.next/server/chunks/_0q10iet._.js +0 -7
- package/.next/standalone/.next/server/chunks/_0qk_esg._.js +0 -4
- package/.next/standalone/.next/server/chunks/_0t31z6q._.js +0 -5
- package/.next/standalone/.next/server/chunks/_12537g8._.js +0 -7
- package/.next/standalone/.next/server/chunks/src_0fq3zjg._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_0weytpz._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_0wlyw0g._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_0~ey84y._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_0i2.v2d._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_0nw5n~t._.js +0 -3
- package/.next/standalone/.next/server/chunks/src_lib_12xey8u._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/0ws9_lucide-react_dist_esm_icons_0pkla8j._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__00ebsjb._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01fmnse._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01vm_46._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__025ol9g._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__049n47u._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04ednzb._.js +0 -43
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__04wbr9x._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05xg05r._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__06dfcgo._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07xkj1s._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__081e5n~._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08tzbfh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ecd_1d._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0iln7n_._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0j_-qk5._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0k6oo0n._.js +0 -43
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0lws68d._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0mpjat-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0oamph.._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pnv7nd._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tja~wz._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ug022w._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ugledi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vxlsec._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0w0.sdz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0x6k.ee._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0xwzk2.._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0yby8pl._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0z7je5_._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zxc81t._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zzqn5z._.js +0 -43
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10c.a3u._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10n3vn6._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__123rmyb._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__124zb~p._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__127w3bm._.js +0 -43
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13ce7v2._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/_04~mjmb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_05a2u03._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/_070t_mh._.js +0 -6
- package/.next/standalone/.next/server/chunks/ssr/_07q06~v._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/_0_q41~z._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_0dxbp89._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/_0foto06._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0kojxno._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0rdyrfd._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0rxeqmo._.js +0 -17
- package/.next/standalone/.next/server/chunks/ssr/_0s.h4l2._.js +0 -43
- package/.next/standalone/.next/server/chunks/ssr/_0u3yt.5._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/_0wqcz3w._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/_0ye1-r-._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_03r.9go._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_06f0dao._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_0djxlqx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_components_ui_select_tsx_0d2ra01._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_08jql1e._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0b~j-9d._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0eymyjf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0fkv9z3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0n-n0.a._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0sgt~lv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0sms4xl._.js +0 -5
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0x-iyl1._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0yjmty1._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_13aevv6._.js +0 -3
- package/.next/standalone/.next/static/chunks/0-tuek2jqf0el.js +0 -1
- package/.next/standalone/.next/static/chunks/0.-.jc~0b~hy0.js +0 -1
- package/.next/standalone/.next/static/chunks/0.lqb7y9kz5z6.js +0 -1
- package/.next/standalone/.next/static/chunks/0.nsmn6shzidu.js +0 -2
- package/.next/standalone/.next/static/chunks/0.~03w.uxge40.js +0 -1
- package/.next/standalone/.next/static/chunks/01hdj_kw4z2zq.js +0 -2
- package/.next/standalone/.next/static/chunks/01j9m895w64zn.js +0 -1
- package/.next/standalone/.next/static/chunks/01yoibobkdz3x.js +0 -1
- package/.next/standalone/.next/static/chunks/041o.dh2lc-k3.js +0 -1
- package/.next/standalone/.next/static/chunks/07i9j5yyg4vs3.js +0 -1
- package/.next/standalone/.next/static/chunks/08ooaq~-.8fzu.js +0 -1
- package/.next/standalone/.next/static/chunks/0bylodlncwfpb.js +0 -5
- package/.next/standalone/.next/static/chunks/0clewc5ifaruu.js +0 -12
- package/.next/standalone/.next/static/chunks/0cpwtqzrjdgvs.js +0 -1
- package/.next/standalone/.next/static/chunks/0c~e1-nst-ze-.js +0 -1
- package/.next/standalone/.next/static/chunks/0ddt-snh45031.js +0 -1
- package/.next/standalone/.next/static/chunks/0dv4anj-j523o.js +0 -1
- package/.next/standalone/.next/static/chunks/0gf~0e3xpa0fj.js +0 -5
- package/.next/standalone/.next/static/chunks/0gvfb.b8m_i8t.js +0 -1
- package/.next/standalone/.next/static/chunks/0h77-u2vvr-a1.js +0 -1
- package/.next/standalone/.next/static/chunks/0jrje~1gt6w85.css +0 -1
- package/.next/standalone/.next/static/chunks/0lqp~-dlfenad.js +0 -1
- package/.next/standalone/.next/static/chunks/0p4w5b_p_yju8.js +0 -1
- package/.next/standalone/.next/static/chunks/0qkr26yz3bocs.js +0 -1
- package/.next/standalone/.next/static/chunks/0uf~7eqel0zra.js +0 -1
- package/.next/standalone/.next/static/chunks/0w71r_sj_fibx.js +0 -1
- package/.next/standalone/.next/static/chunks/0xg6rcq6g4bbh.js +0 -1
- package/.next/standalone/.next/static/chunks/0yff8rwmrl5m4.js +0 -1
- package/.next/standalone/.next/static/chunks/0ymipmkk2uqby.js +0 -1
- package/.next/standalone/.next/static/chunks/0znfclapbniaa.js +0 -1
- package/.next/standalone/.next/static/chunks/11pe3kpxuj33f.js +0 -1
- package/.next/standalone/.next/static/chunks/172s9cg35qt7i.js +0 -1
- package/.next/standalone/.next/static/chunks/17m4o~gdsvuo3.js +0 -1
- package/.next/standalone/.next/static/chunks/184-zu89wwa4u.js +0 -1
- package/next.config.ts +0 -18
- /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dinNvsaC6aoPK_B7ZTeBv → Pf_z-PYy0CJhvcyPEi-LM}/_ssgManifest.js +0 -0
- /package/scripts/{post-tool-hook.js → tower-post-tool-hook.js} +0 -0
- /package/scripts/{session-start-hook.js → tower-session-start-hook.js} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports=[10005,869582,e=>{"use strict";let t=new(e.i(472129)).ClaudeCliAdapter;async function r(n,a,i={}){let s="";try{let{query:r}=await e.A(145135),l=t.resolveCommand();for await(let e of r({prompt:n,options:{tools:i.tools??[],allowedTools:i.allowedTools??[],maxTurns:i.maxTurns??1,cwd:a,pathToClaudeCodeExecutable:l,sessionPersistence:!1}}))if("assistant"===e.type){let t=e.message.content.filter(e=>"text"===e.type);s+=t.map(e=>e.text??"").join("")}else if("result"===e.type){let t="string"==typeof e.result?e.result:"";t&&!s&&(s=t)}return s.trim()||null}catch(e){if(e.message?.includes("maximum number of turns")&&s.trim())return s.trim();return console.error("[aiQuery] Failed:",e.message,e.stack?.slice(0,300)),null}}async function n(e,t){let n=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
|
+
|
|
3
|
+
\`\`\`
|
|
4
|
+
${e.slice(-5e3)}
|
|
5
|
+
\`\`\``,a=await r(n,t);return a&&a.replace(/^[#*\->"'\s]+/,"").trim()||null}async function a(e,t,n){let a=e.slice(-8e3),i=n?`
|
|
6
|
+
Session summary: ${n}`:"",s=`You are analyzing a completed AI coding session. Extract reusable insights.
|
|
7
|
+
${i}
|
|
8
|
+
|
|
9
|
+
Terminal log (last 8000 chars):
|
|
10
|
+
\`\`\`
|
|
11
|
+
${a}
|
|
12
|
+
\`\`\`
|
|
13
|
+
|
|
14
|
+
Respond ONLY with valid JSON matching this schema (no markdown, no explanation):
|
|
15
|
+
{
|
|
16
|
+
"summary": "one-sentence summary of what was accomplished",
|
|
17
|
+
"insights": [
|
|
18
|
+
{ "type": "pattern|pitfall|decision|tool|reference", "content": "description" }
|
|
19
|
+
],
|
|
20
|
+
"shouldCreateNote": true/false,
|
|
21
|
+
"noteTitle": "short title for the note (only if shouldCreateNote is true)"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
Rules:
|
|
25
|
+
- Set shouldCreateNote=true ONLY if there are genuinely reusable insights (architectural decisions, non-obvious pitfalls, useful patterns, important tool discoveries)
|
|
26
|
+
- Trivial sessions (simple formatting, single-line edits, routine commits) should have shouldCreateNote=false
|
|
27
|
+
- insights array can be empty if nothing notable
|
|
28
|
+
- Keep each insight concise (1-2 sentences)`,l=await r(s,t);if(!l)return null;try{let e=l,t=e.match(/\{[\s\S]*\}/);t&&(e=t[0]);let r=JSON.parse(e);if("string"!=typeof r.summary||"boolean"!=typeof r.shouldCreateNote)return console.error("[generateDreamingInsight] Invalid response structure"),null;return r}catch(e){return console.error("[generateDreamingInsight] JSON parse failed:",e.message),null}}e.s(["aiQuery",0,r,"generateDreamingInsight",0,a,"generateSummaryFromLog",0,n],10005),e.s(["SESSION_INSIGHT_CATEGORY",0,"经验洞见","TASK_OVERVIEW_CATEGORY",0,"任务笔记"],869582)},283373,e=>{"use strict";var t=e.i(233405),r=e.i(522734),n=e.i(843793),a=e.i(10005),i=e.i(869582);function s(e,r){return(0,t.execFileSync)("git",e,{cwd:r,timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}function l(e,t){if(t)return t;for(let t of["main","master","develop"])try{return s(["merge-base","HEAD",t],e)}catch{}return null}function o(e){if(!e)return null;let t=e.split("\n").filter(Boolean);if(0===t.length)return null;let r=t[0].replace(/^[a-f0-9]+\s+/,"");return 1===t.length?r:`${t.length} commits: ${r}`}async function u(e,t,i,c,m,d=null){try{let t;console.error(`[captureExecutionSummary] Starting: exec=${e.slice(0,8)} exit=${i} buffer=${c.length}chars worktree=${m} fork=${d?.slice(0,8)??"none"}`);let u=null,g=null,h=null;if(m&&(0,r.existsSync)(m))try{if(s(["rev-parse","--git-dir"],m),u=function(e,t){try{let r=l(e,t);if(!r)return null;return s(["log","--oneline",`${r}..HEAD`],e)||null}catch{return null}}(m,d),(g=function(e,t){try{let r=l(e,t);if(!r)return null;let n=s(["diff","--stat",`${r}..HEAD`],e);if(!n)return null;return function(e){let t=e.split("\n"),r=t[t.length-1];if(!r)return null;let n=r.match(/(\d+)\s+files?\s+changed/),a=r.match(/(\d+)\s+insertions?\(\+\)/),i=r.match(/(\d+)\s+deletions?\(-\)/);return n||a||i?{commits:0,filesChanged:n?parseInt(n[1],10):0,insertions:a?parseInt(a[1],10):0,deletions:i?parseInt(i[1],10):0}:null}(n)}catch{return null}}(m,d))&&u){let e=u.split("\n").filter(Boolean).length;g={...g,commits:e}}h=o(u)}catch{}let p=(t=c.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g,"").replace(/\x1b\[[0-9;?]*[A-Za-z]/g,"").replace(/\x1b[^[\]()][^\x1b]*/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"").replace(/\n{3,}/g,"\n\n").trim()).length<=10240?t:t.slice(t.length-10240);await n.db.taskExecution.update({where:{id:e},data:{summary:h??(u?o(u):null),gitLog:u??null,gitStats:g?JSON.stringify(g):null,exitCode:i,terminalLog:p||null}}),p&&m&&(console.error("[captureExecutionSummary] Starting background AI summary..."),(0,a.generateSummaryFromLog)(p,m).then(async t=>{t&&(console.error(`[captureExecutionSummary] AI summary ready: ${t.slice(0,80)}`),await n.db.taskExecution.update({where:{id:e},data:{summary:t}}))}).catch(e=>{console.error("[captureExecutionSummary] Background AI summary failed:",e)}))}catch(e){console.error("[captureExecutionSummary] Failed to capture summary:",e)}}async function c(e){try{let t=await n.db.task.findUnique({where:{id:e},select:{projectId:!0,executions:{orderBy:{createdAt:"desc"},select:{id:!0,terminalLog:!0,worktreePath:!0,summary:!0}}}});if(!t||0===t.executions.length)return;let r="",s=null,l=[];for(let e of t.executions)e.terminalLog&&(r+=e.terminalLog+"\n---\n"),e.summary&&l.push(e.summary),!s&&e.worktreePath&&(s=e.worktreePath);if(!(r=r.slice(-8e3)).trim())return;let o=l.join("\n"),u=s||process.cwd();console.error(`[captureTaskDreaming] Starting for task=${e.slice(0,8)}, ${t.executions.length} executions`);let c=await (0,a.generateDreamingInsight)(r,u,o);if(!c||!c.shouldCreateNote)return void console.error("[captureTaskDreaming] No note needed");let m=await n.db.projectNote.create({data:{title:c.noteTitle||c.summary.slice(0,50),content:function(e){let t=[];if(t.push("## Summary"),t.push(e.summary),t.push(""),e.insights.length>0)for(let r of(t.push("## Insights"),e.insights))t.push(`- **[${r.type}]**: ${r.content}`);return t.join("\n")}(c),category:i.SESSION_INSIGHT_CATEGORY,projectId:t.projectId,taskId:e}}),d=t.executions[0].id;await n.db.taskExecution.update({where:{id:d},data:{insightNoteId:m.id}}),console.error(`[captureTaskDreaming] Note created: ${m.id}`)}catch(e){console.error("[captureTaskDreaming] Failed:",e)}}e.s(["captureExecutionSummary",0,u,"captureTaskDreaming",0,c])},145135,e=>{e.v(t=>Promise.all(["server/chunks/[externals]__0lhlhz4._.js","server/chunks/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0.721uk._.js"].map(t=>e.l(t))).then(()=>t(217040)))}];
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=_0zok2an._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[215624,e=>{"use strict";var t=e.i(921675),a=e.i(843793),n=e.i(195158),r=e.i(50377),i=e.i(86708);let s=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function o(){let e=await a.db.systemConfig.findMany({where:{key:{in:[...s]}}}),t={};for(let a of e)try{t[a.key]=JSON.parse(a.value)}catch{t[a.key]=null}let n=!0===t["onboarding.completed"],r=t["onboarding.lastStep"],i=t["onboarding.username"];return{isFirstRun:!n,isCompleted:n,lastStep:"number"==typeof r?r:0,username:"string"==typeof i&&i.length>0?i:null}}async function d(e){await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),(0,n.revalidatePath)("/","layout")}async function l(e,t=4){if(await a.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:String(t)},update:{value:String(t)}}),void 0!==e){let t=e.trim().slice(0,64).replace(/[\r\n]/g," ");t.length>0&&await a.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}(0,n.revalidatePath)("/","layout")}async function u(e,t){await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.requested"},create:{key:"onboarding.extensions.requested",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.completed"},create:{key:"onboarding.extensions.completed",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}}),(0,n.revalidatePath)("/","layout")}async function c(t){try{r.logger.create("task-completion").info("Task completion event dispatched",{taskId:t.taskId,taskTitle:t.taskTitle,status:t.status,executionId:t.executionId});let{broadcastNotification:a}=await e.A(590621);a({...t,type:"completion"}),(async()=>{try{let{db:a}=await e.A(989186),{recordHarnessMessage:n}=await e.A(60345),r=await a.task.findUnique({where:{id:t.taskId},select:{unattended:!0}});if(!r?.unattended)return;let i="COMPLETED"===t.status;await n({taskId:t.taskId,executionId:t.executionId,kind:i?"done":"failed",content:i?"任务已完成,进入待审阅。":"任务执行失败,请查看终端。"})}catch{}})()}catch{}}(0,i.ensureServerEntryExports)([o,d,l,u,c]),(0,t.registerServerReference)(o,"001de1e475f046aa339c23ec372c92b714d1f9a6f5",null),(0,t.registerServerReference)(d,"40107191906b7bd9007e9c955d43addd4eb4a5a687",null),(0,t.registerServerReference)(l,"603aca60338da224813e09368e73f008feefa9a4fe",null),(0,t.registerServerReference)(u,"60d98f261d5da4342103e4c5be854bfdc7b172158c",null),(0,t.registerServerReference)(c,"4047d8634587ecb96fe8459ea07f040d7d207f1c96",null),e.s(["dispatchTaskCompletionEvent",0,c])},590621,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__0~ju4-d._.js","server/chunks/src_lib_0d~1~wz._.js"].map(t=>e.l(t))).then(()=>t(513200)))},989186,e=>{e.v(e=>Promise.resolve().then(()=>e(843793)))},60345,e=>{e.v(e=>Promise.resolve().then(()=>e(108789)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_05balzk._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[397998,e=>{"use strict";async function r(){{let{pruneOrphanedWorktrees:r,cleanupStaleExecutions:s,ensureTowerLabel:t,ensureDefaultWorkspace:a}=await e.A(257948);await r(),await s(),await t(),await a();let{startWsServer:o}=await e.A(484221);await o();let{ensureTowerDir:l}=await e.A(204549);l();let i=globalThis;if(!i.__harnessSweepStarted){i.__harnessSweepStarted=!0;let r=async()=>{try{let{readConfigValue:r}=await e.A(938213),{sweepExpiredAsks:s}=await e.A(28505),t=await r("harness.pendingTtlDays",14),a=await s(t);a>0&&console.error(`[harness] TTL sweep expired ${a} stale open ask(s)`)}catch(e){console.error("[harness] TTL sweep failed:",e)}};r(),setInterval(()=>void r(),216e5)}(async()=>{try{let{providerRegistry:r}=await e.A(128761),{installAllForProvider:s}=await e.A(518092),t=parseInt(process.env.PORT||"3000",10),a=`http://localhost:${t}`;for(let e of r.getAll()){let r=e.cli?.adapter;if(r)try{if(await r.repairHookPaths?.().catch(()=>{}),!await r.isAvailable()||await r.isMcpInstalled("tower",{scope:"user"}).catch(()=>!1))continue;let t=await s(e.name,a);t.ok?console.error(`[init-tower] Auto-installed Tower MCP for ${e.name} (user scope)`):console.error(`[init-tower] Auto-install for ${e.name} reported issues:`,{mcp:t.mcp?.ok,hooks:t.hooks?.ok,skill:t.skill?.ok})}catch(r){console.error(`[init-tower] Auto-install failed for ${e.name}:`,r)}}}catch(e){console.error("[init-tower] Provider auto-install setup failed:",e)}})()}}e.s(["register",0,r])},257948,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__136ty69._.js"].map(r=>e.l(r))).then(()=>r(271856)))},484221,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__0zcy11y._.js","server/chunks/src_lib_0ylel_1._.js"].map(r=>e.l(r))).then(()=>r(336114)))},204549,e=>{e.v(r=>Promise.all(["server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js","server/chunks/[root-of-the-server]__0u8tl88._.js"].map(r=>e.l(r))).then(()=>r(301105)))},938213,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__0qfcg6k._.js"].map(r=>e.l(r))).then(()=>r(746888)))},28505,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__12fmxq0._.js"].map(r=>e.l(r))).then(()=>r(845520)))},128761,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__0-kboke._.js","server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js"].map(r=>e.l(r))).then(()=>r(136902)))},518092,e=>{e.v(r=>Promise.all(["server/chunks/[root-of-the-server]__02r7j6y._.js","server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js"].map(r=>e.l(r))).then(()=>r(760138)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_0aygchu._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[215624,e=>{"use strict";var t=e.i(921675),a=e.i(843793),n=e.i(195158),r=e.i(50377),i=e.i(86708);let s=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function o(){let e=await a.db.systemConfig.findMany({where:{key:{in:[...s]}}}),t={};for(let a of e)try{t[a.key]=JSON.parse(a.value)}catch{t[a.key]=null}let n=!0===t["onboarding.completed"],r=t["onboarding.lastStep"],i=t["onboarding.username"];return{isFirstRun:!n,isCompleted:n,lastStep:"number"==typeof r?r:0,username:"string"==typeof i&&i.length>0?i:null}}async function d(e){await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),(0,n.revalidatePath)("/","layout")}async function l(e,t=4){if(await a.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:String(t)},update:{value:String(t)}}),void 0!==e){let t=e.trim().slice(0,64).replace(/[\r\n]/g," ");t.length>0&&await a.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}(0,n.revalidatePath)("/","layout")}async function u(e,t){await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.requested"},create:{key:"onboarding.extensions.requested",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.completed"},create:{key:"onboarding.extensions.completed",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}}),(0,n.revalidatePath)("/","layout")}async function c(t){try{r.logger.create("task-completion").info("Task completion event dispatched",{taskId:t.taskId,taskTitle:t.taskTitle,status:t.status,executionId:t.executionId});let{broadcastNotification:a}=await e.A(590621);a({...t,type:"completion"}),(async()=>{try{let{db:a}=await e.A(989186),{recordHarnessMessage:n}=await e.A(60345),r=await a.task.findUnique({where:{id:t.taskId},select:{unattended:!0}});if(!r?.unattended)return;let i="COMPLETED"===t.status;await n({taskId:t.taskId,executionId:t.executionId,kind:i?"done":"failed",content:i?"任务已完成,进入待审阅。":"任务执行失败,请查看终端。"})}catch{}})()}catch{}}(0,i.ensureServerEntryExports)([o,d,l,u,c]),(0,t.registerServerReference)(o,"001de1e475f046aa339c23ec372c92b714d1f9a6f5",null),(0,t.registerServerReference)(d,"40107191906b7bd9007e9c955d43addd4eb4a5a687",null),(0,t.registerServerReference)(l,"603aca60338da224813e09368e73f008feefa9a4fe",null),(0,t.registerServerReference)(u,"60d98f261d5da4342103e4c5be854bfdc7b172158c",null),(0,t.registerServerReference)(c,"4047d8634587ecb96fe8459ea07f040d7d207f1c96",null),e.s(["dispatchTaskCompletionEvent",0,c])},590621,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__0~ju4-d._.js","server/chunks/src_lib_0d~1~wz._.js"].map(t=>e.l(t))).then(()=>t(513200)))},989186,e=>{e.v(e=>Promise.resolve().then(()=>e(843793)))},60345,e=>{e.v(e=>Promise.resolve().then(()=>e(108789)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_0gif-f5._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[276534,e=>{"use strict";e.s(["CONFIG_DEFAULTS",0,{"git.pathMappingRules":{defaultValue:[],type:"object",label:"Git Path Mapping Rules"},"system.maxUploadBytes":{defaultValue:0x3200000,type:"number",label:"Max Upload Size (bytes)"},"system.maxConcurrentExecutions":{defaultValue:20,type:"number",label:"Max Concurrent Executions"},"system.maxReadableFileBytes":{defaultValue:5242880,type:"number",label:"Max Readable File Size (bytes)"},"system.backupDir":{defaultValue:"",type:"string",label:"Backup Directory"},"git.timeoutSec":{defaultValue:30,type:"number",label:"Git Operation Timeout (seconds)"},"search.resultLimit":{defaultValue:20,type:"number",label:"Search Result Limit"},"search.allModeCap":{defaultValue:5,type:"number",label:"All-Mode Per-Type Cap"},"search.debounceMs":{defaultValue:250,type:"number",label:"Search Debounce (ms)"},"search.snippetLength":{defaultValue:80,type:"number",label:"Snippet Length (characters)"},"search.codeTimeoutSec":{defaultValue:30,type:"number",label:"Code Search Timeout (seconds)"},"board.archiveDelayDays":{defaultValue:7,type:"number",label:"Archive Delay (days)"},"missions.grid.minCols":{defaultValue:1,type:"number",label:"Grid Min Columns"},"missions.grid.maxCols":{defaultValue:5,type:"number",label:"Grid Max Columns"},"missions.grid.minRows":{defaultValue:1,type:"number",label:"Grid Min Rows"},"missions.grid.maxRows":{defaultValue:5,type:"number",label:"Grid Max Rows"},"terminal.app":{defaultValue:"Terminal",type:"string",label:"Default Terminal App"},"editor.command":{defaultValue:"",type:"string",label:"Default Editor Command"},"terminal.wsPort":{defaultValue:3001,type:"number",label:"WebSocket Port"},"terminal.idleTimeoutSec":{defaultValue:180,type:"number",label:"Idle Timeout (seconds)"},"terminal.fontSize":{defaultValue:13,type:"number",label:"Terminal Font Size"},"terminal.fontFamily":{defaultValue:"Menlo, Monaco, 'Courier New', monospace",type:"string",label:"Terminal Font Family"},"assistant.systemPrompt":{defaultValue:'You are Tower Assistant — the built-in AI operator for the Tower task management platform.\n\n## Identity\n- You are a task management operator, NOT a coding assistant.\n- You can ONLY use Tower MCP tools. You CANNOT read files, edit code, run shell commands, or search the web.\n- Always respond in the same language the user uses.\n\n## Capabilities\nWhen users ask what you can do, respond with EXACTLY these 6 groups. Translate to the user\'s language.\n\n1. **Workspace & Project** — View, create, update, delete workspaces and projects. Search projects and repositories.\n2. **Task Management** — Create tasks (priority, labels, worktree branch isolation, sub-path, auto-start). Move task status (TODO → IN_PROGRESS → IN_REVIEW → DONE / CANCELLED). Update task info and labels.\n3. **Execution Monitor** — Start task execution, check execution status, get terminal output, send commands to running terminals.\n4. **Daily Report & Todo** — Generate daily work summary (completed + in-progress). View pending task list sorted by priority.\n5. **Labels & Notes & Assets** — Manage workspace labels, project notes, and file attachments.\n6. **Global Search** — Search tasks, projects, repositories, notes, and assets by keyword.\n\nDo NOT list any capabilities beyond the above. Do NOT mention code editing, debugging, testing, git operations, or any development capabilities.\n\n## Scope Boundary\nIf the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply:\n"抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。"\n\n## 任务来源标注\n每次通过 create_task 创建任务时,在 description 末尾追加一段来源标注(与任务终端、飞书的来源规范一致):\n## 来源\nTower Assistant',type:"string",label:"Assistant System Prompt"},"assistant.displayMode":{defaultValue:"sidebar",type:"string",label:"Assistant Display Mode"},"assistant.communicationMode":{defaultValue:"chat",type:"string",label:"Assistant Communication Mode"},"task.defaultUseWorktree":{defaultValue:!0,type:"boolean",label:"Default: Use Worktree"},"task.defaultAutoStart":{defaultValue:!1,type:"boolean",label:"Default: Auto-start Execution"},"task.mcpDefaultsConfigured":{defaultValue:!1,type:"boolean",label:"MCP Task Defaults Configured"},"task.systemDirective":{defaultValue:"## Tower 系统说明\n你运行在 Tower(一个 AI 任务调度平台)的任务终端里,为某个具体任务而启动。你的产出会被 Tower 记录为「任务执行」,任务结束后进入 review 状态,可能被派生你的父任务或用户审阅。环境变量里有 TOWER_TASK_ID(当前任务 id)、TOWER_TASK_TITLE(任务标题)等,可用来识别自己。\n\n## 首要原则\n- **项目自身规则优先**:工作目录里项目的 CLAUDE.md / AGENTS.md 等约定优先级最高,与本声明冲突时以项目规则为准。本声明只规定「作为一个 Tower 任务」的通用行为,不覆盖具体项目的技术规范。\n- **只做任务范围内的事**:紧扣当前任务目标,不顺手改无关代码、不擅自扩大改动面。\n- **完成即验证**:有测试 / 构建 / lint / 类型检查就先跑一遍再宣称「做完」;失败如实报告,不确定就说不确定,别把没验证的当成功。\n- **长进程别占住终端**:dev server、watch 等需长时间前台运行的命令,用完即停或放后台,别让任务终端被永久卡住(Tower 的 Preview 有独立管理,通常不需要你手动起 dev server)。\n- **默认用中文回复**(除非项目或用户另有要求)。\n\n## Git 工作规则\n- 完成一段有意义的改动后,主动用清晰的 message 创建 commit(约定式:feat / fix / refactor / docs / chore…),不要留一堆未提交的改动。\n- 若当前任务运行在 Git worktree 隔离分支里(worktree 任务):**只 commit,绝不 push `task/…` 分支到远程** —— worktree 分支由 Tower 在本地统一合并回 base 并清理(完成任务时本地 merge,不经远程 PR)。把 `task/…` 推到远程只会留下 Tower 返程流程清不掉的残留分支,需要人工 `git push origin --delete` 才能收拾。\n- 若当前任务直接在项目主工作区里(非 worktree 任务):可以 push。\n- 不确定自己是不是 worktree 任务时,默认只 commit、不 push。\n- **完成任务遇到合并冲突时可自助**:Tower 完成任务会把 `task/…` 分支合并回 base,若报「合并到 base 存在冲突」,根因通常是 base 有了新提交。此时**在当前 worktree 里**执行 `git merge <base 分支>`(如 `git merge main`)把 base 合进来、解决冲突并提交,然后重新完成任务即可——**不要去主仓库解冲突**(那违反 worktree 纪律,合并动作由 Tower 在主仓库完成)。\n\n## 并发与协作(多任务可能同改一个仓库)\n- Tower 常同时跑多个任务、甚至同一仓库多个 worktree。**只 stage / commit 你这轮亲手改的文件**,一律 `git add <明确路径>`;禁止 `git add .` / `-A` / `-u` / `git commit -a`,别把别的窗口或用户手动的改动一并提交。\n- `git status` 里不认识、不是你改的文件一律不碰、不提交,需要时在小结里提一句即可。\n- 不 force-push、不改写共享分支历史;不对不属于你的改动做 `git reset --hard` / `git clean -fd`。\n\n## Worktree 纪律(务必防止改到主仓库)\n- 开工第一件事先跑 `pwd`:它就是你的工作根。之后所有 Read/Edit/Write/Bash 路径都以它为基准,优先用相对路径;用绝对路径时必须以这个根开头,**绝不**凭上下文/记忆里的主仓库路径去拼绝对路径——这正是历次「worktree 里看什么都没变」的根因。\n- 判断自己是不是 worktree 任务:`pwd` 落在 `.worktrees/task-$TOWER_TASK_ID` 下、或 `git branch --show-current` 为 `task/$TOWER_TASK_ID`,即是。是则严格走本节纪律。\n- 动任何文件 / 提交前,先核对三件事都成立:① `git rev-parse --show-toplevel` 等于当前 worktree 根(不是主仓库路径);② `git branch --show-current` 为 `task/$TOWER_TASK_ID`(不是 main / feature / 其它分支);③ 要改的文件绝对路径含 `.worktrees/task-$TOWER_TASK_ID/` 段。任一不满足,说明你操作到主仓库了,**立即停止、不要提交**,先纠正目录。\n- 绝不 `cd` 到主仓库或 worktree 之外去改文件 / 跑 git;所有 git 命令都在当前 worktree 根内执行(跨目录时用 `git -C <worktree 根>` 显式指定,别靠默认 cwd 猜)。\n- 万一已经改错到主仓库:把改动搬回 worktree(`git -C <worktree 根> cherry-pick <误提交>` 或重打一遍),主仓库工作区用 `git restore` 复原、误提交按情况处理——已被别的提交叠在上面就用 `git revert`(保历史、不动别人的提交),确认独占且未 push 才用 `git reset`;最后如实报告两边最终状态,不要隐瞒。\n\n## 汇报与交接\n- 产出会被 review,结尾给一段可速读的小结:做了什么、改了哪些关键文件、验证结果、还剩什么没做 / 被什么阻塞、有没有需要用户或父任务拍板的决策。\n- 真被外部因素阻塞(待接口、待素材、待人决策)就**明确说明并停下**,别反复空转或自行臆测硬做。\n- 危险 / 不可逆操作(删数据库、删大目录、`rm -rf`、`drop table`、对外发布 / 部署)先说明并征得确认再执行。\n\n## 无人值守(环境变量 TOWER_UNATTENDED=1 时尤其重要)\n- 你可能在无人盯守下运行。两个与人沟通的 MCP 工具:`ask_human`(阻塞:**记录**问题并挂起任务——本回合到此为止,人回复后自动唤醒、带答案续跑)和 `notify_human`(非阻塞:**记录**一条进度/FYI 后立即继续,不必等回复、不挂起)。**注意:这两个工具只在 Tower 内记录(/harness 面板可见),本身不把消息发给人**;无人值守下要真正通知到人,须按系统提示里「无人值守外推」段先经平台渠道把消息发出去,再调这两个工具留档。\n- 需要人拍板才能推进(选型、二义需求、缺关键信息、对外发布/部署等)→ 用 `ask_human` 把问题和可选项讲清楚,然后停下等待,别自行臆测硬做。\n- 危险 / 不可逆操作(删库、删大目录、`rm -rf`、`drop table`、force-push、对外发布)→ 一律先 `ask_human` 征得同意再执行,即使终端已放开权限也不例外。\n- 只是想同步进展或抛个 FYI、无需回复 → 用 `notify_human`,发完继续干。\n- 调用 `ask_human` 后立即结束本回合、不要再继续操作;它会关闭终端省资源,人回复后任务自动恢复。\n\n## 本轮 commit 回显\n- **每轮回复的最后,必须把本轮创建的 commit 列出来让用户一眼看到**。格式固定:先一行加粗小标题 `**本轮 commit**`(不要用 `---` 分隔线、不要用 emoji),换行后每条 commit 单独一行、以 `- ` 开头,形如 `` - `<短 hash>` <message 首行> ``(hash 用行内代码包住)。本轮没有创建任何 commit 时,只回一行 `本轮无 commit`。",type:"string",label:"Task System Directive (built-in)"},"harness.targets":{defaultValue:[],type:"object",label:"Harness Notify Targets (multi-platform registry)"},"harness.pendingTtlDays":{defaultValue:14,type:"number",label:"Harness Pending Ask TTL (days)"}}])},22569,519827,e=>{"use strict";var t=e.i(921675),a=e.i(843793),r=e.i(276534);let n="board.archiveDelayDays";function s(e){let t=Math.floor(Number(e));return Number.isFinite(t)?Math.min(Math.max(t,1),365):7}function l(e,t){let a=new Date(t);a.setHours(0,0,0,0);let r=new Date(a);return r.setDate(r.getDate()-(e-1)),{startOfToday:a,doneCutoff:r}}e.s(["ARCHIVE_DELAY_KEY",0,n,"DEFAULT_ARCHIVE_DELAY_DAYS",0,7,"archivedTaskWhere",0,function(e,t=new Date){let{startOfToday:a,doneCutoff:r}=l(e,t);return{status:{in:["DONE","CANCELLED"]},OR:[{status:"CANCELLED",updatedAt:{lt:a}},{status:"DONE",doneAt:{lt:r}},{status:"DONE",doneAt:null}]}},"normalizeArchiveDelayDays",0,s,"visibleTaskWhere",0,function(e,t=new Date){let{startOfToday:a,doneCutoff:r}=l(e,t);return{OR:[{status:{notIn:["DONE","CANCELLED"]}},{status:"CANCELLED",updatedAt:{gte:a}},{status:"DONE",doneAt:{gte:r}}]}}],519827);var i=e.i(446786),o=e.i(814747);function u(e){return e.startsWith("~/")?o.default.join(i.default.homedir(),e.slice(2)):e}function c(e){let t=e.trim();if(!t)return"";try{let e=d(t);if(!e)return"";let{host:r,pathSegments:n}=e;if("code.iflytek.com"===r){let e,t;return u((e=[...n],"osc"===e[0]&&"_source"===e[1]&&(e=e.slice(2)),((t=e.indexOf("-"))>0&&(e=e.slice(0,t)),0===e.length)?"":`~/company/${e.join("/")}`))}if("github.com"===r){var a;let e,t;return u((e=(a=n)[0],t=a[1],e&&t?`${"jp-liu"===e?"~/project/i":"~/project/f"}/${t}`:""))}let s=n[n.length-1];return s?u(`~/project/f/${s}`):""}catch{return""}}function d(e){let t,a=e.match(/^git@([^:]+):(.+)$/);if(a)return{host:a[1],pathSegments:f(a[2]).split("/").filter(Boolean)};try{t=new URL(e)}catch{return null}return{host:t.hostname,pathSegments:f(decodeURIComponent(t.pathname)).split("/").filter(Boolean)}}function f(e){return e.replace(/\.git\/?$/,"")}var m=e.i(769310);async function p(e,t){let r=await a.db.systemConfig.findUnique({where:{key:e}});if(!r)return t;try{return JSON.parse(r.value)}catch{return t}}async function b(e,t){await a.db.systemConfig.upsert({where:{key:e},create:{key:e,value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}async function h(){return s(await p(n,7))}async function y(e){let t=e.trim();if(!t)return{path:"",source:"empty"};try{let e=await p("git.pathMappingRules",[]),a=function(e,t){if(!t.length)return"";let a=e.trim();if(!a)return"";let r=d(a);if(!r)return"";let{host:n,pathSegments:s}=r,l=s[0]??"",i=s[s.length-1]??"",o=[...t].sort((e,t)=>{let a=+("*"===e.ownerMatch),r=+("*"===t.ownerMatch);return a!==r?a-r:e.priority-t.priority}),c=s.join("/");for(let e of o){if(e.host!==n||"*"!==e.ownerMatch&&e.ownerMatch!==l)continue;let t=e.localPathTemplate;if(t.includes("{path}"))return u(t.replace("{path}",c).replace("{owner}",l).replace("{repo}",i).replace(/\/+$/,""));let a=t.replace("{owner}",l).replace("{repo}","").replace(/\/+$/,"");return u(`${a}/${i}`)}return""}(t,e);if(a)return{path:a,source:"rule"};return{path:c(t),source:"fallback"}}catch{return{path:c(t),source:"fallback"}}}async function g(e){let{path:t}=await y(e);return t}async function w(e){let t=Object.fromEntries((await a.db.systemConfig.findMany({where:{key:{in:e}}})).map(e=>{try{return[e.key,JSON.parse(e.value)]}catch{return[e.key,null]}})),n={};for(let a of e)n[a]=a in t?t[a]:r.CONFIG_DEFAULTS[a]?.defaultValue??null;return n}async function k(){return(0,m.detectShells)()}async function T(){return(0,m.detectTerminalApps)()}async function D(){return(0,m.detectEditors)()}async function S(){return{platform:process.platform}}async function E(){let{getActiveWsPort:t}=await e.A(590621),a=t();return null!==a?a:p("terminal.wsPort",parseInt(process.env.PORT||"3000",10)+1)}(0,e.i(86708).ensureServerEntryExports)([p,b,h,y,g,w,k,T,D,S,E]),(0,t.registerServerReference)(p,"60abd5e499bef8cd1d081b74113f0e817026a864e7",null),(0,t.registerServerReference)(b,"60cfe2e76434418decb73fd3d25bf587d7b5ad1695",null),(0,t.registerServerReference)(h,"00694f1d42fc635e943bf4001debadca2d3dc7bd4b",null),(0,t.registerServerReference)(y,"40adbba8c12c1bdb8072b324eb5ae7afff35a67271",null),(0,t.registerServerReference)(g,"404b88257c253f72e32b690fbfdc864cdbe54233e3",null),(0,t.registerServerReference)(w,"4075ec4df24bd89711034f15cca9eb240df9f3f473",null),(0,t.registerServerReference)(k,"006b975dc2d92b456d5e633526123481f7ed2f38ab",null),(0,t.registerServerReference)(T,"00e0f4165c3e26131b17fe500b9750040c3067f2f6",null),(0,t.registerServerReference)(D,"002440c9e28ab94cdd90b58bafb6f601dc41d8d108",null),(0,t.registerServerReference)(S,"00f050964242aebca10dc64fbed06c46e1627b32c6",null),(0,t.registerServerReference)(E,"00106d4fcb4d66916535f592a22f2432e998f5c560",null),e.s(["getArchiveDelayDays",0,h,"getConfigValue",0,p],22569)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_0pg9w-x._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[215624,e=>{"use strict";var t=e.i(921675),a=e.i(843793),n=e.i(195158),r=e.i(50377),i=e.i(86708);let s=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function o(){let e=await a.db.systemConfig.findMany({where:{key:{in:[...s]}}}),t={};for(let a of e)try{t[a.key]=JSON.parse(a.value)}catch{t[a.key]=null}let n=!0===t["onboarding.completed"],r=t["onboarding.lastStep"],i=t["onboarding.username"];return{isFirstRun:!n,isCompleted:n,lastStep:"number"==typeof r?r:0,username:"string"==typeof i&&i.length>0?i:null}}async function d(e){await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),(0,n.revalidatePath)("/","layout")}async function l(e,t=4){if(await a.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:String(t)},update:{value:String(t)}}),void 0!==e){let t=e.trim().slice(0,64).replace(/[\r\n]/g," ");t.length>0&&await a.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}(0,n.revalidatePath)("/","layout")}async function u(e,t){await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.requested"},create:{key:"onboarding.extensions.requested",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.completed"},create:{key:"onboarding.extensions.completed",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}}),(0,n.revalidatePath)("/","layout")}async function c(t){try{r.logger.create("task-completion").info("Task completion event dispatched",{taskId:t.taskId,taskTitle:t.taskTitle,status:t.status,executionId:t.executionId});let{broadcastNotification:a}=await e.A(590621);a({...t,type:"completion"}),(async()=>{try{let{db:a}=await e.A(989186),{recordHarnessMessage:n}=await e.A(60345),r=await a.task.findUnique({where:{id:t.taskId},select:{unattended:!0}});if(!r?.unattended)return;let i="COMPLETED"===t.status;await n({taskId:t.taskId,executionId:t.executionId,kind:i?"done":"failed",content:i?"任务已完成,进入待审阅。":"任务执行失败,请查看终端。"})}catch{}})()}catch{}}(0,i.ensureServerEntryExports)([o,d,l,u,c]),(0,t.registerServerReference)(o,"001de1e475f046aa339c23ec372c92b714d1f9a6f5",null),(0,t.registerServerReference)(d,"40107191906b7bd9007e9c955d43addd4eb4a5a687",null),(0,t.registerServerReference)(l,"603aca60338da224813e09368e73f008feefa9a4fe",null),(0,t.registerServerReference)(u,"60d98f261d5da4342103e4c5be854bfdc7b172158c",null),(0,t.registerServerReference)(c,"4047d8634587ecb96fe8459ea07f040d7d207f1c96",null),e.s(["dispatchTaskCompletionEvent",0,c])},590621,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__0~ju4-d._.js","server/chunks/src_lib_0d~1~wz._.js"].map(t=>e.l(t))).then(()=>t(513200)))},989186,e=>{e.v(e=>Promise.resolve().then(()=>e(843793)))},60345,e=>{e.v(e=>Promise.resolve().then(()=>e(108789)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_0vp6.co._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[215624,e=>{"use strict";var t=e.i(921675),a=e.i(843793),n=e.i(195158),r=e.i(50377),i=e.i(86708);let s=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function o(){let e=await a.db.systemConfig.findMany({where:{key:{in:[...s]}}}),t={};for(let a of e)try{t[a.key]=JSON.parse(a.value)}catch{t[a.key]=null}let n=!0===t["onboarding.completed"],r=t["onboarding.lastStep"],i=t["onboarding.username"];return{isFirstRun:!n,isCompleted:n,lastStep:"number"==typeof r?r:0,username:"string"==typeof i&&i.length>0?i:null}}async function d(e){await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),(0,n.revalidatePath)("/","layout")}async function l(e,t=4){if(await a.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await a.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:String(t)},update:{value:String(t)}}),void 0!==e){let t=e.trim().slice(0,64).replace(/[\r\n]/g," ");t.length>0&&await a.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}})}(0,n.revalidatePath)("/","layout")}async function u(e,t){await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.requested"},create:{key:"onboarding.extensions.requested",value:JSON.stringify(e)},update:{value:JSON.stringify(e)}}),await a.db.systemConfig.upsert({where:{key:"onboarding.extensions.completed"},create:{key:"onboarding.extensions.completed",value:JSON.stringify(t)},update:{value:JSON.stringify(t)}}),(0,n.revalidatePath)("/","layout")}async function c(t){try{r.logger.create("task-completion").info("Task completion event dispatched",{taskId:t.taskId,taskTitle:t.taskTitle,status:t.status,executionId:t.executionId});let{broadcastNotification:a}=await e.A(590621);a({...t,type:"completion"}),(async()=>{try{let{db:a}=await e.A(989186),{recordHarnessMessage:n}=await e.A(60345),r=await a.task.findUnique({where:{id:t.taskId},select:{unattended:!0}});if(!r?.unattended)return;let i="COMPLETED"===t.status;await n({taskId:t.taskId,executionId:t.executionId,kind:i?"done":"failed",content:i?"任务已完成,进入待审阅。":"任务执行失败,请查看终端。"})}catch{}})()}catch{}}(0,i.ensureServerEntryExports)([o,d,l,u,c]),(0,t.registerServerReference)(o,"001de1e475f046aa339c23ec372c92b714d1f9a6f5",null),(0,t.registerServerReference)(d,"40107191906b7bd9007e9c955d43addd4eb4a5a687",null),(0,t.registerServerReference)(l,"603aca60338da224813e09368e73f008feefa9a4fe",null),(0,t.registerServerReference)(u,"60d98f261d5da4342103e4c5be854bfdc7b172158c",null),(0,t.registerServerReference)(c,"4047d8634587ecb96fe8459ea07f040d7d207f1c96",null),e.s(["dispatchTaskCompletionEvent",0,c])},590621,e=>{e.v(t=>Promise.all(["server/chunks/[root-of-the-server]__0~ju4-d._.js","server/chunks/src_lib_0d~1~wz._.js"].map(t=>e.l(t))).then(()=>t(513200)))},989186,e=>{e.v(e=>Promise.resolve().then(()=>e(843793)))},60345,e=>{e.v(e=>Promise.resolve().then(()=>e(108789)))}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_11k6i~l._.js.map
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
module.exports=[756264,e=>{"use strict";var t=e.i(921675),a=e.i(843793),r=e.i(195158),i=e.i(248434),n=e.i(83721),s=e.i(50377),d=e.i(572173),o=e.i(89428),c=e.i(
|
|
2
|
-
${e.reverse().map(e=>`${e.role}: ${e.content}`).join("\n")}`:"",s.trim()?`User message: ${s}`:""].filter(Boolean).join("\n\n")}let x=
|
|
1
|
+
module.exports=[756264,e=>{"use strict";var t=e.i(921675),a=e.i(843793),r=e.i(195158),i=e.i(248434),n=e.i(83721),s=e.i(50377),d=e.i(572173),o=e.i(89428),c=e.i(108789),l=e.i(924868),u=e.i(446786),w=e.i(814747),h=e.i(192520),f=e.i(86708);let k=s.logger.create("agent-actions"),p=(0,h.getSignalDir)();async function E(e,t){try{await (0,l.mkdir)(p,{recursive:!0,mode:448}),await (0,l.writeFile)((0,w.join)(p,`exit-${e}`),String(t),{mode:384})}catch{}}async function b(e,t){let i=await a.db.taskMessage.create({data:{role:"USER",content:t,taskId:e}});return(0,r.revalidatePath)("/workspaces"),{userMessage:i}}async function m(e){return a.db.taskMessage.findMany({where:{taskId:e},orderBy:{createdAt:"asc"}})}async function P(e,t="CLAUDE_CODE",i,n){let s=await a.db.taskExecution.create({data:{taskId:e,agent:t,status:"RUNNING",startedAt:new Date,worktreePath:i??null,worktreeBranch:n??null}});return await a.db.task.update({where:{id:e},data:{status:"IN_PROGRESS"}}),(0,r.revalidatePath)("/workspaces"),s}async function g(e,t="FAILED"){let i=await a.db.taskExecution.update({where:{id:e},data:{status:t,endedAt:new Date}});return(0,r.revalidatePath)("/workspaces"),i}async function A(t){await (0,c.cancelOpenAsks)(t).catch(()=>{});let{destroySession:i,getSession:n}=await e.A(217260),s=n(t),d=s?.getBuffer()??"",o=await a.db.taskExecution.findFirst({where:{taskId:t,status:"RUNNING"},orderBy:{createdAt:"desc"}}),l=await a.db.task.findUnique({where:{id:t},include:{project:{select:{localPath:!0}}}});if(i(t),o){await a.db.taskExecution.update({where:{id:o.id},data:{status:"COMPLETED",endedAt:new Date}}),await a.db.task.update({where:{id:t},data:{status:"IN_REVIEW"}});let r=o.worktreePath||l?.project?.localPath||null,{captureExecutionSummary:i}=await e.A(507603);await i(o.id,t,0,d,r,o.forkCommit)}(0,r.revalidatePath)("/workspaces")}async function I(e){return a.db.taskExecution.findMany({where:{taskId:e},orderBy:{createdAt:"desc"},include:{insightNote:{select:{id:!0,title:!0,content:!0}}}})}async function v(t,i){await (0,c.cancelOpenAsks)(t).catch(()=>{});let s=await a.db.task.findUnique({where:{id:t},include:{project:!0}});if(!s)throw Error("Task not found");if(!s.project?.localPath)throw Error("Project has no local path configured");await a.db.taskExecution.updateMany({where:{taskId:t,status:"RUNNING",NOT:{sessionId:i}},data:{status:"FAILED",endedAt:new Date}});let l=await a.db.taskExecution.findFirst({where:{taskId:t,sessionId:i},orderBy:{createdAt:"desc"}});if(!l)throw Error("Previous execution not found");let u=l.worktreePath??s.project.localPath,h=s.subPath?(0,w.join)(u,s.subPath):u,f=await (0,d.readConfigValue)("terminal.idleTimeoutSec",180),{adapter:p}=await (0,o.resolveCliAdapter)("terminal"),b=p.buildEnvOverrides({taskId:t,taskTitle:s.title,apiUrl:`http://localhost:${process.env.PORT||"3000"}`,callbackUrl:l.callbackUrl??void 0}),m=await a.db.taskExecution.update({where:{id:l.id},data:{status:"RUNNING",endedAt:null}});await a.db.task.update({where:{id:t},data:{status:"IN_PROGRESS"}}),(0,r.revalidatePath)("/workspaces");let P=await (0,d.readConfigValue)("onboarding.username",""),g=p.buildSpawnArgs({taskId:t,prompt:"",cwd:h,resumeSessionId:i,extraArgs:[...P?["--append-system-prompt",`The user's name is ${P}.`]:[]],envOverrides:b});s.unattended&&(g.env.TOWER_UNATTENDED="1");let A=/no conversation found with session id|unknown session|session .* not found/i;return(0,n.createSession)(t,g.command,g.args,h,()=>{},async r=>{await E(t,r);let n=await a.db.taskExecution.findUnique({where:{id:m.id}});if(n?.status!=="RUNNING")return;let{getSession:d}=await e.A(217260),o=d(t),c=o?.getBuffer()??"";if(0!==r&&A.test(c)){k.info("Session resume failed — retrying with fresh execution",{taskId:t,previousSessionId:i}),await a.db.taskExecution.update({where:{id:m.id},data:{status:"FAILED",endedAt:new Date}}).catch(()=>{});try{await x(t,s.title)}catch(e){k.error("Fresh execution retry also failed",e,{taskId:t})}return}await a.db.taskExecution.update({where:{id:m.id},data:{status:0===r?"COMPLETED":"FAILED",endedAt:new Date}}).catch(()=>{});let u=l.worktreePath||s.project.localPath,{captureExecutionSummary:w}=await e.A(507603);await w(m.id,t,r,c,u,m.forkCommit);let{dispatchTaskCompletionEvent:h}=await e.A(136565);await h({taskId:t,taskTitle:s.title,status:0===r?"COMPLETED":"FAILED",executionId:m.id,workspaceId:s.project.workspaceId}),0===r&&await a.db.task.update({where:{id:t},data:{status:"IN_REVIEW"}}).catch(()=>{})},g.env,void 0,1e3*f),{executionId:m.id,worktreePath:l.worktreePath??u??null}}async function N(t){await (0,c.cancelOpenAsks)(t).catch(()=>{});let i=await a.db.task.findUnique({where:{id:t},include:{project:!0}});if(!i)throw Error("Task not found");if(!i.project?.localPath)throw Error("Project has no local path configured");let s=await a.db.taskExecution.findFirst({where:{taskId:t},orderBy:{createdAt:"desc"}}),{destroySession:l}=await e.A(217260);l(t),await a.db.taskExecution.updateMany({where:{taskId:t,status:"RUNNING"},data:{status:"FAILED",endedAt:new Date}});let u=s?.worktreePath??i.project.localPath,h=i.subPath?(0,w.join)(u,i.subPath):u,f=await (0,d.readConfigValue)("terminal.idleTimeoutSec",180),{adapter:k,provider:p}=await (0,o.resolveCliAdapter)("terminal"),b=k.buildEnvOverrides({taskId:t,taskTitle:i.title,apiUrl:`http://localhost:${process.env.PORT||"3000"}`}),m=await a.db.taskExecution.create({data:{taskId:t,agent:p.agentFieldValue,status:"RUNNING",startedAt:new Date,worktreePath:s?.worktreePath??null,worktreeBranch:s?.worktreeBranch??null}});await a.db.task.update({where:{id:t},data:{status:"IN_PROGRESS"}}),(0,r.revalidatePath)("/workspaces");let P=await (0,d.readConfigValue)("onboarding.username",""),g=k.buildSpawnArgs({taskId:t,prompt:"",cwd:h,continueLatest:!0,extraArgs:[...P?["--append-system-prompt",`The user's name is ${P}.`]:[]],envOverrides:b});return i.unattended&&(g.env.TOWER_UNATTENDED="1"),(0,n.createSession)(t,g.command,g.args,h,()=>{},async r=>{await E(t,r);let n=await a.db.taskExecution.findUnique({where:{id:m.id}});if(n?.status!=="RUNNING")return;let{getSession:d}=await e.A(217260),o=d(t),c=o?.getBuffer()??"";await a.db.taskExecution.update({where:{id:m.id},data:{status:0===r?"COMPLETED":"FAILED",endedAt:new Date}}).catch(()=>{});let l=s?.worktreePath||i.project.localPath,{captureExecutionSummary:u}=await e.A(507603);await u(m.id,t,r,c,l,s?.forkCommit??null);let{dispatchTaskCompletionEvent:w}=await e.A(136565);await w({taskId:t,taskTitle:i.title,status:0===r?"COMPLETED":"FAILED",executionId:m.id,workspaceId:i.project.workspaceId}),0===r&&await a.db.task.update({where:{id:t},data:{status:"IN_REVIEW"}}).catch(()=>{})},g.env,void 0,1e3*f),{executionId:m.id,worktreePath:s?.worktreePath??u??null}}async function y(t){let{getSession:r}=await e.A(217260),i=r(t);if(i&&!i.killed){let e=await a.db.taskExecution.findFirst({where:{taskId:t,status:"RUNNING"},orderBy:{createdAt:"desc"}});return{mode:"already_running",executionId:e?.id??null,worktreePath:e?.worktreePath??null}}if(await a.db.taskExecution.count({where:{taskId:t}})>0){let e=await N(t);return{mode:"continued",executionId:e.executionId,worktreePath:e.worktreePath}}let n=await x(t,"");return{mode:"started",executionId:n.executionId,worktreePath:n.worktreePath}}async function x(t,s,h,f,p){let b,m;await (0,c.cancelOpenAsks)(t).catch(()=>{});let P=await a.db.task.findUnique({where:{id:t},include:{project:!0}});if(!P)throw Error("Task not found");if(!P.project?.localPath)throw Error("Project has no local path configured");let g=await (0,d.readConfigValue)("system.maxConcurrentExecutions",20);if(await a.db.taskExecution.count({where:{status:"RUNNING"}})>=g)throw Error(`已达并发上限(${g}),请等待其他任务完成后再启动`);let A=await (0,d.readConfigValue)("terminal.idleTimeoutSec",180),{adapter:I,provider:v,model:N}=await (0,o.resolveCliAdapter)("terminal");await a.db.taskExecution.updateMany({where:{taskId:t,status:"RUNNING"},data:{status:"FAILED",endedAt:new Date}}),"IN_PROGRESS"!==P.status&&(await a.db.task.update({where:{id:t},data:{status:"IN_PROGRESS"}}),(0,r.revalidatePath)("/workspaces"));let y="";if(!p){let e=await a.db.taskMessage.findMany({where:{taskId:t},orderBy:{createdAt:"desc"},take:10});y=[`Task: ${P.title}`,P.description?`Description: ${P.description}`:"",e.length>0?`Recent conversation:
|
|
2
|
+
${e.reverse().map(e=>`${e.role}: ${e.content}`).join("\n")}`:"",s.trim()?`User message: ${s}`:""].filter(Boolean).join("\n\n")}let x=h??P.promptId;if(x){let e=await a.db.agentPrompt.findUnique({where:{id:x}});e?.content&&(m=await (0,l.mkdtemp)((0,w.join)((0,u.tmpdir)(),"tower-pty-")),b=(0,w.join)(m,"instructions.md"),await (0,l.writeFile)(b,e.content,"utf-8"))}let R=null,D=null;if(P.baseBranch&&P.project.localPath){let{worktreePath:e,worktreeBranch:a}=await (0,i.createWorktree)(P.project.localPath,t,P.baseBranch);R=e,D=a}let T=R??P.project.localPath,j=P.subPath?(0,w.join)(T,P.subPath):T,S=await a.db.taskExecution.create({data:{taskId:t,agent:v.agentFieldValue,status:"RUNNING",startedAt:new Date,worktreePath:R??null,worktreeBranch:D??null,callbackUrl:f??null}}),U=null;if(P.project.localPath)try{let t,{execFileSync:r}=await e.A(144264);(t=R&&P.baseBranch?r("git",["merge-base",P.baseBranch,"HEAD"],{cwd:R,encoding:"utf-8",timeout:5e3}).trim():r("git",["rev-parse","HEAD"],{cwd:P.project.localPath,encoding:"utf-8",timeout:5e3}).trim())&&(U=t,await a.db.taskExecution.update({where:{id:S.id},data:{forkCommit:t}}))}catch{}let O="",{CONFIG_DEFAULTS:C}=await e.A(75010),F=await (0,d.readConfigValue)("task.systemDirective",C["task.systemDirective"].defaultValue);if(F&&(O+=F),b){let{readFile:t}=await e.A(260815),a=await t(b,"utf-8");O+=(O?"\n\n":"")+a}let _=await (0,d.readConfigValue)("onboarding.username","");if(_&&(O+=(O?"\n":"")+`The user's name is ${_}.`),P.unattended){let e=await (0,d.readConfigValue)("harness.targets",[]),t=(Array.isArray(e)?e:[]).find(e=>e?.active&&e.gateway),a=t?`## 无人值守外推(ask_human / notify_human)
|
|
3
|
+
\`ask_human\` / \`notify_human\` 工具**只在 Tower 内记录 + park**,绝不替你把消息发给人。要让人真正收到,必须你自己按两步做:
|
|
4
|
+
1. **先发**:用下列生效渠道对应的平台 MCP 工具把消息发出去。正文**必须逐字带**关联口令 \`[[tower:task=<taskId>]]\`(漏了人回复就无法归属、任务永久卡死)。
|
|
5
|
+
- 生效渠道:网关 ${t.gateway}${t.downstream?` → 下游 ${t.downstream}`:""}
|
|
6
|
+
- 发到哪个群/人由你在正文说明;若只知道名称(群名/人名)而无平台 id,先用平台 MCP 按名称查出 id 再发。
|
|
7
|
+
2. **再记录**:确认第 1 步**发送成功后**,才调 \`ask_human\`(阻塞、park)或 \`notify_human\`(不阻塞、不 park)让 Tower 留档。
|
|
8
|
+
- 平台发送**失败**时**不要**调 ask_human(否则任务被 park 却没人知道)——重试,或把问题写进 /harness 面板后停下等人。`:"## 无人值守外推\n当前未配置任何发送渠道,你**无法**把消息外推给人(ask_human 会返回 noChannelConfigured)。**不要臆造已通知**——把问题记进 Tower(/harness 面板可见),并明确告知需去「设置 → 通知 → 无人值守发送渠道」配置一条并设为生效。";O+=(O?"\n\n":"")+a}let B=I.buildSpawnArgs({taskId:t,prompt:y,cwd:j,extraArgs:[...O?["--append-system-prompt",O]:[],...N?["--model",N]:[]],envOverrides:I.buildEnvOverrides({taskId:t,taskTitle:P.title,apiUrl:`http://localhost:${process.env.PORT||"3000"}`,callbackUrl:f??void 0})});return P.unattended&&(B.env.TOWER_UNATTENDED="1"),(0,n.createSession)(t,B.command,B.args,j,()=>{},async r=>{await E(t,r);let i=await a.db.taskExecution.findUnique({where:{id:S.id}});if(i?.status!=="RUNNING")return;let{getSession:n}=await e.A(217260),s=n(t),d=s?.getBuffer()??"";await a.db.taskExecution.update({where:{id:S.id},data:{status:0===r?"COMPLETED":"FAILED",endedAt:new Date}}).catch(e=>{k.error("Failed to update execution status",e)});let o=R||P.project.localPath,{captureExecutionSummary:c}=await e.A(507603);await c(S.id,t,r,d,o,U);let{dispatchTaskCompletionEvent:u}=await e.A(136565);if(await u({taskId:t,taskTitle:P.title,status:0===r?"COMPLETED":"FAILED",executionId:S.id,workspaceId:P.project.workspaceId}),0===r&&await a.db.task.update({where:{id:t},data:{status:"IN_REVIEW"}}).catch(e=>{k.error("Failed to update task status",e)}),m&&await (0,l.rm)(m,{recursive:!0,force:!0}).catch(()=>{}),s&&!s.disconnectTimer){let{destroySession:a}=await e.A(217260),r=setTimeout(()=>a(t),3e5);r.unref?.(),s.disconnectTimer=r}},B.env,void 0,1e3*A),{executionId:S.id,worktreePath:R??T??null}}async function R(e,t,a,r,i){try{let n=await x(e,t,a,r,i);return{ok:!0,...n}}catch(t){return k.error("startPtyExecution failed",{taskId:e,error:t instanceof Error?t.stack??t.message:String(t)}),{ok:!1,error:t instanceof Error&&t.message?t.message:String(t)}}}async function D(){return(await a.db.taskExecution.findMany({where:{status:"RUNNING"},orderBy:{startedAt:"asc"},include:{task:{include:{project:{include:{workspace:!0}}}}}})).map(e=>({executionId:e.id,taskId:e.taskId,taskTitle:e.task.title,projectId:e.task.project.id,projectName:e.task.project.name,projectAlias:e.task.project.alias,projectLocalPath:e.task.project.localPath,workspaceId:e.task.project.workspace.id,workspaceName:e.task.project.workspace.name,worktreePath:e.worktreePath,subPath:e.task.subPath??null,startedAt:e.startedAt?.toISOString()??null}))}(0,f.ensureServerEntryExports)([b,m,P,g,A,I,v,N,y,x,R,D]),(0,t.registerServerReference)(b,"602ead6626e7eefac24670b57b652c9b89f7fe7728",null),(0,t.registerServerReference)(m,"40071bf428e8dcb0fa3849fc49ffa18d6f403df3c2",null),(0,t.registerServerReference)(P,"7857e0761ae324106f4d453fd1b9b2ea1ba1d19f57",null),(0,t.registerServerReference)(g,"607406da24c2c258cf21c458a4ea4652cda13a2a04",null),(0,t.registerServerReference)(A,"4062d13cdbe45c1cfb8386e810495e72befcfbec91",null),(0,t.registerServerReference)(I,"403c35c2389d293cdefc8a0b3788a1215ad7f93c68",null),(0,t.registerServerReference)(v,"60efa135082b65911a52ff807ef8c96f9c3585f6a1",null),(0,t.registerServerReference)(N,"4044d6c5c594edca1f2190b98b13690c7930ebe6fb",null),(0,t.registerServerReference)(y,"40ba0a6745d6e548891af11bc32b23219c32fd3e24",null),(0,t.registerServerReference)(x,"7c3d6cd7e5e687f4f77510e3a770d804bec50e4336",null),(0,t.registerServerReference)(R,"7c636a9922893aeb4dcf2cea81b0a4c429bef4146e",null),(0,t.registerServerReference)(D,"005c435931ab272868e674f977a37a5d3a28e828aa",null),e.s(["continueOrStartTaskExecution",0,y,"startPtyExecution",0,x,"stopPtyExecution",0,A])}];
|
|
3
9
|
|
|
4
10
|
//# sourceMappingURL=src_actions_agent-actions_ts_10q9r5b._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[769310,e=>{"use strict";var t=e.i(902157),i=e.i(874533),n=e.i(750227);function r(e=process.platform){return"win32"===e}function s(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let i=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(i)?`"${i}"`:i}let a=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function o(e,t={}){let i=t.cwd??process.cwd(),s=t.env??process.env,a=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=n.default.isAbsolute(e)?e:n.default.resolve(i,e);return await m(t,a)?t:null}let l=s.PATH??s.Path??"",c=r(a)?";":":",d=l.split(c).filter(Boolean),u=r(a)?(s.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],p=r(a)&&n.default.extname(e).length>0;for(let t of d)for(let i of r(a)?p?[n.default.join(t,e)]:u.map(i=>n.default.join(t,`${e}${i}`)):[n.default.join(t,e)])if(await m(i,a))return i;return null}let l=e=>(0,i.execSync)(e,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]});function c(e,t=process.platform,s=l){if(n.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!r(t)){try{let t=(0,i.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t)return t}catch{}return e}try{let t=s(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),i=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(i)return i;if(t.length>0)return t[0]}catch{}return e}async function d(e,t,i={}){let n=i.env??process.env,r=i.platform??process.platform;return u(await o(e,i)??e,t,n,r)}function u(e,t,i,a){if(!r(a))return{command:e,args:t};let o=n.default.extname(e).toLowerCase();return".cmd"===o||".bat"===o||".com"===o?{command:i.ComSpec||"cmd.exe",args:["/d","/s","/c",[s(e),...t.map(s)].join(" ")]}:{command:e,args:t}}async function m(e,i=process.platform){try{return await t.promises.access(e,r(i)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function p(e=process.platform){return r(e)?h():f()}async function f(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),i=[],r=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await m(e))continue;let s=n.default.basename(e),a=r.get(s)??0;r.set(s,a+1),a>0&&(s=`${s} (${a+1})`),i.push({name:s,path:e})}return i}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await m(t)&&e.push({name:n.default.basename(t),path:t});return e}}async function h(){let e=[],t=[],i=await o("git",{platform:"win32"});if(i){let e=n.default.resolve(n.default.dirname(i),"..","..");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 r=process.env.USERPROFILE??"";for(let i of(r&&t.push(n.default.join(r,"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 m(i,"win32")){e.push({name:"Git Bash",path:i});break}let s=await o("pwsh",{platform:"win32"});s&&e.push({name:"PowerShell",path:s});let a=process.env.windir??"C:\\WINDOWS",l=n.default.join(a,"System32","WindowsPowerShell","v1.0","powershell.exe");await m(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??n.default.join(a,"System32","cmd.exe");return await m(c,"win32")&&e.push({name:"Command Prompt",path:c}),e}let w=[{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 b(e=process.platform){if("darwin"===e){let t=[];for(let i of w){let n=await m(`/Applications/${i.bundleName}.app`,e);t.push({name:i.name,value:i.bundleName,installed:n})}return t}if(r(e)){let t=[],i=await o("wt",{platform:e});return i&&t.push({name:"Windows Terminal",value:i,installed:!0}),t}return[]}let _=[{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"}],S={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 T(e,t={}){let i=t.platform??process.platform,n=t.env??process.env,s=await o(e,t);if(s)return s;for(let t of S[e]?.[i]??[]){let e=r(i)?function(e,t){return e.replace(/%([^%]+)%/g,(e,i)=>{let n=t[i];if(void 0!==n)return n;let r=Object.keys(t).find(e=>e.toLowerCase()===i.toLowerCase());return r?t[r]??e:e})}(t,n):t;if(await m(e,i))return e}return null}async function y(e=process.platform){let t=[];for(let i of _){let n=!!await T(i.command,{platform:e});t.push({name:i.name,command:i.command,installed:n})}return t}e.s(["detectEditors",0,y,"detectShells",0,p,"detectTerminalApps",0,b,"ensurePathInEnv",0,function(e,t=process.platform){let i=r(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[i]:function(e=process.platform){return r(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,r,"resolveCommandPath",0,o,"resolveCommandPathSync",0,c,"resolveSdkExecutable",0,function(e,i=process.platform,s=e=>(0,t.readFileSync)(e,"utf-8"),a=e=>(0,t.existsSync)(e)){if(!r(i))return e;let o=n.default.extname(e).toLowerCase();if(".cmd"!==o&&".bat"!==o)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=s(e);c=t.replace(/\s+/g," ").slice(0,400);let i=t.match(/"([^"]*\.(?:c?js|mjs))"/i);if(i){let e=d(i[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"),m=n.default.win32.basename(e,n.default.win32.extname(e)),p=[n.default.win32.join(u,"cli.js"),n.default.win32.join(u,"bin",`${m}.exe`)];for(let e of p)if(a(e))return e;return console.error(`[resolveSdkExecutable] could not convert ${e} → guesses=${JSON.stringify(p)} shim="${c}"`),e},"resolveSpawnTarget",0,d,"resolveSpawnTargetSync",0,function(e,t,i=process.platform,n){return u(c(e,i,n),t,process.env,i)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of a)delete t[e];return t}])},519895,e=>{"use strict";var t=e.i(980738),i=e.i(769310);class n{taskId;_pty;killed=!1;disconnectTimer=null;_buffer="";static BUFFER_MAX=51200;_onData;_exitListeners=[];_idleTimer=null;_idleThresholdMs;_onIdle;_idleFired=!1;constructor(e,r,s,a,o,l,c,d,u){this.taskId=e,this._onData=o,this._onIdle=d??null,this._idleThresholdMs=Math.max(u??18e4,18e4);const m={...(0,i.stripClaudeNestingEnv)((0,i.ensurePathInEnv)(process.env)),TERM:"xterm-color",...c};try{this._pty=t.spawn(r,s,{name:"xterm-color",cols:80,rows:24,cwd:a,env:m})}catch(e){throw console.error(`[pty] spawn failed: command="${r}", cwd="${a}", PATH="${m.PATH?.slice(0,200)}"`),e}this._pty.onData(e=>{this._buffer+=e,this._buffer.length>n.BUFFER_MAX&&(this._buffer=this._buffer.slice(this._buffer.length-n.BUFFER_MAX)),this._resetIdleTimer(),this._onData(e)}),this._pty.onExit(({exitCode:e,signal:t})=>{for(let i of(this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),l(e,t),this._exitListeners))i(e)}),this._resetIdleTimer()}_resetIdleTimer(){this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),null===this._onIdle||this.killed||this._idleFired||(this._idleTimer=setTimeout(()=>{this._idleFired=!0,this._onIdle?.()},this._idleThresholdMs))}setDataListener(e){this._onData=e}setExitListener(e){this._exitListeners=[e]}write(e){this.killed||(this._resetIdleTimer(),this._pty.write(e))}resize(e,t){this.killed||this._pty.resize(e,t)}getBuffer(){return this._buffer}get isIdle(){return this._idleFired}get pid(){return this._pty.pid}kill(e){if(!this.killed){this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);try{this._pty.kill(e)}catch{}}}forceKill(){try{this._pty.kill("SIGKILL")}catch{}this.killed=!0}killTree(e=3e3){if(this.killed)return;this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);let t=this._pty.pid;try{process.kill(-t,"SIGTERM")}catch{try{this._pty.kill()}catch{}return}let i=setTimeout(()=>{try{process.kill(-t,"SIGKILL")}catch{}},e);i.unref?.()}}e.s(["PtySession",0,n])},83721,e=>{"use strict";var t=e.i(519895),i=e.i(769310);e.i(874533);var n=e.i(912714),r=e.i(660526),s=e.i(750227);let a=(0,s.join)((0,r.tmpdir)(),"tower-signals");function o(e){return(0,s.join)(a,`pid-${e}`)}async function l(e,t){try{await (0,n.mkdir)(a,{recursive:!0,mode:448}),await (0,n.writeFile)(o(e),String(t),{mode:384})}catch{}}async function c(e){try{await (0,n.unlink)(o(e))}catch{}}let d=globalThis;d.__ptySessions||(d.__ptySessions=new Map);let u=d.__ptySessions;function m(e){let t=u.get(e);if(t)return u.delete(e),t.disconnectTimer&&(clearTimeout(t.disconnectTimer),t.disconnectTimer=null),t.killTree(),t}function p(e){m(e)&&c(e)}function f(){for(let e of u.keys())p(e)}let h=globalThis;"phase-production-build"===process.env.NEXT_PHASE||h.__ptySignalHandlersRegistered||(h.__ptySignalHandlersRegistered=!0,process.once("SIGTERM",()=>{console.error("[session-store] SIGTERM received — cleaning up PTY sessions"),f()}),process.once("SIGINT",()=>{console.error("[session-store] SIGINT received — cleaning up PTY sessions"),f()})),e.s(["createSession",0,function(e,n,r,s,a,o,c,d,p){m(e);let{command:f,args:h}=(0,i.resolveSpawnTargetSync)(n,r),w=new t.PtySession(e,f,h,s,a,o,c,d,p);return u.set(e,w),l(e,w.pid),w},"destroySession",0,p,"getSession",0,function(e){return u.get(e)}],83721)}];
|
|
1
|
+
module.exports=[769310,e=>{"use strict";var t=e.i(902157),i=e.i(874533),n=e.i(750227);function r(e=process.platform){return"win32"===e}function s(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let i=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(i)?`"${i}"`:i}let a=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function o(e,t={}){let i=t.cwd??process.cwd(),s=t.env??process.env,a=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=n.default.isAbsolute(e)?e:n.default.resolve(i,e);return await m(t,a)?t:null}let l=s.PATH??s.Path??"",c=r(a)?";":":",d=l.split(c).filter(Boolean),u=r(a)?(s.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],p=r(a)&&n.default.extname(e).length>0;for(let t of d)for(let i of r(a)?p?[n.default.join(t,e)]:u.map(i=>n.default.join(t,`${e}${i}`)):[n.default.join(t,e)])if(await m(i,a))return i;return null}let l=e=>(0,i.execSync)(e,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]});function c(e,t=process.platform,s=l){if(n.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!r(t)){try{let t=(0,i.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t)return t}catch{}return e}try{let t=s(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),i=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(i)return i;if(t.length>0)return t[0]}catch{}return e}async function d(e,t,i={}){let n=i.env??process.env,r=i.platform??process.platform;return u(await o(e,i)??e,t,n,r)}function u(e,t,i,a){if(!r(a))return{command:e,args:t};let o=n.default.extname(e).toLowerCase();return".cmd"===o||".bat"===o||".com"===o?{command:i.ComSpec||"cmd.exe",args:["/d","/s","/c",[s(e),...t.map(s)].join(" ")]}:{command:e,args:t}}async function m(e,i=process.platform){try{return await t.promises.access(e,r(i)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function p(e=process.platform){return r(e)?h():f()}async function f(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),i=[],r=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await m(e))continue;let s=n.default.basename(e),a=r.get(s)??0;r.set(s,a+1),a>0&&(s=`${s} (${a+1})`),i.push({name:s,path:e})}return i}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await m(t)&&e.push({name:n.default.basename(t),path:t});return e}}async function h(){let e=[],t=[],i=await o("git",{platform:"win32"});if(i){let e=n.default.resolve(n.default.dirname(i),"..","..");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 r=process.env.USERPROFILE??"";for(let i of(r&&t.push(n.default.join(r,"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 m(i,"win32")){e.push({name:"Git Bash",path:i});break}let s=await o("pwsh",{platform:"win32"});s&&e.push({name:"PowerShell",path:s});let a=process.env.windir??"C:\\WINDOWS",l=n.default.join(a,"System32","WindowsPowerShell","v1.0","powershell.exe");await m(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??n.default.join(a,"System32","cmd.exe");return await m(c,"win32")&&e.push({name:"Command Prompt",path:c}),e}let w=[{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 b(e=process.platform){if("darwin"===e){let t=[];for(let i of w){let n=await m(`/Applications/${i.bundleName}.app`,e);t.push({name:i.name,value:i.bundleName,installed:n})}return t}if(r(e)){let t=[],i=await o("wt",{platform:e});return i&&t.push({name:"Windows Terminal",value:i,installed:!0}),t}return[]}let _=[{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"}],S={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 T(e,t={}){let i=t.platform??process.platform,n=t.env??process.env,s=await o(e,t);if(s)return s;for(let t of S[e]?.[i]??[]){let e=r(i)?function(e,t){return e.replace(/%([^%]+)%/g,(e,i)=>{let n=t[i];if(void 0!==n)return n;let r=Object.keys(t).find(e=>e.toLowerCase()===i.toLowerCase());return r?t[r]??e:e})}(t,n):t;if(await m(e,i))return e}return null}async function y(e=process.platform){let t=[];for(let i of _){let n=!!await T(i.command,{platform:e});t.push({name:i.name,command:i.command,installed:n})}return t}e.s(["detectEditors",0,y,"detectShells",0,p,"detectTerminalApps",0,b,"ensurePathInEnv",0,function(e,t=process.platform){let i=r(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[i]:function(e=process.platform){return r(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,r,"resolveCommandPath",0,o,"resolveCommandPathSync",0,c,"resolveSdkExecutable",0,function(e,i=process.platform,s=e=>(0,t.readFileSync)(e,"utf-8"),a=e=>(0,t.existsSync)(e)){if(!r(i))return e;let o=n.default.extname(e).toLowerCase();if(".cmd"!==o&&".bat"!==o)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=s(e);c=t.replace(/\s+/g," ").slice(0,400);let i=t.match(/"([^"]*\.(?:c?js|mjs))"/i);if(i){let e=d(i[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"),m=n.default.win32.basename(e,n.default.win32.extname(e)),p=[n.default.win32.join(u,"cli.js"),n.default.win32.join(u,"bin",`${m}.exe`)];for(let e of p)if(a(e))return e;return console.error(`[resolveSdkExecutable] could not convert ${e} → guesses=${JSON.stringify(p)} shim="${c}"`),e},"resolveSpawnTarget",0,d,"resolveSpawnTargetSync",0,function(e,t,i=process.platform,n){return u(c(e,i,n),t,process.env,i)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of a)delete t[e];return t}])},519895,e=>{"use strict";var t=e.i(980738),i=e.i(769310);class n{taskId;_pty;killed=!1;disconnectTimer=null;_buffer="";static BUFFER_MAX=51200;_onData;_exitListeners=[];_idleTimer=null;_idleThresholdMs;_onIdle;_idleFired=!1;constructor(e,r,s,a,o,l,c,d,u){this.taskId=e,this._onData=o,this._onIdle=d??null,this._idleThresholdMs=Math.max(u??18e4,18e4);const m={...(0,i.stripClaudeNestingEnv)((0,i.ensurePathInEnv)(process.env)),TERM:"xterm-color",...c};try{this._pty=t.spawn(r,s,{name:"xterm-color",cols:80,rows:24,cwd:a,env:m})}catch(e){throw console.error(`[pty] spawn failed: command="${r}", cwd="${a}", PATH="${m.PATH?.slice(0,200)}"`),e}this._pty.onData(e=>{this._buffer+=e,this._buffer.length>n.BUFFER_MAX&&(this._buffer=this._buffer.slice(this._buffer.length-n.BUFFER_MAX)),this._resetIdleTimer(),this._onData(e)}),this._pty.onExit(({exitCode:e,signal:t})=>{for(let i of(this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),l(e,t),this._exitListeners))i(e)}),this._resetIdleTimer()}_resetIdleTimer(){this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),null===this._onIdle||this.killed||this._idleFired||(this._idleTimer=setTimeout(()=>{this._idleFired=!0,this._onIdle?.()},this._idleThresholdMs))}setDataListener(e){this._onData=e}setExitListener(e){this._exitListeners=[e]}write(e){this.killed||(this._resetIdleTimer(),this._pty.write(e))}resize(e,t){this.killed||this._pty.resize(e,t)}getBuffer(){return this._buffer}get isIdle(){return this._idleFired}get pid(){return this._pty.pid}kill(e){if(!this.killed){this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);try{this._pty.kill(e)}catch{}}}forceKill(){try{this._pty.kill("SIGKILL")}catch{}this.killed=!0}killTree(e=3e3){if(this.killed)return;this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);let t=this._pty.pid;try{process.kill(-t,"SIGTERM")}catch{try{this._pty.kill()}catch{}return}let i=setTimeout(()=>{try{process.kill(-t,"SIGKILL")}catch{}},e);i.unref?.()}}e.s(["PtySession",0,n])},83721,e=>{"use strict";var t=e.i(519895),i=e.i(769310);e.i(874533);var n=e.i(912714),r=e.i(750227);let s=(0,e.i(192520).getSignalDir)();function a(e){return(0,r.join)(s,`pid-${e}`)}async function o(e,t){try{await (0,n.mkdir)(s,{recursive:!0,mode:448}),await (0,n.writeFile)(a(e),String(t),{mode:384})}catch{}}async function l(e){try{await (0,n.unlink)(a(e))}catch{}}let c=globalThis;c.__ptySessions||(c.__ptySessions=new Map);let d=c.__ptySessions;function u(e){let t=d.get(e);if(t)return d.delete(e),t.disconnectTimer&&(clearTimeout(t.disconnectTimer),t.disconnectTimer=null),t.killTree(),t}function m(e){u(e)&&l(e)}function p(){for(let e of d.keys())m(e)}let f=globalThis;"phase-production-build"===process.env.NEXT_PHASE||f.__ptySignalHandlersRegistered||(f.__ptySignalHandlersRegistered=!0,process.once("SIGTERM",()=>{console.error("[session-store] SIGTERM received — cleaning up PTY sessions"),p()}),process.once("SIGINT",()=>{console.error("[session-store] SIGINT received — cleaning up PTY sessions"),p()})),e.s(["createSession",0,function(e,n,r,s,a,l,c,m,p){u(e);let{command:f,args:h}=(0,i.resolveSpawnTargetSync)(n,r),w=new t.PtySession(e,f,h,s,a,l,c,m,p);return d.set(e,w),o(e,w.pid),w},"destroySession",0,m,"getSession",0,function(e){return d.get(e)}],83721)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_lib_02llcit._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[769310,e=>{"use strict";var t=e.i(902157),n=e.i(874533),r=e.i(750227);function o(e=process.platform){return"win32"===e}function s(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let n=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(n)?`"${n}"`:n}let i=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function a(e,t={}){let n=t.cwd??process.cwd(),s=t.env??process.env,i=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=r.default.isAbsolute(e)?e:r.default.resolve(n,e);return await u(t,i)?t:null}let l=s.PATH??s.Path??"",c=o(i)?";":":",m=l.split(c).filter(Boolean),d=o(i)?(s.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],p=o(i)&&r.default.extname(e).length>0;for(let t of m)for(let n of o(i)?p?[r.default.join(t,e)]:d.map(n=>r.default.join(t,`${e}${n}`)):[r.default.join(t,e)])if(await u(n,i))return n;return null}let l=e=>(0,n.execSync)(e,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]});function c(e,t=process.platform,s=l){if(r.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!o(t)){try{let t=(0,n.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t)return t}catch{}return e}try{let t=s(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),n=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(n)return n;if(t.length>0)return t[0]}catch{}return e}async function m(e,t,n={}){let r=n.env??process.env,o=n.platform??process.platform;return d(await a(e,n)??e,t,r,o)}function d(e,t,n,i){if(!o(i))return{command:e,args:t};let a=r.default.extname(e).toLowerCase();return".cmd"===a||".bat"===a||".com"===a?{command:n.ComSpec||"cmd.exe",args:["/d","/s","/c",[s(e),...t.map(s)].join(" ")]}:{command:e,args:t}}async function u(e,n=process.platform){try{return await t.promises.access(e,o(n)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function p(e=process.platform){return o(e)?f():h()}async function h(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),n=[],o=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await u(e))continue;let s=r.default.basename(e),i=o.get(s)??0;o.set(s,i+1),i>0&&(s=`${s} (${i+1})`),n.push({name:s,path:e})}return n}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await u(t)&&e.push({name:r.default.basename(t),path:t});return e}}async function f(){let e=[],t=[],n=await a("git",{platform:"win32"});if(n){let e=r.default.resolve(r.default.dirname(n),"..","..");t.push(r.default.join(e,"bin","bash.exe"),r.default.join(e,"usr","bin","bash.exe"))}for(let e of[process.env.ProgramW6432,process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData?r.default.join(process.env.LocalAppData,"Programs"):null].filter(Boolean))t.push(r.default.join(e,"Git","bin","bash.exe"),r.default.join(e,"Git","usr","bin","bash.exe"));let o=process.env.USERPROFILE??"";for(let n of(o&&t.push(r.default.join(o,"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 u(n,"win32")){e.push({name:"Git Bash",path:n});break}let s=await a("pwsh",{platform:"win32"});s&&e.push({name:"PowerShell",path:s});let i=process.env.windir??"C:\\WINDOWS",l=r.default.join(i,"System32","WindowsPowerShell","v1.0","powershell.exe");await u(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??r.default.join(i,"System32","cmd.exe");return await u(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 n of g){let r=await u(`/Applications/${n.bundleName}.app`,e);t.push({name:n.name,value:n.bundleName,installed:r})}return t}if(o(e)){let t=[],n=await a("wt",{platform:e});return n&&t.push({name:"Windows Terminal",value:n,installed:!0}),t}return[]}let S=[{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"}],y={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 n=t.platform??process.platform,r=t.env??process.env,s=await a(e,t);if(s)return s;for(let t of y[e]?.[n]??[]){let e=o(n)?function(e,t){return e.replace(/%([^%]+)%/g,(e,n)=>{let r=t[n];if(void 0!==r)return r;let o=Object.keys(t).find(e=>e.toLowerCase()===n.toLowerCase());return o?t[o]??e:e})}(t,r):t;if(await u(e,n))return e}return null}async function C(e=process.platform){let t=[];for(let n of S){let r=!!await k(n.command,{platform:e});t.push({name:n.name,command:n.command,installed:r})}return t}e.s(["detectEditors",0,C,"detectShells",0,p,"detectTerminalApps",0,w,"ensurePathInEnv",0,function(e,t=process.platform){let n=o(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[n]:function(e=process.platform){return o(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,o,"resolveCommandPath",0,a,"resolveCommandPathSync",0,c,"resolveSdkExecutable",0,function(e,n=process.platform,s=e=>(0,t.readFileSync)(e,"utf-8"),i=e=>(0,t.existsSync)(e)){if(!o(n))return e;let a=r.default.extname(e).toLowerCase();if(".cmd"!==a&&".bat"!==a)return e;let l=r.default.win32.dirname(e),c="",m=e=>{let t=e.replace(/%~?dp0%/gi,l).replace(/\//g,"\\");return r.default.win32.isAbsolute(t)?r.default.win32.normalize(t):r.default.win32.resolve(l,t)};try{let t=s(e);c=t.replace(/\s+/g," ").slice(0,400);let n=t.match(/"([^"]*\.(?:c?js|mjs))"/i);if(n){let e=m(n[1]);if(i(e))return e;console.error(`[resolveSdkExecutable] parsed cli="${e}" but it doesn't exist`)}for(let e of t.matchAll(/"([^"]*\.exe)"/gi)){let t=m(e[1]);if("node.exe"!==r.default.win32.basename(t).toLowerCase()&&i(t))return t}}catch(e){console.error(`[resolveSdkExecutable] shim read failed: ${e instanceof Error?e.message:e}`)}let d=r.default.win32.join(l,"node_modules","@anthropic-ai","claude-code"),u=r.default.win32.basename(e,r.default.win32.extname(e)),p=[r.default.win32.join(d,"cli.js"),r.default.win32.join(d,"bin",`${u}.exe`)];for(let e of p)if(i(e))return e;return console.error(`[resolveSdkExecutable] could not convert ${e} → guesses=${JSON.stringify(p)} shim="${c}"`),e},"resolveSpawnTarget",0,m,"resolveSpawnTargetSync",0,function(e,t,n=process.platform,r){return d(c(e,n,r),t,process.env,n)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of i)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),n=e.i(660526),r=e.i(750227),o=e.i(769310),s=e.i(53674);let i=["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 n={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:n}}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??{},n=(0,s.getPackageRoot)().replace(/\\/g,"/"),o=r.join(n,"scripts","session-start-hook.js").replace(/\\/g,"/"),i=r.join(n,"scripts","post-tool-hook.js").replace(/\\/g,"/"),a=r.join(n,"scripts","stop-hook.js").replace(/\\/g,"/"),l=!1;return l=this.upsertHook(t,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${o}"`,timeout:5,type:"command"}]})||l,l=this.upsertHook(t,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${i}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||l,(l=this.upsertHook(t,"Stop","stop-hook.js",{hooks:[{command:`node "${a}"`,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??{},n=(0,s.getPackageRoot)().replace(/\\/g,"/"),o=!1;for(let[e,s]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let i=this.getHookArray(t,e),a=i.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(s)));if(a<0)continue;let l=r.join(n,"scripts",s).replace(/\\/g,"/"),c=`node "${l}"`,m=i[a]?.hooks?.[0];m&&m.command!==c&&(m.command=c,t[e]=i,o=!0)}o&&(e.hooks=t,this.writeSettings(e))}catch{}}upsertHook(e,t,n,r){let o=this.getHookArray(e,t),s=r?.hooks?.[0]?.command,i=o.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(n)));if(i>=0){if(o[i]?.hooks?.[0]?.command===s)return!1;o.splice(i,1)}return o.push(r),e[t]=o,!0}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},n=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let r=this.getHookArray(t,e);t[e]=r.filter(e=>!e.hooks?.some(e=>n.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 n=t.scope??"user",r={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(r.env=e.env);let o=this.resolveCommand(),s=["mcp","add-json","-s",n,e.name,JSON.stringify(r)];try{return await this.runCli(o,["mcp","remove","-s",n,e.name],t.cwd).catch(()=>{}),await this.runCli(o,s,t.cwd),{ok:!0,method:"cli",detail:`${o} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let n=t.scope??"user",r=this.resolveCommand(),o=["mcp","remove","-s",n,e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let n=this.resolveCommand();try{return await this.runCli(n,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,n){let s=r.join(this.getConfigDir(),"skills",e);try{if(!t.existsSync(n))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${n}`};t.mkdirSync(r.dirname(s),{recursive:!0});let e=await t.promises.lstat(s).catch(()=>null);if(e)if(!(e.isSymbolicLink()||(0,o.isWindows)()&&e.isDirectory()))return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else try{let e=await t.promises.readlink(s);if(r.resolve(e)===r.resolve(n))return{ok:!0,method:"symlink",detail:`${s} → ${n} (already)`};await t.promises.unlink(s)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`}}let i=(0,o.isWindows)()?"junction":"dir";return await t.promises.symlink(n,s,i),{ok:!0,method:"symlink",detail:`${s} → ${n}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let n=r.join(this.getConfigDir(),"skills",e);try{let e=await t.promises.lstat(n).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${n} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:n,error:`Refusing to remove non-symlink at ${n}`};return await t.promises.unlink(n),{ok:!0,method:"symlink",detail:n}}catch(e){return{ok:!1,method:"symlink",detail:n,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,n){let o=r.join(this.getConfigDir(),"skills",e);try{if(!(await t.promises.lstat(o)).isSymbolicLink())return!1;if(!n)return!0;let e=await t.promises.readlink(o),s=r.isAbsolute(e)?e:r.resolve(r.dirname(o),e);return r.resolve(s)===r.resolve(n)}catch{return!1}}async runCli(t,n,r,o=1e4){let{execFile:s}=await e.A(482848),{promisify:i}=await e.A(268548),a=i(s),{stdout:l}=await a(t,n,{cwd:r,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:n}=await e.A(534777),{resolveSpawnTarget:r}=await e.A(200628),o=n(t),s=await r(this.resolveCommand(),["--version"]),{stdout:i}=await o(s.command,s.args,{timeout:5e3});return i.trim()||null}catch{return null}}async getModels(){return i}getConfigDir(){return r.join(n.homedir(),".claude")}getSettingsPath(){return r.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return r.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,o.isWindows)()){let e=(0,o.resolveCommandPathSync)("claude-code");if("claude-code"!==e)return e}return(0,o.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(t.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let n=this.getConfigDir();t.existsSync(n)||t.mkdirSync(n,{recursive:!0}),t.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let n=e[t];return Array.isArray(n)?n:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}])}];
|
|
1
|
+
module.exports=[769310,e=>{"use strict";var t=e.i(902157),n=e.i(874533),r=e.i(750227);function o(e=process.platform){return"win32"===e}function s(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let n=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(n)?`"${n}"`:n}let i=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function a(e,t={}){let n=t.cwd??process.cwd(),s=t.env??process.env,i=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=r.default.isAbsolute(e)?e:r.default.resolve(n,e);return await u(t,i)?t:null}let l=s.PATH??s.Path??"",c=o(i)?";":":",m=l.split(c).filter(Boolean),d=o(i)?(s.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],p=o(i)&&r.default.extname(e).length>0;for(let t of m)for(let n of o(i)?p?[r.default.join(t,e)]:d.map(n=>r.default.join(t,`${e}${n}`)):[r.default.join(t,e)])if(await u(n,i))return n;return null}let l=e=>(0,n.execSync)(e,{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]});function c(e,t=process.platform,s=l){if(r.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!o(t)){try{let t=(0,n.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(t)return t}catch{}return e}try{let t=s(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),n=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(n)return n;if(t.length>0)return t[0]}catch{}return e}async function m(e,t,n={}){let r=n.env??process.env,o=n.platform??process.platform;return d(await a(e,n)??e,t,r,o)}function d(e,t,n,i){if(!o(i))return{command:e,args:t};let a=r.default.extname(e).toLowerCase();return".cmd"===a||".bat"===a||".com"===a?{command:n.ComSpec||"cmd.exe",args:["/d","/s","/c",[s(e),...t.map(s)].join(" ")]}:{command:e,args:t}}async function u(e,n=process.platform){try{return await t.promises.access(e,o(n)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function p(e=process.platform){return o(e)?f():h()}async function h(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),n=[],o=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await u(e))continue;let s=r.default.basename(e),i=o.get(s)??0;o.set(s,i+1),i>0&&(s=`${s} (${i+1})`),n.push({name:s,path:e})}return n}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await u(t)&&e.push({name:r.default.basename(t),path:t});return e}}async function f(){let e=[],t=[],n=await a("git",{platform:"win32"});if(n){let e=r.default.resolve(r.default.dirname(n),"..","..");t.push(r.default.join(e,"bin","bash.exe"),r.default.join(e,"usr","bin","bash.exe"))}for(let e of[process.env.ProgramW6432,process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData?r.default.join(process.env.LocalAppData,"Programs"):null].filter(Boolean))t.push(r.default.join(e,"Git","bin","bash.exe"),r.default.join(e,"Git","usr","bin","bash.exe"));let o=process.env.USERPROFILE??"";for(let n of(o&&t.push(r.default.join(o,"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 u(n,"win32")){e.push({name:"Git Bash",path:n});break}let s=await a("pwsh",{platform:"win32"});s&&e.push({name:"PowerShell",path:s});let i=process.env.windir??"C:\\WINDOWS",l=r.default.join(i,"System32","WindowsPowerShell","v1.0","powershell.exe");await u(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??r.default.join(i,"System32","cmd.exe");return await u(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 n of g){let r=await u(`/Applications/${n.bundleName}.app`,e);t.push({name:n.name,value:n.bundleName,installed:r})}return t}if(o(e)){let t=[],n=await a("wt",{platform:e});return n&&t.push({name:"Windows Terminal",value:n,installed:!0}),t}return[]}let S=[{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"}],k={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 y(e,t={}){let n=t.platform??process.platform,r=t.env??process.env,s=await a(e,t);if(s)return s;for(let t of k[e]?.[n]??[]){let e=o(n)?function(e,t){return e.replace(/%([^%]+)%/g,(e,n)=>{let r=t[n];if(void 0!==r)return r;let o=Object.keys(t).find(e=>e.toLowerCase()===n.toLowerCase());return o?t[o]??e:e})}(t,r):t;if(await u(e,n))return e}return null}async function C(e=process.platform){let t=[];for(let n of S){let r=!!await y(n.command,{platform:e});t.push({name:n.name,command:n.command,installed:r})}return t}e.s(["detectEditors",0,C,"detectShells",0,p,"detectTerminalApps",0,w,"ensurePathInEnv",0,function(e,t=process.platform){let n=o(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[n]:function(e=process.platform){return o(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,o,"resolveCommandPath",0,a,"resolveCommandPathSync",0,c,"resolveSdkExecutable",0,function(e,n=process.platform,s=e=>(0,t.readFileSync)(e,"utf-8"),i=e=>(0,t.existsSync)(e)){if(!o(n))return e;let a=r.default.extname(e).toLowerCase();if(".cmd"!==a&&".bat"!==a)return e;let l=r.default.win32.dirname(e),c="",m=e=>{let t=e.replace(/%~?dp0%/gi,l).replace(/\//g,"\\");return r.default.win32.isAbsolute(t)?r.default.win32.normalize(t):r.default.win32.resolve(l,t)};try{let t=s(e);c=t.replace(/\s+/g," ").slice(0,400);let n=t.match(/"([^"]*\.(?:c?js|mjs))"/i);if(n){let e=m(n[1]);if(i(e))return e;console.error(`[resolveSdkExecutable] parsed cli="${e}" but it doesn't exist`)}for(let e of t.matchAll(/"([^"]*\.exe)"/gi)){let t=m(e[1]);if("node.exe"!==r.default.win32.basename(t).toLowerCase()&&i(t))return t}}catch(e){console.error(`[resolveSdkExecutable] shim read failed: ${e instanceof Error?e.message:e}`)}let d=r.default.win32.join(l,"node_modules","@anthropic-ai","claude-code"),u=r.default.win32.basename(e,r.default.win32.extname(e)),p=[r.default.win32.join(d,"cli.js"),r.default.win32.join(d,"bin",`${u}.exe`)];for(let e of p)if(i(e))return e;return console.error(`[resolveSdkExecutable] could not convert ${e} → guesses=${JSON.stringify(p)} shim="${c}"`),e},"resolveSpawnTarget",0,m,"resolveSpawnTargetSync",0,function(e,t,n=process.platform,r){return d(c(e,n,r),t,process.env,n)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of i)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),n=e.i(660526),r=e.i(750227),o=e.i(769310),s=e.i(53674);let i=["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 n={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:n}}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??{},n=(0,s.getPackageRoot)().replace(/\\/g,"/"),o=r.join(n,"scripts","tower-session-start-hook.js").replace(/\\/g,"/"),i=r.join(n,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),a=r.join(n,"scripts","tower-stop-hook.js").replace(/\\/g,"/"),l=!1;return l=this.upsertHook(t,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${o}"`,timeout:5,type:"command"}]})||l,l=this.upsertHook(t,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${i}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||l,(l=this.upsertHook(t,"Stop","stop-hook.js",{hooks:[{command:`node "${a}"`,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??{},n=(0,s.getPackageRoot)().replace(/\\/g,"/"),o=!1;for(let[e,s,i]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let a=this.getHookArray(t,e),l=a.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(s)));if(l<0)continue;let c=r.join(n,"scripts",i).replace(/\\/g,"/"),m=`node "${c}"`,d=a[l]?.hooks?.[0];d&&d.command!==m&&(d.command=m,t[e]=a,o=!0)}o&&(e.hooks=t,this.writeSettings(e))}catch{}}upsertHook(e,t,n,r){let o=this.getHookArray(e,t),s=r?.hooks?.[0]?.command,i=o.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(n)));if(i>=0){if(o[i]?.hooks?.[0]?.command===s)return!1;o.splice(i,1)}return o.push(r),e[t]=o,!0}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},n=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let r=this.getHookArray(t,e);t[e]=r.filter(e=>!e.hooks?.some(e=>n.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 n=t.scope??"user",r={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(r.env=e.env);let o=this.resolveCommand(),s=["mcp","add-json","-s",n,e.name,JSON.stringify(r)];try{return await this.runCli(o,["mcp","remove","-s",n,e.name],t.cwd).catch(()=>{}),await this.runCli(o,s,t.cwd),{ok:!0,method:"cli",detail:`${o} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${o} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let n=t.scope??"user",r=this.resolveCommand(),o=["mcp","remove","-s",n,e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let n=this.resolveCommand();try{return await this.runCli(n,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,n){let s=r.join(this.getConfigDir(),"skills",e);try{if(!t.existsSync(n))return{ok:!1,method:"symlink",detail:s,error:`Source skill dir does not exist: ${n}`};t.mkdirSync(r.dirname(s),{recursive:!0});let e=await t.promises.lstat(s).catch(()=>null);if(e)if(!(e.isSymbolicLink()||(0,o.isWindows)()&&e.isDirectory()))return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`};else try{let e=await t.promises.readlink(s);if(r.resolve(e)===r.resolve(n))return{ok:!0,method:"symlink",detail:`${s} → ${n} (already)`};await t.promises.unlink(s)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:s,error:`Refusing to overwrite non-symlink at ${s}`}}let i=(0,o.isWindows)()?"junction":"dir";return await t.promises.symlink(n,s,i),{ok:!0,method:"symlink",detail:`${s} → ${n}`}}catch(e){return{ok:!1,method:"symlink",detail:s,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let n=r.join(this.getConfigDir(),"skills",e);try{let e=await t.promises.lstat(n).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${n} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:n,error:`Refusing to remove non-symlink at ${n}`};return await t.promises.unlink(n),{ok:!0,method:"symlink",detail:n}}catch(e){return{ok:!1,method:"symlink",detail:n,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,n){let o=r.join(this.getConfigDir(),"skills",e);try{if(!(await t.promises.lstat(o)).isSymbolicLink())return!1;if(!n)return!0;let e=await t.promises.readlink(o),s=r.isAbsolute(e)?e:r.resolve(r.dirname(o),e);return r.resolve(s)===r.resolve(n)}catch{return!1}}async runCli(t,n,r,o=1e4){let{execFile:s}=await e.A(482848),{promisify:i}=await e.A(268548),a=i(s),{stdout:l}=await a(t,n,{cwd:r,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:n}=await e.A(534777),{resolveSpawnTarget:r}=await e.A(200628),o=n(t),s=await r(this.resolveCommand(),["--version"]),{stdout:i}=await o(s.command,s.args,{timeout:5e3});return i.trim()||null}catch{return null}}async getModels(){return i}getConfigDir(){return r.join(n.homedir(),".claude")}getSettingsPath(){return r.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return r.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,o.isWindows)()){let e=(0,o.resolveCommandPathSync)("claude-code");if("claude-code"!==e)return e}return(0,o.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(t.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let n=this.getConfigDir();t.existsSync(n)||t.mkdirSync(n,{recursive:!0}),t.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let n=e[t];return Array.isArray(n)?n:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_lib_0aowbzy._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[340616,e=>{"use strict";let t=[/\x1b\[[<=>?]?[0-9;]*c/g,/\x1b\[\??[0-9;]*n/g,/\x1b\[\??[0-9;]*\$p/g,/\x1b\[>[0-9;]*q/g,/\x1b\[(?:1[1345689]|2[01])(?:;[0-9]+)*t/g,/\x1b\][0-9;]*;\?(?:\x07|\x1b\\)/g,/\x1bP[$+]q[\s\S]*?\x1b\\/g];e.s(["stripDeviceQueries",0,function(e){if(!e)return e;let r=e;for(let e of t)r=r.replace(e,"");return r}])},423212,e=>{"use strict";e.i(519895);let t=globalThis.__previewSessions??=new Map;function r(e){let r=t.get(e);if(r){try{r.stop()}catch{}t.delete(e)}}function s(){for(let e of[...t.keys()])r(e)}if(globalThis.__previewSignalHandlersRegistered||(process.on("SIGTERM",s),process.on("SIGINT",s),process.on("SIGHUP",s),globalThis.__previewSignalHandlersRegistered=!0),"phase-production-build"!==process.env.NEXT_PHASE&&!globalThis.__previewSweepStarted){globalThis.__previewSweepStarted=!0;let e=new Map,s=setInterval(()=>{let s=Date.now();for(let n of function(e,t,r){let s=[];for(let{key:n,evictable:o}of e){if(!o){t.delete(n);continue}let e=t.get(n);if(void 0===e){t.set(n,r);continue}r-e>=3e5&&s.push(n)}return s}([...t].map(([e,t])=>({key:e,evictable:t.isEvictable})),e,s))r(n),e.delete(n)},6e4);s.unref?.()}e.s(["getPreviewSession",0,function(e){return t.get(e)}],423212)},117490,e=>{"use strict";let t="__preview__";e.s(["PREVIEW_TASK_ID",0,t,"parsePreviewWsParams",0,function(e){if(e.get("taskId")!==t)return null;let r=e.get("role"),s=e.get("previewKey");if("state"!==r&&"terminal"!==r||!s)return null;let n=e.get("connectionId")??Math.random().toString(36).slice(2);return{role:r,previewKey:decodeURIComponent(s),connectionId:n,taskId:e.get("clientTaskId")}}])},721390,e=>e.a(async(t,r)=>{try{var s=e.i(433541),n=e.i(83721),o=e.i(340616),i=e.i(572173),l=e.i(658053),a=e.i(423212),c=e.i(117490),f=t([s]);[s]=f.then?(await f)():f;let g=new Map;function u(){return w.__notificationClients||(w.__notificationClients=new Set),w.__notificationClients}function d(e){u().add(e)}function p(e){u().delete(e)}let w=globalThis;async function S(){var t;if(w.__wss){let e=w.__wss;w.__wss=void 0,await new Promise(t=>{e.close(()=>t()),setTimeout(t,1e3)})}let r=parseInt(process.env.PORT||"3000",10),o=await (0,i.readConfigValue)("terminal.wsPort",r+1),f=o;for(let r=0;r<10&&await (t=f,new Promise(r=>{let{createServer:s}=e.r(504446),n=s();n.once("error",()=>r(!0)),n.once("listening",()=>{n.close(()=>r(!1))}),n.listen(t,"127.0.0.1")}));r++){if(9===r)return void console.error(`[ws-server] No free port found after trying ${o}–${f} — skipping startup`);console.error(`[ws-server] Port ${f} in use, trying ${f+1}...`),f++}let u=new s.WebSocketServer({port:f,host:"127.0.0.1",perMessageDeflate:!1});w.__wss=u,w.__wsPort=f,f!==o?console.error(`[ws-server] WebSocket server listening on port ${f} (preferred ${o} was occupied)`):console.error(`[ws-server] WebSocket server listening on port ${f}`);let S=()=>{u.close(),w.__wss=void 0,w.__wsPort=void 0};process.once("SIGINT",S),process.once("SIGTERM",S),u.on("connection",(e,t)=>{let r,o=t.headers.origin??"";if(!(r=parseInt(process.env.PORT||"3000",10),new Set([`http://localhost:${r}`,`http://127.0.0.1:${r}`])).has(o)){console.error(`[ws-server] Rejected origin: ${o||"(none)"}`),e.close(1008,"Forbidden");return}let i=new URL(t.url??"/",`http://localhost:${f}`),u=i.searchParams.get("taskId");if(!u)return void e.close(1008,"Missing taskId");let S=(0,c.parsePreviewWsParams)(i.searchParams);if(S){let t=(0,a.getPreviewSession)(S.previewKey),r=null,n=null;function w(){if(t){if(n=t.subscribe(S.connectionId,S.taskId??"unknown",r=>{if("state"===S.role)try{e.send(JSON.stringify({type:"state",previewKey:t.key,state:r}))}catch{}},t=>{if("terminal"===S.role)try{e.send(t)}catch{}}),"terminal"===S.role){let r=t.getBuffer();if(r.length>0)try{e.send(r.join("\n")+"\n")}catch{}}if("state"===S.role)try{e.send(JSON.stringify({type:"state",previewKey:t.key,state:t.getState()}))}catch{}}}if(t)w();else{let n=0;r=setInterval(()=>{n+=500,(t=(0,a.getPreviewSession)(S.previewKey))?(clearInterval(r),r=null,w()):(n>=3e4||e.readyState!==s.WebSocket.OPEN)&&(clearInterval(r),r=null,e.readyState===s.WebSocket.OPEN&&e.close(1008,"No preview session created within timeout."))},500)}e.on("close",()=>{r&&(clearInterval(r),r=null),n&&(n(),n=null)}),e.on("error",()=>{r&&(clearInterval(r),r=null),n&&(n(),n=null)});return}if("__notifications__"===u){d(e),e.on("close",()=>p(e)),e.on("error",()=>p(e));return}console.error(`[ws-server] Connection for task ${u}`);let _=(0,n.getSession)(u),b=null;if(_)v(_,e,u),console.error(`[ws-server] Attached to existing session for task ${u}`);else{console.error(`[ws-server] No session for task ${u} — polling...`);let t=0;b=setInterval(()=>{t+=500,(_=(0,n.getSession)(u))?(clearInterval(b),b=null,v(_,e,u),console.error(`[ws-server] Session appeared for task ${u} after ${t}ms`)):(t>=3e4||e.readyState!==s.WebSocket.OPEN)&&(clearInterval(b),b=null,e.readyState===s.WebSocket.OPEN&&e.close(1008,"No PTY session created within timeout."))},500)}e.on("message",e=>{if(!_)return;let t=e.toString();if(t.startsWith("{"))try{let e=JSON.parse(t);if("resize"===e.type&&"number"==typeof e.cols&&"number"==typeof e.rows)return void _.resize(e.cols,e.rows)}catch{}_.write(t)}),e.on("close",()=>{e._batcher?.flush();let t=g.get(u);if(!t?.has(e)||(t.delete(e),console.error(`[ws-server] WS disconnected for task ${u} (${t.size} remaining)`),t.size>0))return;g.delete(u);let r=(0,n.getSession)(u);if(!r)return;if(r.setDataListener(()=>{}),u===l.ASSISTANT_SESSION_KEY){console.error("[ws-server] Assistant session disconnected — destroying immediately"),(0,n.destroySession)(u);return}let s=r.killed?3e5:72e5;r.disconnectTimer=setTimeout(()=>{console.error(`[ws-server] Keepalive expired for task ${u}`),(0,n.destroySession)(u)},s)}),e.on("error",t=>{console.error(`[ws-server] WS error for task ${u}:`,t.message),b&&(clearInterval(b),b=null);let r=g.get(u);if(!r?.has(e)||(r.delete(e),r.size>0))return;g.delete(u);let s=(0,n.getSession)(u);s&&!s.killed&&s.setDataListener(()=>{})})})}function v(e,t,r){var n;let i,l;e.disconnectTimer&&(clearTimeout(e.disconnectTimer),e.disconnectTimer=null);let a=g.get(r);a||(a=new Set,g.set(r,a)),a.add(t);let c=(n=t,i="",l=null,{send:e=>{i+=e,l||(l=setTimeout(()=>{l=null,n.readyState===s.WebSocket.OPEN&&n.bufferedAmount<65536&&n.send(i),i=""},8))},flush:()=>{l&&(clearTimeout(l),l=null),i&&n.readyState===s.WebSocket.OPEN&&n.bufferedAmount<65536&&n.send(i),i=""}});t._batcher=c;let f=a;e.setDataListener(e=>{for(let t of f){let r=t._batcher;r?r.send(e):t.readyState===s.WebSocket.OPEN&&t.send(e)}});let u=e.getBuffer();if(u&&t.readyState===s.WebSocket.OPEN){let e=(0,o.stripDeviceQueries)(u);e.length!==u.length&&console.error(`[ws-server] Stripped ${u.length-e.length} bytes of device-query sequences from replay for task ${r} (prevents phantom PTY input on reconnect)`),t.send(e)}e.setExitListener(e=>{let t=function(e){if(null==e)return 4255;let t=Number(e);if(!Number.isFinite(t))return 4255;let r=4e3+(t>=0&&t<256?0|t:t>>>0&255);return r<1e3||r>4999?4255:r}(e);for(let e of f)e.readyState===s.WebSocket.OPEN&&e.close(t,"session_end")})}e.s(["addNotificationClient",0,d,"broadcastNotification",0,function(e){let t=JSON.stringify(e);for(let e of u())e.readyState===s.WebSocket.OPEN&&e.send(t)},"getActiveWsPort",0,function(){return w.__wsPort??null},"removeNotificationClient",0,p,"startWsServer",0,S]),r()}catch(e){r(e)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_lib_0d~1~wz._.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[682100,e=>{"use strict";var t=e.i(980738),r=e.i(603484);class s{taskId;_pty;killed=!1;disconnectTimer=null;_buffer="";static BUFFER_MAX=51200;_onData;_exitListeners=[];_idleTimer=null;_idleThresholdMs;_onIdle;_idleFired=!1;constructor(e,i,n,o,l,a,c,d,u){this.taskId=e,this._onData=l,this._onIdle=d??null,this._idleThresholdMs=Math.max(u??18e4,18e4);const f={...(0,r.stripClaudeNestingEnv)((0,r.ensurePathInEnv)(process.env)),TERM:"xterm-color",...c};try{this._pty=t.spawn(i,n,{name:"xterm-color",cols:80,rows:24,cwd:o,env:f})}catch(e){throw console.error(`[pty] spawn failed: command="${i}", cwd="${o}", PATH="${f.PATH?.slice(0,200)}"`),e}this._pty.onData(e=>{this._buffer+=e,this._buffer.length>s.BUFFER_MAX&&(this._buffer=this._buffer.slice(this._buffer.length-s.BUFFER_MAX)),this._resetIdleTimer(),this._onData(e)}),this._pty.onExit(({exitCode:e,signal:t})=>{for(let r of(this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),a(e,t),this._exitListeners))r(e)}),this._resetIdleTimer()}_resetIdleTimer(){this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null),null===this._onIdle||this.killed||this._idleFired||(this._idleTimer=setTimeout(()=>{this._idleFired=!0,this._onIdle?.()},this._idleThresholdMs))}setDataListener(e){this._onData=e}setExitListener(e){this._exitListeners=[e]}write(e){this.killed||(this._resetIdleTimer(),this._pty.write(e))}resize(e,t){this.killed||this._pty.resize(e,t)}getBuffer(){return this._buffer}get isIdle(){return this._idleFired}get pid(){return this._pty.pid}kill(e){if(!this.killed){this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);try{this._pty.kill(e)}catch{}}}forceKill(){try{this._pty.kill("SIGKILL")}catch{}this.killed=!0}killTree(e=3e3){if(this.killed)return;this.killed=!0,this._idleTimer&&(clearTimeout(this._idleTimer),this._idleTimer=null);let t=this._pty.pid;try{process.kill(-t,"SIGTERM")}catch{try{this._pty.kill()}catch{}return}let r=setTimeout(()=>{try{process.kill(-t,"SIGKILL")}catch{}},e);r.unref?.()}}e.s(["PtySession",0,s])},370314,e=>{"use strict";e.i(682100),e.i(603484);var t=e.i(979755);let r=globalThis;r.__ptySessions||(r.__ptySessions=new Map);let s=r.__ptySessions;function i(e){(function(e){let t=s.get(e);if(t)return s.delete(e),t.disconnectTimer&&(clearTimeout(t.disconnectTimer),t.disconnectTimer=null),t.killTree(),t})(e)&&(0,t.clearSessionPid)(e)}function n(){for(let e of s.keys())i(e)}let o=globalThis;"phase-production-build"===process.env.NEXT_PHASE||o.__ptySignalHandlersRegistered||(o.__ptySignalHandlersRegistered=!0,process.once("SIGTERM",()=>{console.error("[session-store] SIGTERM received — cleaning up PTY sessions"),n()}),process.once("SIGINT",()=>{console.error("[session-store] SIGINT received — cleaning up PTY sessions"),n()})),e.s(["destroySession",0,i,"getSession",0,function(e){return s.get(e)}])},991980,e=>{"use strict";let t=[/\x1b\[[<=>?]?[0-9;]*c/g,/\x1b\[\??[0-9;]*n/g,/\x1b\[\??[0-9;]*\$p/g,/\x1b\[>[0-9;]*q/g,/\x1b\[(?:1[1345689]|2[01])(?:;[0-9]+)*t/g,/\x1b\][0-9;]*;\?(?:\x07|\x1b\\)/g,/\x1bP[$+]q[\s\S]*?\x1b\\/g];e.s(["stripDeviceQueries",0,function(e){if(!e)return e;let r=e;for(let e of t)r=r.replace(e,"");return r}])},351495,e=>{"use strict";e.s(["ASSISTANT_SESSION_KEY",0,"__assistant__"])},205314,e=>{"use strict";e.i(682100);let t=globalThis.__previewSessions??=new Map;function r(e){let r=t.get(e);if(r){try{r.stop()}catch{}t.delete(e)}}function s(){for(let e of[...t.keys()])r(e)}if(globalThis.__previewSignalHandlersRegistered||(process.on("SIGTERM",s),process.on("SIGINT",s),process.on("SIGHUP",s),globalThis.__previewSignalHandlersRegistered=!0),"phase-production-build"!==process.env.NEXT_PHASE&&!globalThis.__previewSweepStarted){globalThis.__previewSweepStarted=!0;let e=new Map,s=setInterval(()=>{let s=Date.now();for(let i of function(e,t,r){let s=[];for(let{key:i,evictable:n}of e){if(!n){t.delete(i);continue}let e=t.get(i);if(void 0===e){t.set(i,r);continue}r-e>=3e5&&s.push(i)}return s}([...t].map(([e,t])=>({key:e,evictable:t.isEvictable})),e,s))r(i),e.delete(i)},6e4);s.unref?.()}e.s(["getPreviewSession",0,function(e){return t.get(e)}],205314)},982377,e=>{"use strict";let t="__preview__";e.s(["PREVIEW_TASK_ID",0,t,"parsePreviewWsParams",0,function(e){if(e.get("taskId")!==t)return null;let r=e.get("role"),s=e.get("previewKey");if("state"!==r&&"terminal"!==r||!s)return null;let i=e.get("connectionId")??Math.random().toString(36).slice(2);return{role:r,previewKey:decodeURIComponent(s),connectionId:i,taskId:e.get("clientTaskId")}}])},723538,e=>e.a(async(t,r)=>{try{var s=e.i(433541),i=e.i(370314),n=e.i(991980),o=e.i(746888),l=e.i(351495),a=e.i(205314),c=e.i(982377),d=t([s]);[s]=d.then?(await d)():d;let S=new Map;function u(){return g.__notificationClients||(g.__notificationClients=new Set),g.__notificationClients}function f(e){u().add(e)}function _(e){u().delete(e)}let g=globalThis;async function h(){var t;if(g.__wss){let e=g.__wss;g.__wss=void 0,await new Promise(t=>{e.close(()=>t()),setTimeout(t,1e3)})}let r=parseInt(process.env.PORT||"3000",10),n=await (0,o.readConfigValue)("terminal.wsPort",r+1),d=n;for(let r=0;r<10&&await (t=d,new Promise(r=>{let{createServer:s}=e.r(504446),i=s();i.once("error",()=>r(!0)),i.once("listening",()=>{i.close(()=>r(!1))}),i.listen(t,"127.0.0.1")}));r++){if(9===r)return void console.error(`[ws-server] No free port found after trying ${n}–${d} — skipping startup`);console.error(`[ws-server] Port ${d} in use, trying ${d+1}...`),d++}let u=new s.WebSocketServer({port:d,host:"127.0.0.1",perMessageDeflate:!1});g.__wss=u,g.__wsPort=d,d!==n?console.error(`[ws-server] WebSocket server listening on port ${d} (preferred ${n} was occupied)`):console.error(`[ws-server] WebSocket server listening on port ${d}`);let h=()=>{u.close(),g.__wss=void 0,g.__wsPort=void 0};process.once("SIGINT",h),process.once("SIGTERM",h),u.on("connection",(e,t)=>{let r,n=t.headers.origin??"";if(!(r=parseInt(process.env.PORT||"3000",10),new Set([`http://localhost:${r}`,`http://127.0.0.1:${r}`])).has(n)){console.error(`[ws-server] Rejected origin: ${n||"(none)"}`),e.close(1008,"Forbidden");return}let o=new URL(t.url??"/",`http://localhost:${d}`),u=o.searchParams.get("taskId");if(!u)return void e.close(1008,"Missing taskId");let h=(0,c.parsePreviewWsParams)(o.searchParams);if(h){let t=(0,a.getPreviewSession)(h.previewKey),r=null,i=null;function g(){if(t){if(i=t.subscribe(h.connectionId,h.taskId??"unknown",r=>{if("state"===h.role)try{e.send(JSON.stringify({type:"state",previewKey:t.key,state:r}))}catch{}},t=>{if("terminal"===h.role)try{e.send(t)}catch{}}),"terminal"===h.role){let r=t.getBuffer();if(r.length>0)try{e.send(r.join("\n")+"\n")}catch{}}if("state"===h.role)try{e.send(JSON.stringify({type:"state",previewKey:t.key,state:t.getState()}))}catch{}}}if(t)g();else{let i=0;r=setInterval(()=>{i+=500,(t=(0,a.getPreviewSession)(h.previewKey))?(clearInterval(r),r=null,g()):(i>=3e4||e.readyState!==s.WebSocket.OPEN)&&(clearInterval(r),r=null,e.readyState===s.WebSocket.OPEN&&e.close(1008,"No preview session created within timeout."))},500)}e.on("close",()=>{r&&(clearInterval(r),r=null),i&&(i(),i=null)}),e.on("error",()=>{r&&(clearInterval(r),r=null),i&&(i(),i=null)});return}if("__notifications__"===u){f(e),e.on("close",()=>_(e)),e.on("error",()=>_(e));return}console.error(`[ws-server] Connection for task ${u}`);let v=(0,i.getSession)(u),T=null;if(v)p(v,e,u),console.error(`[ws-server] Attached to existing session for task ${u}`);else{console.error(`[ws-server] No session for task ${u} — polling...`);let t=0;T=setInterval(()=>{t+=500,(v=(0,i.getSession)(u))?(clearInterval(T),T=null,p(v,e,u),console.error(`[ws-server] Session appeared for task ${u} after ${t}ms`)):(t>=3e4||e.readyState!==s.WebSocket.OPEN)&&(clearInterval(T),T=null,e.readyState===s.WebSocket.OPEN&&e.close(1008,"No PTY session created within timeout."))},500)}e.on("message",e=>{if(!v)return;let t=e.toString();if(t.startsWith("{"))try{let e=JSON.parse(t);if("resize"===e.type&&"number"==typeof e.cols&&"number"==typeof e.rows)return void v.resize(e.cols,e.rows)}catch{}v.write(t)}),e.on("close",()=>{e._batcher?.flush();let t=S.get(u);if(!t?.has(e)||(t.delete(e),console.error(`[ws-server] WS disconnected for task ${u} (${t.size} remaining)`),t.size>0))return;S.delete(u);let r=(0,i.getSession)(u);if(!r)return;if(r.setDataListener(()=>{}),u===l.ASSISTANT_SESSION_KEY){console.error("[ws-server] Assistant session disconnected — destroying immediately"),(0,i.destroySession)(u);return}let s=r.killed?3e5:72e5;r.disconnectTimer=setTimeout(()=>{console.error(`[ws-server] Keepalive expired for task ${u}`),(0,i.destroySession)(u)},s)}),e.on("error",t=>{console.error(`[ws-server] WS error for task ${u}:`,t.message),T&&(clearInterval(T),T=null);let r=S.get(u);if(!r?.has(e)||(r.delete(e),r.size>0))return;S.delete(u);let s=(0,i.getSession)(u);s&&!s.killed&&s.setDataListener(()=>{})})})}function p(e,t,r){var i;let o,l;e.disconnectTimer&&(clearTimeout(e.disconnectTimer),e.disconnectTimer=null);let a=S.get(r);a||(a=new Set,S.set(r,a)),a.add(t);let c=(i=t,o="",l=null,{send:e=>{o+=e,l||(l=setTimeout(()=>{l=null,i.readyState===s.WebSocket.OPEN&&i.bufferedAmount<65536&&i.send(o),o=""},8))},flush:()=>{l&&(clearTimeout(l),l=null),o&&i.readyState===s.WebSocket.OPEN&&i.bufferedAmount<65536&&i.send(o),o=""}});t._batcher=c;let d=a;e.setDataListener(e=>{for(let t of d){let r=t._batcher;r?r.send(e):t.readyState===s.WebSocket.OPEN&&t.send(e)}});let u=e.getBuffer();if(u&&t.readyState===s.WebSocket.OPEN){let e=(0,n.stripDeviceQueries)(u);e.length!==u.length&&console.error(`[ws-server] Stripped ${u.length-e.length} bytes of device-query sequences from replay for task ${r} (prevents phantom PTY input on reconnect)`),t.send(e)}e.setExitListener(e=>{let t=function(e){if(null==e)return 4255;let t=Number(e);if(!Number.isFinite(t))return 4255;let r=4e3+(t>=0&&t<256?0|t:t>>>0&255);return r<1e3||r>4999?4255:r}(e);for(let e of d)e.readyState===s.WebSocket.OPEN&&e.close(t,"session_end")})}e.s(["addNotificationClient",0,f,"broadcastNotification",0,function(e){let t=JSON.stringify(e);for(let e of u())e.readyState===s.WebSocket.OPEN&&e.send(t)},"getActiveWsPort",0,function(){return g.__wsPort??null},"removeNotificationClient",0,_,"startWsServer",0,h]),r()}catch(e){r(e)}},!1),336114,e=>e.a(async(t,r)=>{try{var s=e.i(723538);e.i(982377);var i=t([s]);[s]=i.then?(await i)():i,e.s(["startWsServer",()=>s.startWsServer]),r()}catch(e){r(e)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_lib_0ylel_1._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[279711,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),o=r&&t.cli?await t.cli.adapter.getVersion():null,i=!!t.api&&!!process.env[t.api.keyEnvVar],s=!!t.api&&i;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:o},api:{available:s,keyConfigured:i}})}return e}}var r=e.i(472129),o=e.i(902157),i=e.i(660526),s=e.i(750227),n=e.i(769310),a=e.i(53674);let l=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],c=globalThis;if(!c.__providerRegistry){let d=new t;d.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new r.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=[];e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):(t.push("--full-auto"),e.extraArgs?.length&&t.push(...e.extraArgs),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.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),r=s.join(t,"scripts","session-start-hook.js").replace(/\\/g,"/"),o=s.join(t,"scripts","post-tool-hook.js").replace(/\\/g,"/"),i=s.join(t,"scripts","stop-hook.js").replace(/\\/g,"/"),n=!1;return n=this.upsertHook(e,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${r}"`,timeout:5,type:"command"}]})||n,n=this.upsertHook(e,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${o}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||n,(n=this.upsertHook(e,"Stop","stop-hook.js",{hooks:[{command:`node "${i}"`,timeout:5,type:"command"}]})||n)&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async repairHookPaths(){try{let e=this.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),r=!1;for(let[o,i]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let n=this.getHookArray(e,o),a=n.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(i)));if(a<0)continue;let l=s.join(t,"scripts",i).replace(/\\/g,"/"),c=`node "${l}"`,d=n[a]?.hooks?.[0];d&&d.command!==c&&(d.command=c,e[o]=n,r=!0)}r&&(this.writeHooks(e),this.ensureHooksFeatureEnabled())}catch{}}upsertHook(e,t,r,o){let i=this.getHookArray(e,t),s=o?.hooks?.[0]?.command,n=i.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(n>=0){if(i[n]?.hooks?.[0]?.command===s)return!1;i.splice(n,1)}return i.push(o),e[t]=i,!0}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let o=this.getHookArray(e,r);e[r]=o.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))o.push("--env",`${t}=${r}`);o.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","remove",e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.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,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!o.existsSync(t))return{ok:!1,method:"symlink",detail:r,error:`Source skill dir does not exist: ${t}`};o.mkdirSync(s.dirname(r),{recursive:!0});let e=await o.promises.lstat(r).catch(()=>null);if(e)if(!(e.isSymbolicLink()||(0,n.isWindows)()&&e.isDirectory()))return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`};else try{let e=await o.promises.readlink(r);if(s.resolve(e)===s.resolve(t))return{ok:!0,method:"symlink",detail:`${r} → ${t} (already)`};await o.promises.unlink(r)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`}}let i=(0,n.isWindows)()?"junction":"dir";return await o.promises.symlink(t,r,i),{ok:!0,method:"symlink",detail:`${r} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=s.join(this.getConfigDir(),"skills",e);try{let e=await o.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await o.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let r=s.join(this.getConfigDir(),"skills",e);try{if(!(await o.promises.lstat(r)).isSymbolicLink())return!1;if(!t)return!0;let e=await o.promises.readlink(r),i=s.isAbsolute(e)?e:s.resolve(s.dirname(r),e);return s.resolve(i)===s.resolve(t)}catch{return!1}}async runCli(t,r,o,i=1e4){let{execFile:s}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(s),{stdout:l}=await a(t,r,{cwd:o,timeout:i});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:o}=await e.A(200628),i=r(t),s=await o(this.resolveCommand(),["--version"]),{stdout:n}=await i(s.command,s.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return s.join(i.homedir(),".codex")}getSettingsPath(){return s.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return s.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,n.resolveCommandPathSync)("codex")}getHooksPath(){return s.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(o.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();o.existsSync(t)||o.mkdirSync(t,{recursive:!0}),o.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=o.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let r=this.getConfigDir();o.existsSync(r)||o.mkdirSync(r,{recursive:!0}),o.writeFileSync(e,t,"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)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),c.__providerRegistry=d}let d=c.__providerRegistry;e.s(["providerRegistry",0,d],279711)},173215,e=>{"use strict";var t=e.i(902157),r=e.i(660526),o=e.i(750227),i=e.i(279711),s=e.i(192520),n=e.i(53674);let a="tower";function l(){let e=(0,s.getTowerDir)(),t=o.join((0,r.homedir)(),".tower");if(o.resolve(e)===o.resolve(t))return"tower";let i=o.basename(e),n=i.match(/^\.?tower-(.+)$/);return n?`tower-${c(n[1])}`:`tower-${c(i)}`}function c(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}function d(){let e=(0,n.getPackageRoot)().replace(/\\/g,"/"),r={DATABASE_URL:process.env.DATABASE_URL||`file:${(0,s.getTowerDbPath)().replace(/\\/g,"/")}`,TOWER_DATA_DIR:(0,s.getTowerDir)()},o=`${e}/dist/mcp-server.cjs`,i=l();return(0,t.existsSync)(o)?{name:i,command:"node",args:[o],env:r}:{name:i,command:`${e}/node_modules/.bin/tsx`,args:[`${e}/src/mcp/index.ts`],env:r}}async function m(e,s){let l=i.providerRegistry.get(e),c=l?.cli?.adapter;if(!c||!await c.isAvailable())return{provider:e,available:!1,ok:!1};let m="claude"===e?function(e={}){let i=e.homeDir??r.homedir(),s=e.repoRoot??process.cwd(),n=[];return n.push(function(e){let r=o.join(e,".claude","settings.json");if(!t.existsSync(r))return{removed:!1,path:r};try{let e=t.readFileSync(r,"utf-8"),o=JSON.parse(e),i=o.mcpServers;if("object"!=typeof i||null===i||Array.isArray(i)||!("tower"in i))return{removed:!1,path:r};let s=i.tower;return delete i.tower,0===Object.keys(i).length?delete o.mcpServers:o.mcpServers=i,t.writeFileSync(r,JSON.stringify(o,null,2)+"\n","utf-8"),{removed:!0,path:r,removedEntry:s,reason:"wrong-file"}}catch(e){return{removed:!1,path:r,error:e instanceof Error?e.message:String(e)}}}(i)),n.push(function(e,r,i){if(!t.existsSync(e))return{removed:!1,path:e};try{let s=t.readFileSync(e,"utf-8"),n=JSON.parse(s),a=n.mcpServers;if("object"!=typeof a||null===a||Array.isArray(a))return{removed:!1,path:e};let l=a.tower;if(!l)return{removed:!1,path:e};let c=function(e,r){let i,s=e.args;if(!Array.isArray(s))return"foreign-repo";for(let e of s)if("string"==typeof e&&o.isAbsolute(e)){i=e;break}return i?t.existsSync(i)?o.resolve(i).startsWith(o.resolve(r)+o.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,i);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete a.tower,0===Object.keys(a).length?delete n.mcpServers:n.mcpServers=a,t.writeFileSync(e,JSON.stringify(n,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${r}:${c}`}}catch(t){return{removed:!1,path:e,error:t instanceof Error?t.message:String(t)}}}(o.join(i,".mcp.json"),"home-mcp-json",s)),{steps:n,removedAny:n.some(e=>e.removed)}}():void 0,u=d(),h=await c.installMcp(u,{scope:"user"}),p=await c.installHooks(s),g=await c.installSkill(a,o.join((0,n.getPackageRoot)(),"skills",a));return{provider:e,available:!0,migration:m,mcp:h,hooks:p,skill:g,ok:h.ok&&p.ok&&g.ok}}e.s(["buildTowerMcpConfig",0,d,"getTowerMcpName",0,l,"installAllForProvider",0,m],173215)}];
|
|
1
|
+
module.exports=[279711,e=>{"use strict";class t{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,t){let r=this.providers.get(e);return r?"api"===t?r.api?.adapter??null:r.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let t of this.providers.values())t.cli?.command&&e.push(t.cli.command);return e}async getAvailableProviders(){let e=[];for(let t of this.providers.values()){let r=!!t.cli&&await t.cli.adapter.isAvailable(),o=r&&t.cli?await t.cli.adapter.getVersion():null,s=!!t.api&&!!process.env[t.api.keyEnvVar],i=!!t.api&&s;e.push({name:t.name,displayName:t.displayName,cli:{available:r,version:o},api:{available:i,keyConfigured:s}})}return e}}var r=e.i(472129),o=e.i(902157),s=e.i(660526),i=e.i(750227),n=e.i(769310),a=e.i(53674);let l=[],c=globalThis;if(!c.__providerRegistry){let d=new t;d.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new r.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class t{buildSpawnArgs(e){let t=["--dangerously-bypass-approvals-and-sandbox"];e.extraArgs?.length&&t.push(...e.extraArgs),e.resumeSessionId?t.push("resume",e.resumeSessionId):e.continueLatest?t.push("resume","--last"):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.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),r=i.join(t,"scripts","tower-session-start-hook.js").replace(/\\/g,"/"),o=i.join(t,"scripts","tower-post-tool-hook.js").replace(/\\/g,"/"),s=i.join(t,"scripts","tower-stop-hook.js").replace(/\\/g,"/"),n=!1;return n=this.upsertHook(e,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${r}"`,timeout:5,type:"command"}]})||n,n=this.upsertHook(e,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${o}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||n,(n=this.upsertHook(e,"Stop","stop-hook.js",{hooks:[{command:`node "${s}"`,timeout:5,type:"command"}]})||n)&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async repairHookPaths(){try{let e=this.readHooks(),t=(0,a.getPackageRoot)().replace(/\\/g,"/"),r=!1;for(let[o,s,n]of[["SessionStart","session-start-hook.js","tower-session-start-hook.js"],["PostToolUse","post-tool-hook.js","tower-post-tool-hook.js"],["Stop","stop-hook.js","tower-stop-hook.js"]]){let a=this.getHookArray(e,o),l=a.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(s)));if(l<0)continue;let c=i.join(t,"scripts",n).replace(/\\/g,"/"),d=`node "${c}"`,u=a[l]?.hooks?.[0];u&&u.command!==d&&(u.command=d,e[o]=a,r=!0)}r&&(this.writeHooks(e),this.ensureHooksFeatureEnabled())}catch{}}upsertHook(e,t,r,o){let s=this.getHookArray(e,t),i=o?.hooks?.[0]?.command,n=s.findIndex(e=>e?.hooks?.some?.(e=>e.command?.includes(r)));if(n>=0){if(s[n]?.hooks?.[0]?.command===i)return!1;s.splice(n,1)}return s.push(o),e[t]=s,!0}async uninstallHooks(){try{let e=this.readHooks(),t=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let r of["SessionStart","PostToolUse","Stop"]){let o=this.getHookArray(e,r);e[r]=o.filter(e=>!e.hooks?.some(e=>t.some(t=>e.command?.includes(t))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","add",e.name];if(e.env)for(let[t,r]of Object.entries(e.env))o.push("--env",`${t}=${r}`);o.push("--",e.command,...e.args);try{return await this.runCli(r,["mcp","remove",e.name],t.cwd).catch(()=>{}),await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=this.resolveCommand(),o=["mcp","remove",e];try{return await this.runCli(r,o,t.cwd),{ok:!0,method:"cli",detail:`${r} ${o.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${r} ${o.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,t){let r=i.join(this.getConfigDir(),"skills",e);try{if(!o.existsSync(t))return{ok:!1,method:"symlink",detail:r,error:`Source skill dir does not exist: ${t}`};o.mkdirSync(i.dirname(r),{recursive:!0});let e=await o.promises.lstat(r).catch(()=>null);if(e)if(!(e.isSymbolicLink()||(0,n.isWindows)()&&e.isDirectory()))return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`};else try{let e=await o.promises.readlink(r);if(i.resolve(e)===i.resolve(t))return{ok:!0,method:"symlink",detail:`${r} → ${t} (already)`};await o.promises.unlink(r)}catch{if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to overwrite non-symlink at ${r}`}}let s=(0,n.isWindows)()?"junction":"dir";return await o.promises.symlink(t,r,s),{ok:!0,method:"symlink",detail:`${r} → ${t}`}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let t=i.join(this.getConfigDir(),"skills",e);try{let e=await o.promises.lstat(t).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${t} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to remove non-symlink at ${t}`};return await o.promises.unlink(t),{ok:!0,method:"symlink",detail:t}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,t){let r=i.join(this.getConfigDir(),"skills",e);try{if(!(await o.promises.lstat(r)).isSymbolicLink())return!1;if(!t)return!0;let e=await o.promises.readlink(r),s=i.isAbsolute(e)?e:i.resolve(i.dirname(r),e);return i.resolve(s)===i.resolve(t)}catch{return!1}}async runCli(t,r,o,s=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(t,r,{cwd:o,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:o}=await e.A(200628),s=r(t),i=await o(this.resolveCommand(),["--version"]),{stdout:n}=await s(i.command,i.args,{timeout:5e3});return n.trim()||null}catch{return null}}async getModels(){return l}getConfigDir(){return i.join(s.homedir(),".codex")}getSettingsPath(){return i.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return i.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(e){return{command:this.resolveCommand(),args:["exec",e]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,n.resolveCommandPathSync)("codex")}getHooksPath(){return i.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(o.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let t=this.getConfigDir();o.existsSync(t)||o.mkdirSync(t,{recursive:!0}),o.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),t="";try{t=o.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(t))return;/\[features\]/.test(t)?t=t.replace(/\[features\]/,"[features]\ncodex_hooks = true"):t+="\n[features]\ncodex_hooks = true\n";let r=this.getConfigDir();o.existsSync(r)||o.mkdirSync(r,{recursive:!0}),o.writeFileSync(e,t,"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)))}}},models:{cli:[],api:[]}}),c.__providerRegistry=d}let d=c.__providerRegistry;e.s(["providerRegistry",0,d],279711)},173215,e=>{"use strict";var t=e.i(902157),r=e.i(660526),o=e.i(750227),s=e.i(279711),i=e.i(192520),n=e.i(53674);let a="tower";function l(){let e=(0,i.getTowerDir)(),t=o.join((0,r.homedir)(),".tower");if(o.resolve(e)===o.resolve(t))return"tower";let s=o.basename(e),n=s.match(/^\.?tower-(.+)$/);return n?`tower-${c(n[1])}`:`tower-${c(s)}`}function c(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}function d(){let e=(0,n.getPackageRoot)().replace(/\\/g,"/"),r={DATABASE_URL:process.env.DATABASE_URL||`file:${(0,i.getTowerDbPath)().replace(/\\/g,"/")}`,TOWER_DATA_DIR:(0,i.getTowerDir)()},o=`${e}/dist/mcp-server.cjs`,s=l();return(0,t.existsSync)(o)?{name:s,command:"node",args:[o],env:r}:{name:s,command:`${e}/node_modules/.bin/tsx`,args:[`${e}/src/mcp/index.ts`],env:r}}async function u(e,i){let l=s.providerRegistry.get(e),c=l?.cli?.adapter;if(!c||!await c.isAvailable())return{provider:e,available:!1,ok:!1};let u="claude"===e?function(e={}){let s=e.homeDir??r.homedir(),i=e.repoRoot??process.cwd(),n=[];return n.push(function(e){let r=o.join(e,".claude","settings.json");if(!t.existsSync(r))return{removed:!1,path:r};try{let e=t.readFileSync(r,"utf-8"),o=JSON.parse(e),s=o.mcpServers;if("object"!=typeof s||null===s||Array.isArray(s)||!("tower"in s))return{removed:!1,path:r};let i=s.tower;return delete s.tower,0===Object.keys(s).length?delete o.mcpServers:o.mcpServers=s,t.writeFileSync(r,JSON.stringify(o,null,2)+"\n","utf-8"),{removed:!0,path:r,removedEntry:i,reason:"wrong-file"}}catch(e){return{removed:!1,path:r,error:e instanceof Error?e.message:String(e)}}}(s)),n.push(function(e,r,s){if(!t.existsSync(e))return{removed:!1,path:e};try{let i=t.readFileSync(e,"utf-8"),n=JSON.parse(i),a=n.mcpServers;if("object"!=typeof a||null===a||Array.isArray(a))return{removed:!1,path:e};let l=a.tower;if(!l)return{removed:!1,path:e};let c=function(e,r){let s,i=e.args;if(!Array.isArray(i))return"foreign-repo";for(let e of i)if("string"==typeof e&&o.isAbsolute(e)){s=e;break}return s?t.existsSync(s)?o.resolve(s).startsWith(o.resolve(r)+o.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,s);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete a.tower,0===Object.keys(a).length?delete n.mcpServers:n.mcpServers=a,t.writeFileSync(e,JSON.stringify(n,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${r}:${c}`}}catch(t){return{removed:!1,path:e,error:t instanceof Error?t.message:String(t)}}}(o.join(s,".mcp.json"),"home-mcp-json",i)),{steps:n,removedAny:n.some(e=>e.removed)}}():void 0,m=d(),h=await c.installMcp(m,{scope:"user"}),p=await c.installHooks(i),k=await c.installSkill(a,o.join((0,n.getPackageRoot)(),"skills",a));return{provider:e,available:!0,migration:u,mcp:h,hooks:p,skill:k,ok:h.ok&&p.ok&&k.ok}}e.s(["buildTowerMcpConfig",0,d,"getTowerMcpName",0,l,"installAllForProvider",0,u],173215)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_lib_ai_0xx6y51._.js.map
|