tower-studio 0.1.11 → 0.1.12

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.
Files changed (180) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/diagnostics/route-bundle-stats.json +40 -40
  6. package/.next/fallback-build-manifest.json +3 -3
  7. package/.next/prerender-manifest.json +3 -3
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -1
  16. package/.next/server/app/_not-found/page/server-reference-manifest.json +25 -25
  17. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +1 -1
  20. package/.next/server/app/_not-found.rsc +13 -13
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
  22. package/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
  23. package/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/api/files/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  28. package/.next/server/app/api/internal/assets/[projectId]/[filename]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/internal/assets/reveal/route.js.nft.json +1 -1
  30. package/.next/server/app/api/internal/assistant/chat/route.js.nft.json +1 -1
  31. package/.next/server/app/api/internal/assistant/images/route.js.nft.json +1 -1
  32. package/.next/server/app/api/internal/assistant/sessions/route.js.nft.json +1 -1
  33. package/.next/server/app/api/internal/cache/[...segments]/route.js.nft.json +1 -1
  34. package/.next/server/app/api/internal/hooks/upload/route.js.nft.json +1 -1
  35. package/.next/server/app/api/internal/terminal/[taskId]/start/route.js.nft.json +1 -1
  36. package/.next/server/app/api/tasks/[taskId]/merge/route.js.nft.json +1 -1
  37. package/.next/server/app/index.html +1 -1
  38. package/.next/server/app/index.rsc +13 -13
  39. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  40. package/.next/server/app/index.segments/_full.segment.rsc +13 -13
  41. package/.next/server/app/index.segments/_head.segment.rsc +4 -4
  42. package/.next/server/app/index.segments/_index.segment.rsc +8 -8
  43. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  44. package/.next/server/app/missions/page/react-loadable-manifest.json +1 -1
  45. package/.next/server/app/missions/page/server-reference-manifest.json +51 -51
  46. package/.next/server/app/missions/page.js.nft.json +1 -1
  47. package/.next/server/app/missions/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/onboarding/page/react-loadable-manifest.json +1 -1
  49. package/.next/server/app/onboarding/page/server-reference-manifest.json +25 -25
  50. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  51. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/onboarding.html +1 -1
  53. package/.next/server/app/onboarding.rsc +15 -15
  54. package/.next/server/app/onboarding.segments/_full.segment.rsc +15 -15
  55. package/.next/server/app/onboarding.segments/_head.segment.rsc +4 -4
  56. package/.next/server/app/onboarding.segments/_index.segment.rsc +8 -8
  57. package/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  58. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +4 -4
  59. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +3 -3
  60. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  61. package/.next/server/app/page/server-reference-manifest.json +25 -25
  62. package/.next/server/app/page.js.nft.json +1 -1
  63. package/.next/server/app/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/settings/page/react-loadable-manifest.json +1 -1
  65. package/.next/server/app/settings/page/server-reference-manifest.json +34 -34
  66. package/.next/server/app/settings/page.js.nft.json +1 -1
  67. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/settings.html +1 -1
  69. package/.next/server/app/settings.rsc +15 -15
  70. package/.next/server/app/settings.segments/_full.segment.rsc +15 -15
  71. package/.next/server/app/settings.segments/_head.segment.rsc +4 -4
  72. package/.next/server/app/settings.segments/_index.segment.rsc +8 -8
  73. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
  75. package/.next/server/app/settings.segments/settings.segment.rsc +3 -3
  76. package/.next/server/app/workspaces/[workspaceId]/archive/page/react-loadable-manifest.json +1 -1
  77. package/.next/server/app/workspaces/[workspaceId]/archive/page/server-reference-manifest.json +77 -77
  78. package/.next/server/app/workspaces/[workspaceId]/archive/page.js.nft.json +1 -1
  79. package/.next/server/app/workspaces/[workspaceId]/archive/page_client-reference-manifest.js +1 -1
  80. package/.next/server/app/workspaces/[workspaceId]/assets/page/react-loadable-manifest.json +1 -1
  81. package/.next/server/app/workspaces/[workspaceId]/assets/page/server-reference-manifest.json +74 -74
  82. package/.next/server/app/workspaces/[workspaceId]/assets/page.js.nft.json +1 -1
  83. package/.next/server/app/workspaces/[workspaceId]/assets/page_client-reference-manifest.js +1 -1
  84. package/.next/server/app/workspaces/[workspaceId]/notes/page/react-loadable-manifest.json +1 -1
  85. package/.next/server/app/workspaces/[workspaceId]/notes/page/server-reference-manifest.json +61 -61
  86. package/.next/server/app/workspaces/[workspaceId]/notes/page.js.nft.json +1 -1
  87. package/.next/server/app/workspaces/[workspaceId]/notes/page_client-reference-manifest.js +1 -1
  88. package/.next/server/app/workspaces/[workspaceId]/page/react-loadable-manifest.json +1 -1
  89. package/.next/server/app/workspaces/[workspaceId]/page/server-reference-manifest.json +53 -53
  90. package/.next/server/app/workspaces/[workspaceId]/page.js.nft.json +1 -1
  91. package/.next/server/app/workspaces/[workspaceId]/page_client-reference-manifest.js +1 -1
  92. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/react-loadable-manifest.json +1 -1
  93. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page/server-reference-manifest.json +25 -25
  94. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page.js.nft.json +1 -1
  95. package/.next/server/app/workspaces/[workspaceId]/projects/[projectId]/page_client-reference-manifest.js +1 -1
  96. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/react-loadable-manifest.json +1 -1
  97. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page/server-reference-manifest.json +58 -58
  98. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page.js.nft.json +1 -1
  99. package/.next/server/app/workspaces/[workspaceId]/tasks/[taskId]/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/workspaces/page/react-loadable-manifest.json +1 -1
  101. package/.next/server/app/workspaces/page/server-reference-manifest.json +45 -45
  102. package/.next/server/app/workspaces/page.js.nft.json +1 -1
  103. package/.next/server/app/workspaces/page_client-reference-manifest.js +1 -1
  104. package/.next/server/chunks/0uz~_next_dist_esm_build_templates_app-route_05yec2y.js +2 -2
  105. package/.next/server/chunks/[root-of-the-server]__0~33o~m._.js +1 -1
  106. package/.next/server/chunks/project_f_tower_0n1s3ym._.js +1 -1
  107. package/.next/server/chunks/project_f_tower_src_11e.cv5._.js +1 -1
  108. package/.next/server/chunks/ssr/04uy_src_app_workspaces_[workspaceId]_tasks_[taskId]_task-page-client_tsx_01.s1p0._.js +1 -1
  109. package/.next/server/chunks/ssr/0y0r_f_tower_src_app_workspaces_[workspaceId]_assets_assets-page-client_tsx_0n4g3bn._.js +1 -1
  110. package/.next/server/chunks/ssr/[root-of-the-server]__06qzctf._.js +1 -1
  111. package/.next/server/chunks/ssr/[root-of-the-server]__08meal1._.js +3 -0
  112. package/.next/server/chunks/ssr/[root-of-the-server]__0ffdrwp._.js +1 -1
  113. package/.next/server/chunks/ssr/[root-of-the-server]__0fwuc5u._.js +1 -1
  114. package/.next/server/chunks/ssr/[root-of-the-server]__0i4rk9v._.js +3 -3
  115. package/.next/server/chunks/ssr/{[root-of-the-server]__06japut._.js → [root-of-the-server]__0la.lch._.js} +2 -2
  116. package/.next/server/chunks/ssr/[root-of-the-server]__0nmyvwk._.js +1 -1
  117. package/.next/server/chunks/ssr/{[root-of-the-server]__0fu82np._.js → [root-of-the-server]__0p~~40h._.js} +2 -2
  118. package/.next/server/chunks/ssr/[root-of-the-server]__0w7gbe7._.js +1 -1
  119. package/.next/server/chunks/ssr/[root-of-the-server]__11j4k9o._.js +1 -1
  120. package/.next/server/chunks/ssr/[root-of-the-server]__13cjs8r._.js +1 -1
  121. package/.next/server/chunks/ssr/[root-of-the-server]__13eo85g._.js +1 -1
  122. package/.next/server/chunks/ssr/{project_f_tower_0n6q9zh._.js → project_f_tower_0.k8r5w._.js} +2 -2
  123. package/.next/server/chunks/ssr/project_f_tower_0.txwd8._.js +1 -1
  124. package/.next/server/chunks/ssr/{project_f_tower_0jdkold._.js → project_f_tower_0c6n7oo._.js} +2 -2
  125. package/.next/server/chunks/ssr/project_f_tower_0dfyjgz._.js +3 -0
  126. package/.next/server/chunks/ssr/project_f_tower_0f0-wva._.js +1 -1
  127. package/.next/server/chunks/ssr/project_f_tower_0hgtev9._.js +1 -1
  128. package/.next/server/chunks/ssr/{project_f_tower_0xkqjno._.js → project_f_tower_0ifpw8k._.js} +2 -2
  129. package/.next/server/chunks/ssr/project_f_tower_0ivvjwd._.js +1 -1
  130. package/.next/server/chunks/ssr/project_f_tower_0jy~1uf._.js +1 -1
  131. package/.next/server/chunks/ssr/project_f_tower_0l6ssf8._.js +1 -1
  132. package/.next/server/chunks/ssr/project_f_tower_0o5.y1e._.js +1 -1
  133. package/.next/server/chunks/ssr/{project_f_tower_0h79vn0._.js → project_f_tower_0ron~f-._.js} +2 -2
  134. package/.next/server/chunks/ssr/{project_f_tower_0ghw~2t._.js → project_f_tower_0t0smg9._.js} +2 -2
  135. package/.next/server/chunks/ssr/project_f_tower_0ym-aea._.js +1 -1
  136. package/.next/server/chunks/ssr/{project_f_tower_src_0yr8rna._.js → project_f_tower_src_0_g15e8._.js} +2 -2
  137. package/.next/server/chunks/ssr/project_f_tower_src_actions_agent-actions_ts_0.s4~m-._.js +1 -1
  138. package/.next/server/chunks/ssr/project_f_tower_src_actions_file-actions_ts_02i742t._.js +1 -1
  139. package/.next/server/chunks/ssr/project_f_tower_src_app_missions_missions-client_tsx_0ums4qx._.js +1 -1
  140. package/.next/server/chunks/ssr/project_f_tower_src_app_onboarding_page_tsx_0_9_yoq._.js +1 -1
  141. package/.next/server/chunks/ssr/project_f_tower_src_app_settings_page_tsx_0oo06~d._.js +1 -1
  142. package/.next/server/chunks/ssr/project_f_tower_src_app_workspaces_[workspaceId]_board-page-client_tsx_0jmj1xz._.js +1 -1
  143. package/.next/server/instrumentation.js.nft.json +1 -1
  144. package/.next/server/middleware-build-manifest.js +3 -3
  145. package/.next/server/pages/404.html +1 -1
  146. package/.next/server/pages/500.html +1 -1
  147. package/.next/server/server-reference-manifest.js +1 -1
  148. package/.next/server/server-reference-manifest.json +205 -205
  149. package/.next/static/chunks/{0dlrmobwx~tvz.js → 0-plp~pgpcel9.js} +1 -1
  150. package/.next/static/chunks/{06hfc~t6~gtz9.js → 0.do_z22ngnjd.js} +1 -1
  151. package/.next/static/chunks/00atyrg-7i0hj.js +1 -0
  152. package/.next/static/chunks/{0kyb0fcxzykkx.js → 01mymnegugktp.js} +1 -1
  153. package/.next/static/chunks/09hs9w6-77im2.js +1 -0
  154. package/.next/static/chunks/09hxu-k8oyivu.js +1 -0
  155. package/.next/static/chunks/{0afji0z13kos5.js → 09p7-kr_vidww.js} +2 -2
  156. package/.next/static/chunks/{006_yes1e~uq-.js → 0c49o.5w_cw8_.js} +1 -1
  157. package/.next/static/chunks/{0upxmdjt9neoj.js → 0d.3wv6u.2g~6.js} +1 -1
  158. package/.next/static/chunks/0im8~yii0.2mn.js +1 -0
  159. package/.next/static/chunks/0kbuf91gryyo2.js +1 -0
  160. package/.next/static/chunks/0p~3m91-t6p91.js +1 -0
  161. package/.next/static/chunks/{06xnbktd_jmb4.js → 0qp~1_kfjklfg.js} +1 -1
  162. package/.next/static/chunks/{10xx474hrm.03.js → 0vs5vey5ni44t.js} +1 -1
  163. package/.next/static/chunks/15zclhqyib88_.js +1 -0
  164. package/.next/trace +2 -2
  165. package/.next/trace-build +1 -1
  166. package/bin/tower.mjs +9 -0
  167. package/package.json +1 -1
  168. package/scripts/generate-prisma-client.js +2 -17
  169. package/.next/server/chunks/ssr/[root-of-the-server]__0db_p8v._.js +0 -3
  170. package/.next/server/chunks/ssr/project_f_tower_03k0qr1._.js +0 -3
  171. package/.next/static/chunks/03~7u57dwxswo.js +0 -1
  172. package/.next/static/chunks/054pu3m7e37gx.js +0 -1
  173. package/.next/static/chunks/05fge.5j9lnpa.js +0 -1
  174. package/.next/static/chunks/0azbwlqgcxx~9.js +0 -1
  175. package/.next/static/chunks/0g-rx4evmd.pa.js +0 -1
  176. package/.next/static/chunks/0sa5eiyws1~n0.js +0 -1
  177. package/.next/static/chunks/16ow8w3exqm6p.js +0 -1
  178. /package/.next/static/{qVmkMYUuxwdsiFTnn1wfK → jMxcHfsOSldWKgvAjGnAv}/_buildManifest.js +0 -0
  179. /package/.next/static/{qVmkMYUuxwdsiFTnn1wfK → jMxcHfsOSldWKgvAjGnAv}/_clientMiddlewareManifest.js +0 -0
  180. /package/.next/static/{qVmkMYUuxwdsiFTnn1wfK → jMxcHfsOSldWKgvAjGnAv}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[25422,a=>{"use strict";var b=a.i(858360),c=a.i(175391),d=a.i(109434),e=a.i(515205),f=a.i(584335),g=a.i(245095),h=a.i(879876);let i=(0,h.createServerReference)("40870caaf2b99caede2d1f3d00d181fc220d73e640",h.callServer,void 0,h.findSourceMapURL,"getProjectAssets");var j=a.i(986379),k=a.i(468518),l=a.i(161604),m=a.i(797896),n=a.i(569210),o=a.i(410756);function p(a){let b=a.match(/(?:^|\/)(?:storage|data)\/assets\/([^/]+)\/([^/]+)$/);return b?`/api/files/assets/${b[1]}/${b[2]}`:a}function q({asset:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g}){var h;let{t:i}=(0,f.useI18n)(),k=p(a.path),r=a.mimeType?.startsWith("image/");return(0,b.jsxs)("div",{className:"flex items-center gap-4 rounded-lg border border-border bg-card px-4 py-3 transition-colors hover:bg-accent/20",children:[(0,b.jsx)(o.Button,{variant:"ghost",onClick:()=>c(a),className:"flex-shrink-0 cursor-pointer p-0 h-auto",children:r?(0,b.jsx)("img",{src:k,alt:a.filename,className:"h-12 w-12 rounded object-cover border border-border"}):(0,b.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded border border-border bg-muted",children:(0,b.jsx)(l.FileText,{className:"h-6 w-6 text-muted-foreground"})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("p",{className:"truncate text-sm font-medium text-foreground",children:a.filename}),a.taskTitle&&a.taskId&&(0,b.jsx)(o.Button,{variant:"ghost",onClick:b=>{b.stopPropagation(),g?.(a.taskId)},className:"flex-shrink-0 bg-blue-500/10 text-blue-600 dark:text-blue-400 text-xs px-1.5 py-0.5 rounded cursor-pointer hover:bg-blue-500/20 transition-colors h-auto",children:a.taskTitle.length>20?`[任务: ${a.taskTitle.slice(0,20)}...]`:`[任务: ${a.taskTitle}]`})]}),a.description&&(0,b.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground truncate",children:a.description}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-3 text-xs text-muted-foreground",children:[(0,b.jsx)("span",{children:null===(h=a.size)?"-":h<1024?`${h} B`:h<1048576?`${(h/1024).toFixed(1)} KB`:h<0x40000000?`${(h/1048576).toFixed(1)} MB`:`${(h/0x40000000).toFixed(1)} GB`}),(0,b.jsx)("span",{children:new Date(a.createdAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0",children:[(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>c(a),className:"text-muted-foreground","aria-label":i("assets.preview"),children:(0,b.jsx)(m.Eye,{className:"h-4 w-4"})}),(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>d(a),className:"text-muted-foreground","aria-label":i("assets.revealInFinder"),children:(0,b.jsx)(j.FolderOpen,{className:"h-4 w-4"})}),(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>e(a.id),className:"text-muted-foreground hover:text-rose-400","aria-label":i("assets.delete"),children:(0,b.jsx)(n.Trash2,{className:"h-4 w-4"})})]})]})}function r({assets:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g}){let{t:h}=(0,f.useI18n)();return 0===a.length?(0,b.jsx)(k.EmptyState,{icon:j.FolderOpen,title:h("assets.empty"),description:h("assets.emptyHint")}):(0,b.jsx)("div",{className:"flex flex-col gap-3",children:a.map(a=>(0,b.jsx)(q,{asset:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g},a.id))})}var s=a.i(208168),t=a.i(54709),u=a.i(319884),v=a.i(246962),w=a.i(224372);function x({allWorkspaces:a,initialWsId:d,initialProjectId:e,onUploaded:g}){let h,{t:i}=(0,f.useI18n)(),j=(0,c.useRef)(null),[k,l]=(0,c.useState)(!1),[m,n]=(0,c.useState)(!1),[p,q]=(0,c.useState)(null),[r,y]=(0,c.useState)(d),[z,A]=(0,c.useState)(e),[B,C]=(0,c.useState)(""),D=a.find(a=>a.id===r),E=D?.projects??[],F=()=>{l(!1),q(null),j.current&&(j.current.value="")},G=async()=>{if(p&&z){n(!0);try{let a=new FormData;a.append("file",p),a.append("projectId",z),a.append("description",B.trim()),await (0,u.uploadAsset)(a),g(z),F()}finally{n(!1)}}};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(o.Button,{onClick:()=>{y(d),A(e),q(null),C(""),l(!0)},className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,b.jsx)(s.Upload,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:i("assets.upload")})]}),k&&(0,b.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[(0,b.jsx)("div",{className:"absolute inset-0 bg-black/50",onClick:F}),(0,b.jsxs)("div",{className:"relative w-full max-w-md rounded-lg border border-border bg-card p-6 shadow-lg",children:[(0,b.jsx)(o.Button,{variant:"ghost",size:"icon-xs",onClick:F,className:"absolute right-3 top-3 text-muted-foreground",children:(0,b.jsx)(t.X,{className:"h-4 w-4"})}),(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground mb-4",children:i("assets.uploadTitle")}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.workspace")}),(0,b.jsxs)(w.Select,{value:r,onValueChange:b=>{var c;let d;return y(c=b??""),d=a.find(a=>a.id===c),void A(d?.projects[0]?.id??null)},children:[(0,b.jsx)(w.SelectTrigger,{className:"flex-1 text-xs",children:(0,b.jsx)("span",{className:"truncate",children:D?.name??r})}),(0,b.jsx)(w.SelectContent,{children:a.map(a=>(0,b.jsx)(w.SelectItem,{value:a.id,children:a.name},a.id))})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.project")}),E.length>0?(0,b.jsxs)(w.Select,{value:z??"",onValueChange:a=>A(a??""),children:[(0,b.jsx)(w.SelectTrigger,{className:"flex-1 text-xs",children:(0,b.jsx)("span",{className:"truncate",children:(h=E.find(a=>a.id===z))?h.alias?`${h.name} (${h.alias})`:h.name:z})}),(0,b.jsx)(w.SelectContent,{children:E.map(a=>{let c=a.alias?`${a.name} (${a.alias})`:a.name;return(0,b.jsx)(w.SelectItem,{value:a.id,children:c},a.id)})})]}):(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:i("assets.noProject")})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.file")}),(0,b.jsx)("input",{type:"file",ref:j,onChange:a=>{q(a.target.files?.[0]??null)},className:"hidden"}),(0,b.jsx)(o.Button,{variant:"outline",onClick:()=>{j.current?.click()},className:"flex-1 border-dashed bg-background px-3 py-2 text-xs text-muted-foreground hover:border-primary/50 hover:text-foreground transition-colors text-left justify-start",children:p?p.name:i("assets.selectFile")})]}),(0,b.jsxs)("div",{className:"flex items-start gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0 pt-1.5",children:i("assets.description")}),(0,b.jsx)(v.Textarea,{value:B,onChange:a=>C(a.target.value),placeholder:i("assets.descriptionPlaceholder"),className:"flex-1 rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring resize-none h-20"})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 justify-end mt-6",children:[(0,b.jsx)(o.Button,{variant:"outline",onClick:F,children:i("notes.cancel")}),(0,b.jsx)(o.Button,{onClick:G,disabled:!p||!z||!B.trim()||m,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:i(m?"assets.uploading":"assets.upload")})]})]})]})]})}var y=a.i(857122);function z({imageUrl:a,filename:d,open:e,onOpenChange:f}){let[g,h]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{h(!1)},[e]),(0,b.jsx)(y.Dialog,{open:e,onOpenChange:f,children:(0,b.jsxs)(y.DialogContent,{showCloseButton:!1,className:"max-w-[90vw] max-h-[90vh] p-0 overflow-hidden bg-black/90 ring-0",children:[(0,b.jsx)(y.DialogClose,{render:(0,b.jsx)(o.Button,{variant:"ghost",className:"absolute top-2 right-2 z-10 h-8 w-8 p-0 text-white hover:bg-white/20 hover:text-white"}),"aria-label":"Close",children:(0,b.jsx)(t.X,{className:"h-4 w-4"})}),a&&(0,b.jsx)(b.Fragment,{children:g?(0,b.jsx)("div",{className:"overflow-auto max-w-[90vw] max-h-[90vh]",children:(0,b.jsx)("img",{src:a,alt:d,onClick:()=>h(!1),className:"w-auto h-auto max-w-none cursor-zoom-out"})}):(0,b.jsx)("img",{src:a,alt:d,onClick:()=>h(!0),className:"max-w-full max-h-[85vh] object-contain cursor-zoom-in mx-auto"})}),(0,b.jsx)("span",{className:"absolute bottom-2 left-3 text-xs text-white/70 truncate max-w-[60%]",children:d})]})})}var A=a.i(448709),B=a.i(238848);function C({url:a,filename:e,open:g,onOpenChange:h}){let{t:i}=(0,f.useI18n)(),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(null);(0,c.useEffect)(()=>{if(!g||!a){k(null),o(null);return}let b=!1;return m(!0),o(null),k(null),fetch(a).then(a=>{let b=a.headers.get("content-length");if(b&&parseInt(b,10)>1048576)throw Error("FILE_TOO_LARGE");return a.text()}).then(a=>{if(a.length>1048576)throw Error("FILE_TOO_LARGE");b||(k(a),m(!1))}).catch(a=>{b||(a instanceof Error&&"FILE_TOO_LARGE"===a.message?o(i("assets.fileTooLarge")):o(i("assets.previewError")),m(!1))}),()=>{b=!0}},[g,a,i]);let p=e.split(".").pop()?.toLowerCase();return(0,b.jsx)(y.Dialog,{open:g,onOpenChange:h,children:(0,b.jsxs)(y.DialogContent,{className:"max-w-3xl max-h-[80vh] flex flex-col",children:[(0,b.jsx)("h3",{className:"text-sm font-medium truncate px-4 pt-4",children:e}),(0,b.jsx)("div",{className:"flex-1 overflow-auto px-4 pb-4 pt-2",children:(()=>{if(l)return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 gap-2",children:[(0,b.jsx)(d.Loader2,{className:"size-5 animate-spin text-muted-foreground"}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:i("assets.loadingPreview")})]});if(n)return(0,b.jsx)("p",{className:"text-sm text-destructive",children:n});if(null===j)return null;if("md"===p)return(0,b.jsx)("div",{className:"prose prose-sm dark:prose-invert max-w-none",children:(0,b.jsx)(A.default,{remarkPlugins:[B.default],children:j})});if("json"===p){let a;try{a=JSON.stringify(JSON.parse(j),null,2)}catch{a=j}return(0,b.jsx)("pre",{className:"font-mono text-xs whitespace-pre-wrap text-foreground",children:a})}return(0,b.jsx)("pre",{className:"font-mono text-sm whitespace-pre-wrap text-foreground",children:j})})()})]})})}var D=a.i(207300),E=a.i(44585),F=a.i(468779);function G({...a}){return(0,b.jsx)(D.Dialog.Root,{"data-slot":"sheet",...a})}function H({...a}){return(0,b.jsx)(D.Dialog.Portal,{"data-slot":"sheet-portal",...a})}function I({className:a,...c}){return(0,b.jsx)(D.Dialog.Backdrop,{"data-slot":"sheet-overlay",className:(0,E.cn)("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",a),...c})}function J({className:a,children:c,side:d="right",showCloseButton:e=!0,...f}){return(0,b.jsxs)(H,{children:[(0,b.jsx)(I,{}),(0,b.jsxs)(D.Dialog.Popup,{"data-slot":"sheet-content","data-side":d,className:(0,E.cn)("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",a),...f,children:[c,e&&(0,b.jsxs)(D.Dialog.Close,{"data-slot":"sheet-close",render:(0,b.jsx)(o.Button,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[(0,b.jsx)(F.XIcon,{}),(0,b.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function K({className:a,...c}){return(0,b.jsx)("div",{"data-slot":"sheet-header",className:(0,E.cn)("flex flex-col gap-0.5 p-4",a),...c})}function L({className:a,...c}){return(0,b.jsx)(D.Dialog.Title,{"data-slot":"sheet-title",className:(0,E.cn)("font-heading text-base font-medium text-foreground",a),...c})}function M({className:a,...c}){return(0,b.jsx)(D.Dialog.Description,{"data-slot":"sheet-description",className:(0,E.cn)("text-sm text-muted-foreground",a),...c})}var N=a.i(358440),O=a.i(48300);let P=(0,h.createServerReference)("40ae3f40b62ca3c5a2377e58d67b407afcf20387e5",h.callServer,void 0,h.findSourceMapURL,"getTaskOverview");var Q=a.i(113620),R=a.i(302856);let S=(0,R.default)("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]),T=(0,R.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var U=a.i(236345);function V({open:a,onOpenChange:d,taskId:e}){let{t:g}=(0,f.useI18n)(),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useTransition)();(0,c.useEffect)(()=>{e&&a?k(async()=>{let a=await P(e);a&&i(a)}):i(null)},[e,a]);let l=h?Q.BOARD_COLUMNS.find(a=>a.id===h.status):null,m=h?Q.PRIORITY_CONFIG[h.priority]:null,n=h?.executions?.[0]??null;return(0,b.jsx)(G,{open:a,onOpenChange:d,children:(0,b.jsxs)(J,{side:"right",className:"w-[380px] sm:max-w-[380px] p-0",children:[(0,b.jsxs)(K,{className:"px-4 pt-4 pb-3 border-b border-border",children:[(0,b.jsx)(L,{className:"text-base font-semibold leading-tight pr-8",children:h?.title??""}),(0,b.jsx)(M,{className:"sr-only",children:g("taskDrawer.title")}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-2 mt-2",children:[l&&(0,b.jsxs)(O.Badge,{variant:"secondary",className:"text-xs",children:[(0,b.jsx)("span",{className:`inline-block w-2 h-2 rounded-full mr-1.5 ${l.color}`}),l.label]}),m&&(0,b.jsx)(O.Badge,{variant:"secondary",className:`text-xs ${m.color}`,children:m.label})]})]}),(0,b.jsx)(N.ScrollArea,{className:"flex-1 h-[calc(100%-80px)]",children:j&&!h?(0,b.jsx)("div",{className:"flex items-center justify-center h-32 text-sm text-muted-foreground",children:g("assets.loading")}):h?(0,b.jsxs)("div",{className:"p-4 space-y-4",children:[(0,b.jsxs)("section",{children:[(0,b.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1",children:g("taskDrawer.description")}),(0,b.jsx)("p",{className:"text-sm text-foreground whitespace-pre-wrap",children:h.description||g("taskDrawer.noDescription")})]}),h.labels.length>0&&(0,b.jsxs)("section",{children:[(0,b.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:g("taskDrawer.labels")}),(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.labels.map(a=>(0,b.jsx)(O.Badge,{variant:"secondary",className:"text-xs",style:{backgroundColor:`${a.label.color}20`,color:a.label.color,borderColor:`${a.label.color}40`},children:a.label.name},a.label.id))})]}),(0,b.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(S,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:g("taskDrawer.createdAt")}),(0,b.jsx)("span",{className:"text-foreground",children:new Date(h.createdAt).toLocaleDateString()})]}),(0,b.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(T,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:g("taskDrawer.resources")}),(0,b.jsx)("span",{className:"text-foreground",children:h._count.assets})]}),(0,b.jsxs)("section",{children:[(0,b.jsxs)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(U.PlayCircle,{className:"h-3.5 w-3.5"}),g("taskDrawer.lastExecution")]}),n?(0,b.jsxs)("div",{className:"rounded-md border border-border p-2.5 text-sm",children:[(0,b.jsx)(O.Badge,{variant:"secondary",className:"text-xs mb-1.5",children:n.status}),n.summary&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-4",children:n.summary.slice(0,200)})]}):(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:g("taskDrawer.noExecution")})]})]}):null})]})})}var W=a.i(942308);a.s(["AssetsPageClient",0,function({allWorkspaces:a,initialWorkspaceId:h,initialProjectId:j,initialAssets:k}){let l,{t:m}=(0,f.useI18n)(),[n,o]=(0,c.useTransition)(),[q,s]=(0,c.useState)(h),[t,u]=(0,c.useState)(j),[v,y]=(0,c.useState)(k),[A,B]=(0,c.useState)(null),D=a.find(a=>a.id===q),E=D?.projects??[],F=(0,c.useCallback)(a=>{a?o(async()=>{y(await i(a))}):y([])},[o]),[G,H]=(0,c.useState)(null),I=G?G.mimeType?.startsWith("image/")?"image":/\.(txt|md|json)$/i.test(G.filename)?"text":null:null,J=async a=>{try{let b=await fetch("/api/internal/assets/reveal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a.path})});if(!b.ok){let a=await b.json().catch(()=>({}));W.toast.error(a.error||"Failed to reveal file")}}catch{W.toast.error("Failed to reveal file")}},K=async a=>{let b=v.find(b=>b.id===a);confirm(m("assets.deleteConfirm",{filename:b?.filename??a}))&&(await (0,g.deleteAsset)(a),F(t))};return(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsx)(e.SubPageNav,{workspaceId:q}),(0,b.jsxs)("div",{className:"header-sm flex items-center gap-3 px-6 py-2",children:[(0,b.jsxs)(w.Select,{value:q,onValueChange:b=>b&&(b=>{if(b===q)return;s(b);let c=a.find(a=>a.id===b),d=c?.projects[0]??null;u(d?.id??null),F(d?.id??null)})(b),children:[(0,b.jsx)(w.SelectTrigger,{className:"h-8 w-auto min-w-[120px]",children:(0,b.jsx)("span",{className:"truncate",children:a.find(a=>a.id===q)?.name??q})}),(0,b.jsx)(w.SelectContent,{children:a.map(a=>(0,b.jsx)(w.SelectItem,{value:a.id,children:a.name},a.id))})]}),E.length>0&&(0,b.jsxs)(w.Select,{value:t??"",onValueChange:a=>a&&void(a!==t&&(u(a),F(a))),children:[(0,b.jsx)(w.SelectTrigger,{className:"h-8 w-auto min-w-[140px]",children:(0,b.jsx)("span",{className:"truncate",children:(l=E.find(a=>a.id===t))?l.alias?`${l.name} (${l.alias})`:l.name:""})}),(0,b.jsx)(w.SelectContent,{children:E.map(a=>(0,b.jsxs)(w.SelectItem,{value:a.id,children:[a.name,a.alias?` (${a.alias})`:""]},a.id))})]}),(0,b.jsx)("div",{className:"ml-auto",children:(0,b.jsx)(x,{allWorkspaces:a,initialWsId:q,initialProjectId:t,onUploaded:a=>{a===t&&F(t)}})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-auto px-6 py-4",children:(0,b.jsxs)("div",{className:`relative ${n?"opacity-40 pointer-events-none":""} transition-opacity`,children:[n&&(0,b.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:(0,b.jsx)(d.Loader2,{className:"size-5 animate-spin text-muted-foreground"})}),0===E.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-16 text-center",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:m("assets.noProject")}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:m("assets.noProjectHint")})]}):(0,b.jsx)(r,{assets:v.map(a=>({...a,taskId:a.task?.id??null,taskTitle:a.task?.title??null})),onPreview:a=>{let b=a.mimeType?.startsWith("image/"),c=/\.(txt|md|json)$/i.test(a.filename);(b||c)&&H(a)},onReveal:J,onDelete:K,onTaskClick:B})]})}),(0,b.jsx)(z,{imageUrl:"image"===I&&G?p(G.path):null,filename:G?.filename??"",open:"image"===I,onOpenChange:a=>{a||H(null)}}),(0,b.jsx)(C,{url:"text"===I&&G?p(G.path):null,filename:G?.filename??"",open:"text"===I,onOpenChange:a=>{a||H(null)}}),(0,b.jsx)(V,{open:!!A,onOpenChange:a=>{a||B(null)},taskId:A})]})}],25422)}];
1
+ module.exports=[25422,a=>{"use strict";var b=a.i(858360),c=a.i(175391),d=a.i(109434),e=a.i(515205),f=a.i(584335),g=a.i(491310),h=a.i(879876);let i=(0,h.createServerReference)("4023e55fcbc73de4c49711b7198b753038ecf19f43",h.callServer,void 0,h.findSourceMapURL,"getProjectAssets");var j=a.i(986379),k=a.i(468518),l=a.i(161604),m=a.i(797896),n=a.i(569210),o=a.i(410756);function p(a){let b=a.match(/(?:^|\/)(?:storage|data)\/assets\/([^/]+)\/([^/]+)$/);return b?`/api/files/assets/${b[1]}/${b[2]}`:a}function q({asset:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g}){var h;let{t:i}=(0,f.useI18n)(),k=p(a.path),r=a.mimeType?.startsWith("image/");return(0,b.jsxs)("div",{className:"flex items-center gap-4 rounded-lg border border-border bg-card px-4 py-3 transition-colors hover:bg-accent/20",children:[(0,b.jsx)(o.Button,{variant:"ghost",onClick:()=>c(a),className:"flex-shrink-0 cursor-pointer p-0 h-auto",children:r?(0,b.jsx)("img",{src:k,alt:a.filename,className:"h-12 w-12 rounded object-cover border border-border"}):(0,b.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded border border-border bg-muted",children:(0,b.jsx)(l.FileText,{className:"h-6 w-6 text-muted-foreground"})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("p",{className:"truncate text-sm font-medium text-foreground",children:a.filename}),a.taskTitle&&a.taskId&&(0,b.jsx)(o.Button,{variant:"ghost",onClick:b=>{b.stopPropagation(),g?.(a.taskId)},className:"flex-shrink-0 bg-blue-500/10 text-blue-600 dark:text-blue-400 text-xs px-1.5 py-0.5 rounded cursor-pointer hover:bg-blue-500/20 transition-colors h-auto",children:a.taskTitle.length>20?`[任务: ${a.taskTitle.slice(0,20)}...]`:`[任务: ${a.taskTitle}]`})]}),a.description&&(0,b.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground truncate",children:a.description}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-3 text-xs text-muted-foreground",children:[(0,b.jsx)("span",{children:null===(h=a.size)?"-":h<1024?`${h} B`:h<1048576?`${(h/1024).toFixed(1)} KB`:h<0x40000000?`${(h/1048576).toFixed(1)} MB`:`${(h/0x40000000).toFixed(1)} GB`}),(0,b.jsx)("span",{children:new Date(a.createdAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0",children:[(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>c(a),className:"text-muted-foreground","aria-label":i("assets.preview"),children:(0,b.jsx)(m.Eye,{className:"h-4 w-4"})}),(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>d(a),className:"text-muted-foreground","aria-label":i("assets.revealInFinder"),children:(0,b.jsx)(j.FolderOpen,{className:"h-4 w-4"})}),(0,b.jsx)(o.Button,{variant:"ghost",size:"icon",onClick:()=>e(a.id),className:"text-muted-foreground hover:text-rose-400","aria-label":i("assets.delete"),children:(0,b.jsx)(n.Trash2,{className:"h-4 w-4"})})]})]})}function r({assets:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g}){let{t:h}=(0,f.useI18n)();return 0===a.length?(0,b.jsx)(k.EmptyState,{icon:j.FolderOpen,title:h("assets.empty"),description:h("assets.emptyHint")}):(0,b.jsx)("div",{className:"flex flex-col gap-3",children:a.map(a=>(0,b.jsx)(q,{asset:a,onPreview:c,onReveal:d,onDelete:e,onTaskClick:g},a.id))})}var s=a.i(208168),t=a.i(54709),u=a.i(300697),v=a.i(246962),w=a.i(224372);function x({allWorkspaces:a,initialWsId:d,initialProjectId:e,onUploaded:g}){let h,{t:i}=(0,f.useI18n)(),j=(0,c.useRef)(null),[k,l]=(0,c.useState)(!1),[m,n]=(0,c.useState)(!1),[p,q]=(0,c.useState)(null),[r,y]=(0,c.useState)(d),[z,A]=(0,c.useState)(e),[B,C]=(0,c.useState)(""),D=a.find(a=>a.id===r),E=D?.projects??[],F=()=>{l(!1),q(null),j.current&&(j.current.value="")},G=async()=>{if(p&&z){n(!0);try{let a=new FormData;a.append("file",p),a.append("projectId",z),a.append("description",B.trim()),await (0,u.uploadAsset)(a),g(z),F()}finally{n(!1)}}};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(o.Button,{onClick:()=>{y(d),A(e),q(null),C(""),l(!0)},className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,b.jsx)(s.Upload,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:i("assets.upload")})]}),k&&(0,b.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[(0,b.jsx)("div",{className:"absolute inset-0 bg-black/50",onClick:F}),(0,b.jsxs)("div",{className:"relative w-full max-w-md rounded-lg border border-border bg-card p-6 shadow-lg",children:[(0,b.jsx)(o.Button,{variant:"ghost",size:"icon-xs",onClick:F,className:"absolute right-3 top-3 text-muted-foreground",children:(0,b.jsx)(t.X,{className:"h-4 w-4"})}),(0,b.jsx)("h3",{className:"text-sm font-semibold text-foreground mb-4",children:i("assets.uploadTitle")}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.workspace")}),(0,b.jsxs)(w.Select,{value:r,onValueChange:b=>{var c;let d;return y(c=b??""),d=a.find(a=>a.id===c),void A(d?.projects[0]?.id??null)},children:[(0,b.jsx)(w.SelectTrigger,{className:"flex-1 text-xs",children:(0,b.jsx)("span",{className:"truncate",children:D?.name??r})}),(0,b.jsx)(w.SelectContent,{children:a.map(a=>(0,b.jsx)(w.SelectItem,{value:a.id,children:a.name},a.id))})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.project")}),E.length>0?(0,b.jsxs)(w.Select,{value:z??"",onValueChange:a=>A(a??""),children:[(0,b.jsx)(w.SelectTrigger,{className:"flex-1 text-xs",children:(0,b.jsx)("span",{className:"truncate",children:(h=E.find(a=>a.id===z))?h.alias?`${h.name} (${h.alias})`:h.name:z})}),(0,b.jsx)(w.SelectContent,{children:E.map(a=>{let c=a.alias?`${a.name} (${a.alias})`:a.name;return(0,b.jsx)(w.SelectItem,{value:a.id,children:c},a.id)})})]}):(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:i("assets.noProject")})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0",children:i("assets.file")}),(0,b.jsx)("input",{type:"file",ref:j,onChange:a=>{q(a.target.files?.[0]??null)},className:"hidden"}),(0,b.jsx)(o.Button,{variant:"outline",onClick:()=>{j.current?.click()},className:"flex-1 border-dashed bg-background px-3 py-2 text-xs text-muted-foreground hover:border-primary/50 hover:text-foreground transition-colors text-left justify-start",children:p?p.name:i("assets.selectFile")})]}),(0,b.jsxs)("div",{className:"flex items-start gap-3",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground w-16 shrink-0 pt-1.5",children:i("assets.description")}),(0,b.jsx)(v.Textarea,{value:B,onChange:a=>C(a.target.value),placeholder:i("assets.descriptionPlaceholder"),className:"flex-1 rounded-md border border-border bg-background px-3 py-2 text-xs text-foreground focus:outline-none focus:ring-1 focus:ring-ring resize-none h-20"})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 justify-end mt-6",children:[(0,b.jsx)(o.Button,{variant:"outline",onClick:F,children:i("notes.cancel")}),(0,b.jsx)(o.Button,{onClick:G,disabled:!p||!z||!B.trim()||m,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:i(m?"assets.uploading":"assets.upload")})]})]})]})]})}var y=a.i(857122);function z({imageUrl:a,filename:d,open:e,onOpenChange:f}){let[g,h]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{h(!1)},[e]),(0,b.jsx)(y.Dialog,{open:e,onOpenChange:f,children:(0,b.jsxs)(y.DialogContent,{showCloseButton:!1,className:"max-w-[90vw] max-h-[90vh] p-0 overflow-hidden bg-black/90 ring-0",children:[(0,b.jsx)(y.DialogClose,{render:(0,b.jsx)(o.Button,{variant:"ghost",className:"absolute top-2 right-2 z-10 h-8 w-8 p-0 text-white hover:bg-white/20 hover:text-white"}),"aria-label":"Close",children:(0,b.jsx)(t.X,{className:"h-4 w-4"})}),a&&(0,b.jsx)(b.Fragment,{children:g?(0,b.jsx)("div",{className:"overflow-auto max-w-[90vw] max-h-[90vh]",children:(0,b.jsx)("img",{src:a,alt:d,onClick:()=>h(!1),className:"w-auto h-auto max-w-none cursor-zoom-out"})}):(0,b.jsx)("img",{src:a,alt:d,onClick:()=>h(!0),className:"max-w-full max-h-[85vh] object-contain cursor-zoom-in mx-auto"})}),(0,b.jsx)("span",{className:"absolute bottom-2 left-3 text-xs text-white/70 truncate max-w-[60%]",children:d})]})})}var A=a.i(448709),B=a.i(238848);function C({url:a,filename:e,open:g,onOpenChange:h}){let{t:i}=(0,f.useI18n)(),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(null);(0,c.useEffect)(()=>{if(!g||!a){k(null),o(null);return}let b=!1;return m(!0),o(null),k(null),fetch(a).then(a=>{let b=a.headers.get("content-length");if(b&&parseInt(b,10)>1048576)throw Error("FILE_TOO_LARGE");return a.text()}).then(a=>{if(a.length>1048576)throw Error("FILE_TOO_LARGE");b||(k(a),m(!1))}).catch(a=>{b||(a instanceof Error&&"FILE_TOO_LARGE"===a.message?o(i("assets.fileTooLarge")):o(i("assets.previewError")),m(!1))}),()=>{b=!0}},[g,a,i]);let p=e.split(".").pop()?.toLowerCase();return(0,b.jsx)(y.Dialog,{open:g,onOpenChange:h,children:(0,b.jsxs)(y.DialogContent,{className:"max-w-3xl max-h-[80vh] flex flex-col",children:[(0,b.jsx)("h3",{className:"text-sm font-medium truncate px-4 pt-4",children:e}),(0,b.jsx)("div",{className:"flex-1 overflow-auto px-4 pb-4 pt-2",children:(()=>{if(l)return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center py-12 gap-2",children:[(0,b.jsx)(d.Loader2,{className:"size-5 animate-spin text-muted-foreground"}),(0,b.jsx)("span",{className:"text-xs text-muted-foreground",children:i("assets.loadingPreview")})]});if(n)return(0,b.jsx)("p",{className:"text-sm text-destructive",children:n});if(null===j)return null;if("md"===p)return(0,b.jsx)("div",{className:"prose prose-sm dark:prose-invert max-w-none",children:(0,b.jsx)(A.default,{remarkPlugins:[B.default],children:j})});if("json"===p){let a;try{a=JSON.stringify(JSON.parse(j),null,2)}catch{a=j}return(0,b.jsx)("pre",{className:"font-mono text-xs whitespace-pre-wrap text-foreground",children:a})}return(0,b.jsx)("pre",{className:"font-mono text-sm whitespace-pre-wrap text-foreground",children:j})})()})]})})}var D=a.i(207300),E=a.i(44585),F=a.i(468779);function G({...a}){return(0,b.jsx)(D.Dialog.Root,{"data-slot":"sheet",...a})}function H({...a}){return(0,b.jsx)(D.Dialog.Portal,{"data-slot":"sheet-portal",...a})}function I({className:a,...c}){return(0,b.jsx)(D.Dialog.Backdrop,{"data-slot":"sheet-overlay",className:(0,E.cn)("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",a),...c})}function J({className:a,children:c,side:d="right",showCloseButton:e=!0,...f}){return(0,b.jsxs)(H,{children:[(0,b.jsx)(I,{}),(0,b.jsxs)(D.Dialog.Popup,{"data-slot":"sheet-content","data-side":d,className:(0,E.cn)("fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",a),...f,children:[c,e&&(0,b.jsxs)(D.Dialog.Close,{"data-slot":"sheet-close",render:(0,b.jsx)(o.Button,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[(0,b.jsx)(F.XIcon,{}),(0,b.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function K({className:a,...c}){return(0,b.jsx)("div",{"data-slot":"sheet-header",className:(0,E.cn)("flex flex-col gap-0.5 p-4",a),...c})}function L({className:a,...c}){return(0,b.jsx)(D.Dialog.Title,{"data-slot":"sheet-title",className:(0,E.cn)("font-heading text-base font-medium text-foreground",a),...c})}function M({className:a,...c}){return(0,b.jsx)(D.Dialog.Description,{"data-slot":"sheet-description",className:(0,E.cn)("text-sm text-muted-foreground",a),...c})}var N=a.i(358440),O=a.i(48300);let P=(0,h.createServerReference)("408bb641755358e099b0f600083d554bdece767654",h.callServer,void 0,h.findSourceMapURL,"getTaskOverview");var Q=a.i(113620),R=a.i(302856);let S=(0,R.default)("calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]),T=(0,R.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var U=a.i(236345);function V({open:a,onOpenChange:d,taskId:e}){let{t:g}=(0,f.useI18n)(),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useTransition)();(0,c.useEffect)(()=>{e&&a?k(async()=>{let a=await P(e);a&&i(a)}):i(null)},[e,a]);let l=h?Q.BOARD_COLUMNS.find(a=>a.id===h.status):null,m=h?Q.PRIORITY_CONFIG[h.priority]:null,n=h?.executions?.[0]??null;return(0,b.jsx)(G,{open:a,onOpenChange:d,children:(0,b.jsxs)(J,{side:"right",className:"w-[380px] sm:max-w-[380px] p-0",children:[(0,b.jsxs)(K,{className:"px-4 pt-4 pb-3 border-b border-border",children:[(0,b.jsx)(L,{className:"text-base font-semibold leading-tight pr-8",children:h?.title??""}),(0,b.jsx)(M,{className:"sr-only",children:g("taskDrawer.title")}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-2 mt-2",children:[l&&(0,b.jsxs)(O.Badge,{variant:"secondary",className:"text-xs",children:[(0,b.jsx)("span",{className:`inline-block w-2 h-2 rounded-full mr-1.5 ${l.color}`}),l.label]}),m&&(0,b.jsx)(O.Badge,{variant:"secondary",className:`text-xs ${m.color}`,children:m.label})]})]}),(0,b.jsx)(N.ScrollArea,{className:"flex-1 h-[calc(100%-80px)]",children:j&&!h?(0,b.jsx)("div",{className:"flex items-center justify-center h-32 text-sm text-muted-foreground",children:g("assets.loading")}):h?(0,b.jsxs)("div",{className:"p-4 space-y-4",children:[(0,b.jsxs)("section",{children:[(0,b.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1",children:g("taskDrawer.description")}),(0,b.jsx)("p",{className:"text-sm text-foreground whitespace-pre-wrap",children:h.description||g("taskDrawer.noDescription")})]}),h.labels.length>0&&(0,b.jsxs)("section",{children:[(0,b.jsx)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5",children:g("taskDrawer.labels")}),(0,b.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.labels.map(a=>(0,b.jsx)(O.Badge,{variant:"secondary",className:"text-xs",style:{backgroundColor:`${a.label.color}20`,color:a.label.color,borderColor:`${a.label.color}40`},children:a.label.name},a.label.id))})]}),(0,b.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(S,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:g("taskDrawer.createdAt")}),(0,b.jsx)("span",{className:"text-foreground",children:new Date(h.createdAt).toLocaleDateString()})]}),(0,b.jsxs)("section",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(T,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:g("taskDrawer.resources")}),(0,b.jsx)("span",{className:"text-foreground",children:h._count.assets})]}),(0,b.jsxs)("section",{children:[(0,b.jsxs)("h4",{className:"text-xs font-medium text-muted-foreground mb-1.5 flex items-center gap-1.5",children:[(0,b.jsx)(U.PlayCircle,{className:"h-3.5 w-3.5"}),g("taskDrawer.lastExecution")]}),n?(0,b.jsxs)("div",{className:"rounded-md border border-border p-2.5 text-sm",children:[(0,b.jsx)(O.Badge,{variant:"secondary",className:"text-xs mb-1.5",children:n.status}),n.summary&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground line-clamp-4",children:n.summary.slice(0,200)})]}):(0,b.jsx)("p",{className:"text-xs text-muted-foreground",children:g("taskDrawer.noExecution")})]})]}):null})]})})}var W=a.i(942308);a.s(["AssetsPageClient",0,function({allWorkspaces:a,initialWorkspaceId:h,initialProjectId:j,initialAssets:k}){let l,{t:m}=(0,f.useI18n)(),[n,o]=(0,c.useTransition)(),[q,s]=(0,c.useState)(h),[t,u]=(0,c.useState)(j),[v,y]=(0,c.useState)(k),[A,B]=(0,c.useState)(null),D=a.find(a=>a.id===q),E=D?.projects??[],F=(0,c.useCallback)(a=>{a?o(async()=>{y(await i(a))}):y([])},[o]),[G,H]=(0,c.useState)(null),I=G?G.mimeType?.startsWith("image/")?"image":/\.(txt|md|json)$/i.test(G.filename)?"text":null:null,J=async a=>{try{let b=await fetch("/api/internal/assets/reveal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a.path})});if(!b.ok){let a=await b.json().catch(()=>({}));W.toast.error(a.error||"Failed to reveal file")}}catch{W.toast.error("Failed to reveal file")}},K=async a=>{let b=v.find(b=>b.id===a);confirm(m("assets.deleteConfirm",{filename:b?.filename??a}))&&(await (0,g.deleteAsset)(a),F(t))};return(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsx)(e.SubPageNav,{workspaceId:q}),(0,b.jsxs)("div",{className:"header-sm flex items-center gap-3 px-6 py-2",children:[(0,b.jsxs)(w.Select,{value:q,onValueChange:b=>b&&(b=>{if(b===q)return;s(b);let c=a.find(a=>a.id===b),d=c?.projects[0]??null;u(d?.id??null),F(d?.id??null)})(b),children:[(0,b.jsx)(w.SelectTrigger,{className:"h-8 w-auto min-w-[120px]",children:(0,b.jsx)("span",{className:"truncate",children:a.find(a=>a.id===q)?.name??q})}),(0,b.jsx)(w.SelectContent,{children:a.map(a=>(0,b.jsx)(w.SelectItem,{value:a.id,children:a.name},a.id))})]}),E.length>0&&(0,b.jsxs)(w.Select,{value:t??"",onValueChange:a=>a&&void(a!==t&&(u(a),F(a))),children:[(0,b.jsx)(w.SelectTrigger,{className:"h-8 w-auto min-w-[140px]",children:(0,b.jsx)("span",{className:"truncate",children:(l=E.find(a=>a.id===t))?l.alias?`${l.name} (${l.alias})`:l.name:""})}),(0,b.jsx)(w.SelectContent,{children:E.map(a=>(0,b.jsxs)(w.SelectItem,{value:a.id,children:[a.name,a.alias?` (${a.alias})`:""]},a.id))})]}),(0,b.jsx)("div",{className:"ml-auto",children:(0,b.jsx)(x,{allWorkspaces:a,initialWsId:q,initialProjectId:t,onUploaded:a=>{a===t&&F(t)}})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-auto px-6 py-4",children:(0,b.jsxs)("div",{className:`relative ${n?"opacity-40 pointer-events-none":""} transition-opacity`,children:[n&&(0,b.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:(0,b.jsx)(d.Loader2,{className:"size-5 animate-spin text-muted-foreground"})}),0===E.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-16 text-center",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:m("assets.noProject")}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:m("assets.noProjectHint")})]}):(0,b.jsx)(r,{assets:v.map(a=>({...a,taskId:a.task?.id??null,taskTitle:a.task?.title??null})),onPreview:a=>{let b=a.mimeType?.startsWith("image/"),c=/\.(txt|md|json)$/i.test(a.filename);(b||c)&&H(a)},onReveal:J,onDelete:K,onTaskClick:B})]})}),(0,b.jsx)(z,{imageUrl:"image"===I&&G?p(G.path):null,filename:G?.filename??"",open:"image"===I,onOpenChange:a=>{a||H(null)}}),(0,b.jsx)(C,{url:"text"===I&&G?p(G.path):null,filename:G?.filename??"",open:"text"===I,onOpenChange:a=>{a||H(null)}}),(0,b.jsx)(V,{open:!!A,onOpenChange:a=>{a||B(null)},taskId:A})]})}],25422)}];
2
2
 
3
3
  //# sourceMappingURL=0y0r_f_tower_src_app_workspaces_%5BworkspaceId%5D_assets_assets-page-client_tsx_0n4g3bn._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[31665,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},655315,(a,b,c)=>{b.exports=a.x("@prisma/client-ac1b8067b36ef9d3",()=>require("@prisma/client-ac1b8067b36ef9d3"))},832116,a=>{"use strict";var b=a.i(655315);let c=globalThis.prisma??new b.PrismaClient({log:[]});process.on("SIGTERM",()=>{c.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{c.$disconnect().catch(()=>{})}),a.s(["db",0,c])},6938,a=>{"use strict";function b(a,b,c,d){let e=new Date().toISOString(),f=`[${e}] ${a.toUpperCase()} [${b}] ${c}`;return d&&Object.keys(d).length>0?`${f} ${JSON.stringify(d)}`:f}a.s(["logger",0,{create:function(a){return{info(c,d){console.log(b("info",a,c,d))},warn(c,d){console.warn(b("warn",a,c,d))},error(c,d,e){console.error(b("error",a,c,d instanceof Error?{...e,error:d.message,stack:d.stack}:{...e,error:String(d)}))}}},info(a,c){console.log(b("info","app",a,c))},warn(a,c){console.warn(b("warn","app",a,c))},error(a,c,d){console.error(b("error","app",a,c instanceof Error?{...d,error:c.message,stack:c.stack}:{...d,error:String(c)}))}}])},541587,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(6938),f=a.i(632919);let g=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function h(){let a=await c.db.systemConfig.findMany({where:{key:{in:[...g]}}}),b={};for(let c of a)try{b[c.key]=JSON.parse(c.value)}catch{b[c.key]=null}let d=!0===b["onboarding.completed"],e=b["onboarding.lastStep"],f=b["onboarding.username"];return{isFirstRun:!d,isCompleted:d,lastStep:"number"==typeof e?e:0,username:"string"==typeof f&&f.length>0?f:null}}async function i(a){await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(a)},update:{value:JSON.stringify(a)}}),(0,d.revalidatePath)("/","layout")}async function j(a){if(await c.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:"2"},update:{value:"2"}}),void 0!==a){let b=a.trim().slice(0,64).replace(/[\r\n]/g," ");b.length>0&&await c.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(b)},update:{value:JSON.stringify(b)}})}(0,d.revalidatePath)("/","layout")}async function k(b){try{e.logger.create("task-completion").info("Task completion event dispatched",{taskId:b.taskId,taskTitle:b.taskTitle,status:b.status,executionId:b.executionId});let{broadcastNotification:c}=await a.A(563647);c({...b,type:"completion"})}catch{}}(0,f.ensureServerEntryExports)([h,i,j,k]),(0,b.registerServerReference)(h,"0088720ea6f78a7d440f0ffe918e2017c6ed4a091c",null),(0,b.registerServerReference)(i,"40556e416c26c7e086bc6c0026b4f12eee10ce659c",null),(0,b.registerServerReference)(j,"4008da5fb2e740b1e3c6df4ff7e170a1140d107426",null),(0,b.registerServerReference)(k,"408abee9d22d9054dd5a6ecc32b0c3daa69ef66c6e",null),a.s(["completeOnboarding",0,j,"dispatchTaskCompletionEvent",0,k,"getOnboardingStatus",0,h,"setOnboardingProgress",0,i])},589578,a=>{a.v({className:"geist_a71539c9-module__T19VSG__className",variable:"geist_a71539c9-module__T19VSG__variable"})},435214,a=>{a.v({className:"geist_mono_8d43a2aa-module__8Li5zG__className",variable:"geist_mono_8d43a2aa-module__8Li5zG__variable"})},682231,a=>{"use strict";a.s(["Tooltip",()=>c,"TooltipContent",()=>d,"TooltipProvider",()=>e,"TooltipTrigger",()=>f]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tooltip() from the server but Tooltip is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","Tooltip"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipContent() from the server but TooltipContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipProvider() from the server but TooltipProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipProvider"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipTrigger() from the server but TooltipTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipTrigger")},631413,a=>{"use strict";a.s(["Tooltip",()=>c,"TooltipContent",()=>d,"TooltipProvider",()=>e,"TooltipTrigger",()=>f]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tooltip() from the server but Tooltip is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","Tooltip"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipContent() from the server but TooltipContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipProvider() from the server but TooltipProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipProvider"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipTrigger() from the server but TooltipTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipTrigger")},300623,a=>{"use strict";a.i(682231);var b=a.i(631413);a.n(b)},101632,a=>{"use strict";a.s(["LayoutClient",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call LayoutClient() from the server but LayoutClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/layout/layout-client.tsx <module evaluation>","LayoutClient")},284269,a=>{"use strict";a.s(["LayoutClient",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call LayoutClient() from the server but LayoutClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/layout/layout-client.tsx","LayoutClient")},845535,a=>{"use strict";a.i(101632);var b=a.i(284269);a.n(b)},491389,a=>{"use strict";a.s(["I18nProvider",()=>c,"useI18n",()=>d]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx <module evaluation>","I18nProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useI18n() from the server but useI18n is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx <module evaluation>","useI18n")},670088,a=>{"use strict";a.s(["I18nProvider",()=>c,"useI18n",()=>d]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx","I18nProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useI18n() from the server but useI18n is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx","useI18n")},353521,a=>{"use strict";a.i(491389);var b=a.i(670088);a.n(b)},64825,a=>{"use strict";a.s(["ThemeProvider",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/providers/theme-provider.tsx <module evaluation>","ThemeProvider")},907347,a=>{"use strict";a.s(["ThemeProvider",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/providers/theme-provider.tsx","ThemeProvider")},581875,a=>{"use strict";a.i(64825);var b=a.i(907347);a.n(b)},575729,a=>{"use strict";a.s(["Toaster",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call Toaster() from the server but Toaster is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/sonner.tsx <module evaluation>","Toaster")},186682,a=>{"use strict";a.s(["Toaster",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call Toaster() from the server but Toaster is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/sonner.tsx","Toaster")},267251,a=>{"use strict";a.i(575729);var b=a.i(186682);a.n(b)},665011,a=>{"use strict";var b=a.i(946116),c=a.i(589578);let d={className:c.default.className,style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"}};null!=c.default.variable&&(d.variable=c.default.variable);var e=a.i(435214);let f={className:e.default.className,style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"}};null!=e.default.variable&&(f.variable=e.default.variable);var g=a.i(300623),h=a.i(845535),i=a.i(353521),j=a.i(581875),k=a.i(267251),l=a.i(832116),m=a.i(541587);async function n({children:a}){let[c,e]=await Promise.all([l.db.workspace.findMany({orderBy:{updatedAt:"desc"},select:{id:!0,name:!0,description:!0,updatedAt:!0}}),(0,m.getOnboardingStatus)()]);return(0,b.jsxs)("html",{lang:"zh-CN",suppressHydrationWarning:!0,children:[(0,b.jsxs)("head",{children:[(0,b.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,b.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,b.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&family=JetBrains+Mono:wght@400;500;600&display=swap",rel:"stylesheet"})]}),(0,b.jsx)("body",{className:`${d.variable} ${f.variable} antialiased`,children:(0,b.jsx)(j.ThemeProvider,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:(0,b.jsx)(g.TooltipProvider,{children:(0,b.jsxs)(i.I18nProvider,{children:[(0,b.jsx)(h.LayoutClient,{workspaces:c,isFirstRun:e.isFirstRun,username:e.username,children:a}),(0,b.jsx)(k.Toaster,{richColors:!0,position:"top-right"})]})})})})]})}a.s(["default",0,n,"metadata",0,{title:"AI Task Platform - Tower",description:"AI task orchestration and multi-project management platform"}],665011)},442674,a=>{a.n(a.i(665011))},563647,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0hiekzn._.js"].map(b=>a.l(b))).then(()=>b(155482)))}];
1
+ module.exports=[31665,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},655315,(a,b,c)=>{b.exports=a.x("@prisma/client-ac1b8067b36ef9d3",()=>require("@prisma/client-ac1b8067b36ef9d3"))},832116,a=>{"use strict";var b=a.i(655315);let c=globalThis.prisma??new b.PrismaClient({log:[]});process.on("SIGTERM",()=>{c.$disconnect().catch(()=>{})}),process.on("SIGINT",()=>{c.$disconnect().catch(()=>{})}),a.s(["db",0,c])},6938,a=>{"use strict";function b(a,b,c,d){let e=new Date().toISOString(),f=`[${e}] ${a.toUpperCase()} [${b}] ${c}`;return d&&Object.keys(d).length>0?`${f} ${JSON.stringify(d)}`:f}a.s(["logger",0,{create:function(a){return{info(c,d){console.log(b("info",a,c,d))},warn(c,d){console.warn(b("warn",a,c,d))},error(c,d,e){console.error(b("error",a,c,d instanceof Error?{...e,error:d.message,stack:d.stack}:{...e,error:String(d)}))}}},info(a,c){console.log(b("info","app",a,c))},warn(a,c){console.warn(b("warn","app",a,c))},error(a,c,d){console.error(b("error","app",a,c instanceof Error?{...d,error:c.message,stack:c.stack}:{...d,error:String(c)}))}}])},541587,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(6938),f=a.i(632919);let g=["onboarding.completed","onboarding.lastStep","onboarding.username"];async function h(){let a=await c.db.systemConfig.findMany({where:{key:{in:[...g]}}}),b={};for(let c of a)try{b[c.key]=JSON.parse(c.value)}catch{b[c.key]=null}let d=!0===b["onboarding.completed"],e=b["onboarding.lastStep"],f=b["onboarding.username"];return{isFirstRun:!d,isCompleted:d,lastStep:"number"==typeof e?e:0,username:"string"==typeof f&&f.length>0?f:null}}async function i(a){await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:JSON.stringify(a)},update:{value:JSON.stringify(a)}}),(0,d.revalidatePath)("/","layout")}async function j(a){if(await c.db.systemConfig.upsert({where:{key:"onboarding.completed"},create:{key:"onboarding.completed",value:"true"},update:{value:"true"}}),await c.db.systemConfig.upsert({where:{key:"onboarding.lastStep"},create:{key:"onboarding.lastStep",value:"2"},update:{value:"2"}}),void 0!==a){let b=a.trim().slice(0,64).replace(/[\r\n]/g," ");b.length>0&&await c.db.systemConfig.upsert({where:{key:"onboarding.username"},create:{key:"onboarding.username",value:JSON.stringify(b)},update:{value:JSON.stringify(b)}})}(0,d.revalidatePath)("/","layout")}async function k(b){try{e.logger.create("task-completion").info("Task completion event dispatched",{taskId:b.taskId,taskTitle:b.taskTitle,status:b.status,executionId:b.executionId});let{broadcastNotification:c}=await a.A(563647);c({...b,type:"completion"})}catch{}}(0,f.ensureServerEntryExports)([h,i,j,k]),(0,b.registerServerReference)(h,"00f7de3735ec23dbbe02b347b3b27fe3293c72dd51",null),(0,b.registerServerReference)(i,"406d0755627b7578b91d776cec0fe19e1bb6bfc1e3",null),(0,b.registerServerReference)(j,"405e24a96c3040b977262f38c5e06b74894259e0be",null),(0,b.registerServerReference)(k,"4002a489b8ddf18fe0011eb46ac0739ec3e093a5bf",null),a.s(["completeOnboarding",0,j,"dispatchTaskCompletionEvent",0,k,"getOnboardingStatus",0,h,"setOnboardingProgress",0,i])},589578,a=>{a.v({className:"geist_a71539c9-module__T19VSG__className",variable:"geist_a71539c9-module__T19VSG__variable"})},435214,a=>{a.v({className:"geist_mono_8d43a2aa-module__8Li5zG__className",variable:"geist_mono_8d43a2aa-module__8Li5zG__variable"})},682231,a=>{"use strict";a.s(["Tooltip",()=>c,"TooltipContent",()=>d,"TooltipProvider",()=>e,"TooltipTrigger",()=>f]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tooltip() from the server but Tooltip is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","Tooltip"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipContent() from the server but TooltipContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipProvider() from the server but TooltipProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipProvider"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipTrigger() from the server but TooltipTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx <module evaluation>","TooltipTrigger")},631413,a=>{"use strict";a.s(["Tooltip",()=>c,"TooltipContent",()=>d,"TooltipProvider",()=>e,"TooltipTrigger",()=>f]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call Tooltip() from the server but Tooltip is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","Tooltip"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipContent() from the server but TooltipContent is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipContent"),e=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipProvider() from the server but TooltipProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipProvider"),f=(0,b.registerClientReference)(function(){throw Error("Attempted to call TooltipTrigger() from the server but TooltipTrigger is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/tooltip.tsx","TooltipTrigger")},300623,a=>{"use strict";a.i(682231);var b=a.i(631413);a.n(b)},101632,a=>{"use strict";a.s(["LayoutClient",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call LayoutClient() from the server but LayoutClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/layout/layout-client.tsx <module evaluation>","LayoutClient")},284269,a=>{"use strict";a.s(["LayoutClient",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call LayoutClient() from the server but LayoutClient is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/layout/layout-client.tsx","LayoutClient")},845535,a=>{"use strict";a.i(101632);var b=a.i(284269);a.n(b)},491389,a=>{"use strict";a.s(["I18nProvider",()=>c,"useI18n",()=>d]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx <module evaluation>","I18nProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useI18n() from the server but useI18n is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx <module evaluation>","useI18n")},670088,a=>{"use strict";a.s(["I18nProvider",()=>c,"useI18n",()=>d]);var b=a.i(383756);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call I18nProvider() from the server but I18nProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx","I18nProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useI18n() from the server but useI18n is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/lib/i18n.tsx","useI18n")},353521,a=>{"use strict";a.i(491389);var b=a.i(670088);a.n(b)},64825,a=>{"use strict";a.s(["ThemeProvider",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/providers/theme-provider.tsx <module evaluation>","ThemeProvider")},907347,a=>{"use strict";a.s(["ThemeProvider",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/providers/theme-provider.tsx","ThemeProvider")},581875,a=>{"use strict";a.i(64825);var b=a.i(907347);a.n(b)},575729,a=>{"use strict";a.s(["Toaster",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call Toaster() from the server but Toaster is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/sonner.tsx <module evaluation>","Toaster")},186682,a=>{"use strict";a.s(["Toaster",()=>b]);let b=(0,a.i(383756).registerClientReference)(function(){throw Error("Attempted to call Toaster() from the server but Toaster is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/project/f/tower/src/components/ui/sonner.tsx","Toaster")},267251,a=>{"use strict";a.i(575729);var b=a.i(186682);a.n(b)},665011,a=>{"use strict";var b=a.i(946116),c=a.i(589578);let d={className:c.default.className,style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"}};null!=c.default.variable&&(d.variable=c.default.variable);var e=a.i(435214);let f={className:e.default.className,style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"}};null!=e.default.variable&&(f.variable=e.default.variable);var g=a.i(300623),h=a.i(845535),i=a.i(353521),j=a.i(581875),k=a.i(267251),l=a.i(832116),m=a.i(541587);async function n({children:a}){let[c,e]=await Promise.all([l.db.workspace.findMany({orderBy:{updatedAt:"desc"},select:{id:!0,name:!0,description:!0,updatedAt:!0}}),(0,m.getOnboardingStatus)()]);return(0,b.jsxs)("html",{lang:"zh-CN",suppressHydrationWarning:!0,children:[(0,b.jsxs)("head",{children:[(0,b.jsx)("link",{rel:"preconnect",href:"https://fonts.googleapis.com"}),(0,b.jsx)("link",{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),(0,b.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&family=JetBrains+Mono:wght@400;500;600&display=swap",rel:"stylesheet"})]}),(0,b.jsx)("body",{className:`${d.variable} ${f.variable} antialiased`,children:(0,b.jsx)(j.ThemeProvider,{attribute:"class",defaultTheme:"system",enableSystem:!0,children:(0,b.jsx)(g.TooltipProvider,{children:(0,b.jsxs)(i.I18nProvider,{children:[(0,b.jsx)(h.LayoutClient,{workspaces:c,isFirstRun:e.isFirstRun,username:e.username,children:a}),(0,b.jsx)(k.Toaster,{richColors:!0,position:"top-right"})]})})})})]})}a.s(["default",0,n,"metadata",0,{title:"AI Task Platform - Tower",description:"AI task orchestration and multi-project management platform"}],665011)},442674,a=>{a.n(a.i(665011))},563647,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0hiekzn._.js"].map(b=>a.l(b))).then(()=>b(155482)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__06qzctf._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},515205,a=>{"use strict";var b=a.i(858360),c=a.i(759985),d=a.i(448287),e=a.i(59711),f=a.i(161604),g=a.i(986379),h=a.i(14180),i=a.i(584335);let j=[{key:"notes",icon:f.FileText},{key:"assets",icon:g.FolderOpen},{key:"archive",icon:h.Archive}];a.s(["SubPageNav",0,function({workspaceId:a}){let{t:f}=(0,i.useI18n)(),g=(0,d.usePathname)(),h=j.find(a=>g.includes(`/${a.key}`))?.key;return(0,b.jsxs)("div",{className:"header-sm flex items-center gap-1 px-4 py-2",children:[(0,b.jsxs)(c.default,{href:`/workspaces/${a}`,className:"mr-2 flex items-center gap-1.5 rounded-md px-2 py-1.5 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",children:[(0,b.jsx)(e.ArrowLeft,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:f("archive.backToBoard")})]}),(0,b.jsx)("span",{className:"mr-2 h-4 w-px bg-border"}),j.map(d=>{let e=d.icon,g=h===d.key;return(0,b.jsxs)(c.default,{href:`/workspaces/${a}/${d.key}`,className:`flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors ${g?"bg-accent text-foreground":"text-muted-foreground hover:bg-accent/50 hover:text-foreground"}`,children:[(0,b.jsx)(e,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:f(`sidebar.${d.key}`)})]},d.key)})]})}])},59711,a=>{"use strict";let b=(0,a.i(302856).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);a.s(["ArrowLeft",0,b],59711)},468518,a=>{"use strict";var b=a.i(858360),c=a.i(44585);a.s(["EmptyState",0,function({icon:a,title:d,description:e,action:f,className:g}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex h-48 flex-col items-center justify-center gap-2 text-center",g),children:[a&&(0,b.jsx)(a,{className:"h-10 w-10 text-muted-foreground/40"}),(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:d}),e&&(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:e}),f&&(0,b.jsx)("div",{className:"mt-2",children:f})]})}])},113620,a=>{"use strict";a.s(["BOARD_COLUMNS",0,[{id:"TODO",label:"To Do",color:"bg-slate-400"},{id:"IN_PROGRESS",label:"In Progress",color:"bg-amber-400"},{id:"IN_REVIEW",label:"In Review",color:"bg-sky-400"},{id:"DONE",label:"Done",color:"bg-emerald-400"},{id:"CANCELLED",label:"Cancelled",color:"bg-rose-400"}],"NOTE_CATEGORIES_PRESET",0,["账号","环境","需求","备忘"],"PRIORITY_CONFIG",0,{LOW:{label:"低",color:"bg-slate-500/20 text-slate-300 border border-slate-500/30"},MEDIUM:{label:"中",color:"bg-amber-500/20 text-amber-300 border border-amber-500/30"},HIGH:{label:"高",color:"bg-orange-500/20 text-orange-300 border border-orange-500/30"},CRITICAL:{label:"紧急",color:"bg-rose-500/20 text-rose-300 border border-rose-500/30"}},"TOWER_LABEL_NAME",0,"Tower"])},668177,790004,a=>{"use strict";var b=a.i(879876);let c=(0,b.createServerReference)("40940832d36497429d52382d540b1bf916483d4ff0",b.callServer,void 0,b.findSourceMapURL,"createNote");a.s(["createNote",0,c],668177);let d=(0,b.createServerReference)("401c6f7273a2bd99db85bd7b590adde9bc449d70ea",b.callServer,void 0,b.findSourceMapURL,"deleteNote");a.s(["deleteNote",0,d],790004)},25226,a=>{"use strict";var b=a.i(858360),c=a.i(175391),d=a.i(263973),e=a.i(109434),f=a.i(515205),g=a.i(584335),h=a.i(113620),i=a.i(668177),j=a.i(879876);let k=(0,j.createServerReference)("60fd07387627fb28024e08245f24cc8cd18347f5cb",j.callServer,void 0,j.findSourceMapURL,"updateNote");var l=a.i(790004);let m=(0,j.createServerReference)("606a92319e6dd1574993c46e3d1c683e6e8b915cb7",j.callServer,void 0,j.findSourceMapURL,"getProjectNotes");var n=a.i(44585);function o({active:a,onSelect:c}){let{t:d}=(0,g.useI18n)();return(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[(0,b.jsx)("button",{onClick:()=>c("all"),className:(0,n.cn)("rounded-lg px-3 py-1 text-xs font-medium transition-colors","all"===a?"bg-primary/15 text-primary ring-1 ring-primary/20":"text-muted-foreground hover:bg-accent"),children:d("notes.allCategories")}),h.NOTE_CATEGORIES_PRESET.map(d=>(0,b.jsx)("button",{onClick:()=>c(d),className:(0,n.cn)("rounded-lg px-3 py-1 text-xs font-medium transition-colors",a===d?"bg-primary/15 text-primary ring-1 ring-primary/20":"text-muted-foreground hover:bg-accent"),children:d},d))]})}var p=a.i(410756),q=a.i(224372),r=a.i(161604),s=a.i(468518),t=a.i(94202),u=a.i(569210),v=a.i(448709),w=a.i(238848);function x({note:a,onEdit:c,onDelete:d}){let{t:e}=(0,g.useI18n)(),f=a.content.slice(0,300);return(0,b.jsxs)("div",{className:"group relative rounded-lg border border-border bg-card p-4 transition-colors hover:border-border/80 hover:bg-accent/20",children:[(0,b.jsxs)("div",{className:"absolute right-3 top-3 flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",children:[(0,b.jsx)(p.Button,{variant:"ghost",size:"icon-sm",onClick:()=>c(a),className:"text-muted-foreground","aria-label":e("notes.edit"),children:(0,b.jsx)(t.Pencil,{className:"h-3.5 w-3.5"})}),(0,b.jsx)(p.Button,{variant:"ghost",size:"icon-sm",onClick:()=>d(a.id),className:"text-muted-foreground hover:text-rose-400","aria-label":e("notes.delete"),children:(0,b.jsx)(u.Trash2,{className:"h-3.5 w-3.5"})})]}),(0,b.jsx)("div",{className:"mb-2 pr-16",children:(0,b.jsx)("h3",{className:"truncate text-sm font-semibold text-foreground",children:a.title})}),(0,b.jsx)("span",{className:"mb-3 inline-block rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground",children:a.category}),(0,b.jsx)("div",{className:"prose prose-sm dark:prose-invert max-h-24 overflow-hidden text-muted-foreground",children:(0,b.jsx)(v.default,{remarkPlugins:[w.default],children:f})})]})}function y({notes:a,onEdit:c,onDelete:d}){let{t:e}=(0,g.useI18n)();return 0===a.length?(0,b.jsx)(s.EmptyState,{icon:r.FileText,title:e("notes.empty"),description:e("notes.emptyHint")}):(0,b.jsx)("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:a.map(a=>(0,b.jsx)(x,{note:a,onEdit:c,onDelete:d},a.id))})}var z=a.i(246962);function A({value:a,onChange:c}){return(0,b.jsxs)("div",{className:"relative grid grid-cols-2 gap-4 flex-1 min-h-64",children:[(0,b.jsx)(z.Textarea,{value:a,onChange:a=>c(a.target.value),className:"absolute inset-0 w-1/2 pr-2 resize-none font-mono text-sm border rounded-md p-3 bg-background text-foreground border-border focus:outline-none focus:ring-1 focus:ring-ring",placeholder:"Write Markdown here..."}),(0,b.jsx)("div",{className:"absolute inset-0 left-1/2 pl-2",children:(0,b.jsx)("div",{className:"h-full overflow-y-auto border rounded-md p-3 border-border prose prose-sm dark:prose-invert max-w-none",children:(0,b.jsx)(v.default,{remarkPlugins:[w.default],children:a})})})]})}a.s(["NotesPageClient",0,function({allWorkspaces:a,initialWorkspaceId:j,initialProjectId:n,initialNotes:r}){let s,t,{t:u}=(0,g.useI18n)(),[v,w]=(0,c.useTransition)(),[x,z]=(0,c.useState)(j),[B,C]=(0,c.useState)(n),[D,E]=(0,c.useState)(r),[F,G]=(0,c.useState)("all"),[H,I]=(0,c.useState)(null),[J,K]=(0,c.useState)(!1),[L,M]=(0,c.useState)(""),[N,O]=(0,c.useState)(""),[P,Q]=(0,c.useState)(h.NOTE_CATEGORIES_PRESET[3]),[R,S]=(0,c.useState)(j),[T,U]=(0,c.useState)(n),V=a.find(a=>a.id===x),W=V?.projects??[],X=a.find(a=>a.id===R),Y=X?.projects??[],Z=(0,c.useCallback)(a=>{a?w(async()=>{E(await m(a))}):E([])},[w]),$=async()=>{T&&L.trim()&&(await (0,i.createNote)({title:L.trim(),content:N,category:P,projectId:T}),K(!1),T===B&&Z(B))},_=async()=>{H&&L.trim()&&(await k(H.id,{title:L.trim(),content:N,category:P}),I(null),Z(B))},aa=async a=>{let b=D.find(b=>b.id===a);!b||confirm(u("notes.deleteConfirm",{title:b.title}))&&(await (0,l.deleteNote)(a),Z(B))},ab="all"===F?D.map(a=>({...a,updatedAt:new Date(a.updatedAt)})):D.filter(a=>a.category===F).map(a=>({...a,updatedAt:new Date(a.updatedAt)})),ac=J||null!==H;return(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsx)(f.SubPageNav,{workspaceId:x}),(0,b.jsxs)("div",{className:"header-sm flex items-center gap-3 px-6 py-2",children:[(0,b.jsxs)(q.Select,{value:x,onValueChange:b=>b&&(b=>{if(b===x)return;z(b);let c=a.find(a=>a.id===b),d=c?.projects[0]??null;C(d?.id??null),G("all"),Z(d?.id??null)})(b),children:[(0,b.jsx)(q.SelectTrigger,{className:"h-8 w-auto min-w-[120px]",children:(0,b.jsx)("span",{className:"truncate",children:a.find(a=>a.id===x)?.name??x})}),(0,b.jsx)(q.SelectContent,{children:a.map(a=>(0,b.jsx)(q.SelectItem,{value:a.id,children:a.name},a.id))})]}),W.length>0&&(0,b.jsxs)(q.Select,{value:B??"",onValueChange:a=>a&&void(a!==B&&(C(a),G("all"),Z(a))),children:[(0,b.jsx)(q.SelectTrigger,{className:"h-8 w-auto min-w-[140px]",children:(0,b.jsx)("span",{className:"truncate",children:(s=W.find(a=>a.id===B))?s.alias?`${s.name} (${s.alias})`:s.name:""})}),(0,b.jsx)(q.SelectContent,{children:W.map(a=>(0,b.jsxs)(q.SelectItem,{value:a.id,children:[a.name,a.alias?` (${a.alias})`:""]},a.id))})]}),!ac&&(0,b.jsxs)(p.Button,{onClick:()=>{M(""),O(""),Q(h.NOTE_CATEGORIES_PRESET[3]),S(x),U(B),I(null),K(!0)},className:"ml-auto bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:[(0,b.jsx)(d.Plus,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{children:u("notes.newNote")})]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-hidden px-6 py-4 flex flex-col",children:ac?(0,b.jsxs)("div",{className:"flex flex-col gap-4 flex-1 min-h-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[!H&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground whitespace-nowrap",children:u("notes.workspace")}),(0,b.jsxs)(q.Select,{value:R,onValueChange:b=>b&&(b=>{if(b===R)return;S(b);let c=a.find(a=>a.id===b),d=c?.projects[0]??null;U(d?.id??null)})(b),children:[(0,b.jsx)(q.SelectTrigger,{className:"min-w-[140px] text-xs",children:(0,b.jsx)("span",{className:"truncate",children:a.find(a=>a.id===R)?.name??R})}),(0,b.jsx)(q.SelectContent,{children:a.map(a=>(0,b.jsx)(q.SelectItem,{value:a.id,children:a.name},a.id))})]})]}),!H&&Y.length>0&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground whitespace-nowrap",children:u("notes.project")}),(0,b.jsxs)(q.Select,{value:T??"",onValueChange:a=>a&&U(a),children:[(0,b.jsx)(q.SelectTrigger,{className:"min-w-[160px] text-xs",children:(0,b.jsx)("span",{className:"truncate",children:(t=Y.find(a=>a.id===T))?t.alias?`${t.name} (${t.alias})`:t.name:""})}),(0,b.jsx)(q.SelectContent,{children:Y.map(a=>(0,b.jsxs)(q.SelectItem,{value:a.id,children:[a.name,a.alias?` (${a.alias})`:""]},a.id))})]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("label",{className:"text-xs text-muted-foreground whitespace-nowrap",children:u("notes.categoryLabel")}),(0,b.jsxs)(q.Select,{value:P,onValueChange:a=>a&&Q(a),children:[(0,b.jsx)(q.SelectTrigger,{className:"min-w-[120px] text-xs",children:(0,b.jsx)("span",{className:"truncate",children:P})}),(0,b.jsx)(q.SelectContent,{children:h.NOTE_CATEGORIES_PRESET.map(a=>(0,b.jsx)(q.SelectItem,{value:a,children:a},a))})]})]})]}),(0,b.jsx)("input",{type:"text",value:L,onChange:a=>M(a.target.value),placeholder:u("notes.titlePlaceholder"),className:"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring"}),(0,b.jsx)(A,{value:N,onChange:O}),(0,b.jsxs)("div",{className:"flex items-center gap-2 justify-end",children:[(0,b.jsx)(p.Button,{variant:"outline",onClick:()=>{K(!1),I(null)},children:u("notes.cancel")}),(0,b.jsx)(p.Button,{onClick:H?_:$,disabled:!L.trim()||!H&&!T,className:"bg-primary/10 text-primary ring-1 ring-primary/20 hover:bg-primary/15",children:u("notes.save")})]})]}):(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsx)(o,{active:F,onSelect:G}),(0,b.jsxs)("div",{className:`relative ${v?"opacity-40 pointer-events-none":""} transition-opacity`,children:[v&&(0,b.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:(0,b.jsx)(e.Loader2,{className:"size-5 animate-spin text-muted-foreground"})}),0===W.length?(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-16 text-center",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:u("notes.noProject")}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground/60",children:u("notes.noProjectHint")})]}):(0,b.jsx)(y,{notes:ab,onEdit:a=>{M(a.title),O(a.content),Q(a.category),I(a),K(!1)},onDelete:aa})]})]})})]})}],25226)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__08meal1._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},961374,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(924868),e=a.i(814747),f=a.i(446786),g=a.i(6938);function h(a){return a.startsWith("~/")||"~"===a?e.default.join(f.default.homedir(),a.slice(1)):a}async function i(a,f,i){let j=h(a),k=e.default.join(j,".worktrees","task-"+f),l="task/"+f;await (0,d.mkdir)(e.default.join(j,".worktrees"),{recursive:!0});let m=(0,b.execFileSync)("git",["worktree","list","--porcelain"],{cwd:j,encoding:"utf-8",timeout:1e4}),n=e.default.normalize(k).replace(/\\/g,"/");if(m.split("\n").some(a=>a.startsWith("worktree ")&&a.slice(9).replace(/\\/g,"/")===n))return{worktreePath:k,worktreeBranch:l};if((0,c.existsSync)(k)&&(g.logger.warn(`[worktree] Directory exists but not tracked by git, removing: ${k}`),(0,b.execFileSync)("git",["worktree","remove",k,"--force"],{cwd:j,encoding:"utf-8",timeout:3e4})),(0,b.execFileSync)("git",["branch","--list",l],{cwd:j,encoding:"utf-8",timeout:5e3}).trim())(0,b.execFileSync)("git",["worktree","add",k,l],{cwd:j,encoding:"utf-8",timeout:3e4});else{let a=i;try{(0,b.execFileSync)("git",["rev-parse","--verify",i],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]})}catch{try{(0,b.execFileSync)("git",["rev-parse","--verify",`origin/${i}`],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}),a=`origin/${i}`}catch{throw Error(`Base branch '${i}' does not exist locally or on remote. Available branches: `+(0,b.execFileSync)("git",["branch","-a","--format=%(refname:short)"],{cwd:j,encoding:"utf-8",timeout:5e3}).trim().split("\n").join(", "))}}(0,b.execFileSync)("git",["worktree","add","-b",l,k,a],{cwd:j,encoding:"utf-8",timeout:3e4})}return function(a,b){let d=g.logger.create("worktree");for(let f of["node_modules",".next"]){let g=e.default.join(a,f),h=e.default.join(b,f);if((0,c.existsSync)(g)){try{(0,c.lstatSync)(h);continue}catch{}try{(0,c.symlinkSync)(g,h,"junction"),d.info(`Symlinked ${f}`,{from:g,to:h})}catch(a){d.warn(`Failed to symlink ${f}`,{error:String(a)})}}}}(j,k),{worktreePath:k,worktreeBranch:l}}async function j(a,d){let f=h(a),g=e.default.join(f,".worktrees","task-"+d),i="task/"+d;(0,c.existsSync)(g)&&(0,b.execFileSync)("git",["worktree","remove",g,"--force"],{cwd:f,encoding:"utf-8",timeout:3e4}),(0,b.execFileSync)("git",["branch","--list",i],{cwd:f,encoding:"utf-8",timeout:5e3}).trim()&&(0,b.execFileSync)("git",["branch","-D",i],{cwd:f,encoding:"utf-8",timeout:5e3})}a.s(["createWorktree",0,i,"removeWorktree",0,j])},31782,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(30292),f=a.i(961374),g=a.i(96063),h=a.i(232779),i=a.i(6938),j=a.i(632919);let k=i.logger.create("task-actions");async function l(a){let b=h.createTaskSchema.parse(a),e=await c.db.task.create({data:{title:b.title,description:b.description,projectId:b.projectId,priority:b.priority??"MEDIUM",status:b.status??"TODO",baseBranch:b.baseBranch??null,subPath:b.subPath??null}});return b.labelIds&&b.labelIds.length>0&&await c.db.taskLabel.createMany({data:b.labelIds.map(a=>({taskId:e.id,labelId:a}))}),(0,d.revalidatePath)("/workspaces"),e}async function m(b,e){h.taskStatusSchema.parse(e);let g=await c.db.task.update({where:{id:b},data:{status:e},include:{project:!0}});if("DONE"===e&&!g.baseBranch&&g.project?.localPath)try{let{execFileSync:d}=await a.A(144264),e=d("git",["rev-parse","HEAD"],{cwd:g.project.localPath,encoding:"utf-8",timeout:5e3}).trim();if(e){let a=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});a&&await c.db.taskExecution.update({where:{id:a.id},data:{mergeCommit:e}})}}catch{}if("DONE"===e&&a.A(131993).then(({captureTaskDreaming:a})=>{a(b).catch(()=>{})}).catch(()=>{}),"CANCELLED"===e&&g.project?.localPath)try{await (0,f.removeWorktree)(g.project.localPath,b)}catch(a){k.error("Worktree cleanup failed",a,{taskId:b})}return(0,d.revalidatePath)("/workspaces"),g}async function n(a,b){let{labelIds:f,...g}=h.updateTaskSchema.parse(b),i=await c.db.task.update({where:{id:a},data:g});return void 0!==f&&await (0,e.setTaskLabels)(a,f),(0,d.revalidatePath)("/workspaces"),i}async function o(a){g.z.string().cuid().parse(a);let b=await c.db.task.findUniqueOrThrow({where:{id:a},select:{pinned:!0}}),e=await c.db.task.update({where:{id:a},data:{pinned:!b.pinned}});return(0,d.revalidatePath)("/workspaces"),e}async function p(b){let e=await c.db.task.findUnique({where:{id:b},include:{project:!0}});if(e?.project?.localPath)try{await (0,f.removeWorktree)(e.project.localPath,b)}catch{}try{let{destroySession:c}=await a.A(585988);c(b)}catch{}await c.db.task.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function q(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,OR:[{status:{notIn:["DONE","CANCELLED"]}},{status:{in:["DONE","CANCELLED"]},updatedAt:{gte:b}}]},orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}]})}async function r(a){return a.trim()?c.db.task.findMany({where:{OR:[{title:{contains:a}},{description:{contains:a}}]},include:{project:{include:{workspace:!0}}},take:20,orderBy:{updatedAt:"desc"}}):[]}async function s(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"}})}async function t(b){let{execFileSync:d}=await a.A(144264),{existsSync:e}=await a.A(323970),f=await c.db.task.findUnique({where:{id:b}}),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!e(g.worktreePath))return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!1};let h=g.worktreePath,i=f?.baseBranch||"main";try{let a=d("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=a?a.split("\n").map(a=>a.trim()).filter(Boolean):[],c=0===b.length,e=!1,f=null,g=[];try{let a=d("git",["merge-base",i,"HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=d("git",["rev-list","--count",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();if(e=parseInt(b,10)>0){f=d("git",["log","-1","--format=%B"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();let b=d("git",["log","--oneline",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();g=b?b.split("\n").filter(Boolean):[]}}catch{}return{clean:c,files:b,hasCommits:e,lastCommitMessage:f,commitLog:g,hasWorktree:!0}}catch{return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!0}}}async function u(b,d){let{execFileSync:e}=await a.A(144264),{existsSync:f}=await a.A(323970),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!f(g.worktreePath))throw Error("No active worktree for this task");let h=g.worktreePath;if(e("git",["add","-A"],{cwd:h,timeout:1e4}),!e("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim())throw Error("No changes to commit");return e("git",["commit","-m",d],{cwd:h,encoding:"utf-8",timeout:15e3}),{hash:e("git",["rev-parse","--short","HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim()}}async function v(a){return/^c[a-z0-9]{20,30}$/.test(a)?c.db.task.findUnique({where:{id:a},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}):null}async function w(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.count({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}}})}(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s,t,u,v,w]),(0,b.registerServerReference)(l,"401428759ab9bf4954951f15e712c11118732f9f15",null),(0,b.registerServerReference)(m,"60c351a918c1ee9731291483fb857151355d9f0ca9",null),(0,b.registerServerReference)(n,"60755b61effe8e442dd2b359fdc73d136e6d4505b1",null),(0,b.registerServerReference)(o,"40f5eefd6462353c3411c04d870aa58bea4cab70e8",null),(0,b.registerServerReference)(p,"405df46b2b518ec5fe9eae6a2b958cd0c022087300",null),(0,b.registerServerReference)(q,"401b61ad7e39ca392cb9beb71bc3b6bfa5ef7f1504",null),(0,b.registerServerReference)(r,"40947bbcaa80f4cdfe2e251c86703557681660bb46",null),(0,b.registerServerReference)(s,"40fc6fb8a421b620849a65f59e6e0cfd363a232907",null),(0,b.registerServerReference)(t,"409f21aa0a1353a1c59d722a1686ba8ed31b4ab68c",null),(0,b.registerServerReference)(u,"60840bef26147dd4dff7d39641737796069e39069c",null),(0,b.registerServerReference)(v,"40ae3f40b62ca3c5a2377e58d67b407afcf20387e5",null),(0,b.registerServerReference)(w,"40917351bef2fa1c7314359e8e06c5f69122b9245e",null),a.s(["checkWorktreeClean",0,t,"commitWorktreeChanges",0,u,"createTask",0,l,"deleteTask",0,p,"getArchivedTaskCount",0,w,"getArchivedTasks",0,s,"getProjectTasks",0,q,"getTaskOverview",0,v,"searchTasks",0,r,"toggleTaskPinned",0,o,"updateTask",0,n,"updateTaskStatus",0,m])},654160,a=>a.a(async(b,c)=>{try{a.i(279254),a.i(30292);var d=a.i(322220),e=a.i(727977);a.i(198433),a.i(541587),a.i(31782);var f=b([d,e]);[d,e]=f.then?(await f)():f,a.s([]),c()}catch(a){c(a)}},!1),811420,a=>a.a(async(b,c)=>{try{var d=a.i(654160),e=a.i(279254),f=a.i(30292),g=a.i(322220),h=a.i(727977),i=a.i(198433),j=a.i(541587),k=a.i(31782),l=b([d,g,h]);[d,g,h]=l.then?(await l)():l,a.s(["00803dfba01a59109739236b9c79eb555dfe726559",()=>h.getActualWsPort,"0088720ea6f78a7d440f0ffe918e2017c6ed4a091c",()=>j.getOnboardingStatus,"009e9eb06b5d880738cdc44ef434941a72e320e010",()=>e.getWorkspacesWithProjects,"40084c89b2285bf95be399366342c9a6aee7f7c56f",()=>e.deleteProject,"4008da5fb2e740b1e3c6df4ff7e170a1140d107426",()=>j.completeOnboarding,"4013c88773d9eb1e2401f45a6f7f0d004f6460ddc3",()=>e.createProject,"401428759ab9bf4954951f15e712c11118732f9f15",()=>k.createTask,"401b61ad7e39ca392cb9beb71bc3b6bfa5ef7f1504",()=>k.getProjectTasks,"4032075180d73f329cca1ea967021d020837bcbda7",()=>e.getProjectByLocalPath,"4033a25d649e20c263ecd33888f119bbd68d23525a",()=>e.getRecentLocalProjects,"403ca34cdfe63235addec4c2185b9165f99e7449ba",()=>f.getTaskLabels,"40535a6a38bc5b8149d6178b949a6f89b1307d6d44",()=>e.getWorkspacesWithRecentTasks,"40556e416c26c7e086bc6c0026b4f12eee10ce659c",()=>j.setOnboardingProgress,"405df46b2b518ec5fe9eae6a2b958cd0c022087300",()=>k.deleteTask,"407818a74d78397b1421f728f63974b3c70235f449",()=>h.resolveGitLocalPath,"408abee9d22d9054dd5a6ecc32b0c3daa69ef66c6e",()=>j.dispatchTaskCompletionEvent,"40917351bef2fa1c7314359e8e06c5f69122b9245e",()=>k.getArchivedTaskCount,"40947bbcaa80f4cdfe2e251c86703557681660bb46",()=>k.searchTasks,"409f21aa0a1353a1c59d722a1686ba8ed31b4ab68c",()=>k.checkWorktreeClean,"40a0a8500c07adee5c4e9f993dde67c6229d794f81",()=>e.getOrCreateTowerTaskId,"40ae3f40b62ca3c5a2377e58d67b407afcf20387e5",()=>k.getTaskOverview,"40b3591c77b7bc8565eb59161e29cffb57fe4fe1a5",()=>e.createWorkspace,"40c65d3caeb7cc578408a85b29d3ba4ebe00eb4a89",()=>f.getLabelsForWorkspace,"40e11907297db22577c19b0852a3c22e191d9bab8a",()=>e.getWorkspaceById,"40eaddcac6fa4edf051cd8d3168d3048a4158112c0",()=>f.createLabel,"40f00a067fb6de012eaf03c9eef4ebf4964d647581",()=>e.deleteWorkspace,"40f109f5cc72d3c8512abb532f19ecdf3d57a9de92",()=>i.checkMigrationSafety,"40f5eefd6462353c3411c04d870aa58bea4cab70e8",()=>k.toggleTaskPinned,"40f96ef73252afb252f5b9a67a3e940b91d910020e",()=>f.deleteLabel,"40fc6fb8a421b620849a65f59e6e0cfd363a232907",()=>k.getArchivedTasks,"601c654f3d94a3fa93c8a4f803525145ef41461d43",()=>h.getConfigValue,"601e7393f346eeebf241ef05b3c434d1074e6b83ca",()=>h.setConfigValue,"604f648d394271e37eab29c0f0c16170bd75606176",()=>i.migrateProjectPath,"606a6ac57a64d74ac8910b538bca7b8d0286ea4a03",()=>i.analyzeProjectDirectory,"60755b61effe8e442dd2b359fdc73d136e6d4505b1",()=>k.updateTask,"60840bef26147dd4dff7d39641737796069e39069c",()=>k.commitWorktreeChanges,"608940db009d9ab74b2e4d144069b697417c331166",()=>g.globalSearch,"608b3966e751039d81baa4501f75ecbe0e99e30701",()=>f.setTaskLabels,"60a4883fbe9441f4bbb20550d941f5b5c39d7bf696",()=>e.updateWorkspace,"60c351a918c1ee9731291483fb857151355d9f0ca9",()=>k.updateTaskStatus,"60d61a4cf5383e58053ba61c52b70ed758b0042ac6",()=>e.updateProject]),c()}catch(a){c(a)}},!1),939768,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_src_lib_11g-ixh._.js"].map(b=>a.l(b))).then(()=>b(326575)))},585988,a=>{a.v(a=>Promise.resolve().then(()=>a(264572)))},908462,a=>{a.v(a=>Promise.resolve().then(()=>a(961374)))},302452,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0u26l~e._.js"].map(b=>a.l(b))).then(()=>b(396477)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},131993,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0r6gkos._.js"].map(b=>a.l(b))).then(()=>b(23999)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
1
+ module.exports=[233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},961374,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(924868),e=a.i(814747),f=a.i(446786),g=a.i(6938);function h(a){return a.startsWith("~/")||"~"===a?e.default.join(f.default.homedir(),a.slice(1)):a}async function i(a,f,i){let j=h(a),k=e.default.join(j,".worktrees","task-"+f),l="task/"+f;await (0,d.mkdir)(e.default.join(j,".worktrees"),{recursive:!0});let m=(0,b.execFileSync)("git",["worktree","list","--porcelain"],{cwd:j,encoding:"utf-8",timeout:1e4}),n=e.default.normalize(k).replace(/\\/g,"/");if(m.split("\n").some(a=>a.startsWith("worktree ")&&a.slice(9).replace(/\\/g,"/")===n))return{worktreePath:k,worktreeBranch:l};if((0,c.existsSync)(k)&&(g.logger.warn(`[worktree] Directory exists but not tracked by git, removing: ${k}`),(0,b.execFileSync)("git",["worktree","remove",k,"--force"],{cwd:j,encoding:"utf-8",timeout:3e4})),(0,b.execFileSync)("git",["branch","--list",l],{cwd:j,encoding:"utf-8",timeout:5e3}).trim())(0,b.execFileSync)("git",["worktree","add",k,l],{cwd:j,encoding:"utf-8",timeout:3e4});else{let a=i;try{(0,b.execFileSync)("git",["rev-parse","--verify",i],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]})}catch{try{(0,b.execFileSync)("git",["rev-parse","--verify",`origin/${i}`],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}),a=`origin/${i}`}catch{throw Error(`Base branch '${i}' does not exist locally or on remote. Available branches: `+(0,b.execFileSync)("git",["branch","-a","--format=%(refname:short)"],{cwd:j,encoding:"utf-8",timeout:5e3}).trim().split("\n").join(", "))}}(0,b.execFileSync)("git",["worktree","add","-b",l,k,a],{cwd:j,encoding:"utf-8",timeout:3e4})}return function(a,b){let d=g.logger.create("worktree");for(let f of["node_modules",".next"]){let g=e.default.join(a,f),h=e.default.join(b,f);if((0,c.existsSync)(g)){try{(0,c.lstatSync)(h);continue}catch{}try{(0,c.symlinkSync)(g,h,"junction"),d.info(`Symlinked ${f}`,{from:g,to:h})}catch(a){d.warn(`Failed to symlink ${f}`,{error:String(a)})}}}}(j,k),{worktreePath:k,worktreeBranch:l}}async function j(a,d){let f=h(a),g=e.default.join(f,".worktrees","task-"+d),i="task/"+d;(0,c.existsSync)(g)&&(0,b.execFileSync)("git",["worktree","remove",g,"--force"],{cwd:f,encoding:"utf-8",timeout:3e4}),(0,b.execFileSync)("git",["branch","--list",i],{cwd:f,encoding:"utf-8",timeout:5e3}).trim()&&(0,b.execFileSync)("git",["branch","-D",i],{cwd:f,encoding:"utf-8",timeout:5e3})}a.s(["createWorktree",0,i,"removeWorktree",0,j])},31782,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(30292),f=a.i(961374),g=a.i(96063),h=a.i(232779),i=a.i(6938),j=a.i(632919);let k=i.logger.create("task-actions");async function l(a){let b=h.createTaskSchema.parse(a),e=await c.db.task.create({data:{title:b.title,description:b.description,projectId:b.projectId,priority:b.priority??"MEDIUM",status:b.status??"TODO",baseBranch:b.baseBranch??null,subPath:b.subPath??null}});return b.labelIds&&b.labelIds.length>0&&await c.db.taskLabel.createMany({data:b.labelIds.map(a=>({taskId:e.id,labelId:a}))}),(0,d.revalidatePath)("/workspaces"),e}async function m(b,e){h.taskStatusSchema.parse(e);let g=await c.db.task.update({where:{id:b},data:{status:e},include:{project:!0}});if("DONE"===e&&!g.baseBranch&&g.project?.localPath)try{let{execFileSync:d}=await a.A(144264),e=d("git",["rev-parse","HEAD"],{cwd:g.project.localPath,encoding:"utf-8",timeout:5e3}).trim();if(e){let a=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});a&&await c.db.taskExecution.update({where:{id:a.id},data:{mergeCommit:e}})}}catch{}if("DONE"===e&&a.A(131993).then(({captureTaskDreaming:a})=>{a(b).catch(()=>{})}).catch(()=>{}),"CANCELLED"===e&&g.project?.localPath)try{await (0,f.removeWorktree)(g.project.localPath,b)}catch(a){k.error("Worktree cleanup failed",a,{taskId:b})}return(0,d.revalidatePath)("/workspaces"),g}async function n(a,b){let{labelIds:f,...g}=h.updateTaskSchema.parse(b),i=await c.db.task.update({where:{id:a},data:g});return void 0!==f&&await (0,e.setTaskLabels)(a,f),(0,d.revalidatePath)("/workspaces"),i}async function o(a){g.z.string().cuid().parse(a);let b=await c.db.task.findUniqueOrThrow({where:{id:a},select:{pinned:!0}}),e=await c.db.task.update({where:{id:a},data:{pinned:!b.pinned}});return(0,d.revalidatePath)("/workspaces"),e}async function p(b){let e=await c.db.task.findUnique({where:{id:b},include:{project:!0}});if(e?.project?.localPath)try{await (0,f.removeWorktree)(e.project.localPath,b)}catch{}try{let{destroySession:c}=await a.A(585988);c(b)}catch{}await c.db.task.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function q(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,OR:[{status:{notIn:["DONE","CANCELLED"]}},{status:{in:["DONE","CANCELLED"]},updatedAt:{gte:b}}]},orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}]})}async function r(a){return a.trim()?c.db.task.findMany({where:{OR:[{title:{contains:a}},{description:{contains:a}}]},include:{project:{include:{workspace:!0}}},take:20,orderBy:{updatedAt:"desc"}}):[]}async function s(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"}})}async function t(b){let{execFileSync:d}=await a.A(144264),{existsSync:e}=await a.A(323970),f=await c.db.task.findUnique({where:{id:b}}),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!e(g.worktreePath))return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!1};let h=g.worktreePath,i=f?.baseBranch||"main";try{let a=d("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=a?a.split("\n").map(a=>a.trim()).filter(Boolean):[],c=0===b.length,e=!1,f=null,g=[];try{let a=d("git",["merge-base",i,"HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=d("git",["rev-list","--count",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();if(e=parseInt(b,10)>0){f=d("git",["log","-1","--format=%B"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();let b=d("git",["log","--oneline",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();g=b?b.split("\n").filter(Boolean):[]}}catch{}return{clean:c,files:b,hasCommits:e,lastCommitMessage:f,commitLog:g,hasWorktree:!0}}catch{return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!0}}}async function u(b,d){let{execFileSync:e}=await a.A(144264),{existsSync:f}=await a.A(323970),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!f(g.worktreePath))throw Error("No active worktree for this task");let h=g.worktreePath;if(e("git",["add","-A"],{cwd:h,timeout:1e4}),!e("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim())throw Error("No changes to commit");return e("git",["commit","-m",d],{cwd:h,encoding:"utf-8",timeout:15e3}),{hash:e("git",["rev-parse","--short","HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim()}}async function v(a){return/^c[a-z0-9]{20,30}$/.test(a)?c.db.task.findUnique({where:{id:a},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}):null}async function w(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.count({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}}})}(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s,t,u,v,w]),(0,b.registerServerReference)(l,"40622d25277e3c11015df1608e15d738bebaf6e879",null),(0,b.registerServerReference)(m,"60d8d8ed534f28b32d271c58f8f9f2511c65003bdb",null),(0,b.registerServerReference)(n,"605b03fbb419cd1a1831e8464a8242d82cdae18ae6",null),(0,b.registerServerReference)(o,"40a7e4fdd6803b7d8447525be3097063e42fc480f2",null),(0,b.registerServerReference)(p,"4037a0d2f662d32e4dd9a4b1a619489e9fdf17d735",null),(0,b.registerServerReference)(q,"402b8c5867f9414d72e69d6b9b5aa8f56b6f453a36",null),(0,b.registerServerReference)(r,"4022ff111b8a8abaefd935dae43bc6e25fdac3b561",null),(0,b.registerServerReference)(s,"404e0860b4ac94b0d1f5050116c3c308ee36d55862",null),(0,b.registerServerReference)(t,"40ec4f72b679f0487a21d7166d20412c1d3e4f1feb",null),(0,b.registerServerReference)(u,"6030bc338dcedc06ab38184da02f82e242e2e73465",null),(0,b.registerServerReference)(v,"408bb641755358e099b0f600083d554bdece767654",null),(0,b.registerServerReference)(w,"40a90813a2de2ddd04c90819beeddce2193366c1b2",null),a.s(["checkWorktreeClean",0,t,"commitWorktreeChanges",0,u,"createTask",0,l,"deleteTask",0,p,"getArchivedTaskCount",0,w,"getArchivedTasks",0,s,"getProjectTasks",0,q,"getTaskOverview",0,v,"searchTasks",0,r,"toggleTaskPinned",0,o,"updateTask",0,n,"updateTaskStatus",0,m])},654160,a=>a.a(async(b,c)=>{try{a.i(279254),a.i(30292);var d=a.i(322220),e=a.i(727977);a.i(198433),a.i(541587),a.i(31782);var f=b([d,e]);[d,e]=f.then?(await f)():f,a.s([]),c()}catch(a){c(a)}},!1),811420,a=>a.a(async(b,c)=>{try{var d=a.i(654160),e=a.i(279254),f=a.i(30292),g=a.i(322220),h=a.i(727977),i=a.i(198433),j=a.i(541587),k=a.i(31782),l=b([d,g,h]);[d,g,h]=l.then?(await l)():l,a.s(["002f8c1907daa108abf0de48763ba7242b18c8768d",()=>e.getWorkspacesWithProjects,"00c5a0d3b9b146d2731747fe1a416361d4501fba21",()=>h.getActualWsPort,"00f7de3735ec23dbbe02b347b3b27fe3293c72dd51",()=>j.getOnboardingStatus,"4002a489b8ddf18fe0011eb46ac0739ec3e093a5bf",()=>j.dispatchTaskCompletionEvent,"4003b61cd97c8f82a902ab8b7c3de8d596040b5df5",()=>f.getTaskLabels,"400c47cd4a543a8a180be1c4384b39a199af461904",()=>e.getProjectByLocalPath,"401227c576cd75dc12c7d7ef6c4acb53b48d853e45",()=>e.getRecentLocalProjects,"4022ff111b8a8abaefd935dae43bc6e25fdac3b561",()=>k.searchTasks,"4025e96d25637009a8b378148032220c259e2e209b",()=>e.deleteWorkspace,"402b8c5867f9414d72e69d6b9b5aa8f56b6f453a36",()=>k.getProjectTasks,"4037a0d2f662d32e4dd9a4b1a619489e9fdf17d735",()=>k.deleteTask,"404e0860b4ac94b0d1f5050116c3c308ee36d55862",()=>k.getArchivedTasks,"405e24a96c3040b977262f38c5e06b74894259e0be",()=>j.completeOnboarding,"40622d25277e3c11015df1608e15d738bebaf6e879",()=>k.createTask,"406303a55224e2a9384b4ad81ed3a003d67d23c0a5",()=>f.getLabelsForWorkspace,"406d0755627b7578b91d776cec0fe19e1bb6bfc1e3",()=>j.setOnboardingProgress,"407cbea3859811102573ba8273dc5d88a5d811928c",()=>h.resolveGitLocalPath,"40805f406dafafbee2bc2893759657900a249fb949",()=>i.checkMigrationSafety,"408bb641755358e099b0f600083d554bdece767654",()=>k.getTaskOverview,"40a7e4fdd6803b7d8447525be3097063e42fc480f2",()=>k.toggleTaskPinned,"40a90813a2de2ddd04c90819beeddce2193366c1b2",()=>k.getArchivedTaskCount,"40b43304845d2ab1bbfcca9e8a22572005f72fdee2",()=>e.createWorkspace,"40c3e283c4bc09dd0ddeac0fee2d5450add9aba2ef",()=>e.deleteProject,"40d6e8e588bda631b24c5a0e2c634b36786afb4521",()=>e.getOrCreateTowerTaskId,"40de3b59acefdad3d4c0fe96d99c53f2e3910bc5c4",()=>f.createLabel,"40ec4f72b679f0487a21d7166d20412c1d3e4f1feb",()=>k.checkWorktreeClean,"40f0eec81bf22876c2506985320bb7faaaeb2e92e7",()=>e.getWorkspaceById,"40f10b98befcfeac7f091134a9d3044dd0589408ae",()=>e.getWorkspacesWithRecentTasks,"40f2f8dd87569241d7237d8e6d9c1062d583dceda0",()=>f.deleteLabel,"40f9512bdf19e6f9f4f666ec480b5d2a34184f2c20",()=>e.createProject,"6030bc338dcedc06ab38184da02f82e242e2e73465",()=>k.commitWorktreeChanges,"60422a3dcf869aca6ad2360fc07fff8f7ad667284c",()=>e.updateWorkspace,"6051c20539a0938b9860bfe0dfe34cf20c41177e85",()=>g.globalSearch,"60580b8893845b30deedffa8257cbf297fee7c5689",()=>h.setConfigValue,"6058bc084dfc8fd7335c86f6b96805b28fbfade91d",()=>h.getConfigValue,"605b03fbb419cd1a1831e8464a8242d82cdae18ae6",()=>k.updateTask,"60b8da241b1f9f2d12f9b07df697c5d7cc38d4d2a6",()=>e.updateProject,"60d8d8ed534f28b32d271c58f8f9f2511c65003bdb",()=>k.updateTaskStatus,"60d8faa80f7dca8aa639744b42cee7f20ac78660cd",()=>i.analyzeProjectDirectory,"60dad40412789acec09a60682d0db5d3e0a476cac3",()=>f.setTaskLabels,"60f6737005b46b8cdbcf37d9f3db70c559c509ad1a",()=>i.migrateProjectPath]),c()}catch(a){c(a)}},!1),939768,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_src_lib_11g-ixh._.js"].map(b=>a.l(b))).then(()=>b(326575)))},585988,a=>{a.v(a=>Promise.resolve().then(()=>a(264572)))},908462,a=>{a.v(a=>Promise.resolve().then(()=>a(961374)))},302452,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0u26l~e._.js"].map(b=>a.l(b))).then(()=>b(396477)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},131993,a=>{a.v(b=>Promise.all(["server/chunks/ssr/[root-of-the-server]__0r6gkos._.js"].map(b=>a.l(b))).then(()=>b(23999)))},323970,a=>{a.v(a=>Promise.resolve().then(()=>a(522734)))}];
2
2
 
3
3
  //# sourceMappingURL=%5Broot-of-the-server%5D__0ffdrwp._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[660526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},961374,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(924868),e=a.i(814747),f=a.i(446786),g=a.i(6938);function h(a){return a.startsWith("~/")||"~"===a?e.default.join(f.default.homedir(),a.slice(1)):a}async function i(a,f,i){let j=h(a),k=e.default.join(j,".worktrees","task-"+f),l="task/"+f;await (0,d.mkdir)(e.default.join(j,".worktrees"),{recursive:!0});let m=(0,b.execFileSync)("git",["worktree","list","--porcelain"],{cwd:j,encoding:"utf-8",timeout:1e4}),n=e.default.normalize(k).replace(/\\/g,"/");if(m.split("\n").some(a=>a.startsWith("worktree ")&&a.slice(9).replace(/\\/g,"/")===n))return{worktreePath:k,worktreeBranch:l};if((0,c.existsSync)(k)&&(g.logger.warn(`[worktree] Directory exists but not tracked by git, removing: ${k}`),(0,b.execFileSync)("git",["worktree","remove",k,"--force"],{cwd:j,encoding:"utf-8",timeout:3e4})),(0,b.execFileSync)("git",["branch","--list",l],{cwd:j,encoding:"utf-8",timeout:5e3}).trim())(0,b.execFileSync)("git",["worktree","add",k,l],{cwd:j,encoding:"utf-8",timeout:3e4});else{let a=i;try{(0,b.execFileSync)("git",["rev-parse","--verify",i],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]})}catch{try{(0,b.execFileSync)("git",["rev-parse","--verify",`origin/${i}`],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}),a=`origin/${i}`}catch{throw Error(`Base branch '${i}' does not exist locally or on remote. Available branches: `+(0,b.execFileSync)("git",["branch","-a","--format=%(refname:short)"],{cwd:j,encoding:"utf-8",timeout:5e3}).trim().split("\n").join(", "))}}(0,b.execFileSync)("git",["worktree","add","-b",l,k,a],{cwd:j,encoding:"utf-8",timeout:3e4})}return function(a,b){let d=g.logger.create("worktree");for(let f of["node_modules",".next"]){let g=e.default.join(a,f),h=e.default.join(b,f);if((0,c.existsSync)(g)){try{(0,c.lstatSync)(h);continue}catch{}try{(0,c.symlinkSync)(g,h,"junction"),d.info(`Symlinked ${f}`,{from:g,to:h})}catch(a){d.warn(`Failed to symlink ${f}`,{error:String(a)})}}}}(j,k),{worktreePath:k,worktreeBranch:l}}async function j(a,d){let f=h(a),g=e.default.join(f,".worktrees","task-"+d),i="task/"+d;(0,c.existsSync)(g)&&(0,b.execFileSync)("git",["worktree","remove",g,"--force"],{cwd:f,encoding:"utf-8",timeout:3e4}),(0,b.execFileSync)("git",["branch","--list",i],{cwd:f,encoding:"utf-8",timeout:5e3}).trim()&&(0,b.execFileSync)("git",["branch","-D",i],{cwd:f,encoding:"utf-8",timeout:5e3})}a.s(["createWorktree",0,i,"removeWorktree",0,j])},31782,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(30292),f=a.i(961374),g=a.i(96063),h=a.i(232779),i=a.i(6938),j=a.i(632919);let k=i.logger.create("task-actions");async function l(a){let b=h.createTaskSchema.parse(a),e=await c.db.task.create({data:{title:b.title,description:b.description,projectId:b.projectId,priority:b.priority??"MEDIUM",status:b.status??"TODO",baseBranch:b.baseBranch??null,subPath:b.subPath??null}});return b.labelIds&&b.labelIds.length>0&&await c.db.taskLabel.createMany({data:b.labelIds.map(a=>({taskId:e.id,labelId:a}))}),(0,d.revalidatePath)("/workspaces"),e}async function m(b,e){h.taskStatusSchema.parse(e);let g=await c.db.task.update({where:{id:b},data:{status:e},include:{project:!0}});if("DONE"===e&&!g.baseBranch&&g.project?.localPath)try{let{execFileSync:d}=await a.A(144264),e=d("git",["rev-parse","HEAD"],{cwd:g.project.localPath,encoding:"utf-8",timeout:5e3}).trim();if(e){let a=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});a&&await c.db.taskExecution.update({where:{id:a.id},data:{mergeCommit:e}})}}catch{}if("DONE"===e&&a.A(131993).then(({captureTaskDreaming:a})=>{a(b).catch(()=>{})}).catch(()=>{}),"CANCELLED"===e&&g.project?.localPath)try{await (0,f.removeWorktree)(g.project.localPath,b)}catch(a){k.error("Worktree cleanup failed",a,{taskId:b})}return(0,d.revalidatePath)("/workspaces"),g}async function n(a,b){let{labelIds:f,...g}=h.updateTaskSchema.parse(b),i=await c.db.task.update({where:{id:a},data:g});return void 0!==f&&await (0,e.setTaskLabels)(a,f),(0,d.revalidatePath)("/workspaces"),i}async function o(a){g.z.string().cuid().parse(a);let b=await c.db.task.findUniqueOrThrow({where:{id:a},select:{pinned:!0}}),e=await c.db.task.update({where:{id:a},data:{pinned:!b.pinned}});return(0,d.revalidatePath)("/workspaces"),e}async function p(b){let e=await c.db.task.findUnique({where:{id:b},include:{project:!0}});if(e?.project?.localPath)try{await (0,f.removeWorktree)(e.project.localPath,b)}catch{}try{let{destroySession:c}=await a.A(585988);c(b)}catch{}await c.db.task.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function q(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,OR:[{status:{notIn:["DONE","CANCELLED"]}},{status:{in:["DONE","CANCELLED"]},updatedAt:{gte:b}}]},orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}]})}async function r(a){return a.trim()?c.db.task.findMany({where:{OR:[{title:{contains:a}},{description:{contains:a}}]},include:{project:{include:{workspace:!0}}},take:20,orderBy:{updatedAt:"desc"}}):[]}async function s(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"}})}async function t(b){let{execFileSync:d}=await a.A(144264),{existsSync:e}=await a.A(323970),f=await c.db.task.findUnique({where:{id:b}}),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!e(g.worktreePath))return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!1};let h=g.worktreePath,i=f?.baseBranch||"main";try{let a=d("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=a?a.split("\n").map(a=>a.trim()).filter(Boolean):[],c=0===b.length,e=!1,f=null,g=[];try{let a=d("git",["merge-base",i,"HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=d("git",["rev-list","--count",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();if(e=parseInt(b,10)>0){f=d("git",["log","-1","--format=%B"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();let b=d("git",["log","--oneline",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();g=b?b.split("\n").filter(Boolean):[]}}catch{}return{clean:c,files:b,hasCommits:e,lastCommitMessage:f,commitLog:g,hasWorktree:!0}}catch{return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!0}}}async function u(b,d){let{execFileSync:e}=await a.A(144264),{existsSync:f}=await a.A(323970),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!f(g.worktreePath))throw Error("No active worktree for this task");let h=g.worktreePath;if(e("git",["add","-A"],{cwd:h,timeout:1e4}),!e("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim())throw Error("No changes to commit");return e("git",["commit","-m",d],{cwd:h,encoding:"utf-8",timeout:15e3}),{hash:e("git",["rev-parse","--short","HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim()}}async function v(a){return/^c[a-z0-9]{20,30}$/.test(a)?c.db.task.findUnique({where:{id:a},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}):null}async function w(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.count({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}}})}(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s,t,u,v,w]),(0,b.registerServerReference)(l,"401428759ab9bf4954951f15e712c11118732f9f15",null),(0,b.registerServerReference)(m,"60c351a918c1ee9731291483fb857151355d9f0ca9",null),(0,b.registerServerReference)(n,"60755b61effe8e442dd2b359fdc73d136e6d4505b1",null),(0,b.registerServerReference)(o,"40f5eefd6462353c3411c04d870aa58bea4cab70e8",null),(0,b.registerServerReference)(p,"405df46b2b518ec5fe9eae6a2b958cd0c022087300",null),(0,b.registerServerReference)(q,"401b61ad7e39ca392cb9beb71bc3b6bfa5ef7f1504",null),(0,b.registerServerReference)(r,"40947bbcaa80f4cdfe2e251c86703557681660bb46",null),(0,b.registerServerReference)(s,"40fc6fb8a421b620849a65f59e6e0cfd363a232907",null),(0,b.registerServerReference)(t,"409f21aa0a1353a1c59d722a1686ba8ed31b4ab68c",null),(0,b.registerServerReference)(u,"60840bef26147dd4dff7d39641737796069e39069c",null),(0,b.registerServerReference)(v,"40ae3f40b62ca3c5a2377e58d67b407afcf20387e5",null),(0,b.registerServerReference)(w,"40917351bef2fa1c7314359e8e06c5f69122b9245e",null),a.s(["checkWorktreeClean",0,t,"commitWorktreeChanges",0,u,"createTask",0,l,"deleteTask",0,p,"getArchivedTaskCount",0,w,"getArchivedTasks",0,s,"getProjectTasks",0,q,"getTaskOverview",0,v,"searchTasks",0,r,"toggleTaskPinned",0,o,"updateTask",0,n,"updateTaskStatus",0,m])},182118,a=>{"use strict";var b=a.i(680889),c=a.i(96063),d=a.i(832116),e=a.i(972795);async function f(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 g(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b)}var h=a.i(632919);let i=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()}),j=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 k(a){let b=i.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 f(d.db,{id:c.id,title:c.title,content:c.content}),(0,e.revalidatePath)("/workspace"),c}async function l(a,b){let c=j.parse(b),g=await d.db.projectNote.update({where:{id:a},data:c});return await f(d.db,{id:g.id,title:g.title,content:g.content}),(0,e.revalidatePath)("/workspace"),g}async function m(a){await g(d.db,a),await d.db.projectNote.delete({where:{id:a}}),(0,e.revalidatePath)("/workspace")}async function n(a){return d.db.projectNote.findUnique({where:{id:a}})}async function o(a,b){return d.db.projectNote.findMany({where:{projectId:a,taskId:null,...b?.category?{category:b.category}:{}},orderBy:{updatedAt:"desc"}})}async function p(a){return d.db.projectNote.findMany({where:{taskId:a},orderBy:{updatedAt:"desc"}})}(0,h.ensureServerEntryExports)([k,l,m,n,o,p]),(0,b.registerServerReference)(k,"4013f3990e7ab63645a7a0eba9f894a2dead93edf5",null),(0,b.registerServerReference)(l,"6092865255a76c411056db6faab43ac884694328e2",null),(0,b.registerServerReference)(m,"4031f43902bbd8a30d1aafd8c1463fca31a0ca6c2e",null),(0,b.registerServerReference)(n,"40326ed1f4f4b6779bafef2a7c30d29fa4693af8d3",null),(0,b.registerServerReference)(o,"609e4a606d36feb436e29527b4809e11eb5603e6e3",null),(0,b.registerServerReference)(p,"406b1137bf358a90598061a18866c68c753404ac35",null),a.s(["createNote",0,k,"deleteNote",0,m,"getNoteById",0,n,"getProjectNotes",0,o,"getTaskNotes",0,p,"updateNote",0,l],182118)},532941,a=>{"use strict";let b,c;a.i(666680);var d=a.i(902157),e=a.i(750227),f=a.i(660526);let g=(c=(0,e.join)((b||(b=(0,e.join)((0,f.homedir)(),".tower"),(0,d.existsSync)(b)||(0,d.mkdirSync)(b,{recursive:!0})),b),"storage"),(0,d.existsSync)(c)||(0,d.mkdirSync)(c,{recursive:!0}),c);a.s(["ensureAssetsDir",0,function(a){let b=function(a){let b=e.join(g,"assets",a);if(!b.startsWith(g+e.sep))throw Error("Path traversal detected");return b}(a);return d.mkdirSync(b,{recursive:!0}),b}],532941)},790146,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(902157),f=a.i(750227),g=a.i(96063),h=a.i(832116),i=a.i(972795),j=a.i(532941),k=a.i(727977),l=a.i(632919),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,"409b3ddbd54f88673008bfb4f04699acb27a9cdc90",null),(0,d.registerServerReference)(o,"40f5eb7f5803dd1b46b71a47e34ff8dbe539f1a5e3",null),(0,d.registerServerReference)(p,"40870caaf2b99caede2d1f3d00d181fc220d73e640",null),(0,d.registerServerReference)(q,"407d3b3ed5ed1edbc92d8a6350e88e0e29bdc5626d",null),(0,d.registerServerReference)(r,"4027197809656c3a371a2676bf9f2b7ffa2f58561f",null),(0,d.registerServerReference)(s,"405e1016a806f0737b6513e65c99049263410f5b20",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),575675,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(912206);let f=["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=[];a.profileArgs?.length&&b.push(...a.profileArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.profileEnvVars??{},...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){let b=this.readSettings(),c=b.hooks??{},e=this.getPostToolUseArray(b);if(this.findTowerHookIndex(e)>=0)return;let f=d.join(process.cwd(),"scripts","post-tool-hook.js"),g={hooks:[{command:`node "${f}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"};b.hooks={...c,PostToolUse:[...e,g]},this.writeSettings(b)}async uninstallHooks(){let a=this.readSettings(),b=a.hooks??{},c=this.getPostToolUseArray(a).filter(a=>!a.hooks?.some(a=>a.command?.includes("post-tool-hook.js")));a.hooks={...b,PostToolUse:c},this.writeSettings(a)}async isHooksInstalled(){let a=this.readSettings(),b=this.getPostToolUseArray(a);return this.findTowerHookIndex(b)>=0}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),d=c(b),e=this.resolveCommand(),{stdout:f}=await d(e,["--version"],{timeout:5e3});return f.trim()||null}catch{return null}}async getModels(){return f}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}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")}getPostToolUseArray(a){let b=a.hooks;if(!b)return[];let c=b.PostToolUse;return Array.isArray(c)?c:[]}findTowerHookIndex(a){return a.findIndex(a=>a.hooks?.some(a=>a.command?.includes("post-tool-hook.js")))}}])},143971,a=>{"use strict";class b{providers=new Map;register(a){this.providers.set(a.name,a)}get(a){return this.providers.get(a)}getAll(){return Array.from(this.providers.values())}getCliAdapter(a){return this.providers.get(a)?.cli?.adapter??null}getQueryAdapter(a,b){let c=this.providers.get(a);return c?"api"===b?c.api?.adapter??null:c.cliQuery?.adapter??null:null}getAllowedCommands(){let a=[];for(let b of this.providers.values())b.cli?.command&&a.push(b.cli.command);return a}async getAvailableProviders(){let a=[];for(let b of this.providers.values()){let c=!!b.cli&&await b.cli.adapter.isAvailable(),d=c&&b.cli?await b.cli.adapter.getVersion():null,e=!!b.api&&!!process.env[b.api.keyEnvVar],f=!!b.api&&e;a.push({name:b.name,displayName:b.displayName,cli:{available:c,version:d},api:{available:f,keyConfigured:e}})}return a}}var c=a.i(575675);let d=globalThis;if(!d.__providerRegistry){let a=new b;a.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new c.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.__providerRegistry=a}let e=d.__providerRegistry;a.s(["providerRegistry",0,e],143971)},796544,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795);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(632919).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"4080109083f5a4d4901787d0c9ca64a3763b552df4",null),(0,b.registerServerReference)(f,"40a0fc20a744e0a2d9e393df5dd0310aaf10c9391c",null),(0,b.registerServerReference)(g,"40893ff99bb7ceb2d6956fc8f86f8cee6880c088fd",null),(0,b.registerServerReference)(h,"60497df3d205c43d7f1947ab028bee5ddc724047eb",null),(0,b.registerServerReference)(i,"409abc480662dc07b5891cee50c85f506f0e29955a",null),(0,b.registerServerReference)(j,"60fd0a74b1f7d623d3b669f6cf4b3e32ba765e00d3",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},681638,a=>{"use strict";var b=a.i(680889),c=a.i(233405),d=a.i(814747),e=a.i(446786);function f(a){return a.startsWith("~/")||"~"===a?d.default.join(e.default.homedir(),a.slice(1)):a}async function g(a){if(!a?.trim())return null;let b=d.default.resolve(f(a));try{return(0,c.execSync)("git rev-parse --abbrev-ref HEAD",{cwd:b,encoding:"utf-8",timeout:5e3}).trim()}catch{return null}}async function h(a){if(!a?.trim())return[];let b=d.default.resolve(f(a));try{let a,d;return a=new Set((0,c.execSync)("git branch --format='%(refname:short)'",{cwd:b,encoding:"utf-8",timeout:5e3}).trim().split("\n").filter(Boolean).map(a=>a.replace(/'/g,""))),d=(0,c.execSync)("git branch -r --format='%(refname:short)'",{cwd:b,encoding:"utf-8",timeout:5e3}).trim().split("\n").filter(Boolean).map(a=>a.replace(/'/g,"").replace(/^origin\//,"")).filter(b=>"HEAD"!==b&&!a.has(b)),[...a,...d]}catch{return[]}}async function i(a){if(!a?.trim())return;let b=d.default.resolve(f(a));try{(0,c.spawn)("git",["fetch","--prune"],{cwd:b,stdio:"ignore",detached:!0}).unref()}catch{}}(0,a.i(632919).ensureServerEntryExports)([g,h,i]),(0,b.registerServerReference)(g,"40c2b25b1b9512028e46a309f2751402abb652d0dd",null),(0,b.registerServerReference)(h,"40383800c0e84797f4b651a081e7536b85fa32e2fb",null),(0,b.registerServerReference)(i,"400bb90d83b616b6ebc13fa78d9f4b60812c80eb37",null),a.s(["fetchRemoteBranches",0,i,"getCurrentBranch",0,g,"getProjectBranches",0,h])},979318,a=>a.a(async(b,c)=>{try{a.i(279254),a.i(30292);var d=a.i(322220),e=a.i(727977);a.i(198433),a.i(541587),a.i(681638),a.i(643700),a.i(31782),a.i(796544),a.i(182118);var f=a.i(790146),g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),526763,a=>a.a(async(b,c)=>{try{var d=a.i(979318),e=a.i(279254),f=a.i(30292),g=a.i(322220),h=a.i(727977),i=a.i(198433),j=a.i(541587),k=a.i(681638),l=a.i(643700),m=a.i(31782),n=a.i(796544),o=a.i(182118),p=a.i(790146),q=b([d,g,h,p]);[d,g,h,p]=q.then?(await q)():q,a.s(["00803dfba01a59109739236b9c79eb555dfe726559",()=>h.getActualWsPort,"0088720ea6f78a7d440f0ffe918e2017c6ed4a091c",()=>j.getOnboardingStatus,"40084c89b2285bf95be399366342c9a6aee7f7c56f",()=>e.deleteProject,"4008da5fb2e740b1e3c6df4ff7e170a1140d107426",()=>j.completeOnboarding,"400bb90d83b616b6ebc13fa78d9f4b60812c80eb37",()=>k.fetchRemoteBranches,"4013c88773d9eb1e2401f45a6f7f0d004f6460ddc3",()=>e.createProject,"4013f3990e7ab63645a7a0eba9f894a2dead93edf5",()=>o.createNote,"401428759ab9bf4954951f15e712c11118732f9f15",()=>m.createTask,"402101054ddd73b75c36e8b52c2353fca90c5fea95",()=>l.continueLatestPtyExecution,"4031f43902bbd8a30d1aafd8c1463fca31a0ca6c2e",()=>o.deleteNote,"4033a25d649e20c263ecd33888f119bbd68d23525a",()=>e.getRecentLocalProjects,"40383800c0e84797f4b651a081e7536b85fa32e2fb",()=>k.getProjectBranches,"403ca34cdfe63235addec4c2185b9165f99e7449ba",()=>f.getTaskLabels,"403ff6fb6679e7d59c36b91d1641a70cef02d4b234",()=>l.stopPtyExecution,"40556e416c26c7e086bc6c0026b4f12eee10ce659c",()=>j.setOnboardingProgress,"405df46b2b518ec5fe9eae6a2b958cd0c022087300",()=>m.deleteTask,"405e1016a806f0737b6513e65c99049263410f5b20",()=>p.uploadAsset,"406b1137bf358a90598061a18866c68c753404ac35",()=>o.getTaskNotes,"407818a74d78397b1421f728f63974b3c70235f449",()=>h.resolveGitLocalPath,"407d3b3ed5ed1edbc92d8a6350e88e0e29bdc5626d",()=>p.getTaskAssets,"4080109083f5a4d4901787d0c9ca64a3763b552df4",()=>n.getPrompts,"408115b355b5d59c800f7bc75d3448a2d563196007",()=>l.getTaskExecutions,"408abee9d22d9054dd5a6ecc32b0c3daa69ef66c6e",()=>j.dispatchTaskCompletionEvent,"409f21aa0a1353a1c59d722a1686ba8ed31b4ab68c",()=>m.checkWorktreeClean,"40a0a8500c07adee5c4e9f993dde67c6229d794f81",()=>e.getOrCreateTowerTaskId,"40b3591c77b7bc8565eb59161e29cffb57fe4fe1a5",()=>e.createWorkspace,"40c2b25b1b9512028e46a309f2751402abb652d0dd",()=>k.getCurrentBranch,"40c65d3caeb7cc578408a85b29d3ba4ebe00eb4a89",()=>f.getLabelsForWorkspace,"40eaddcac6fa4edf051cd8d3168d3048a4158112c0",()=>f.createLabel,"40f00a067fb6de012eaf03c9eef4ebf4964d647581",()=>e.deleteWorkspace,"40f109f5cc72d3c8512abb532f19ecdf3d57a9de92",()=>i.checkMigrationSafety,"40f5eb7f5803dd1b46b71a47e34ff8dbe539f1a5e3",()=>p.deleteAsset,"40f5eefd6462353c3411c04d870aa58bea4cab70e8",()=>m.toggleTaskPinned,"40f96ef73252afb252f5b9a67a3e940b91d910020e",()=>f.deleteLabel,"601c654f3d94a3fa93c8a4f803525145ef41461d43",()=>h.getConfigValue,"601e7393f346eeebf241ef05b3c434d1074e6b83ca",()=>h.setConfigValue,"604f648d394271e37eab29c0f0c16170bd75606176",()=>i.migrateProjectPath,"606a6ac57a64d74ac8910b538bca7b8d0286ea4a03",()=>i.analyzeProjectDirectory,"60755b61effe8e442dd2b359fdc73d136e6d4505b1",()=>m.updateTask,"60840bef26147dd4dff7d39641737796069e39069c",()=>m.commitWorktreeChanges,"608940db009d9ab74b2e4d144069b697417c331166",()=>g.globalSearch,"608b3966e751039d81baa4501f75ecbe0e99e30701",()=>f.setTaskLabels,"60a4883fbe9441f4bbb20550d941f5b5c39d7bf696",()=>e.updateWorkspace,"60c351a918c1ee9731291483fb857151355d9f0ca9",()=>m.updateTaskStatus,"60d61a4cf5383e58053ba61c52b70ed758b0042ac6",()=>e.updateProject,"60d8d343d6d5c044dadeb71b8d3a7e5f3fff699d6d",()=>l.resumePtyExecution,"7839f6340d8e220203392fedeee21e01e0831c8012",()=>l.startPtyExecution]),c()}catch(a){c(a)}},!1),939768,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_src_lib_0-pi47a._.js"].map(b=>a.l(b))).then(()=>b(326575)))},585988,a=>{a.v(a=>Promise.resolve().then(()=>a(264572)))},908462,a=>{a.v(a=>Promise.resolve().then(()=>a(961374)))},302452,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_02411e5._.js"].map(b=>a.l(b))).then(()=>b(396477)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},131993,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_0-0bopv._.js"].map(b=>a.l(b))).then(()=>b(23999)))},4868,a=>{a.v(a=>Promise.resolve().then(()=>a(541587)))},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"))},666680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},233405,(a,b,c)=>{b.exports=a.x("child_process",()=>require("child_process"))},961374,a=>{"use strict";var b=a.i(233405),c=a.i(522734),d=a.i(924868),e=a.i(814747),f=a.i(446786),g=a.i(6938);function h(a){return a.startsWith("~/")||"~"===a?e.default.join(f.default.homedir(),a.slice(1)):a}async function i(a,f,i){let j=h(a),k=e.default.join(j,".worktrees","task-"+f),l="task/"+f;await (0,d.mkdir)(e.default.join(j,".worktrees"),{recursive:!0});let m=(0,b.execFileSync)("git",["worktree","list","--porcelain"],{cwd:j,encoding:"utf-8",timeout:1e4}),n=e.default.normalize(k).replace(/\\/g,"/");if(m.split("\n").some(a=>a.startsWith("worktree ")&&a.slice(9).replace(/\\/g,"/")===n))return{worktreePath:k,worktreeBranch:l};if((0,c.existsSync)(k)&&(g.logger.warn(`[worktree] Directory exists but not tracked by git, removing: ${k}`),(0,b.execFileSync)("git",["worktree","remove",k,"--force"],{cwd:j,encoding:"utf-8",timeout:3e4})),(0,b.execFileSync)("git",["branch","--list",l],{cwd:j,encoding:"utf-8",timeout:5e3}).trim())(0,b.execFileSync)("git",["worktree","add",k,l],{cwd:j,encoding:"utf-8",timeout:3e4});else{let a=i;try{(0,b.execFileSync)("git",["rev-parse","--verify",i],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]})}catch{try{(0,b.execFileSync)("git",["rev-parse","--verify",`origin/${i}`],{cwd:j,encoding:"utf-8",timeout:5e3,stdio:["pipe","pipe","pipe"]}),a=`origin/${i}`}catch{throw Error(`Base branch '${i}' does not exist locally or on remote. Available branches: `+(0,b.execFileSync)("git",["branch","-a","--format=%(refname:short)"],{cwd:j,encoding:"utf-8",timeout:5e3}).trim().split("\n").join(", "))}}(0,b.execFileSync)("git",["worktree","add","-b",l,k,a],{cwd:j,encoding:"utf-8",timeout:3e4})}return function(a,b){let d=g.logger.create("worktree");for(let f of["node_modules",".next"]){let g=e.default.join(a,f),h=e.default.join(b,f);if((0,c.existsSync)(g)){try{(0,c.lstatSync)(h);continue}catch{}try{(0,c.symlinkSync)(g,h,"junction"),d.info(`Symlinked ${f}`,{from:g,to:h})}catch(a){d.warn(`Failed to symlink ${f}`,{error:String(a)})}}}}(j,k),{worktreePath:k,worktreeBranch:l}}async function j(a,d){let f=h(a),g=e.default.join(f,".worktrees","task-"+d),i="task/"+d;(0,c.existsSync)(g)&&(0,b.execFileSync)("git",["worktree","remove",g,"--force"],{cwd:f,encoding:"utf-8",timeout:3e4}),(0,b.execFileSync)("git",["branch","--list",i],{cwd:f,encoding:"utf-8",timeout:5e3}).trim()&&(0,b.execFileSync)("git",["branch","-D",i],{cwd:f,encoding:"utf-8",timeout:5e3})}a.s(["createWorktree",0,i,"removeWorktree",0,j])},31782,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(30292),f=a.i(961374),g=a.i(96063),h=a.i(232779),i=a.i(6938),j=a.i(632919);let k=i.logger.create("task-actions");async function l(a){let b=h.createTaskSchema.parse(a),e=await c.db.task.create({data:{title:b.title,description:b.description,projectId:b.projectId,priority:b.priority??"MEDIUM",status:b.status??"TODO",baseBranch:b.baseBranch??null,subPath:b.subPath??null}});return b.labelIds&&b.labelIds.length>0&&await c.db.taskLabel.createMany({data:b.labelIds.map(a=>({taskId:e.id,labelId:a}))}),(0,d.revalidatePath)("/workspaces"),e}async function m(b,e){h.taskStatusSchema.parse(e);let g=await c.db.task.update({where:{id:b},data:{status:e},include:{project:!0}});if("DONE"===e&&!g.baseBranch&&g.project?.localPath)try{let{execFileSync:d}=await a.A(144264),e=d("git",["rev-parse","HEAD"],{cwd:g.project.localPath,encoding:"utf-8",timeout:5e3}).trim();if(e){let a=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});a&&await c.db.taskExecution.update({where:{id:a.id},data:{mergeCommit:e}})}}catch{}if("DONE"===e&&a.A(131993).then(({captureTaskDreaming:a})=>{a(b).catch(()=>{})}).catch(()=>{}),"CANCELLED"===e&&g.project?.localPath)try{await (0,f.removeWorktree)(g.project.localPath,b)}catch(a){k.error("Worktree cleanup failed",a,{taskId:b})}return(0,d.revalidatePath)("/workspaces"),g}async function n(a,b){let{labelIds:f,...g}=h.updateTaskSchema.parse(b),i=await c.db.task.update({where:{id:a},data:g});return void 0!==f&&await (0,e.setTaskLabels)(a,f),(0,d.revalidatePath)("/workspaces"),i}async function o(a){g.z.string().cuid().parse(a);let b=await c.db.task.findUniqueOrThrow({where:{id:a},select:{pinned:!0}}),e=await c.db.task.update({where:{id:a},data:{pinned:!b.pinned}});return(0,d.revalidatePath)("/workspaces"),e}async function p(b){let e=await c.db.task.findUnique({where:{id:b},include:{project:!0}});if(e?.project?.localPath)try{await (0,f.removeWorktree)(e.project.localPath,b)}catch{}try{let{destroySession:c}=await a.A(585988);c(b)}catch{}await c.db.task.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function q(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,OR:[{status:{notIn:["DONE","CANCELLED"]}},{status:{in:["DONE","CANCELLED"]},updatedAt:{gte:b}}]},orderBy:[{pinned:"desc"},{order:"asc"},{createdAt:"desc"}]})}async function r(a){return a.trim()?c.db.task.findMany({where:{OR:[{title:{contains:a}},{description:{contains:a}}]},include:{project:{include:{workspace:!0}}},take:20,orderBy:{updatedAt:"desc"}}):[]}async function s(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.findMany({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1}},orderBy:{updatedAt:"desc"}})}async function t(b){let{execFileSync:d}=await a.A(144264),{existsSync:e}=await a.A(323970),f=await c.db.task.findUnique({where:{id:b}}),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!e(g.worktreePath))return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!1};let h=g.worktreePath,i=f?.baseBranch||"main";try{let a=d("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=a?a.split("\n").map(a=>a.trim()).filter(Boolean):[],c=0===b.length,e=!1,f=null,g=[];try{let a=d("git",["merge-base",i,"HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim(),b=d("git",["rev-list","--count",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();if(e=parseInt(b,10)>0){f=d("git",["log","-1","--format=%B"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();let b=d("git",["log","--oneline",`${a}..HEAD`],{cwd:h,encoding:"utf-8",timeout:5e3}).trim();g=b?b.split("\n").filter(Boolean):[]}}catch{}return{clean:c,files:b,hasCommits:e,lastCommitMessage:f,commitLog:g,hasWorktree:!0}}catch{return{clean:!0,files:[],hasCommits:!1,lastCommitMessage:null,commitLog:[],hasWorktree:!0}}}async function u(b,d){let{execFileSync:e}=await a.A(144264),{existsSync:f}=await a.A(323970),g=await c.db.taskExecution.findFirst({where:{taskId:b},orderBy:{createdAt:"desc"}});if(!g?.worktreePath||!f(g.worktreePath))throw Error("No active worktree for this task");let h=g.worktreePath;if(e("git",["add","-A"],{cwd:h,timeout:1e4}),!e("git",["status","--porcelain"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim())throw Error("No changes to commit");return e("git",["commit","-m",d],{cwd:h,encoding:"utf-8",timeout:15e3}),{hash:e("git",["rev-parse","--short","HEAD"],{cwd:h,encoding:"utf-8",timeout:5e3}).trim()}}async function v(a){return/^c[a-z0-9]{20,30}$/.test(a)?c.db.task.findUnique({where:{id:a},include:{labels:{include:{label:!0}},executions:{orderBy:{createdAt:"desc"},take:1,select:{summary:!0,status:!0,endedAt:!0}},_count:{select:{assets:!0}}}}):null}async function w(a){let b=new Date;return b.setHours(0,0,0,0),c.db.task.count({where:{projectId:a,status:{in:["DONE","CANCELLED"]},updatedAt:{lt:b}}})}(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s,t,u,v,w]),(0,b.registerServerReference)(l,"40622d25277e3c11015df1608e15d738bebaf6e879",null),(0,b.registerServerReference)(m,"60d8d8ed534f28b32d271c58f8f9f2511c65003bdb",null),(0,b.registerServerReference)(n,"605b03fbb419cd1a1831e8464a8242d82cdae18ae6",null),(0,b.registerServerReference)(o,"40a7e4fdd6803b7d8447525be3097063e42fc480f2",null),(0,b.registerServerReference)(p,"4037a0d2f662d32e4dd9a4b1a619489e9fdf17d735",null),(0,b.registerServerReference)(q,"402b8c5867f9414d72e69d6b9b5aa8f56b6f453a36",null),(0,b.registerServerReference)(r,"4022ff111b8a8abaefd935dae43bc6e25fdac3b561",null),(0,b.registerServerReference)(s,"404e0860b4ac94b0d1f5050116c3c308ee36d55862",null),(0,b.registerServerReference)(t,"40ec4f72b679f0487a21d7166d20412c1d3e4f1feb",null),(0,b.registerServerReference)(u,"6030bc338dcedc06ab38184da02f82e242e2e73465",null),(0,b.registerServerReference)(v,"408bb641755358e099b0f600083d554bdece767654",null),(0,b.registerServerReference)(w,"40a90813a2de2ddd04c90819beeddce2193366c1b2",null),a.s(["checkWorktreeClean",0,t,"commitWorktreeChanges",0,u,"createTask",0,l,"deleteTask",0,p,"getArchivedTaskCount",0,w,"getArchivedTasks",0,s,"getProjectTasks",0,q,"getTaskOverview",0,v,"searchTasks",0,r,"toggleTaskPinned",0,o,"updateTask",0,n,"updateTaskStatus",0,m])},182118,a=>{"use strict";var b=a.i(680889),c=a.i(96063),d=a.i(832116),e=a.i(972795);async function f(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 g(a,b){await a.$executeRawUnsafe("DELETE FROM notes_fts WHERE note_id = ?",b)}var h=a.i(632919);let i=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()}),j=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 k(a){let b=i.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 f(d.db,{id:c.id,title:c.title,content:c.content}),(0,e.revalidatePath)("/workspace"),c}async function l(a,b){let c=j.parse(b),g=await d.db.projectNote.update({where:{id:a},data:c});return await f(d.db,{id:g.id,title:g.title,content:g.content}),(0,e.revalidatePath)("/workspace"),g}async function m(a){await g(d.db,a),await d.db.projectNote.delete({where:{id:a}}),(0,e.revalidatePath)("/workspace")}async function n(a){return d.db.projectNote.findUnique({where:{id:a}})}async function o(a,b){return d.db.projectNote.findMany({where:{projectId:a,taskId:null,...b?.category?{category:b.category}:{}},orderBy:{updatedAt:"desc"}})}async function p(a){return d.db.projectNote.findMany({where:{taskId:a},orderBy:{updatedAt:"desc"}})}(0,h.ensureServerEntryExports)([k,l,m,n,o,p]),(0,b.registerServerReference)(k,"40940832d36497429d52382d540b1bf916483d4ff0",null),(0,b.registerServerReference)(l,"60fd07387627fb28024e08245f24cc8cd18347f5cb",null),(0,b.registerServerReference)(m,"401c6f7273a2bd99db85bd7b590adde9bc449d70ea",null),(0,b.registerServerReference)(n,"406e10b0e5b005a636bfffc0179d25602c1e985623",null),(0,b.registerServerReference)(o,"606a92319e6dd1574993c46e3d1c683e6e8b915cb7",null),(0,b.registerServerReference)(p,"40c2ab0119ffd4ced8f4a8114ec09a995edc21b272",null),a.s(["createNote",0,k,"deleteNote",0,m,"getNoteById",0,n,"getProjectNotes",0,o,"getTaskNotes",0,p,"updateNote",0,l],182118)},532941,a=>{"use strict";let b,c;a.i(666680);var d=a.i(902157),e=a.i(750227),f=a.i(660526);let g=(c=(0,e.join)((b||(b=(0,e.join)((0,f.homedir)(),".tower"),(0,d.existsSync)(b)||(0,d.mkdirSync)(b,{recursive:!0})),b),"storage"),(0,d.existsSync)(c)||(0,d.mkdirSync)(c,{recursive:!0}),c);a.s(["ensureAssetsDir",0,function(a){let b=function(a){let b=e.join(g,"assets",a);if(!b.startsWith(g+e.sep))throw Error("Path traversal detected");return b}(a);return d.mkdirSync(b,{recursive:!0}),b}],532941)},790146,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(902157),f=a.i(750227),g=a.i(96063),h=a.i(832116),i=a.i(972795),j=a.i(532941),k=a.i(727977),l=a.i(632919),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,"402a270104dd43ff67a00ab430520f1f65af0d274e",null),(0,d.registerServerReference)(o,"402824ab66f9a2d99e981123aa9da50142d1e9f49c",null),(0,d.registerServerReference)(p,"4023e55fcbc73de4c49711b7198b753038ecf19f43",null),(0,d.registerServerReference)(q,"400ea84e8a7836f87ab0e72d3b669f65e54ac05662",null),(0,d.registerServerReference)(r,"40f0a42ba59be80b672d891fdf705234948fc34b65",null),(0,d.registerServerReference)(s,"4080a7229d9c52869922953b0691c8cfb8683cfd7c",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),575675,a=>{"use strict";var b=a.i(902157),c=a.i(660526),d=a.i(750227),e=a.i(912206);let f=["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=[];a.profileArgs?.length&&b.push(...a.profileArgs),a.resumeSessionId?b.push("--resume",a.resumeSessionId):a.continueLatest?b.push("--continue"):a.prompt&&b.push(a.prompt);let c={...a.profileEnvVars??{},...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){let b=this.readSettings(),c=b.hooks??{},e=this.getPostToolUseArray(b);if(this.findTowerHookIndex(e)>=0)return;let f=d.join(process.cwd(),"scripts","post-tool-hook.js"),g={hooks:[{command:`node "${f}"`,timeout:10,type:"command"}],matcher:"Write|Edit|MultiEdit"};b.hooks={...c,PostToolUse:[...e,g]},this.writeSettings(b)}async uninstallHooks(){let a=this.readSettings(),b=a.hooks??{},c=this.getPostToolUseArray(a).filter(a=>!a.hooks?.some(a=>a.command?.includes("post-tool-hook.js")));a.hooks={...b,PostToolUse:c},this.writeSettings(a)}async isHooksInstalled(){let a=this.readSettings(),b=this.getPostToolUseArray(a);return this.findTowerHookIndex(b)>=0}async isAvailable(){return null!==await this.getVersion()}async getVersion(){try{let{execFile:b}=await a.A(144264),{promisify:c}=await a.A(534777),d=c(b),e=this.resolveCommand(),{stdout:f}=await d(e,["--version"],{timeout:5e3});return f.trim()||null}catch{return null}}async getModels(){return f}getConfigDir(){return d.join(c.homedir(),".claude")}getSettingsPath(){return d.join(this.getConfigDir(),"settings.json")}getSessionsDir(){return d.join(this.getConfigDir(),"projects")}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")}getPostToolUseArray(a){let b=a.hooks;if(!b)return[];let c=b.PostToolUse;return Array.isArray(c)?c:[]}findTowerHookIndex(a){return a.findIndex(a=>a.hooks?.some(a=>a.command?.includes("post-tool-hook.js")))}}])},143971,a=>{"use strict";class b{providers=new Map;register(a){this.providers.set(a.name,a)}get(a){return this.providers.get(a)}getAll(){return Array.from(this.providers.values())}getCliAdapter(a){return this.providers.get(a)?.cli?.adapter??null}getQueryAdapter(a,b){let c=this.providers.get(a);return c?"api"===b?c.api?.adapter??null:c.cliQuery?.adapter??null:null}getAllowedCommands(){let a=[];for(let b of this.providers.values())b.cli?.command&&a.push(b.cli.command);return a}async getAvailableProviders(){let a=[];for(let b of this.providers.values()){let c=!!b.cli&&await b.cli.adapter.isAvailable(),d=c&&b.cli?await b.cli.adapter.getVersion():null,e=!!b.api&&!!process.env[b.api.keyEnvVar],f=!!b.api&&e;a.push({name:b.name,displayName:b.displayName,cli:{available:c,version:d},api:{available:f,keyConfigured:e}})}return a}}var c=a.i(575675);let d=globalThis;if(!d.__providerRegistry){let a=new b;a.register({name:"claude",displayName:"Claude Code",agentFieldValue:"CLAUDE_CODE",cli:{command:"claude",adapter:new c.ClaudeCliAdapter},models:{cli:["sonnet","opus","haiku","claude-sonnet-4-6","claude-opus-4-6","claude-haiku-4-5-20251001"],api:[]}}),d.__providerRegistry=a}let e=d.__providerRegistry;a.s(["providerRegistry",0,e],143971)},796544,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795);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(632919).ensureServerEntryExports)([e,f,g,h,i,j]),(0,b.registerServerReference)(e,"40b2fed3c8e27c9a082b7c8dd48ccbc23887a13c78",null),(0,b.registerServerReference)(f,"401fd17976fc087cd2f586dc6a6e266a993231951b",null),(0,b.registerServerReference)(g,"4068de3108c895bba61c2707fd8fce9e44f2901808",null),(0,b.registerServerReference)(h,"607a657536f031e36c1b88fa62f59f39c052b98fd8",null),(0,b.registerServerReference)(i,"40405b1d5283d0c85b87ad1a8931e9f5787ccbbe8e",null),(0,b.registerServerReference)(j,"6064b117a304dfb3ec8c3d3611334d2601fe82ac7e",null),a.s(["createPrompt",0,g,"deletePrompt",0,i,"getPrompts",0,e,"setDefaultPrompt",0,j,"updatePrompt",0,h])},681638,a=>{"use strict";var b=a.i(680889),c=a.i(233405),d=a.i(814747),e=a.i(446786);function f(a){return a.startsWith("~/")||"~"===a?d.default.join(e.default.homedir(),a.slice(1)):a}async function g(a){if(!a?.trim())return null;let b=d.default.resolve(f(a));try{return(0,c.execSync)("git rev-parse --abbrev-ref HEAD",{cwd:b,encoding:"utf-8",timeout:5e3}).trim()}catch{return null}}async function h(a){if(!a?.trim())return[];let b=d.default.resolve(f(a));try{let a,d;return a=new Set((0,c.execSync)("git branch --format='%(refname:short)'",{cwd:b,encoding:"utf-8",timeout:5e3}).trim().split("\n").filter(Boolean).map(a=>a.replace(/'/g,""))),d=(0,c.execSync)("git branch -r --format='%(refname:short)'",{cwd:b,encoding:"utf-8",timeout:5e3}).trim().split("\n").filter(Boolean).map(a=>a.replace(/'/g,"").replace(/^origin\//,"")).filter(b=>"HEAD"!==b&&!a.has(b)),[...a,...d]}catch{return[]}}async function i(a){if(!a?.trim())return;let b=d.default.resolve(f(a));try{(0,c.spawn)("git",["fetch","--prune"],{cwd:b,stdio:"ignore",detached:!0}).unref()}catch{}}(0,a.i(632919).ensureServerEntryExports)([g,h,i]),(0,b.registerServerReference)(g,"400a68fcfd8e23d942b0e9b2d92885f07ea2c1d72c",null),(0,b.registerServerReference)(h,"40f524d6493153a89d590b16ee996054b3514860a3",null),(0,b.registerServerReference)(i,"40a5f85730bae3711a1ed0a8c8898d5153719e0b91",null),a.s(["fetchRemoteBranches",0,i,"getCurrentBranch",0,g,"getProjectBranches",0,h])},979318,a=>a.a(async(b,c)=>{try{a.i(279254),a.i(30292);var d=a.i(322220),e=a.i(727977);a.i(198433),a.i(541587),a.i(681638),a.i(643700),a.i(31782),a.i(796544),a.i(182118);var f=a.i(790146),g=b([d,e,f]);[d,e,f]=g.then?(await g)():g,a.s([]),c()}catch(a){c(a)}},!1),526763,a=>a.a(async(b,c)=>{try{var d=a.i(979318),e=a.i(279254),f=a.i(30292),g=a.i(322220),h=a.i(727977),i=a.i(198433),j=a.i(541587),k=a.i(681638),l=a.i(643700),m=a.i(31782),n=a.i(796544),o=a.i(182118),p=a.i(790146),q=b([d,g,h,p]);[d,g,h,p]=q.then?(await q)():q,a.s(["00c5a0d3b9b146d2731747fe1a416361d4501fba21",()=>h.getActualWsPort,"00f7de3735ec23dbbe02b347b3b27fe3293c72dd51",()=>j.getOnboardingStatus,"4002a489b8ddf18fe0011eb46ac0739ec3e093a5bf",()=>j.dispatchTaskCompletionEvent,"4003b61cd97c8f82a902ab8b7c3de8d596040b5df5",()=>f.getTaskLabels,"400a68fcfd8e23d942b0e9b2d92885f07ea2c1d72c",()=>k.getCurrentBranch,"400ea84e8a7836f87ab0e72d3b669f65e54ac05662",()=>p.getTaskAssets,"401227c576cd75dc12c7d7ef6c4acb53b48d853e45",()=>e.getRecentLocalProjects,"401c6f7273a2bd99db85bd7b590adde9bc449d70ea",()=>o.deleteNote,"401f463b01e74265a5a0f6a651625dbaa23ce7f0de",()=>l.stopPtyExecution,"4025e96d25637009a8b378148032220c259e2e209b",()=>e.deleteWorkspace,"402824ab66f9a2d99e981123aa9da50142d1e9f49c",()=>p.deleteAsset,"4036dc278fce434992e90dd8958b9fa89e1c22580c",()=>l.continueLatestPtyExecution,"4037a0d2f662d32e4dd9a4b1a619489e9fdf17d735",()=>m.deleteTask,"405330cd9709f40037aa83521bdac7044a93b13641",()=>l.getTaskExecutions,"405e24a96c3040b977262f38c5e06b74894259e0be",()=>j.completeOnboarding,"40622d25277e3c11015df1608e15d738bebaf6e879",()=>m.createTask,"406303a55224e2a9384b4ad81ed3a003d67d23c0a5",()=>f.getLabelsForWorkspace,"406d0755627b7578b91d776cec0fe19e1bb6bfc1e3",()=>j.setOnboardingProgress,"407cbea3859811102573ba8273dc5d88a5d811928c",()=>h.resolveGitLocalPath,"40805f406dafafbee2bc2893759657900a249fb949",()=>i.checkMigrationSafety,"4080a7229d9c52869922953b0691c8cfb8683cfd7c",()=>p.uploadAsset,"40940832d36497429d52382d540b1bf916483d4ff0",()=>o.createNote,"40a5f85730bae3711a1ed0a8c8898d5153719e0b91",()=>k.fetchRemoteBranches,"40a7e4fdd6803b7d8447525be3097063e42fc480f2",()=>m.toggleTaskPinned,"40b2fed3c8e27c9a082b7c8dd48ccbc23887a13c78",()=>n.getPrompts,"40b43304845d2ab1bbfcca9e8a22572005f72fdee2",()=>e.createWorkspace,"40c2ab0119ffd4ced8f4a8114ec09a995edc21b272",()=>o.getTaskNotes,"40c3e283c4bc09dd0ddeac0fee2d5450add9aba2ef",()=>e.deleteProject,"40d6e8e588bda631b24c5a0e2c634b36786afb4521",()=>e.getOrCreateTowerTaskId,"40de3b59acefdad3d4c0fe96d99c53f2e3910bc5c4",()=>f.createLabel,"40ec4f72b679f0487a21d7166d20412c1d3e4f1feb",()=>m.checkWorktreeClean,"40f2f8dd87569241d7237d8e6d9c1062d583dceda0",()=>f.deleteLabel,"40f524d6493153a89d590b16ee996054b3514860a3",()=>k.getProjectBranches,"40f9512bdf19e6f9f4f666ec480b5d2a34184f2c20",()=>e.createProject,"602e857033f412e1832ad1c46ff2b99c02da07294f",()=>l.resumePtyExecution,"6030bc338dcedc06ab38184da02f82e242e2e73465",()=>m.commitWorktreeChanges,"60422a3dcf869aca6ad2360fc07fff8f7ad667284c",()=>e.updateWorkspace,"6051c20539a0938b9860bfe0dfe34cf20c41177e85",()=>g.globalSearch,"60580b8893845b30deedffa8257cbf297fee7c5689",()=>h.setConfigValue,"6058bc084dfc8fd7335c86f6b96805b28fbfade91d",()=>h.getConfigValue,"605b03fbb419cd1a1831e8464a8242d82cdae18ae6",()=>m.updateTask,"60b8da241b1f9f2d12f9b07df697c5d7cc38d4d2a6",()=>e.updateProject,"60d8d8ed534f28b32d271c58f8f9f2511c65003bdb",()=>m.updateTaskStatus,"60d8faa80f7dca8aa639744b42cee7f20ac78660cd",()=>i.analyzeProjectDirectory,"60dad40412789acec09a60682d0db5d3e0a476cac3",()=>f.setTaskLabels,"60f6737005b46b8cdbcf37d9f3db70c559c509ad1a",()=>i.migrateProjectPath,"78fb8fa47faed28ab00400d74b16e6f120e94f9b12",()=>l.startPtyExecution]),c()}catch(a){c(a)}},!1),939768,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_src_lib_0-pi47a._.js"].map(b=>a.l(b))).then(()=>b(326575)))},585988,a=>{a.v(a=>Promise.resolve().then(()=>a(264572)))},908462,a=>{a.v(a=>Promise.resolve().then(()=>a(961374)))},302452,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_02411e5._.js"].map(b=>a.l(b))).then(()=>b(396477)))},144264,a=>{a.v(a=>Promise.resolve().then(()=>a(233405)))},534777,a=>{a.v(a=>Promise.resolve().then(()=>a(224361)))},131993,a=>{a.v(b=>Promise.all(["server/chunks/ssr/project_f_tower_0-0bopv._.js"].map(b=>a.l(b))).then(()=>b(23999)))},4868,a=>{a.v(a=>Promise.resolve().then(()=>a(541587)))},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__0fwuc5u._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[951682,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""}])},279254,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(232779),f=a.i(951682);async function g(){return c.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function h(a){return c.db.workspace.findUnique({where:{id:a},include:{projects:{include:{tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}]},repositories:!0}}}})}async function i(a){let b=e.createWorkspaceSchema.parse(a),f=await c.db.workspace.create({data:b});return(0,d.revalidatePath)("/workspaces"),f}async function j(a,b){let f=e.updateWorkspaceSchema.parse(b),g=await c.db.workspace.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),g}async function k(a){if(await c.db.workspace.count()<=1)throw Error("Cannot delete the last workspace");await c.db.workspace.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces")}async function l(b){let g=e.createProjectSchema.parse(b),h=await c.db.project.create({data:{name:g.name,alias:g.alias,description:g.description,type:g.gitUrl?"GIT":"NORMAL",gitUrl:g.gitUrl||void 0,localPath:g.localPath?(0,f.expandHome)(g.localPath):void 0,projectType:g.projectType,previewCommand:g.previewCommand,workspaceId:g.workspaceId}});try{let{ensureTowerTask:b}=await a.A(939768);await b(h.id,g.name)}catch(a){console.warn("Failed to auto-create Tower task",a)}return(0,d.revalidatePath)("/workspaces"),h}async function m(a,b){let g={...e.updateProjectSchema.parse(b)};g.localPath&&(g.localPath=(0,f.expandHome)(g.localPath));let h=await c.db.project.update({where:{id:a},data:g});return(0,d.revalidatePath)("/workspaces"),h}async function n(b){let e=await c.db.task.findMany({where:{projectId:b},include:{project:{select:{localPath:!0}}}}),{destroySession:f}=await a.A(585988),{removeWorktree:g}=await a.A(908462);for(let a of e){try{f(a.id)}catch{}if(await c.db.taskExecution.updateMany({where:{taskId:a.id,status:{in:["PENDING","RUNNING","PAUSED"]}},data:{status:"FAILED",endedAt:new Date}}),a.project?.localPath)try{await g(a.project.localPath,a.id)}catch{}["DONE","CANCELLED"].includes(a.status)||await c.db.task.update({where:{id:a.id},data:{status:"CANCELLED"}})}await c.db.project.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function o(a){return c.db.project.findFirst({where:{localPath:a},include:{workspace:!0}})}async function p(a=3){return c.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"]}},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"]}}}}}},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function q(a=10){return c.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 r(b){let d=await c.db.project.findUnique({where:{id:b},select:{id:!0,name:!0}});if(!d)throw Error("Project not found");let{ensureTowerTask:e}=await a.A(939768);return e(d.id,d.name)}(0,a.i(632919).ensureServerEntryExports)([g,h,i,j,k,l,m,n,o,p,q,r]),(0,b.registerServerReference)(g,"009e9eb06b5d880738cdc44ef434941a72e320e010",null),(0,b.registerServerReference)(h,"40e11907297db22577c19b0852a3c22e191d9bab8a",null),(0,b.registerServerReference)(i,"40b3591c77b7bc8565eb59161e29cffb57fe4fe1a5",null),(0,b.registerServerReference)(j,"60a4883fbe9441f4bbb20550d941f5b5c39d7bf696",null),(0,b.registerServerReference)(k,"40f00a067fb6de012eaf03c9eef4ebf4964d647581",null),(0,b.registerServerReference)(l,"4013c88773d9eb1e2401f45a6f7f0d004f6460ddc3",null),(0,b.registerServerReference)(m,"60d61a4cf5383e58053ba61c52b70ed758b0042ac6",null),(0,b.registerServerReference)(n,"40084c89b2285bf95be399366342c9a6aee7f7c56f",null),(0,b.registerServerReference)(o,"4032075180d73f329cca1ea967021d020837bcbda7",null),(0,b.registerServerReference)(p,"40535a6a38bc5b8149d6178b949a6f89b1307d6d44",null),(0,b.registerServerReference)(q,"4033a25d649e20c263ecd33888f119bbd68d23525a",null),(0,b.registerServerReference)(r,"40a0a8500c07adee5c4e9f993dde67c6229d794f81",null),a.s(["createProject",0,l,"createWorkspace",0,i,"deleteProject",0,n,"deleteWorkspace",0,k,"getOrCreateTowerTaskId",0,r,"getProjectByLocalPath",0,o,"getRecentLocalProjects",0,q,"getWorkspaceById",0,h,"getWorkspacesWithProjects",0,g,"getWorkspacesWithRecentTasks",0,p,"updateProject",0,m,"updateWorkspace",0,j])},509270,a=>{"use strict";a.s(["CONFIG_DEFAULTS",0,{"git.pathMappingRules":{defaultValue:[],type:"object",label:"Git Path Mapping Rules"},"system.maxUploadBytes":{defaultValue:0x3200000,type:"number",label:"Max Upload Size (bytes)"},"system.maxConcurrentExecutions":{defaultValue:20,type:"number",label:"Max Concurrent Executions"},"git.timeoutSec":{defaultValue:30,type:"number",label:"Git Operation Timeout (seconds)"},"search.resultLimit":{defaultValue:20,type:"number",label:"Search Result Limit"},"search.allModeCap":{defaultValue:5,type:"number",label:"All-Mode Per-Type Cap"},"search.debounceMs":{defaultValue:250,type:"number",label:"Search Debounce (ms)"},"search.snippetLength":{defaultValue:80,type:"number",label:"Snippet Length (characters)"},"missions.grid.minCols":{defaultValue:1,type:"number",label:"Grid Min Columns"},"missions.grid.maxCols":{defaultValue:5,type:"number",label:"Grid Max Columns"},"missions.grid.minRows":{defaultValue:1,type:"number",label:"Grid Min Rows"},"missions.grid.maxRows":{defaultValue:5,type:"number",label:"Grid Max Rows"},"terminal.app":{defaultValue:"Terminal",type:"string",label:"Default Terminal App"},"terminal.wsPort":{defaultValue:3001,type:"number",label:"WebSocket Port"},"terminal.idleTimeoutSec":{defaultValue:180,type:"number",label:"Idle Timeout (seconds)"},"assistant.systemPrompt":{defaultValue:'You are Tower Assistant — the built-in AI operator for the Tower task management platform.\n\n## Identity\n- You are a task management operator, NOT a coding assistant.\n- You can ONLY use Tower MCP tools. You CANNOT read files, edit code, run shell commands, or search the web.\n- Always respond in the same language the user uses.\n\n## Capabilities\nWhen users ask what you can do, respond with EXACTLY these 6 groups. Translate to the user\'s language.\n\n1. **Workspace & Project** — View, create, update, delete workspaces and projects. Search projects and repositories.\n2. **Task Management** — Create tasks (priority, labels, worktree branch isolation, sub-path, auto-start). Move task status (TODO → IN_PROGRESS → IN_REVIEW → DONE / CANCELLED). Update task info and labels.\n3. **Execution Monitor** — Start task execution, check execution status, get terminal output, send commands to running terminals.\n4. **Daily Report & Todo** — Generate daily work summary (completed + in-progress). View pending task list sorted by priority.\n5. **Labels & Notes & Assets** — Manage workspace labels, project notes, and file attachments.\n6. **Global Search** — Search tasks, projects, repositories, notes, and assets by keyword.\n\nDo NOT list any capabilities beyond the above. Do NOT mention code editing, debugging, testing, git operations, or any development capabilities.\n\n## Scope Boundary\nIf the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply:\n"抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。"',type:"string",label:"Assistant System Prompt"},"assistant.displayMode":{defaultValue:"sidebar",type:"string",label:"Assistant Display Mode"},"assistant.communicationMode":{defaultValue:"chat",type:"string",label:"Assistant Communication Mode"}}])},727977,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(832116),f=a.i(509270),g=a.i(951682),h=a.i(912206),i=a.i(155482),j=a.i(632919),k=b([i]);async function l(a,b){let c=await e.db.systemConfig.findUnique({where:{key:a}});if(!c)return b;try{return JSON.parse(c.value)}catch{return b}}async function m(a,b){await e.db.systemConfig.upsert({where:{key:a},create:{key:a,value:JSON.stringify(b)},update:{value:JSON.stringify(b)}})}async function n(a){let b=a.trim();if(!b)return"";try{let a=await l("git.pathMappingRules",[]),c=(0,g.matchGitPathRule)(b,a);if(c)return c;return(0,g.gitUrlToLocalPath)(b)}catch{return(0,g.gitUrlToLocalPath)(b)}}async function o(a){let b=await e.db.systemConfig.findMany({where:{key:{in:a}}}),c=Object.fromEntries(b.map(a=>{try{return[a.key,JSON.parse(a.value)]}catch{return[a.key,null]}})),d={};for(let b of a)d[b]=b in c?c[b]:f.CONFIG_DEFAULTS[b]?.defaultValue??null;return d}async function p(){return(0,h.detectShells)()}async function q(){return(0,h.detectTerminalApps)()}async function r(){return{platform:process.platform}}async function s(){let a=(0,i.getActiveWsPort)();if(null!==a)return a;let b=parseInt(process.env.PORT||"3000",10);return l("terminal.wsPort",b+1)}[i]=k.then?(await k)():k,(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s]),(0,d.registerServerReference)(l,"601c654f3d94a3fa93c8a4f803525145ef41461d43",null),(0,d.registerServerReference)(m,"601e7393f346eeebf241ef05b3c434d1074e6b83ca",null),(0,d.registerServerReference)(n,"407818a74d78397b1421f728f63974b3c70235f449",null),(0,d.registerServerReference)(o,"4002d8571b6bdf58868e87d1d81f586b88cf87057e",null),(0,d.registerServerReference)(p,"00dc83ca75dab2999e6136bac0e662b581de2a9e72",null),(0,d.registerServerReference)(q,"00b7bf47e3452b8d8e8894dcd22bb8e41da7341170",null),(0,d.registerServerReference)(r,"0043b9754ea16d04f37721188273542591d340592c",null),(0,d.registerServerReference)(s,"00803dfba01a59109739236b9c79eb555dfe726559",null),a.s(["getActualWsPort",0,s,"getAvailableShells",0,p,"getAvailableTerminalApps",0,q,"getConfigValue",0,l,"getConfigValues",0,o,"getPlatformInfo",0,r,"resolveGitLocalPath",0,n,"setConfigValue",0,m]),c()}catch(a){c(a)}},!1),522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},30292,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(232779);async function f(a){return c.db.label.findMany({where:{OR:[{isBuiltin:!0},{workspaceId:a}]},orderBy:[{isBuiltin:"desc"},{name:"asc"}]})}async function g(a){let b=e.createLabelSchema.parse(a),f=await c.db.label.create({data:{name:b.name,color:b.color,workspaceId:b.workspaceId}});return(0,d.revalidatePath)("/workspaces"),f}async function h(a){let b=await c.db.label.findUnique({where:{id:a}});if(!b)throw Error("Label not found");if(b.isBuiltin)throw Error("Cannot delete builtin labels");await c.db.label.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces")}async function i(a,b){await c.db.$transaction(async c=>{await c.taskLabel.deleteMany({where:{taskId:a}}),b.length>0&&await c.taskLabel.createMany({data:b.map(b=>({taskId:a,labelId:b}))})}),(0,d.revalidatePath)("/workspaces")}async function j(a){return(await c.db.taskLabel.findMany({where:{taskId:a},include:{label:!0}})).map(a=>a.label)}(0,a.i(632919).ensureServerEntryExports)([f,g,h,i,j]),(0,b.registerServerReference)(f,"40c65d3caeb7cc578408a85b29d3ba4ebe00eb4a89",null),(0,b.registerServerReference)(g,"40eaddcac6fa4edf051cd8d3168d3048a4158112c0",null),(0,b.registerServerReference)(h,"40f96ef73252afb252f5b9a67a3e940b91d910020e",null),(0,b.registerServerReference)(i,"608b3966e751039d81baa4501f75ecbe0e99e30701",null),(0,b.registerServerReference)(j,"403ca34cdfe63235addec4c2185b9165f99e7449ba",null),a.s(["createLabel",0,g,"deleteLabel",0,h,"getLabelsForWorkspace",0,f,"getTaskLabels",0,j,"setTaskLabels",0,i])},213803,a=>{"use strict";var b=a.i(832116);function c(a,b){return{id:a.note_id,type:"note",title:a.title,subtitle:`${a.workspace_name} / ${a.project_name}`,navigateTo:`/workspaces/${a.workspaceId}/notes?projectId=${a.projectId}`,snippet:a.content?a.content.slice(0,b):void 0}}async function d(a,e="task",f){if(!a.trim())return[];let g=a.trim(),{resultLimit:h,allModeCap:i,snippetLength:j}=f;if("all"===e){let[a,b,c,e,h]=await Promise.allSettled([d(g,"task",f),d(g,"project",f),d(g,"repository",f),d(g,"note",f),d(g,"asset",f)]),j=a=>"fulfilled"===a.status?a.value.slice(0,i):[];return[...j(a),...j(b),...j(c),...j(e),...j(h)]}if("task"===e)return(await b.db.task.findMany({where:{OR:[{title:{contains:g}},{description:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h,orderBy:{updatedAt:"desc"}})).map(a=>({id:a.id,type:"task",title:a.title,subtitle:`${a.project.workspace.name} / ${a.project.name}`,navigateTo:`/workspaces/${a.project.workspaceId}?projectId=${a.projectId}`}));if("project"===e)return(await b.db.project.findMany({where:{OR:[{name:{contains:g}},{alias:{contains:g}},{description:{contains:g}}]},include:{workspace:!0},take:h,orderBy:{updatedAt:"desc"}})).map(a=>({id:a.id,type:"project",title:a.alias?`${a.name} (${a.alias})`:a.name,subtitle:a.workspace.name,navigateTo:`/workspaces/${a.workspaceId}?projectId=${a.id}`}));if("repository"===e)return(await b.db.repository.findMany({where:{OR:[{name:{contains:g}},{path:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h})).map(a=>({id:a.id,type:"repository",title:a.name,subtitle:`${a.project.workspace.name} / ${a.project.name} \xb7 ${a.branch}`,navigateTo:`/workspaces/${a.project.workspaceId}?projectId=${a.projectId}`}));if("note"===e){if(g.length<3)return(await b.db.$queryRawUnsafe(`SELECT n.id as note_id, n.title, n.content,
1
+ module.exports=[951682,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""}])},279254,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(232779),f=a.i(951682);async function g(){return c.db.workspace.findMany({select:{id:!0,name:!0,projects:{select:{id:!0,name:!0,alias:!0},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function h(a){return c.db.workspace.findUnique({where:{id:a},include:{projects:{include:{tasks:{orderBy:[{order:"asc"},{createdAt:"desc"}]},repositories:!0}}}})}async function i(a){let b=e.createWorkspaceSchema.parse(a),f=await c.db.workspace.create({data:b});return(0,d.revalidatePath)("/workspaces"),f}async function j(a,b){let f=e.updateWorkspaceSchema.parse(b),g=await c.db.workspace.update({where:{id:a},data:f});return(0,d.revalidatePath)("/workspaces"),g}async function k(a){if(await c.db.workspace.count()<=1)throw Error("Cannot delete the last workspace");await c.db.workspace.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces")}async function l(b){let g=e.createProjectSchema.parse(b),h=await c.db.project.create({data:{name:g.name,alias:g.alias,description:g.description,type:g.gitUrl?"GIT":"NORMAL",gitUrl:g.gitUrl||void 0,localPath:g.localPath?(0,f.expandHome)(g.localPath):void 0,projectType:g.projectType,previewCommand:g.previewCommand,workspaceId:g.workspaceId}});try{let{ensureTowerTask:b}=await a.A(939768);await b(h.id,g.name)}catch(a){console.warn("Failed to auto-create Tower task",a)}return(0,d.revalidatePath)("/workspaces"),h}async function m(a,b){let g={...e.updateProjectSchema.parse(b)};g.localPath&&(g.localPath=(0,f.expandHome)(g.localPath));let h=await c.db.project.update({where:{id:a},data:g});return(0,d.revalidatePath)("/workspaces"),h}async function n(b){let e=await c.db.task.findMany({where:{projectId:b},include:{project:{select:{localPath:!0}}}}),{destroySession:f}=await a.A(585988),{removeWorktree:g}=await a.A(908462);for(let a of e){try{f(a.id)}catch{}if(await c.db.taskExecution.updateMany({where:{taskId:a.id,status:{in:["PENDING","RUNNING","PAUSED"]}},data:{status:"FAILED",endedAt:new Date}}),a.project?.localPath)try{await g(a.project.localPath,a.id)}catch{}["DONE","CANCELLED"].includes(a.status)||await c.db.task.update({where:{id:a.id},data:{status:"CANCELLED"}})}await c.db.project.delete({where:{id:b}}),(0,d.revalidatePath)("/workspaces")}async function o(a){return c.db.project.findFirst({where:{localPath:a},include:{workspace:!0}})}async function p(a=3){return c.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"]}},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"]}}}}}},orderBy:{createdAt:"asc"}}},orderBy:{updatedAt:"desc"}})}async function q(a=10){return c.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 r(b){let d=await c.db.project.findUnique({where:{id:b},select:{id:!0,name:!0}});if(!d)throw Error("Project not found");let{ensureTowerTask:e}=await a.A(939768);return e(d.id,d.name)}(0,a.i(632919).ensureServerEntryExports)([g,h,i,j,k,l,m,n,o,p,q,r]),(0,b.registerServerReference)(g,"002f8c1907daa108abf0de48763ba7242b18c8768d",null),(0,b.registerServerReference)(h,"40f0eec81bf22876c2506985320bb7faaaeb2e92e7",null),(0,b.registerServerReference)(i,"40b43304845d2ab1bbfcca9e8a22572005f72fdee2",null),(0,b.registerServerReference)(j,"60422a3dcf869aca6ad2360fc07fff8f7ad667284c",null),(0,b.registerServerReference)(k,"4025e96d25637009a8b378148032220c259e2e209b",null),(0,b.registerServerReference)(l,"40f9512bdf19e6f9f4f666ec480b5d2a34184f2c20",null),(0,b.registerServerReference)(m,"60b8da241b1f9f2d12f9b07df697c5d7cc38d4d2a6",null),(0,b.registerServerReference)(n,"40c3e283c4bc09dd0ddeac0fee2d5450add9aba2ef",null),(0,b.registerServerReference)(o,"400c47cd4a543a8a180be1c4384b39a199af461904",null),(0,b.registerServerReference)(p,"40f10b98befcfeac7f091134a9d3044dd0589408ae",null),(0,b.registerServerReference)(q,"401227c576cd75dc12c7d7ef6c4acb53b48d853e45",null),(0,b.registerServerReference)(r,"40d6e8e588bda631b24c5a0e2c634b36786afb4521",null),a.s(["createProject",0,l,"createWorkspace",0,i,"deleteProject",0,n,"deleteWorkspace",0,k,"getOrCreateTowerTaskId",0,r,"getProjectByLocalPath",0,o,"getRecentLocalProjects",0,q,"getWorkspaceById",0,h,"getWorkspacesWithProjects",0,g,"getWorkspacesWithRecentTasks",0,p,"updateProject",0,m,"updateWorkspace",0,j])},509270,a=>{"use strict";a.s(["CONFIG_DEFAULTS",0,{"git.pathMappingRules":{defaultValue:[],type:"object",label:"Git Path Mapping Rules"},"system.maxUploadBytes":{defaultValue:0x3200000,type:"number",label:"Max Upload Size (bytes)"},"system.maxConcurrentExecutions":{defaultValue:20,type:"number",label:"Max Concurrent Executions"},"git.timeoutSec":{defaultValue:30,type:"number",label:"Git Operation Timeout (seconds)"},"search.resultLimit":{defaultValue:20,type:"number",label:"Search Result Limit"},"search.allModeCap":{defaultValue:5,type:"number",label:"All-Mode Per-Type Cap"},"search.debounceMs":{defaultValue:250,type:"number",label:"Search Debounce (ms)"},"search.snippetLength":{defaultValue:80,type:"number",label:"Snippet Length (characters)"},"missions.grid.minCols":{defaultValue:1,type:"number",label:"Grid Min Columns"},"missions.grid.maxCols":{defaultValue:5,type:"number",label:"Grid Max Columns"},"missions.grid.minRows":{defaultValue:1,type:"number",label:"Grid Min Rows"},"missions.grid.maxRows":{defaultValue:5,type:"number",label:"Grid Max Rows"},"terminal.app":{defaultValue:"Terminal",type:"string",label:"Default Terminal App"},"terminal.wsPort":{defaultValue:3001,type:"number",label:"WebSocket Port"},"terminal.idleTimeoutSec":{defaultValue:180,type:"number",label:"Idle Timeout (seconds)"},"assistant.systemPrompt":{defaultValue:'You are Tower Assistant — the built-in AI operator for the Tower task management platform.\n\n## Identity\n- You are a task management operator, NOT a coding assistant.\n- You can ONLY use Tower MCP tools. You CANNOT read files, edit code, run shell commands, or search the web.\n- Always respond in the same language the user uses.\n\n## Capabilities\nWhen users ask what you can do, respond with EXACTLY these 6 groups. Translate to the user\'s language.\n\n1. **Workspace & Project** — View, create, update, delete workspaces and projects. Search projects and repositories.\n2. **Task Management** — Create tasks (priority, labels, worktree branch isolation, sub-path, auto-start). Move task status (TODO → IN_PROGRESS → IN_REVIEW → DONE / CANCELLED). Update task info and labels.\n3. **Execution Monitor** — Start task execution, check execution status, get terminal output, send commands to running terminals.\n4. **Daily Report & Todo** — Generate daily work summary (completed + in-progress). View pending task list sorted by priority.\n5. **Labels & Notes & Assets** — Manage workspace labels, project notes, and file attachments.\n6. **Global Search** — Search tasks, projects, repositories, notes, and assets by keyword.\n\nDo NOT list any capabilities beyond the above. Do NOT mention code editing, debugging, testing, git operations, or any development capabilities.\n\n## Scope Boundary\nIf the user asks you to write code, explain code, debug, search the web, read/write files, or anything outside Tower task management, reply:\n"抱歉,我只能帮你管理工作区、项目和任务。编码、调试等操作请在任务终端中完成。"',type:"string",label:"Assistant System Prompt"},"assistant.displayMode":{defaultValue:"sidebar",type:"string",label:"Assistant Display Mode"},"assistant.communicationMode":{defaultValue:"chat",type:"string",label:"Assistant Communication Mode"}}])},727977,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(832116),f=a.i(509270),g=a.i(951682),h=a.i(912206),i=a.i(155482),j=a.i(632919),k=b([i]);async function l(a,b){let c=await e.db.systemConfig.findUnique({where:{key:a}});if(!c)return b;try{return JSON.parse(c.value)}catch{return b}}async function m(a,b){await e.db.systemConfig.upsert({where:{key:a},create:{key:a,value:JSON.stringify(b)},update:{value:JSON.stringify(b)}})}async function n(a){let b=a.trim();if(!b)return"";try{let a=await l("git.pathMappingRules",[]),c=(0,g.matchGitPathRule)(b,a);if(c)return c;return(0,g.gitUrlToLocalPath)(b)}catch{return(0,g.gitUrlToLocalPath)(b)}}async function o(a){let b=await e.db.systemConfig.findMany({where:{key:{in:a}}}),c=Object.fromEntries(b.map(a=>{try{return[a.key,JSON.parse(a.value)]}catch{return[a.key,null]}})),d={};for(let b of a)d[b]=b in c?c[b]:f.CONFIG_DEFAULTS[b]?.defaultValue??null;return d}async function p(){return(0,h.detectShells)()}async function q(){return(0,h.detectTerminalApps)()}async function r(){return{platform:process.platform}}async function s(){let a=(0,i.getActiveWsPort)();if(null!==a)return a;let b=parseInt(process.env.PORT||"3000",10);return l("terminal.wsPort",b+1)}[i]=k.then?(await k)():k,(0,j.ensureServerEntryExports)([l,m,n,o,p,q,r,s]),(0,d.registerServerReference)(l,"6058bc084dfc8fd7335c86f6b96805b28fbfade91d",null),(0,d.registerServerReference)(m,"60580b8893845b30deedffa8257cbf297fee7c5689",null),(0,d.registerServerReference)(n,"407cbea3859811102573ba8273dc5d88a5d811928c",null),(0,d.registerServerReference)(o,"408f9aa4b4846ac38314ce296b0e74b4cc0eb5d2c3",null),(0,d.registerServerReference)(p,"00197e3b2d9aa341799592ef60812ef91e5af5acb4",null),(0,d.registerServerReference)(q,"00842dc3e197598d264390adccbf90436448e74dd4",null),(0,d.registerServerReference)(r,"0066d3cce4c6876ba27ced4f570ecfd18cfb017be0",null),(0,d.registerServerReference)(s,"00c5a0d3b9b146d2731747fe1a416361d4501fba21",null),a.s(["getActualWsPort",0,s,"getAvailableShells",0,p,"getAvailableTerminalApps",0,q,"getConfigValue",0,l,"getConfigValues",0,o,"getPlatformInfo",0,r,"resolveGitLocalPath",0,n,"setConfigValue",0,m]),c()}catch(a){c(a)}},!1),522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},446786,(a,b,c)=>{b.exports=a.x("os",()=>require("os"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},30292,a=>{"use strict";var b=a.i(680889),c=a.i(832116),d=a.i(972795),e=a.i(232779);async function f(a){return c.db.label.findMany({where:{OR:[{isBuiltin:!0},{workspaceId:a}]},orderBy:[{isBuiltin:"desc"},{name:"asc"}]})}async function g(a){let b=e.createLabelSchema.parse(a),f=await c.db.label.create({data:{name:b.name,color:b.color,workspaceId:b.workspaceId}});return(0,d.revalidatePath)("/workspaces"),f}async function h(a){let b=await c.db.label.findUnique({where:{id:a}});if(!b)throw Error("Label not found");if(b.isBuiltin)throw Error("Cannot delete builtin labels");await c.db.label.delete({where:{id:a}}),(0,d.revalidatePath)("/workspaces")}async function i(a,b){await c.db.$transaction(async c=>{await c.taskLabel.deleteMany({where:{taskId:a}}),b.length>0&&await c.taskLabel.createMany({data:b.map(b=>({taskId:a,labelId:b}))})}),(0,d.revalidatePath)("/workspaces")}async function j(a){return(await c.db.taskLabel.findMany({where:{taskId:a},include:{label:!0}})).map(a=>a.label)}(0,a.i(632919).ensureServerEntryExports)([f,g,h,i,j]),(0,b.registerServerReference)(f,"406303a55224e2a9384b4ad81ed3a003d67d23c0a5",null),(0,b.registerServerReference)(g,"40de3b59acefdad3d4c0fe96d99c53f2e3910bc5c4",null),(0,b.registerServerReference)(h,"40f2f8dd87569241d7237d8e6d9c1062d583dceda0",null),(0,b.registerServerReference)(i,"60dad40412789acec09a60682d0db5d3e0a476cac3",null),(0,b.registerServerReference)(j,"4003b61cd97c8f82a902ab8b7c3de8d596040b5df5",null),a.s(["createLabel",0,g,"deleteLabel",0,h,"getLabelsForWorkspace",0,f,"getTaskLabels",0,j,"setTaskLabels",0,i])},213803,a=>{"use strict";var b=a.i(832116);function c(a,b){return{id:a.note_id,type:"note",title:a.title,subtitle:`${a.workspace_name} / ${a.project_name}`,navigateTo:`/workspaces/${a.workspaceId}/notes?projectId=${a.projectId}`,snippet:a.content?a.content.slice(0,b):void 0}}async function d(a,e="task",f){if(!a.trim())return[];let g=a.trim(),{resultLimit:h,allModeCap:i,snippetLength:j}=f;if("all"===e){let[a,b,c,e,h]=await Promise.allSettled([d(g,"task",f),d(g,"project",f),d(g,"repository",f),d(g,"note",f),d(g,"asset",f)]),j=a=>"fulfilled"===a.status?a.value.slice(0,i):[];return[...j(a),...j(b),...j(c),...j(e),...j(h)]}if("task"===e)return(await b.db.task.findMany({where:{OR:[{title:{contains:g}},{description:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h,orderBy:{updatedAt:"desc"}})).map(a=>({id:a.id,type:"task",title:a.title,subtitle:`${a.project.workspace.name} / ${a.project.name}`,navigateTo:`/workspaces/${a.project.workspaceId}?projectId=${a.projectId}`}));if("project"===e)return(await b.db.project.findMany({where:{OR:[{name:{contains:g}},{alias:{contains:g}},{description:{contains:g}}]},include:{workspace:!0},take:h,orderBy:{updatedAt:"desc"}})).map(a=>({id:a.id,type:"project",title:a.alias?`${a.name} (${a.alias})`:a.name,subtitle:a.workspace.name,navigateTo:`/workspaces/${a.workspaceId}?projectId=${a.id}`}));if("repository"===e)return(await b.db.repository.findMany({where:{OR:[{name:{contains:g}},{path:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h})).map(a=>({id:a.id,type:"repository",title:a.name,subtitle:`${a.project.workspace.name} / ${a.project.name} \xb7 ${a.branch}`,navigateTo:`/workspaces/${a.project.workspaceId}?projectId=${a.projectId}`}));if("note"===e){if(g.length<3)return(await b.db.$queryRawUnsafe(`SELECT n.id as note_id, n.title, n.content,
2
2
  n."projectId", p."workspaceId", p.name as project_name, w.name as workspace_name
3
3
  FROM "ProjectNote" n
4
4
  JOIN "Project" p ON p.id = n."projectId"
@@ -18,7 +18,7 @@ module.exports=[951682,a=>{"use strict";var b=a.i(446786),c=a.i(814747);function
18
18
  JOIN "Project" p ON p.id = n."projectId"
19
19
  JOIN "Workspace" w ON w.id = p."workspaceId"
20
20
  WHERE n.title LIKE ? OR n.content LIKE ?
21
- LIMIT ?`,`%${g}%`,`%${g}%`,h)).map(a=>c(a,j))}}return"asset"===e?(await b.db.projectAsset.findMany({where:{OR:[{filename:{contains:g}},{description:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h,orderBy:{createdAt:"desc"}})).map(a=>({id:a.id,type:"asset",title:a.filename,subtitle:`${a.project.workspace.name} / ${a.project.name}`,navigateTo:`/workspaces/${a.project.workspaceId}/assets?projectId=${a.projectId}`,snippet:a.description||void 0})):[]}a.s(["search",0,d])},322220,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(213803),f=a.i(727977),g=a.i(632919),h=b([f]);async function i(a,b="task"){let c=await (0,f.getConfigValues)(["search.resultLimit","search.allModeCap","search.snippetLength"]);return(0,e.search)(a,b,{resultLimit:c["search.resultLimit"]??20,allModeCap:c["search.allModeCap"]??5,snippetLength:c["search.snippetLength"]??80})}[f]=h.then?(await h)():h,(0,g.ensureServerEntryExports)([i]),(0,d.registerServerReference)(i,"608940db009d9ab74b2e4d144069b697417c331166",null),a.s(["globalSearch",0,i]),c()}catch(a){c(a)}},!1),198433,a=>{"use strict";var b=a.i(680889),c=a.i(924868),d=a.i(522734),e=a.i(814747),f=a.i(832116),g=a.i(972795),h=a.i(632919);async function i(b){if(!b||"string"!=typeof b)return{safe:!1,reason:"无效的项目 ID"};let g=await f.db.project.findUnique({where:{id:b}});if(!g||!g.localPath)return{safe:!1,reason:"项目不存在或未设置本地路径"};if((await f.db.taskExecution.findMany({where:{task:{projectId:b},status:"RUNNING"},select:{id:!0}})).length>0)return{safe:!1,reason:"该项目有正在运行的任务执行,请先停止所有执行"};let h=await f.db.task.findMany({where:{projectId:b},select:{id:!0}}),{getSession:i}=await a.A(585988);for(let a of h)if(void 0!==i(a.id))return{safe:!1,reason:"该项目有活跃的终端会话,请先关闭"};let j=e.default.join(g.localPath,".worktrees");if((0,d.existsSync)(j))try{if((await (0,c.readdir)(j)).length>0)return{safe:!1,reason:"该项目有活跃的 Git Worktree,请先清理"}}catch{}return{safe:!0}}async function j(b,h){if(!b||"string"!=typeof b)return{success:!1,error:"无效的项目 ID"};if(!h||"string"!=typeof h||!e.default.isAbsolute(h))return{success:!1,error:"目标路径必须是非空的绝对路径"};let i=await f.db.project.findUnique({where:{id:b}});if(!i||!i.localPath)return{success:!1,error:"项目不存在或未设置本地路径"};let j=i.localPath;if(h===j)return{success:!1,error:"源路径和目标路径相同"};if((await f.db.taskExecution.findMany({where:{task:{projectId:b},status:"RUNNING"},select:{id:!0}})).length>0)return{success:!1,error:"该项目有正在运行的任务执行,请先停止所有执行"};let k=await f.db.task.findMany({where:{projectId:b},select:{id:!0}}),{getSession:l}=await a.A(585988);for(let a of k)if(void 0!==l(a.id))return{success:!1,error:"该项目有活跃的终端会话,请先关闭"};let m=e.default.join(j,".worktrees");if((0,d.existsSync)(m))try{if((await (0,c.readdir)(m)).length>0)return{success:!1,error:"该项目有活跃的 Git Worktree,请先清理"}}catch{}if((0,d.existsSync)(h))try{if((await (0,c.readdir)(h)).length>0)return{success:!1,error:"目标路径已存在且不为空"}}catch{return{success:!1,error:"目标路径已存在且不为空"}}await (0,c.mkdir)(e.default.dirname(h),{recursive:!0});try{await (0,c.rename)(j,h)}catch(a){if("EXDEV"===a.code)return{success:!1,error:"源路径和目标路径不在同一文件系统,不支持跨设备迁移"};return{success:!1,error:a.message||"文件系统操作失败"}}return await f.db.project.update({where:{id:b},data:{localPath:h}}),(0,g.revalidatePath)("/workspaces"),{success:!0}}let k=`分析这个项目目录,生成一段简短的 Markdown 项目描述。
21
+ LIMIT ?`,`%${g}%`,`%${g}%`,h)).map(a=>c(a,j))}}return"asset"===e?(await b.db.projectAsset.findMany({where:{OR:[{filename:{contains:g}},{description:{contains:g}}]},include:{project:{include:{workspace:!0}}},take:h,orderBy:{createdAt:"desc"}})).map(a=>({id:a.id,type:"asset",title:a.filename,subtitle:`${a.project.workspace.name} / ${a.project.name}`,navigateTo:`/workspaces/${a.project.workspaceId}/assets?projectId=${a.projectId}`,snippet:a.description||void 0})):[]}a.s(["search",0,d])},322220,a=>a.a(async(b,c)=>{try{var d=a.i(680889),e=a.i(213803),f=a.i(727977),g=a.i(632919),h=b([f]);async function i(a,b="task"){let c=await (0,f.getConfigValues)(["search.resultLimit","search.allModeCap","search.snippetLength"]);return(0,e.search)(a,b,{resultLimit:c["search.resultLimit"]??20,allModeCap:c["search.allModeCap"]??5,snippetLength:c["search.snippetLength"]??80})}[f]=h.then?(await h)():h,(0,g.ensureServerEntryExports)([i]),(0,d.registerServerReference)(i,"6051c20539a0938b9860bfe0dfe34cf20c41177e85",null),a.s(["globalSearch",0,i]),c()}catch(a){c(a)}},!1),198433,a=>{"use strict";var b=a.i(680889),c=a.i(924868),d=a.i(522734),e=a.i(814747),f=a.i(832116),g=a.i(972795),h=a.i(632919);async function i(b){if(!b||"string"!=typeof b)return{safe:!1,reason:"无效的项目 ID"};let g=await f.db.project.findUnique({where:{id:b}});if(!g||!g.localPath)return{safe:!1,reason:"项目不存在或未设置本地路径"};if((await f.db.taskExecution.findMany({where:{task:{projectId:b},status:"RUNNING"},select:{id:!0}})).length>0)return{safe:!1,reason:"该项目有正在运行的任务执行,请先停止所有执行"};let h=await f.db.task.findMany({where:{projectId:b},select:{id:!0}}),{getSession:i}=await a.A(585988);for(let a of h)if(void 0!==i(a.id))return{safe:!1,reason:"该项目有活跃的终端会话,请先关闭"};let j=e.default.join(g.localPath,".worktrees");if((0,d.existsSync)(j))try{if((await (0,c.readdir)(j)).length>0)return{safe:!1,reason:"该项目有活跃的 Git Worktree,请先清理"}}catch{}return{safe:!0}}async function j(b,h){if(!b||"string"!=typeof b)return{success:!1,error:"无效的项目 ID"};if(!h||"string"!=typeof h||!e.default.isAbsolute(h))return{success:!1,error:"目标路径必须是非空的绝对路径"};let i=await f.db.project.findUnique({where:{id:b}});if(!i||!i.localPath)return{success:!1,error:"项目不存在或未设置本地路径"};let j=i.localPath;if(h===j)return{success:!1,error:"源路径和目标路径相同"};if((await f.db.taskExecution.findMany({where:{task:{projectId:b},status:"RUNNING"},select:{id:!0}})).length>0)return{success:!1,error:"该项目有正在运行的任务执行,请先停止所有执行"};let k=await f.db.task.findMany({where:{projectId:b},select:{id:!0}}),{getSession:l}=await a.A(585988);for(let a of k)if(void 0!==l(a.id))return{success:!1,error:"该项目有活跃的终端会话,请先关闭"};let m=e.default.join(j,".worktrees");if((0,d.existsSync)(m))try{if((await (0,c.readdir)(m)).length>0)return{success:!1,error:"该项目有活跃的 Git Worktree,请先清理"}}catch{}if((0,d.existsSync)(h))try{if((await (0,c.readdir)(h)).length>0)return{success:!1,error:"目标路径已存在且不为空"}}catch{return{success:!1,error:"目标路径已存在且不为空"}}await (0,c.mkdir)(e.default.dirname(h),{recursive:!0});try{await (0,c.rename)(j,h)}catch(a){if("EXDEV"===a.code)return{success:!1,error:"源路径和目标路径不在同一文件系统,不支持跨设备迁移"};return{success:!1,error:a.message||"文件系统操作失败"}}return await f.db.project.update({where:{id:b},data:{localPath:h}}),(0,g.revalidatePath)("/workspaces"),{success:!0}}let k=`分析这个项目目录,生成一段简短的 Markdown 项目描述。
22
22
 
23
23
  读取 package.json、README.md 等关键文件,然后概括:
24
24
 
@@ -42,6 +42,6 @@ Requirements:
42
42
  - Keep it under 1000 words
43
43
  - Use concise Markdown (bold labels + short sentences), no ## headings or tables
44
44
  - Don't list every file/directory, only key information
45
- - Output in English`;async function m(b,c="zh"){if(!b||"string"!=typeof b)throw Error("无效的本地路径");if(b.startsWith("~"))throw Error("不支持 ~ 别名,请提供绝对路径");if(!e.default.isAbsolute(b))throw Error("本地路径必须为绝对路径");let{aiQuery:d}=await a.A(302452),f=await d("en"===c?l:k,b,{maxTurns:10,tools:["Read","Glob"],allowedTools:["Read","Glob"]});if(!f)throw Error("AI 分析未返回结果");return f.length>2e3?f.slice(0,2e3).trimEnd()+"\n\n...":f}(0,h.ensureServerEntryExports)([i,j,m]),(0,b.registerServerReference)(i,"40f109f5cc72d3c8512abb532f19ecdf3d57a9de92",null),(0,b.registerServerReference)(j,"604f648d394271e37eab29c0f0c16170bd75606176",null),(0,b.registerServerReference)(m,"606a6ac57a64d74ac8910b538bca7b8d0286ea4a03",null),a.s(["analyzeProjectDirectory",0,m,"checkMigrationSafety",0,i,"migrateProjectPath",0,j])}];
45
+ - Output in English`;async function m(b,c="zh"){if(!b||"string"!=typeof b)throw Error("无效的本地路径");if(b.startsWith("~"))throw Error("不支持 ~ 别名,请提供绝对路径");if(!e.default.isAbsolute(b))throw Error("本地路径必须为绝对路径");let{aiQuery:d}=await a.A(302452),f=await d("en"===c?l:k,b,{maxTurns:10,tools:["Read","Glob"],allowedTools:["Read","Glob"]});if(!f)throw Error("AI 分析未返回结果");return f.length>2e3?f.slice(0,2e3).trimEnd()+"\n\n...":f}(0,h.ensureServerEntryExports)([i,j,m]),(0,b.registerServerReference)(i,"40805f406dafafbee2bc2893759657900a249fb949",null),(0,b.registerServerReference)(j,"60f6737005b46b8cdbcf37d9f3db70c559c509ad1a",null),(0,b.registerServerReference)(m,"60d8faa80f7dca8aa639744b42cee7f20ac78660cd",null),a.s(["analyzeProjectDirectory",0,m,"checkMigrationSafety",0,i,"migrateProjectPath",0,j])}];
46
46
 
47
47
  //# sourceMappingURL=%5Broot-of-the-server%5D__0i4rk9v._.js.map