tower-studio 0.2.4 → 0.2.6
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 -3
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +49 -49
- 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/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/adapters/test/route.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.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 +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 +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 +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.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 +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/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 +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.nft.json +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +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 +83 -83
- package/.next/standalone/.next/server/app/missions/page.js +1 -1
- package/.next/standalone/.next/server/app/missions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/missions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page/server-reference-manifest.json +49 -49
- 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/onboarding.html +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +16 -16
- package/.next/standalone/.next/server/app/onboarding.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/onboarding.segments/_index.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +49 -49
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +62 -62
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- 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/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +16 -16
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- 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 +104 -104
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +84 -84
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +79 -79
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +78 -78
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +49 -49
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page/server-reference-manifest.json +84 -84
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/versions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +96 -96
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/server/app/workspaces/page/server-reference-manifest.json +63 -63
- 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 +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0.9mj3v._.js +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05353yb._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05eviiz._.js +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__07h7qz8._.js → [root-of-the-server]__09h3i6m._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_a8-jq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0dsv3wl._.js +4 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0c1g5im._.js → [root-of-the-server]__0j~qauc._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0p_ii~p._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0puw1af._.js +2 -2
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0ntb7n~._.js → [root-of-the-server]__0qie1gs._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0w2w3x.._.js +20 -0
- package/.next/standalone/.next/server/chunks/{_0u-~jqd._.js → _0trog_r._.js} +1 -1
- package/.next/standalone/.next/server/chunks/{src_0o_27yu._.js → src_01ztl3b._.js} +2 -2
- package/.next/standalone/.next/server/chunks/src_lib_0ba0ntr._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_ai_0q-~me1._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_ai_0xx6y51._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_lib_ai_providers_index_ts_0.y.3vp._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/0iu._[workspaceId]_projects_[projectId]_versions_version-timeline-client_tsx_07o_kyi._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0-yld.d._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0.5rcav._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__006_qh0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__02px.0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__03ebsif._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__05kq890._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0-xoiaj._.js → [root-of-the-server]__079.nog._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0rp_09h._.js → [root-of-the-server]__0c4.z1s._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gaa~xc._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0gcf4k3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ghfuuv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0n8jy_r._.js → [root-of-the-server]__0k3isnk._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0l43.5g._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0ty48g5._.js → [root-of-the-server]__0nwue~m._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ps55l6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0q7ho54._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qe~p-n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ribsk4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tf4zp_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__00wymqa._.js → [root-of-the-server]__0vh-egg._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wjg_.n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0wvyks.._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y.nw7l._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0zbmoit._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11bequ2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__11ko84j._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__12pnl8n._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0cdz55-._.js → [root-of-the-server]__13k4vkg._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_008xdn0._.js → _0-pqb_c._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_0p8de_7._.js → _00d1y-k._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0xp-.5k._.js → _03xwww2._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0qu2yg4._.js → _049.box._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_04b71ua._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0w_jwhc._.js → _05-r00y._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_0_obsmv._.js → _054w82_._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_108e4..._.js → _086yn8o._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0c-z9co._.js → _08t2xag._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0cie3rm._.js → _0_gqtgq._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0lul2~5._.js → _0_~ftjv._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0a-rizg._.js → _0ah80pn._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ds6nk2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_079ks~i._.js → _0ep3sg_._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_13l5s-p._.js → _0f8jvpw._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0popc9v._.js → _0fri5n~._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_02_8bze._.js → _0h_~oum._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_07scffz._.js → _0i2usny._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0i4__mf._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0ihq._v._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0r9w-k8._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0rbctq7._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0gc6xfk._.js → _0rfo51k._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0rt8hus._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0no3ok_._.js → _0vqyzrr._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/src_095o8x6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_13jha60._.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_0h36tj.._.js → src_lib_08n755q._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0h3ouzu._.js → src_lib_0tb2yya._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0~jyveg._.js → src_lib_123jf_a._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{src_lib_0~rxy~0._.js → src_lib_12ulcxj._.js} +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +347 -347
- package/.next/standalone/.next/static/chunks/{06aef6liyecnz.js → 0.zipr1bga3lu.js} +1 -1
- package/.next/standalone/.next/static/chunks/037-verumdykv.js +5 -0
- package/.next/standalone/.next/static/chunks/04-7c5m91nvj1.js +1 -0
- package/.next/standalone/.next/static/chunks/06shpikm5rcmu.js +1 -0
- package/.next/standalone/.next/static/chunks/{0xt_3903v1zad.js → 07i~~ygu~oi26.js} +1 -1
- package/.next/standalone/.next/static/chunks/082cedbq4pp.-.js +1 -0
- package/.next/standalone/.next/static/chunks/089ktlh~nim1x.js +1 -0
- package/.next/standalone/.next/static/chunks/{0bswzaqeengiv.js → 0ee.~~ae-vl_q.js} +1 -1
- package/.next/standalone/.next/static/chunks/{030zalmk5.98l.js → 0fovq74l0wh7c.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0uzgie3q9h20b.js → 0hxgzql5.szyz.js} +1 -1
- package/.next/standalone/.next/static/chunks/0jscst0zjd2az.js +1 -0
- package/.next/standalone/.next/static/chunks/{0t0pq7y~7s7j_.js → 0m2lubto0vt0x.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0ptiiywcgt9lq.js → 0mfgulw-d49o9.js} +1 -1
- package/.next/standalone/.next/static/chunks/0m~ltp.wfnbf7.js +5 -0
- package/.next/standalone/.next/static/chunks/{0siyzg11n09zl.js → 0nrbltth-7m~e.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0d.m9b-ln~cns.js → 0r7jm27~cp-vs.js} +1 -1
- package/.next/standalone/.next/static/chunks/0tk-ju9xhoh68.js +5 -0
- package/.next/standalone/.next/static/chunks/{0~zg.626i--lj.js → 0v9ahxdsn0mse.js} +1 -1
- package/.next/standalone/.next/static/chunks/0w9x-ap4dcwy..js +1 -0
- package/.next/standalone/.next/static/chunks/17cayeebhpt~w.js +2 -0
- package/.next/standalone/.next/static/chunks/186ahmq856rfj.js +1 -0
- package/.next/standalone/package.json +3 -1
- package/bin/tower.mjs +16 -0
- package/dist/mcp-server.cjs +12 -1
- package/package.json +3 -1
- package/prisma/pre-migration.sql +23 -0
- package/skills/tower/SKILL.md +381 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-eibah._.js +0 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0_q8qjf._.js +0 -20
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0vasg9u._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0sw9hqr._.js +0 -3
- package/.next/standalone/.next/static/chunks/00kag1vn1xq-h.js +0 -1
- package/.next/standalone/.next/static/chunks/06b1pibint3_6.js +0 -5
- package/.next/standalone/.next/static/chunks/07h0wys36zya1.js +0 -1
- package/.next/standalone/.next/static/chunks/08qc-i9nlpeuj.js +0 -1
- package/.next/standalone/.next/static/chunks/0cgu7kw00ijog.js +0 -1
- package/.next/standalone/.next/static/chunks/0dbuddzi1ktpc.js +0 -5
- package/.next/standalone/.next/static/chunks/0dchz9lk.idgp.js +0 -1
- package/.next/standalone/.next/static/chunks/0f6q8.wnwub-h.js +0 -2
- package/.next/standalone/.next/static/chunks/0ji8xfnts~7s6.js +0 -1
- package/.next/standalone/.next/static/chunks/0zf927936chqj.js +0 -1
- package/.next/standalone/.next/static/chunks/12vd_.lx4r~dd.js +0 -5
- /package/.next/standalone/.next/static/{1lmBVxqYafZ25FnbSpFe2 → VGoiH5uRfCRm6SKXNPZoz}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{1lmBVxqYafZ25FnbSpFe2 → VGoiH5uRfCRm6SKXNPZoz}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{1lmBVxqYafZ25FnbSpFe2 → VGoiH5uRfCRm6SKXNPZoz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tower
|
|
3
|
+
description: AI task orchestration platform — use Tower MCP tools to manage workspaces, projects, tasks, and monitor agent execution
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Tower
|
|
7
|
+
|
|
8
|
+
Tower is an AI task orchestration platform. This skill teaches you how to use Tower's MCP tools to manage projects and tasks.
|
|
9
|
+
|
|
10
|
+
## MCP Setup
|
|
11
|
+
|
|
12
|
+
Before using Tower tools, check if the `tower` MCP server is available. If tools like `list_workspaces` are not found, guide the user to configure MCP:
|
|
13
|
+
|
|
14
|
+
**Claude Code** — add to `~/.claude/settings.json`:
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"mcpServers": {
|
|
18
|
+
"tower": {
|
|
19
|
+
"command": "npx",
|
|
20
|
+
"args": ["tsx", "<project-root>/src/mcp/index.ts"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Other AI agents** — add the same config to your MCP client settings file.
|
|
27
|
+
|
|
28
|
+
After configuration, restart the AI session. The Tower tools will then be available.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## When to Use
|
|
33
|
+
|
|
34
|
+
Use Tower tools when the user wants to:
|
|
35
|
+
- View, create, or manage tasks and projects
|
|
36
|
+
- Check task execution status or progress
|
|
37
|
+
- Interact with a running task's terminal
|
|
38
|
+
- Search across workspaces, projects, or tasks
|
|
39
|
+
- Organize tasks with labels or status changes
|
|
40
|
+
- Get daily work summary or pending todo list
|
|
41
|
+
- Check what was done today or what's left to do
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Scenarios
|
|
46
|
+
|
|
47
|
+
### "Show me my workspaces" / "List projects"
|
|
48
|
+
|
|
49
|
+
1. Call `list_workspaces`
|
|
50
|
+
2. If user asks about a specific workspace, call `list_projects` with the workspaceId
|
|
51
|
+
3. Present results in a clean table format
|
|
52
|
+
|
|
53
|
+
### "Create a task" / "Add a task for ..."
|
|
54
|
+
|
|
55
|
+
1. Call `list_workspaces` to find the target workspace
|
|
56
|
+
2. Call `list_projects` with workspaceId to find the target project
|
|
57
|
+
3. Ask user to confirm the project (or infer from context)
|
|
58
|
+
4. **Worktree mode**: default is direct mode (no branch isolation). If user says "use worktree", "-w", or "branch isolation", set `useWorktree: true`. Optionally pass `baseBranch` to specify which branch to check out from (e.g. `baseBranch: "develop"`). If `baseBranch` is omitted, the project's current git branch is auto-detected.
|
|
59
|
+
5. **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.
|
|
60
|
+
6. **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
|
+
- **Local file paths**: pass directly (e.g. `references: ["/path/to/doc.md", "/path/to/design.png"]`)
|
|
62
|
+
- **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
|
+
- **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
|
+
- **`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
|
+
7. Call `create_task` with projectId, title, and optional description/priority/labelIds/subPath/useWorktree/baseBranch/references
|
|
66
|
+
8. `autoStart` defaults to true — task will be created and immediately started. If user says "don't start", "just create", or "-nostart", set `autoStart: false`
|
|
67
|
+
|
|
68
|
+
### "Start a task" / "Run this task" / "Execute task ..."
|
|
69
|
+
|
|
70
|
+
1. Call `start_task_execution` with taskId and an optional prompt (instruction for the AI agent)
|
|
71
|
+
2. If no prompt is given, use the task's title/description as context
|
|
72
|
+
3. The task status changes to IN_PROGRESS automatically
|
|
73
|
+
|
|
74
|
+
### "What's running?" / "Check task progress"
|
|
75
|
+
|
|
76
|
+
1. Call `get_task_execution_status` with taskId
|
|
77
|
+
2. If status is running, call `get_task_terminal_output` with taskId (default 50 lines)
|
|
78
|
+
3. Summarize: status + recent output + duration
|
|
79
|
+
|
|
80
|
+
### "Send a message to the task" / "Tell it to ..."
|
|
81
|
+
|
|
82
|
+
1. Call `send_task_terminal_input` with taskId and the text (include `\n` for Enter)
|
|
83
|
+
2. Wait briefly, then call `get_task_terminal_output` to see the response
|
|
84
|
+
|
|
85
|
+
### "Move task to done" / "Cancel this task"
|
|
86
|
+
|
|
87
|
+
1. Call `move_task` with taskId and the target status (DONE, CANCELLED, etc.)
|
|
88
|
+
|
|
89
|
+
### "Search for ..." / "Find tasks about ..."
|
|
90
|
+
|
|
91
|
+
1. Call `search` with the query string
|
|
92
|
+
2. Optionally set category to `task`, `project`, or `repository`
|
|
93
|
+
3. Results include `navigateTo` paths for UI navigation
|
|
94
|
+
|
|
95
|
+
### "Label this task" / "Tag it as ..."
|
|
96
|
+
|
|
97
|
+
1. Call `list_labels` with workspaceId to see available labels
|
|
98
|
+
2. Call `set_task_labels` with taskId and the desired labelId array
|
|
99
|
+
3. Note: this replaces all existing labels — include current ones if you want to keep them
|
|
100
|
+
|
|
101
|
+
### "今天做了什么?" / "Daily summary" / "工作总结"
|
|
102
|
+
|
|
103
|
+
1. Call `daily_summary` (no params for today, or pass `date: "YYYY-MM-DD"` for a specific day)
|
|
104
|
+
2. Results are grouped by workspace → project, with:
|
|
105
|
+
- **completed**: tasks moved to DONE today
|
|
106
|
+
- **inProgress**: tasks with activity today but not yet done, including `progressSummary` (last AI chat excerpt)
|
|
107
|
+
3. Present stats: totalCompleted, totalInProgress
|
|
108
|
+
4. Format as a readable report
|
|
109
|
+
|
|
110
|
+
### "今天有什么待办?" / "Daily todo" / "还有哪些任务没完成?"
|
|
111
|
+
|
|
112
|
+
1. Call `daily_todo` (returns all TODO/IN_PROGRESS/IN_REVIEW tasks)
|
|
113
|
+
2. Optional filters:
|
|
114
|
+
- `workspaceId` — narrow to one workspace
|
|
115
|
+
- `projectId` — narrow to one project
|
|
116
|
+
- `status` — e.g. `["IN_PROGRESS"]` for only active tasks
|
|
117
|
+
- `priority` — e.g. `["CRITICAL", "HIGH"]` for urgent only
|
|
118
|
+
3. Results sorted by priority severity (CRITICAL first), grouped by workspace → project
|
|
119
|
+
4. Each task includes `lastSessionId` for resuming execution
|
|
120
|
+
5. Present stats: total count, breakdown by status and priority
|
|
121
|
+
|
|
122
|
+
### "Create a project" / "Set up a new project"
|
|
123
|
+
|
|
124
|
+
1. Call `list_workspaces` to pick the workspace
|
|
125
|
+
2. Call `create_project` with workspaceId, name, and optionally:
|
|
126
|
+
- `gitUrl` — makes it a GIT project with worktree support
|
|
127
|
+
- `localPath` — path to the local repository
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Task Lifecycle
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
TODO → IN_PROGRESS → IN_REVIEW → DONE
|
|
135
|
+
→ CANCELLED
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
- Tasks start as `TODO`
|
|
139
|
+
- `IN_PROGRESS` means an agent is actively working
|
|
140
|
+
- `IN_REVIEW` means execution completed, awaiting review/merge
|
|
141
|
+
- `DONE` means merged and completed
|
|
142
|
+
- `CANCELLED` means dropped
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Task Description Format
|
|
147
|
+
|
|
148
|
+
The `description` field supports Markdown. **Never copy the user's raw message as-is.** Always restructure it into a clear, actionable format:
|
|
149
|
+
|
|
150
|
+
```markdown
|
|
151
|
+
## 目标
|
|
152
|
+
<one sentence summary of what to achieve>
|
|
153
|
+
|
|
154
|
+
## 需求
|
|
155
|
+
- <requirement 1>
|
|
156
|
+
- <requirement 2>
|
|
157
|
+
- ...
|
|
158
|
+
|
|
159
|
+
## 参考
|
|
160
|
+
- <file paths, API endpoints, design references if any>
|
|
161
|
+
|
|
162
|
+
## 备注
|
|
163
|
+
- <constraints, edge cases, things to watch out for>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Rules:
|
|
167
|
+
- `title` should be short (under 30 chars), summarizing the task
|
|
168
|
+
- `description` should be structured Markdown that an AI agent can execute from
|
|
169
|
+
- Extract actionable requirements from the user's natural language
|
|
170
|
+
- Omit sections that have no content (e.g. skip 备注 if nothing to note)
|
|
171
|
+
- If user provides file paths, put them in 参考 section AND in `references` parameter
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Display Templates
|
|
176
|
+
|
|
177
|
+
All query results MUST follow these templates. Do NOT invent your own format. When results are empty, output "No {items} found." (e.g. "No tasks found.", "No workspaces found.").
|
|
178
|
+
|
|
179
|
+
### Priority Markers
|
|
180
|
+
|
|
181
|
+
Use consistently across all templates: 🔴 CRITICAL · 🟠 HIGH · 🟡 MEDIUM · ⚪ LOW
|
|
182
|
+
|
|
183
|
+
### Labels Format
|
|
184
|
+
|
|
185
|
+
Always render labels as comma-separated names (e.g. `bug, frontend`). Omit the column if no task has labels.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Workspaces (`list_workspaces`)
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
| Workspace | Projects | Description |
|
|
193
|
+
|-----------|----------|-------------|
|
|
194
|
+
| {name} | {projectCount} | {description ?? "—"} |
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Projects (`list_projects`)
|
|
198
|
+
|
|
199
|
+
Note: the response does not include workspace name. Use the workspace name from the prior `list_workspaces` call or the user's context.
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
📂 {workspaceName}
|
|
203
|
+
|
|
204
|
+
| Project | Type | Tasks | Path |
|
|
205
|
+
|---------|------|-------|------|
|
|
206
|
+
| {name} ({alias}) | {type} | {taskCount} | {localPath ?? "—"} |
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Tasks (`list_tasks`)
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
📋 {projectName}
|
|
213
|
+
|
|
214
|
+
| ID | Task | Status | Priority | Labels |
|
|
215
|
+
|----|------|--------|----------|--------|
|
|
216
|
+
| {id (first 8 chars)} | {title} | {status} | {priority} | {labels} |
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Task Creation Confirmation
|
|
220
|
+
|
|
221
|
+
After `create_task` succeeds, render based on the **response** (not the input
|
|
222
|
+
parameter — `autoStart: true` does NOT mean execution actually started; check
|
|
223
|
+
`response.execution` and `response.executionError`):
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
✅ Task created: **{title}**
|
|
227
|
+
- Project: {projectName}
|
|
228
|
+
- Priority: {priority}
|
|
229
|
+
- Status: {status}
|
|
230
|
+
- Worktree: {yes/no}
|
|
231
|
+
{response.execution ? "⚡ Execution started" : response.executionError ? "⚠️ Auto-start failed: " + response.executionError : ""}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
If `executionError` is present, surface it verbatim — common causes are server
|
|
235
|
+
not running, concurrency limit hit, or project missing localPath. Do not say
|
|
236
|
+
"Execution started" when the response only shows `executionError`.
|
|
237
|
+
|
|
238
|
+
### Daily Summary (`daily_summary`)
|
|
239
|
+
|
|
240
|
+
Fields: `stats.totalCompleted`, `stats.totalInProgress`, grouped `workspaces[].projects[].completed[]` and `inProgress[]`.
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
# 📊 Daily Summary — {date}
|
|
244
|
+
|
|
245
|
+
**Stats**: ✅ {stats.totalCompleted} completed · 🔄 {stats.totalInProgress} in progress
|
|
246
|
+
|
|
247
|
+
## {workspace.name}
|
|
248
|
+
|
|
249
|
+
### {project.name}
|
|
250
|
+
|
|
251
|
+
**Completed**:
|
|
252
|
+
| Task | Priority | Completed At |
|
|
253
|
+
|------|----------|-------------|
|
|
254
|
+
| ✅ {title} | {priority} | {completedAt (HH:mm)} |
|
|
255
|
+
|
|
256
|
+
**In Progress**:
|
|
257
|
+
| Task | Status | Priority | Progress |
|
|
258
|
+
|------|--------|----------|----------|
|
|
259
|
+
| 🔄 {title} | {status} | {priority} | {progressSummary ?? "—"} |
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
If no activity: "No activity recorded for {date}."
|
|
263
|
+
|
|
264
|
+
### Daily Todo (`daily_todo`)
|
|
265
|
+
|
|
266
|
+
Fields: `stats.total`, `stats.byPriority.{CRITICAL,HIGH,MEDIUM,LOW}`, `stats.byStatus.{TODO,IN_PROGRESS,IN_REVIEW}`.
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
# 📝 Pending Tasks
|
|
270
|
+
|
|
271
|
+
**Stats**: {stats.total} tasks · 🔴 {stats.byPriority.CRITICAL} · 🟠 {stats.byPriority.HIGH} · 🟡 {stats.byPriority.MEDIUM} · ⚪ {stats.byPriority.LOW}
|
|
272
|
+
|
|
273
|
+
## {workspace.name}
|
|
274
|
+
|
|
275
|
+
### {project.name}
|
|
276
|
+
|
|
277
|
+
| # | Task | Status | Priority | Labels |
|
|
278
|
+
|---|------|--------|----------|--------|
|
|
279
|
+
| 1 | {title} {lastSessionId ? "🔁" : ""} | {status} | {priority} | {labels} |
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Sorted by priority (CRITICAL first). 🔁 = resumable session.
|
|
283
|
+
|
|
284
|
+
### Search Results (`search`)
|
|
285
|
+
|
|
286
|
+
Categories: `task`, `project`, `repository`, `note`, `asset`, `all`. Result count = `results.length`.
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
🔍 Results for "{query}" ({results.length} found)
|
|
290
|
+
|
|
291
|
+
| Type | Name | Location | Snippet |
|
|
292
|
+
|------|------|----------|---------|
|
|
293
|
+
| {type} | {title} | {subtitle} | {snippet ?? "—"} |
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Execution Status (`get_task_execution_status`)
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
⚙️ **{taskTitle}**
|
|
300
|
+
- Execution: {executionStatus} · Terminal: {terminalStatus}
|
|
301
|
+
- Started: {startedAt} {endedAt ? "· Ended: " + endedAt : ""}
|
|
302
|
+
- ID: {executionId}
|
|
303
|
+
- Output (last lines):
|
|
304
|
+
\`\`\`
|
|
305
|
+
{outputSnippet ?? "No output"}
|
|
306
|
+
\`\`\`
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Start Execution Confirmation (`start_task_execution`)
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
⚡ Execution started
|
|
313
|
+
- Task: {taskId}
|
|
314
|
+
- Execution ID: {executionId}
|
|
315
|
+
- Worktree: {worktreePath ?? "direct mode"}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Terminal Output (`get_task_terminal_output`)
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
📺 Terminal — {taskId} ({total} total lines, showing last {lines.length})
|
|
322
|
+
|
|
323
|
+
\`\`\`
|
|
324
|
+
{lines.join("\n")}
|
|
325
|
+
\`\`\`
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Labels (`list_labels`)
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
🏷️ Labels for {workspaceName}
|
|
332
|
+
|
|
333
|
+
| Label | Color | Type |
|
|
334
|
+
|-------|-------|------|
|
|
335
|
+
| {name} | {color} | {isBuiltin ? "Builtin" : "Custom"} |
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Project Identification (`identify_project`)
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
🔎 Project matches for "{query}"
|
|
342
|
+
|
|
343
|
+
| Project | Alias | Workspace | Confidence |
|
|
344
|
+
|---------|-------|-----------|------------|
|
|
345
|
+
| {name} | {alias ?? "—"} | {workspaceName} | {(confidence * 100).toFixed(0)}% |
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Notes (`manage_notes` — list/get)
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
📝 Notes for {projectName}
|
|
352
|
+
|
|
353
|
+
| Title | Updated | Preview |
|
|
354
|
+
|-------|---------|---------|
|
|
355
|
+
| {title} | {updatedAt (MM-DD HH:mm)} | {content (first 60 chars)}... |
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Assets (`manage_assets` — list)
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
📎 Assets for {projectName}
|
|
362
|
+
|
|
363
|
+
| Name | Type | Size | Linked Tasks |
|
|
364
|
+
|------|------|------|-------------|
|
|
365
|
+
| {originalName} | {mimeType} | {size} | {taskCount} |
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Important Rules
|
|
371
|
+
|
|
372
|
+
- **Scope boundary**: You are a **task management operator only**. If the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply: "抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。" Do NOT attempt to answer out-of-scope questions.
|
|
373
|
+
- **Display format is mandatory**: always use the templates above, never output raw JSON or invent custom formats
|
|
374
|
+
- **Empty results**: always output "No {items} found." — never silently return nothing
|
|
375
|
+
- **SubPath**: for monorepo or multi-folder projects, use `subPath` on task creation to specify the working directory (e.g. "packages/web"). The project description should document the directory structure. If not sure, omit subPath.
|
|
376
|
+
- **Cascade deletes**: deleting a workspace removes all its projects and tasks
|
|
377
|
+
- **Label replacement**: `set_task_labels` and `update_task` with labelIds do a full replace, not merge
|
|
378
|
+
- **Builtin labels**: cannot be deleted (isBuiltin: true)
|
|
379
|
+
- **One terminal per task**: each task can have at most one active PTY session
|
|
380
|
+
- **Search limit**: returns at most 20 results per query
|
|
381
|
+
- **Search categories**: `task`, `project`, `repository`, `note`, `asset`, `all`
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},933919,(e,r,t)=>{r.exports=e.x("@prisma/client-9249dd53ac5b6a44",()=>require("@prisma/client-9249dd53ac5b6a44"))},750227,(e,r,t)=>{r.exports=e.x("node:path",()=>require("node:path"))},902157,(e,r,t)=>{r.exports=e.x("node:fs",()=>require("node:fs"))},874533,(e,r,t)=>{r.exports=e.x("node:child_process",()=>require("node:child_process"))},193695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,r,t)=>{r.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,r,t)=>{r.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},324725,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},843793,e=>{"use strict";var r=e.i(933919);let t=globalThis.prisma??new r.PrismaClient({log:[]});process.on("SIGTERM",()=>{t.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{t.$disconnect().catch(()=>{})}),e.s(["db",0,t])},660526,(e,r,t)=>{r.exports=e.x("node:os",()=>require("node:os"))},192520,e=>{"use strict";let r;var t=e.i(750227),s=e.i(660526),o=e.i(902157);function i(){return r||(r=process.env.TOWER_DATA_DIR||(0,t.join)((0,s.homedir)(),".tower"),(0,o.existsSync)(r)||(0,o.mkdirSync)(r,{recursive:!0})),r}e.s(["getAssistantDir",0,function(){let e=(0,t.join)(i(),"assistant");return(0,o.existsSync)(e)||(0,o.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,t.join)(i(),"backups");return(0,o.existsSync)(e)||(0,o.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=(0,t.join)(i(),"storage");return(0,o.existsSync)(e)||(0,o.mkdirSync)(e,{recursive:!0}),e},"getTowerDbPath",0,function(){let e;return(0,t.join)((e=(0,t.join)(i(),"database"),(0,o.existsSync)(e)||(0,o.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,i])},173215,e=>{"use strict";var r=e.i(902157),t=e.i(660526),s=e.i(750227),o=e.i(279711),i=e.i(192520);let n="tower";function a(){let e=(0,i.getTowerDir)(),r=s.join((0,t.homedir)(),".tower");if(s.resolve(e)===s.resolve(r))return"tower";let o=s.basename(e),n=o.match(/^\.?tower-(.+)$/);return n?`tower-${l(n[1])}`:`tower-${l(o)}`}function l(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}async function c(e,l){let c,d,u,p,m=o.providerRegistry.get(e),h=m?.cli?.adapter;if(!h||!await h.isAvailable())return{provider:e,available:!1,ok:!1};let k="claude"===e?function(e={}){let o=e.homeDir??t.homedir(),i=e.repoRoot??process.cwd(),n=[];return n.push(function(e){let t=s.join(e,".claude","settings.json");if(!r.existsSync(t))return{removed:!1,path:t};try{let e=r.readFileSync(t,"utf-8"),s=JSON.parse(e),o=s.mcpServers;if("object"!=typeof o||null===o||Array.isArray(o)||!("tower"in o))return{removed:!1,path:t};let i=o.tower;return delete o.tower,0===Object.keys(o).length?delete s.mcpServers:s.mcpServers=o,r.writeFileSync(t,JSON.stringify(s,null,2)+"\n","utf-8"),{removed:!0,path:t,removedEntry:i,reason:"wrong-file"}}catch(e){return{removed:!1,path:t,error:e instanceof Error?e.message:String(e)}}}(o)),n.push(function(e,t,o){if(!r.existsSync(e))return{removed:!1,path:e};try{let i=r.readFileSync(e,"utf-8"),n=JSON.parse(i),a=n.mcpServers;if("object"!=typeof a||null===a||Array.isArray(a))return{removed:!1,path:e};let l=a.tower;if(!l)return{removed:!1,path:e};let c=function(e,t){let o,i=e.args;if(!Array.isArray(i))return"foreign-repo";for(let e of i)if("string"==typeof e&&s.isAbsolute(e)){o=e;break}return o?r.existsSync(o)?s.resolve(o).startsWith(s.resolve(t)+s.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,o);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete a.tower,0===Object.keys(a).length?delete n.mcpServers:n.mcpServers=a,r.writeFileSync(e,JSON.stringify(n,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${t}:${c}`}}catch(r){return{removed:!1,path:e,error:r instanceof Error?r.message:String(r)}}}(s.join(o,".mcp.json"),"home-mcp-json",i)),{steps:n,removedAny:n.some(e=>e.removed)}}():void 0,v=(c=process.cwd().replace(/\\/g,"/"),d=process.env.DATABASE_URL||`file:${(0,i.getTowerDbPath)().replace(/\\/g,"/")}`,u=`${c}/dist/mcp-server.cjs`,p=a(),(0,r.existsSync)(u)?{name:p,command:"node",args:[u],env:{DATABASE_URL:d}}:{name:p,command:`${c}/node_modules/.bin/tsx`,args:[`${c}/src/mcp/index.ts`],env:{DATABASE_URL:d}}),g=await h.installMcp(v,{scope:"user"}),f=await h.installHooks(l),y=await h.installSkill(n,s.join(process.cwd(),"skills",n));return{provider:e,available:!0,migration:k,mcp:g,hooks:f,skill:y,ok:g.ok&&f.ok&&y.ok}}e.s(["getTowerMcpName",0,a,"installAllForProvider",0,c],173215)},482819,(e,r,t)=>{"use strict";r.exports=e.r(583981).vendored["react-rsc"].ReactServerDOMTurbopackServer},921675,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"registerServerReference",{enumerable:!0,get:function(){return s.registerServerReference}});let s=e.r(482819)},86708,(e,r,t)=>{"use strict";function s(e){for(let r=0;r<e.length;r++){let t=e[r];if("function"!=typeof t)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof t}.
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ensureServerEntryExports",{enumerable:!0,get:function(){return s}})},279711,e=>{"use strict";class r{providers=new Map;register(e){this.providers.set(e.name,e)}get(e){return this.providers.get(e)}getAll(){return Array.from(this.providers.values())}getCliAdapter(e){return this.providers.get(e)?.cli?.adapter??null}getQueryAdapter(e,r){let t=this.providers.get(e);return t?"api"===r?t.api?.adapter??null:t.cliQuery?.adapter??null:null}getAllowedCommands(){let e=[];for(let r of this.providers.values())r.cli?.command&&e.push(r.cli.command);return e}async getAvailableProviders(){let e=[];for(let r of this.providers.values()){let t=!!r.cli&&await r.cli.adapter.isAvailable(),s=t&&r.cli?await r.cli.adapter.getVersion():null,o=!!r.api&&!!process.env[r.api.keyEnvVar],i=!!r.api&&o;e.push({name:r.name,displayName:r.displayName,cli:{available:t,version:s},api:{available:i,keyConfigured:o}})}return e}}var t=e.i(472129),s=e.i(902157),o=e.i(660526),i=e.i(750227),n=e.i(769310);let a=["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],l=globalThis;if(!l.__providerRegistry){let c=new r;c.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new t.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),c.register({name:"codex",displayName:"Codex CLI",agentFieldValue:"CODEX_CLI",cli:{command:"codex",adapter:new class r{buildSpawnArgs(e){let r=[];e.resumeSessionId?r.push("resume",e.resumeSessionId):e.continueLatest?r.push("resume","--last"):(r.push("--full-auto"),e.extraArgs?.length&&r.push(...e.extraArgs),e.prompt&&r.push(e.prompt));let t={...e.envOverrides??{}};return{command:this.resolveCommand(),args:r,env:t}}buildEnvOverrides(e){let r={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(r.CALLBACK_URL=e.callbackUrl),r}async installHooks(e){try{let e=this.readHooks(),r=process.cwd().replace(/\\/g,"/"),t=!1,s=this.getHookArray(e,"SessionStart");if(!this.hasHook(s,"session-start-hook.js")){let o=i.join(r,"scripts","session-start-hook.js").replace(/\\/g,"/");s.push({hooks:[{command:`node "${o}"`,timeout:5,type:"command"}]}),e.SessionStart=s,t=!0}let o=this.getHookArray(e,"PostToolUse");if(!this.hasHook(o,"post-tool-hook.js")){let s=i.join(r,"scripts","post-tool-hook.js").replace(/\\/g,"/");o.push({hooks:[{command:`node "${s}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),e.PostToolUse=o,t=!0}let n=this.getHookArray(e,"Stop");if(!this.hasHook(n,"stop-hook.js")){let s=i.join(r,"scripts","stop-hook.js").replace(/\\/g,"/");n.push({hooks:[{command:`node "${s}"`,timeout:5,type:"command"}]}),e.Stop=n,t=!0}return t&&(this.writeHooks(e),this.ensureHooksFeatureEnabled()),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async uninstallHooks(){try{let e=this.readHooks(),r=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let t of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(e,t);e[t]=s.filter(e=>!e.hooks?.some(e=>r.some(r=>e.command?.includes(r))))}return this.writeHooks(e),{ok:!0,method:"file",detail:this.getHooksPath()}}catch(e){return{ok:!1,method:"file",detail:this.getHooksPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readHooks(),r=this.getHookArray(e,"PostToolUse");return this.hasHook(r,"post-tool-hook.js")}async installMcp(e,r={}){let t=this.resolveCommand(),s=["mcp","add",e.name];if(e.env)for(let[r,t]of Object.entries(e.env))s.push("--env",`${r}=${t}`);s.push("--",e.command,...e.args);try{return await this.runCli(t,["mcp","remove",e.name],r.cwd).catch(()=>{}),await this.runCli(t,s,r.cwd),{ok:!0,method:"cli",detail:`${t} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${t} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,r={}){let t=this.resolveCommand(),s=["mcp","remove",e];try{return await this.runCli(t,s,r.cwd),{ok:!0,method:"cli",detail:`${t} ${s.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${t} ${s.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,r={}){let t=this.resolveCommand();try{return await this.runCli(t,["mcp","get",e],r.cwd,5e3),!0}catch{return!1}}async installSkill(e,r){let t=i.join(this.getConfigDir(),"skills",e);try{if(!s.existsSync(r))return{ok:!1,method:"symlink",detail:t,error:`Source skill dir does not exist: ${r}`};s.mkdirSync(i.dirname(t),{recursive:!0});let e=await s.promises.lstat(t).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:t,error:`Refusing to overwrite non-symlink at ${t}`};else{let e=await s.promises.readlink(t);if(i.resolve(e)===i.resolve(r))return{ok:!0,method:"symlink",detail:`${t} → ${r} (already)`};await s.promises.unlink(t)}return await s.promises.symlink(r,t,"dir"),{ok:!0,method:"symlink",detail:`${t} → ${r}`}}catch(e){return{ok:!1,method:"symlink",detail:t,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let r=i.join(this.getConfigDir(),"skills",e);try{let e=await s.promises.lstat(r).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${r} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to remove non-symlink at ${r}`};return await s.promises.unlink(r),{ok:!0,method:"symlink",detail:r}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,r){let t=i.join(this.getConfigDir(),"skills",e);try{if(!(await s.promises.lstat(t)).isSymbolicLink())return!1;if(!r)return!0;let e=await s.promises.readlink(t),o=i.isAbsolute(e)?e:i.resolve(i.dirname(t),e);return i.resolve(o)===i.resolve(r)}catch{return!1}}async runCli(r,t,s,o=1e4){let{execFile:i}=await e.A(482848),{promisify:n}=await e.A(268548),a=n(i),{stdout:l}=await a(r,t,{cwd:s,timeout:o});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:r}=await e.A(144264),{promisify:t}=await e.A(534777),s=t(r),o=this.resolveCommand(),{stdout:i}=await s(o,["--version"],{timeout:5e3});return i.trim()||null}catch{return null}}async getModels(){return a}getConfigDir(){return i.join(o.homedir(),".codex")}getSettingsPath(){return i.join(this.getConfigDir(),"config.toml")}getSessionsDir(){return i.join(this.getConfigDir(),"sessions")}getApiKeyInfo(){return{envVar:"OPENAI_API_KEY",required:!1}}buildHelloProbeArgs(){return{command:this.resolveCommand(),args:["exec","-"]}}resolveCommand(){return process.env.CODEX_CLI_PATH?process.env.CODEX_CLI_PATH:(0,n.resolveCommandPathSync)("codex")}getHooksPath(){return i.join(this.getConfigDir(),"hooks.json")}readHooks(){try{return JSON.parse(s.readFileSync(this.getHooksPath(),"utf-8")).hooks??{}}catch{return{}}}writeHooks(e){let r=this.getConfigDir();s.existsSync(r)||s.mkdirSync(r,{recursive:!0}),s.writeFileSync(this.getHooksPath(),JSON.stringify({hooks:e},null,2),"utf-8")}ensureHooksFeatureEnabled(){let e=this.getSettingsPath(),r="";try{r=s.readFileSync(e,"utf-8")}catch{}if(/codex_hooks\s*=\s*true/.test(r))return;/\[features\]/.test(r)?r=r.replace(/\[features\]/,"[features]\ncodex_hooks = true"):r+="\n[features]\ncodex_hooks = true\n";let t=this.getConfigDir();s.existsSync(t)||s.mkdirSync(t,{recursive:!0}),s.writeFileSync(e,r,"utf-8")}getHookArray(e,r){let t=e[r];return Array.isArray(t)?t:[]}hasHook(e,r){return e.some(e=>e.hooks?.some(e=>e.command?.includes(r)))}}},models:{cli:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","codex-mini-latest"],api:[]}}),l.__providerRegistry=c}let c=l.__providerRegistry;e.s(["providerRegistry",0,c],279711)},932583,e=>{"use strict";var r=e.i(921675),t=e.i(843793);async function s(e,r={}){let o=r.report,i=o?JSON.stringify(o):null;await t.db.providerConnection.upsert({where:{provider:e},create:{provider:e,lastTestedAt:new Date,testOk:!0,version:r.version??null,mcpInstalled:o?.mcp?.ok??!1,hooksInstalled:o?.hooks?.ok??!1,skillsInstalled:o?.skill?.ok??!1,installLog:i},update:{lastTestedAt:new Date,testOk:!0,version:r.version??null,mcpInstalled:o?.mcp?.ok??!1,hooksInstalled:o?.hooks?.ok??!1,skillsInstalled:o?.skill?.ok??!1,installLog:i}})}async function o(e,r={}){await t.db.providerConnection.upsert({where:{provider:e},create:{provider:e,lastTestedAt:new Date,testOk:!1,installLog:r.reason??null},update:{lastTestedAt:new Date,testOk:!1,mcpInstalled:!1,hooksInstalled:!1,skillsInstalled:!1,installLog:r.reason??null}})}async function i(e){let r=await t.db.providerConnection.findUnique({where:{provider:e}});return!!r&&r.testOk&&r.mcpInstalled&&r.hooksInstalled&&r.skillsInstalled}async function n(){return(await t.db.providerConnection.findMany({where:{testOk:!0,mcpInstalled:!0,hooksInstalled:!0,skillsInstalled:!0},select:{provider:!0},orderBy:{provider:"asc"}})).map(e=>e.provider)}async function a(){return t.db.providerConnection.findMany({select:{provider:!0,lastTestedAt:!0,testOk:!0,version:!0,mcpInstalled:!0,hooksInstalled:!0,skillsInstalled:!0,installLog:!0},orderBy:{provider:"asc"}})}(0,e.i(86708).ensureServerEntryExports)([s,o,i,n,a]),(0,r.registerServerReference)(s,"60098f63ce71474c8345bdb111a43c534bb36176b2",null),(0,r.registerServerReference)(o,"60ff3ebf55c8c71ecd2f06eb436d0d7baecd216668",null),(0,r.registerServerReference)(i,"40e83943243ba91343068f5fa95327ffbd942fe95e",null),(0,r.registerServerReference)(n,"00ca5565016e7878379c04e3e9218a7a35cbc54184",null),(0,r.registerServerReference)(a,"006a2e3cf4a8b18384cab5d5308520beb5ddc045f7",null),e.s(["getConnectedProviders",0,n,"isProviderConnected",0,i,"markProviderConnected",0,s,"markProviderDisconnected",0,o])},482848,e=>{e.v(e=>Promise.resolve().then(()=>e(874533)))},268548,e=>{e.v(r=>Promise.all(["server/chunks/[externals]_node_util_0xr.y7p._.js"].map(r=>e.l(r))).then(()=>r(812057)))},144264,e=>{e.v(r=>Promise.all(["server/chunks/[externals]_child_process_0pwkpv9._.js"].map(r=>e.l(r))).then(()=>r(233405)))},534777,e=>{e.v(r=>Promise.all(["server/chunks/[externals]_util_0wtvqkc._.js"].map(r=>e.l(r))).then(()=>r(224361)))}];
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0-eibah._.js.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module.exports=[324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},192520,e=>{"use strict";let t;var r=e.i(750227),n=e.i(660526),s=e.i(902157);function a(){return t||(t=process.env.TOWER_DATA_DIR||(0,r.join)((0,n.homedir)(),".tower"),(0,s.existsSync)(t)||(0,s.mkdirSync)(t,{recursive:!0})),t}e.s(["getAssistantDir",0,function(){let e=(0,r.join)(a(),"assistant");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getBackupsDir",0,function(){let e=(0,r.join)(a(),"backups");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getStorageDir",0,function(){let e=(0,r.join)(a(),"storage");return(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e},"getTowerDbPath",0,function(){let e;return(0,r.join)((e=(0,r.join)(a(),"database"),(0,s.existsSync)(e)||(0,s.mkdirSync)(e,{recursive:!0}),e),"tower.db")},"getTowerDir",0,a])},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},198840,e=>{"use strict";var t=e.i(855104);let r=["localhost","127.0.0.1","[::1]"],n=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]),s=/^c[a-z0-9]{20,30}$/;e.s(["requireLocalhost",0,function(e){let s=e.headers.get("x-forwarded-for");if(s&&!s.split(",").map(e=>e.trim()).every(e=>n.has(e)))return t.NextResponse.json({error:"Forbidden"},{status:403});let a=e.headers.get("host")??"";return r.some(e=>a.startsWith(e))?null:t.NextResponse.json({error:"Forbidden"},{status:403})},"validateProjectId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid projectId format"},{status:400})},"validateTaskId",0,function(e){return s.test(e)?null:t.NextResponse.json({error:"Invalid taskId format"},{status:400})}])},769310,e=>{"use strict";var t=e.i(902157),r=e.i(874533),n=e.i(750227);function s(e=process.platform){return"win32"===e}function a(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let r=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(r)?`"${r}"`:r}let o=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function i(e,t={}){let r=t.cwd??process.cwd(),a=t.env??process.env,o=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=n.default.isAbsolute(e)?e:n.default.resolve(r,e);return await d(t,o)?t:null}let l=a.PATH??a.Path??"",c=s(o)?";":":",u=l.split(c).filter(Boolean),p=s(o)?(a.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],m=s(o)&&n.default.extname(e).length>0;for(let t of u)for(let r of s(o)?m?[n.default.join(t,e)]:p.map(r=>n.default.join(t,`${e}${r}`)):[n.default.join(t,e)])if(await d(r,o))return r;return null}let l=e=>(0,r.execSync)(e,{encoding:"utf-8",timeout:5e3});function c(e,t=process.platform,a=l){if(n.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!s(t)){try{let t=(0,r.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3}).trim();if(t)return t}catch{}return e}try{let t=a(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),r=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(r)return r;if(t.length>0)return t[0]}catch{}return e}async function u(e,t,r={}){let n=r.env??process.env,s=r.platform??process.platform;return p(await i(e,r)??e,t,n,s)}function p(e,t,r,o){if(!s(o))return{command:e,args:t};let i=n.default.extname(e).toLowerCase();return".cmd"===i||".bat"===i||".com"===i?{command:r.ComSpec||"cmd.exe",args:["/d","/s","/c",[a(e),...t.map(a)].join(" ")]}:{command:e,args:t}}async function d(e,r=process.platform){try{return await t.promises.access(e,s(r)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function m(e=process.platform){return s(e)?h():f()}async function f(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),r=[],s=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await d(e))continue;let a=n.default.basename(e),o=s.get(a)??0;s.set(a,o+1),o>0&&(a=`${a} (${o+1})`),r.push({name:a,path:e})}return r}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await d(t)&&e.push({name:n.default.basename(t),path:t});return e}}async function h(){let e=[],t=[],r=await i("git",{platform:"win32"});if(r){let e=n.default.resolve(n.default.dirname(r),"..","..");t.push(n.default.join(e,"bin","bash.exe"),n.default.join(e,"usr","bin","bash.exe"))}for(let e of[process.env.ProgramW6432,process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData?n.default.join(process.env.LocalAppData,"Programs"):null].filter(Boolean))t.push(n.default.join(e,"Git","bin","bash.exe"),n.default.join(e,"Git","usr","bin","bash.exe"));let s=process.env.USERPROFILE??"";for(let r of(s&&t.push(n.default.join(s,"scoop","apps","git","current","bin","bash.exe")),process.env.CLAUDE_CODE_GIT_BASH_PATH&&t.unshift(process.env.CLAUDE_CODE_GIT_BASH_PATH),t))if(await d(r,"win32")){e.push({name:"Git Bash",path:r});break}let a=await i("pwsh",{platform:"win32"});a&&e.push({name:"PowerShell",path:a});let o=process.env.windir??"C:\\WINDOWS",l=n.default.join(o,"System32","WindowsPowerShell","v1.0","powershell.exe");await d(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let c=process.env.ComSpec??n.default.join(o,"System32","cmd.exe");return await d(c,"win32")&&e.push({name:"Command Prompt",path:c}),e}let v=[{name:"Terminal",bundleName:"Terminal"},{name:"iTerm2",bundleName:"iTerm"},{name:"Warp",bundleName:"Warp"},{name:"Alacritty",bundleName:"Alacritty"},{name:"WezTerm",bundleName:"WezTerm"},{name:"kitty",bundleName:"kitty"},{name:"Hyper",bundleName:"Hyper"}];async function w(e=process.platform){if("darwin"===e){let t=[];for(let r of v)await d(`/Applications/${r.bundleName}.app`,e)&&t.push({name:r.name,value:r.bundleName});return t}if(s(e)){let t=[],r=await i("wt",{platform:e});return r&&t.push({name:"Windows Terminal",value:r}),t}return[]}e.s(["detectShells",0,m,"detectTerminalApps",0,w,"ensurePathInEnv",0,function(e,t=process.platform){let r=s(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[r]:function(e=process.platform){return s(e)?"C:\\Windows\\System32;C:\\Windows;C:\\Windows\\System32\\Wbem":"/usr/local/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin"}(t)}},"resolveCommandPath",0,i,"resolveCommandPathSync",0,c,"resolveSpawnTarget",0,u,"resolveSpawnTargetSync",0,function(e,t,r=process.platform,n){return p(c(e,r,n),t,process.env,r)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of o)delete t[e];return t}])},173215,e=>{"use strict";var t=e.i(902157),r=e.i(660526),n=e.i(750227),s=e.i(279711),a=e.i(192520);let o="tower";function i(){let e=(0,a.getTowerDir)(),t=n.join((0,r.homedir)(),".tower");if(n.resolve(e)===n.resolve(t))return"tower";let s=n.basename(e),o=s.match(/^\.?tower-(.+)$/);return o?`tower-${l(o[1])}`:`tower-${l(s)}`}function l(e){return e.replace(/[^a-z0-9_-]/gi,"-").toLowerCase().slice(0,32)}async function c(e,l){let c,u,p,d,m=s.providerRegistry.get(e),f=m?.cli?.adapter;if(!f||!await f.isAvailable())return{provider:e,available:!1,ok:!1};let h="claude"===e?function(e={}){let s=e.homeDir??r.homedir(),a=e.repoRoot??process.cwd(),o=[];return o.push(function(e){let r=n.join(e,".claude","settings.json");if(!t.existsSync(r))return{removed:!1,path:r};try{let e=t.readFileSync(r,"utf-8"),n=JSON.parse(e),s=n.mcpServers;if("object"!=typeof s||null===s||Array.isArray(s)||!("tower"in s))return{removed:!1,path:r};let a=s.tower;return delete s.tower,0===Object.keys(s).length?delete n.mcpServers:n.mcpServers=s,t.writeFileSync(r,JSON.stringify(n,null,2)+"\n","utf-8"),{removed:!0,path:r,removedEntry:a,reason:"wrong-file"}}catch(e){return{removed:!1,path:r,error:e instanceof Error?e.message:String(e)}}}(s)),o.push(function(e,r,s){if(!t.existsSync(e))return{removed:!1,path:e};try{let a=t.readFileSync(e,"utf-8"),o=JSON.parse(a),i=o.mcpServers;if("object"!=typeof i||null===i||Array.isArray(i))return{removed:!1,path:e};let l=i.tower;if(!l)return{removed:!1,path:e};let c=function(e,r){let s,a=e.args;if(!Array.isArray(a))return"foreign-repo";for(let e of a)if("string"==typeof e&&n.isAbsolute(e)){s=e;break}return s?t.existsSync(s)?n.resolve(s).startsWith(n.resolve(r)+n.sep)?"current-repo":"foreign-repo":"missing-path":"foreign-repo"}(l,s);if("current-repo"===c)return{removed:!1,path:e,reason:"alive-current-repo"};return delete i.tower,0===Object.keys(i).length?delete o.mcpServers:o.mcpServers=i,t.writeFileSync(e,JSON.stringify(o,null,2)+"\n","utf-8"),{removed:!0,path:e,removedEntry:l,reason:`${r}:${c}`}}catch(t){return{removed:!1,path:e,error:t instanceof Error?t.message:String(t)}}}(n.join(s,".mcp.json"),"home-mcp-json",a)),{steps:o,removedAny:o.some(e=>e.removed)}}():void 0,v=(c=process.cwd().replace(/\\/g,"/"),u=process.env.DATABASE_URL||`file:${(0,a.getTowerDbPath)().replace(/\\/g,"/")}`,p=`${c}/dist/mcp-server.cjs`,d=i(),(0,t.existsSync)(p)?{name:d,command:"node",args:[p],env:{DATABASE_URL:u}}:{name:d,command:`${c}/node_modules/.bin/tsx`,args:[`${c}/src/mcp/index.ts`],env:{DATABASE_URL:u}}),w=await f.installMcp(v,{scope:"user"}),y=await f.installHooks(l),g=await f.installSkill(o,n.join(process.cwd(),"skills",o));return{provider:e,available:!0,migration:h,mcp:w,hooks:y,skill:g,ok:w.ok&&y.ok&&g.ok}}e.s(["getTowerMcpName",0,i,"installAllForProvider",0,c],173215)},471552,e=>{"use strict";var t=e.i(522734),r=e.i(814747),n=e.i(192520),s=e.i(173215);let a=`# Tower Assistant
|
|
2
|
-
|
|
3
|
-
你是 Tower Assistant — Tower 任务管理平台的内置 AI 操作员。
|
|
4
|
-
|
|
5
|
-
## 身份
|
|
6
|
-
|
|
7
|
-
- 你是一个**任务管理操作员**,不是编程助手
|
|
8
|
-
- 你通过 Tower MCP 工具帮助用户管理工作区、项目、任务
|
|
9
|
-
- 你**不能**读写文件、运行命令、编辑代码、搜索网页
|
|
10
|
-
- 如果用户请求你无法完成的操作,告诉他们需要通过开发 MCP 扩展来支持
|
|
11
|
-
|
|
12
|
-
## 回复风格
|
|
13
|
-
|
|
14
|
-
- 使用用户的语言回复(中文问中文答,英文问英文答)
|
|
15
|
-
- 简洁明了,不要冗长的解释
|
|
16
|
-
- 主动使用工具查询信息,而不是猜测
|
|
17
|
-
- 当用户问"你能做什么"时,只列出 Tower MCP 工具提供的能力
|
|
18
|
-
`;e.s(["ensureTowerDir",0,function(){let e=(0,n.getAssistantDir)(),o=(0,r.join)(e,"CLAUDE.md"),i=process.cwd(),l=(0,r.join)(i,"skills","tower","SKILL.md"),c=(0,r.join)(e,".claude","skills","tower"),u=(0,r.join)(c,"SKILL.md");return(0,t.existsSync)(o)||((0,t.writeFileSync)(o,a,"utf-8"),console.error(`[init-tower] Created ${o}`)),(0,t.existsSync)(l)&&!(0,t.existsSync)(u)&&((0,t.mkdirSync)(c,{recursive:!0}),(0,t.copyFileSync)(l,u),console.error(`[init-tower] Copied SKILL.md → ${c}`)),function(e){let a=(0,r.join)(e,".claude","settings.json");if((0,t.existsSync)(a))try{let e=JSON.parse((0,t.readFileSync)(a,"utf-8"));e&&"mcpServers"in e&&(delete e.mcpServers,(0,t.writeFileSync)(a,JSON.stringify(e,null,2)+"\n","utf-8"),console.error(`[init-tower] Removed legacy mcpServers from ${a}`))}catch{}let o=(0,r.join)(e,".mcp.json");if((0,t.existsSync)(o))try{let e,r,a,i,l=(e=process.cwd().replace(/\\/g,"/"),r=process.env.DATABASE_URL||`file:${(0,n.getTowerDbPath)().replace(/\\/g,"/")}`,a=`${e}/dist/mcp-server.cjs`,i=(0,s.getTowerMcpName)(),(0,t.existsSync)(a)?{name:i,command:"node",args:[a],env:{DATABASE_URL:r}}:{name:i,command:`${e}/node_modules/.bin/tsx`,args:[`${e}/src/mcp/index.ts`],env:{DATABASE_URL:r}}).name,c=JSON.parse((0,t.readFileSync)(o,"utf-8")),u=c.mcpServers??{};l in u&&(delete u[l],0===Object.keys(u).length?delete c.mcpServers:c.mcpServers=u,(0,t.writeFileSync)(o,JSON.stringify(c,null,2)+"\n","utf-8"),console.error(`[init-tower] Removed legacy tower entry from ${o}`))}catch{}}(e),e}])},137382,e=>{"use strict";var t=e.i(765876),r=e.i(675896),n=e.i(959160),s=e.i(97944),a=e.i(86757),o=e.i(204144),i=e.i(273436),l=e.i(743641),c=e.i(813766),u=e.i(840884),p=e.i(498814),d=e.i(780006),m=e.i(544432),f=e.i(772005),h=e.i(450223),v=e.i(193695);e.i(628400);var w=e.i(800071),y=e.i(855104),g=e.i(198840),x=e.i(471552);function S(){return"u">typeof crypto&&crypto.randomUUID?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}async function A(t){let r=(0,g.requireLocalhost)(t);if(r)return r;let n=t.nextUrl.searchParams.get("sessionId");if(!n)return y.NextResponse.json({error:"sessionId required"},{status:400});let s=(0,x.ensureTowerDir)();try{let{getSessionMessages:t}=await e.A(145135),r=await t(n,{dir:s}),a=function(e){let t=[];for(let n of e)switch(n.type){case"user":{var r;let e=n.message,s="string"==typeof e?.content?e.content:"";s.startsWith("/tower ")&&(s=s.slice(7));let a=s.match(/<command-args>([\s\S]*?)<\/command-args>/);a&&(s=a[1].trim()),s=s.replace(/\n---\nThe user has attached the following file\(s\)[\s\S]*$/,"").replace(/\n---\nThe user has attached the following image\(s\)[\s\S]*$/,"").trim();let o=void(Array.isArray(r=e?.content)&&r.filter(e=>"image"===e.type&&e.source?.data).length);s&&t.push({id:S(),role:"user",content:s,attachmentFilenames:o});break}case"assistant":{let e=n.message,r=Array.isArray(e?.content)?e.content:[],s=r.filter(e=>"text"===e.type&&e.text).map(e=>e.text);for(let e of(s.length>0&&t.push({id:S(),role:"assistant",content:s.join("")}),r))"tool_use"===e.type&&e.name&&t.push({id:S(),role:"tool",content:JSON.stringify(e.input??{},null,2),toolName:e.name});break}case"system":{let e=n.message;e?.subtype==="tool_result"&&e.content&&t.push({id:S(),role:"tool",content:e.content,toolName:`${e.tool_name??"tool"} (result)`})}}return t}(r);return y.NextResponse.json({messages:a})}catch(t){let e=t instanceof Error?t.message:String(t);return console.error("[assistant-sessions] Error:",e),y.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,A,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],866197);var b=e.i(866197);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/internal/assistant/sessions/route",pathname:"/api/internal/assistant/sessions",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/internal/assistant/sessions/route.ts",nextConfigOutput:"standalone",userland:b}),{workAsyncStorage:E,workUnitAsyncStorage:_,serverHooks:j}=R;async function T(e,t,n){n.requestMeta&&(0,s.setRequestMeta)(e,n.requestMeta),R.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/internal/assistant/sessions/route";y=y.replace(/\/index$/,"")||"/";let g=await R.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:x,params:S,nextConfig:A,parsedUrl:b,isDraftMode:E,prerenderManifest:_,routerServerContext:j,isOnDemandRevalidate:T,revalidateOnlyGenerated:C,resolvedPathname:N,clientReferenceManifest:P,serverActionsManifest:k}=g,D=(0,i.normalizeAppPath)(y),O=!!(_.dynamicRoutes[D]||_.routes[N]),$=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,b,!1):t.end("This page could not be found"),null);if(O&&!E){let e=!!_.routes[N],t=_.dynamicRoutes[D];if(t&&!1===t.fallback&&!e){if(A.adapterPath)return await $();throw new v.NoFallbackError}}let I=null;!O||R.isDev||E||(I="/index"===(I=N)?"/":I);let U=!0===R.isDev||!O,q=O&&!U;k&&P&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:P,serverActionsManifest:k});let L=e.method||"GET",H=(0,a.getTracer)(),F=H.getActiveScopeSpan(),M=!!(null==j?void 0:j.isWrappedByNextServer),W=!!(0,s.getRequestMeta)(e,"minimalMode"),B=(0,s.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,A,_,W);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let K={params:S,previewProps:_.preview,renderOpts:{experimental:{authInterrupts:!!A.experimental.authInterrupts},cacheComponents:!!A.cacheComponents,supportsDynamicResponse:U,incrementalCache:B,cacheLifeProfiles:A.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,s)=>R.onRequestError(e,t,n,s,j)},sharedContext:{buildId:x}},G=new l.NodeNextRequest(e),J=new l.NodeNextResponse(t),z=c.NextRequestAdapter.fromNodeNextRequest(G,(0,c.signalFromNodeResponse)(t));try{let s,o=async e=>R.handle(z,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=H.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${L} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",n),s.updateName(t))}else e.updateName(`${L} ${y}`)}),i=async s=>{var a,i;let l=async({previousCacheEntry:r})=>{try{if(!W&&T&&C&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await o(s);e.fetchMetrics=K.renderOpts.fetchMetrics;let i=K.renderOpts.pendingWaitUntil;i&&n.waitUntil&&(n.waitUntil(i),i=void 0);let l=K.renderOpts.collectedTags;if(!O)return await (0,d.sendResponse)(G,J,a,K.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[h.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,n=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:T})},!1,j),t}},c=await R.handleResponse({req:e,nextConfig:A,cacheKey:I,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:_,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:C,responseGenerator:l,waitUntil:n.waitUntil,isMinimalMode:W});if(!O)return null;if((null==c||null==(a=c.value)?void 0:a.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(i=c.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});W||t.setHeader("x-nextjs-cache",T?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,m.fromNodeOutgoingHttpHeaders)(c.value.headers);return W&&O||u.delete(h.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,f.getCacheControlHeader)(c.cacheControl)),await (0,d.sendResponse)(G,J,new Response(c.value.body,{headers:u,status:c.value.status||200})),null};M&&F?await i(F):(s=H.getActiveScopeSpan(),await H.withPropagatedContext(e.headers,()=>H.trace(u.BaseServerSpan.handleRequest,{spanName:`${L} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},i),void 0,!M))}catch(t){if(t instanceof v.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:q,isOnDemandRevalidate:T})},!1,j),O)throw t;return await (0,d.sendResponse)(G,J,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:_})},"routeModule",0,R,"serverHooks",0,j,"workAsyncStorage",0,E,"workUnitAsyncStorage",0,_],137382)},482848,e=>{e.v(e=>Promise.resolve().then(()=>e(874533)))},268548,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_util_0xr.y7p._.js"].map(t=>e.l(t))).then(()=>t(812057)))},144264,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_child_process_0pwkpv9._.js"].map(t=>e.l(t))).then(()=>t(233405)))},534777,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_util_0wtvqkc._.js"].map(t=>e.l(t))).then(()=>t(224361)))},145135,e=>{e.v(t=>Promise.all(["server/chunks/[externals]__00yf3l2._.js","server/chunks/07-d_@anthropic-ai_claude-agent-sdk_sdk_mjs_0.721uk._.js"].map(t=>e.l(t))).then(()=>t(217040)))}];
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0_q8qjf._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},874533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},270406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},198840,e=>{"use strict";var t=e.i(855104);let r=["localhost","127.0.0.1","[::1]"],s=new Set(["127.0.0.1","::1","::ffff:127.0.0.1"]),n=/^c[a-z0-9]{20,30}$/;e.s(["requireLocalhost",0,function(e){let n=e.headers.get("x-forwarded-for");if(n&&!n.split(",").map(e=>e.trim()).every(e=>s.has(e)))return t.NextResponse.json({error:"Forbidden"},{status:403});let a=e.headers.get("host")??"";return r.some(e=>a.startsWith(e))?null:t.NextResponse.json({error:"Forbidden"},{status:403})},"validateProjectId",0,function(e){return n.test(e)?null:t.NextResponse.json({error:"Invalid projectId format"},{status:400})},"validateTaskId",0,function(e){return n.test(e)?null:t.NextResponse.json({error:"Invalid taskId format"},{status:400})}])},769310,e=>{"use strict";var t=e.i(902157),r=e.i(874533),s=e.i(750227);function n(e=process.platform){return"win32"===e}function a(e){let t=e.replace(/\r\n|\r|\n/g," ");if(!t.length)return'""';let r=t.replace(/"/g,'""');return/[\s"&<>|^()]/.test(r)?`"${r}"`:r}let o=["CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION","CLAUDE_CODE_PARENT_SESSION"];async function i(e,t={}){let r=t.cwd??process.cwd(),a=t.env??process.env,o=t.platform??process.platform;if(e.includes("/")||e.includes("\\")){let t=s.default.isAbsolute(e)?e:s.default.resolve(r,e);return await p(t,o)?t:null}let l=a.PATH??a.Path??"",u=n(o)?";":":",c=l.split(u).filter(Boolean),d=n(o)?(a.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""],m=n(o)&&s.default.extname(e).length>0;for(let t of c)for(let r of n(o)?m?[s.default.join(t,e)]:d.map(r=>s.default.join(t,`${e}${r}`)):[s.default.join(t,e)])if(await p(r,o))return r;return null}let l=e=>(0,r.execSync)(e,{encoding:"utf-8",timeout:5e3});function u(e,t=process.platform,a=l){if(s.default.extname(e)||e.includes("/")||e.includes("\\"))return e;if(!n(t)){try{let t=(0,r.execFileSync)("which",[e],{encoding:"utf-8",timeout:5e3}).trim();if(t)return t}catch{}return e}try{let t=a(`where ${e}`).trim().split("\n").map(e=>e.trim()).filter(Boolean),r=t.find(e=>/\.(cmd|bat|exe)$/i.test(e));if(r)return r;if(t.length>0)return t[0]}catch{}return e}async function c(e,t,r={}){let s=r.env??process.env,n=r.platform??process.platform;return d(await i(e,r)??e,t,s,n)}function d(e,t,r,o){if(!n(o))return{command:e,args:t};let i=s.default.extname(e).toLowerCase();return".cmd"===i||".bat"===i||".com"===i?{command:r.ComSpec||"cmd.exe",args:["/d","/s","/c",[a(e),...t.map(a)].join(" ")]}:{command:e,args:t}}async function p(e,r=process.platform){try{return await t.promises.access(e,n(r)?t.constants.F_OK:t.constants.X_OK),!0}catch{return!1}}async function m(e=process.platform){return n(e)?f():h()}async function h(){try{let e=await t.promises.readFile("/etc/shells","utf-8"),r=[],n=new Map;for(let t of e.split("\n")){let e=t.replace(/#.*/,"").trim();if(!e||!e.startsWith("/")||!await p(e))continue;let a=s.default.basename(e),o=n.get(a)??0;n.set(a,o+1),o>0&&(a=`${a} (${o+1})`),r.push({name:a,path:e})}return r}catch{let e=[];for(let t of["/bin/zsh","/bin/bash","/bin/sh"])await p(t)&&e.push({name:s.default.basename(t),path:t});return e}}async function f(){let e=[],t=[],r=await i("git",{platform:"win32"});if(r){let e=s.default.resolve(s.default.dirname(r),"..","..");t.push(s.default.join(e,"bin","bash.exe"),s.default.join(e,"usr","bin","bash.exe"))}for(let e of[process.env.ProgramW6432,process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData?s.default.join(process.env.LocalAppData,"Programs"):null].filter(Boolean))t.push(s.default.join(e,"Git","bin","bash.exe"),s.default.join(e,"Git","usr","bin","bash.exe"));let n=process.env.USERPROFILE??"";for(let r of(n&&t.push(s.default.join(n,"scoop","apps","git","current","bin","bash.exe")),process.env.CLAUDE_CODE_GIT_BASH_PATH&&t.unshift(process.env.CLAUDE_CODE_GIT_BASH_PATH),t))if(await p(r,"win32")){e.push({name:"Git Bash",path:r});break}let a=await i("pwsh",{platform:"win32"});a&&e.push({name:"PowerShell",path:a});let o=process.env.windir??"C:\\WINDOWS",l=s.default.join(o,"System32","WindowsPowerShell","v1.0","powershell.exe");await p(l,"win32")&&e.push({name:"Windows PowerShell",path:l});let u=process.env.ComSpec??s.default.join(o,"System32","cmd.exe");return await p(u,"win32")&&e.push({name:"Command Prompt",path:u}),e}let g=[{name:"Terminal",bundleName:"Terminal"},{name:"iTerm2",bundleName:"iTerm"},{name:"Warp",bundleName:"Warp"},{name:"Alacritty",bundleName:"Alacritty"},{name:"WezTerm",bundleName:"WezTerm"},{name:"kitty",bundleName:"kitty"},{name:"Hyper",bundleName:"Hyper"}];async function v(e=process.platform){if("darwin"===e){let t=[];for(let r of g)await p(`/Applications/${r.bundleName}.app`,e)&&t.push({name:r.name,value:r.bundleName});return t}if(n(e)){let t=[],r=await i("wt",{platform:e});return r&&t.push({name:"Windows Terminal",value:r}),t}return[]}e.s(["detectShells",0,m,"detectTerminalApps",0,v,"ensurePathInEnv",0,function(e,t=process.platform){let r=n(t)?"Path":"PATH";return(e.PATH??e.Path??"").length>0?e:{...e,[r]:function(e=process.platform){return n(e)?"C:\\Windows\\System32;C:\\Windows;C:\\Windows\\System32\\Wbem":"/usr/local/bin:/opt/homebrew/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin"}(t)}},"resolveCommandPath",0,i,"resolveCommandPathSync",0,u,"resolveSpawnTarget",0,c,"resolveSpawnTargetSync",0,function(e,t,r=process.platform,s){return d(u(e,r,s),t,process.env,r)},"stripClaudeNestingEnv",0,function(e){let t={...e};for(let e of o)delete t[e];return t}])},472129,e=>{"use strict";var t=e.i(902157),r=e.i(660526),s=e.i(750227),n=e.i(769310);let a=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];e.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(e){let t=["--dangerously-skip-permissions"];e.extraArgs?.length&&t.push(...e.extraArgs),e.resumeSessionId?t.push("--resume",e.resumeSessionId):e.continueLatest?t.push("--continue"):e.prompt&&t.push(e.prompt);let r={...e.envOverrides??{}};return{command:this.resolveCommand(),args:t,env:r}}buildEnvOverrides(e){let t={TOWER_TASK_ID:e.taskId,TOWER_TASK_TITLE:e.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:e.apiUrl};return e.callbackUrl&&(t.CALLBACK_URL=e.callbackUrl),t}async installHooks(e){try{let e=this.readSettings(),t=e.hooks??{},r=process.cwd().replace(/\\/g,"/"),n=!1,a=this.getHookArray(t,"SessionStart");if(!this.hasHook(a,"session-start-hook.js")){let e=s.join(r,"scripts","session-start-hook.js").replace(/\\/g,"/");a.push({hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]}),t.SessionStart=a,n=!0}let o=this.getHookArray(t,"PostToolUse");if(!this.hasHook(o,"post-tool-hook.js")){let e=s.join(r,"scripts","post-tool-hook.js").replace(/\\/g,"/");o.push({hooks:[{command:`node "${e}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"}),t.PostToolUse=o,n=!0}let i=this.getHookArray(t,"Stop");if(!this.hasHook(i,"stop-hook.js")){let e=s.join(r,"scripts","stop-hook.js").replace(/\\/g,"/");i.push({hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]}),t.Stop=i,n=!0}return n&&(e.hooks=t,this.writeSettings(e)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async uninstallHooks(){try{let e=this.readSettings(),t=e.hooks??{},r=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let e of["SessionStart","PostToolUse","Stop"]){let s=this.getHookArray(t,e);t[e]=s.filter(e=>!e.hooks?.some(e=>r.some(t=>e.command?.includes(t))))}return e.hooks=t,this.writeSettings(e),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(e){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:e instanceof Error?e.message:String(e)}}}async isHooksInstalled(){let e=this.readSettings().hooks??{},t=this.getHookArray(e,"PostToolUse");return this.hasHook(t,"post-tool-hook.js")}async installMcp(e,t={}){let r=t.scope??"user",s={command:e.command,args:e.args};e.env&&Object.keys(e.env).length>0&&(s.env=e.env);let n=this.resolveCommand(),a=["mcp","add-json","-s",r,e.name,JSON.stringify(s)];try{return await this.runCli(n,["mcp","remove","-s",r,e.name],t.cwd).catch(()=>{}),await this.runCli(n,a,t.cwd),{ok:!0,method:"cli",detail:`${n} ${a.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${n} ${a.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async uninstallMcp(e,t={}){let r=t.scope??"user",s=this.resolveCommand(),n=["mcp","remove","-s",r,e];try{return await this.runCli(s,n,t.cwd),{ok:!0,method:"cli",detail:`${s} ${n.join(" ")}`}}catch(e){return{ok:!1,method:"cli",detail:`${s} ${n.join(" ")}`,error:e instanceof Error?e.message:String(e)}}}async isMcpInstalled(e,t={}){let r=this.resolveCommand();try{return await this.runCli(r,["mcp","get",e],t.cwd,5e3),!0}catch{return!1}}async installSkill(e,r){let n=s.join(this.getConfigDir(),"skills",e);try{if(!t.existsSync(r))return{ok:!1,method:"symlink",detail:n,error:`Source skill dir does not exist: ${r}`};t.mkdirSync(s.dirname(n),{recursive:!0});let e=await t.promises.lstat(n).catch(()=>null);if(e)if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:n,error:`Refusing to overwrite non-symlink at ${n}`};else{let e=await t.promises.readlink(n);if(s.resolve(e)===s.resolve(r))return{ok:!0,method:"symlink",detail:`${n} → ${r} (already)`};await t.promises.unlink(n)}return await t.promises.symlink(r,n,"dir"),{ok:!0,method:"symlink",detail:`${n} → ${r}`}}catch(e){return{ok:!1,method:"symlink",detail:n,error:e instanceof Error?e.message:String(e)}}}async uninstallSkill(e){let r=s.join(this.getConfigDir(),"skills",e);try{let e=await t.promises.lstat(r).catch(()=>null);if(!e)return{ok:!0,method:"symlink",detail:`${r} (already absent)`};if(!e.isSymbolicLink())return{ok:!1,method:"symlink",detail:r,error:`Refusing to remove non-symlink at ${r}`};return await t.promises.unlink(r),{ok:!0,method:"symlink",detail:r}}catch(e){return{ok:!1,method:"symlink",detail:r,error:e instanceof Error?e.message:String(e)}}}async isSkillInstalled(e,r){let n=s.join(this.getConfigDir(),"skills",e);try{if(!(await t.promises.lstat(n)).isSymbolicLink())return!1;if(!r)return!0;let e=await t.promises.readlink(n),a=s.isAbsolute(e)?e:s.resolve(s.dirname(n),e);return s.resolve(a)===s.resolve(r)}catch{return!1}}async runCli(t,r,s,n=1e4){let{execFile:a}=await e.A(482848),{promisify:o}=await e.A(268548),i=o(a),{stdout:l}=await i(t,r,{cwd:s,timeout:n});return l}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:t}=await e.A(144264),{promisify:r}=await e.A(534777),s=r(t),n=this.resolveCommand(),{stdout:a}=await s(n,["--version"],{timeout:5e3});return a.trim()||null}catch{return null}}async getModels(){return a}getConfigDir(){return s.join(r.homedir(),".claude")}getSettingsPath(){return s.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return s.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(){return{command:this.resolveCommand(),args:["--print","-","--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,n.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(t.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(e){let r=this.getConfigDir();t.existsSync(r)||t.mkdirSync(r,{recursive:!0}),t.writeFileSync(this.getSettingsPath(),JSON.stringify(e,null,2),"utf-8")}getHookArray(e,t){let r=e[t];return Array.isArray(r)?r:[]}hasHook(e,t){return e.some(e=>e.hooks?.some(e=>e.command?.includes(t)))}}])},212019,e=>{"use strict";var t=e.i(765876),r=e.i(675896),s=e.i(959160),n=e.i(97944),a=e.i(86757),o=e.i(204144),i=e.i(273436),l=e.i(743641),u=e.i(813766),c=e.i(840884),d=e.i(498814),p=e.i(780006),m=e.i(544432),h=e.i(772005),f=e.i(450223),g=e.i(193695);e.i(628400);var v=e.i(800071),y=e.i(855104),k=e.i(198840),w=e.i(750227);let x=new(e.i(472129)).ClaudeCliAdapter;async function S(e){let t=(0,k.requireLocalhost)(e);if(t)return t;let r=await x.isHooksInstalled(),s=w.join(process.cwd(),"scripts","post-tool-hook.js");return y.NextResponse.json({installed:r,hookPath:s})}async function C(e){let t=(0,k.requireLocalhost)(e);if(t)return t;let r=process.env.NEXTAUTH_URL??`http://localhost:${process.env.PORT??3e3}`;return await x.installHooks(r),y.NextResponse.json({success:!0})}async function A(e){let t=(0,k.requireLocalhost)(e);return t||(await x.uninstallHooks(),y.NextResponse.json({success:!0}))}e.s(["DELETE",0,A,"GET",0,S,"POST",0,C,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],730599);var E=e.i(730599);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/internal/hooks/install/route",pathname:"/api/internal/hooks/install",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/internal/hooks/install/route.ts",nextConfigOutput:"standalone",userland:E}),{workAsyncStorage:R,workUnitAsyncStorage:T,serverHooks:j}=b;async function P(e,t,s){s.requestMeta&&(0,n.setRequestMeta)(e,s.requestMeta),b.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/internal/hooks/install/route";y=y.replace(/\/index$/,"")||"/";let k=await b.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!k)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:w,params:x,nextConfig:S,parsedUrl:C,isDraftMode:A,prerenderManifest:E,routerServerContext:R,isOnDemandRevalidate:T,revalidateOnlyGenerated:j,resolvedPathname:P,clientReferenceManifest:_,serverActionsManifest:N}=k,O=(0,i.normalizeAppPath)(y),H=!!(E.dynamicRoutes[O]||E.routes[P]),D=async()=>((null==R?void 0:R.render404)?await R.render404(e,t,C,!1):t.end("This page could not be found"),null);if(H&&!A){let e=!!E.routes[P],t=E.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(S.adapterPath)return await D();throw new g.NoFallbackError}}let I=null;!H||b.isDev||A||(I="/index"===(I=P)?"/":I);let $=!0===b.isDev||!H,U=H&&!$;N&&_&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:_,serverActionsManifest:N});let q=e.method||"GET",L=(0,a.getTracer)(),W=L.getActiveScopeSpan(),M=!!(null==R?void 0:R.isWrappedByNextServer),F=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,S,E,F);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let K={params:x,previewProps:E.preview,renderOpts:{experimental:{authInterrupts:!!S.experimental.authInterrupts},cacheComponents:!!S.cacheComponents,supportsDynamicResponse:$,incrementalCache:B,cacheLifeProfiles:S.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>b.onRequestError(e,t,s,n,R)},sharedContext:{buildId:w}},G=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),V=u.NextRequestAdapter.fromNodeNextRequest(G,(0,u.signalFromNodeResponse)(t));try{let n,o=async e=>b.handle(V,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=L.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${q} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",s),n.updateName(t))}else e.updateName(`${q} ${y}`)}),i=async n=>{var a,i;let l=async({previousCacheEntry:r})=>{try{if(!F&&T&&j&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await o(n);e.fetchMetrics=K.renderOpts.fetchMetrics;let i=K.renderOpts.pendingWaitUntil;i&&s.waitUntil&&(s.waitUntil(i),i=void 0);let l=K.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(G,X,a,K.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,m.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,s=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:T})},!1,R),t}},u=await b.handleResponse({req:e,nextConfig:S,cacheKey:I,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:E,isRoutePPREnabled:!1,isOnDemandRevalidate:T,revalidateOnlyGenerated:j,responseGenerator:l,waitUntil:s.waitUntil,isMinimalMode:F});if(!H)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(i=u.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});F||t.setHeader("x-nextjs-cache",T?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,m.fromNodeOutgoingHttpHeaders)(u.value.headers);return F&&H||c.delete(f.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(G,X,new Response(u.value.body,{headers:c,status:u.value.status||200})),null};M&&W?await i(W):(n=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(c.BaseServerSpan.handleRequest,{spanName:`${q} ${y}`,kind:a.SpanKind.SERVER,attributes:{"http.method":q,"http.target":e.url}},i),void 0,!M))}catch(t){if(t instanceof g.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:T})},!1,R),H)throw t;return await (0,p.sendResponse)(G,X,new Response(null,{status:500})),null}}e.s(["handler",0,P,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:T})},"routeModule",0,b,"serverHooks",0,j,"workAsyncStorage",0,R,"workUnitAsyncStorage",0,T],212019)},482848,e=>{e.v(e=>Promise.resolve().then(()=>e(874533)))},268548,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_node_util_0xr.y7p._.js"].map(t=>e.l(t))).then(()=>t(812057)))},144264,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_child_process_0pwkpv9._.js"].map(t=>e.l(t))).then(()=>t(233405)))},534777,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_util_0wtvqkc._.js"].map(t=>e.l(t))).then(()=>t(224361)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0vasg9u._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[814747,(a,b,c)=>{b.exports=a.x("path",()=>require("path"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},918622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},120635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},207198,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("4067fd4fb0d2c621f4cf76052ed7f61daeeb0ee506",b.callServer,void 0,b.findSourceMapURL,"getLabelsForWorkspace");a.s(["getLabelsForWorkspace",0,c])},607219,a=>{"use strict";let b=(0,a.i(711796).default)("archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);a.s(["Archive",0,b],607219)},350739,a=>{"use strict";let b=(0,a.i(711796).default)("file-text",[["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:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",0,b],350739)},429246,a=>{"use strict";var b=a.i(728778),c=a.i(368114);a.s(["Textarea",0,function({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("flex field-sizing-content min-h-16 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",a),...d})}])},975231,a=>{"use strict";let b=(0,a.i(711796).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",0,b],975231)},774881,a=>{"use strict";let b=(0,a.i(711796).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);a.s(["Plus",0,b],774881)},690251,a=>{"use strict";let b=(0,a.i(711796).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",0,b],690251)},463652,(a,b,c)=>{"use strict";c._=function(a){return a&&a.__esModule?a:{default:a}}},923266,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"BailoutToCSR",{enumerable:!0,get:function(){return e}});let d=a.r(306150);function e({reason:a,children:b}){throw Object.defineProperty(new d.BailoutToCSRError(a),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}},846982,(a,b,c)=>{"use strict";function d(a){return a.split("/").map(a=>encodeURIComponent(a)).join("/")}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"encodeURIPath",{enumerable:!0,get:function(){return d}})},943814,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"PreloadChunks",{enumerable:!0,get:function(){return i}});let d=a.r(728778),e=a.r(986099),f=a.r(556704),g=a.r(846982),h=a.r(427756);function i({moduleIds:a}){let b=f.workAsyncStorage.getStore();if(void 0===b)return null;let c=[];if(b.reactLoadableManifest&&a){let d=b.reactLoadableManifest;for(let b of a){if(!d[b])continue;let a=d[b].files;c.push(...a)}}if(0===c.length)return null;let j=(0,h.getAssetTokenQuery)();return(0,d.jsx)(d.Fragment,{children:c.map(a=>{let c=`${b.assetPrefix}/_next/${(0,g.encodeURIPath)(a)}${j}`;return a.endsWith(".css")?(0,d.jsx)("link",{precedence:"dynamic",href:c,rel:"stylesheet",as:"style",nonce:b.nonce},a):((0,e.preload)(c,{as:"script",fetchPriority:"low",nonce:b.nonce}),null)})})}},451358,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return j}});let d=a.r(728778),e=a.r(374637),f=a.r(923266),g=a.r(943814);function h(a){return{default:a&&"default"in a?a.default:a}}let i={loader:()=>Promise.resolve(h(()=>null)),loading:null,ssr:!0},j=function(a){let b={...i,...a},c=(0,e.lazy)(()=>b.loader().then(h)),j=b.loading;function k(a){let h=j?(0,d.jsx)(j,{isLoading:!0,pastDelay:!0,error:null}):null,i=!b.ssr||!!b.loading,k=i?e.Suspense:e.Fragment,l=b.ssr?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.PreloadChunks,{moduleIds:b.modules}),(0,d.jsx)(c,{...a})]}):(0,d.jsx)(f.BailoutToCSR,{reason:"next/dynamic",children:(0,d.jsx)(c,{...a})});return(0,d.jsx)(k,{...i?{fallback:h}:{},children:l})}return k.displayName="LoadableComponent",k}},969032,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"default",{enumerable:!0,get:function(){return e}});let d=a.r(463652)._(a.r(451358));function e(a,b){let c={};"function"==typeof a&&(c.loader=a);let e={...c,...b};return(0,d.default)({...e,modules:e.loadableGenerated?.modules})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},91756,a=>{"use strict";let b=(0,a.i(711796).default)("chevrons-left",[["path",{d:"m11 17-5-5 5-5",key:"13zhaf"}],["path",{d:"m18 17-5-5 5-5",key:"h8a8et"}]]);a.s(["ChevronsLeft",0,b],91756)},394259,a=>{"use strict";let b=(0,a.i(711796).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",0,b],394259)},968244,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("6010be27d73fb2711d5121f370499004d215316e90",b.callServer,void 0,b.findSourceMapURL,"analyzeProjectDirectory");a.s(["analyzeProjectDirectory",0,c])},829905,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("40b29676c80b38d0d135fed4bcbd857eb6583c7787",b.callServer,void 0,b.findSourceMapURL,"createProject");a.s(["createProject",0,c])},595999,380096,a=>{"use strict";var b=a.i(728778),c=a.i(374637),d=a.i(616335),e=a.i(192369),f=a.i(699570);class g extends c.Component{constructor(a){super(a),this.state={hasError:!1,error:null}}static getDerivedStateFromError(a){return{hasError:!0,error:a}}componentDidCatch(a,b){console.error("[ErrorBoundary]",a,b)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 p-8 text-center",children:[(0,b.jsx)(d.AlertCircle,{className:"h-8 w-8 text-destructive"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-medium text-foreground",children:"Something went wrong"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:this.state.error?.message??"An unexpected error occurred"})]}),(0,b.jsxs)(f.Button,{variant:"outline",onClick:()=>this.setState({hasError:!1,error:null}),children:[(0,b.jsx)(e.RefreshCw,{className:"mr-2 h-3.5 w-3.5"}),"Retry"]})]}):this.props.children}}a.s(["ErrorBoundary",0,g],595999);var h=a.i(780410);let i=(0,h.createServerReference)("00c92aaae55d20ab311505ed9d61f2ccd03631bd11",h.callServer,void 0,h.findSourceMapURL,"getActualWsPort");a.s(["getActualWsPort",0,i],380096)},940271,a=>{"use strict";var b=a.i(374637),c=(a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}},d=["light","dark"],e="(prefers-color-scheme: dark)",f=b.createContext(void 0),g={setTheme:a=>{},themes:[]},h=["light","dark"],i=({forcedTheme:a,disableTransitionOnChange:c=!1,enableSystem:g=!0,enableColorScheme:i=!0,storageKey:n="theme",themes:o=h,defaultTheme:p=g?"system":"light",attribute:q="data-theme",value:r,children:s,nonce:t,scriptProps:u})=>{let[v,w]=b.useState(()=>k(n,p)),[x,y]=b.useState(()=>"system"===v?m():v),z=r?Object.values(r):o,A=b.useCallback(a=>{let b=a;if(!b)return;"system"===a&&g&&(b=m());let e=r?r[b]:b,f=c?l(t):null,h=document.documentElement,j=a=>{"class"===a?(h.classList.remove(...z),e&&h.classList.add(e)):a.startsWith("data-")&&(e?h.setAttribute(a,e):h.removeAttribute(a))};if(Array.isArray(q)?q.forEach(j):j(q),i){let a=d.includes(p)?p:null,c=d.includes(b)?b:a;h.style.colorScheme=c}null==f||f()},[t]),B=b.useCallback(a=>{let b="function"==typeof a?a(v):a;w(b);try{localStorage.setItem(n,b)}catch(a){}},[v]),C=b.useCallback(b=>{y(m(b)),"system"===v&&g&&!a&&A("system")},[v,a]);b.useEffect(()=>{let a=window.matchMedia(e);return a.addListener(C),C(a),()=>a.removeListener(C)},[C]),b.useEffect(()=>{let a=a=>{a.key===n&&(a.newValue?w(a.newValue):B(p))};return window.addEventListener("storage",a),()=>window.removeEventListener("storage",a)},[B]),b.useEffect(()=>{A(null!=a?a:v)},[a,v]);let D=b.useMemo(()=>({theme:v,setTheme:B,forcedTheme:a,resolvedTheme:"system"===v?x:v,themes:g?[...o,"system"]:o,systemTheme:g?x:void 0}),[v,B,a,x,g,o]);return b.createElement(f.Provider,{value:D},b.createElement(j,{forcedTheme:a,storageKey:n,attribute:q,enableSystem:g,enableColorScheme:i,defaultTheme:p,value:r,themes:o,nonce:t,scriptProps:u}),s)},j=b.memo(({forcedTheme:a,storageKey:d,attribute:e,enableSystem:f,enableColorScheme:g,defaultTheme:h,value:i,themes:j,nonce:k,scriptProps:l})=>{let m=JSON.stringify([e,d,h,a,j,i,f,g]).slice(1,-1);return b.createElement("script",{...l,suppressHydrationWarning:!0,nonce:k,dangerouslySetInnerHTML:{__html:`(${c.toString()})(${m})`}})}),k=(a,b)=>{},l=a=>{let b=document.createElement("style");return a&&b.setAttribute("nonce",a),b.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(b),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(b)},1)}},m=a=>(a||(a=window.matchMedia(e)),a.matches?"dark":"light");a.s(["ThemeProvider",0,a=>b.useContext(f)?b.createElement(b.Fragment,null,a.children):b.createElement(i,{...a}),"useTheme",0,()=>{var a;return null!=(a=b.useContext(f))?a:g}])},51726,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("40cfcf5cf3e6dba3ee24e20f9f43c4f786966433a6",b.callServer,void 0,b.findSourceMapURL,"installExtension");a.s(["installExtension",0,c])},191117,a=>{"use strict";let b=(0,a.i(711796).default)("file-code",[["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:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]);a.s(["FileCode",0,b],191117)},953093,a=>{"use strict";var b=a.i(573242),c=a.i(191117);let d={rg:{id:"rg",name:"代码搜索 (ripgrep)",description:"基于 rg 的全文代码搜索",icon:b.Search,sizeMB:5,homepageUrl:"https://github.com/BurntSushi/ripgrep#installation"},monaco:{id:"monaco",name:"代码编辑器 (Monaco)",description:"VS Code 同款 Web 编辑器",icon:c.FileCode,sizeMB:15,homepageUrl:"https://microsoft.github.io/monaco-editor/"}},e=[d.rg,d.monaco];a.s(["listExtensionMetadata",0,function(){return e}])},62948,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("60e2acb3d36c142a3e4d24fea825c4c133651c0c53",b.callServer,void 0,b.findSourceMapURL,"setConfigValue");a.s(["setConfigValue",0,c])},761052,86354,a=>{"use strict";var b=a.i(711796);let c=(0,b.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);a.s(["Sun",0,c],761052);let d=(0,b.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]);a.s(["Moon",0,d],86354)},884664,a=>{"use strict";let b=(0,a.i(711796).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["default",0,b])},54384,a=>{"use strict";var b=a.i(758349);a.s(["X",()=>b.default])},573242,a=>{"use strict";var b=a.i(648717);a.s(["Search",()=>b.default])},146758,745539,a=>{"use strict";let b=(0,a.i(711796).default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["Folder",0,b],146758);var c=a.i(219551);a.s(["ChevronUp",()=>c.default],745539)},192369,a=>{"use strict";let b=(0,a.i(711796).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",0,b],192369)},622945,a=>{"use strict";let b=(0,a.i(711796).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["default",0,b])},87309,a=>{"use strict";var b=a.i(728778),c=a.i(374637),d=a.i(780410);let e=(0,d.createServerReference)("400240ee16769f00f7ca5c4ecea3ef0ce7456de6f8",d.callServer,void 0,d.findSourceMapURL,"checkExtension");var f=a.i(51726);let g=(0,d.createServerReference)("40abaad3bddaedba77f17bf2518e483b46a19273c2",d.callServer,void 0,d.findSourceMapURL,"uninstallExtension");var h=a.i(953093);let i={installed:!1},j=(0,c.createContext)(null);a.s(["ExtensionContext",0,j,"ExtensionProvider",0,function({children:a,initialStatus:d}){let[k,l]=(0,c.useState)(()=>d??Object.fromEntries((0,h.listExtensionMetadata)().map(a=>[a.id,i]))),[m,n]=(0,c.useState)(new Set),o=(0,c.useRef)(new Set),p=(0,c.useCallback)(async a=>{let b=await e(a);l(c=>({...c,[a]:b}))},[]),q=(0,c.useCallback)(async a=>{if(o.current.has(a))return{success:!1,error:"install already in progress"};o.current.add(a),n(b=>{let c=new Set(b);return c.add(a),c});try{let b=await (0,f.installExtension)(a);return b.success&&await p(a),b}finally{o.current.delete(a),n(b=>{let c=new Set(b);return c.delete(a),c})}},[p]),r=(0,c.useCallback)(async a=>{if(o.current.has(a))return{success:!1,error:"operation already in progress"};o.current.add(a),n(b=>{let c=new Set(b);return c.add(a),c});try{let b=await g(a);return b.success&&await p(a),b}finally{o.current.delete(a),n(b=>{let c=new Set(b);return c.delete(a),c})}},[p]),s=(0,c.useMemo)(()=>({statusMap:k,loading:!1,installing:m,refresh:p,install:q,uninstall:r}),[k,m,p,q,r]);return(0,b.jsx)(j.Provider,{value:s,children:a})}],87309)},369289,a=>{"use strict";let b=(0,a.i(711796).default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Settings",0,b],369289)},714982,a=>{"use strict";var b=a.i(780410);let c=(0,b.createServerReference)("605f0858448ef1a385c411f65e042acd14987cf0be",b.callServer,void 0,b.findSourceMapURL,"getConfigValue");a.s(["getConfigValue",0,c])},190076,a=>{"use strict";let b=(0,a.i(711796).default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]);a.s(["Bell",0,b],190076)},563658,a=>{"use strict";var b,c=a.i(728778);a.s([],725980),a.i(725980);var d=a.i(374637),e=a.i(327104),f=a.i(74686),g=a.i(140988),h=a.i(830067),i=a.i(420074),j=a.i(535011),k=a.i(213200),l=a.i(475295),m=a.i(366752),n=a.i(19926),o=a.i(862306);let p=d.createContext(void 0);var q=a.i(258802);let r=((b={}).checked="data-checked",b.unchecked="data-unchecked",b.disabled="data-disabled",b.readonly="data-readonly",b.required="data-required",b.valid="data-valid",b.invalid="data-invalid",b.touched="data-touched",b.dirty="data-dirty",b.filled="data-filled",b.focused="data-focused",b),s={...q.fieldValidityMapping,checked:a=>a?{[r.checked]:""}:{[r.unchecked]:""}};var t=a.i(233619),u=a.i(166388),v=a.i(77469),w=a.i(584395),x=a.i(303722),y=a.i(622047),z=a.i(100737),A=a.i(706092);let B=d.forwardRef(function(a,b){let{checked:o,className:q,defaultChecked:r,"aria-labelledby":B,id:C,inputRef:D,name:E,nativeButton:F=!1,onCheckedChange:G,readOnly:H=!1,required:I=!1,disabled:J=!1,render:K,uncheckedValue:L,value:M,...N}=a,{clearErrors:O}=(0,v.useFormContext)(),{state:P,setTouched:Q,setDirty:R,validityData:S,setFilled:T,setFocused:U,shouldValidateOnChange:V,validationMode:W,disabled:X,name:Y,validation:Z}=(0,u.useFieldRootContext)(),{labelId:$}=(0,w.useLabelableContext)(),_=X||J,aa=Y??E,ab=(0,f.useStableCallback)(G),ac=d.useRef(null),ad=(0,g.useMergedRefs)(ac,D,Z.inputRef),ae=d.useRef(null),af=(0,m.useBaseUiId)(),ag=(0,x.useLabelableId)({id:C,implicit:!1,controlRef:ae}),ah=F?void 0:ag,[ai,aj]=(0,e.useControlled)({controlled:o,default:!!r,name:"Switch",state:"checked"});(0,t.useField)({id:af,commit:Z.commit,value:ai,controlRef:ae,name:aa,getValue:()=>ai}),(0,h.useIsoLayoutEffect)(()=>{ac.current&&T(ac.current.checked)},[ac,T]),(0,A.useValueChanged)(ai,()=>{O(aa),R(ai!==S.initialValue),T(ai),V()?Z.commit(ai):Z.commit(ai,!0)});let{getButtonProps:ak,buttonRef:al}=(0,n.useButton)({disabled:_,native:F}),am=function(a,b,c,e=!0,f){let[g,i]=d.useState(),j=(0,m.useBaseUiId)(f?`${f}-label`:void 0),k=a??b??g;return(0,h.useIsoLayoutEffect)(()=>{let d=a||b||!e?void 0:function(a,b){let c=function(a){if(!a)return;let b=a.parentElement;if(b&&"LABEL"===b.tagName)return b;let c=a.id;if(c){let b=a.nextElementSibling;if(b&&b.htmlFor===c)return b}let d=a.labels;return d&&d[0]}(a);if(c)return!c.id&&b&&(c.id=b),c.id||void 0}(c.current,j);g!==d&&i(d)}),k}(B,$,ac,!F,ah),an=d.useMemo(()=>(0,l.mergeProps)({checked:ai,disabled:_,id:ah,name:aa,required:I,style:aa?i.visuallyHiddenInput:i.visuallyHidden,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:ad,onChange(a){if(a.nativeEvent.defaultPrevented)return;let b=a.target.checked,c=(0,y.createChangeEventDetails)(z.REASONS.none,a.nativeEvent);ab?.(b,c),c.isCanceled||aj(b)},onFocus(){ae.current?.focus()}},Z.getInputValidationProps,void 0!==M?{value:M}:j.EMPTY_OBJECT),[ai,_,ad,ah,aa,ab,I,aj,Z,M]),ao=d.useMemo(()=>({...P,checked:ai,disabled:_,readOnly:H,required:I}),[P,ai,_,H,I]),ap=(0,k.useRenderElement)("span",a,{state:ao,ref:[b,ae,al],props:[{id:F?ag:af,role:"switch","aria-checked":ai,"aria-readonly":H||void 0,"aria-required":I||void 0,"aria-labelledby":am,onFocus(){_||U(!0)},onBlur(){let a=ac.current;a&&!_&&(Q(!0),U(!1),"onBlur"===W&&Z.commit(a.checked))},onClick(a){H||_||(a.preventDefault(),ac.current?.dispatchEvent(new PointerEvent("click",{bubbles:!0,shiftKey:a.shiftKey,ctrlKey:a.ctrlKey,altKey:a.altKey,metaKey:a.metaKey})))}},Z.getValidationProps,N,ak],stateAttributesMapping:s});return(0,c.jsxs)(p.Provider,{value:ao,children:[ap,!ai&&aa&&void 0!==L&&(0,c.jsx)("input",{type:"hidden",name:aa,value:L}),(0,c.jsx)("input",{...an})]})}),C=d.forwardRef(function(a,b){let{render:c,className:e,...f}=a,{state:g}=(0,u.useFieldRootContext)(),h=function(){let a=d.useContext(p);if(void 0===a)throw Error((0,o.default)(63));return a}(),i={...g,...h};return(0,k.useRenderElement)("span",a,{state:i,ref:b,stateAttributesMapping:s,props:f})});a.s(["Root",0,B,"Thumb",0,C],88348);var D=a.i(88348),D=D,E=a.i(368114);a.s(["Switch",0,function({className:a,size:b="default",...d}){return(0,c.jsx)(D.Root,{"data-slot":"switch","data-size":b,className:(0,E.cn)("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",a),...d,children:(0,c.jsx)(D.Thumb,{"data-slot":"switch-thumb",className:"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"})})}],563658)},881107,a=>{"use strict";let b=(0,a.i(711796).default)("tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);a.s(["Tag",0,b],881107)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0sw9hqr._.js.map
|