tower-studio 0.2.9 → 0.2.10
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 +41 -41
- 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/browse-fs/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/assistant/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/internal/hooks/install/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/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 +73 -73
- 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 +41 -41
- 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 +41 -41
- 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 +54 -54
- 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 +98 -98
- 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 +82 -82
- 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 +71 -71
- 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 +70 -70
- 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 +41 -41
- 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 +76 -76
- 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 +88 -88
- 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 +59 -59
- 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_0h5yr8p.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]__028ucbo._.js +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__03gi3ue._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07f7~6u._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0d~z6xs._.js +2 -2
- package/.next/standalone/.next/server/chunks/_0_w835g._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_0bkvm8c._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_0weytpz._.js +1 -1
- 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.ukame._.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]__00qhe2l._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__01j8ix6._.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]__0ca_ueb._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0dsdplu._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0z7q-_5._.js → [root-of-the-server]__0kzp4-y._.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]__0n.cuy2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0nbj.ml._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0ojv-d0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pm2~fu._.js +1 -1
- 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]__0ribsk4._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0rjue04._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0souuv~._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0tc6uh2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0v2eslh._.js +1 -1
- 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]__0wlmzzq._.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]__0zbmoit._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~03tpv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0~a-emb._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__10o9il8._.js → [root-of-the-server]__11t.nhs._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__13vdw4w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_03zmko4._.js → _028bxro._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_03ae9ko._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_04b71ua._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_05h.8a~._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0_l8.dg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0568hf5._.js → _0am8~b4._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0cj9a7y._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0dr-c0.._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_0ds6nk2._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0jxhs~u._.js → _0dvj0e.._.js} +2 -2
- 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/_0ik626t._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/{_11uabrg._.js → _0jymo4.._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0999z~z._.js → _0quq3z2._.js} +2 -2
- 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/_0rt8hus._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_0zcog8w._.js → _0ssha_7._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{_0-fpxu8._.js → _0t9cbox._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0~80adm._.js +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{_0r8ftmo._.js → _13xqr7_._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/src_0eufeyj._.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/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 +276 -276
- package/.next/standalone/.next/static/chunks/0.ofi_xek10ly.js +1 -0
- package/.next/standalone/.next/static/chunks/057-vm1159y01.js +1 -0
- package/.next/standalone/.next/static/chunks/{0-9-c__gfaxpa.js → 08czwnyn-yb6h.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0d5wyd0-zzb94.js → 0dzfcafnnd9ar.js} +1 -1
- package/.next/standalone/.next/static/chunks/0e01jd~5_f9y~.js +1 -0
- package/.next/standalone/.next/static/chunks/{0obdotk~5x07o.js → 0e1rsaypb1c8g.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0y1m4k4hrzl33.js → 0esxrl_jbzhq0.js} +2 -2
- package/.next/standalone/.next/static/chunks/{0v-8_9de2o32z.js → 0ffqq7c8_0euc.js} +1 -1
- package/.next/standalone/.next/static/chunks/0g1~.f9jqo3nd.js +2 -0
- package/.next/standalone/.next/static/chunks/{05fy_a4boi~ym.js → 0g5lbqhmhs1om.js} +1 -1
- package/.next/standalone/.next/static/chunks/0iv0ao0keotf6.js +1 -0
- package/.next/standalone/.next/static/chunks/{0sbpshsch~ak2.js → 0naw4k2t-iitk.js} +2 -2
- package/.next/standalone/.next/static/chunks/0o__.a9lpdowg.js +1 -0
- package/.next/standalone/.next/static/chunks/0p2790ex-.bs1.js +1 -0
- package/.next/standalone/.next/static/chunks/0p2hpp_l5b.g3.js +1 -0
- package/.next/standalone/.next/static/chunks/0p3inhs_w7v5v.js +1 -0
- package/.next/standalone/.next/static/chunks/{0x~sbju1g3fjh.js → 0pn91v~~ax-2i.js} +1 -1
- package/.next/standalone/.next/static/chunks/0tpzfueusr2~a.js +1 -0
- package/.next/standalone/.next/static/chunks/{0p_vnqgdse218.js → 0v~wcz2xuu3p-.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0jd4uhx~x74ox.js → 0xkogzb0hkmv2.js} +2 -2
- package/.next/standalone/.next/static/chunks/{04djo-eed_8rf.js → 14-ne07fdt5gd.js} +2 -2
- package/.next/standalone/package.json +1 -1
- package/dist/mcp-server.cjs +39 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0vwc25l._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_07k_7zo._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_0gkxdta._.js +0 -7
- package/.next/standalone/.next/server/chunks/ssr/_13b~3az._.js +0 -7
- package/.next/standalone/.next/static/chunks/05mg~bkdmeovq.js +0 -1
- package/.next/standalone/.next/static/chunks/08o3st.fn2~6x.js +0 -1
- package/.next/standalone/.next/static/chunks/0e6c~o_iuvycp.js +0 -1
- package/.next/standalone/.next/static/chunks/0h3jzfwt-f9o7.js +0 -1
- package/.next/standalone/.next/static/chunks/0igfu0uxcf238.js +0 -1
- package/.next/standalone/.next/static/chunks/0o~dk86gtjq-..js +0 -1
- package/.next/standalone/.next/static/chunks/0t.7i1ltlf~rt.js +0 -2
- package/.next/standalone/.next/static/chunks/0v--ko.s9zeij.js +0 -1
- package/.next/standalone/.next/static/chunks/0ztm6whl93nyg.js +0 -1
- package/.next/standalone/.next/static/chunks/136efy8zbqp13.js +0 -1
- /package/.next/standalone/.next/static/{7iWXcI7IK1tpJQ-itTcOk → Y2nibY8eWLcXL1azqa_Q9}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{7iWXcI7IK1tpJQ-itTcOk → Y2nibY8eWLcXL1azqa_Q9}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{7iWXcI7IK1tpJQ-itTcOk → Y2nibY8eWLcXL1azqa_Q9}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
2
|
|
|
3
3
|
\`\`\`
|
|
4
4
|
${a.slice(-5e3)}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},925886,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139);async function e(a){return c.db.agentPrompt.findMany({where:a?{OR:[{workspaceId:a},{workspaceId:null}]}:{},orderBy:[{isDefault:"desc"},{name:"asc"}]})}async function f(a){return c.db.agentPrompt.findUnique({where:{id:a}})}async function g(a){if(a.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let b=await c.db.agentPrompt.create({data:a});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),b}async function h(a,b){if(void 0!==b.content&&b.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let e=await c.db.agentPrompt.update({where:{id:a},data:b});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}async function i(a){await c.db.agentPrompt.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings")}async function j(a,b){let e=await c.db.$transaction(async c=>(await c.agentPrompt.updateMany({where:b?{workspaceId:b,isDefault:!0}:{isDefault:!0},data:{isDefault:!1}}),c.agentPrompt.update({where:{id:a},data:{isDefault:!0}})));return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}(0,a.i(630048).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"401567b6c8e7e306efc9b3deeb504c75ecfaa6b199",null),(0,b.registerServerReference)(f,"40f2433bd9dd0e0d65bd81d268194c01000969a039",null),(0,b.registerServerReference)(g,"40d382477ec8f0d91ca6f03479318beeeb2189a24b",null),(0,b.registerServerReference)(h,"605dac739ca6a86b850366f21284d545b10c5f143c",null),(0,b.registerServerReference)(i,"40c6c889448129e13e3b9ebbfb47026d9564b8304f",null),(0,b.registerServerReference)(j,"60715da8918059e6cba0a0d6eb6292e18456227eae",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},835032,a=>{"use strict";async function b(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b.id),await a.$executeRawUnsafe("INSERT INTO notes_fts(note_id, title, content) VALUES (?, ?, ?)",b.id,b.title,b.content)}async function c(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b)}a.s(["deleteNoteFromFts",0,c,"syncNoteToFts",0,b])},392164,a=>{"use strict";var b=a.i(815429),c=a.i(75681),d=a.i(761469),e=a.i(188139),f=a.i(835032),g=a.i(630048);let h=c.z.object({title:c.z.string().min(1).max(200),content:c.z.string(),category:c.z.string().max(50).optional(),projectId:c.z.string().min(1),taskId:c.z.string().optional()}),i=c.z.object({title:c.z.string().min(1).max(200).optional(),content:c.z.string().optional(),category:c.z.string().max(50).optional()});async function j(a){let b=h.parse(a),c=await d.db.projectNote.create({data:{title:b.title,content:b.content,category:b.category??"备忘",projectId:b.projectId,taskId:b.taskId??null}});return await (0,f.syncNoteToFts)(d.db,{id:c.id,title:c.title,content:c.content}),(0,e.revalidatePath)("/workspace"),c}async function k(a,b){let c=i.parse(b),g=await d.db.projectNote.update({where:{id:a},data:c});return await (0,f.syncNoteToFts)(d.db,{id:g.id,title:g.title,content:g.content}),(0,e.revalidatePath)("/workspace"),g}async function l(a){await (0,f.deleteNoteFromFts)(d.db,a),await d.db.projectNote.delete({where:{id:a}}),(0,e.revalidatePath)("/workspace")}async function m(a){return d.db.projectNote.findUnique({where:{id:a}})}async function n(a,b){return d.db.projectNote.findMany({where:{projectId:a,taskId:null,...b?.category?{category:b.category}:{}},orderBy:{updatedAt:"desc"}})}async function o(a){return d.db.projectNote.findMany({where:{taskId:a},orderBy:{updatedAt:"desc"}})}(0,g.ensureServerEntryExports)([j,k,l,m,n,o]),(0,b.registerServerReference)(j,"404887c17032e540f11dab275fc8b6ced55ad65c65",null),(0,b.registerServerReference)(k,"60e8a7d7ff41cd1501d2c6586292a70132bed7c054",null),(0,b.registerServerReference)(l,"405f57b9e24ba09726ac2797026e48cfc7c4eafc54",null),(0,b.registerServerReference)(m,"40525779fed15524fe10db6d794d3e87423eb6ccf5",null),(0,b.registerServerReference)(n,"606f7bc7ab0df8f40ceec881ff307534bd9af3b8c6",null),(0,b.registerServerReference)(o,"400e86cdd8f329982aeffdc4f0a44dd0fbda3027e8",null),a.s(["createNote",0,j,"deleteNote",0,l,"getNoteById",0,m,"getProjectNotes",0,n,"getTaskNotes",0,o,"updateNote",0,k])},748383,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877),f=a.i(233405);function g(a,b){if(!b||b.startsWith("-"))return null;try{return(0,f.execFileSync)("git",["rev-parse",b],{cwd:a,encoding:"utf-8",timeout:5e3}).trim()||null}catch(a){return null}}async function h(a){return c.db.version.findMany({where:{projectId:a},orderBy:[{targetDate:"desc"},{order:"desc"},{createdAt:"desc"}],include:{type:!0,tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},assets:{select:{id:!0,filename:!0,mimeType:!0,size:!0}},notes:{select:{id:!0,title:!0,category:!0}}}}}})}async function i(a){let b=e.createVersionSchema.parse(a),f=null;if(b.baseBranch){let a=await c.db.project.findUnique({where:{id:b.projectId},select:{localPath:!0}});a?.localPath&&(f=g(a.localPath,b.baseBranch))}let h=await c.db.version.create({data:{projectId:b.projectId,number:b.number,name:b.name,typeId:b.typeId??null,status:"PLANNED",baseBranch:b.baseBranch??null,baseCommit:f,startDate:b.startDate??null,targetDate:b.targetDate??null,description:b.description??null}});return b.setCurrent&&await q(h.id),(0,d.revalidatePath)("/workspaces"),h}async function j(a,b){let f=e.updateVersionSchema.parse(b);try{let b=await c.db.version.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}}async function k(a){try{await c.db.version.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}(0,d.revalidatePath)("/workspaces")}async function l(a,b){await c.db.task.updateMany({where:{id:a},data:{versionId:b}}),(0,d.revalidatePath)("/workspaces")}async function m(a,b){let e=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0,status:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!e)throw Error("版本不存在");if("RELEASED"===e.status)throw Error("该版本已发布");let f=null;e.baseBranch&&e.project?.localPath&&(f=g(e.project.localPath,e.baseBranch));let h=await c.db.version.findUnique({where:{id:b},select:{id:!0,projectId:!0,status:!0}});if(!h)throw Error("目标版本不存在");if(h.projectId!==e.projectId)throw Error("目标版本必须属于同一项目");if(h.id===a)throw Error("目标版本不能是正在发布的版本本身");if("RELEASED"===h.status)throw Error("目标版本已发布,不能作为下一个当前版本");await c.db.$transaction(async c=>{await c.version.update({where:{id:a},data:{status:"RELEASED",releasedAt:new Date,releaseCommit:f,isCurrent:!1}}),await c.task.updateMany({where:{versionId:a,status:{notIn:["DONE","CANCELLED"]}},data:{versionId:b}}),await c.version.updateMany({where:{projectId:e.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:b},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}async function n(a){return c.db.version.findMany({where:{projectId:a,status:{not:"RELEASED"}},select:{id:!0,number:!0,name:!0,isCurrent:!0,status:!0},orderBy:[{isCurrent:"desc"},{targetDate:"desc"},{createdAt:"desc"}]})}async function o(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?function(a,b,c){try{let d=(0,f.execFileSync)("git",["diff","--numstat",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:5e3}),e=0,g=0,h=0;for(let a of d.split("\n")){let b=a.trim();if(!b)continue;let[c,d]=b.split(" ");e+=Number.parseInt(c,10)||0,g+=Number.parseInt(d,10)||0,h+=1}return{additions:e,deletions:g,files:h}}catch(a){return{additions:0,deletions:0,files:0}}}(b.project.localPath,b.baseCommit,d):null}async function p(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?{patch:function(a,b,c){try{return(0,f.execFileSync)("git",["diff",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:15e3,maxBuffer:0x1400000})}catch(a){return""}}(b.project.localPath,b.baseCommit,d)}:null}async function q(a){let b=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0}});if(!b)throw Error("版本不存在");await c.db.$transaction(async c=>{await c.version.updateMany({where:{projectId:b.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:a},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([h,i,j,k,l,m,n,o,p,q]),(0,b.registerServerReference)(h,"40f29a5c149d0deae6f530e300474c82b57bbdecd0",null),(0,b.registerServerReference)(i,"40d18c7680c72a010593fae70765c91c4ae4b8f486",null),(0,b.registerServerReference)(j,"60cb78c2d2b301420780510218497e875ec33a7b1c",null),(0,b.registerServerReference)(k,"40f3c681a2984bde5f219991800692d20eef9dbe87",null),(0,b.registerServerReference)(l,"606b2301287336b37fa350db3e8c42be74e64da081",null),(0,b.registerServerReference)(m,"60fb2f40ca467a1c87188bc9ac4f7b637ecdf64feb",null),(0,b.registerServerReference)(n,"40ba61bac0180758cf21b2f42a5a77ab4bc1b33b23",null),(0,b.registerServerReference)(o,"404a8c55eada839aa17c2a25f8830ede05d99ac987",null),(0,b.registerServerReference)(p,"40aaf5ed789d3a7f90544fe55a4e64fa2beabe51b1",null),(0,b.registerServerReference)(q,"40cad983c783680ccddca796a48d26fa221cb5abe0",null),a.s(["assignTaskVersion",0,l,"createVersion",0,i,"deleteVersion",0,k,"getProjectVersions",0,h,"getVersionDiff",0,p,"getVersionDiffStat",0,o,"getVersionsForPicker",0,n,"releaseVersion",0,m,"setCurrentVersion",0,q,"updateVersion",0,j],748383)},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},319997,a=>{"use strict";let b;var c=a.i(750227),d=a.i(660526),e=a.i(902157);function f(){return b||(b=process.env.TOWER_DATA_DIR||(0,c.join)((0,d.homedir)(),".tower"),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0})),b}a.s(["getBackupsDir",0,function(){let a=(0,c.join)(f(),"backups");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getStorageDir",0,function(){let a=(0,c.join)(f(),"storage");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getTowerDir",0,f])},859071,a=>{"use strict";a.i(666680);var b=a.i(902157),c=a.i(750227);let d=(0,a.i(319997).getStorageDir)();a.s(["ensureAssetsDir",0,function(a){let e=function(a){let b=c.join(d,"assets",a);if(!b.startsWith(d+c.sep))throw Error("Path traversal detected");return b}(a);return b.mkdirSync(e,{recursive:!0}),e}])},97397,a=>a.a(async(b,c)=>{try{var d=a.i(815429),e=a.i(902157),f=a.i(750227),g=a.i(75681),h=a.i(761469),i=a.i(188139),j=a.i(859071),k=a.i(980999),l=a.i(630048),m=b([k]);[k]=m.then?(await m)():m;let t=g.z.object({filename:g.z.string().min(1).max(255),path:g.z.string().min(1),mimeType:g.z.string().max(100).optional(),size:g.z.number().int().nonnegative().optional(),projectId:g.z.string().min(1),description:g.z.string().max(500).optional(),taskId:g.z.string().optional()});async function n(a){let b=t.parse(a);(0,j.ensureAssetsDir)(b.projectId);let c=await h.db.projectAsset.create({data:{...b,taskId:b.taskId??null}});return(0,i.revalidatePath)("/workspaces"),c}async function o(a){let b=await h.db.projectAsset.findUnique({where:{id:a}});b?.path&&await e.promises.unlink(b.path).catch(()=>{}),await h.db.projectAsset.delete({where:{id:a}}),(0,i.revalidatePath)("/workspaces")}async function p(a){return h.db.projectAsset.findMany({where:{projectId:a},orderBy:{createdAt:"desc"},include:{task:{select:{id:!0,title:!0,status:!0,priority:!0,description:!0,createdAt:!0,labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}}})}async function q(a){return h.db.projectAsset.findMany({where:{taskId:a},orderBy:{createdAt:"desc"}})}async function r(a){return h.db.projectAsset.findUnique({where:{id:a}})}async function s(a){let b=a.get("file"),c=a.get("projectId"),d=a.get("taskId")||void 0;if(!b||!c)throw Error("Missing file or projectId");let g=await (0,k.getConfigValue)("system.maxUploadBytes",0x3200000);if(b.size>g)throw Error(`File too large (max ${Math.round(g/1024/1024)} MB)`);let l=a.get("description")??"";if(!await h.db.project.findUnique({where:{id:c}}))throw Error("Invalid projectId");let m=Buffer.from(await b.arrayBuffer()),o=(0,j.ensureAssetsDir)(c),p=f.basename(b.name);p&&"."!==p&&".."!==p||(p=`upload-${Date.now()}`);let q=f.join(o,p);if(e.existsSync(q)){let a=f.extname(p),b=f.basename(p,a);p=`${b}-${Date.now()}${a}`}let r=f.join(o,p);if(!r.startsWith(o))throw Error("Invalid filename");await e.promises.writeFile(r,m);let s=await n({filename:p,path:r,mimeType:b.type||void 0,size:b.size,projectId:c,description:l||void 0,taskId:d});return(0,i.revalidatePath)("/workspaces"),s}(0,l.ensureServerEntryExports)([n,o,p,q,r,s]),(0,d.registerServerReference)(n,"40c6404dc15be3946369f14db82d8b9f0ba31f0611",null),(0,d.registerServerReference)(o,"40f5910088d7a76d03180786ceb87a898579c6ff2c",null),(0,d.registerServerReference)(p,"40e48ed05784043609942ed2631b5b9bbb4e3db4e4",null),(0,d.registerServerReference)(q,"40f3247ba33ffa2feafd37f6701f34b22c01236976",null),(0,d.registerServerReference)(r,"403ad4055319d3e88ceaf247b51dac65f4f5c02a28",null),(0,d.registerServerReference)(s,"4042c83abbad23459e61ebea3c6ee85d86590af8e1",null),a.s(["createAsset",0,n,"deleteAsset",0,o,"getAssetById",0,r,"getProjectAssets",0,p,"getTaskAssets",0,q,"uploadAsset",0,s]),c()}catch(a){c(a)}},!1),193646,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(196195),a.i(347427),a.i(689171),a.i(925886),a.i(392164);var g=a.i(97397);a.i(748383);var h=b([d,e,f,g]);[d,e,f,g]=h.then?(await h)():h,a.s([]),c()}catch(a){c(a)}},!1),171876,a=>a.a(async(b,c)=>{try{var d=a.i(193646),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(196195),n=a.i(347427),o=a.i(689171),p=a.i(925886),q=a.i(392164),r=a.i(97397),s=a.i(748383),t=b([d,g,h,l,r]);[d,g,h,l,r]=t.then?(await t)():t,a.s(["001cc0c8ce707acc32a1fe2dc2b3f9983de0dc3dab",()=>k.getOnboardingStatus,"002d2d76b6ef4160568000224415f28f1a163652f2",()=>h.getAvailableTerminalApps,"006cd34bb594752724ef1ddc80ce72433ecc728349",()=>h.getAvailableShells,"008a180a9553b3f07ead30ab0e175f18939c1ffb19",()=>h.getPlatformInfo,"009aedffd4c16db17eb1965cf2bbb60330782f1a41",()=>l.clearRgPathCache,"00a1c3944ebee4ec0cc8cdf24600f514e18f86abef",()=>h.getActualWsPort,"00e40eb44c2de26a48a04857526c8a598fff1952b3",()=>l.checkRgAvailable,"00fb7b97cef6c47022d90c4c3319ed53b9d34e0068",()=>j.listAllExtensionStatus,"4003dc8f24479138229e15ea57b39d34e5ba39682e",()=>e.deleteProject,"400e86cdd8f329982aeffdc4f0a44dd0fbda3027e8",()=>q.getTaskNotes,"40112f31b3d2e1606525dc0afb455b2f1bcb10053e",()=>f.getLabelsForWorkspace,"401567b6c8e7e306efc9b3deeb504c75ecfaa6b199",()=>p.getPrompts,"401857c05d1d57d33222cf715af015ee229d1a321c",()=>f.getTaskLabels,"4023f33471e6d805194513ee2369301411b97c0d6d",()=>j.uninstallExtension,"403b1efbbc6403f9a5684b49675fb2dfcb02c1d2f7",()=>h.resolveGitLocalPath,"403ef7d667835ea791f1104a6aff2dc197cfb768a5",()=>f.createLabel,"4042c83abbad23459e61ebea3c6ee85d86590af8e1",()=>r.uploadAsset,"404887c17032e540f11dab275fc8b6ced55ad65c65",()=>q.createNote,"40530570a66aecec0e96f3807ec632598139384043",()=>h.getConfigValues,"40540ec85ab3e8e643c8cfc26a74e479c82d473478",()=>n.stopPtyExecution,"405b55a40e4e436fb4f393436e274930cf84368a43",()=>o.checkWorktreeClean,"405f57b9e24ba09726ac2797026e48cfc7c4eafc54",()=>q.deleteNote,"40645fc7a3e0229fa3ccfe49523972a101a21cb011",()=>o.toggleTaskPinned,"4066ebe953c55de9026732401c0fe9ecf9ab502713",()=>e.getOrCreateTowerTaskId,"4067910309eb2bfd9227871f2dc35aa2859c1cee40",()=>m.fetchRemoteBranches,"406a00444dd83394b5ae0e47abc45dbf3f66572e7c",()=>e.getRecentLocalProjects,"4079828c42aabc56c151a46a1aded0d0254a08eb8a",()=>k.setOnboardingProgress,"407caec3e8d8b5df61f8ae97efa10d0b3b5563ead8",()=>o.deleteTask,"408543d4eb2a55a5cd03c96cf36d86af3458e1fe8c",()=>i.checkMigrationSafety,"408aa2a09a7dfab042c9c4e19959a7466777968173",()=>f.deleteLabel,"408f8399f5896c88e65c313c32c345941af191b5e1",()=>o.createTask,"40934342416aeeeb2e0e218a887d52a8617e5e9cd2",()=>e.createProject,"40a589d9ba3b8097114fa051abd96b50b2889ef121",()=>n.getTaskExecutions,"40a96c37697b01caf6047d21e8b8705f9c51becfe3",()=>n.continueLatestPtyExecution,"40ba61bac0180758cf21b2f42a5a77ab4bc1b33b23",()=>s.getVersionsForPicker,"40bc92ed17a3887642c935f0a0ef71b659f40f842e",()=>e.deleteWorkspace,"40c308a7895442cbedb74356eafa40cbc73452fcad",()=>m.getCurrentBranch,"40ce477818e393cb00c838a6e959b2ccade0e865e9",()=>m.getProjectBranches,"40d925923a1d79e4d935fa7776545f19ab4fc49e17",()=>j.installExtension,"40dce9c332ff032338b67bcbc27b5a81f611b9590d",()=>j.checkExtension,"40f3247ba33ffa2feafd37f6701f34b22c01236976",()=>r.getTaskAssets,"40f5910088d7a76d03180786ceb87a898579c6ff2c",()=>r.deleteAsset,"40f75b0631dc22535e38538fe7d946365fcd4ef9d4",()=>k.dispatchTaskCompletionEvent,"40fdd5b3e47fd71389611b79c04b25083617b614bf",()=>e.createWorkspace,"60032492f456c9c8fcc032fdeb1784777f69464a6a",()=>h.getConfigValue,"60057ffba0d6e86765d25aa7f862afd42cb2a7b198",()=>o.commitWorktreeChanges,"601cbcd84cf9a562f8eeed4b64fbfe1a7e0d85a5c0",()=>i.analyzeProjectDirectory,"602530d647e3dfa4d7b7ef438a5bee430f90ad21af",()=>n.resumePtyExecution,"6035cbaedc7b7bf4e65cfd558a60b689d3d9d86474",()=>f.setTaskLabels,"60364aaabea62ad81d27f362155f2a118a9076ed88",()=>o.updateTaskStatus,"60424c49623d1d35ffde76ca971ec2050d945897cb",()=>k.setOnboardingExtensions,"607dd53d2107b38dfb27fb7c221fd48d1d4bfa8adb",()=>e.updateProject,"6086ff3961557a86636ed88aa7fbfc394db3f98ee9",()=>g.globalSearch,"60b3391f11bc580c28dcdbeb9af4075949459c6dce",()=>k.completeOnboarding,"60b65223ac19282d326b0cb58e6d5215dbe2b58e78",()=>o.updateTask,"60dcd9c388151c3e1974757b6ed257dca8cd9461bd",()=>h.setConfigValue,"60e02b5222284075e36cdb2261247574db0fd612c5",()=>e.updateWorkspace,"60fbf3618358bf85ac5b3626c452cde8bffb155891",()=>i.migrateProjectPath,"7c6efd3ffe7760fcb04a00c6ff80e257144741dc8d",()=>n.startPtyExecution,"7cd6b2db117f34a85f5cafc1325c50ad3dfc21ddc8",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_0_8frs_._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0zgu282._.js"].map(b=>a.l(b))).then(()=>b(897667)))},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0c-49y3._.js"].map(b=>a.l(b))).then(()=>b(818992)))},610073,a=>{a.v(a=>Promise.resolve().then(()=>a(4634)))},260815,a=>{a.v(a=>Promise.resolve().then(()=>a(924868)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},925886,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139);async function e(a){return c.db.agentPrompt.findMany({where:a?{OR:[{workspaceId:a},{workspaceId:null}]}:{},orderBy:[{isDefault:"desc"},{name:"asc"}]})}async function f(a){return c.db.agentPrompt.findUnique({where:{id:a}})}async function g(a){if(a.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let b=await c.db.agentPrompt.create({data:a});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),b}async function h(a,b){if(void 0!==b.content&&b.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let e=await c.db.agentPrompt.update({where:{id:a},data:b});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}async function i(a){await c.db.agentPrompt.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings")}async function j(a,b){let e=await c.db.$transaction(async c=>(await c.agentPrompt.updateMany({where:b?{workspaceId:b,isDefault:!0}:{isDefault:!0},data:{isDefault:!1}}),c.agentPrompt.update({where:{id:a},data:{isDefault:!0}})));return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}(0,a.i(630048).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"4046169325470421b59d0f461ad8bdefb0e79735c1",null),(0,b.registerServerReference)(f,"401686f4330406fa79840449ea90d353c775fa46c9",null),(0,b.registerServerReference)(g,"40bfc6de7abff6ff2c1d27ff159588295d5f3a6973",null),(0,b.registerServerReference)(h,"60d5ff879300cbaeddaf13225c0ec7c70984a6dca2",null),(0,b.registerServerReference)(i,"4016e8c519532dcfed3e59979b95135688a72df2f0",null),(0,b.registerServerReference)(j,"60fa62cef74fca82466af8645224666219bca8962b",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},835032,a=>{"use strict";async function b(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b.id),await a.$executeRawUnsafe("INSERT INTO notes_fts(note_id, title, content) VALUES (?, ?, ?)",b.id,b.title,b.content)}async function c(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b)}a.s(["deleteNoteFromFts",0,c,"syncNoteToFts",0,b])},392164,a=>{"use strict";var b=a.i(815429),c=a.i(75681),d=a.i(761469),e=a.i(188139),f=a.i(835032),g=a.i(630048);let h=c.z.object({title:c.z.string().min(1).max(200),content:c.z.string(),category:c.z.string().max(50).optional(),projectId:c.z.string().min(1),taskId:c.z.string().optional()}),i=c.z.object({title:c.z.string().min(1).max(200).optional(),content:c.z.string().optional(),category:c.z.string().max(50).optional()});async function j(a){let b=h.parse(a),c=await d.db.projectNote.create({data:{title:b.title,content:b.content,category:b.category??"备忘",projectId:b.projectId,taskId:b.taskId??null}});return await (0,f.syncNoteToFts)(d.db,{id:c.id,title:c.title,content:c.content}),(0,e.revalidatePath)("/workspace"),c}async function k(a,b){let c=i.parse(b),g=await d.db.projectNote.update({where:{id:a},data:c});return await (0,f.syncNoteToFts)(d.db,{id:g.id,title:g.title,content:g.content}),(0,e.revalidatePath)("/workspace"),g}async function l(a){await (0,f.deleteNoteFromFts)(d.db,a),await d.db.projectNote.delete({where:{id:a}}),(0,e.revalidatePath)("/workspace")}async function m(a){return d.db.projectNote.findUnique({where:{id:a}})}async function n(a,b){return d.db.projectNote.findMany({where:{projectId:a,taskId:null,...b?.category?{category:b.category}:{}},orderBy:{updatedAt:"desc"}})}async function o(a){return d.db.projectNote.findMany({where:{taskId:a},orderBy:{updatedAt:"desc"}})}(0,g.ensureServerEntryExports)([j,k,l,m,n,o]),(0,b.registerServerReference)(j,"4077550516c2155eea165d7db5fb65cc0ccdad9d32",null),(0,b.registerServerReference)(k,"6041af323164c77dd6c96663495f95e635cfb44f83",null),(0,b.registerServerReference)(l,"4032a403a5f5375b7b81aa647f10fa0c2ee341534d",null),(0,b.registerServerReference)(m,"40d78efd3397b6f7edb26fa6508b532d8ec84be19d",null),(0,b.registerServerReference)(n,"60233e32437307ff8e67a01cf97a3221b78d2b6427",null),(0,b.registerServerReference)(o,"40d664edeac09a8bd1a7d7f683acbfda4eac5e8acb",null),a.s(["createNote",0,j,"deleteNote",0,l,"getNoteById",0,m,"getProjectNotes",0,n,"getTaskNotes",0,o,"updateNote",0,k])},748383,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139),e=a.i(496877),f=a.i(233405);function g(a,b){if(!b||b.startsWith("-"))return null;try{return(0,f.execFileSync)("git",["rev-parse",b],{cwd:a,encoding:"utf-8",timeout:5e3}).trim()||null}catch(a){return null}}async function h(a){return c.db.version.findMany({where:{projectId:a},orderBy:[{targetDate:"desc"},{order:"desc"},{createdAt:"desc"}],include:{type:!0,tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}],include:{labels:{include:{label:!0}},assets:{select:{id:!0,filename:!0,mimeType:!0,size:!0}},notes:{select:{id:!0,title:!0,category:!0}}}}}})}async function i(a){let b=e.createVersionSchema.parse(a),f=null;if(b.baseBranch){let a=await c.db.project.findUnique({where:{id:b.projectId},select:{localPath:!0}});a?.localPath&&(f=g(a.localPath,b.baseBranch))}let h=await c.db.version.create({data:{projectId:b.projectId,number:b.number,name:b.name,typeId:b.typeId??null,status:"PLANNED",baseBranch:b.baseBranch??null,baseCommit:f,startDate:b.startDate??null,targetDate:b.targetDate??null,description:b.description??null}});return b.setCurrent&&await q(h.id),(0,d.revalidatePath)("/workspaces"),h}async function j(a,b){let f=e.updateVersionSchema.parse(b);try{let b=await c.db.version.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),b}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}}async function k(a){try{await c.db.version.delete({where:{id:a}})}catch(a){if("object"==typeof a&&a&&"code"in a&&"P2025"===a.code)throw Error("版本不存在");throw a}(0,d.revalidatePath)("/workspaces")}async function l(a,b){await c.db.task.updateMany({where:{id:a},data:{versionId:b}}),(0,d.revalidatePath)("/workspaces")}async function m(a,b){let e=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0,status:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!e)throw Error("版本不存在");if("RELEASED"===e.status)throw Error("该版本已发布");let f=null;e.baseBranch&&e.project?.localPath&&(f=g(e.project.localPath,e.baseBranch));let h=await c.db.version.findUnique({where:{id:b},select:{id:!0,projectId:!0,status:!0}});if(!h)throw Error("目标版本不存在");if(h.projectId!==e.projectId)throw Error("目标版本必须属于同一项目");if(h.id===a)throw Error("目标版本不能是正在发布的版本本身");if("RELEASED"===h.status)throw Error("目标版本已发布,不能作为下一个当前版本");await c.db.$transaction(async c=>{await c.version.update({where:{id:a},data:{status:"RELEASED",releasedAt:new Date,releaseCommit:f,isCurrent:!1}}),await c.task.updateMany({where:{versionId:a,status:{notIn:["DONE","CANCELLED"]}},data:{versionId:b}}),await c.version.updateMany({where:{projectId:e.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:b},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}async function n(a){return c.db.version.findMany({where:{projectId:a,status:{not:"RELEASED"}},select:{id:!0,number:!0,name:!0,isCurrent:!0,status:!0},orderBy:[{isCurrent:"desc"},{targetDate:"desc"},{createdAt:"desc"}]})}async function o(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?function(a,b,c){try{let d=(0,f.execFileSync)("git",["diff","--numstat",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:5e3}),e=0,g=0,h=0;for(let a of d.split("\n")){let b=a.trim();if(!b)continue;let[c,d]=b.split(" ");e+=Number.parseInt(c,10)||0,g+=Number.parseInt(d,10)||0,h+=1}return{additions:e,deletions:g,files:h}}catch(a){return{additions:0,deletions:0,files:0}}}(b.project.localPath,b.baseCommit,d):null}async function p(a){let b=await c.db.version.findUnique({where:{id:a},select:{baseCommit:!0,releaseCommit:!0,baseBranch:!0,project:{select:{localPath:!0}}}});if(!b?.baseCommit||!b.project?.localPath)return null;let d=b.releaseCommit??(b.baseBranch?g(b.project.localPath,b.baseBranch):null);return d?{patch:function(a,b,c){try{return(0,f.execFileSync)("git",["diff",`${b}..${c}`],{cwd:a,encoding:"utf-8",timeout:15e3,maxBuffer:0x1400000})}catch(a){return""}}(b.project.localPath,b.baseCommit,d)}:null}async function q(a){let b=await c.db.version.findUnique({where:{id:a},select:{id:!0,projectId:!0}});if(!b)throw Error("版本不存在");await c.db.$transaction(async c=>{await c.version.updateMany({where:{projectId:b.projectId,isCurrent:!0},data:{isCurrent:!1}}),await c.version.update({where:{id:a},data:{isCurrent:!0,status:"ACTIVE"}})}),(0,d.revalidatePath)("/workspaces")}(0,a.i(630048).ensureServerEntryExports)([h,i,j,k,l,m,n,o,p,q]),(0,b.registerServerReference)(h,"402222e50e130ad01448b40650fe00ad043a43571b",null),(0,b.registerServerReference)(i,"4085b9d2b2d30bc1b46b0767eb06399ef92f711b1c",null),(0,b.registerServerReference)(j,"60c31c2edfe4bdc3743bcb50ab2b8a6a0c67896b1b",null),(0,b.registerServerReference)(k,"408da1743e0c9512cf60e3b52e3847e1f30fda28ba",null),(0,b.registerServerReference)(l,"60f3473b5590dda9d90686105d86cf2bfcde7c16bf",null),(0,b.registerServerReference)(m,"6094f5b30c94e646a12c5632dfaa6697f3e21da6e5",null),(0,b.registerServerReference)(n,"40862d58fff54f4c22e8debc184a50726be83bc36c",null),(0,b.registerServerReference)(o,"408ce718916ea9a68b4ebd16e20e4c10127d90bb63",null),(0,b.registerServerReference)(p,"406e2aaa693c7325f30671f3fd99f381892ed48f9e",null),(0,b.registerServerReference)(q,"4064955e25f32bc5050feaa26af7105afe9ba00734",null),a.s(["assignTaskVersion",0,l,"createVersion",0,i,"deleteVersion",0,k,"getProjectVersions",0,h,"getVersionDiff",0,p,"getVersionDiffStat",0,o,"getVersionsForPicker",0,n,"releaseVersion",0,m,"setCurrentVersion",0,q,"updateVersion",0,j],748383)},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},319997,a=>{"use strict";let b;var c=a.i(750227),d=a.i(660526),e=a.i(902157);function f(){return b||(b=process.env.TOWER_DATA_DIR||(0,c.join)((0,d.homedir)(),".tower"),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0})),b}a.s(["getBackupsDir",0,function(){let a=(0,c.join)(f(),"backups");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getStorageDir",0,function(){let a=(0,c.join)(f(),"storage");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getTowerDir",0,f])},859071,a=>{"use strict";a.i(666680);var b=a.i(902157),c=a.i(750227);let d=(0,a.i(319997).getStorageDir)();a.s(["ensureAssetsDir",0,function(a){let e=function(a){let b=c.join(d,"assets",a);if(!b.startsWith(d+c.sep))throw Error("Path traversal detected");return b}(a);return b.mkdirSync(e,{recursive:!0}),e}])},97397,a=>a.a(async(b,c)=>{try{var d=a.i(815429),e=a.i(902157),f=a.i(750227),g=a.i(75681),h=a.i(761469),i=a.i(188139),j=a.i(859071),k=a.i(980999),l=a.i(630048),m=b([k]);[k]=m.then?(await m)():m;let t=g.z.object({filename:g.z.string().min(1).max(255),path:g.z.string().min(1),mimeType:g.z.string().max(100).optional(),size:g.z.number().int().nonnegative().optional(),projectId:g.z.string().min(1),description:g.z.string().max(500).optional(),taskId:g.z.string().optional()});async function n(a){let b=t.parse(a);(0,j.ensureAssetsDir)(b.projectId);let c=await h.db.projectAsset.create({data:{...b,taskId:b.taskId??null}});return(0,i.revalidatePath)("/workspaces"),c}async function o(a){let b=await h.db.projectAsset.findUnique({where:{id:a}});b?.path&&await e.promises.unlink(b.path).catch(()=>{}),await h.db.projectAsset.delete({where:{id:a}}),(0,i.revalidatePath)("/workspaces")}async function p(a){return h.db.projectAsset.findMany({where:{projectId:a},orderBy:{createdAt:"desc"},include:{task:{select:{id:!0,title:!0,status:!0,priority:!0,description:!0,createdAt:!0,labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}}})}async function q(a){return h.db.projectAsset.findMany({where:{taskId:a},orderBy:{createdAt:"desc"}})}async function r(a){return h.db.projectAsset.findUnique({where:{id:a}})}async function s(a){let b=a.get("file"),c=a.get("projectId"),d=a.get("taskId")||void 0;if(!b||!c)throw Error("Missing file or projectId");let g=await (0,k.getConfigValue)("system.maxUploadBytes",0x3200000);if(b.size>g)throw Error(`File too large (max ${Math.round(g/1024/1024)} MB)`);let l=a.get("description")??"";if(!await h.db.project.findUnique({where:{id:c}}))throw Error("Invalid projectId");let m=Buffer.from(await b.arrayBuffer()),o=(0,j.ensureAssetsDir)(c),p=f.basename(b.name);p&&"."!==p&&".."!==p||(p=`upload-${Date.now()}`);let q=f.join(o,p);if(e.existsSync(q)){let a=f.extname(p),b=f.basename(p,a);p=`${b}-${Date.now()}${a}`}let r=f.join(o,p);if(!r.startsWith(o))throw Error("Invalid filename");await e.promises.writeFile(r,m);let s=await n({filename:p,path:r,mimeType:b.type||void 0,size:b.size,projectId:c,description:l||void 0,taskId:d});return(0,i.revalidatePath)("/workspaces"),s}(0,l.ensureServerEntryExports)([n,o,p,q,r,s]),(0,d.registerServerReference)(n,"404598a5003ac09e0818f4f9b38a1397066d899990",null),(0,d.registerServerReference)(o,"4069a6715964199a66acee502e16367074b48838e4",null),(0,d.registerServerReference)(p,"40a5aa5b8b8a21b02bf6b91a519dea0941ca3f8e0b",null),(0,d.registerServerReference)(q,"405768d702a701ae5e9f5122ac88fad6422eee1a6c",null),(0,d.registerServerReference)(r,"405c2f717379c15954208b5a8866f6e096d6331df9",null),(0,d.registerServerReference)(s,"40ce6b1c263056b83083018db0a06298966f0ef60a",null),a.s(["createAsset",0,n,"deleteAsset",0,o,"getAssetById",0,r,"getProjectAssets",0,p,"getTaskAssets",0,q,"uploadAsset",0,s]),c()}catch(a){c(a)}},!1),193646,a=>a.a(async(b,c)=>{try{a.i(244256),a.i(495370);var d=a.i(396904),e=a.i(980999);a.i(101844),a.i(563736),a.i(4634);var f=a.i(870888);a.i(196195),a.i(347427),a.i(689171),a.i(925886),a.i(392164);var g=a.i(97397);a.i(748383);var h=b([d,e,f,g]);[d,e,f,g]=h.then?(await h)():h,a.s([]),c()}catch(a){c(a)}},!1),171876,a=>a.a(async(b,c)=>{try{var d=a.i(193646),e=a.i(244256),f=a.i(495370),g=a.i(396904),h=a.i(980999),i=a.i(101844),j=a.i(563736),k=a.i(4634),l=a.i(870888),m=a.i(196195),n=a.i(347427),o=a.i(689171),p=a.i(925886),q=a.i(392164),r=a.i(97397),s=a.i(748383),t=b([d,g,h,l,r]);[d,g,h,l,r]=t.then?(await t)():t,a.s(["0041df5486e2e22f094302f2cbf0feac638278f203",()=>j.listAllExtensionStatus,"005658cde119c372ffc54296eed261ca8fe226bdf3",()=>l.clearRgPathCache,"006098426761a40e4b93dc46f577c4cca16cc4ca5b",()=>h.getPlatformInfo,"006a685f823939c8ddabc4c981d10b5ffd3a84a538",()=>h.getAvailableTerminalApps,"007917eb2348c213933037fa0b0ee848be3cb87c1e",()=>k.getOnboardingStatus,"0095f9b7409f19cb7a4858b3af93184d2f94d7f783",()=>h.getActualWsPort,"00990ad364e447a5d3bc5b829fbb512d56791e61a5",()=>l.checkRgAvailable,"00f1983a3634fe5141b75eb1ab3a3b741118a6ec69",()=>h.getAvailableShells,"40023e04c00e5031b947837d813de3e5008c7998ed",()=>j.installExtension,"4010dca144e8a2deb03a87df7e013158ae54043763",()=>e.getOrCreateTowerTaskId,"4020d8a1cc596687b55865e96796ae7cea4ed4a4e9",()=>n.stopPtyExecution,"4032a403a5f5375b7b81aa647f10fa0c2ee341534d",()=>q.deleteNote,"4046169325470421b59d0f461ad8bdefb0e79735c1",()=>p.getPrompts,"40490ad5bcebd5783c04ddcaea990f816adcf3d62e",()=>f.deleteLabel,"40572611cf1015e642d34ea2b6a0027a216b9e35d2",()=>j.uninstallExtension,"405768d702a701ae5e9f5122ac88fad6422eee1a6c",()=>r.getTaskAssets,"40622ab6a12749e686c5f41a4069429783a2b1679e",()=>h.resolveGitLocalPath,"40635cb40cdb64c1b1d912134d8a18c0e0d9ef9ae9",()=>n.getTaskExecutions,"4066b5ea9c89d1e11b63c06866a5e44403fc00735b",()=>i.checkMigrationSafety,"4069a6715964199a66acee502e16367074b48838e4",()=>r.deleteAsset,"406a1abb0537b38bdea78b55742decfc86fb65dc92",()=>m.getProjectBranches,"406dae347a2d58386cc1799099c60b441e12f9ef14",()=>f.getTaskLabels,"4077550516c2155eea165d7db5fb65cc0ccdad9d32",()=>q.createNote,"407cea86bcf79899c6b9ddf2859de4b028adc74d9a",()=>e.createWorkspace,"408318bb2a36cde2db518580453bb566cf569f5617",()=>k.setOnboardingProgress,"40862d58fff54f4c22e8debc184a50726be83bc36c",()=>s.getVersionsForPicker,"4087a58e0e505f51a4094ca6339dce2feb2ff9d81b",()=>m.fetchRemoteBranches,"408c4b068a101ff26430fd9a2eab8da4205b17a155",()=>f.createLabel,"408f1371d4590b9d3994849ff42635018cfd7eeac3",()=>o.checkWorktreeClean,"4090d269cecfc12d2c41c22f5ea8ee9e2356ba772c",()=>e.createProject,"409b9e89c16b48d26a23b86d39e9990e955c649fed",()=>k.dispatchTaskCompletionEvent,"40a00823cbee2b458a9727fa431ee7f9e57a8c3970",()=>e.getRecentLocalProjects,"40a5d1883f0117a50977af8b4a512490421a780a77",()=>n.continueLatestPtyExecution,"40ae36a6b73337676b5c591fa3b50251dc3e0bff4c",()=>e.deleteProject,"40ba846cacc3f1b39b6fc90f201b7cb4b659b76fde",()=>o.createTask,"40bf50f0e21c96f40084faf126ed0070765cdc0ebd",()=>o.deleteTask,"40c5f12983be487dafabc924d6f92f491678b95e3e",()=>o.toggleTaskPinned,"40cdbb3a728b884d16c28dba88a95015831d0f707a",()=>f.getLabelsForWorkspace,"40ce6b1c263056b83083018db0a06298966f0ef60a",()=>r.uploadAsset,"40d664edeac09a8bd1a7d7f683acbfda4eac5e8acb",()=>q.getTaskNotes,"40dd7b0d3eb5d3ee6b528c5365e113944513147a8f",()=>h.getConfigValues,"40e768245a4e78fce5a90281591c51e6bd43c8b391",()=>j.checkExtension,"40ee1cdf4e6e9870944d24e557cd3ad748f1815a19",()=>e.deleteWorkspace,"40f4b44260e3081c9d962f95356e1f101f9535e61a",()=>m.getCurrentBranch,"60005e9e7d3726521e8eae7ec1df23df0995ae26a4",()=>n.resumePtyExecution,"600a724577f63b21c2516a9681bcb4209e5c5bed7a",()=>o.updateTaskStatus,"6011a77cb03291a868c4f98dee7fc35bcd5bc755bc",()=>k.completeOnboarding,"601d3e703fe9b168047888d897fb03b3355cec045e",()=>k.setOnboardingExtensions,"60283cad82c0cfd76e9a448586ecf3dea1f3814b42",()=>f.setTaskLabels,"604d188e861acf619c5baf2856feff3fe637de7bdc",()=>g.globalSearch,"605a871303674e0eaf175cb61d233ad574bfe8524c",()=>e.updateWorkspace,"6070935e8ea3377e1074b1011282dac5c4f86959ab",()=>h.getConfigValue,"6073ba3633abe6c1abe2882b0918ce3fb8c161902a",()=>e.updateProject,"609b6670ad302b6325902fe524e4673aace99c1812",()=>o.updateTask,"60d1cadc9841b851175001b74b3fc13d3a348df7a0",()=>i.analyzeProjectDirectory,"60d9158dfaa5ddb9b12e8aaea8df1752690d3f2ad9",()=>i.migrateProjectPath,"60e960e2e18aa28c6856c37ec1a36ff254f9ca360c",()=>h.setConfigValue,"60e9ee07701acf8f29615c2e0f46d51c11628a2790",()=>o.commitWorktreeChanges,"7c9341a3a3cf6165ee3bf3b385597af9647d530ff2",()=>n.startPtyExecution,"7cfce039b36a6c007d746dd8024bf08dd34ea073b6",()=>l.searchCode]),c()}catch(a){c(a)}},!1),76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_0_8frs_._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(a=>Promise.resolve().then(()=>a(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0zgu282._.js"].map(b=>a.l(b))).then(()=>b(897667)))},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},662330,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0c-49y3._.js"].map(b=>a.l(b))).then(()=>b(818992)))},610073,a=>{a.v(a=>Promise.resolve().then(()=>a(4634)))},260815,a=>{a.v(a=>Promise.resolve().then(()=>a(924868)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0ojv-d0._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
2
|
|
|
3
3
|
\`\`\`
|
|
4
4
|
${a.slice(-5e3)}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},496877,a=>{"use strict";var b=a.i(75681);let c=b.z.string().min(1,"ID is required"),d=b.z.object({name:b.z.string().min(1,"Name is required").max(100),description:b.z.string().max(500).optional()}),e=b.z.object({name:b.z.string().min(1).max(100).optional(),description:b.z.string().max(500).optional()}),f=b.z.object({name:b.z.string().min(1,"Name is required").max(100),alias:b.z.string().max(100).optional(),description:b.z.string().max(5e3).optional(),gitUrl:b.z.string().max(500).optional().or(b.z.literal("")),localPath:b.z.string().optional(),workspaceId:c,projectType:b.z.enum(["FRONTEND","BACKEND"]).optional(),previewCommand:b.z.string().max(500).nullable().optional()}),g=b.z.object({name:b.z.string().min(1).max(100).optional(),alias:b.z.string().max(100).optional(),description:b.z.string().max(5e3).optional(),localPath:b.z.string().optional(),projectType:b.z.enum(["FRONTEND","BACKEND"]).optional(),previewCommand:b.z.string().max(500).nullable().optional(),previewPort:b.z.number().int().min(1).max(65535).nullable().optional()}),h=b.z.object({title:b.z.string().min(1,"Title is required").max(200),description:b.z.string().max(5e3).optional(),projectId:c,priority:b.z.enum(["LOW","MEDIUM","HIGH","CRITICAL"]).optional(),status:b.z.enum(["TODO","IN_PROGRESS","IN_REVIEW","DONE","CANCELLED"]).optional(),labelIds:b.z.array(c).optional(),baseBranch:b.z.string().max(200).optional(),subPath:b.z.string().max(500).optional(),versionId:c.optional()}),i=b.z.object({title:b.z.string().min(1).max(200).optional(),description:b.z.string().max(5e3).optional(),priority:b.z.enum(["LOW","MEDIUM","HIGH","CRITICAL"]).optional(),labelIds:b.z.array(c).optional(),baseBranch:b.z.string().max(200).optional(),subPath:b.z.string().max(500).optional(),previewCommandOverride:b.z.string().max(500).nullable().optional(),previewPortOverride:b.z.number().int().min(1).max(65535).nullable().optional(),versionId:c.optional()}),j=b.z.enum(["TODO","IN_PROGRESS","IN_REVIEW","DONE","CANCELLED"]),k=b.z.object({name:b.z.string().min(1,"Name is required").max(50),color:b.z.string().regex(/^#[0-9a-fA-F]{6}$/,"Invalid hex color"),workspaceId:c}),l=b.z.object({number:b.z.string().min(1,"Number is required").max(50),name:b.z.string().min(1,"Name is required").max(100),typeId:c.optional(),baseBranch:b.z.string().max(200).optional(),startDate:b.z.coerce.date().optional(),targetDate:b.z.coerce.date().optional(),description:b.z.string().max(5e3).optional(),projectId:c,setCurrent:b.z.boolean().optional()}),m=b.z.object({number:b.z.string().min(1).max(50).optional(),name:b.z.string().min(1).max(100).optional(),typeId:c.nullable().optional(),baseBranch:b.z.string().max(200).nullable().optional(),startDate:b.z.coerce.date().nullable().optional(),targetDate:b.z.coerce.date().nullable().optional(),description:b.z.string().max(5e3).nullable().optional()}),n=b.z.object({workspaceId:c,name:b.z.string().min(1).max(50)}),o=b.z.object({name:b.z.string().min(1).max(50)});a.s(["createLabelSchema",0,k,"createProjectSchema",0,f,"createTaskSchema",0,h,"createVersionSchema",0,l,"createVersionTypeSchema",0,n,"createWorkspaceSchema",0,d,"taskStatusSchema",0,j,"updateProjectSchema",0,g,"updateTaskSchema",0,i,"updateVersionSchema",0,m,"updateVersionTypeSchema",0,o,"updateWorkspaceSchema",0,e])},989927,a=>{"use strict";var b=a.i(446786),c=a.i(814747);function d(a){return a.startsWith("~/")?c.default.join(b.default.homedir(),a.slice(2)):a}function e(a){let b,c=a.match(/^git@([^:]+):(.+)$/);if(c)return{host:c[1],pathSegments:f(c[2]).split("/").filter(Boolean)};try{b=new URL(a)}catch{return null}return{host:b.hostname,pathSegments:f(decodeURIComponent(b.pathname)).split("/").filter(Boolean)}}function f(a){return a.replace(/\.git\/?$/,"")}a.s(["expandHome",0,d,"gitUrlToLocalPath",0,function(a){let b=a.trim();if(!b)return"";try{let a=e(b);if(!a)return"";let{host:f,pathSegments:g}=a;if("code.iflytek.com"===f){let a,b;return d((a=[...g],"osc"===a[0]&&"_source"===a[1]&&(a=a.slice(2)),((b=a.indexOf("-"))>0&&(a=a.slice(0,b)),0===a.length)?"":`~/company/${a.join("/")}`))}if("github.com"===f){var c;let a,b;return d((a=(c=g)[0],b=c[1],a&&b?`${"jp-liu"===a?"~/project/i":"~/project/f"}/${b}`:""))}let h=g[g.length-1];return h?d(`~/project/f/${h}`):""}catch{return""}},"matchGitPathRule",0,function(a,b){if(!b.length)return"";let c=a.trim();if(!c)return"";let f=e(c);if(!f)return"";let{host:g,pathSegments:h}=f,i=h[0]??"",j=h[h.length-1]??"",k=[...b].sort((a,b)=>{let c=+("*"===a.ownerMatch),d=+("*"===b.ownerMatch);return c!==d?c-d:a.priority-b.priority}),l=h.join("/");for(let a of k){if(a.host!==g||"*"!==a.ownerMatch&&a.ownerMatch!==i)continue;let b=a.localPathTemplate;if(b.includes("{path}"))return d(b.replace("{path}",l).replace("{owner}",i).replace("{repo}",j).replace(/\/+$/,""));let c=b.replace("{owner}",i).replace("{repo}","").replace(/\/+$/,"");return d(`${c}/${j}`)}return""}])},912714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},292380,742978,a=>{"use strict";var b=a.i(912714),c=a.i(902157),d=a.i(750227);function e(a,b){let c=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return null}}(a.files["package.json"]);return!!c&&b in{...c.dependencies,...c.devDependencies}}let f=[{id:"next",name:"Next.js",icon:"simple-icons:nextdotjs",detect:a=>e(a,"next"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Ready in \d+/i,urlExtractRegex:/(https?:\/\/[^\s]+)/,docUrl:"https://nextjs.org/docs"},{id:"nuxt",name:"Nuxt",icon:"simple-icons:nuxtdotjs",detect:a=>e(a,"nuxt"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Nuxt .* ready in/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"uniapp",name:"uni-app",icon:"simple-icons:vuedotjs",detect:a=>e(a,"@dcloudio/uni-app"),command:"pnpm dev:h5",port:9e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in|App running at|Network:/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://uniapp.dcloud.net.cn/"},{id:"vue-cli",name:"Vue (CLI)",icon:"simple-icons:vuedotjs",detect:a=>e(a,"@vue/cli-service"),command:"pnpm serve",port:8080,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/App running at|DONE\s+Compiled successfully/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://cli.vuejs.org/"},{id:"cra",name:"Create React App",icon:"simple-icons:react",detect:a=>e(a,"react-scripts"),command:"pnpm start",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|webpack compiled/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://create-react-app.dev/"},{id:"vite",name:"Vite",icon:"simple-icons:vite",detect:a=>e(a,"vite"),command:"pnpm dev",port:5173,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in \d+\s*ms/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/},{id:"angular",name:"Angular",icon:"simple-icons:angular",detect:a=>e(a,"@angular/core"),command:"pnpm start",port:4200,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|Application bundle generation complete/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"spring-boot-maven",name:"Spring Boot (Maven)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["pom.xml"];return!!(b&&/spring-boot-starter/.test(b))},command:"./mvnw spring-boot:run",port:8080,installCommand:"./mvnw dependency:resolve",installMarker:["target"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"spring-boot-gradle",name:"Spring Boot (Gradle)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["build.gradle"]??a.files["build.gradle.kts"];return!!(b&&/spring-boot/.test(b))},command:"./gradlew bootRun",port:8080,installCommand:"./gradlew --refresh-dependencies",installMarker:[".gradle"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"django",name:"Django",icon:"simple-icons:django",detect:a=>null!==a.files["manage.py"]&&void 0!==a.files["manage.py"],command:"python manage.py runserver",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Starting development server at/i,urlExtractRegex:/at\s+(https?:\/\/[^\s]+)/},{id:"fastapi",name:"FastAPI",icon:"simple-icons:fastapi",detect:a=>{let b=a.files["requirements.txt"]??"",c=a.files["pyproject.toml"]??"";return/fastapi/i.test((b??"")+(c??""))},command:"uvicorn main:app --reload",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Application startup complete|Uvicorn running on/i,urlExtractRegex:/running on\s+(https?:\/\/[^\s]+)/},{id:"flask",name:"Flask",icon:"simple-icons:flask",detect:a=>{let b=a.files["requirements.txt"]??"";return/^flask/im.test(b??"")},command:"flask --app app run",port:5e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Running on\s+http/i,urlExtractRegex:/Running on\s+(https?:\/\/[^\s]+)/},{id:"go-generic",name:"Go",icon:"simple-icons:go",detect:a=>null!==a.files["go.mod"]&&void 0!==a.files["go.mod"],command:"go run .",port:8080,installCommand:"go mod download",installMarker:["go.sum"],readyRegex:null,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"static",name:"Static HTML",icon:"simple-icons:html5",detect:a=>null!==a.files["index.html"]&&void 0!==a.files["index.html"]&&!a.files["package.json"]&&!a.files["pom.xml"],command:"npx serve -l {port} .",port:3e3,installCommand:null,installMarker:null,readyRegex:/Accepting connections at/i,urlExtractRegex:/(https?:\/\/[^\s]+)/}];a.s(["PRESETS",0,f],742978);let g=["package.json","pom.xml","build.gradle","build.gradle.kts","manage.py","requirements.txt","pyproject.toml","go.mod","index.html"];async function h(a){return Object.fromEntries(await Promise.all(g.map(async c=>{try{let e=await (0,b.readFile)((0,d.join)(a,c),"utf-8");return[c,e]}catch{return[c,null]}})))}async function i(a){return{files:await h(a),hasDir:()=>!1}}async function j(a){try{await (0,b.access)(a,c.constants.R_OK)}catch{return null}let d=await i(a);for(let a of f)try{if(a.detect(d))return a}catch{}return null}a.s(["detectPreset",0,j],292380)},244256,a=>{"use strict";var b=a.i(815429),c=a.i(924868),d=a.i(912714),e=a.i(814747),f=a.i(761469),g=a.i(188139),h=a.i(496877),i=a.i(989927),j=a.i(292380);async function k(){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function l(a){return f.db.workspace.findUnique({where:{id:a},include:{projects:{include:{tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}]},repositories:!0}}}})}async function m(a){let b=h.createWorkspaceSchema.parse(a),c=await f.db.workspace.create({data:b});return(0,g.revalidatePath)("/workspaces"),c}async function n(a,b){let c=h.updateWorkspaceSchema.parse(b),d=await f.db.workspace.update({where:{id:a},data:c});return(0,g.revalidatePath)("/workspaces"),d}async function o(a){if(await f.db.workspace.count()<=1)throw Error("Cannot delete the last workspace");await f.db.workspace.delete({where:{id:a}}),(0,g.revalidatePath)("/workspaces")}async function p(b){let k=h.createProjectSchema.parse(b),l=k.localPath?(0,i.expandHome)(k.localPath):void 0;if(l&&!k.gitUrl&&e.default.isAbsolute(l))try{await (0,c.mkdir)(l,{recursive:!0})}catch(a){throw Error(`无法创建项目目录 ${l}: ${a.message}`)}let m=await f.db.project.create({data:{name:k.name,alias:k.alias,description:k.description,type:k.gitUrl?"GIT":"NORMAL",gitUrl:k.gitUrl||void 0,localPath:l,projectType:k.projectType,previewCommand:k.previewCommand,workspaceId:k.workspaceId}});try{let{ensureTowerTask:b}=await a.A(76052);await b(m.id,k.name)}catch(a){console.warn("Failed to auto-create Tower task",a)}if(l)try{if((await (0,d.readdir)(l).catch(()=>[])).length>0){let a=await (0,j.detectPreset)(l);a&&await f.db.project.update({where:{id:m.id},data:{previewPreset:a.id}})}}catch{}return(0,g.revalidatePath)("/workspaces"),m}async function q(a,b){let c={...h.updateProjectSchema.parse(b)};c.localPath&&(c.localPath=(0,i.expandHome)(c.localPath));let e=await f.db.project.update({where:{id:a},data:c});if(void 0!==b.localPath){let c=b.localPath?(0,i.expandHome)(b.localPath):null;if(c)try{if((await (0,d.readdir)(c).catch(()=>[])).length>0){let b=await (0,j.detectPreset)(c);await f.db.project.update({where:{id:a},data:{previewPreset:b?.id??null}})}}catch{}}return(0,g.revalidatePath)("/workspaces"),e}async function r(b){let c=await f.db.task.findMany({where:{projectId:b},include:{project:{select:{localPath:!0}}}}),{destroySession:d}=await a.A(98813),{removeWorktree:e}=await a.A(507502);for(let a of c){try{d(a.id)}catch{}if(await f.db.taskExecution.updateMany({where:{taskId:a.id,status:{in:["PENDING","RUNNING","PAUSED"]}},data:{status:"FAILED",endedAt:new Date}}),a.project?.localPath)try{await e(a.project.localPath,a.id)}catch{}["DONE","CANCELLED"].includes(a.status)||await f.db.task.update({where:{id:a.id},data:{status:"CANCELLED"}})}await f.db.project.delete({where:{id:b}}),(0,g.revalidatePath)("/workspaces")}async function s(a){return f.db.project.findFirst({where:{localPath:a},include:{workspace:!0}})}async function t(a=3){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0,tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}},select:{id:!0,title:!0,status:!0,priority:!0,executions:{where:{sessionId:{not:null}},select:{sessionId:!0},orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"},take:a},_count:{select:{tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}}}}}},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function u(a=10){return f.db.project.findMany({where:{localPath:{not:null}},select:{id:!0,name:!0,alias:!0,localPath:!0,workspaceId:!0,type:!0,updatedAt:!0},orderBy:{updatedAt:"desc"},take:a})}async function v(b){let c=await f.db.project.findUnique({where:{id:b},select:{id:!0,name:!0}});if(!c)throw Error("Project not found");let{ensureTowerTask:d}=await a.A(76052);return d(c.id,c.name)}(0,a.i(630048).ensureServerEntryExports)([k,l,m,n,o,p,q,r,s,t,u,v]),(0,b.registerServerReference)(k,"004b4d1b5dbf506647cf1fb69d4a293f751753d3b7",null),(0,b.registerServerReference)(l,"4013ce3d081d708e1d28549f52560bcd70b212e282",null),(0,b.registerServerReference)(m,"40fdd5b3e47fd71389611b79c04b25083617b614bf",null),(0,b.registerServerReference)(n,"60e02b5222284075e36cdb2261247574db0fd612c5",null),(0,b.registerServerReference)(o,"40bc92ed17a3887642c935f0a0ef71b659f40f842e",null),(0,b.registerServerReference)(p,"40934342416aeeeb2e0e218a887d52a8617e5e9cd2",null),(0,b.registerServerReference)(q,"607dd53d2107b38dfb27fb7c221fd48d1d4bfa8adb",null),(0,b.registerServerReference)(r,"4003dc8f24479138229e15ea57b39d34e5ba39682e",null),(0,b.registerServerReference)(s,"40aaeac14d4295f800e3d2bd73fcb0d89ff6d2e87c",null),(0,b.registerServerReference)(t,"409f354f644b09f1ecfb64c96ea5cbc31d38cf60de",null),(0,b.registerServerReference)(u,"406a00444dd83394b5ae0e47abc45dbf3f66572e7c",null),(0,b.registerServerReference)(v,"4066ebe953c55de9026732401c0fe9ecf9ab502713",null),a.s(["createProject",0,p,"createWorkspace",0,m,"deleteProject",0,r,"deleteWorkspace",0,o,"getOrCreateTowerTaskId",0,v,"getProjectByLocalPath",0,s,"getRecentLocalProjects",0,u,"getWorkspaceById",0,l,"getWorkspacesWithProjects",0,k,"getWorkspacesWithRecentTasks",0,t,"updateProject",0,q,"updateWorkspace",0,n])}];
|
|
1
|
+
module.exports=[446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},496877,a=>{"use strict";var b=a.i(75681);let c=b.z.string().min(1,"ID is required"),d=b.z.object({name:b.z.string().min(1,"Name is required").max(100),description:b.z.string().max(500).optional()}),e=b.z.object({name:b.z.string().min(1).max(100).optional(),description:b.z.string().max(500).optional()}),f=b.z.object({name:b.z.string().min(1,"Name is required").max(100),alias:b.z.string().max(100).optional(),description:b.z.string().max(5e3).optional(),gitUrl:b.z.string().max(500).optional().or(b.z.literal("")),localPath:b.z.string().optional(),workspaceId:c,projectType:b.z.enum(["FRONTEND","BACKEND"]).optional(),previewCommand:b.z.string().max(500).nullable().optional()}),g=b.z.object({name:b.z.string().min(1).max(100).optional(),alias:b.z.string().max(100).optional(),description:b.z.string().max(5e3).optional(),localPath:b.z.string().optional(),projectType:b.z.enum(["FRONTEND","BACKEND"]).optional(),previewCommand:b.z.string().max(500).nullable().optional(),previewPort:b.z.number().int().min(1).max(65535).nullable().optional()}),h=b.z.object({title:b.z.string().min(1,"Title is required").max(200),description:b.z.string().max(5e3).optional(),projectId:c,priority:b.z.enum(["LOW","MEDIUM","HIGH","CRITICAL"]).optional(),status:b.z.enum(["TODO","IN_PROGRESS","IN_REVIEW","DONE","CANCELLED"]).optional(),labelIds:b.z.array(c).optional(),baseBranch:b.z.string().max(200).optional(),subPath:b.z.string().max(500).optional(),versionId:c.optional()}),i=b.z.object({title:b.z.string().min(1).max(200).optional(),description:b.z.string().max(5e3).optional(),priority:b.z.enum(["LOW","MEDIUM","HIGH","CRITICAL"]).optional(),labelIds:b.z.array(c).optional(),baseBranch:b.z.string().max(200).optional(),subPath:b.z.string().max(500).optional(),previewCommandOverride:b.z.string().max(500).nullable().optional(),previewPortOverride:b.z.number().int().min(1).max(65535).nullable().optional(),versionId:c.optional()}),j=b.z.enum(["TODO","IN_PROGRESS","IN_REVIEW","DONE","CANCELLED"]),k=b.z.object({name:b.z.string().min(1,"Name is required").max(50),color:b.z.string().regex(/^#[0-9a-fA-F]{6}$/,"Invalid hex color"),workspaceId:c}),l=b.z.object({number:b.z.string().min(1,"Number is required").max(50),name:b.z.string().min(1,"Name is required").max(100),typeId:c.optional(),baseBranch:b.z.string().max(200).optional(),startDate:b.z.coerce.date().optional(),targetDate:b.z.coerce.date().optional(),description:b.z.string().max(5e3).optional(),projectId:c,setCurrent:b.z.boolean().optional()}),m=b.z.object({number:b.z.string().min(1).max(50).optional(),name:b.z.string().min(1).max(100).optional(),typeId:c.nullable().optional(),baseBranch:b.z.string().max(200).nullable().optional(),startDate:b.z.coerce.date().nullable().optional(),targetDate:b.z.coerce.date().nullable().optional(),description:b.z.string().max(5e3).nullable().optional()}),n=b.z.object({workspaceId:c,name:b.z.string().min(1).max(50)}),o=b.z.object({name:b.z.string().min(1).max(50)});a.s(["createLabelSchema",0,k,"createProjectSchema",0,f,"createTaskSchema",0,h,"createVersionSchema",0,l,"createVersionTypeSchema",0,n,"createWorkspaceSchema",0,d,"taskStatusSchema",0,j,"updateProjectSchema",0,g,"updateTaskSchema",0,i,"updateVersionSchema",0,m,"updateVersionTypeSchema",0,o,"updateWorkspaceSchema",0,e])},989927,a=>{"use strict";var b=a.i(446786),c=a.i(814747);function d(a){return a.startsWith("~/")?c.default.join(b.default.homedir(),a.slice(2)):a}function e(a){let b,c=a.match(/^git@([^:]+):(.+)$/);if(c)return{host:c[1],pathSegments:f(c[2]).split("/").filter(Boolean)};try{b=new URL(a)}catch{return null}return{host:b.hostname,pathSegments:f(decodeURIComponent(b.pathname)).split("/").filter(Boolean)}}function f(a){return a.replace(/\.git\/?$/,"")}a.s(["expandHome",0,d,"gitUrlToLocalPath",0,function(a){let b=a.trim();if(!b)return"";try{let a=e(b);if(!a)return"";let{host:f,pathSegments:g}=a;if("code.iflytek.com"===f){let a,b;return d((a=[...g],"osc"===a[0]&&"_source"===a[1]&&(a=a.slice(2)),((b=a.indexOf("-"))>0&&(a=a.slice(0,b)),0===a.length)?"":`~/company/${a.join("/")}`))}if("github.com"===f){var c;let a,b;return d((a=(c=g)[0],b=c[1],a&&b?`${"jp-liu"===a?"~/project/i":"~/project/f"}/${b}`:""))}let h=g[g.length-1];return h?d(`~/project/f/${h}`):""}catch{return""}},"matchGitPathRule",0,function(a,b){if(!b.length)return"";let c=a.trim();if(!c)return"";let f=e(c);if(!f)return"";let{host:g,pathSegments:h}=f,i=h[0]??"",j=h[h.length-1]??"",k=[...b].sort((a,b)=>{let c=+("*"===a.ownerMatch),d=+("*"===b.ownerMatch);return c!==d?c-d:a.priority-b.priority}),l=h.join("/");for(let a of k){if(a.host!==g||"*"!==a.ownerMatch&&a.ownerMatch!==i)continue;let b=a.localPathTemplate;if(b.includes("{path}"))return d(b.replace("{path}",l).replace("{owner}",i).replace("{repo}",j).replace(/\/+$/,""));let c=b.replace("{owner}",i).replace("{repo}","").replace(/\/+$/,"");return d(`${c}/${j}`)}return""}])},912714,(a,b,c)=>{b.exports=a.x("node:fs/promises",()=>require("node:fs/promises"))},292380,742978,a=>{"use strict";var b=a.i(912714),c=a.i(902157),d=a.i(750227);function e(a,b){let c=function(a){if(!a)return null;try{return JSON.parse(a)}catch{return null}}(a.files["package.json"]);return!!c&&b in{...c.dependencies,...c.devDependencies}}let f=[{id:"next",name:"Next.js",icon:"simple-icons:nextdotjs",detect:a=>e(a,"next"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Ready in \d+/i,urlExtractRegex:/(https?:\/\/[^\s]+)/,docUrl:"https://nextjs.org/docs"},{id:"nuxt",name:"Nuxt",icon:"simple-icons:nuxtdotjs",detect:a=>e(a,"nuxt"),command:"pnpm dev",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Nuxt .* ready in/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"uniapp",name:"uni-app",icon:"simple-icons:vuedotjs",detect:a=>e(a,"@dcloudio/uni-app"),command:"pnpm dev:h5",port:9e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in|App running at|Network:/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://uniapp.dcloud.net.cn/"},{id:"vue-cli",name:"Vue (CLI)",icon:"simple-icons:vuedotjs",detect:a=>e(a,"@vue/cli-service"),command:"pnpm serve",port:8080,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/App running at|DONE\s+Compiled successfully/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://cli.vuejs.org/"},{id:"cra",name:"Create React App",icon:"simple-icons:react",detect:a=>e(a,"react-scripts"),command:"pnpm start",port:3e3,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|webpack compiled/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/,docUrl:"https://create-react-app.dev/"},{id:"vite",name:"Vite",icon:"simple-icons:vite",detect:a=>e(a,"vite"),command:"pnpm dev",port:5173,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/ready in \d+\s*ms/i,urlExtractRegex:/Local:\s+(https?:\/\/[^\s]+)/},{id:"angular",name:"Angular",icon:"simple-icons:angular",detect:a=>e(a,"@angular/core"),command:"pnpm start",port:4200,installCommand:"pnpm install",installMarker:["node_modules"],readyRegex:/Compiled successfully|Application bundle generation complete/i,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"spring-boot-maven",name:"Spring Boot (Maven)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["pom.xml"];return!!(b&&/spring-boot-starter/.test(b))},command:"./mvnw spring-boot:run",port:8080,installCommand:"./mvnw dependency:resolve",installMarker:["target"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"spring-boot-gradle",name:"Spring Boot (Gradle)",icon:"simple-icons:springboot",detect:a=>{let b=a.files["build.gradle"]??a.files["build.gradle.kts"];return!!(b&&/spring-boot/.test(b))},command:"./gradlew bootRun",port:8080,installCommand:"./gradlew --refresh-dependencies",installMarker:[".gradle"],readyRegex:/Started \w+Application in [\d.]+ seconds/i,urlExtractRegex:null,startTimeoutMs:12e4},{id:"django",name:"Django",icon:"simple-icons:django",detect:a=>null!==a.files["manage.py"]&&void 0!==a.files["manage.py"],command:"python manage.py runserver",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Starting development server at/i,urlExtractRegex:/at\s+(https?:\/\/[^\s]+)/},{id:"fastapi",name:"FastAPI",icon:"simple-icons:fastapi",detect:a=>{let b=a.files["requirements.txt"]??"",c=a.files["pyproject.toml"]??"";return/fastapi/i.test((b??"")+(c??""))},command:"uvicorn main:app --reload",port:8e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Application startup complete|Uvicorn running on/i,urlExtractRegex:/running on\s+(https?:\/\/[^\s]+)/},{id:"flask",name:"Flask",icon:"simple-icons:flask",detect:a=>{let b=a.files["requirements.txt"]??"";return/^flask/im.test(b??"")},command:"flask --app app run",port:5e3,installCommand:"pip install -r requirements.txt",installMarker:[".venv","venv"],readyRegex:/Running on\s+http/i,urlExtractRegex:/Running on\s+(https?:\/\/[^\s]+)/},{id:"go-generic",name:"Go",icon:"simple-icons:go",detect:a=>null!==a.files["go.mod"]&&void 0!==a.files["go.mod"],command:"go run .",port:8080,installCommand:"go mod download",installMarker:["go.sum"],readyRegex:null,urlExtractRegex:/(https?:\/\/[^\s]+)/},{id:"static",name:"Static HTML",icon:"simple-icons:html5",detect:a=>null!==a.files["index.html"]&&void 0!==a.files["index.html"]&&!a.files["package.json"]&&!a.files["pom.xml"],command:"npx serve -l {port} .",port:3e3,installCommand:null,installMarker:null,readyRegex:/Accepting connections at/i,urlExtractRegex:/(https?:\/\/[^\s]+)/}];a.s(["PRESETS",0,f],742978);let g=["package.json","pom.xml","build.gradle","build.gradle.kts","manage.py","requirements.txt","pyproject.toml","go.mod","index.html"];async function h(a){return Object.fromEntries(await Promise.all(g.map(async c=>{try{let e=await (0,b.readFile)((0,d.join)(a,c),"utf-8");return[c,e]}catch{return[c,null]}})))}async function i(a){return{files:await h(a),hasDir:()=>!1}}async function j(a){try{await (0,b.access)(a,c.constants.R_OK)}catch{return null}let d=await i(a);for(let a of f)try{if(a.detect(d))return a}catch{}return null}a.s(["detectPreset",0,j],292380)},244256,a=>{"use strict";var b=a.i(815429),c=a.i(924868),d=a.i(912714),e=a.i(814747),f=a.i(761469),g=a.i(188139),h=a.i(496877),i=a.i(989927),j=a.i(292380);async function k(){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function l(a){return f.db.workspace.findUnique({where:{id:a},include:{projects:{include:{tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}]},repositories:!0}}}})}async function m(a){let b=h.createWorkspaceSchema.parse(a),c=await f.db.workspace.create({data:b});return(0,g.revalidatePath)("/workspaces"),c}async function n(a,b){let c=h.updateWorkspaceSchema.parse(b),d=await f.db.workspace.update({where:{id:a},data:c});return(0,g.revalidatePath)("/workspaces"),d}async function o(a){if(await f.db.workspace.count()<=1)throw Error("Cannot delete the last workspace");await f.db.workspace.delete({where:{id:a}}),(0,g.revalidatePath)("/workspaces")}async function p(b){let k=h.createProjectSchema.parse(b),l=k.localPath?(0,i.expandHome)(k.localPath):void 0;if(l&&!k.gitUrl&&e.default.isAbsolute(l))try{await (0,c.mkdir)(l,{recursive:!0})}catch(a){throw Error(`无法创建项目目录 ${l}: ${a.message}`)}let m=await f.db.project.create({data:{name:k.name,alias:k.alias,description:k.description,type:k.gitUrl?"GIT":"NORMAL",gitUrl:k.gitUrl||void 0,localPath:l,projectType:k.projectType,previewCommand:k.previewCommand,workspaceId:k.workspaceId}});try{let{ensureTowerTask:b}=await a.A(76052);await b(m.id,k.name)}catch(a){console.warn("Failed to auto-create Tower task",a)}if(l)try{if((await (0,d.readdir)(l).catch(()=>[])).length>0){let a=await (0,j.detectPreset)(l);a&&await f.db.project.update({where:{id:m.id},data:{previewPreset:a.id}})}}catch{}return(0,g.revalidatePath)("/workspaces"),m}async function q(a,b){let c={...h.updateProjectSchema.parse(b)};c.localPath&&(c.localPath=(0,i.expandHome)(c.localPath));let e=await f.db.project.update({where:{id:a},data:c});if(void 0!==b.localPath){let c=b.localPath?(0,i.expandHome)(b.localPath):null;if(c)try{if((await (0,d.readdir)(c).catch(()=>[])).length>0){let b=await (0,j.detectPreset)(c);await f.db.project.update({where:{id:a},data:{previewPreset:b?.id??null}})}}catch{}}return(0,g.revalidatePath)("/workspaces"),e}async function r(b){let c=await f.db.task.findMany({where:{projectId:b},include:{project:{select:{localPath:!0}}}}),{destroySession:d}=await a.A(98813),{removeWorktree:e}=await a.A(507502);for(let a of c){try{d(a.id)}catch{}if(await f.db.taskExecution.updateMany({where:{taskId:a.id,status:{in:["PENDING","RUNNING","PAUSED"]}},data:{status:"FAILED",endedAt:new Date}}),a.project?.localPath)try{await e(a.project.localPath,a.id)}catch{}["DONE","CANCELLED"].includes(a.status)||await f.db.task.update({where:{id:a.id},data:{status:"CANCELLED"}})}await f.db.project.delete({where:{id:b}}),(0,g.revalidatePath)("/workspaces")}async function s(a){return f.db.project.findFirst({where:{localPath:a},include:{workspace:!0}})}async function t(a=3){return f.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0,tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}},select:{id:!0,title:!0,status:!0,priority:!0,executions:{where:{sessionId:{not:null}},select:{sessionId:!0},orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"},take:a},_count:{select:{tasks:{where:{status:{in:["TODO","IN_PROGRESS","IN_REVIEW"]},NOT:{labels:{some:{label:{name:"Tower",isBuiltin:!0}}}}}}}}},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function u(a=10){return f.db.project.findMany({where:{localPath:{not:null}},select:{id:!0,name:!0,alias:!0,localPath:!0,workspaceId:!0,type:!0,updatedAt:!0},orderBy:{updatedAt:"desc"},take:a})}async function v(b){let c=await f.db.project.findUnique({where:{id:b},select:{id:!0,name:!0}});if(!c)throw Error("Project not found");let{ensureTowerTask:d}=await a.A(76052);return d(c.id,c.name)}(0,a.i(630048).ensureServerEntryExports)([k,l,m,n,o,p,q,r,s,t,u,v]),(0,b.registerServerReference)(k,"005c8c4ee4df14620c33b2883f2cad3d4a2b309126",null),(0,b.registerServerReference)(l,"409a0ff71343ab700ce7b7ef0b0620a952f8c2320c",null),(0,b.registerServerReference)(m,"407cea86bcf79899c6b9ddf2859de4b028adc74d9a",null),(0,b.registerServerReference)(n,"605a871303674e0eaf175cb61d233ad574bfe8524c",null),(0,b.registerServerReference)(o,"40ee1cdf4e6e9870944d24e557cd3ad748f1815a19",null),(0,b.registerServerReference)(p,"4090d269cecfc12d2c41c22f5ea8ee9e2356ba772c",null),(0,b.registerServerReference)(q,"6073ba3633abe6c1abe2882b0918ce3fb8c161902a",null),(0,b.registerServerReference)(r,"40ae36a6b73337676b5c591fa3b50251dc3e0bff4c",null),(0,b.registerServerReference)(s,"40abbf415ca01bacba970774fe88fad253416b7643",null),(0,b.registerServerReference)(t,"40d97c90f81fbebe00de966b190312ad7a2de2d144",null),(0,b.registerServerReference)(u,"40a00823cbee2b458a9727fa431ee7f9e57a8c3970",null),(0,b.registerServerReference)(v,"4010dca144e8a2deb03a87df7e013158ae54043763",null),a.s(["createProject",0,p,"createWorkspace",0,m,"deleteProject",0,r,"deleteWorkspace",0,o,"getOrCreateTowerTaskId",0,v,"getProjectByLocalPath",0,s,"getRecentLocalProjects",0,u,"getWorkspaceById",0,l,"getWorkspacesWithProjects",0,k,"getWorkspacesWithRecentTasks",0,t,"updateProject",0,q,"updateWorkspace",0,n])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0ps55l6._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[799620,(a,b,c)=>{b.exports=a.x("@vscode/ripgrep-9efc5655eb017bdc",()=>require("@vscode/ripgrep-9efc5655eb017bdc"))},870888,a=>a.a(async(b,c)=>{try{let o;var d=a.i(815429),e=a.i(233405),f=a.i(522734),g=a.i(75681),h=a.i(980999),i=a.i(630048),j=b([h]);function k(){return o||(o=function(){try{let b=a.r(799620).rgPath;if(b&&(0,f.existsSync)(b))return b}catch{}try{let a=(0,e.execFileSync)("which",["rg"],{encoding:"utf-8"}).trim();if(a&&(0,f.existsSync)(a))return a}catch{}throw Error("ripgrep not found: install @vscode/ripgrep or system rg")}()),o}async function l(){try{return k(),{available:!0,platform:process.platform}}catch{return{available:!1,platform:process.platform}}}async function m(){o=void 0}[h]=j.then?(await j)():j;let p=g.z.object({localPath:g.z.string().min(1),pattern:g.z.string().min(1).max(500),glob:g.z.string().max(200).optional(),maxResults:g.z.number().int().min(1).max(500).default(200)});async function n(a,b,c,d=200,f){let g,i,j=p.safeParse({localPath:a,pattern:b,glob:c,maxResults:d});if(!j.success)return{matches:[],truncated:!1,error:`Invalid input: ${j.error.message}`};let{localPath:l,pattern:m,glob:o,maxResults:q}=j.data;if(!(l.startsWith("/")||/^[a-zA-Z]:[/\\]/.test(l)))return{matches:[],truncated:!1,error:"localPath must be an absolute path"};try{g=k()}catch(a){return{matches:[],truncated:!1,error:a.message.slice(0,200),errorKind:"not_installed"}}let r=["--json","-n",m];o&&r.push("--glob",o),r.push(l);let s=await (0,h.getConfigValue)("search.codeTimeoutSec",30),t=1e3*Math.max(1,s),u=f instanceof AbortSignal?f:void 0;try{var v,w;i=await (v=g,w={encoding:"utf-8",maxBuffer:0xa00000,timeout:t,signal:u},new Promise((a,b)=>{(0,e.execFile)(v,r,w,(c,d,e)=>{c?(c.stderr="string"==typeof e?e:e?.toString(),b(c)):a("string"==typeof d?d:d.toString())})}))}catch(b){if(1===b.code)return{matches:[],truncated:!1};let a=function(a){if("AbortError"===a.name)return{kind:"aborted",message:""};if(a.killed&&("SIGTERM"===a.signal||"SIGKILL"===a.signal))return{kind:"timeout",message:a.message??"search timed out"};let b=a.stderr??"",c=`${a.message??""} ${b}`.toLowerCase();return c.includes("permission denied")||c.includes("eacces")?{kind:"permission_denied",message:b||a.message||"permission denied"}:c.includes("not found")||c.includes("enoent")||c.includes("ripgrep")?{kind:"not_installed",message:b||a.message||"ripgrep not found"}:{kind:"unknown",message:(b||a.message||"unknown error").slice(0,200)}}(b);if("aborted"===a.kind)return{matches:[],truncated:!1,aborted:!0};return console.error("[searchCode] rg failed:",b),{matches:[],truncated:!1,error:a.message.slice(0,200),errorKind:a.kind}}let x=i.split("\n"),y=[];for(let a of x){let b,c=a.trim();if(!c)continue;try{b=JSON.parse(c)}catch{continue}if("match"!==b.type)continue;let d=b.data,e=d.path.text,f=l.endsWith("/")?l:l+"/",g=e.startsWith(f)?e.slice(f.length):e,h=d.lines.text.replace(/\r?\n$/,""),i=d.submatches.map(a=>({start:a.start,end:a.end}));y.push({filePath:g,lineNumber:d.line_number,lineText:h,submatches:i})}let z=y.length>q;return{matches:z?y.slice(0,q):y,truncated:z}}(0,i.ensureServerEntryExports)([l,m,n]),(0,d.registerServerReference)(l,"
|
|
1
|
+
module.exports=[799620,(a,b,c)=>{b.exports=a.x("@vscode/ripgrep-9efc5655eb017bdc",()=>require("@vscode/ripgrep-9efc5655eb017bdc"))},870888,a=>a.a(async(b,c)=>{try{let o;var d=a.i(815429),e=a.i(233405),f=a.i(522734),g=a.i(75681),h=a.i(980999),i=a.i(630048),j=b([h]);function k(){return o||(o=function(){try{let b=a.r(799620).rgPath;if(b&&(0,f.existsSync)(b))return b}catch{}try{let a=(0,e.execFileSync)("which",["rg"],{encoding:"utf-8"}).trim();if(a&&(0,f.existsSync)(a))return a}catch{}throw Error("ripgrep not found: install @vscode/ripgrep or system rg")}()),o}async function l(){try{return k(),{available:!0,platform:process.platform}}catch{return{available:!1,platform:process.platform}}}async function m(){o=void 0}[h]=j.then?(await j)():j;let p=g.z.object({localPath:g.z.string().min(1),pattern:g.z.string().min(1).max(500),glob:g.z.string().max(200).optional(),maxResults:g.z.number().int().min(1).max(500).default(200)});async function n(a,b,c,d=200,f){let g,i,j=p.safeParse({localPath:a,pattern:b,glob:c,maxResults:d});if(!j.success)return{matches:[],truncated:!1,error:`Invalid input: ${j.error.message}`};let{localPath:l,pattern:m,glob:o,maxResults:q}=j.data;if(!(l.startsWith("/")||/^[a-zA-Z]:[/\\]/.test(l)))return{matches:[],truncated:!1,error:"localPath must be an absolute path"};try{g=k()}catch(a){return{matches:[],truncated:!1,error:a.message.slice(0,200),errorKind:"not_installed"}}let r=["--json","-n",m];o&&r.push("--glob",o),r.push(l);let s=await (0,h.getConfigValue)("search.codeTimeoutSec",30),t=1e3*Math.max(1,s),u=f instanceof AbortSignal?f:void 0;try{var v,w;i=await (v=g,w={encoding:"utf-8",maxBuffer:0xa00000,timeout:t,signal:u},new Promise((a,b)=>{(0,e.execFile)(v,r,w,(c,d,e)=>{c?(c.stderr="string"==typeof e?e:e?.toString(),b(c)):a("string"==typeof d?d:d.toString())})}))}catch(b){if(1===b.code)return{matches:[],truncated:!1};let a=function(a){if("AbortError"===a.name)return{kind:"aborted",message:""};if(a.killed&&("SIGTERM"===a.signal||"SIGKILL"===a.signal))return{kind:"timeout",message:a.message??"search timed out"};let b=a.stderr??"",c=`${a.message??""} ${b}`.toLowerCase();return c.includes("permission denied")||c.includes("eacces")?{kind:"permission_denied",message:b||a.message||"permission denied"}:c.includes("not found")||c.includes("enoent")||c.includes("ripgrep")?{kind:"not_installed",message:b||a.message||"ripgrep not found"}:{kind:"unknown",message:(b||a.message||"unknown error").slice(0,200)}}(b);if("aborted"===a.kind)return{matches:[],truncated:!1,aborted:!0};return console.error("[searchCode] rg failed:",b),{matches:[],truncated:!1,error:a.message.slice(0,200),errorKind:a.kind}}let x=i.split("\n"),y=[];for(let a of x){let b,c=a.trim();if(!c)continue;try{b=JSON.parse(c)}catch{continue}if("match"!==b.type)continue;let d=b.data,e=d.path.text,f=l.endsWith("/")?l:l+"/",g=e.startsWith(f)?e.slice(f.length):e,h=d.lines.text.replace(/\r?\n$/,""),i=d.submatches.map(a=>({start:a.start,end:a.end}));y.push({filePath:g,lineNumber:d.line_number,lineText:h,submatches:i})}let z=y.length>q;return{matches:z?y.slice(0,q):y,truncated:z}}(0,i.ensureServerEntryExports)([l,m,n]),(0,d.registerServerReference)(l,"00990ad364e447a5d3bc5b829fbb512d56791e61a5",null),(0,d.registerServerReference)(m,"005658cde119c372ffc54296eed261ca8fe226bdf3",null),(0,d.registerServerReference)(n,"7cfce039b36a6c007d746dd8024bf08dd34ea073b6",null),a.s(["checkRgAvailable",0,l,"clearRgPathCache",0,m,"searchCode",0,n]),c()}catch(a){c(a)}},!1)];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0ribsk4._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
2
|
|
|
3
3
|
\`\`\`
|
|
4
4
|
${a.slice(-5e3)}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},427699,(a,b,c)=>{b.exports=a.x("events",()=>require("events"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},319997,a=>{"use strict";let b;var c=a.i(750227),d=a.i(660526),e=a.i(902157);function f(){return b||(b=process.env.TOWER_DATA_DIR||(0,c.join)((0,d.homedir)(),".tower"),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0})),b}a.s(["getBackupsDir",0,function(){let a=(0,c.join)(f(),"backups");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getStorageDir",0,function(){let a=(0,c.join)(f(),"storage");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getTowerDir",0,f])},925886,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139);async function e(a){return c.db.agentPrompt.findMany({where:a?{OR:[{workspaceId:a},{workspaceId:null}]}:{},orderBy:[{isDefault:"desc"},{name:"asc"}]})}async function f(a){return c.db.agentPrompt.findUnique({where:{id:a}})}async function g(a){if(a.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let b=await c.db.agentPrompt.create({data:a});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),b}async function h(a,b){if(void 0!==b.content&&b.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let e=await c.db.agentPrompt.update({where:{id:a},data:b});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}async function i(a){await c.db.agentPrompt.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings")}async function j(a,b){let e=await c.db.$transaction(async c=>(await c.agentPrompt.updateMany({where:b?{workspaceId:b,isDefault:!0}:{isDefault:!0},data:{isDefault:!1}}),c.agentPrompt.update({where:{id:a},data:{isDefault:!0}})));return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}(0,a.i(630048).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"401567b6c8e7e306efc9b3deeb504c75ecfaa6b199",null),(0,b.registerServerReference)(f,"40f2433bd9dd0e0d65bd81d268194c01000969a039",null),(0,b.registerServerReference)(g,"40d382477ec8f0d91ca6f03479318beeeb2189a24b",null),(0,b.registerServerReference)(h,"605dac739ca6a86b850366f21284d545b10c5f143c",null),(0,b.registerServerReference)(i,"40c6c889448129e13e3b9ebbfb47026d9564b8304f",null),(0,b.registerServerReference)(j,"60715da8918059e6cba0a0d6eb6292e18456227eae",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},687769,(a,b,c)=>{b.exports=a.x("node:events",()=>require("node:events"))},81111,(a,b,c)=>{b.exports=a.x("node:stream",()=>require("node:stream"))},899871,(a,b,c)=>{b.exports=a.x("node:string_decoder",()=>require("node:string_decoder"))},449719,(a,b,c)=>{b.exports=a.x("assert",()=>require("assert"))},500874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},57328,(a,b,c)=>{b.exports=a.x("node:assert",()=>require("node:assert"))},76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_07rspg0._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js"].map(b=>a.l(b))).then(()=>b(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0y-7tle._.js"].map(b=>a.l(b))).then(()=>b(897667)))},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},195404,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_fts_ts_01m1thq._.js"].map(b=>a.l(b))).then(()=>b(835032)))}];
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},427699,(a,b,c)=>{b.exports=a.x("events",()=>require("events"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},319997,a=>{"use strict";let b;var c=a.i(750227),d=a.i(660526),e=a.i(902157);function f(){return b||(b=process.env.TOWER_DATA_DIR||(0,c.join)((0,d.homedir)(),".tower"),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0})),b}a.s(["getBackupsDir",0,function(){let a=(0,c.join)(f(),"backups");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getStorageDir",0,function(){let a=(0,c.join)(f(),"storage");return(0,e.existsSync)(a)||(0,e.mkdirSync)(a,{recursive:!0}),a},"getTowerDir",0,f])},925886,a=>{"use strict";var b=a.i(815429),c=a.i(761469),d=a.i(188139);async function e(a){return c.db.agentPrompt.findMany({where:a?{OR:[{workspaceId:a},{workspaceId:null}]}:{},orderBy:[{isDefault:"desc"},{name:"asc"}]})}async function f(a){return c.db.agentPrompt.findUnique({where:{id:a}})}async function g(a){if(a.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let b=await c.db.agentPrompt.create({data:a});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),b}async function h(a,b){if(void 0!==b.content&&b.content.length>1e5)throw Error("Prompt content exceeds maximum length of 100000 characters");let e=await c.db.agentPrompt.update({where:{id:a},data:b});return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}async function i(a){await c.db.agentPrompt.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings")}async function j(a,b){let e=await c.db.$transaction(async c=>(await c.agentPrompt.updateMany({where:b?{workspaceId:b,isDefault:!0}:{isDefault:!0},data:{isDefault:!1}}),c.agentPrompt.update({where:{id:a},data:{isDefault:!0}})));return(0,d.revalidatePath)("/workspaces"),(0,d.revalidatePath)("/settings"),e}(0,a.i(630048).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"4046169325470421b59d0f461ad8bdefb0e79735c1",null),(0,b.registerServerReference)(f,"401686f4330406fa79840449ea90d353c775fa46c9",null),(0,b.registerServerReference)(g,"40bfc6de7abff6ff2c1d27ff159588295d5f3a6973",null),(0,b.registerServerReference)(h,"60d5ff879300cbaeddaf13225c0ec7c70984a6dca2",null),(0,b.registerServerReference)(i,"4016e8c519532dcfed3e59979b95135688a72df2f0",null),(0,b.registerServerReference)(j,"60fa62cef74fca82466af8645224666219bca8962b",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},687769,(a,b,c)=>{b.exports=a.x("node:events",()=>require("node:events"))},81111,(a,b,c)=>{b.exports=a.x("node:stream",()=>require("node:stream"))},899871,(a,b,c)=>{b.exports=a.x("node:string_decoder",()=>require("node:string_decoder"))},449719,(a,b,c)=>{b.exports=a.x("assert",()=>require("assert"))},500874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},406461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},57328,(a,b,c)=>{b.exports=a.x("node:assert",()=>require("node:assert"))},76052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_07rspg0._.js"].map(b=>a.l(b))).then(()=>b(492067)))},98813,a=>{a.v(a=>Promise.resolve().then(()=>a(962620)))},507502,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_worktree_ts_06cucy3._.js"].map(b=>a.l(b))).then(()=>b(845427)))},752453,a=>{a.v(b=>Promise.all(["server/chunks/ssr/_0y-7tle._.js"].map(b=>a.l(b))).then(()=>b(897667)))},482848,a=>{a.v(a=>Promise.resolve().then(()=>a(874533)))},268548,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[externals]_node_util_0xr.y7p._.js"].map(b=>a.l(b))).then(()=>b(812057)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},889618,a=>{a.v(a=>Promise.resolve().then(()=>a(163812)))},195404,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_fts_ts_01m1thq._.js"].map(b=>a.l(b))).then(()=>b(835032)))}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=%5Broot-of-the-server%5D__0souuv~._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
1
|
+
module.exports=[52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
2
|
|
|
3
3
|
\`\`\`
|
|
4
4
|
${a.slice(-5e3)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
1
|
+
module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},52350,562278,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(163812);function f(){return process.env.TOWER_PACKAGE_ROOT||process.cwd()}a.s(["getPackageRoot",0,f],562278);let g=["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"];a.s(["ClaudeCliAdapter",0,class{buildSpawnArgs(a){let b=["--dangerously-skip-permissions"];a.extraArgs?.length&&b.push(...a.extraArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.envOverrides??{}};return{command:this.resolveCommand(),args:b,env:c}}buildEnvOverrides(a){let b={TOWER_TASK_ID:a.taskId,TOWER_TASK_TITLE:a.taskTitle,TOWER_STARTED_AT:new Date().toISOString(),TOWER_API_URL:a.apiUrl};return a.callbackUrl&&(b.CALLBACK_URL=a.callbackUrl),b}async installHooks(a){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=d.join(c,"scripts","session-start-hook.js").replace(/\\/g,"/"),g=d.join(c,"scripts","post-tool-hook.js").replace(/\\/g,"/"),h=d.join(c,"scripts","stop-hook.js").replace(/\\/g,"/"),i=!1;return i=this.upsertHook(b,"SessionStart","session-start-hook.js",{hooks:[{command:`node "${e}"`,timeout:5,type:"command"}]})||i,i=this.upsertHook(b,"PostToolUse","post-tool-hook.js",{hooks:[{command:`node "${g}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"})||i,(i=this.upsertHook(b,"Stop","stop-hook.js",{hooks:[{command:`node "${h}"`,timeout:5,type:"command"}]})||i)&&(a.hooks=b,this.writeSettings(a)),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async repairHookPaths(){try{let a=this.readSettings(),b=a.hooks??{},c=f().replace(/\\/g,"/"),e=!1;for(let[a,f]of[["SessionStart","session-start-hook.js"],["PostToolUse","post-tool-hook.js"],["Stop","stop-hook.js"]]){let g=this.getHookArray(b,a),h=g.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(f)));if(h<0)continue;let i=d.join(c,"scripts",f).replace(/\\/g,"/"),j=`node "${i}"`,k=g[h]?.hooks?.[0];k&&k.command!==j&&(k.command=j,b[a]=g,e=!0)}e&&(a.hooks=b,this.writeSettings(a))}catch{}}upsertHook(a,b,c,d){let e=this.getHookArray(a,b),f=d?.hooks?.[0]?.command,g=e.findIndex(a=>a?.hooks?.some?.(a=>a.command?.includes(c)));if(g>=0){if(e[g]?.hooks?.[0]?.command===f)return!1;e.splice(g,1)}return e.push(d),a[b]=e,!0}async uninstallHooks(){try{let a=this.readSettings(),b=a.hooks??{},c=["session-start-hook.js","post-tool-hook.js","stop-hook.js"];for(let a of["SessionStart","PostToolUse","Stop"]){let d=this.getHookArray(b,a);b[a]=d.filter(a=>!a.hooks?.some(a=>c.some(b=>a.command?.includes(b))))}return a.hooks=b,this.writeSettings(a),{ok:!0,method:"file",detail:this.getSettingsPath()}}catch(a){return{ok:!1,method:"file",detail:this.getSettingsPath(),error:a instanceof Error?a.message:String(a)}}}async isHooksInstalled(){let a=this.readSettings().hooks??{},b=this.getHookArray(a,"PostToolUse");return this.hasHook(b,"post-tool-hook.js")}async installMcp(a,b={}){let c=b.scope??"user",d={command:a.command,args:a.args};a.env&&Object.keys(a.env).length>0&&(d.env=a.env);let e=this.resolveCommand(),f=["mcp","add-json","-s",c,a.name,JSON.stringify(d)];try{return await this.runCli(e,["mcp","remove","-s",c,a.name],b.cwd).catch(()=>{}),await this.runCli(e,f,b.cwd),{ok:!0,method:"cli",detail:`${e} ${f.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${e} ${f.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async uninstallMcp(a,b={}){let c=b.scope??"user",d=this.resolveCommand(),e=["mcp","remove","-s",c,a];try{return await this.runCli(d,e,b.cwd),{ok:!0,method:"cli",detail:`${d} ${e.join(" ")}`}}catch(a){return{ok:!1,method:"cli",detail:`${d} ${e.join(" ")}`,error:a instanceof Error?a.message:String(a)}}}async isMcpInstalled(a,b={}){let c=this.resolveCommand();try{return await this.runCli(c,["mcp","get",a],b.cwd,5e3),!0}catch{return!1}}async installSkill(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!b.existsSync(c))return{ok:!1,method:"symlink",detail:e,error:`Source skill dir does not exist: ${c}`};b.mkdirSync(d.dirname(e),{recursive:!0});let a=await b.promises.lstat(e).catch(()=>null);if(a)if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:e,error:`Refusing to overwrite non-symlink at ${e}`};else{let a=await b.promises.readlink(e);if(d.resolve(a)===d.resolve(c))return{ok:!0,method:"symlink",detail:`${e} → ${c} (already)`};await b.promises.unlink(e)}return await b.promises.symlink(c,e,"dir"),{ok:!0,method:"symlink",detail:`${e} → ${c}`}}catch(a){return{ok:!1,method:"symlink",detail:e,error:a instanceof Error?a.message:String(a)}}}async uninstallSkill(a){let c=d.join(this.getConfigDir(),"skills",a);try{let a=await b.promises.lstat(c).catch(()=>null);if(!a)return{ok:!0,method:"symlink",detail:`${c} (already absent)`};if(!a.isSymbolicLink())return{ok:!1,method:"symlink",detail:c,error:`Refusing to remove non-symlink at ${c}`};return await b.promises.unlink(c),{ok:!0,method:"symlink",detail:c}}catch(a){return{ok:!1,method:"symlink",detail:c,error:a instanceof Error?a.message:String(a)}}}async isSkillInstalled(a,c){let e=d.join(this.getConfigDir(),"skills",a);try{if(!(await b.promises.lstat(e)).isSymbolicLink())return!1;if(!c)return!0;let a=await b.promises.readlink(e),f=d.isAbsolute(a)?a:d.resolve(d.dirname(e),a);return d.resolve(f)===d.resolve(c)}catch{return!1}}async runCli(b,c,d,e=1e4){let{execFile:f}=await a.A(482848),{promisify:g}=await a.A(268548),h=g(f),{stdout:i}=await h(b,c,{cwd:d,timeout:e});return i}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),{resolveSpawnTarget:d}=await a.A(889618),e=c(b),f=await d(this.resolveCommand(),["--version"]),{stdout:g}=await e(f.command,f.args,{timeout:5e3});return g.trim()||null}catch{return null}}async getModels(){return g}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}getApiKeyInfo(){return{envVar:"ANTHROPIC_API_KEY",required:!1}}buildHelloProbeArgs(a){return{command:this.resolveCommand(),args:["--print",a,"--output-format","stream-json","--verbose"]}}resolveCommand(){return process.env.CLAUDE_CODE_PATH?process.env.CLAUDE_CODE_PATH:(0,e.resolveCommandPathSync)("claude")}readSettings(){try{return JSON.parse(b.readFileSync(this.getSettingsPath(),"utf-8"))}catch{return{}}}writeSettings(a){let c=this.getConfigDir();b.existsSync(c)||b.mkdirSync(c,{recursive:!0}),b.writeFileSync(this.getSettingsPath(),JSON.stringify(a,null,2),"utf-8")}getHookArray(a,b){let c=a[b];return Array.isArray(c)?c:[]}hasHook(a,b){return a.some(a=>a.hooks?.some(a=>a.command?.includes(b)))}}],52350)},897667,a=>{"use strict";let b=new(a.i(52350)).ClaudeCliAdapter;async function c(d,e,f={}){let g="";try{let{query:c}=await a.A(719041),h=b.resolveCommand();for await(let a of c({prompt:d,options:{tools:f.tools??[],allowedTools:f.allowedTools??[],maxTurns:f.maxTurns??1,cwd:e,pathToClaudeCodeExecutable:h,sessionPersistence:!1}}))if("assistant"===a.type){let b=a.message.content.filter(a=>"text"===a.type);g+=b.map(a=>a.text??"").join("")}else if("result"===a.type){let b="string"==typeof a.result?a.result:"";b&&!g&&(g=b)}return g.trim()||null}catch(a){if(a.message?.includes("maximum number of turns")&&g.trim())return g.trim();return console.error("[aiQuery] Failed:",a.message,a.stack?.slice(0,300)),null}}async function d(a,b){let d=`以下是一次AI编程助手的终端会话记录。请用一句简短的中文总结这次会话做了什么(不超过50字,只回答总结内容,不要加引号或前缀):
|
|
2
2
|
|
|
3
3
|
\`\`\`
|
|
4
4
|
${a.slice(-5e3)}
|