tower-studio 0.2.16 → 0.2.19
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/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -100
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +40 -28
- package/.next/standalone/.next/server/app/_not-found/page.js +6 -5
- 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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/browse-fs/route.js +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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.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.nft.json +1 -1
- 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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/backup/import/route.js +1 -1
- package/.next/standalone/.next/server/app/api/internal/backup/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +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/stop/route.js.nft.json +1 -1
- 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.nft.json +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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/diff/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/missions/page/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/missions/page/server-reference-manifest.json +87 -63
- package/.next/standalone/.next/server/app/missions/page.js +9 -7
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +40 -28
- package/.next/standalone/.next/server/app/onboarding/page.js +6 -5
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +40 -28
- package/.next/standalone/.next/server/app/page.js +6 -5
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +67 -43
- package/.next/standalone/.next/server/app/settings/page.js +7 -6
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +186 -138
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js +8 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +184 -124
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js +8 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +74 -62
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js +6 -5
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +174 -114
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +9 -7
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +40 -28
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js +7 -6
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +158 -110
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js +8 -6
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +126 -78
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +10 -8
- 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/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +60 -48
- package/.next/standalone/.next/server/app/workspaces/page.js +6 -5
- 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/chunks/0se9_next_dist_esm_build_templates_app-route_0hrprmi.js +2 -2
- package/.next/standalone/.next/server/chunks/[externals]__0m5smhl._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-0gs-6._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03j20vp._.js +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05se6yk._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__06m1r8x._.js +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__09p152b._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_6swdz._.js +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b-ib~7._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0gmwjkc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o3ggen._.js +3 -3
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0.0.jeg._.js → [root-of-the-server]__0sy6lau._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wuzc5o._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0~rm9q.._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__12c9noi._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_0bkvm8c._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_0aowbzy._.js +1 -1
- 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/{0ws9_lucide-react_dist_esm_icons_0dv2bel._.js → 0ws9_lucide-react_dist_esm_icons_0odx0ph._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_10.d8~a._.js → 0yzm_fuse_js_dist_fuse_mjs_0t4upxy._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[externals]_@vscode_ripgrep_0m7itqb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vx7inx._.js → [root-of-the-server]__01evhhc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__063j5j2._.js → [root-of-the-server]__0261~vp._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0313pct._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0o4yodb._.js → [root-of-the-server]__07ns1z8._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08xomvf._.js +47 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0lhroxu._.js → [root-of-the-server]__09rts_e._.js} +1 -1
- 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]__0c7x0o9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e82_jw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__09n4g~p._.js → [root-of-the-server]__0eea3ta._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qy_98o._.js → [root-of-the-server]__0la1659._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__08g-39i._.js → [root-of-the-server]__0m1tg3c._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__057bwkf._.js → [root-of-the-server]__0oqhxfb._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0wabw~r._.js → [root-of-the-server]__0qy0o3-._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sc_a_d._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-pzjth._.js → [root-of-the-server]__0sdd0qu._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sdt1y5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sk.itb._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00l2th1._.js → [root-of-the-server]__0th0_fo._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ty1ao1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0vicp7s._.js → [root-of-the-server]__0v7p~3.._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjuu0z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wt83kv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y.s5ax._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y5wu~l._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0y.2qv_._.js → [root-of-the-server]__0z7je5_._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zq.n2w._.js +30 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11zjs~k._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0zgzcl5._.js → [root-of-the-server]__12ktvsa._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__13i_x1.._.js → [root-of-the-server]__13374-3._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__134_xv.._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0hj6ykf._.js → _0-ez10.._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_01e47s2._.js +4 -0
- package/.next/standalone/.next/server/chunks/ssr/_01yg50d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0jis7fv._.js → _0574rlr._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_05l656y._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_06-jig2._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0u6n.gw._.js → _08z-g~5._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/_09qgmwg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_7d5_7._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0l0n0gc._.js → _0_vjay8._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/_0_zfpwh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0djgo-u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0dvltcf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0gv9sv3._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0jg.s-g._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0jz8fv8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0b9lr.2._.js → _0kef0v6._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0n.xiu5._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0_in9ut._.js → _0nbufo.._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ng0eku._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0~~v0og._.js → _0qkxdkn._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0bijc0.._.js → _0r6gweb._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/_0rdyrfd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_08j7--7._.js → _0rqf5w7._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0st9b1_._.js → _0rt8jf_._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_0ds16oj._.js → _0sbxdnc._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ueyys5._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0unw1fq._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0i2m-0~._.js → _0uuzh5m._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/{_11ixey~._.js → _0~aon4t._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/_10ogq8w._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_13esy08._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_13kwp85._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0hhlpw6._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_075s.rk._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_0djxlqx._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_actions_agent-actions_ts_0~wc.sy._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_actions_file-actions_ts_0gcvqwm._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_missions_missions-client_tsx_11429lj._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_onboarding_page_tsx_0xf7hpz._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_settings_page_tsx_0h9v7dr._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0wyzpam._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_board-page-client_tsx_0gips66._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_02t7blt._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0f4q-6w._.js → src_lib_00tdjs9._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_09ajdu_._.js → src_lib_0153vha._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_05wgz5w._.js → src_lib_07bxr4y._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_078780e._.js → src_lib_0dnn~ft._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0e.v07~._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0haj7_-._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0vp4mgz._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0wd-1.k._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0yvdojq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0zfjhu1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0~cwhiw._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_127qa83._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_12h5txa._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_open-targets_ts_12a-_~u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js +1 -1
- package/.next/standalone/.next/server/functions-config-manifest.json +10 -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 +13 -13
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/pages-manifest.json +0 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +678 -456
- package/.next/standalone/.next/static/chunks/0._824vjqa-9k.js +5 -0
- package/.next/standalone/.next/static/chunks/{0e8wfpfgivr6t.js → 03og02bu96n.e.js} +1 -1
- package/.next/standalone/.next/static/chunks/{07idrdtj1o8zu.js → 04wsku4m5~s1q.js} +1 -1
- package/.next/standalone/.next/static/chunks/{123doanyjnwwq.css → 066jf0nk75nic.css} +1 -1
- package/.next/standalone/.next/static/chunks/06qwj~g0qwhey.js +5 -0
- package/.next/standalone/.next/static/chunks/08rokhw7bg_zn.js +1 -0
- package/.next/standalone/.next/static/chunks/08~85j56saf6q.js +1 -0
- package/.next/standalone/.next/static/chunks/096ysbmoa9qsb.js +1 -0
- package/.next/standalone/.next/static/chunks/0b6zhezopdbs2.js +1 -0
- package/.next/standalone/.next/static/chunks/0c7b_.6i4jef8.js +1 -0
- package/.next/standalone/.next/static/chunks/0esvyij44lvt6.js +1 -0
- package/.next/standalone/.next/static/chunks/0hniqlgz6waea.js +2 -0
- package/.next/standalone/.next/static/chunks/0hseznii2u-4n.js +5 -0
- package/.next/standalone/.next/static/chunks/0izukvmui9f8m.js +1 -0
- package/.next/standalone/.next/static/chunks/0kycb80.t-7_-.js +1 -0
- package/.next/standalone/.next/static/chunks/0lv0zqg.f66eu.js +1 -0
- package/.next/standalone/.next/static/chunks/0njf5husn6ovd.js +1 -0
- package/.next/standalone/.next/static/chunks/0okjtk-a.5lz0.css +1 -0
- package/.next/standalone/.next/static/chunks/0p7hamd-yspky.js +2 -0
- package/.next/standalone/.next/static/chunks/0s6ygn-alcm2d.js +1 -0
- package/.next/standalone/.next/static/chunks/0v66~34w9t3gz.js +5 -0
- package/.next/standalone/.next/static/chunks/0v_nmghra_n2q.js +1 -0
- package/.next/standalone/.next/static/chunks/{0vyurjgr0u8aw.js → 0vu_cifxk7vfu.js} +1 -1
- package/.next/standalone/.next/static/chunks/0zf35xwv.l3l7.js +1 -0
- package/.next/standalone/.next/static/chunks/{0_t7890~b8s.q.js → 10ght~j9wl9ab.js} +1 -1
- package/.next/standalone/.next/static/chunks/11.t9_o8cox8t.js +1 -0
- package/.next/standalone/.next/static/chunks/1124-9qfcr70v.js +1 -0
- package/.next/standalone/.next/static/chunks/116ssnh5k8ad9.js +1 -0
- package/.next/standalone/.next/static/chunks/162ec9.32dj73.js +1 -0
- package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
- package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
- package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
- package/.next/standalone/.next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
- package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
- package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
- package/.next/standalone/package.json +2 -1
- package/dist/mcp-server.cjs +139 -31
- package/package.json +2 -1
- package/prisma/schema.prisma +1 -0
- package/scripts/fix-native-permissions.js +7 -0
- package/skills/tower/SKILL.md +12 -5
- package/.next/standalone/.next/server/app/_not-found.html +0 -1
- package/.next/standalone/.next/server/app/_not-found.meta +0 -16
- package/.next/standalone/.next/server/app/_not-found.rsc +0 -25
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +0 -25
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +0 -13
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -5
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -4
- package/.next/standalone/.next/server/app/index.html +0 -1
- package/.next/standalone/.next/server/app/index.meta +0 -16
- package/.next/standalone/.next/server/app/index.rsc +0 -26
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +0 -26
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +0 -13
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/onboarding.html +0 -1
- package/.next/standalone/.next/server/app/onboarding.meta +0 -15
- package/.next/standalone/.next/server/app/onboarding.rsc +0 -31
- package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +0 -31
- package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +0 -13
- package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +0 -9
- package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +0 -5
- package/.next/standalone/.next/server/app/settings.html +0 -1
- package/.next/standalone/.next/server/app/settings.meta +0 -15
- package/.next/standalone/.next/server/app/settings.rsc +0 -31
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +0 -31
- package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +0 -13
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +0 -6
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +0 -9
- package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +0 -5
- package/.next/standalone/.next/server/chunks/[externals]__12mj_bs._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0hclpb.._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0mizcpa._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__07l.j.t._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e215_h._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0hc2ab0._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0n9e~0j._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0p_09im._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qyxluw._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0r54_2f._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s9retv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vyqspt._.js +0 -30
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__10xwsl4._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12c826b._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_00_enfv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_02yhivm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_06d.l~y._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0_g2k44._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0gk9bhq._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_0i8t39l._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0kdx-ix._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0ny8sre._.js +0 -4
- package/.next/standalone/.next/server/chunks/ssr/_0p~.jo1._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_0tj4yhj._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0wxgq36._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0x_nujv._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_0xlxdv6._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0~fk6kp._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules__pnpm_0lqfvhm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_0r5zto-._.js +0 -47
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0ffqwve._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0i-k~x7._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0jzfhds._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0kjj12q._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0lve.hi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0pywvqu._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0tp-g~8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0vnqpwi._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/src_lib_0w9nhfj._.js +0 -3
- package/.next/standalone/.next/server/pages/404.html +0 -1
- package/.next/standalone/.next/static/chunks/0.oy-y0w05vbq.js +0 -1
- package/.next/standalone/.next/static/chunks/04a2asn0hyy9c.js +0 -1
- package/.next/standalone/.next/static/chunks/06uk3fb5mkz5c.js +0 -1
- package/.next/standalone/.next/static/chunks/0c5ct~fi6oo0x.js +0 -5
- package/.next/standalone/.next/static/chunks/0d.9mkqrf._kj.js +0 -5
- package/.next/standalone/.next/static/chunks/0eup3utxhd.9w.js +0 -2
- package/.next/standalone/.next/static/chunks/0fysbcldn.s~5.js +0 -1
- package/.next/standalone/.next/static/chunks/0husw1q436czh.js +0 -1
- package/.next/standalone/.next/static/chunks/0ibjmvk~1lgfl.js +0 -2
- package/.next/standalone/.next/static/chunks/0m_mrbcxwb.xb.js +0 -1
- package/.next/standalone/.next/static/chunks/0mzr~d4ax.~nx.js +0 -5
- package/.next/standalone/.next/static/chunks/0q4_3y9etuu46.js +0 -1
- package/.next/standalone/.next/static/chunks/0qxmfi3_hxoj8.js +0 -1
- package/.next/standalone/.next/static/chunks/0xbblu1dqxput.js +0 -1
- package/.next/standalone/.next/static/chunks/0xu8d3uoqrmjl.js +0 -1
- package/.next/standalone/.next/static/chunks/0xx_wtcnk0sf7.js +0 -1
- package/.next/standalone/.next/static/chunks/0y4t-yk9428ag.js +0 -1
- package/.next/standalone/.next/static/chunks/0yrq3rjju-3um.js +0 -1
- package/.next/standalone/.next/static/chunks/0~8mebeyo5uub.css +0 -1
- package/.next/standalone/.next/static/chunks/10~egz2-vj..3.js +0 -5
- package/.next/standalone/.next/static/media/4fa387ec64143e14-s.0.qu-9752pffj.woff2 +0 -0
- package/.next/standalone/.next/static/media/5ce348bf30bf5439-s.0ee55_hj9qcer.woff2 +0 -0
- package/.next/standalone/.next/static/media/6306c77e7c8268e4-s.0mao5jbfbduzp.woff2 +0 -0
- package/.next/standalone/.next/static/media/797e433ab948586e-s.p.09zddjkbdep5a.woff2 +0 -0
- package/.next/standalone/.next/static/media/7d817b4c03b0c5f1-s.0uzt.a6d44yda.woff2 +0 -0
- package/.next/standalone/.next/static/media/bbc41e54d2fcbd21-s.0mvwgmnhv29no.woff2 +0 -0
- /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{Kff31mi-mF0Jr_em-2NTJ → mLQP8o4ghKE2DGln7fL34}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,14842,865514,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(368490),a=e.i(232280),n=e.i(759686),i=e.i(960518),l=e.i(340873),o=e.i(400355),c=e.i(519455),d=e.i(912505),m=e.i(487486),h=e.i(776639),u=e.i(624687),x=e.i(533499);function f({patchState:e,isLargeFold:s,onLoad:r}){let{t:a}=(0,x.useI18n)();return s?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-1 py-6",children:[(0,t.jsx)(c.Button,{variant:"link",onClick:r,className:"h-auto p-0 text-sm",children:a("diff.loadDiff")}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:a("diff.foldedLarge")})]}):e&&"loading"!==e.kind?"error"===e.kind?(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-6 text-sm text-muted-foreground",children:[(0,t.jsx)("span",{children:a("diff.loadFailed")}),(0,t.jsx)(c.Button,{variant:"ghost",onClick:r,children:a("diff.retry")})]}):"binary"===e.kind?(0,t.jsx)("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:a("diff.binaryNotShown")}):"empty"===e.kind?(0,t.jsx)("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:a("diff.noChanges")}):(0,t.jsx)(p,{patch:e.patch??""}):(0,t.jsx)("div",{className:"flex items-center justify-center py-6",children:(0,t.jsx)(o.Loader2,{className:"h-5 w-5 animate-spin text-muted-foreground"})})}function p({patch:e}){let{t:s}=(0,x.useI18n)(),r=e.split("\n"),a=r.length>500,n=a?r.slice(0,500):r;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("pre",{className:"overflow-x-auto p-0 text-xs font-mono leading-5",children:n.map((e,s)=>{let r=e.startsWith("+++")||e.startsWith("---")?"px-4 block text-muted-foreground":e.startsWith("+")?"px-4 block bg-green-500/10 text-green-400":e.startsWith("-")?"px-4 block bg-red-500/10 text-red-400":e.startsWith("@@")?"px-4 block bg-blue-500/10 text-blue-300":"px-4 block text-muted-foreground";return(0,t.jsx)("span",{className:r,children:e||" "},s)})}),a&&(0,t.jsx)("div",{className:"px-4 py-2 text-xs text-muted-foreground border-t border-border",children:s("diff.patchTruncated",{n:String(500),total:String(r.length)})})]})}e.s(["TaskDiffView",0,function({taskId:e,files:o,totalAdded:p,totalRemoved:g,hasConflicts:j,conflictFiles:b,onCommit:w,hasUncommitted:N}){let{t:y}=(0,x.useI18n)(),[v,k]=(0,s.useState)(new Set),[C,S]=(0,s.useState)(new Map),[M,D]=(0,s.useState)(!1),[L,A]=(0,s.useState)(""),[F,T]=(0,s.useState)(!1),B=t=>{S(e=>new Map(e).set(t,{kind:"loading"})),fetch(`/api/tasks/${e}/diff-patch?file=${encodeURIComponent(t)}`).then(e=>e.ok?e.json():Promise.reject(Error(`HTTP ${e.status}`))).then(e=>{S(s=>{let r=new Map(s);return"binary"===e.kind?r.set(t,{kind:"binary"}):"empty"===e.kind?r.set(t,{kind:"empty"}):r.set(t,{kind:"ready",patch:e.patch??""}),r})}).catch(()=>{S(e=>new Map(e).set(t,{kind:"error"}))})};return(0,t.jsxs)("div",{className:"flex flex-col h-full",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 text-sm text-muted-foreground",children:[(0,t.jsxs)("span",{className:"font-medium text-foreground",children:[o.length," files changed"]}),(0,t.jsxs)("span",{className:"text-green-400 font-mono text-xs",children:["+",p]}),(0,t.jsxs)("span",{className:"text-red-400 font-mono text-xs",children:["-",g]})]}),(0,t.jsx)("div",{className:"flex items-center gap-2",children:N&&w&&(0,t.jsxs)(c.Button,{variant:"outline",onClick:()=>D(!0),className:"gap-2",children:[(0,t.jsx)(l.GitCommitHorizontal,{className:"h-4 w-4"}),y("diff.commit")]})})]}),j&&(0,t.jsxs)("div",{className:"flex flex-col gap-2 border-b border-border bg-amber-500/5 px-4 py-3 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-amber-400",children:[(0,t.jsx)(n.AlertTriangle,{className:"h-4 w-4 flex-shrink-0"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:["Merge blocked: ",b.length," conflicting file",1!==b.length?"s":""]})]}),(0,t.jsx)("ul",{className:"ml-6 space-y-1",children:b.map(e=>(0,t.jsx)("li",{className:"text-xs font-mono text-amber-300/80",children:e},e))})]}),(0,t.jsx)("div",{className:"flex-1 overflow-auto",children:0===o.length?(0,t.jsx)(d.EmptyState,{icon:i.GitCompare,title:y("diff.noChanges"),className:"h-full"}):(0,t.jsx)("div",{className:"divide-y divide-border",children:o.map(e=>{let s=v.has(e.filename),n=C.get(e.filename),i=e.added+e.removed;return(0,t.jsxs)("div",{children:[(0,t.jsxs)(c.Button,{variant:"ghost",type:"button",onClick:()=>{let t;return t=v.has(e.filename),void(k(t=>{let s=new Set(t);return s.has(e.filename)?s.delete(e.filename):s.add(e.filename),s}),t||e.isBinary||C.has(e.filename)||e.added+e.removed<=200&&B(e.filename))},className:"flex w-full items-center gap-2 px-4 py-2.5 text-left hover:bg-accent/50 transition-colors rounded-none h-auto",children:[s?(0,t.jsx)(a.ChevronDown,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}):(0,t.jsx)(r.ChevronRight,{className:"h-3.5 w-3.5 flex-shrink-0 text-muted-foreground"}),(0,t.jsx)("span",{className:"flex-1 truncate text-sm font-mono text-foreground",children:e.filename}),e.isBinary?(0,t.jsx)(m.Badge,{variant:"secondary",className:"text-[10px] bg-muted text-muted-foreground border border-border",children:y("diff.binary")}):(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("span",{className:"text-xs font-mono text-green-400",children:["+",e.added]}),(0,t.jsxs)("span",{className:"text-xs font-mono text-red-400",children:["-",e.removed]})]})]}),s&&!e.isBinary&&(0,t.jsx)("div",{className:"border-t border-border bg-background",children:(0,t.jsx)(f,{filename:e.filename,patchState:n,isLargeFold:!n&&i>200,onLoad:()=>B(e.filename)})})]},e.filename)})})}),(0,t.jsx)(h.Dialog,{open:M,onOpenChange:D,children:(0,t.jsxs)(h.DialogContent,{className:"max-w-md",children:[(0,t.jsx)(h.DialogHeader,{children:(0,t.jsx)(h.DialogTitle,{children:y("diff.commitChanges")})}),(0,t.jsx)("div",{className:"flex flex-col gap-3",children:(0,t.jsx)(u.Textarea,{value:L,onChange:e=>A(e.target.value),placeholder:y("diff.commitMessagePlaceholder"),rows:5,className:"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none resize-y min-h-[80px]"})}),(0,t.jsxs)(h.DialogFooter,{children:[(0,t.jsx)(c.Button,{variant:"ghost",onClick:()=>D(!1),children:y("common.cancel")}),(0,t.jsx)(c.Button,{onClick:async()=>{if(L.trim()&&w){T(!0);try{await w(L.trim()),A(""),D(!1)}finally{T(!1)}}},disabled:!L.trim()||F,children:F?"...":y("diff.commit")})]})]})})]})}],14842);var g=e.i(538059);let j=(0,e.i(572989).default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);e.s(["TaskMergeConfirmDialog",0,function({open:e,onOpenChange:r,taskId:a,taskTitle:n,baseBranch:i,fileCount:l,commitCount:d,commitLog:m=[],onMergeComplete:u}){let x=(0,g.useRouter)(),[f,p]=(0,s.useState)(!1),[b,w]=(0,s.useState)(null),N=async()=>{p(!0),w(null);try{let e=await fetch(`/api/tasks/${a}/merge`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(e.ok){r(!1),u(),x.refresh();return}let t=await e.json().catch(()=>({error:"Merge failed"}));409===e.status?w(`Merge conflicts detected: ${Array.isArray(t.conflictFiles)?t.conflictFiles.join(", "):"unknown files"}`):w(t.error??"Merge failed")}catch{w("Network error — merge failed")}finally{p(!1)}};return(0,t.jsx)(h.Dialog,{open:e,onOpenChange:r,children:(0,t.jsxs)(h.DialogContent,{showCloseButton:!0,className:"sm:max-w-md",children:[(0,t.jsx)(h.DialogHeader,{children:(0,t.jsxs)(h.DialogTitle,{className:"flex items-center gap-2",children:[(0,t.jsx)(j,{className:"h-4 w-4 text-emerald-400"}),"Confirm Merge"]})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-muted/30 p-3 space-y-2.5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Target branch"}),(0,t.jsx)("code",{className:"text-xs font-mono bg-muted px-2 py-0.5 rounded text-foreground",children:i})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Changed files"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:l})]}),(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:"Commits"}),(0,t.jsx)("span",{className:"text-xs font-medium text-foreground",children:d})]})]}),m.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground mb-1 block",children:"Commits"}),(0,t.jsx)("div",{className:"rounded-md border border-border bg-muted/30 p-2 space-y-1 max-h-32 overflow-y-auto",children:m.map((e,s)=>(0,t.jsx)("div",{className:"text-xs font-mono text-foreground/80",children:e},s))})]}),b&&(0,t.jsx)("div",{className:"rounded-lg border border-red-500/20 bg-red-500/10 px-3 py-2",children:(0,t.jsx)("p",{className:"text-xs text-red-400",children:b})})]}),(0,t.jsxs)(h.DialogFooter,{children:[(0,t.jsx)(c.Button,{variant:"outline",onClick:()=>r(!1),disabled:f,children:"Cancel"}),(0,t.jsx)(c.Button,{onClick:N,disabled:f,className:"gap-2",children:f?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.Loader2,{className:"h-4 w-4 animate-spin"}),"Merging..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(j,{className:"h-4 w-4"}),"Confirm Merge"]})})]})]})})}],865514)},491911,314411,e=>{"use strict";let t=(0,e.i(572989).default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);e.s(["default",0,t],314411),e.s(["File",0,t],491911)},989383,769824,e=>{"use strict";var t=e.i(572989);let s=(0,t.default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);e.s(["Clock",0,s],989383);let r=(0,t.default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);e.s(["History",0,r],769824)},244354,e=>{"use strict";async function t(e,s,r={}){let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:s,path:e,...r})});if(!a.ok)throw Error((await a.json()).error||`${s} failed`);return a.json()}e.s(["gitAction",0,t])},48019,782516,755696,886156,586564,719493,436539,e=>{"use strict";var t=e.i(572989);let s=(0,t.default)("file-plus",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}],["path",{d:"M12 18v-6",key:"17g6i2"}]]);e.s(["FilePlus",0,s],48019);let r=(0,t.default)("file-minus",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}]]);e.s(["FileMinus",0,r],782516);let a=(0,t.default)("file-question-mark",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}]]);e.s(["FileQuestion",0,a],755696);let n=(0,t.default)("file-pen",[["path",{d:"M12.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v9.34",key:"o6klzx"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10.378 12.622a1 1 0 0 1 3 3.003L8.36 20.637a2 2 0 0 1-.854.506l-2.867.837a.5.5 0 0 1-.62-.62l.836-2.869a2 2 0 0 1 .506-.853z",key:"zhnas1"}]]);e.s(["FileEdit",0,n],886156);let i=(0,t.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,i],586564);let l=(0,t.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);e.s(["ArrowUp",0,l],719493);let o=(0,t.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);e.s(["Minus",0,o],436539)},375306,e=>{"use strict";let t=(0,e.i(572989).default)("arrow-up-from-line",[["path",{d:"m18 9-6-6-6 6",key:"kcunyi"}],["path",{d:"M12 3v14",key:"7cf3v8"}],["path",{d:"M5 21h14",key:"11awu3"}]]);e.s(["ArrowUpFromLine",0,t],375306)},515135,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(491911),a=e.i(48019),n=e.i(782516),i=e.i(755696),l=e.i(886156),o=e.i(400355),c=e.i(586564),d=e.i(719493),m=e.i(597746),h=e.i(368490),u=e.i(232280),x=e.i(977982),f=e.i(436539),p=e.i(232545),g=e.i(49007),j=e.i(194358),b=e.i(487278),w=e.i(375306);let N=(0,e.i(572989).default)("undo-2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);var y=e.i(226145),v=e.i(738690),k=e.i(242941),C=e.i(998626),S=e.i(519455),M=e.i(755146),D=e.i(759684),L=e.i(746798),A=e.i(776639),F=e.i(793479),T=e.i(624687),B=e.i(533499);function E({open:e,onOpenChange:r,branches:a,currentBranch:n,localPath:i,onCreated:l,onError:c}){let{t:d}=(0,B.useI18n)(),[h,x]=(0,s.useState)(""),[f,p]=(0,s.useState)(n),[g,j]=(0,s.useState)(""),[b,w]=(0,s.useState)(!1),[N,k]=(0,s.useState)(""),[C,M]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&(x(""),p(n),j(""),k(""))},[e,n]);let D=[...new Set(a)].filter(e=>e.toLowerCase().includes(N.toLowerCase())),L=async()=>{if(h.trim()){w(!0);try{let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"create-branch",path:i,branch:h.trim(),baseBranch:f})});if(e.ok)r(!1),l();else{let t=await e.json();c(t.error||"Unknown error")}}catch{c("Network error")}finally{w(!1)}}};return(0,t.jsx)(A.Dialog,{open:e,onOpenChange:r,children:(0,t.jsxs)(A.DialogContent,{className:"sm:max-w-sm",children:[(0,t.jsx)(A.DialogHeader,{children:(0,t.jsx)(A.DialogTitle,{children:d("git.createBranch")})}),(0,t.jsxs)("div",{className:"space-y-3 py-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.branchName")}),(0,t.jsx)(F.Input,{value:h,onChange:e=>x(e.target.value),placeholder:d("git.branchNamePlaceholder"),className:"mt-1.5 font-mono text-xs",onKeyDown:e=>"Enter"===e.key&&L()})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.baseBranch")}),(0,t.jsxs)("div",{className:"relative mt-1.5",children:[(0,t.jsxs)("button",{onClick:()=>M(!C),className:"flex w-full items-center justify-between rounded-lg border border-border bg-muted/50 px-3 py-2 text-left transition-colors hover:bg-accent",children:[(0,t.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",title:f,children:f})]}),(0,t.jsx)(u.ChevronDown,{className:`h-3 w-3 text-muted-foreground transition-transform ${C?"rotate-180":""}`})]}),C&&(0,t.jsxs)("div",{className:"absolute left-0 right-0 top-full z-20 mt-1 rounded-lg border border-border bg-popover shadow-xl",children:[(0,t.jsx)("div",{className:"border-b border-border p-1.5",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(v.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground"}),(0,t.jsx)("input",{value:N,onChange:e=>k(e.target.value),placeholder:"Filter...",autoFocus:!0,className:"h-7 w-full rounded-md bg-muted/50 pl-7 pr-2 text-xs text-foreground placeholder-muted-foreground outline-none focus:ring-1 focus:ring-ring"})]})}),(0,t.jsx)("div",{className:"max-h-40 overflow-auto py-1",children:D.map(e=>(0,t.jsxs)("button",{onClick:()=>{p(e),M(!1)},className:`flex w-full items-center gap-2 px-3 py-1.5 text-left transition-colors ${e===f?"bg-emerald-500/10 text-emerald-400":"text-secondary-foreground hover:bg-accent"}`,children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e}),e===f&&(0,t.jsx)(m.Check,{className:"h-3 w-3 ml-auto shrink-0"})]},e))})]})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:d("git.branchDesc")}),(0,t.jsx)(T.Textarea,{value:g,onChange:e=>j(e.target.value),placeholder:d("git.branchDescPlaceholder"),rows:2,className:"mt-1.5 w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder-muted-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring resize-none"})]})]}),(0,t.jsxs)(A.DialogFooter,{children:[(0,t.jsx)(S.Button,{variant:"outline",onClick:()=>r(!1),children:d("common.cancel")}),(0,t.jsxs)(S.Button,{onClick:L,disabled:!h.trim()||b,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[b?(0,t.jsx)(o.Loader2,{className:"h-3 w-3 animate-spin mr-1"}):null,d("common.create")]})]})]})})}var I=e.i(360112),$=e.i(244354);let R={modified:l.FileEdit,added:a.FilePlus,deleted:n.FileMinus,untracked:i.FileQuestion,renamed:l.FileEdit},z={modified:"text-amber-400",added:"text-emerald-400",deleted:"text-rose-400",untracked:"text-muted-foreground",renamed:"text-sky-400"},P={modified:"M",added:"A",deleted:"D",untracked:"U",renamed:"R"};function U(e){let t={name:"",path:"",isDir:!0,children:[]};for(let s of e){let e=s.file.split("/"),r=t;for(let t=0;t<e.length;t++){let a=e[t],n=t===e.length-1,i=e.slice(0,t+1).join("/");if(n)r.children.push({name:a,path:i,isDir:!1,children:[],file:s});else{let e=r.children.find(e=>e.isDir&&e.name===a);e||(e={name:a,path:i,isDir:!0,children:[]},r.children.push(e)),r=e}}}return(function e(t){if(t.isDir&&(t.children=t.children.map(e),1===t.children.length&&t.children[0].isDir&&""!==t.name)){let e=t.children[0];return{...e,name:`${t.name}/${e.name}`}}return t})(t).children.sort((e,t)=>e.isDir!==t.isDir?e.isDir?-1:1:e.name.localeCompare(t.name))}function G({label:e,count:r,labelColor:a,tree:n,batchAction:i,batchLabel:l,batchIcon:o,onFileClick:c,onFileAction:d,fileActionIcon:m,fileActionLabel:x,onFileSecondaryAction:f,fileSecondaryIcon:p,fileSecondaryLabel:g}){let[j,b]=(0,s.useState)(!0);return 0===r?null:(0,t.jsxs)("div",{className:"border-b border-border",children:[(0,t.jsxs)("div",{className:"group flex items-center justify-between px-2 py-1.5 hover:bg-accent/50 transition-colors",children:[(0,t.jsxs)("button",{onClick:()=>b(!j),className:"flex items-center gap-1 flex-1 min-w-0",children:[j?(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3 shrink-0 text-muted-foreground"}):(0,t.jsx)(h.ChevronRight,{className:"h-3 w-3 shrink-0 text-muted-foreground"}),(0,t.jsxs)("span",{className:`text-[10px] font-semibold uppercase tracking-wider ${a}`,children:[e," (",r,")"]})]}),(0,t.jsx)(S.Button,{variant:"ghost",size:"icon-xs",onClick:i,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity","aria-label":l,children:o})]}),j&&(0,t.jsx)("div",{className:"pb-1",children:n.map(e=>(0,t.jsx)(O,{node:e,depth:0,onFileClick:c,onFileAction:d,fileActionIcon:m,fileActionLabel:x,onFileSecondaryAction:f,fileSecondaryIcon:p,fileSecondaryLabel:g},e.path))})]})}function O({node:e,depth:a,onFileClick:n,onFileAction:i,fileActionIcon:l,fileActionLabel:o,onFileSecondaryAction:c,fileSecondaryIcon:d,fileSecondaryLabel:m}){let[f,p]=(0,s.useState)(!0),g={paddingLeft:`calc(${a} * 8px + 4px)`};if(e.isDir)return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{onClick:()=>p(!f),className:"flex w-full items-center gap-1 py-0.5 px-1 rounded-sm min-h-[28px] hover:bg-accent hover:text-accent-foreground transition-colors text-left",style:g,children:[f?(0,t.jsx)(u.ChevronDown,{className:"h-3 w-3 shrink-0 text-muted-foreground"}):(0,t.jsx)(h.ChevronRight,{className:"h-3 w-3 shrink-0 text-muted-foreground"}),(0,t.jsx)(x.Folder,{className:"h-3.5 w-3.5 shrink-0 text-amber-400"}),(0,t.jsx)("span",{className:"text-[13px] text-muted-foreground truncate",children:e.name})]}),f&&e.children.sort((e,t)=>e.isDir!==t.isDir?e.isDir?-1:1:e.name.localeCompare(t.name)).map(e=>(0,t.jsx)(O,{node:e,depth:a+1,onFileClick:n,onFileAction:i,fileActionIcon:l,fileActionLabel:o,onFileSecondaryAction:c,fileSecondaryIcon:d,fileSecondaryLabel:m},e.path))]});let j=e.file,b=R[j.status]||r.File,w=z[j.status]||"text-muted-foreground",N=P[j.status]||"?";return(0,t.jsxs)("div",{className:"group flex items-center gap-1 py-0.5 px-1 rounded-sm min-h-[28px] hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer",style:g,onClick:()=>n(j),children:[(0,t.jsx)("span",{className:"h-3 w-3 shrink-0"}),(0,t.jsx)(b,{className:`h-3.5 w-3.5 shrink-0 ${w}`}),(0,t.jsx)("span",{className:"text-[13px] text-foreground truncate flex-1",children:e.name}),(0,t.jsx)("span",{className:`text-[11px] font-mono font-bold shrink-0 mr-1 ${w}`,children:N}),c&&(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:e=>{e.stopPropagation(),c(j.file)},className:"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:bg-destructive/20 hover:text-destructive transition-all","aria-label":m??"",children:d}),m&&(0,t.jsx)(L.TooltipContent,{side:"bottom",children:m})]}),(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:e=>{e.stopPropagation(),i(j.file)},className:"shrink-0 rounded px-1 text-xs font-mono text-muted-foreground opacity-0 group-hover:opacity-100 hover:bg-background hover:text-foreground transition-all mr-1","aria-label":o??"",children:l}),o&&(0,t.jsx)(L.TooltipContent,{side:"bottom",children:o})]})]})}e.s(["EditorGitPanel",0,function({localPath:e,onFileSelect:r,mode:a="project"}){let n="task"===a,{t:i}=(0,B.useI18n)(),[l,h]=(0,s.useState)(null),[x,A]=(0,s.useState)(!0),[F,T]=(0,s.useState)(""),[R,z]=(0,s.useState)(!1),[P,O]=(0,s.useState)(!1),[H,W]=(0,s.useState)(!1),[V,K]=(0,s.useState)(!1),[q,J]=(0,s.useState)(!1),[Q,X]=(0,s.useState)(""),Y=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(q)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e);function e(e){Y.current&&!Y.current.contains(e.target)&&J(!1)}},[q]);let[Z,_]=(0,s.useState)(!1),ee=(0,s.useCallback)(async()=>{try{let t=await fetch(`/api/git?path=${encodeURIComponent(e)}`);if(t.ok){let s=await t.json();h({changedFiles:s.changedFiles??[],ahead:s.ahead??0,behind:s.behind??0,remoteUrl:s.remoteUrl??"",currentBranch:s.currentBranch??"",branches:s.branches??[],remoteBranches:s.remoteBranches??[],topLevel:s.topLevel??e})}}catch{}finally{A(!1)}},[e]);(0,s.useEffect)(()=>{ee();let e=setInterval(ee,5e3);return()=>clearInterval(e)},[ee]);let et=async t=>{try{await (0,$.gitAction)(e,"stage",{files:t}),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},es=async t=>{try{await (0,$.gitAction)(e,"unstage",{files:t}),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},er=async()=>{if(F.trim()){z(!0);try{await (0,$.gitAction)(e,"commit",{message:F}),T(""),I.toast.success(i("git.commitSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{z(!1)}}},ea=async t=>{O(!0);try{await (0,$.gitAction)(e,"pull",t?{branch:t}:{}),I.toast.success(i("git.pullSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{O(!1)}},en=async t=>{W(!0);try{await (0,$.gitAction)(e,"push",t?{branch:t}:{}),I.toast.success(i("git.pushSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{W(!1)}},ei=async()=>{K(!0);try{await (0,$.gitAction)(e,"fetch"),I.toast.success(i("git.fetchSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}finally{K(!1)}},el=async t=>{try{await (0,$.gitAction)(e,"checkout",{branch:t}),J(!1),I.toast.success(`${i("git.switchSuccess")} ${t}`),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},eo=async()=>{try{await (0,$.gitAction)(e,"stash-save",{message:F||void 0}),T(""),I.toast.success(i("git.stashSaved")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},ec=async()=>{try{await (0,$.gitAction)(e,"stash-pop",{index:0}),I.toast.success(i("git.stashApplied")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},ed=async t=>{try{await (0,$.gitAction)(e,"discard-file",{file:t}),I.toast.success(i("git.discardFileSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},em=async()=>{try{await (0,$.gitAction)(e,"discard-all"),I.toast.success(i("git.discardSuccess")),await ee()}catch(e){I.toast.error(e instanceof Error?e.message:String(e))}},eh=async t=>{if("deleted"===t.status)return;let s=l?.topLevel??e;try{let a=await (0,$.gitAction)(e,"show",{file:t.file});r?.(t.file,a.content??"",s)}catch{r?.(t.file,"",s)}},eu=l?.changedFiles.filter(e=>e.staged)??[],ex=l?.changedFiles.filter(e=>!e.staged)??[],ef=(0,s.useMemo)(()=>U(eu),[eu]),ep=(0,s.useMemo)(()=>U(ex),[ex]);if(x)return(0,t.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,t.jsx)(o.Loader2,{className:"h-4 w-4 animate-spin text-muted-foreground"})});if(!l)return null;function eg(e){let t=[];for(let s of e)s.isDir?t.push(...eg(s.children)):s.file&&t.push(s.file.file);return t}let ej=[...l?.branches??[],...(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e))],eb=Q?ej.filter(e=>e.toLowerCase().includes(Q.toLowerCase())):ej;return(0,t.jsxs)("div",{className:"flex flex-col h-full overflow-hidden",children:[(0,t.jsxs)("div",{className:"shrink-0 px-2 pt-2 pb-1 flex items-center gap-1",children:[n?(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{render:(0,t.jsxs)("div",{className:"flex flex-1 min-w-0 items-center gap-1.5 rounded-md border border-border bg-muted/30 px-2 py-1.5",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",children:l?.currentBranch||"—"})]})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",className:"font-mono text-xs",children:l?.currentBranch||"—"})]}):(0,t.jsxs)("div",{className:"relative flex-1 min-w-0",ref:Y,children:[(0,t.jsxs)("button",{onClick:()=>{J(!q),X("")},className:"flex w-full items-center justify-between rounded-md border border-border bg-muted/50 px-2 py-1.5 text-left transition-colors hover:bg-accent",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0 text-emerald-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs text-foreground",title:l?.currentBranch||void 0,children:l?.currentBranch||"—"})]}),(0,t.jsx)(u.ChevronDown,{className:`h-3 w-3 shrink-0 text-muted-foreground transition-transform ${q?"rotate-180":""}`})]}),q&&(0,t.jsxs)("div",{className:"absolute left-0 top-full z-30 mt-1 min-w-full w-max max-w-[320px] rounded-lg border border-border bg-popover shadow-xl",children:[(0,t.jsx)("div",{className:"border-b border-border p-1.5",children:(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(v.Search,{className:"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-muted-foreground"}),(0,t.jsx)("input",{value:Q,onChange:e=>X(e.target.value),placeholder:"Filter...",autoFocus:!0,className:"h-7 w-full rounded-md bg-muted/50 pl-7 pr-2 text-xs text-foreground placeholder-muted-foreground outline-none focus:ring-1 focus:ring-ring"})]})}),(0,t.jsxs)("div",{className:"max-h-48 overflow-auto py-1",children:[(l?.branches??[]).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).length>0&&(0,t.jsx)("p",{className:"px-3 pt-1 pb-0.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:i("git.localBranches")}),(l?.branches??[]).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).map(e=>{let s=e===l?.currentBranch;return(0,t.jsxs)("button",{onClick:()=>{s?J(!1):el(e)},className:`flex w-full items-center gap-2 px-3 py-1 text-left transition-colors ${s?"bg-emerald-500/10 text-emerald-400":"text-secondary-foreground hover:bg-accent"}`,children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 shrink-0"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e}),s&&(0,t.jsx)(m.Check,{className:"h-3 w-3 ml-auto shrink-0"})]},`local-${e}`)}),(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e)).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).length>0&&(0,t.jsx)("p",{className:"px-3 pt-2 pb-0.5 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:i("git.remoteBranches")}),(l?.remoteBranches??[]).filter(e=>!l?.branches?.includes(e)).filter(e=>e.toLowerCase().includes(Q.toLowerCase())).map(e=>(0,t.jsxs)("button",{onClick:()=>el(e),className:"flex w-full items-center gap-2 px-3 py-1 text-left text-secondary-foreground transition-colors hover:bg-accent",children:[(0,t.jsx)(k.Globe,{className:"h-3 w-3 shrink-0 text-sky-400"}),(0,t.jsx)("span",{className:"truncate font-mono text-xs",title:e,children:e})]},`remote-${e}`)),0===eb.length&&(0,t.jsx)("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:"No branches found"})]})]})]}),!n&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:ei,disabled:V,className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Fetch",children:(0,t.jsx)(j.RefreshCw,{className:`h-3.5 w-3.5 ${V?"animate-spin":""}`})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",children:"Fetch"})]}),(0,t.jsxs)(L.Tooltip,{children:[(0,t.jsx)(L.TooltipTrigger,{onClick:()=>{J(!1),_(!0)},className:"shrink-0 inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground transition-colors","aria-label":i("git.createBranch"),children:(0,t.jsx)(p.Plus,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(L.TooltipContent,{side:"bottom",children:i("git.createBranch")})]})]})]}),(0,t.jsxs)("div",{className:"shrink-0 px-2 pb-2 space-y-1.5 border-b border-border",children:[(0,t.jsx)("textarea",{value:F,onChange:e=>T(e.target.value),placeholder:i("git.commitMsgPlaceholder"),rows:3,className:"w-full rounded-md border border-border bg-background px-2 py-1.5 text-xs text-foreground placeholder-muted-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring resize-none",onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&er()}}),(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsxs)(S.Button,{variant:"default",className:"flex-1 h-7 gap-1.5 text-xs",onClick:er,disabled:R||!F.trim()||0===eu.length,children:[R?(0,t.jsx)(o.Loader2,{className:"h-3 w-3 animate-spin"}):(0,t.jsx)(m.Check,{className:"h-3 w-3"}),i("git.commit")]}),(0,t.jsxs)(M.DropdownMenu,{children:[(0,t.jsx)(M.DropdownMenuTrigger,{render:(0,t.jsx)(S.Button,{variant:"outline",size:"icon-xs",className:"h-7 w-7 shrink-0"}),children:(0,t.jsx)(g.MoreHorizontal,{className:"h-3.5 w-3.5"})}),(0,t.jsxs)(M.DropdownMenuContent,{align:"end",side:"bottom",className:"w-52",children:[(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.commit")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:er,disabled:!F.trim()||0===eu.length,children:[(0,t.jsx)(m.Check,{className:"h-3.5 w-3.5 mr-2"}),i("git.commit")]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.changes")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>et(eg(ep)),disabled:0===ex.length,children:[(0,t.jsx)(p.Plus,{className:"h-3.5 w-3.5 mr-2"}),i("git.stageAll")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>es(eg(ef)),disabled:0===eu.length,children:[(0,t.jsx)(f.Minus,{className:"h-3.5 w-3.5 mr-2"}),i("git.unstageAll")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:em,disabled:0===ex.length,children:[(0,t.jsx)(N,{className:"h-3.5 w-3.5 mr-2"}),i("git.discardAll")]})]}),!n&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.sync")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(),disabled:P,children:[(0,t.jsx)(c.ArrowDown,{className:"h-3.5 w-3.5 mr-2"}),i("git.pull")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(),disabled:H,children:[(0,t.jsx)(d.ArrowUp,{className:"h-3.5 w-3.5 mr-2"}),i("git.push")]}),(0,t.jsxs)(M.DropdownMenuSub,{children:[(0,t.jsxs)(M.DropdownMenuSubTrigger,{disabled:P,children:[(0,t.jsx)(c.ArrowDown,{className:"h-3.5 w-3.5 mr-2"}),i("git.pullFrom"),"..."]}),(0,t.jsxs)(M.DropdownMenuSubContent,{className:"max-h-60 overflow-y-auto",children:[(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-emerald-400"}),l.currentBranch,l.behind>0&&(0,t.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:["↓",l.behind]})]}),l.remoteBranches.filter(e=>e!==l.currentBranch).map(e=>(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>ea(e),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-sky-400"}),e]},e))]})]}),(0,t.jsxs)(M.DropdownMenuSub,{children:[(0,t.jsxs)(M.DropdownMenuSubTrigger,{disabled:H,children:[(0,t.jsx)(d.ArrowUp,{className:"h-3.5 w-3.5 mr-2"}),i("git.pushTo"),"..."]}),(0,t.jsxs)(M.DropdownMenuSubContent,{className:"max-h-60 overflow-y-auto",children:[(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-emerald-400"}),l.currentBranch,l.ahead>0&&(0,t.jsxs)("span",{className:"ml-auto text-[10px] text-muted-foreground",children:["↑",l.ahead]})]}),l.remoteBranches.filter(e=>e!==l.currentBranch).map(e=>(0,t.jsxs)(M.DropdownMenuItem,{onClick:()=>en(e),children:[(0,t.jsx)(y.GitBranch,{className:"h-3 w-3 mr-2 text-sky-400"}),e]},e))]})]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:ei,disabled:V,children:[(0,t.jsx)(j.RefreshCw,{className:`h-3.5 w-3.5 mr-2 ${V?"animate-spin":""}`}),i("git.fetchAll")]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuGroup,{children:[(0,t.jsx)(M.DropdownMenuLabel,{children:i("git.stash")}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:eo,disabled:0===l.changedFiles.length,children:[(0,t.jsx)(b.Archive,{className:"h-3.5 w-3.5 mr-2"}),i("git.stashSave")]}),(0,t.jsxs)(M.DropdownMenuItem,{onClick:ec,children:[(0,t.jsx)(w.ArrowUpFromLine,{className:"h-3.5 w-3.5 mr-2"}),i("git.stashPopLatest")]})]})]}),(0,t.jsx)(M.DropdownMenuSeparator,{}),(0,t.jsxs)(M.DropdownMenuItem,{disabled:!0,className:"text-muted-foreground",children:[(0,t.jsx)(y.GitBranch,{className:"h-3.5 w-3.5 mr-2"}),l.currentBranch]})]})]})]})]}),(0,t.jsxs)(D.ScrollArea,{className:"flex-1 min-h-0",children:[(0,t.jsx)(G,{label:i("git.stagedChanges"),count:eu.length,labelColor:"text-emerald-400",tree:ef,batchAction:()=>es(eg(ef)),batchLabel:i("git.unstageAll"),batchIcon:(0,t.jsx)(f.Minus,{className:"h-3 w-3"}),onFileClick:eh,onFileAction:e=>es([e]),fileActionIcon:"−",fileActionLabel:i("git.unstageFile")}),(0,t.jsx)(G,{label:i("git.unstagedChanges"),count:ex.length,labelColor:"text-muted-foreground",tree:ep,batchAction:()=>et(eg(ep)),batchLabel:i("git.stageAll"),batchIcon:(0,t.jsx)(p.Plus,{className:"h-3 w-3"}),onFileClick:eh,onFileAction:e=>et([e]),fileActionIcon:"+",fileActionLabel:i("git.stageFile"),onFileSecondaryAction:e=>ed(e),fileSecondaryIcon:(0,t.jsx)(C.Trash2,{className:"h-2.5 w-2.5"}),fileSecondaryLabel:i("git.discardFile")}),0===l.changedFiles.length&&(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[(0,t.jsx)(m.Check,{className:"h-5 w-5 text-emerald-400 mb-2"}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:i("git.noChanges")})]})]}),(0,t.jsx)(E,{open:Z,onOpenChange:_,branches:[...l?.branches??[],...l?.remoteBranches??[]],currentBranch:l?.currentBranch??"",localPath:e,onCreated:async()=>{I.toast.success(i("git.createSuccess")),await ee()},onError:e=>I.toast.error(`${i("git.createFailed")}: ${e}`)})]})}],515135)},501681,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("6068855649e7a729ec92e44a9a0407aefde90bf43c",t.callServer,void 0,t.findSourceMapURL,"updateTask");e.s(["updateTask",0,s])},918520,280919,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("7c7aab200ad6049d5b59c13639807c1ea11eaf8a81",t.callServer,void 0,t.findSourceMapURL,"startPtyExecutionSafe");e.s(["startPtyExecutionSafe",0,s],918520);let r=(0,t.createServerReference)("40e49611f360e36ec058b150612324ae457fde0380",t.callServer,void 0,t.findSourceMapURL,"continueLatestPtyExecution");e.s(["continueLatestPtyExecution",0,r],280919)},432307,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("401eac185ce9b2392c49243858ba5f8eefbc3a292c",t.callServer,void 0,t.findSourceMapURL,"getTaskExecutions");e.s(["getTaskExecutions",0,s])},628952,143366,764923,e=>{"use strict";var t=e.i(514798);let s=(0,t.createServerReference)("6055f0b9b800feb40d38fd60752c20caf2c2a27ac8",t.callServer,void 0,t.findSourceMapURL,"updateTaskStatus");e.s(["updateTaskStatus",0,s],628952);let r=(0,t.createServerReference)("400287b9d994490c077258a68c39b845bd76079c26",t.callServer,void 0,t.findSourceMapURL,"checkWorktreeClean");e.s(["checkWorktreeClean",0,r],143366);let a=(0,t.createServerReference)("60b74897d0e02dc94340275461ab7562e52cd211b4",t.callServer,void 0,t.findSourceMapURL,"commitWorktreeChanges");e.s(["commitWorktreeChanges",0,a],764923)},486077,e=>{"use strict";let t=(0,e.i(572989).default)("lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);e.s(["Lightbulb",0,t],486077)},326883,e=>{"use strict";var t=e.i(289721),s=e.i(965652),r=e.i(232280),a=e.i(472074),n=e.i(301348),i=e.i(181209),l=e.i(400355),o=e.i(989383),c=e.i(12659),d=e.i(922541),m=e.i(486077),h=e.i(769824),u=e.i(519455),x=e.i(912505),f=e.i(533499);function p({status:e}){switch(e){case"COMPLETED":return(0,t.jsx)(n.CheckCircle2,{className:"h-4 w-4 text-emerald-400"});case"FAILED":return(0,t.jsx)(i.XCircle,{className:"h-4 w-4 text-red-400"});case"RUNNING":return(0,t.jsx)(l.Loader2,{className:"h-4 w-4 text-blue-400 animate-spin"});default:return(0,t.jsx)(o.Clock,{className:"h-4 w-4 text-neutral-500"})}}e.s(["ExecutionTimeline",0,function({executions:e,onResume:n,onContinueLatest:i}){let{t:l,locale:o}=(0,f.useI18n)(),[g,j]=(0,s.useState)(null),[b,w]=(0,s.useState)(null);return 0===e.length?(0,t.jsx)(x.EmptyState,{icon:h.History,title:l("execution.noHistory")}):(0,t.jsxs)("div",{className:"space-y-2 p-3",children:[(0,t.jsx)("p",{className:"px-1 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:l("execution.history")}),e.map(s=>{let h=function(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}(s.gitStats??null),x=function(e,t){if(!e||!t)return"";let s=new Date(t).getTime()-new Date(e).getTime();if(s<0)return"";let r=Math.floor(s/1e3);if(r<60)return`${r}s`;let a=Math.floor(r/60);if(a<60)return`${a}m ${r%60}s`;let n=Math.floor(a/60);return`${n}h ${a%60}m`}(s.startedAt??null,s.endedAt??null),f=g===s.id;return(0,t.jsxs)("div",{className:"rounded-lg border border-border bg-background/50 overflow-hidden",children:[(0,t.jsxs)("div",{className:"p-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(p,{status:s.status}),(0,t.jsx)("span",{className:`font-medium ${function(e){switch(e){case"COMPLETED":return"text-emerald-400";case"FAILED":return"text-red-400";case"RUNNING":return"text-blue-400";default:return"text-neutral-400"}}(s.status)}`,children:function(e,t){switch(e){case"COMPLETED":return t("execution.success");case"FAILED":return t("execution.failed");case"RUNNING":return t("execution.running");default:return e}}(s.status,l)}),(0,t.jsx)("span",{className:"text-muted-foreground",children:function(e,t="zh"){if(!e)return"";let s=new Date(e),r=Math.floor((new Date().getTime()-s.getTime())/864e5),a="zh"===t?"zh-CN":"en-US",n=s.toLocaleTimeString(a,{hour:"2-digit",minute:"2-digit"});return 0===r?n:1===r?"zh"===t?`昨天 ${n}`:`Yesterday ${n}`:r<7?"zh"===t?`${r}天前 ${n}`:`${r}d ago ${n}`:s.toLocaleDateString(a,{month:"2-digit",day:"2-digit"})+" "+n}(s.startedAt??null,o)}),x&&(0,t.jsxs)("span",{className:"text-muted-foreground/60",children:["(",x,")"]})]}),(0,t.jsx)("p",{className:"mt-1.5 text-sm text-foreground/80 line-clamp-2",children:s.summary||l("execution.noSummary")}),h&&(h.commits||h.filesChanged)&&(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2 text-[11px] text-muted-foreground font-mono",children:[h.commits?(0,t.jsxs)("span",{children:[h.commits," ",l("execution.commits")]}):null,h.filesChanged?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),(0,t.jsxs)("span",{children:[h.filesChanged," ",l("execution.files")]})]}):null,h.insertions||h.deletions?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"·"}),h.insertions?(0,t.jsxs)("span",{className:"text-emerald-500",children:["+",h.insertions]}):null,h.deletions?(0,t.jsxs)("span",{className:"text-red-400",children:["-",h.deletions]}):null]}):null]}),s.insightNote&&(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsxs)("button",{onClick:()=>w(b===s.id?null:s.id),className:"flex items-center gap-1.5 text-xs text-primary/90 hover:text-primary transition-colors",children:[(0,t.jsx)(m.Lightbulb,{className:"h-3.5 w-3.5"}),(0,t.jsxs)("span",{className:"font-medium",children:[l("execution.insight"),":"]}),(0,t.jsx)("span",{className:"text-foreground/70 truncate max-w-[200px]",children:s.insightNote.title}),b===s.id?(0,t.jsx)(a.ChevronUp,{className:"h-3 w-3"}):(0,t.jsx)(r.ChevronDown,{className:"h-3 w-3"})]}),b===s.id&&(0,t.jsx)("div",{className:"mt-2 rounded-md bg-primary/[0.06] border border-primary/10 p-3 text-xs text-foreground/80 whitespace-pre-wrap",children:s.insightNote.content})]}),(0,t.jsxs)("div",{className:"mt-2.5 flex items-center gap-2",children:[s.sessionId&&n?(0,t.jsxs)(u.Button,{size:"sm",onClick:()=>n(s.sessionId),className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,t.jsx)(c.PlayCircle,{className:"h-3.5 w-3.5"}),l("execution.resume")]}):!s.sessionId&&"FAILED"===s.status&&s.id===e[0]?.id&&i?(0,t.jsxs)(u.Button,{size:"sm",onClick:i,className:"bg-blue-500/15 text-blue-300 ring-1 ring-blue-500/20 hover:bg-blue-500/25",children:[(0,t.jsx)(d.RotateCcw,{className:"h-3.5 w-3.5"}),l("execution.tryRecover")]}):null,(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",onClick:()=>j(f?null:s.id),className:"bg-muted text-muted-foreground",children:[f?(0,t.jsx)(a.ChevronUp,{className:"h-3.5 w-3.5"}):(0,t.jsx)(r.ChevronDown,{className:"h-3.5 w-3.5"}),f?l("execution.collapse"):l("execution.details")]})]})]}),f&&(0,t.jsxs)("div",{className:"border-t border-border px-3 pb-3 space-y-3",children:[s.gitLog&&(0,t.jsxs)("div",{className:"mt-3",children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:l("execution.gitLog")}),(0,t.jsx)("pre",{className:"rounded-md bg-muted/50 p-2.5 text-xs font-mono text-foreground/70 overflow-x-auto whitespace-pre-wrap",children:s.gitLog.split("\n").slice(0,3).join("\n")})]}),s.terminalLog&&(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground mb-1.5",children:l("execution.terminalOutput")}),(0,t.jsx)("pre",{className:"rounded-md bg-[#0f1419] p-2.5 text-xs font-mono text-neutral-300 overflow-x-auto max-h-48 overflow-y-auto whitespace-pre-wrap",children:s.terminalLog})]}),"FAILED"===s.status&&null!=s.exitCode&&(0,t.jsxs)("p",{className:"text-xs text-red-400/70",children:["Exit code: ",s.exitCode]})]})]},s.id)})]})}])}]);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tower-studio",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.19",
|
|
4
4
|
"description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tower": "bin/tower.mjs"
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
63
63
|
"@prisma/client": "^6.19.2",
|
|
64
|
+
"@vscode/ripgrep": "1.18.0",
|
|
64
65
|
"node-pty": "^1.1.0",
|
|
65
66
|
"prisma": "^6.19.2",
|
|
66
67
|
"tsx": "^4.21.0",
|
package/dist/mcp-server.cjs
CHANGED
|
@@ -26115,7 +26115,7 @@ var require_cache = __commonJS({
|
|
|
26115
26115
|
});
|
|
26116
26116
|
|
|
26117
26117
|
// src/lib/schemas.ts
|
|
26118
|
-
var cuid4, createWorkspaceSchema, updateWorkspaceSchema, createProjectSchema, updateProjectSchema, createTaskSchema, updateTaskSchema, taskStatusSchema, createLabelSchema, createVersionSchema, updateVersionSchema, createVersionTypeSchema, updateVersionTypeSchema;
|
|
26118
|
+
var cuid4, createWorkspaceSchema, updateWorkspaceSchema, reorderWorkspacesSchema, createProjectSchema, updateProjectSchema, createTaskSchema, updateTaskSchema, taskStatusSchema, createLabelSchema, createVersionSchema, updateVersionSchema, createVersionTypeSchema, updateVersionTypeSchema;
|
|
26119
26119
|
var init_schemas3 = __esm({
|
|
26120
26120
|
"src/lib/schemas.ts"() {
|
|
26121
26121
|
"use strict";
|
|
@@ -26129,6 +26129,7 @@ var init_schemas3 = __esm({
|
|
|
26129
26129
|
name: external_exports.string().min(1).max(100).optional(),
|
|
26130
26130
|
description: external_exports.string().max(500).optional()
|
|
26131
26131
|
});
|
|
26132
|
+
reorderWorkspacesSchema = external_exports.array(cuid4).min(1, "At least one workspace id is required");
|
|
26132
26133
|
createProjectSchema = external_exports.object({
|
|
26133
26134
|
name: external_exports.string().min(1, "Name is required").max(100),
|
|
26134
26135
|
alias: external_exports.string().max(100).optional(),
|
|
@@ -26320,6 +26321,8 @@ var init_worktree = __esm({
|
|
|
26320
26321
|
// src/lib/platform.ts
|
|
26321
26322
|
var platform_exports = {};
|
|
26322
26323
|
__export2(platform_exports, {
|
|
26324
|
+
KNOWN_EDITORS: () => KNOWN_EDITORS,
|
|
26325
|
+
detectEditors: () => detectEditors,
|
|
26323
26326
|
detectShells: () => detectShells,
|
|
26324
26327
|
detectTerminalApps: () => detectTerminalApps,
|
|
26325
26328
|
ensurePathInEnv: () => ensurePathInEnv,
|
|
@@ -26552,9 +26555,8 @@ async function detectTerminalApps(platform = process.platform) {
|
|
|
26552
26555
|
if (platform === "darwin") {
|
|
26553
26556
|
const results = [];
|
|
26554
26557
|
for (const t of MAC_TERMINAL_APPS) {
|
|
26555
|
-
|
|
26556
|
-
|
|
26557
|
-
}
|
|
26558
|
+
const installed = await pathExists(`/Applications/${t.bundleName}.app`, platform);
|
|
26559
|
+
results.push({ name: t.name, value: t.bundleName, installed });
|
|
26558
26560
|
}
|
|
26559
26561
|
return results;
|
|
26560
26562
|
}
|
|
@@ -26562,13 +26564,21 @@ async function detectTerminalApps(platform = process.platform) {
|
|
|
26562
26564
|
const results = [];
|
|
26563
26565
|
const wtPath = await resolveCommandPath("wt", { platform });
|
|
26564
26566
|
if (wtPath) {
|
|
26565
|
-
results.push({ name: "Windows Terminal", value: wtPath });
|
|
26567
|
+
results.push({ name: "Windows Terminal", value: wtPath, installed: true });
|
|
26566
26568
|
}
|
|
26567
26569
|
return results;
|
|
26568
26570
|
}
|
|
26569
26571
|
return [];
|
|
26570
26572
|
}
|
|
26571
|
-
|
|
26573
|
+
async function detectEditors(platform = process.platform) {
|
|
26574
|
+
const results = [];
|
|
26575
|
+
for (const e2 of KNOWN_EDITORS) {
|
|
26576
|
+
const installed = !!await resolveCommandPath(e2.command, { platform });
|
|
26577
|
+
results.push({ name: e2.name, command: e2.command, installed });
|
|
26578
|
+
}
|
|
26579
|
+
return results;
|
|
26580
|
+
}
|
|
26581
|
+
var import_node_fs2, import_node_child_process, import_node_path2, CLAUDE_NESTING_VARS, SENSITIVE_KEY_RE, defaultExecSync, MAC_TERMINAL_APPS, KNOWN_EDITORS;
|
|
26572
26582
|
var init_platform = __esm({
|
|
26573
26583
|
"src/lib/platform.ts"() {
|
|
26574
26584
|
"use strict";
|
|
@@ -26592,6 +26602,22 @@ var init_platform = __esm({
|
|
|
26592
26602
|
{ name: "kitty", bundleName: "kitty" },
|
|
26593
26603
|
{ name: "Hyper", bundleName: "Hyper" }
|
|
26594
26604
|
];
|
|
26605
|
+
KNOWN_EDITORS = [
|
|
26606
|
+
{ name: "VS Code", command: "code" },
|
|
26607
|
+
{ name: "VS Code Insiders", command: "code-insiders" },
|
|
26608
|
+
{ name: "Cursor", command: "cursor" },
|
|
26609
|
+
{ name: "Windsurf", command: "windsurf" },
|
|
26610
|
+
{ name: "Zed", command: "zed" },
|
|
26611
|
+
{ name: "Sublime Text", command: "subl" },
|
|
26612
|
+
{ name: "IntelliJ IDEA", command: "idea" },
|
|
26613
|
+
{ name: "WebStorm", command: "webstorm" },
|
|
26614
|
+
{ name: "PyCharm", command: "pycharm" },
|
|
26615
|
+
{ name: "GoLand", command: "goland" },
|
|
26616
|
+
{ name: "RubyMine", command: "rubymine" },
|
|
26617
|
+
{ name: "PhpStorm", command: "phpstorm" },
|
|
26618
|
+
{ name: "CLion", command: "clion" },
|
|
26619
|
+
{ name: "Rider", command: "rider" }
|
|
26620
|
+
];
|
|
26595
26621
|
}
|
|
26596
26622
|
});
|
|
26597
26623
|
|
|
@@ -49031,6 +49057,14 @@ async function updateTaskStatus(taskId, status) {
|
|
|
49031
49057
|
}).catch(() => {
|
|
49032
49058
|
});
|
|
49033
49059
|
}
|
|
49060
|
+
if (status === "DONE" || status === "CANCELLED") {
|
|
49061
|
+
try {
|
|
49062
|
+
const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
|
|
49063
|
+
destroySession2(taskId);
|
|
49064
|
+
} catch (error48) {
|
|
49065
|
+
log.error("PTY session destroy failed", error48, { taskId });
|
|
49066
|
+
}
|
|
49067
|
+
}
|
|
49034
49068
|
if (status === "CANCELLED" && task.project?.localPath) {
|
|
49035
49069
|
try {
|
|
49036
49070
|
await removeWorktree(task.project.localPath, taskId);
|
|
@@ -49072,17 +49106,17 @@ async function deleteTask(taskId) {
|
|
|
49072
49106
|
where: { id: taskId },
|
|
49073
49107
|
include: { project: true }
|
|
49074
49108
|
});
|
|
49109
|
+
try {
|
|
49110
|
+
const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
|
|
49111
|
+
destroySession2(taskId);
|
|
49112
|
+
} catch {
|
|
49113
|
+
}
|
|
49075
49114
|
if (task?.project?.localPath) {
|
|
49076
49115
|
try {
|
|
49077
49116
|
await removeWorktree(task.project.localPath, taskId);
|
|
49078
49117
|
} catch {
|
|
49079
49118
|
}
|
|
49080
49119
|
}
|
|
49081
|
-
try {
|
|
49082
|
-
const { destroySession: destroySession2 } = await Promise.resolve().then(() => (init_session_store(), session_store_exports));
|
|
49083
|
-
destroySession2(taskId);
|
|
49084
|
-
} catch {
|
|
49085
|
-
}
|
|
49086
49120
|
await db2.task.delete({ where: { id: taskId } });
|
|
49087
49121
|
(0, import_cache2.revalidatePath)("/workspaces");
|
|
49088
49122
|
}
|
|
@@ -49131,6 +49165,7 @@ async function getArchivedTasks(projectId) {
|
|
|
49131
49165
|
},
|
|
49132
49166
|
include: {
|
|
49133
49167
|
labels: { include: { label: true } },
|
|
49168
|
+
version: { select: { id: true, number: true, name: true } },
|
|
49134
49169
|
executions: {
|
|
49135
49170
|
orderBy: { createdAt: "desc" },
|
|
49136
49171
|
take: 1
|
|
@@ -49221,13 +49256,14 @@ async function getTaskOverview(taskId) {
|
|
|
49221
49256
|
where: { id: taskId },
|
|
49222
49257
|
include: {
|
|
49223
49258
|
labels: { include: { label: true } },
|
|
49259
|
+
version: { select: { id: true, number: true, name: true } },
|
|
49224
49260
|
project: {
|
|
49225
49261
|
select: { id: true, name: true, type: true, localPath: true, workspaceId: true }
|
|
49226
49262
|
},
|
|
49227
49263
|
executions: {
|
|
49228
49264
|
orderBy: { createdAt: "desc" },
|
|
49229
49265
|
take: 1,
|
|
49230
|
-
select: { summary: true, status: true, endedAt: true, gitStats: true }
|
|
49266
|
+
select: { summary: true, status: true, endedAt: true, gitStats: true, worktreePath: true }
|
|
49231
49267
|
},
|
|
49232
49268
|
_count: { select: { assets: true } }
|
|
49233
49269
|
}
|
|
@@ -49428,6 +49464,18 @@ var import_child_process6 = require("child_process");
|
|
|
49428
49464
|
var import_fs7 = require("fs");
|
|
49429
49465
|
var import_path11 = require("path");
|
|
49430
49466
|
|
|
49467
|
+
// src/lib/config-reader.ts
|
|
49468
|
+
init_db();
|
|
49469
|
+
async function readConfigValue(key, defaultValue) {
|
|
49470
|
+
const row = await db2.systemConfig.findUnique({ where: { key } });
|
|
49471
|
+
if (!row) return defaultValue;
|
|
49472
|
+
try {
|
|
49473
|
+
return JSON.parse(row.value);
|
|
49474
|
+
} catch {
|
|
49475
|
+
return defaultValue;
|
|
49476
|
+
}
|
|
49477
|
+
}
|
|
49478
|
+
|
|
49431
49479
|
// src/lib/file-utils.ts
|
|
49432
49480
|
var fs = __toESM(require("node:fs"));
|
|
49433
49481
|
var path = __toESM(require("node:path"));
|
|
@@ -49473,6 +49521,25 @@ function getAssistantCacheRoot() {
|
|
|
49473
49521
|
assertWithinDataRoot(dir);
|
|
49474
49522
|
return dir;
|
|
49475
49523
|
}
|
|
49524
|
+
var EXT_MIME_MAP = {
|
|
49525
|
+
png: "image/png",
|
|
49526
|
+
jpg: "image/jpeg",
|
|
49527
|
+
jpeg: "image/jpeg",
|
|
49528
|
+
gif: "image/gif",
|
|
49529
|
+
webp: "image/webp",
|
|
49530
|
+
svg: "image/svg+xml",
|
|
49531
|
+
bmp: "image/bmp",
|
|
49532
|
+
ico: "image/x-icon",
|
|
49533
|
+
avif: "image/avif",
|
|
49534
|
+
pdf: "application/pdf",
|
|
49535
|
+
md: "text/markdown",
|
|
49536
|
+
txt: "text/plain",
|
|
49537
|
+
json: "application/json"
|
|
49538
|
+
};
|
|
49539
|
+
function guessMimeType(filename) {
|
|
49540
|
+
const ext = path.extname(filename).slice(1).toLowerCase();
|
|
49541
|
+
return EXT_MIME_MAP[ext];
|
|
49542
|
+
}
|
|
49476
49543
|
var CACHE_UUID_SUFFIX_RE = /-([0-9a-f]{8})(\.[^.]+)$/i;
|
|
49477
49544
|
function stripCacheUuidSuffix(filename) {
|
|
49478
49545
|
return filename.replace(CACHE_UUID_SUFFIX_RE, "$2");
|
|
@@ -49513,7 +49580,7 @@ var taskTools = {
|
|
|
49513
49580
|
}
|
|
49514
49581
|
},
|
|
49515
49582
|
create_task: {
|
|
49516
|
-
description: "Create a new task in a project. Priority defaults to MEDIUM, status defaults to TODO.
|
|
49583
|
+
description: "Create a new task in a project. Priority defaults to MEDIUM, status defaults to TODO. useWorktree (branch isolation) and autoStart (run immediately after create) default to the user's saved preference; pass either explicitly to override for this one task. If the defaults have never been set, the FIRST call (without explicit useWorktree/autoStart) returns { needsDefaultsSetup: true } instead of creating the task \u2014 ask the user their preference, call set_task_defaults once, then call create_task again. Pass versionId to file the task under a project version (use list_versions to discover options). Pass references as file paths to attach as project assets.",
|
|
49517
49584
|
schema: external_exports.object({
|
|
49518
49585
|
projectId: external_exports.string(),
|
|
49519
49586
|
title: external_exports.string(),
|
|
@@ -49522,14 +49589,35 @@ var taskTools = {
|
|
|
49522
49589
|
status: TaskStatus.optional().default("TODO"),
|
|
49523
49590
|
labelIds: external_exports.array(external_exports.string()).optional(),
|
|
49524
49591
|
subPath: external_exports.string().optional(),
|
|
49525
|
-
|
|
49526
|
-
|
|
49527
|
-
|
|
49592
|
+
versionId: external_exports.string().optional().describe("Version to assign the task to. Use list_versions to find valid IDs for the project. Omit for backlog (no version)."),
|
|
49593
|
+
useWorktree: external_exports.boolean().optional().describe("Use a Git worktree for branch isolation. Omit to use the user's saved default; pass explicitly to override this task."),
|
|
49594
|
+
baseBranch: external_exports.string().optional().describe("Base branch for worktree checkout. Only used when useWorktree resolves to true. If omitted, auto-detects the project's current branch."),
|
|
49595
|
+
autoStart: external_exports.boolean().optional().describe("Start execution immediately after creating. Omit to use the user's saved default; pass explicitly to override this task."),
|
|
49528
49596
|
references: external_exports.array(external_exports.string()).max(20).optional()
|
|
49529
49597
|
}),
|
|
49530
49598
|
handler: async (args) => {
|
|
49599
|
+
const explicitWorktree = args.useWorktree !== void 0;
|
|
49600
|
+
const explicitAutoStart = args.autoStart !== void 0;
|
|
49601
|
+
const defaultsConfigured = await readConfigValue("task.mcpDefaultsConfigured", false);
|
|
49602
|
+
if (!defaultsConfigured && !explicitWorktree && !explicitAutoStart) {
|
|
49603
|
+
return {
|
|
49604
|
+
needsDefaultsSetup: true,
|
|
49605
|
+
task: null,
|
|
49606
|
+
message: "\u9996\u6B21\u901A\u8FC7 MCP \u521B\u5EFA\u4EFB\u52A1\uFF0C\u5C1A\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u504F\u597D\u3002\u8BF7\u5411\u7528\u6237\u786E\u8BA4\u4E24\u4E2A\u9009\u62E9\uFF1A(1) \u4EE5\u540E\u65B0\u5EFA\u4EFB\u52A1\u662F\u5426\u9ED8\u8BA4\u4F7F\u7528 Git worktree \u9694\u79BB\uFF1F(2) \u662F\u5426\u9ED8\u8BA4\u521B\u5EFA\u540E\u81EA\u52A8\u542F\u52A8\u6267\u884C\uFF1F\u62FF\u5230\u9009\u62E9\u540E\u8C03\u7528 set_task_defaults({ useWorktree, autoStart }) \u4FDD\u5B58\uFF08\u53EA\u9700\u4E00\u6B21\uFF0C\u4EE5\u540E\u4E0D\u518D\u8BE2\u95EE\uFF09\uFF0C\u7136\u540E\u91CD\u65B0\u8C03\u7528 create_task\u3002\u82E5\u67D0\u4E2A\u4EFB\u52A1\u9700\u8981\u7279\u6B8A\u5904\u7406\uFF0C\u53EF\u5728 create_task \u91CC\u76F4\u63A5\u663E\u5F0F\u4F20 useWorktree / autoStart \u8986\u76D6\u9ED8\u8BA4\u3002"
|
|
49607
|
+
};
|
|
49608
|
+
}
|
|
49609
|
+
const useWorktree = explicitWorktree ? args.useWorktree : await readConfigValue("task.defaultUseWorktree", true);
|
|
49610
|
+
const autoStart = explicitAutoStart ? args.autoStart : await readConfigValue("task.defaultAutoStart", false);
|
|
49611
|
+
let versionId = null;
|
|
49612
|
+
if (args.versionId) {
|
|
49613
|
+
const v2 = await db.version.findFirst({
|
|
49614
|
+
where: { id: args.versionId, projectId: args.projectId },
|
|
49615
|
+
select: { id: true }
|
|
49616
|
+
});
|
|
49617
|
+
versionId = v2?.id ?? null;
|
|
49618
|
+
}
|
|
49531
49619
|
let baseBranch = null;
|
|
49532
|
-
if (
|
|
49620
|
+
if (useWorktree) {
|
|
49533
49621
|
if (args.baseBranch) {
|
|
49534
49622
|
baseBranch = args.baseBranch;
|
|
49535
49623
|
} else {
|
|
@@ -49553,7 +49641,9 @@ var taskTools = {
|
|
|
49553
49641
|
projectId: args.projectId,
|
|
49554
49642
|
priority: args.priority ?? "MEDIUM",
|
|
49555
49643
|
status: args.status ?? "TODO",
|
|
49556
|
-
baseBranch
|
|
49644
|
+
baseBranch,
|
|
49645
|
+
versionId,
|
|
49646
|
+
subPath: args.subPath ?? null
|
|
49557
49647
|
}
|
|
49558
49648
|
});
|
|
49559
49649
|
if (args.labelIds && args.labelIds.length > 0) {
|
|
@@ -49593,6 +49683,7 @@ var taskTools = {
|
|
|
49593
49683
|
filename,
|
|
49594
49684
|
path: dest,
|
|
49595
49685
|
size: stat.size,
|
|
49686
|
+
mimeType: guessMimeType(filename),
|
|
49596
49687
|
projectId: args.projectId,
|
|
49597
49688
|
taskId: task.id,
|
|
49598
49689
|
description: `Reference: ${(0, import_path11.basename)(filePath)}`
|
|
@@ -49611,7 +49702,7 @@ ${refText}`;
|
|
|
49611
49702
|
await db.task.update({ where: { id: task.id }, data: { description: updatedDesc } });
|
|
49612
49703
|
}
|
|
49613
49704
|
}
|
|
49614
|
-
if (
|
|
49705
|
+
if (autoStart) {
|
|
49615
49706
|
const PORT2 = process.env.PORT ?? "3000";
|
|
49616
49707
|
const prompt = args.title;
|
|
49617
49708
|
try {
|
|
@@ -49691,6 +49782,35 @@ ${refText}`;
|
|
|
49691
49782
|
await db.task.delete({ where: { id: args.taskId } });
|
|
49692
49783
|
return { deleted: true, taskId: args.taskId };
|
|
49693
49784
|
}
|
|
49785
|
+
},
|
|
49786
|
+
set_task_defaults: {
|
|
49787
|
+
description: "Save the user's default behavior for new tasks: useWorktree (Git worktree branch isolation) and autoStart (run immediately after create). Call this once after asking the user their preference \u2014 subsequent create_task calls without an explicit useWorktree/autoStart use these defaults and won't prompt again. Applies globally to all projects.",
|
|
49788
|
+
schema: external_exports.object({
|
|
49789
|
+
useWorktree: external_exports.boolean(),
|
|
49790
|
+
autoStart: external_exports.boolean()
|
|
49791
|
+
}),
|
|
49792
|
+
handler: async (args) => {
|
|
49793
|
+
const set2 = (key, value) => db.systemConfig.upsert({
|
|
49794
|
+
where: { key },
|
|
49795
|
+
create: { key, value: JSON.stringify(value) },
|
|
49796
|
+
update: { value: JSON.stringify(value) }
|
|
49797
|
+
});
|
|
49798
|
+
await set2("task.defaultUseWorktree", args.useWorktree);
|
|
49799
|
+
await set2("task.defaultAutoStart", args.autoStart);
|
|
49800
|
+
await set2("task.mcpDefaultsConfigured", true);
|
|
49801
|
+
return { ok: true, useWorktree: args.useWorktree, autoStart: args.autoStart };
|
|
49802
|
+
}
|
|
49803
|
+
},
|
|
49804
|
+
list_versions: {
|
|
49805
|
+
description: "List a project's active versions (excludes RELEASED) for assigning a task via create_task's versionId. Returns id, number, name, status, isCurrent.",
|
|
49806
|
+
schema: external_exports.object({ projectId: external_exports.string() }),
|
|
49807
|
+
handler: async (args) => {
|
|
49808
|
+
return db.version.findMany({
|
|
49809
|
+
where: { projectId: args.projectId, status: { not: "RELEASED" } },
|
|
49810
|
+
select: { id: true, number: true, name: true, status: true, isCurrent: true },
|
|
49811
|
+
orderBy: [{ isCurrent: "desc" }, { order: "asc" }, { createdAt: "desc" }]
|
|
49812
|
+
});
|
|
49813
|
+
}
|
|
49694
49814
|
}
|
|
49695
49815
|
};
|
|
49696
49816
|
|
|
@@ -49944,18 +50064,6 @@ async function search(query, category = "task", config2) {
|
|
|
49944
50064
|
return [];
|
|
49945
50065
|
}
|
|
49946
50066
|
|
|
49947
|
-
// src/lib/config-reader.ts
|
|
49948
|
-
init_db();
|
|
49949
|
-
async function readConfigValue(key, defaultValue) {
|
|
49950
|
-
const row = await db2.systemConfig.findUnique({ where: { key } });
|
|
49951
|
-
if (!row) return defaultValue;
|
|
49952
|
-
try {
|
|
49953
|
-
return JSON.parse(row.value);
|
|
49954
|
-
} catch {
|
|
49955
|
-
return defaultValue;
|
|
49956
|
-
}
|
|
49957
|
-
}
|
|
49958
|
-
|
|
49959
50067
|
// src/mcp/tools/search-tools.ts
|
|
49960
50068
|
var searchTools = {
|
|
49961
50069
|
search: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tower-studio",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.19",
|
|
4
4
|
"description": "AI Task Orchestration Platform — Kanban + Terminal + Code Editor + MCP",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tower": "bin/tower.mjs"
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
63
63
|
"@prisma/client": "^6.19.2",
|
|
64
|
+
"@vscode/ripgrep": "1.18.0",
|
|
64
65
|
"node-pty": "^1.1.0",
|
|
65
66
|
"prisma": "^6.19.2",
|
|
66
67
|
"tsx": "^4.21.0",
|
package/prisma/schema.prisma
CHANGED
|
@@ -14,6 +14,13 @@ const EXECUTABLES = [
|
|
|
14
14
|
"node_modules/node-pty/prebuilds/darwin-x64/spawn-helper",
|
|
15
15
|
"node_modules/node-pty/prebuilds/linux-arm64/spawn-helper",
|
|
16
16
|
"node_modules/node-pty/prebuilds/linux-x64/spawn-helper",
|
|
17
|
+
// @vscode/ripgrep bundled `rg` binary (per-platform optionalDependency).
|
|
18
|
+
// Only the current platform's package is installed; the rest are skipped.
|
|
19
|
+
"node_modules/@vscode/ripgrep-darwin-arm64/bin/rg",
|
|
20
|
+
"node_modules/@vscode/ripgrep-darwin-x64/bin/rg",
|
|
21
|
+
"node_modules/@vscode/ripgrep-linux-arm64/bin/rg",
|
|
22
|
+
"node_modules/@vscode/ripgrep-linux-arm/bin/rg",
|
|
23
|
+
"node_modules/@vscode/ripgrep-linux-x64/bin/rg",
|
|
17
24
|
];
|
|
18
25
|
|
|
19
26
|
let fixed = 0;
|
package/skills/tower/SKILL.md
CHANGED
|
@@ -55,15 +55,22 @@ Use Tower tools when the user wants to:
|
|
|
55
55
|
1. Call `list_workspaces` to find the target workspace
|
|
56
56
|
2. Call `list_projects` with workspaceId to find the target project
|
|
57
57
|
3. Ask user to confirm the project (or infer from context)
|
|
58
|
-
4. **Worktree
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
4. **Worktree / auto-start defaults**: `create_task`'s `useWorktree` (branch isolation) and `autoStart` (run right after create) follow the user's saved **global** preference.
|
|
59
|
+
- On the FIRST `create_task` where neither default has been set AND you didn't pass them explicitly, the tool does **not** create the task — it returns `{ needsDefaultsSetup: true, message }`. When you see that:
|
|
60
|
+
- Ask the user two things: (a) default to Git **worktree** isolation for new tasks? (b) **auto-start** execution right after creating?
|
|
61
|
+
- Call `set_task_defaults({ useWorktree, autoStart })` once to save it (you'll never be asked again).
|
|
62
|
+
- Then call `create_task` again — it now succeeds using the saved defaults.
|
|
63
|
+
- **Per-task override**: if the user wants this one task to differ (e.g. "don't use worktree", "just create, don't start"), pass `useWorktree` / `autoStart` explicitly on `create_task`. Explicit args always win over the saved default and also skip the first-run prompt.
|
|
64
|
+
- When `useWorktree` resolves to true, optionally pass `baseBranch` to choose the checkout branch (e.g. `baseBranch: "develop"`); if omitted, the project's current git branch is auto-detected.
|
|
65
|
+
5. **Version (optional)**: to file the task under a project version, call `list_versions` with the projectId, let the user pick, and pass `versionId`. Omit for backlog (no version).
|
|
66
|
+
6. **SubPath detection**: check the project description for directory structure hints (e.g. "monorepo: packages/web, packages/api"). If the task clearly belongs to a subdirectory, set `subPath` (e.g. "packages/web"). If unclear, omit it — it's optional.
|
|
67
|
+
7. **References (any files/images)**: ALL user-provided files — including pasted screenshots, uploaded images, and local file paths — should be passed as `references: ["/path/to/file"]` on `create_task`. The tool copies files into the project asset library automatically.
|
|
61
68
|
- **Local file paths**: pass directly (e.g. `references: ["/path/to/doc.md", "/path/to/design.png"]`)
|
|
62
69
|
- **Pasted images with known paths**: if the platform provides file paths for pasted media (e.g. OpenClaw's `{{MediaPaths}}`, Claude Code temp files), pass those paths directly — they are local files
|
|
63
70
|
- **Base64 only (no file path)**: if you only have base64 data with no local path, upload first via `manage_assets` with `action: "upload"`, `projectId`, `base64`, `mimeType`. Get back `{ id: assetId, path }`. Then pass the returned `path` in `references` — `create_task` will automatically copy and link the asset, no separate `link_task` needed
|
|
64
71
|
- **`link_task` only for retroactive linking**: use `manage_assets` with `action: "link_task"` only when you need to associate existing assets with an already-created task (e.g. user wants to add references after task creation)
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
8. Call `create_task` with projectId, title, and optional description/priority/labelIds/subPath/versionId/useWorktree/baseBranch/references
|
|
73
|
+
9. After creating: if `autoStart` resolved to true the task starts immediately (check the response's `execution` field — `autoStart` intent does not guarantee it actually started); otherwise the task stays TODO.
|
|
67
74
|
|
|
68
75
|
### "Start a task" / "Run this task" / "Execute task ..."
|
|
69
76
|
|