@mndrk/agx 2.4.7 → 2.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_29a06140._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_eec36ab6._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_fed01721._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{5092f14c2bf43204.js → 3fce625820bc2bd4.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{40857295bb9226c4.js → 8b87c2521c519a1f.js} +7 -7
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{90dcb743d23feeca.js → 90dd4ab03ab145d1.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{1fbcd40dccee738f.js → cf33cb29946990e3.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/ed606d6f94457578.css +1 -0
- package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +39 -1
- package/cloud-runtime/standalone/apps/local/components/tracking/TrackerSetup.tsx +22 -14
- package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/github/adapter.tsx +40 -4
- package/cloud-runtime/standalone/apps/local/worker/index.js +2 -2
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/5159169343ce6d2f.css +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{xVMVGrzDjtD1H0bGL76NJ → O3Yu8lY-DN5fauB8GipIL}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{xVMVGrzDjtD1H0bGL76NJ → O3Yu8lY-DN5fauB8GipIL}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{xVMVGrzDjtD1H0bGL76NJ → O3Yu8lY-DN5fauB8GipIL}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[615501,(e,t,a)=>{"use strict";t.exports=e.r(185615).vendored["react-rsc"].ReactJsxRuntime},698134,88007,e=>{"use strict";let t=new Map;function a(e){if(t.has(e.type))throw Error(`Tracker adapter "${e.type}" is already registered`);t.set(e.type,e)}function r(e){let a=t.get(e);if(!a)throw Error(`Unknown tracker type: "${e}". Available: ${i().join(", ")}`);return a}function s(e){return t.get(e)??null}function i(){return[...t.keys()]}function n(){return[...t.values()]}e.s(["getAdapter",()=>r,"getAdapterOrNull",()=>s,"listAdapterTypes",()=>i,"listAdapters",()=>n,"registerAdapter",()=>a],88007);var o=e.i(581001),l=e.i(404258),d=e.i(615501);function c({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}function u(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing","deployed","in deployment"].includes(t)?"in_progress":"todo"}async function p(e,t){throw Error("Linear OAuth callback must be handled by the route handler")}async function g(e){let t=(0,o.getLinearClient)(e);if(!t)return{connected:!1};try{let e=await t.viewer;return{connected:!0,user:{id:e.id,name:e.name,avatarUrl:void 0}}}catch{return{connected:!1}}}async function m(t){let{deleteProjectTicketToken:a}=await e.A(836400);a(t,"linear")}function y(e){return{id:e.id,name:e.name??`Cycle ${e.number}`,type:"cycle"}}e.i(78362);var h=e.i(754493),w=e.i(607495);function f({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 100 100",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{d:"M94.6 12.2c-1.4-1.6-3.4-2.5-5.6-2.5H10.8c-2.1 0-4.1.9-5.6 2.5C3.8 13.8 3 15.8 3 17.9v64.2c0 2.1.8 4.1 2.2 5.7 1.5 1.6 3.5 2.5 5.6 2.5h78.2c2.2 0 4.2-.9 5.6-2.5 1.5-1.6 2.2-3.6 2.2-5.7V17.9c.1-2.1-.6-4.1-2.2-5.7zM50 72.4L27.6 50 50 27.6 72.4 50 50 72.4z"})})}var A=e.i(593964),k=e.i(666680);let v=new Map;function I(e){for(let[t,a]of v)e-a.createdAt>6e5&&v.delete(t)}var b=e.i(765973),C=e.i(793391),T=e.i(896252);function x({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}function S(e){let t="merged"===e.state?"done":"closed"===e.state?"cancelled":e.draft?"todo":"in_progress",a=`PR #${e.number}`;return{id:e.id,trackerId:e.id,trackerType:"github",identifier:a,title:e.title,description:e.body,status:e.draft?"draft":e.state,statusCategory:t,assignee:e.authorLogin?{id:e.authorLogin,name:e.authorLogin}:void 0,labels:["pr",...e.labels],createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString(),url:e.url,group:{id:e.repoId,name:e.repoId}}}function L(e){let t="closed"===e.state?"done":"todo",a=`#${e.number}`;return{id:e.id,trackerId:e.id,trackerType:"github",identifier:a,title:e.title,description:e.body,status:e.state,statusCategory:t,assignee:e.authorLogin?{id:e.authorLogin,name:e.authorLogin}:void 0,labels:["issue",...e.labels],createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString(),url:e.url,group:{id:e.repoId,name:e.repoId}}}e.i(242617),a(new class{type="linear";displayName="Linear";groupLabel="Cycle";icon=c;getAuthUrl(e){let t;return t=new URL((0,l.getConfiguredAppBaseUrl)()).port||"41741",`https://www.runagx.com/integrations/linear/auth?port=${t}`}async handleCallback(e,t){return p(e,t)}async getStatus(e){return g(e)}async disconnect(e){return m(e)}async listItems(t,a){let{ensureLinearIssueCache:r,listLinearIssueSummaries:s}=await e.A(58723),{getIssueActivityMap:i}=await e.A(138720),n=!a.cursor;await r({projectId:t,refresh:n});let o=a.hasActivity?await i(t):void 0,{listCachedTrackerItems:l}=await e.A(410437),d=await l({trackerType:"linear",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity,activityMap:o});return{items:d.issues.map(e=>({id:e.id,trackerId:e.trackerId||`linear:${e.teamId??"default"}`,trackerType:"linear",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee,avatarUrl:void 0}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`https://linear.app/issue/${e.identifier}`})),pageInfo:d.pageInfo}}async getItem(t,a){let{getCachedTrackerItemContexts:r}=await e.A(410437),s=(await r([a]))[0];if(!s)throw Error(`Item ${a} not found`);return{id:s.id,trackerId:s.trackerId||`linear:${s.teamId??"default"}`,trackerType:"linear",identifier:s.identifier,title:s.title,description:s.description??void 0,status:s.status,statusCategory:s.statusCategory,assignee:s.assignee?{id:s.assigneeId??s.assignee,name:s.assignee,avatarUrl:void 0}:void 0,labels:s.labels??[],createdAt:s.pulledAt,updatedAt:s.updatedAt,url:s.url??`https://linear.app/issue/${s.identifier}`,comments:[],activity:[],metadata:{teamId:s.teamId,teamName:s.teamName,teamKey:s.teamKey,cycleId:s.cycleId,cycleName:s.cycleName,cycleNumber:s.cycleNumber,isAssignedToMe:s.isAssignedToMe}}}async updateItem(t,a,r){let s=(0,o.getLinearClient)(t);if(!s)throw Error("Not connected to Linear");if(r.status){let t=await s.updateIssueStatus(a,r.status),{updateCachedTrackerItemStatus:i}=await e.A(410437);return await i({issueId:a,status:t.status??r.status,updatedAt:t.updatedAt}),{id:a,trackerId:"linear:default",trackerType:"linear",identifier:t.identifier,title:t.title,status:t.status??r.status,statusCategory:u(t.status??r.status),assignee:t.assignee?{id:t.assignee,name:t.assignee}:void 0,labels:[],createdAt:t.updatedAt,updatedAt:t.updatedAt,url:t.url??`https://linear.app/issue/${t.identifier}`}}throw Error("Only status updates are currently supported")}async addComment(e,t,a){throw Error("Linear addComment not yet implemented")}async getActivity(e,t){return[]}async listGroups(e){let t=(0,o.getLinearClient)(e);return t?(await t.cycles()).map(y):[]}async listStatuses(e){let t=(0,o.getLinearClient)(e);if(!t)return[];try{let e=await t.workflowStates(),a=new Set;return e.map(e=>({id:e.id,name:e.name,category:u(e.name)})).filter(e=>!a.has(e.name)&&(a.add(e.name),!0))}catch{return[{id:"todo",name:"Todo",category:"todo"},{id:"in_progress",name:"In Progress",category:"in_progress"},{id:"done",name:"Done",category:"done"},{id:"cancelled",name:"Cancelled",category:"cancelled"}]}}async listAssignees(e){let t=(0,o.getLinearClient)(e);return t?(await t.users()).map(e=>({id:e.id,name:e.name,avatarUrl:void 0})):[]}async handleApiKeyConnect(t,a){let{saveProjectTicketToken:r}=await e.A(836400);r(t,"linear",{accessToken:a})}async handleTokenDelivery(t,a){let r=a.access_token;if(!r)throw Error("Missing access_token");let{saveProjectTicketToken:s}=await e.A(836400),i=a.expires_in?Number(a.expires_in):void 0;s(t,"linear",{accessToken:r,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,o.getProjectTicketToken)(e,"linear");return{name:"linear",url:"https://mcp.linear.app/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"cycle"===e.type?`Cycle: ${e.name}`:e.name}}),a(new class{type="jira";displayName="Jira Cloud";groupLabel="Sprint";icon=f;getAuthUrl(e){return(0,h.getJiraAuthUrl)(e)}async handleCallback(e,t){let a=await (0,h.exchangeJiraCode)(t),r=(await (0,h.getAccessibleResources)(a.accessToken))[0];if(!r)throw Error("No accessible Jira resources found");return(0,h.saveJiraToken)(e,{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt,cloudId:r.id,siteUrl:r.url}),{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt}}async getStatus(e){let t=(0,h.getJiraToken)(e);if(!t?.accessToken||!t?.cloudId)return{connected:!1};try{let t=await (0,h.getJiraClient)(e);if(!t)return{connected:!1};let a=await t.getMyself();return{connected:!0,user:{id:a.id,name:a.name,avatarUrl:a.avatarUrl}}}catch{return{connected:!1}}}async disconnect(t){(0,h.deleteJiraToken)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"jira")}async listItems(t,a){let{ensureJiraIssueCache:r,mapJiraIssue:s}=await e.A(119130),i=(0,h.getJiraToken)(t),n=!a.cursor;await r({projectId:t,refresh:n});let{listCachedTrackerItems:o}=await e.A(410437),l=await o({trackerType:"jira",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity}),d=i?.siteUrl??"https://example.atlassian.net";return{items:l.issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`${d}/browse/${e.identifier}`})),pageInfo:l.pageInfo}}async getItem(t,a){let{getJiraIssueDetail:r}=await e.A(119130);return r(t,a)}async updateItem(t,a,r){let s=await (0,h.getJiraClient)(t);if(!s)throw Error("Not connected to Jira");if(r.status){let e=await s.getTransitions(a),t=e.find(e=>e.to.name===r.status||e.name===r.status);if(!t)throw Error(`No transition to status "${r.status}" available. Valid transitions: ${e.map(e=>e.name).join(", ")}`);await s.transitionIssue(a,t.id)}r.assigneeId&&await s.updateIssue(a,{assignee:{accountId:r.assigneeId}}),r.labels&&await s.updateIssue(a,{labels:r.labels});let i=(0,h.getJiraToken)(t),n=i?.siteUrl??"https://example.atlassian.net",o=await s.getIssue(a),{mapJiraIssue:l}=await e.A(119130);return l(o,n)}async addComment(e,t,a){let r=await (0,h.getJiraClient)(e);if(!r)throw Error("Not connected to Jira");await r.addComment(t,a)}async getActivity(e,t){let a=await (0,h.getJiraClient)(e);return a?(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})):[]}async listGroups(e){let t=await (0,h.getJiraClient)(e);if(!t)return[];try{let e=await t.getBoards(),a=[];for(let r of e.slice(0,5))for(let e of(await t.getSprints(r.id)))("active"===e.state||"future"===e.state)&&a.push({id:String(e.id),name:e.name,type:"sprint"});return a}catch{return[]}}async listStatuses(e){let t=await (0,h.getJiraClient)(e);if(!t)return[];try{let e=await t.getStatuses(),a=new Set,r=[];for(let t of e)a.has(t.name)||(a.add(t.name),r.push({id:t.id,name:t.name,category:(0,w.jiraStatusCategoryToCanonical)(t.statusCategory?.key)}));return r}catch{return[]}}async listAssignees(t){let a=await (0,h.getJiraClient)(t);if(!a)return[];(0,h.getJiraToken)(t);let{listCachedTrackerItems:r}=await e.A(410437),s=await r({trackerType:"jira",limit:1}),i=s.issues[0]?.teamKey;if(!i)return[];try{return(await a.getAssignableUsers(i)).map(e=>({id:e.accountId,name:e.displayName,avatarUrl:e.avatarUrls?.["48x48"]}))}catch{return[]}}async handleApiKeyConnect(e,t){throw Error("Jira Cloud requires OAuth authentication — use the Connect button instead")}async handleTokenDelivery(e,t){let a=t.access_token,r=t.cloud_id,s=t.site_url;if(!a||!r||!s)throw Error("Missing required Jira token fields (access_token, cloud_id, site_url)");let i=t.expires_in?Number(t.expires_in):void 0;(0,h.saveJiraToken)(e,{accessToken:a,refreshToken:t.refresh_token,cloudId:r,siteUrl:s,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,h.getJiraToken)(e);return{name:"jira",url:"https://mcp.atlassian.com/v1/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"sprint"===e.type?`Sprint: ${e.name}`:e.name}}),a(new class{type="github";displayName="GitHub";icon=x;groupLabel="Repo";getAuthUrl(e){let t,a,r=(I(t=Date.now()),a=k.default.randomBytes(16).toString("hex"),v.set(a,{projectId:e,createdAt:t}),a),s=new URL((0,l.getConfiguredAppBaseUrl)()).port||process.env.PORT||"3000",i=`http://localhost:${s}/api/trackers/github/token-receive`,n=new URL("https://www.runagx.com/connect/github");return n.searchParams.set("session",r),n.searchParams.set("return",i),n.searchParams.set("project",e),n.toString()}async handleCallback(e,t){throw Error("GitHub uses token delivery, not code exchange")}async handleTokenDelivery(e,t){let a,r,s=t.session?.trim(),i=t.access_token?.trim(),n=t.refresh_token,o=t.expires_at,l=t.login?.trim(),d=t.scopes??"";if(!s)throw Error("Missing session");let c=(I(a=Date.now()),(r=v.get(s))?a-r.createdAt>6e5?(v.delete(s),null):(v.delete(s),r):null);if(!c)throw Error("Invalid or expired session");if(c.projectId!==e)throw Error("Session project mismatch");if(!i)throw Error("Missing access_token");if(!l)throw Error("Missing login");let u=o&&""!==o&&!Number.isNaN(Number(o))?Number(o):null,p=d.split(",").map(e=>e.trim()).filter(e=>e.length>0);(0,A.saveGithubTokens)(e,{accessToken:i,refreshToken:n&&n.length>0?n:null,expiresAt:u,login:l,scopes:p})}async getStatus(e){let t=(0,A.loadGithubTokens)(e);return t?{connected:!0,user:{id:t.login,name:t.login}}:{connected:!1}}async disconnect(t){(0,A.clearGithubTokens)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"github")}async listItems(e,t){let a=t.groupIds&&t.groupIds.length>0?t.groupIds:null,r=a?a.flatMap(e=>(0,C.listGithubPrs)({repoId:e})):(0,C.listGithubPrs)({}),s=a?a.flatMap(e=>(0,T.listGithubIssuesByRepo)(e)):(0,T.listAllGithubIssues)();return{items:[...r.map(S),...s.map(L)].sort((e,t)=>e.updatedAt<t.updatedAt?1:-1),pageInfo:{hasNextPage:!1,endCursor:null}}}async getItem(e,t){throw Error("GitHub adapter does not support issue items")}async updateItem(e,t,a){throw Error("GitHub adapter does not support issue updates")}async addComment(e,t,a){throw Error("GitHub adapter does not support comments")}async getActivity(e,t){return[]}async listGroups(e){return(0,b.listGithubRepos)().map(e=>({id:e.id,name:e.name,type:"repo"}))}async listStatuses(e){return[{id:"open",name:"Open",category:"todo"},{id:"in_progress",name:"Open PR",category:"in_progress"},{id:"draft",name:"Draft",category:"todo"},{id:"merged",name:"Merged",category:"done"},{id:"closed",name:"Closed",category:"cancelled"}]}async listAssignees(e){return[]}async handleApiKeyConnect(e,t){throw Error("GitHub requires OAuth authentication — use the Connect button instead")}}),e.s([],698134)}];
|
|
1
|
+
module.exports=[615501,(e,t,a)=>{"use strict";t.exports=e.r(185615).vendored["react-rsc"].ReactJsxRuntime},698134,88007,e=>{"use strict";let t=new Map;function a(e){if(t.has(e.type))throw Error(`Tracker adapter "${e.type}" is already registered`);t.set(e.type,e)}function r(e){let a=t.get(e);if(!a)throw Error(`Unknown tracker type: "${e}". Available: ${i().join(", ")}`);return a}function s(e){return t.get(e)??null}function i(){return[...t.keys()]}function n(){return[...t.values()]}e.s(["getAdapter",()=>r,"getAdapterOrNull",()=>s,"listAdapterTypes",()=>i,"listAdapters",()=>n,"registerAdapter",()=>a],88007);var o=e.i(581001),l=e.i(404258),d=e.i(615501);function c({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}function u(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing","deployed","in deployment"].includes(t)?"in_progress":"todo"}async function p(e,t){throw Error("Linear OAuth callback must be handled by the route handler")}async function g(e){let t=(0,o.getLinearClient)(e);if(!t)return{connected:!1};try{let e=await t.viewer;return{connected:!0,user:{id:e.id,name:e.name,avatarUrl:void 0}}}catch{return{connected:!1}}}async function m(t){let{deleteProjectTicketToken:a}=await e.A(836400);a(t,"linear")}function y(e){return{id:e.id,name:e.name??`Cycle ${e.number}`,type:"cycle"}}e.i(78362);var h=e.i(754493),w=e.i(607495);function f({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 100 100",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{d:"M94.6 12.2c-1.4-1.6-3.4-2.5-5.6-2.5H10.8c-2.1 0-4.1.9-5.6 2.5C3.8 13.8 3 15.8 3 17.9v64.2c0 2.1.8 4.1 2.2 5.7 1.5 1.6 3.5 2.5 5.6 2.5h78.2c2.2 0 4.2-.9 5.6-2.5 1.5-1.6 2.2-3.6 2.2-5.7V17.9c.1-2.1-.6-4.1-2.2-5.7zM50 72.4L27.6 50 50 27.6 72.4 50 50 72.4z"})})}var A=e.i(593964),k=e.i(666680);let v=new Map;function I(e){for(let[t,a]of v)e-a.createdAt>6e5&&v.delete(t)}var b=e.i(765973),C=e.i(793391),T=e.i(896252);function x({className:e}){return(0,d.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"})})}function S(e){let t="merged"===e.state?"done":"closed"===e.state?"cancelled":e.draft?"todo":"in_progress",a=`PR #${e.number}`;return{id:e.id,trackerId:e.id,trackerType:"github",identifier:a,title:e.title,description:e.body,status:e.draft?"draft":e.state,statusCategory:t,assignee:e.authorLogin?{id:e.authorLogin,name:e.authorLogin}:void 0,labels:["pr",...e.labels],createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString(),url:e.url,group:{id:e.repoId,name:e.repoId}}}function E(e){let t="closed"===e.state?"done":"todo",a=`#${e.number}`;return{id:e.id,trackerId:e.id,trackerType:"github",identifier:a,title:e.title,description:e.body,status:e.state,statusCategory:t,assignee:e.authorLogin?{id:e.authorLogin,name:e.authorLogin}:void 0,labels:["issue",...e.labels],createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString(),url:e.url,group:{id:e.repoId,name:e.repoId}}}e.i(242617),a(new class{type="linear";displayName="Linear";groupLabel="Cycle";icon=c;getAuthUrl(e){let t;return t=new URL((0,l.getConfiguredAppBaseUrl)()).port||"41741",`https://www.runagx.com/integrations/linear/auth?port=${t}`}async handleCallback(e,t){return p(e,t)}async getStatus(e){return g(e)}async disconnect(e){return m(e)}async listItems(t,a){let{ensureLinearIssueCache:r,listLinearIssueSummaries:s}=await e.A(58723),{getIssueActivityMap:i}=await e.A(138720),n=!a.cursor;await r({projectId:t,refresh:n});let o=a.hasActivity?await i(t):void 0,{listCachedTrackerItems:l}=await e.A(410437),d=await l({trackerType:"linear",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity,activityMap:o});return{items:d.issues.map(e=>({id:e.id,trackerId:e.trackerId||`linear:${e.teamId??"default"}`,trackerType:"linear",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee,avatarUrl:void 0}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`https://linear.app/issue/${e.identifier}`})),pageInfo:d.pageInfo}}async getItem(t,a){let{getCachedTrackerItemContexts:r}=await e.A(410437),s=(await r([a]))[0];if(!s)throw Error(`Item ${a} not found`);return{id:s.id,trackerId:s.trackerId||`linear:${s.teamId??"default"}`,trackerType:"linear",identifier:s.identifier,title:s.title,description:s.description??void 0,status:s.status,statusCategory:s.statusCategory,assignee:s.assignee?{id:s.assigneeId??s.assignee,name:s.assignee,avatarUrl:void 0}:void 0,labels:s.labels??[],createdAt:s.pulledAt,updatedAt:s.updatedAt,url:s.url??`https://linear.app/issue/${s.identifier}`,comments:[],activity:[],metadata:{teamId:s.teamId,teamName:s.teamName,teamKey:s.teamKey,cycleId:s.cycleId,cycleName:s.cycleName,cycleNumber:s.cycleNumber,isAssignedToMe:s.isAssignedToMe}}}async updateItem(t,a,r){let s=(0,o.getLinearClient)(t);if(!s)throw Error("Not connected to Linear");if(r.status){let t=await s.updateIssueStatus(a,r.status),{updateCachedTrackerItemStatus:i}=await e.A(410437);return await i({issueId:a,status:t.status??r.status,updatedAt:t.updatedAt}),{id:a,trackerId:"linear:default",trackerType:"linear",identifier:t.identifier,title:t.title,status:t.status??r.status,statusCategory:u(t.status??r.status),assignee:t.assignee?{id:t.assignee,name:t.assignee}:void 0,labels:[],createdAt:t.updatedAt,updatedAt:t.updatedAt,url:t.url??`https://linear.app/issue/${t.identifier}`}}throw Error("Only status updates are currently supported")}async addComment(e,t,a){throw Error("Linear addComment not yet implemented")}async getActivity(e,t){return[]}async listGroups(e){let t=(0,o.getLinearClient)(e);return t?(await t.cycles()).map(y):[]}async listStatuses(e){let t=(0,o.getLinearClient)(e);if(!t)return[];try{let e=await t.workflowStates(),a=new Set;return e.map(e=>({id:e.id,name:e.name,category:u(e.name)})).filter(e=>!a.has(e.name)&&(a.add(e.name),!0))}catch{return[{id:"todo",name:"Todo",category:"todo"},{id:"in_progress",name:"In Progress",category:"in_progress"},{id:"done",name:"Done",category:"done"},{id:"cancelled",name:"Cancelled",category:"cancelled"}]}}async listAssignees(e){let t=(0,o.getLinearClient)(e);return t?(await t.users()).map(e=>({id:e.id,name:e.name,avatarUrl:void 0})):[]}async handleApiKeyConnect(t,a){let{saveProjectTicketToken:r}=await e.A(836400);r(t,"linear",{accessToken:a})}async handleTokenDelivery(t,a){let r=a.access_token;if(!r)throw Error("Missing access_token");let{saveProjectTicketToken:s}=await e.A(836400),i=a.expires_in?Number(a.expires_in):void 0;s(t,"linear",{accessToken:r,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,o.getProjectTicketToken)(e,"linear");return{name:"linear",url:"https://mcp.linear.app/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"cycle"===e.type?`Cycle: ${e.name}`:e.name}}),a(new class{type="jira";displayName="Jira Cloud";groupLabel="Sprint";icon=f;getAuthUrl(e){return(0,h.getJiraAuthUrl)(e)}async handleCallback(e,t){let a=await (0,h.exchangeJiraCode)(t),r=(await (0,h.getAccessibleResources)(a.accessToken))[0];if(!r)throw Error("No accessible Jira resources found");return(0,h.saveJiraToken)(e,{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt,cloudId:r.id,siteUrl:r.url}),{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt}}async getStatus(e){let t=(0,h.getJiraToken)(e);if(!t?.accessToken||!t?.cloudId)return{connected:!1};try{let t=await (0,h.getJiraClient)(e);if(!t)return{connected:!1};let a=await t.getMyself();return{connected:!0,user:{id:a.id,name:a.name,avatarUrl:a.avatarUrl}}}catch{return{connected:!1}}}async disconnect(t){(0,h.deleteJiraToken)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"jira")}async listItems(t,a){let{ensureJiraIssueCache:r,mapJiraIssue:s}=await e.A(119130),i=(0,h.getJiraToken)(t),n=!a.cursor;await r({projectId:t,refresh:n});let{listCachedTrackerItems:o}=await e.A(410437),l=await o({trackerType:"jira",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity}),d=i?.siteUrl??"https://example.atlassian.net";return{items:l.issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`${d}/browse/${e.identifier}`})),pageInfo:l.pageInfo}}async getItem(t,a){let{getJiraIssueDetail:r}=await e.A(119130);return r(t,a)}async updateItem(t,a,r){let s=await (0,h.getJiraClient)(t);if(!s)throw Error("Not connected to Jira");if(r.status){let e=await s.getTransitions(a),t=e.find(e=>e.to.name===r.status||e.name===r.status);if(!t)throw Error(`No transition to status "${r.status}" available. Valid transitions: ${e.map(e=>e.name).join(", ")}`);await s.transitionIssue(a,t.id)}r.assigneeId&&await s.updateIssue(a,{assignee:{accountId:r.assigneeId}}),r.labels&&await s.updateIssue(a,{labels:r.labels});let i=(0,h.getJiraToken)(t),n=i?.siteUrl??"https://example.atlassian.net",o=await s.getIssue(a),{mapJiraIssue:l}=await e.A(119130);return l(o,n)}async addComment(e,t,a){let r=await (0,h.getJiraClient)(e);if(!r)throw Error("Not connected to Jira");await r.addComment(t,a)}async getActivity(e,t){let a=await (0,h.getJiraClient)(e);return a?(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})):[]}async listGroups(e){let t=await (0,h.getJiraClient)(e);if(!t)return[];try{let e=await t.getBoards(),a=[];for(let r of e.slice(0,5))for(let e of(await t.getSprints(r.id)))("active"===e.state||"future"===e.state)&&a.push({id:String(e.id),name:e.name,type:"sprint"});return a}catch{return[]}}async listStatuses(e){let t=await (0,h.getJiraClient)(e);if(!t)return[];try{let e=await t.getStatuses(),a=new Set,r=[];for(let t of e)a.has(t.name)||(a.add(t.name),r.push({id:t.id,name:t.name,category:(0,w.jiraStatusCategoryToCanonical)(t.statusCategory?.key)}));return r}catch{return[]}}async listAssignees(t){let a=await (0,h.getJiraClient)(t);if(!a)return[];(0,h.getJiraToken)(t);let{listCachedTrackerItems:r}=await e.A(410437),s=await r({trackerType:"jira",limit:1}),i=s.issues[0]?.teamKey;if(!i)return[];try{return(await a.getAssignableUsers(i)).map(e=>({id:e.accountId,name:e.displayName,avatarUrl:e.avatarUrls?.["48x48"]}))}catch{return[]}}async handleApiKeyConnect(e,t){throw Error("Jira Cloud requires OAuth authentication — use the Connect button instead")}async handleTokenDelivery(e,t){let a=t.access_token,r=t.cloud_id,s=t.site_url;if(!a||!r||!s)throw Error("Missing required Jira token fields (access_token, cloud_id, site_url)");let i=t.expires_in?Number(t.expires_in):void 0;(0,h.saveJiraToken)(e,{accessToken:a,refreshToken:t.refresh_token,cloudId:r,siteUrl:s,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,h.getJiraToken)(e);return{name:"jira",url:"https://mcp.atlassian.com/v1/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"sprint"===e.type?`Sprint: ${e.name}`:e.name}}),a(new class{type="github";displayName="GitHub";icon=x;groupLabel="Repo";getAuthUrl(e){let t,a,r=(I(t=Date.now()),a=k.default.randomBytes(16).toString("hex"),v.set(a,{projectId:e,createdAt:t}),a),s=new URL((0,l.getConfiguredAppBaseUrl)()).port||process.env.PORT||"3000",i=`http://localhost:${s}/api/trackers/github/token-receive`,n=new URL("https://www.runagx.com/connect/github");return n.searchParams.set("session",r),n.searchParams.set("return",i),n.searchParams.set("project",e),n.toString()}async handleCallback(e,t){throw Error("GitHub uses token delivery, not code exchange")}async handleTokenDelivery(e,t){let a,r,s=t.session?.trim(),i=t.access_token?.trim(),n=t.refresh_token,o=t.expires_at,l=t.login?.trim(),d=t.scopes??"";if(!s)throw Error("Missing session");let c=(I(a=Date.now()),(r=v.get(s))?a-r.createdAt>6e5?(v.delete(s),null):(v.delete(s),r):null);if(!c)throw Error("Invalid or expired session");if(c.projectId!==e)throw Error("Session project mismatch");if(!i)throw Error("Missing access_token");if(!l)throw Error("Missing login");let u=o&&""!==o&&!Number.isNaN(Number(o))?Number(o):null,p=d.split(",").map(e=>e.trim()).filter(e=>e.length>0);(0,A.saveGithubTokens)(e,{accessToken:i,refreshToken:n&&n.length>0?n:null,expiresAt:u,login:l,scopes:p})}async getStatus(e){let t=(0,A.loadGithubTokens)(e);return t?{connected:!0,user:{id:t.login,name:t.login}}:{connected:!1}}async disconnect(t){(0,A.clearGithubTokens)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"github")}async listItems(e,t){let a=t.groupIds&&t.groupIds.length>0?t.groupIds:null,r=a?a.flatMap(e=>(0,C.listGithubPrs)({repoId:e})):(0,C.listGithubPrs)({}),s=a?a.flatMap(e=>(0,T.listGithubIssuesByRepo)(e)):(0,T.listAllGithubIssues)();return{items:[...r.map(S),...s.map(E)].sort((e,t)=>e.updatedAt<t.updatedAt?1:-1),pageInfo:{hasNextPage:!1,endCursor:null}}}async getItem(e,t){throw Error("GitHub adapter does not support issue items")}async updateItem(e,t,a){throw Error("GitHub adapter does not support issue updates")}async addComment(e,t,a){throw Error("GitHub adapter does not support comments")}async getActivity(e,t){return[]}async listGroups(e){return(0,b.listGithubRepos)().map(e=>({id:e.id,name:e.name,type:"repo"}))}async listStatuses(e){return[{id:"open",name:"Open",category:"todo"},{id:"in_progress",name:"Open PR",category:"in_progress"},{id:"draft",name:"Draft",category:"todo"},{id:"merged",name:"Merged",category:"done"},{id:"closed",name:"Closed",category:"cancelled"}]}async listAssignees(e){return[]}async handleApiKeyConnect(e,t){let a=t.trim();if(!a)throw Error("Personal Access Token is required");let r=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${a}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});if(401===r.status)throw Error("Invalid Personal Access Token");if(403===r.status)throw Error("Token lacks required permissions or is rate-limited");if(!r.ok)throw Error(`GitHub API error (${r.status})`);let s=await r.json();if(!s.login)throw Error("Could not read user login from GitHub");let i=(r.headers.get("x-oauth-scopes")??"").split(",").map(e=>e.trim()).filter(e=>e.length>0);(0,A.saveGithubTokens)(e,{accessToken:a,refreshToken:null,expiresAt:null,login:s.login,scopes:i})}}),e.s([],698134)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=apps_local_29a06140._.js.map
|
|
@@ -45,6 +45,6 @@ ${d}
|
|
|
45
45
|
|
|
46
46
|
Work through these tickets as a coherent unit of work.
|
|
47
47
|
|
|
48
|
-
`+(j??""),f=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:b,promptPrefix:e,threadId:c.threadId,activeParticipantIds:[m.id],projectSlug:h??void 0,routing:k})}),i=await f.json().catch(()=>({}));if(!f.ok||!i.chatRunId||!i.userMessageId)throw Error(i.error||"Failed to start chat session");await v(c.id,{chatRunId:i.chatRunId,rootMessageId:i.userMessageId}),l(c.id)}catch(a){console.error("Failed to create group chat session:",a),I.current=!1,a instanceof Error&&window.alert(a.message)}},[a,s,f,w,g,h,u,v,l]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex h-12 shrink-0 items-center gap-2 border-b border-[var(--card-border)] px-4",children:[(0,b.jsx)(aZ.FolderOpen,{size:16,className:"shrink-0 text-[var(--muted-foreground)]"}),n?(0,b.jsx)("input",{type:"text",value:p,onChange:a=>q(a.target.value),onBlur:r,onKeyDown:b=>{"Enter"===b.key&&r(),"Escape"===b.key&&(q(a.name),o(!1))},autoFocus:!0,className:"min-w-0 flex-1 bg-transparent text-sm font-medium text-[var(--foreground)] outline-none border-b border-[var(--primary)]"}):(0,b.jsx)("h3",{className:"min-w-0 flex-1 truncate text-sm font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:()=>{q(a.name),o(!0)},title:"Rename group",children:(0,b.jsx)(a0.Pencil,{size:12})}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] hover:text-red-400 transition-colors",onClick:j,title:"Delete group (ungroups tickets)",children:(0,b.jsx)(F.Trash2,{size:12})})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-64",children:[(0,b.jsxs)("section",{className:"border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"px-4 py-2 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:["Tickets (",s.length,")"]}),0===s.length?(0,b.jsx)("div",{className:"px-4 pb-4 text-center text-xs text-[var(--muted-foreground)]",children:"No tickets in this group."}):s.map(a=>(0,b.jsx)(aQ,{item:a,selected:!1,onSelect:()=>k(a.id)},a.id))]}),(0,b.jsx)(aR,{issueId:a.id,trackerType:e,projectId:g}),(0,b.jsx)(aT,{runs:t,onSelect:m})]}),f.length>0&&(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:(0,b.jsx)(a1,{onSend:J,onStop:()=>{},participants:f,projectId:g??void 0,projectSlug:h??void 0,loading:"ready"!==H,commands:[],activityStatus:H,placeholder:`Work on tickets in "${a.name}"...`,initialPinnedParticipantId:w?.id})})]})}let a3="__pending-group__";function a4({ticket:a,isLast:c}){let{attributes:d,listeners:e,setNodeRef:f,transform:g,isDragging:h}=(0,aO.useDraggable)({id:a.id}),i=g?{transform:`translate3d(${g.x}px, ${g.y}px, 0)`,opacity:h?.3:1,position:"relative",zIndex:h?50:void 0}:void 0;return(0,b.jsxs)("div",{ref:f,style:i,...d,...e,className:"flex items-center gap-3 pl-[48px] pr-4 py-2 text-sm cursor-grab active:cursor-grabbing",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] leading-none text-[var(--muted-foreground)]/40 select-none",children:c?"└──":"├──"}),(0,b.jsx)("span",{className:"shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-[var(--muted-foreground)]",children:a.title}),a.status&&(0,b.jsx)("span",{className:"shrink-0 text-xs text-[var(--muted-foreground)]",children:a.status})]})}function a5({tickets:a,onConfirm:d,onCancel:e}){let[f,g]=(0,c.useState)(""),h=(0,c.useRef)(null),{setNodeRef:i,isOver:j}=(0,aO.useDroppable)({id:a3});(0,c.useEffect)(()=>{h.current?.focus()},[]);let k=(0,c.useCallback)(()=>{let b=f.trim(),c=a.map(a=>a.identifier).join(", ");d(b||c||"Untitled")},[f,d,a]);return(0,b.jsxs)("div",{ref:i,className:`mx-0 my-0 transition-colors ${j?"bg-[var(--primary)]/5":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 pl-[24px] pr-4 py-2 bg-[var(--card-bg)]/50",children:[(0,b.jsx)(U.ChevronDown,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)(aZ.FolderOpen,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{ref:h,type:"text",value:f,onChange:a=>g(a.target.value),onKeyDown:a=>{"Enter"===a.key&&k(),"Escape"===a.key&&e()},placeholder:a.map(a=>a.identifier).join(", ")||"Name this group...",className:"min-w-0 flex-1 bg-transparent text-xs font-medium text-[var(--foreground)] placeholder:text-[var(--muted-foreground)]/60 outline-none border-b border-[var(--primary)]/40 pb-0.5 focus:border-[var(--primary)]"}),(0,b.jsx)("button",{type:"button",className:"rounded px-2 py-0.5 text-[10px] font-medium bg-[var(--primary)] text-[var(--primary-foreground)] hover:opacity-90 transition-opacity",onClick:k,children:"Create"}),(0,b.jsx)("button",{type:"button",className:"rounded px-2 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:e,children:"Cancel"})]}),a.map((c,d)=>(0,b.jsx)(a4,{ticket:c,isLast:d===a.length-1},c.id))]})}let a6="sg::";function a7({status:a,categoryColor:c,count:d,collapsed:e,onToggle:f}){let{setNodeRef:g,isOver:h}=(0,aO.useDroppable)({id:`${a6}${a}`});return(0,b.jsxs)("div",{ref:g,className:`sticky top-0 z-[5] flex cursor-pointer items-center gap-2 border-b border-[var(--card-border)] bg-[var(--app-shell-pane)] px-4 py-2 transition-colors ${h?"bg-[var(--primary)]/10 ring-1 ring-inset ring-[var(--primary)]/30":""}`,onClick:f,role:"button",tabIndex:0,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},children:[e?(0,b.jsx)(V.ChevronRight,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}):(0,b.jsx)(U.ChevronDown,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${c}`}),(0,b.jsx)("span",{className:"text-xs font-medium text-[var(--foreground)]",children:a}),(0,b.jsx)("span",{className:"text-[10px] tabular-nums text-[var(--muted-foreground)]",children:d})]})}var a8=a.i(785630);function a9({open:a,onClose:d,anchorRef:e,children:f}){let g=(0,c.useRef)(null);return((0,c.useEffect)(()=>{if(!a)return;let b=a=>{g.current?.contains(a.target)||e.current?.contains(a.target)||d()},c=a=>{"Escape"===a.key&&d()};return document.addEventListener("pointerdown",b),document.addEventListener("keydown",c),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("keydown",c)}},[a,d,e]),a)?(0,b.jsx)("div",{ref:g,className:"absolute bottom-full left-1/2 z-50 mb-2 -translate-x-1/2 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-2 shadow-lg backdrop-blur-sm",children:f}):null}function ba({count:a,onGroup:d,onClear:e,onBulkRecap:f,onBulkPrompt:g,onBulkEstimate:h,onBulkAddLabel:i,onBulkRemoveLabel:j,onBulkStatus:k,statusOptions:m,participants:n,labels:o,onCreateLabel:p,selectedMetadata:r,statusUpdating:s}){let[t,u]=(0,c.useState)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useRef)(null),y=(0,c.useCallback)(a=>{u(b=>b===a?null:a)},[]),z=c.default.useMemo(()=>{let a=new Map;for(let b of r.values())for(let c of b.labels)a.set(c,(a.get(c)??0)+1);return a},[r]),A=c.default.useMemo(()=>{let a=new Set;for(let b of r.values())for(let c of b.labels)a.add(c);return Array.from(a)},[r]);if(a<2)return null;let B="flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-[11px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]";return(0,b.jsx)("div",{className:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2",children:(0,b.jsxs)("div",{className:"flex items-center gap-1 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-1.5 shadow-2xl",children:[(0,b.jsxs)("span",{className:"mr-1 text-xs font-medium text-[var(--foreground)]",children:[a," selected"]}),(0,b.jsx)("div",{className:"mx-1 h-4 w-px bg-[var(--card-border)]"}),(0,b.jsxs)("button",{type:"button",className:B,onClick:f,title:"Recap all selected",children:[(0,b.jsx)(aK.FileText,{size:12}),"Recap"]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:x,type:"button",className:`${B} ${"prompt"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("prompt"),title:"Send prompt to all selected",children:[(0,b.jsx)(ay.MessageSquare,{size:12}),"Prompt"]}),(0,b.jsx)(a9,{open:"prompt"===t,onClose:()=>u(null),anchorRef:x,children:(0,b.jsx)(aM,{count:a,participants:n,onSend:(a,b)=>{g(a,b),u(null)}})})]}),(0,b.jsxs)("button",{type:"button",className:B,onClick:h,title:"Ask the LLM to size all selected",children:[(0,b.jsx)(aL.Hash,{size:12}),"Estimate"]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:v,type:"button",className:`${B} ${"label"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("label"),title:"Label all selected",children:[(0,b.jsx)(T.Tag,{size:12}),"Label"]}),(0,b.jsx)(a9,{open:"label"===t,onClose:()=>u(null),anchorRef:v,children:(0,b.jsx)(aJ,{labels:o,selectedLabels:A,labelCounts:z,totalSelected:a,onToggle:b=>{(z.get(b)??0)===a?j(b):i(b)},onAdd:p})})]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:w,type:"button",className:`${B} ${"status"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("status"),title:"Update status for all selected",disabled:s,children:[s?(0,b.jsx)(l.RefreshCw,{size:12,className:"animate-spin"}):(0,b.jsx)(l.RefreshCw,{size:12}),"Status"]}),(0,b.jsx)(a9,{open:"status"===t,onClose:()=>u(null),anchorRef:w,children:(0,b.jsx)("div",{className:"flex max-h-48 w-44 flex-col overflow-y-auto",children:m.map(a=>(0,b.jsx)("button",{type:"button",className:"w-full rounded-lg px-3 py-1.5 text-left text-xs text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]",onClick:()=>{k(a.value),u(null)},children:a.label},a.value))})})]}),(0,b.jsxs)("button",{type:"button",className:B,onClick:d,title:"Group selected",children:[(0,b.jsx)(a8.FolderPlus,{size:12}),"Group"]}),(0,b.jsx)("div",{className:"mx-1 h-4 w-px bg-[var(--card-border)]"}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",onClick:e,"aria-label":"Clear selection",children:(0,b.jsx)(q.X,{size:14})})]})})}var bb=a.i(908225);let bc=(0,d.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),bd={todo:"bg-zinc-400",in_progress:"bg-amber-400",done:"bg-emerald-400",cancelled:"bg-red-400"};function be({item:a,run:d,participants:e,itemStatusOptions:f,itemStatusUpdating:g,onItemStatusChange:h,onBack:k}){let{messages:l,setMessages:m,sendMessage:n,loadHistory:o,stop:q}=(0,A.useGroupChat)(d.threadId),{processes:r,streaming:s,chatRuns:t}=(0,B.useProcessPolling)(d.rootMessageId?{workspaceId:d.threadId,threadId:d.rootMessageId}:{workspaceId:d.threadId},{messages:l,setMessages:m}),u=(0,c.useMemo)(()=>{let a=t[0];if(!a)return an(d);let b={queued:"queued",running:"running",awaiting_user:"running",blocked:"running",completed:"success",failed:"failed",cancelled:"cancelled"}[a.status]??d.status;return an({...d,status:b})},[t,d]);(0,c.useEffect)(()=>{o()},[o,d.threadId]);let v=(0,c.useMemo)(()=>new Map(e.map(a=>[a.id,a])),[e]),w=new Set(["queued","running","awaiting_user","blocked"]),x=t.some(a=>w.has(a.status))||r.some(a=>"spawning"===a.state||"running"===a.state)?t.some(a=>"queued"===a.status)?"queued":"working":"ready",y=(0,c.useCallback)((a,b,c,f,g,h,i)=>{d.rootMessageId&&n(a,b,void 0,d.rootMessageId,c,void 0,(0,O.orderParticipantIds)(e.map(a=>a.id),g),d.projectSlug??void 0,h,i)},[e,d.projectSlug,d.rootMessageId,n]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[k&&(0,b.jsx)("button",{type:"button",onClick:k,className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"Back to sessions",children:(0,b.jsx)(i.ChevronLeft,{size:16})}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:ao(d)})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-4",children:[(0,b.jsx)(av,{status:a.status,options:f,disabled:0===f.length,updating:g,onChange:b=>h(a,b)}),(0,b.jsxs)("div",{className:`flex items-center gap-2 rounded-md border px-2.5 py-1 ${aq[u.tone]}`,children:[(0,b.jsx)("div",{className:`h-1.5 w-1.5 rounded-full ${ar[u.tone]}`}),(0,b.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider",children:u.label})]}),null!=d.durationMs&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)(j.Clock,{size:14}),(0,b.jsxs)("span",{children:[(d.durationMs/1e3).toFixed(1),"s"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-[var(--card-border)] bg-[var(--card-bg)] px-2 py-1",children:[(0,b.jsx)("img",{src:aP(d.agentId,v.get(d.agentId)?.color),alt:d.agentName,className:"h-5 w-5 rounded-full object-cover"}),(0,b.jsx)("span",{className:"pr-1 text-xs font-medium",children:d.agentName})]})]})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===l.length?(0,b.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:"queued"===d.status||"running"===d.status?"Starting session...":"No thread messages yet."}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[l.map(a=>{let c=a.participantId?v.get(a.participantId):null,e=(0,J.stripMarkers)(a.content);if(!e.trim())return null;let f=a.participantId??d.agentId;return(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===a.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(p.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:aP(f,c?.color),alt:c?.name??d.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{className:"flex items-center gap-2",children:"user"===a.role?(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"You"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-sm font-semibold",style:{color:c?.color??"var(--foreground)"},children:c?.name??d.agentName}),(0,b.jsx)("span",{className:"rounded bg-[var(--card-bg)] px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Agent"})]})}),(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:new Date(a.timestamp).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),"user"===a.role?(0,b.jsx)("div",{className:"w-fit max-w-[85%] rounded-xl rounded-tl-sm border border-[var(--card-border)] bg-[var(--card-bg)] px-4 py-3 text-sm text-[var(--foreground)]",children:(0,b.jsx)(C.Markdown,{content:e,isUser:!0})}):(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(C.Markdown,{content:e,isUser:!1})})]})]},a.id)}),Object.entries(s).filter(([,a])=>!d.rootMessageId||a.rootMessageId===d.rootMessageId).map(([a])=>{let c=v.get(a);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:aP(a,c?.color),alt:c?.name??d.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),c?.name??d.agentName," is thinking..."]},`stream-${a}`)})]})}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:d.rootMessageId?(0,b.jsx)(bc,{onSend:y,onStop:q,participants:e,projectId:d.projectId??void 0,projectSlug:d.projectSlug??void 0,loading:"ready"!==x,commands:[],activityStatus:x,placeholder:"Continue this session...",initialPinnedParticipantId:d.agentId}):(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-[var(--muted-foreground)]",children:"Waiting for the session to start..."})})]})}function bf({trackerType:a,projectId:d,projectSlug:g,initialShowSettings:i,initialGroupId:j}){let p,s,{isTouchLayout:t}=(0,K.useInputCapabilities)(),{connected:u,loading:A,user:B,clis:C,mcpConfigured:D,connect:E,connectWithKey:F,disconnect:G,configureMcp:H}=(0,x.useTrackerConnection)(a,d??""),J=(0,c.useRef)(null),[O,Q]=(0,c.useState)(i??!1),[R,S]=(0,c.useState)(!1),[T,U]=(0,c.useState)(()=>(0,M.loadLinearTicketPanelWidth)()||576),[V,W]=(0,c.useState)(""),[X,Y]=(0,c.useState)(""),[Z,$]=(0,c.useState)(!1),[_,aa]=(0,c.useState)([]),[ab,ac]=(0,c.useState)([]),[ad,ae]=(0,c.useState)([]),[af,ag]=(0,c.useState)([]),[ah,ai]=(0,c.useState)([]),[aj,ak]=(0,c.useState)([]),[aq,ar]=(0,c.useState)("Group"),[av,ax]=(0,c.useState)(""),[ay,az]=(0,c.useState)(""),[aA,aB]=(0,c.useState)("activity"),[aC,aD]=(0,c.useState)("desc"),[aE,aF]=(0,c.useState)([]),[aG,aH]=(0,c.useState)(()=>new Set),[aI,aJ]=(0,c.useState)(null),[aK,aL]=(0,c.useState)(null),[aM,aN]=(0,c.useState)(new Set),{participants:aR}=(0,aY.useTrackerParticipants)(a,d),{issueActiveAgents:aS}=function(a,b){let[d,e]=(0,c.useState)(new Map);return(0,c.useEffect)(()=>{let c=!1;async function d(){try{let d=new URLSearchParams;b&&d.set("projectId",b);let f=await fetch(`/api/trackers/${a}/active-agents?${d}`);if(!f.ok||c)return;let g=await f.json(),h=new Map;for(let a of g.agents??[]){let b=h.get(a.issueId)??[];b.push({agentId:a.agentId,agentName:a.agentName}),h.set(a.issueId,b)}c||e(h)}catch{}}d();let f=setInterval(()=>void d(),5e3);return()=>{c=!0,clearInterval(f)}},[a,b]),{issueActiveAgents:d}}(a,d),{issueStats:aT}=function(a,b){let[d,e]=(0,c.useState)(new Map);return(0,c.useEffect)(()=>{let c=!1;async function d(){try{let d=new URLSearchParams;b&&d.set("projectId",b);let f=await fetch(`/api/trackers/${a}/stats?${d}`);if(!f.ok||c)return;let g=await f.json(),h=new Map;for(let a of g.stats??[])h.set(a.issueId,{sessions:a.sessions,messages:a.messages});c||e(h)}catch{}}d();let f=setInterval(()=>void d(),1e4);return()=>{c=!0,clearInterval(f)}},[a,b]),{issueStats:d}}(a,d),[aU,aV]=(0,c.useState)(null),[aW,aZ]=(0,c.useState)(null),[a$,a0]=(0,c.useState)("runs"),a1=(0,c.useRef)(null),a4=(0,c.useRef)(!0),a8=(0,c.useRef)(null),a9=(0,c.useRef)(null),{getSelection:bc,pushSelection:bf,replaceSelection:bg}=(0,r.useUrlSelection)(),bh=bc("issue"),bi=bc("run"),bj=bc("group"),{groups:bk,createGroup:bl,updateGroup:bm,deleteGroup:bn,addTasksToGroup:bo,removeTaskFromGroup:bp,refetch:bq}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)(!1),g=(0,c.useCallback)(async()=>{if(a){f(!0);try{let b=await fetch(`/api/task-groups?project_id=${encodeURIComponent(a)}`);if(!b.ok)throw Error("Failed to fetch groups");let c=await b.json();d(c.groups??[])}catch(a){console.error("useTaskGroups fetch error:",a)}finally{f(!1)}}},[a]);(0,c.useEffect)(()=>{g()},[g]);let h=(0,c.useCallback)(async(b,c)=>{if(!a)return null;try{let d=await fetch("/api/task-groups",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:a,name:b,task_ids:c})});if(!d.ok)throw Error("Failed to create group");let e=await d.json();return await g(),e.group}catch(a){return console.error("createGroup error:",a),null}},[a,g]),i=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})).ok)throw Error("Failed to update group");await g()}catch(a){console.error("updateGroup error:",a)}},[g]),j=(0,c.useCallback)(async a=>{try{if(!(await fetch(`/api/task-groups/${a}`,{method:"DELETE"})).ok)throw Error("Failed to delete group");await g()}catch(a){console.error("deleteGroup error:",a)}},[g]),k=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}/tasks`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({task_ids:b})})).ok)throw Error("Failed to assign tasks");await g()}catch(a){console.error("addTasksToGroup error:",a)}},[g]),l=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}/tasks?task_id=${encodeURIComponent(b)}`,{method:"DELETE"})).ok)throw Error("Failed to remove task");await g()}catch(a){console.error("removeTaskFromGroup error:",a)}},[g]);return{groups:b,isLoading:e,refetch:g,createGroup:h,updateGroup:i,deleteGroup:j,addTasksToGroup:k,removeTaskFromGroup:l}}(d),[br,bs]=(0,c.useState)(new Set),[bt,bu]=(0,c.useState)(!1),[bv,bw]=(0,c.useState)([]),[bx,by]=(0,c.useState)(null),bz=(0,aO.useSensors)((0,aO.useSensor)(aO.PointerSensor,{activationConstraint:{distance:8}})),[bA,bB]=(0,c.useState)(null),bC=(0,c.useCallback)(a=>{bs(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),bD=(0,c.useCallback)(async a=>{bv.length<2||(await bl(a,bv),bw([]),bu(!1),by(null),bs(new Set))},[bv,bl]),bE=(0,c.useRef)([]),bF=(0,c.useRef)(null),bG=(0,c.useCallback)(()=>{let a=Array.from(br),b=bE.current.find(a=>br.has(a.id));bw(a),by(b?.id??a[0]??null),bu(!0)},[br]),bH=bk.find(a=>a.id===bj),bI=(0,c.useMemo)(()=>new Set(bk.flatMap(a=>a.task_ids)),[bk]),bJ=(0,c.useCallback)(a=>{bB(a.active.id)},[]),bK=(0,c.useCallback)(async a=>{bB(null);let{active:b,over:c}=a,d=b.id;if(bt){let a=bv.includes(d);if(!c||b.id===c.id){a&&bw(a=>{let b=a.filter(a=>a!==d);return b.length<2?(bu(!1),by(null),[]):b});return}let e=c.id,f=e===a3||bv.includes(e);a&&!f?bw(a=>{let b=a.filter(a=>a!==d);return b.length<2?(bu(!1),by(null),[]):b}):a||bw(a=>[...a,d]);return}if(!c||b.id===c.id)return;let e=c.id;if(e.startsWith(a6)){let a=e.slice(a6.length),b=bE.current.find(a=>a.id===d),c=bE.current.find(b=>b.status===a)?.statusCategory;b&&b.status!==a&&await bF.current?.(b,a,c);return}let f=bE.current.find(a=>a.id===d),g=bE.current.find(a=>a.id===e);if(f&&g&&f.status!==g.status)return void await bF.current?.(f,g.status,g.statusCategory);let h=bk.find(a=>a.id===e);if(h)return void await bo(h.id,[d]);let i=!bI.has(e);if(!bI.has(d)&&i){bw([d,e]),by(e),bu(!0);return}let j=bk.find(a=>a.task_ids.includes(d));j&&i&&await bp(j.id,d)},[bk,bI,bo,bp,bt,bv]),bL=(0,c.useCallback)(a=>{W(a),a1.current&&clearTimeout(a1.current),a1.current=setTimeout(()=>Y(a),300)},[]),bM=(0,c.useCallback)(a=>{aH(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[a,g]);(0,c.useEffect)(()=>()=>{a1.current&&clearTimeout(a1.current)},[]),(0,c.useEffect)(()=>{let a={...L};a4.current=!0,W(a.search),Y(a.search),ag(a.assigneeIds),ai(a.statusCategories),az(j??a.groupIds?.[0]??""),ax(j??a.groupIds?.[0]??""),aB(a.sortBy),aD(a.sortDir),aF(a.labelNames??[]),aH(new Set)},[a,g,j]),(0,c.useEffect)(()=>{if(a4.current){a4.current=!1;return}},[a,g,V,af,ah,ay,av,aE,aA,aC]),(0,c.useEffect)(()=>{if(!u||!d)return;let b=!1;$(!1);let c=new URLSearchParams;return c.set("projectId",d),g&&c.set("projectSlug",g),fetch(`/api/trackers/${a}/options?${c.toString()}`).then(a=>a.json()).then(a=>{b||(aa(Array.isArray(a.assignees)?a.assignees:[]),ac(Array.isArray(a.statuses)?a.statuses.map(a=>({value:a.name,label:a.name})):[]),ae(Array.isArray(a.teams)?a.teams:[]),ak(Array.isArray(a.groups)?a.groups:[]),a.groupLabel&&ar(a.groupLabel),$(!0))}).catch(()=>{b||(aa([]),ac([]),ae([]),ak([]),$(!0))}),()=>{b=!0}},[u,a,d,g]),(0,c.useEffect)(()=>{if(!Z)return;let a=af.filter(a=>_.some(b=>b.id===a));a.length!==af.length&&ag(a)},[_,Z,af]),(0,c.useEffect)(()=>{if(!Z)return;let a=ab.map(a=>a.value),b=ah.filter(b=>a.includes(b));b.length!==ah.length&&ai(b)},[Z,ah,ab]),(0,c.useEffect)(()=>{if(Z){if(ad.length<=1&&ay)return void az("");ay&&!ad.some(a=>a.id===ay)&&az("")}},[Z,ay,ad]),(0,c.useEffect)(()=>{Z&&av&&!aj.some(a=>a.id===av)&&ax("")},[aj,Z,av]);let{items:bN,loading:bO,hasMore:bP,loadMore:bQ,refresh:bR,updateItem:bS}=function(a,b,d,e){let[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(!0),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1),n=(0,c.useRef)(j),o=(0,c.useRef)(!1);n.current=j;let p=`/api/trackers/${encodeURIComponent(a)}/items`,q=e.projectId?function(a,b,c){let d={};for(let a of Object.keys(c).sort()){let b=c[a];if(null!=b&&""!==b&&!1!==b)if(Array.isArray(b)){if(!b.length)continue;d[a]=[...b].map(String).sort()}else d[a]=b}return`${a}:${b}:${JSON.stringify(d)}`}(a,e.projectId,{statuses:b.statuses,statusCategories:b.statusCategories,search:b.search,assigneeIds:b.assigneeIds,groupIds:b.groupIds,sortBy:b.sortBy,sortDir:b.sortDir,hasActivity:b.hasActivity,limit:e.limit}):null,r=(0,c.useRef)(q);r.current=q;let s=(0,c.useCallback)(async a=>{if(d&&e.projectId){i(!0);try{let c=new URLSearchParams;if(c.set("projectId",e.projectId),b.statuses?.length)for(let a of b.statuses)c.append("status",a);if(b.statusCategories?.length)for(let a of b.statusCategories)c.append("statusCategory",a);if(b.search&&c.set("search",b.search),b.assigneeIds?.length)for(let a of b.assigneeIds)c.append("assigneeId",a);if(b.groupIds?.length)for(let a of b.groupIds)c.append("groupId",a);b.sortBy&&c.set("sortBy",b.sortBy),b.sortDir&&c.set("sortDir",b.sortDir),b.hasActivity&&c.set("hasActivity","true"),a&&n.current&&c.set("cursor",n.current),e.limit&&c.set("limit",String(e.limit));let d=await fetch(`${p}?${c.toString()}`),f=await d.json(),h=f.items??[];g(b=>a?[...b,...h]:h);let i=f.pageInfo?.endCursor??null,j=f.pageInfo?.hasNextPage??!1;k(i),m(j),o.current=!0,!a&&r.current&&w(r.current,{items:h,endCursor:i,hasNextPage:j,savedAt:Date.now()})}catch{a||g([])}finally{i(!1)}}},[p,b.statuses,b.statusCategories,b.search,b.assigneeIds,b.groupIds,b.sortBy,b.sortDir,b.hasActivity,d,e.projectId,e.limit]);(0,c.useEffect)(()=>{let a=!1;return k(null),o.current=!1,d&&q&&v(q).then(b=>{a||!b||o.current||(g(b.items),k(b.endCursor),m(b.hasNextPage),i(!1))}),s(!1),()=>{a=!0}},[s,q,d]);let t=(0,c.useCallback)(()=>s(!0),[s]);return{items:f,loading:h,hasMore:l,loadMore:t,refresh:(0,c.useCallback)(()=>(k(null),s(!1)),[s]),updateItem:(0,c.useCallback)(a=>{g(b=>b.map(b=>b.id===a.id?a:b))},[])}}(a,(0,c.useMemo)(()=>({search:X||void 0,statuses:ah.length>0&&ah.length<ab.length?ah:void 0,assigneeIds:af.length>0?af:void 0,groupIds:av?[av]:void 0,sortBy:aA,sortDir:aC}),[X,af,av,ah,ab.length,aA,aC]),u&&Z&&!!d,{projectId:d??""}),{metadataMap:bT,refresh:bU}=function(a,b,d){let[e,f]=(0,c.useState)(new Map),[g,h]=(0,c.useState)(!1),i=(0,c.useRef)(""),j=(0,c.useCallback)(async()=>{if(!b||0===d.length)return void f(new Map);h(!0);try{let c=await fetch(`/api/trackers/${encodeURIComponent(a)}/metadata/bulk?projectId=${encodeURIComponent(b)}&issueIds=${d.map(encodeURIComponent).join(",")}`),e=await c.json(),g=new Map;for(let[a,b]of Object.entries(e))g.set(a,{labels:Array.isArray(b.labels)?b.labels:[],estimate:"number"==typeof b.estimate?b.estimate:null});f(g)}catch{}h(!1)},[a,b,d]);return(0,c.useEffect)(()=>{let a=d.join(",");a!==i.current&&(i.current=a,j())},[j,d]),{metadataMap:e,loading:g,refresh:j}}(a,d,(0,c.useMemo)(()=>bN.map(a=>a.id),[bN])),{labels:bV,definitions:bW,refresh:bX,createDefinition:bY}=al(a,d),bZ=(0,c.useMemo)(()=>bh?bN.find(a=>a.id===bh)??null:null,[bN,bh]),b$=bZ??(aI?.id===bh?aI:null),b_=(0,c.useMemo)(()=>{if(0===aG.size)return bN;let a=[],b=[];for(let c of bN)aG.has(c.id)?a.push(c):b.push(c);return[...a,...b]},[bN,aG]);bE.current=b_;let b0=(0,c.useDeferredValue)(aE),b1=(0,c.useMemo)(()=>{if(0===b0.length)return b_;let a=new Set(b0),b=[];for(let c of b_){let d=bT.get(c.id)?.labels;if(d){for(let e of d)if(a.has(e)){b.push(c);break}}}return b},[b_,b0,bT]),b2=(0,c.useMemo)(()=>{let a=new Map;for(let b of b1){let c=a.get(b.status);c||(c={status:b.status,category:b.statusCategory,items:[]},a.set(b.status,c)),c.items.push(b)}let b={in_progress:0,todo:1,done:2,cancelled:3};return[...a.values()].sort((a,c)=>(b[a.category]??1)-(b[c.category]??1))},[!0,b1]),{runs:b3,loading:b4,loadedForIssueId:b5,createRun:b6,updateRun:b7}=y(a,b$?.id??null,d??null),{scripts:b8,activeScriptId:b9,activeScript:ca,setActiveScriptId:cb,saveScript:cc,deleteScript:cd}=function(a,b){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(null);(0,c.useEffect)(()=>{let a={...z};e(a.scripts),g(a.activeScriptId)},[a,b]);let h=(0,c.useCallback)((a,b)=>{e(a),g(b)},[a,b]),i=(0,c.useCallback)(a=>{let b=a&&d.some(b=>b.id===a)?a:null;h(d,b)},[h,d]),j=(0,c.useCallback)(a=>{let b=new Date().toISOString(),c=a.name.trim(),e=a.prompt.trim();if(!c||!e)throw Error("Run script name and prompt are required.");let f=a.id?d.find(b=>b.id===a.id):null,g=f?{...f,name:c,prompt:e,updatedAt:b}:{id:crypto.randomUUID(),name:c,prompt:e,createdAt:b,updatedAt:b};return h([...f?d.map(a=>a.id===f.id?g:a):[g,...d]].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),g.id),g},[h,d]),k=(0,c.useCallback)(a=>{h(d.filter(b=>b.id!==a),f===a?null:f)},[f,h,d]),l=(0,c.useMemo)(()=>d.find(a=>a.id===f)??null,[f,d]);return{scripts:d,activeScriptId:f,activeScript:l,setActiveScriptId:i,saveScript:j,deleteScript:k}}(a,g),ce=bi?b3.find(a=>a.id===bi)??null:null,cf=bh&&!bi?(0,N.loadLastRunForIssue)(bh):null,cg=!!cf&&J.current!==bh,ch=(0,c.useMemo)(()=>_.map(a=>({value:a.id,label:a.name})),[_]),ci=(0,c.useMemo)(()=>ab.map(a=>({value:a.value,label:a.label})),[ab]),cj=(0,c.useMemo)(()=>{let a=ab.map(a=>({value:a.label,label:a.label})),b=new Set(a.map(a=>a.value)),c=b$?.status?.trim();return c&&!b.has(c)&&a.unshift({value:c,label:c}),a},[b$?.status,ab]),ck=(0,c.useMemo)(()=>[{value:"",label:"Workspace"},...ad.map(a=>({value:a.id,label:a.name}))],[ad]),cl=(0,c.useMemo)(()=>[{value:"",label:aq},...aj.map(a=>({value:a.id,label:a.name}))],[aj,aq]),cm=ci.length>0,cn=cl.length>1,co=ck.length>2,cp=ca?.name??"AGX default",cq=(0,c.useMemo)(()=>bV.map(a=>({value:a.name,label:a.name})),[bV]),cr=(0,c.useCallback)(async(b,c)=>{if(!d)return;let e=bT.get(b)?.labels??[],f=e.includes(c)?e.filter(a=>a!==c):[...e,c];try{await fetch(`/api/trackers/${a}/metadata?projectId=${encodeURIComponent(d)}&issueId=${encodeURIComponent(b)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({labels:f})}),bU(),bX()}catch{}},[d,a,bT,bU,bX]),cs=(0,c.useCallback)(async a=>{d&&await bY(a)},[d,bY]),ct=(0,c.useCallback)(async(b,c,e)=>{let f=c.trim();if(!f||f===b.status||!d)return;let g={...b,status:f,statusCategory:e??b.statusCategory};bS(g),bh===b.id&&aJ(g),aL(b.id);try{let c=await fetch(`/api/trackers/${a}/items/${encodeURIComponent(b.id)}?projectId=${encodeURIComponent(d??"")}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:f})}),e=await c.json().catch(()=>({}));if(!c.ok||!e.item)throw Error(e.error||"Failed to update ticket status");let g=e.item;bS(g),bh===g.id&&aJ(g),await bR()}catch(a){bS(b),bh===b.id&&aJ(b),a instanceof Error&&window.alert(a.message)}finally{aL(a=>a===b.id?null:a)}},[bR,bh,bS,a,d]);bF.current=ct;let cu=(0,c.useCallback)(async(b,c,e,f)=>{let h=f??aR[0]?.id;if(h)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee?.name??null,agentId:h,scriptName:c,scriptPrompt:e})})}catch(a){console.error(`Failed to start ${c} for ${b.identifier}:`,a)}},[aR,a,d,g]),cv=(0,c.useCallback)(async()=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0===b.length||0===aR.length)return;let c=aR[0];for(let e of b)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c.id,scriptName:"Recap",scriptPrompt:"Summarize recent activity and current state of this ticket. Focus on: what was done, what's outstanding, and any blockers."})})}catch(a){console.error(`Failed to start recap for ${e.identifier}:`,a)}bs(new Set)},[br,bN,aR,a,d,g]),cw=(0,c.useCallback)(async(b,c)=>{for(let e of Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean))try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c,scriptPrompt:b})})}catch(a){console.error(`Failed to send prompt for ${e.identifier}:`,a)}bs(new Set)},[br,bN,a,d,g]),cx=(0,c.useCallback)(async()=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0===b.length||0===aR.length)return;let c=aR[0];for(let e of b)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c.id,scriptName:"Estimate",scriptPrompt:"Assess the complexity and scope of this ticket and assign a Fibonacci story-point estimate (1, 2, 3, 5, 8, 13, or 21). Consider: required investigation, files likely to change, unknowns, and testing effort. Briefly justify the number, then set the estimate using the available tooling."})})}catch(a){console.error(`Failed to start estimate for ${e.identifier}:`,a)}bs(new Set)},[br,bN,aR,a,d,g]),cy=(0,c.useCallback)(async b=>{let c=Array.from(br);if(0!==c.length&&d)try{await fetch(`/api/trackers/${a}/metadata/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d,issueIds:c,action:"add_labels",payload:{labels:[b]}})}),bU(),bX()}catch{}},[br,d,a,bU,bX]),cz=(0,c.useCallback)(async b=>{let c=Array.from(br);if(0!==c.length&&d)try{await fetch(`/api/trackers/${a}/metadata/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d,issueIds:c,action:"remove_label",payload:{label:b}})}),bU(),bX()}catch{}},[br,d,a,bU,bX]),[cA,cB]=(0,c.useState)(!1),cC=(0,c.useCallback)(async a=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0!==b.length){for(let c of(cB(!0),b))await ct(c,a);cB(!1),bs(new Set)}},[br,bN,ct]),cD=(0,c.useCallback)(async a=>{d&&await bY(a)},[d,bY]),cE=(0,c.useCallback)(b=>({statusOptions:cj,onRecap:()=>{let c=d?`?projectId=${encodeURIComponent(d)}`:"";fetch(`/api/trackers/${encodeURIComponent(a)}/items/${encodeURIComponent(b.id)}/recap${c}`,{method:"POST"}).then(()=>{window.dispatchEvent(new CustomEvent("tracker:recap-triggered",{detail:{trackerType:a,issueId:b.id}}))})},onPrompt:(a,c)=>{cu(b,"Prompt",a,c)},onEstimate:()=>{cu(b,"Estimate","Assess the complexity and scope of this ticket and assign a Fibonacci story-point estimate (1, 2, 3, 5, 8, 13, or 21). Consider: required investigation, files likely to change, unknowns, and testing effort. Briefly justify the number, then set the estimate using the available tooling.")},onStatus:a=>{ct(b,a)}}),[cj,cu,ct,a,d]),cF=(0,c.useMemo)(()=>{let a=new Map;for(let b of br){let c=bT.get(b);a.set(b,c??{labels:[],estimate:null})}return a},[br,bT]);(0,c.useEffect)(()=>{if(!bh||!d)return void aJ(null);if(bZ)return void aJ(a=>a?.id===bh?bZ:null);let b=!1;return(async()=>{try{let c=await fetch(`/api/trackers/${a}/items/${encodeURIComponent(bh)}?projectId=${encodeURIComponent(d??"")}`);if(b)return;if(404===c.status)return void aJ(null);if(!c.ok)throw Error(`Failed to fetch selected tracker ticket: ${c.status}`);let e=await c.json().catch(()=>({}));if(!e.item?.id)return void aJ(null);aJ(e.item)}catch(a){b||console.error("Failed to hydrate selected tracker item",a)}})(),()=>{b=!0}},[bg,bZ,bh,a,d]),(0,c.useEffect)(()=>{if(!bh){bi&&bg({run:null});return}},[bg,bh,bi]),(0,c.useEffect)(()=>{b$&&bi&&!b4&&(b3.some(a=>a.id===bi)||bg({run:null}))},[bg,b3,b4,b$,bi]),(0,c.useEffect)(()=>{bh&&bi&&(0,N.persistLastRunForIssue)(bh,bi)},[bh,bi]),(0,c.useEffect)(()=>{cg&&!b4&&b5===bh&&(J.current=bh,cf&&b3.some(a=>a.id===cf)&&bg({run:cf}))},[cg,cf,bh,b3,b4,b5,bg]),(0,c.useEffect)(()=>{if(t){if(!b$)return void a0("runs");if(ce||0===b3.length)return void a0("ticket");a0("runs")}},[t,b3.length,b$,ce]),(0,c.useEffect)(()=>{if(!R)return;let a=a=>{let b=a.target;a9.current?.contains(b)||a8.current?.contains(b)||S(!1)},b=a=>{"Escape"===a.key&&S(!1)};return document.addEventListener("pointerdown",a),document.addEventListener("keydown",b),()=>{document.removeEventListener("pointerdown",a),document.removeEventListener("keydown",b)}},[R]);let cG=(0,c.useCallback)(async(b,c)=>{aV(null),aZ(null);try{let e=await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee?.name??null,agentId:c.id,scriptName:ca?.name,scriptPrompt:ca?.prompt})}),f=await e.json().catch(()=>({}));if(!e.ok||!f.run||!f.chatRunId||!f.userMessageId)throw Error(f.error||"Failed to start scripted session");bf({issue:b.id,run:f.run.id})}catch(a){console.error("Failed to start scripted tracker session:",a),a instanceof Error&&window.alert(a.message)}},[ca,d,g,bf,a]),cH=(0,c.useCallback)((a,b)=>{if(S(!1),0===aR.length)return void window.alert("Add at least one agent to this project before starting a scripted session.");if(1===aR.length)return void cG(a,aR[0]);let c=b?.currentTarget?.getBoundingClientRect();aV(a),aZ(c?{top:c.bottom+4,left:c.left}:{top:200,left:200})},[cG,aR]),cI=(0,c.useRef)(null),cJ=(0,c.useRef)(null),cK=(0,c.useRef)(null),[cL,cM]=(0,c.useState)(!1);(0,c.useEffect)(()=>{let a=[cJ.current,cK.current].filter(Boolean);if(0===a.length)return;let b=a=>{cM(a.currentTarget.scrollTop>400)};return a.forEach(a=>a.addEventListener("scroll",b,{passive:!0})),()=>a.forEach(a=>a.removeEventListener("scroll",b))},[t]);let cN=(0,c.useCallback)(()=>{let a=cJ.current??cK.current;a?.scrollTo({top:0,behavior:"smooth"})},[]);return((0,c.useEffect)(()=>{let a=cI.current;if(!a||!bP)return;let b=new IntersectionObserver(a=>{a[0]?.isIntersecting&&bQ()},{threshold:.1});return b.observe(a),()=>b.disconnect()},[bP,bQ]),u)?(0,b.jsxs)("div",{className:"relative flex h-full overflow-hidden",children:[t?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:V,onChange:a=>bL(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void bR(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:bO,children:(0,b.jsx)(l.RefreshCw,{size:16,className:bO?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>{S(!1),Q(!0)},title:"Tracker settings",children:(0,b.jsx)(n.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 pb-2",children:[cn?(0,b.jsx)(au,{label:aq,value:av,options:cl,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:ax}):null,cm?(0,b.jsx)(aw,{label:"Status",values:ah,options:ci,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:ai,emptyLabel:"All statuses"}):null,(0,b.jsx)(aw,{label:"Assignee",values:af,options:ch,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:ag,emptyLabel:"All assignees"}),cq.length>0&&(0,b.jsx)(aw,{label:"Label",values:aE,options:cq,activeClasses:"border-pink-500/30 bg-pink-500/10 text-pink-400",onChange:aF,emptyLabel:"All labels"}),co?(0,b.jsx)(au,{label:"Workspace",value:ay,options:ck,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:az}):null,(0,b.jsx)(au,{label:"Sort",value:aA,options:[{value:"activity",label:"Updated At"},{value:"identifier",label:"Ticket ID"},{value:"status",label:"Status"},{value:"created",label:"Created At"}],activeClasses:"border-sky-500/30 bg-sky-500/10 text-sky-400",onChange:a=>aB(a)}),(0,b.jsx)("button",{type:"button",className:"rounded-full border border-[var(--card-border)] p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"desc"===aC?"Descending":"Ascending",onClick:()=>aD(a=>"desc"===a?"asc":"desc"),children:"desc"===aC?(0,b.jsx)(e.ArrowDown,{size:12}):(0,b.jsx)(f.ArrowUp,{size:12})})]})]}),(0,b.jsxs)("div",{className:"relative flex-1 min-h-0 flex flex-col",children:[(0,b.jsx)("div",{ref:cK,className:"flex-1 overflow-y-auto",children:bO&&0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[b2.map(a=>{let d=aM.has(a.status);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a7,{status:a.status,categoryColor:bd[a.category]??"bg-zinc-400",count:a.items.length,collapsed:d,onToggle:()=>aN(b=>{let c=new Set(b);return c.has(a.status)?c.delete(a.status):c.add(a.status),c})}),!d&&a.items.map(a=>(0,b.jsx)(aQ,{item:a,selected:b$?.id===a.id,pinned:aG.has(a.id),activeAgents:aS.get(a.id),participants:aR,projectSlug:g,stats:aT.get(a.id),hideStatus:!0,estimate:bT.get(a.id)?.estimate,localLabels:bT.get(a.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:b=>cr(a.id,b),onAddLabel:cs,onSelect:()=>{a0("runs"),bf({issue:a.id,run:null})},onTogglePin:()=>bM(a.id),rowActions:cE(a),showGroup:!av},a.id))]},`sg-${a.status}`)}),bP?(0,b.jsx)("div",{ref:cI,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:bO?"Loading...":"Load more"}):null]})}),(0,b.jsx)(bb.JumpToLatestButton,{visible:cL&&bN.length>20,direction:"top",onClick:cN})]})]}),b$?(0,b.jsxs)("div",{className:"absolute inset-0 z-20 flex flex-col bg-[var(--background)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 border-b border-[var(--card-border)] px-4 py-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-[var(--muted-foreground)]",children:b$.identifier}),(0,b.jsx)("div",{className:"truncate text-sm font-semibold text-[var(--foreground)]",children:b$.title})]}),(0,b.jsx)("button",{type:"button",className:"rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>bg({issue:null,run:null}),"aria-label":"Close ticket panel",children:(0,b.jsx)(q.X,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("button",{type:"button",className:`rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${"runs"===a$?"bg-[var(--card-bg)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,onClick:()=>a0("runs"),children:"Runs"}),(0,b.jsx)("button",{type:"button",className:`rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${"ticket"===a$?"bg-[var(--card-bg)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,onClick:()=>a0("ticket"),children:"Ticket"})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:"runs"===a$?(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"relative flex items-center justify-between border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-[var(--foreground)]",children:"Sessions"}),(0,b.jsxs)("button",{ref:a8,type:"button",className:"inline-flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-40",onClick:()=>{S(!1),a0("ticket"),bf({run:null})},title:"Open a fresh chat for this ticket. You can choose or edit the session script in the ticket tab.","aria-label":"New session",disabled:!b$,children:[(0,b.jsx)(k.Plus,{size:12}),"New session"]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:b4&&0===b3.length||cg?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading sessions..."}):0===b3.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No previous sessions yet."}):b3.map(a=>{let c=an(a);return(0,b.jsxs)("button",{type:"button",className:`w-full px-3 py-2 text-left text-xs transition-colors ${ce?.id===a.id?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]"}`,onClick:()=>{a0("ticket"),bf({run:a.id})},children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-[11px] font-medium text-[var(--foreground)]",children:ao(a)}),(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:new Date(a.startedAt).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-1.5 text-[10px]",children:[(0,b.jsx)("span",{className:`font-medium ${as[c.tone]}`,children:c.label}),(0,b.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:a.agentName})]}),null!=a.durationMs?(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[(a.durationMs/1e3).toFixed(1),"s"]}):null]},a.id)})})]}):ce?(0,b.jsx)(be,{item:b$??{id:ce.issueId,identifier:ce.issueIdentifier,title:ce.issueTitle,status:ce.issueStatus,statusCategory:"todo",labels:[],trackerId:"",trackerType:a,assignee:ce.issueAssignee?{id:"",name:ce.issueAssignee}:void 0,updatedAt:ce.updatedAt,createdAt:ce.updatedAt,url:""},run:ce,participants:aR,itemStatusOptions:cj,itemStatusUpdating:aK===ce.issueId,onItemStatusChange:ct,onBack:()=>bg({run:null})}):cg?null:0===aR.length?(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Add at least one agent to this project to start a session."}):(0,b.jsx)(aX,{item:b$,trackerType:a,runs:b3,participants:aR,projectId:d,projectSlug:g,itemStatusOptions:cj,itemStatusUpdating:aK===b$.id,onItemStatusChange:ct,activeSessionScriptLabel:cp,onOpenSessionScripts:()=>S(!0),onStartScriptedSession:a=>cH(b$,a),createRun:b6,updateRun:b7,onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})},b$.id)})]}):null]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:T},children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:V,onChange:a=>bL(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void bR(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:bO,children:(0,b.jsx)(l.RefreshCw,{size:16,className:bO?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>{S(!1),Q(!0)},title:"Tracker settings",children:(0,b.jsx)(n.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pb-2",children:[cn?(0,b.jsx)(au,{label:aq,value:av,options:cl,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:ax}):null,cm?(0,b.jsx)(aw,{label:"Status",values:ah,options:ci,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:ai,emptyLabel:"All statuses"}):null,(0,b.jsx)(aw,{label:"Assignee",values:af,options:ch,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:ag,emptyLabel:"All assignees"}),cq.length>0&&(0,b.jsx)(aw,{label:"Label",values:aE,options:cq,activeClasses:"border-pink-500/30 bg-pink-500/10 text-pink-400",onChange:aF,emptyLabel:"All labels"}),co?(0,b.jsx)(au,{label:"Workspace",value:ay,options:ck,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:az}):null,(0,b.jsx)(au,{label:"Sort",value:aA,options:[{value:"activity",label:"Updated At"},{value:"identifier",label:"Ticket ID"},{value:"status",label:"Status"},{value:"created",label:"Created At"}],activeClasses:"border-sky-500/30 bg-sky-500/10 text-sky-400",onChange:a=>aB(a)}),(0,b.jsx)("button",{type:"button",className:"rounded-full border border-[var(--card-border)] p-0.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"desc"===aC?"Descending":"Ascending",onClick:()=>aD(a=>"desc"===a?"asc":"desc"),children:"desc"===aC?(0,b.jsx)(e.ArrowDown,{size:12}):(0,b.jsx)(f.ArrowUp,{size:12})}),b1.length>0&&(p=b1.length>0&&b1.every(a=>br.has(a.id)),(0,b.jsxs)("button",{type:"button",className:`flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] transition-colors ${p?"border-[var(--primary)]/40 bg-[var(--primary)]/10 text-[var(--primary)]":"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,title:p?"Clear selection":"Select all filtered tickets",onClick:()=>{p?bs(new Set):bs(new Set(b1.map(a=>a.id)))},children:[p?(0,b.jsx)(h,{size:12}):(0,b.jsx)(o,{size:12}),p?"Clear":`Select all (${b1.length})`]}))]})]}),(0,b.jsxs)(aO.DndContext,{sensors:bz,collisionDetection:aO.closestCenter,onDragStart:bJ,onDragEnd:bK,children:[(0,b.jsxs)("div",{className:"relative flex-1 min-h-0 flex flex-col",children:[(0,b.jsxs)("div",{ref:cJ,className:"flex-1 overflow-y-auto",children:[bO&&0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[b2.map(a=>{let d=aM.has(a.status);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a7,{status:a.status,categoryColor:bd[a.category]??"bg-zinc-400",count:a.items.length,collapsed:d,onToggle:()=>aN(b=>{let c=new Set(b);return c.has(a.status)?c.delete(a.status):c.add(a.status),c})}),!d&&(()=>{let d=bt?new Set(bv):null,e=new Map;for(let b of bk){let c=a.items.find(a=>b.task_ids.includes(a.id));c&&e.set(c.id,b)}let f=bt?bv.map(b=>a.items.find(a=>a.id===b)).filter(Boolean).map(a=>({id:a.id,identifier:a.identifier,title:a.title,status:ap[a.status]??a.status})):[],h=new Set;return a.items.map(i=>{if(d?.has(i.id))return i.id===bx&&bt?(0,b.jsx)(a5,{tickets:f,onConfirm:bD,onCancel:()=>{bu(!1),bw([]),by(null)}},"__pending-group__"):null;let j=e.get(i.id);if(j&&!h.has(j.id)){h.add(j.id);let d=j.task_ids.map(b=>a.items.find(a=>a.id===b)).filter(Boolean);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a_,{groupId:j.id,name:j.name,count:d.length,collapsed:!!j.collapsed,selected:bj===j.id,projectSlug:g,onToggleCollapse:()=>bm(j.id,{collapsed:!j.collapsed}),onSelect:()=>bf({group:j.id,issue:null,run:null}),onUngroup:()=>{bn(j.id),bj===j.id&&bg({group:null})}}),!j.collapsed&&d.map((a,c)=>(0,b.jsx)(aQ,{item:a,selected:b$?.id===a.id,pinned:aG.has(a.id),activeAgents:aS.get(a.id),participants:aR,draggable:!0,multiSelected:br.has(a.id),treeConnector:c===d.length-1?"last":"mid",projectSlug:g,stats:aT.get(a.id),hideStatus:!0,estimate:bT.get(a.id)?.estimate,localLabels:bT.get(a.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:b=>cr(a.id,b),onAddLabel:cs,onSelect:b=>{b&&(b.metaKey||b.ctrlKey)?bC(a.id):bf({issue:a.id,run:null,group:null})},onTogglePin:()=>bM(a.id),rowActions:cE(a),showGroup:!av},a.id))]},`group-${j.id}`)}return bI.has(i.id)?null:(0,b.jsx)(aQ,{item:i,selected:b$?.id===i.id,pinned:aG.has(i.id),activeAgents:aS.get(i.id),participants:aR,draggable:!0,multiSelected:br.has(i.id),projectSlug:g,stats:aT.get(i.id),hideStatus:!0,estimate:bT.get(i.id)?.estimate,localLabels:bT.get(i.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:a=>cr(i.id,a),onAddLabel:cs,onSelect:a=>{a&&(a.metaKey||a.ctrlKey)?bC(i.id):bf({issue:i.id,run:null,group:null})},onTogglePin:()=>bM(i.id),rowActions:cE(i),showGroup:!av},i.id)})})()]},`sg-${a.status}`)}),bP?(0,b.jsx)("div",{ref:cI,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:bO?"Loading...":"Load more"}):null]}),(0,b.jsx)(ba,{count:br.size,onGroup:bG,onClear:()=>bs(new Set),onBulkRecap:cv,onBulkPrompt:cw,onBulkEstimate:cx,onBulkAddLabel:cy,onBulkRemoveLabel:cz,onBulkStatus:cC,statusOptions:cj,participants:aR,labels:bV,onCreateLabel:cD,selectedMetadata:cF,statusUpdating:cA})]}),(0,b.jsx)(bb.JumpToLatestButton,{visible:cL&&bN.length>20,direction:"top",onClick:cN})]}),(0,b.jsx)(aO.DragOverlay,{dropAnimation:null,children:bA&&((s=bE.current.find(a=>a.id===bA))?(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-lg border border-[var(--primary)]/30 bg-[var(--card-bg)] px-4 py-2.5 text-sm shadow-xl backdrop-blur-sm",children:[(0,b.jsx)("span",{className:"w-24 shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:s.identifier}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-[var(--foreground)]",children:s.title})]}):null)})]})]}),(0,b.jsx)(at.ResizeHandle,{onResize:a=>U(b=>{let c=Math.max(280,Math.min(960,b+a));return(0,M.persistLinearTicketPanelWidth)(c),c})}),R?(0,b.jsx)("div",{ref:a9,className:"absolute right-6 top-16 z-20 max-h-[80vh] overflow-y-auto rounded-2xl border border-[var(--card-border)] bg-[var(--background)] p-4 shadow-2xl",style:{width:"min(760px, calc(100vw - 32px))"},children:(0,b.jsx)(I,{projectSlug:g,scripts:b8,activeScriptId:b9,onSetActiveScriptId:cb,onSaveScript:cc,onDeleteScript:cd})}):null,(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:ce?(0,b.jsx)(be,{item:b$??{id:ce.issueId,identifier:ce.issueIdentifier,title:ce.issueTitle,status:ce.issueStatus,statusCategory:"todo",labels:[],trackerId:"",trackerType:a,assignee:ce.issueAssignee?{id:"",name:ce.issueAssignee}:void 0,updatedAt:ce.updatedAt,createdAt:ce.updatedAt,url:""},run:ce,participants:aR,itemStatusOptions:cj,itemStatusUpdating:aK===ce.issueId,onItemStatusChange:ct,onBack:()=>bg({run:null})}):bH&&!b$?(0,b.jsx)(a2,{group:bH,items:bN,trackerType:a,participants:aR,projectId:d,projectSlug:g,onUpdateName:a=>bm(bH.id,{name:a}),onDelete:async()=>{await bn(bH.id),bg({group:null})},onSelectItem:a=>bf({issue:a,group:null,run:null}),onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})}):b$?cg?null:0===aR.length?(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Add at least one agent to this project to start a session."}):(0,b.jsx)(aX,{item:b$,trackerType:a,runs:b3,participants:aR,projectId:d,projectSlug:g,itemStatusOptions:cj,itemStatusUpdating:aK===b$.id,onItemStatusChange:ct,activeSessionScriptLabel:cp,onOpenSessionScripts:()=>S(!0),onStartScriptedSession:a=>cH(b$,a),createRun:b6,updateRun:b7,onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})},b$.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Select a ticket from the list."})})]}),O&&(0,b.jsx)(am,{trackerType:a,connected:u,user:B,clis:C,mcpConfigured:D,onConnect:E,onConnectWithKey:F,onDisconnect:G,onConfigureMcp:H,onClose:()=>Q(!1),projectId:d}),R&&t?(0,b.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center bg-black/50 p-4",children:(0,b.jsx)("div",{ref:a9,className:"max-h-[85vh] w-full max-w-3xl overflow-y-auto rounded-2xl border border-[var(--card-border)] bg-[var(--background)] p-4 shadow-2xl",children:(0,b.jsx)(I,{projectSlug:g,scripts:b8,activeScriptId:b9,onSetActiveScriptId:cb,onSaveScript:cc,onDeleteScript:cd})})}):null,aU&&aW&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>{aV(null),aZ(null)}}),(0,b.jsxs)("div",{className:"fixed z-50 min-w-[180px] rounded border border-[var(--card-border)] bg-[var(--card-bg)] py-1 shadow-lg",style:{top:aW.top,left:aW.left},children:[(0,b.jsx)("div",{className:"px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Pick an agent"}),aR.map(a=>(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--card-bg)]",onClick:()=>void cG(aU,a),children:[(0,b.jsx)("img",{src:aP(a.id,a.color,20),alt:"",className:"h-5 w-5 shrink-0 rounded-full"}),(0,b.jsxs)("span",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:a.name}),a.role?(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.role}):null]})]},a.id))]})]})]}):(0,b.jsx)(P.default,{trackerType:a,projectId:d??"",connected:u,onConnect:E,onConnectWithKey:F})}a.s(["default",()=>bf],859117)}];
|
|
48
|
+
`+(j??""),f=await fetch("/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:b,promptPrefix:e,threadId:c.threadId,activeParticipantIds:[m.id],projectSlug:h??void 0,routing:k})}),i=await f.json().catch(()=>({}));if(!f.ok||!i.chatRunId||!i.userMessageId)throw Error(i.error||"Failed to start chat session");await v(c.id,{chatRunId:i.chatRunId,rootMessageId:i.userMessageId}),l(c.id)}catch(a){console.error("Failed to create group chat session:",a),I.current=!1,a instanceof Error&&window.alert(a.message)}},[a,s,f,w,g,h,u,v,l]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex h-12 shrink-0 items-center gap-2 border-b border-[var(--card-border)] px-4",children:[(0,b.jsx)(aZ.FolderOpen,{size:16,className:"shrink-0 text-[var(--muted-foreground)]"}),n?(0,b.jsx)("input",{type:"text",value:p,onChange:a=>q(a.target.value),onBlur:r,onKeyDown:b=>{"Enter"===b.key&&r(),"Escape"===b.key&&(q(a.name),o(!1))},autoFocus:!0,className:"min-w-0 flex-1 bg-transparent text-sm font-medium text-[var(--foreground)] outline-none border-b border-[var(--primary)]"}):(0,b.jsx)("h3",{className:"min-w-0 flex-1 truncate text-sm font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:()=>{q(a.name),o(!0)},title:"Rename group",children:(0,b.jsx)(a0.Pencil,{size:12})}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] hover:text-red-400 transition-colors",onClick:j,title:"Delete group (ungroups tickets)",children:(0,b.jsx)(F.Trash2,{size:12})})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-64",children:[(0,b.jsxs)("section",{className:"border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"px-4 py-2 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:["Tickets (",s.length,")"]}),0===s.length?(0,b.jsx)("div",{className:"px-4 pb-4 text-center text-xs text-[var(--muted-foreground)]",children:"No tickets in this group."}):s.map(a=>(0,b.jsx)(aQ,{item:a,selected:!1,onSelect:()=>k(a.id)},a.id))]}),(0,b.jsx)(aR,{issueId:a.id,trackerType:e,projectId:g}),(0,b.jsx)(aT,{runs:t,onSelect:m})]}),f.length>0&&(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:(0,b.jsx)(a1,{onSend:J,onStop:()=>{},participants:f,projectId:g??void 0,projectSlug:h??void 0,loading:"ready"!==H,commands:[],activityStatus:H,placeholder:`Work on tickets in "${a.name}"...`,initialPinnedParticipantId:w?.id})})]})}let a3="__pending-group__";function a4({ticket:a,isLast:c}){let{attributes:d,listeners:e,setNodeRef:f,transform:g,isDragging:h}=(0,aO.useDraggable)({id:a.id}),i=g?{transform:`translate3d(${g.x}px, ${g.y}px, 0)`,opacity:h?.3:1,position:"relative",zIndex:h?50:void 0}:void 0;return(0,b.jsxs)("div",{ref:f,style:i,...d,...e,className:"flex items-center gap-3 pl-[48px] pr-4 py-2 text-sm cursor-grab active:cursor-grabbing",children:[(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] leading-none text-[var(--muted-foreground)]/40 select-none",children:c?"└──":"├──"}),(0,b.jsx)("span",{className:"shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs text-[var(--muted-foreground)]",children:a.title}),a.status&&(0,b.jsx)("span",{className:"shrink-0 text-xs text-[var(--muted-foreground)]",children:a.status})]})}function a5({tickets:a,onConfirm:d,onCancel:e}){let[f,g]=(0,c.useState)(""),h=(0,c.useRef)(null),{setNodeRef:i,isOver:j}=(0,aO.useDroppable)({id:a3});(0,c.useEffect)(()=>{h.current?.focus()},[]);let k=(0,c.useCallback)(()=>{let b=f.trim(),c=a.map(a=>a.identifier).join(", ");d(b||c||"Untitled")},[f,d,a]);return(0,b.jsxs)("div",{ref:i,className:`mx-0 my-0 transition-colors ${j?"bg-[var(--primary)]/5":""}`,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 pl-[24px] pr-4 py-2 bg-[var(--card-bg)]/50",children:[(0,b.jsx)(U.ChevronDown,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)(aZ.FolderOpen,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{ref:h,type:"text",value:f,onChange:a=>g(a.target.value),onKeyDown:a=>{"Enter"===a.key&&k(),"Escape"===a.key&&e()},placeholder:a.map(a=>a.identifier).join(", ")||"Name this group...",className:"min-w-0 flex-1 bg-transparent text-xs font-medium text-[var(--foreground)] placeholder:text-[var(--muted-foreground)]/60 outline-none border-b border-[var(--primary)]/40 pb-0.5 focus:border-[var(--primary)]"}),(0,b.jsx)("button",{type:"button",className:"rounded px-2 py-0.5 text-[10px] font-medium bg-[var(--primary)] text-[var(--primary-foreground)] hover:opacity-90 transition-opacity",onClick:k,children:"Create"}),(0,b.jsx)("button",{type:"button",className:"rounded px-2 py-0.5 text-[10px] font-medium text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",onClick:e,children:"Cancel"})]}),a.map((c,d)=>(0,b.jsx)(a4,{ticket:c,isLast:d===a.length-1},c.id))]})}let a6="sg::";function a7({status:a,categoryColor:c,count:d,collapsed:e,onToggle:f}){let{setNodeRef:g,isOver:h}=(0,aO.useDroppable)({id:`${a6}${a}`});return(0,b.jsxs)("div",{ref:g,className:`sticky top-0 z-[5] flex cursor-pointer items-center gap-2 border-b border-[var(--card-border)] bg-[var(--app-shell-pane)] px-4 py-2 transition-colors ${h?"bg-[var(--primary)]/10 ring-1 ring-inset ring-[var(--primary)]/30":""}`,onClick:f,role:"button",tabIndex:0,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},children:[e?(0,b.jsx)(V.ChevronRight,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}):(0,b.jsx)(U.ChevronDown,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${c}`}),(0,b.jsx)("span",{className:"text-xs font-medium text-[var(--foreground)]",children:a}),(0,b.jsx)("span",{className:"text-[10px] tabular-nums text-[var(--muted-foreground)]",children:d})]})}var a8=a.i(785630);function a9({open:a,onClose:d,anchorRef:e,children:f}){let g=(0,c.useRef)(null);return((0,c.useEffect)(()=>{if(!a)return;let b=a=>{g.current?.contains(a.target)||e.current?.contains(a.target)||d()},c=a=>{"Escape"===a.key&&d()};return document.addEventListener("pointerdown",b),document.addEventListener("keydown",c),()=>{document.removeEventListener("pointerdown",b),document.removeEventListener("keydown",c)}},[a,d,e]),a)?(0,b.jsx)("div",{ref:g,className:"absolute bottom-full left-1/2 z-50 mb-2 -translate-x-1/2 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-2 shadow-lg backdrop-blur-sm",children:f}):null}function ba({count:a,onGroup:d,onClear:e,onBulkRecap:f,onBulkPrompt:g,onBulkEstimate:h,onBulkAddLabel:i,onBulkRemoveLabel:j,onBulkStatus:k,statusOptions:m,participants:n,labels:o,onCreateLabel:p,selectedMetadata:r,statusUpdating:s}){let[t,u]=(0,c.useState)(null),v=(0,c.useRef)(null),w=(0,c.useRef)(null),x=(0,c.useRef)(null),y=(0,c.useCallback)(a=>{u(b=>b===a?null:a)},[]),z=c.default.useMemo(()=>{let a=new Map;for(let b of r.values())for(let c of b.labels)a.set(c,(a.get(c)??0)+1);return a},[r]),A=c.default.useMemo(()=>{let a=new Set;for(let b of r.values())for(let c of b.labels)a.add(c);return Array.from(a)},[r]);if(a<2)return null;let B="flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-[11px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]";return(0,b.jsx)("div",{className:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2",children:(0,b.jsxs)("div",{className:"flex items-center gap-1 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-1.5 shadow-2xl",children:[(0,b.jsxs)("span",{className:"mr-1 text-xs font-medium text-[var(--foreground)]",children:[a," selected"]}),(0,b.jsx)("div",{className:"mx-1 h-4 w-px bg-[var(--card-border)]"}),(0,b.jsxs)("button",{type:"button",className:B,onClick:f,title:"Recap all selected",children:[(0,b.jsx)(aK.FileText,{size:12}),"Recap"]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:x,type:"button",className:`${B} ${"prompt"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("prompt"),title:"Send prompt to all selected",children:[(0,b.jsx)(ay.MessageSquare,{size:12}),"Prompt"]}),(0,b.jsx)(a9,{open:"prompt"===t,onClose:()=>u(null),anchorRef:x,children:(0,b.jsx)(aM,{count:a,participants:n,onSend:(a,b)=>{g(a,b),u(null)}})})]}),(0,b.jsxs)("button",{type:"button",className:B,onClick:h,title:"Ask the LLM to size all selected",children:[(0,b.jsx)(aL.Hash,{size:12}),"Estimate"]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:v,type:"button",className:`${B} ${"label"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("label"),title:"Label all selected",children:[(0,b.jsx)(T.Tag,{size:12}),"Label"]}),(0,b.jsx)(a9,{open:"label"===t,onClose:()=>u(null),anchorRef:v,children:(0,b.jsx)(aJ,{labels:o,selectedLabels:A,labelCounts:z,totalSelected:a,onToggle:b=>{(z.get(b)??0)===a?j(b):i(b)},onAdd:p})})]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsxs)("button",{ref:w,type:"button",className:`${B} ${"status"===t?"bg-[var(--background)] text-[var(--foreground)]":""}`,onClick:()=>y("status"),title:"Update status for all selected",disabled:s,children:[s?(0,b.jsx)(l.RefreshCw,{size:12,className:"animate-spin"}):(0,b.jsx)(l.RefreshCw,{size:12}),"Status"]}),(0,b.jsx)(a9,{open:"status"===t,onClose:()=>u(null),anchorRef:w,children:(0,b.jsx)("div",{className:"flex max-h-48 w-44 flex-col overflow-y-auto",children:m.map(a=>(0,b.jsx)("button",{type:"button",className:"w-full rounded-lg px-3 py-1.5 text-left text-xs text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]",onClick:()=>{k(a.value),u(null)},children:a.label},a.value))})})]}),(0,b.jsxs)("button",{type:"button",className:B,onClick:d,title:"Group selected",children:[(0,b.jsx)(a8.FolderPlus,{size:12}),"Group"]}),(0,b.jsx)("div",{className:"mx-1 h-4 w-px bg-[var(--card-border)]"}),(0,b.jsx)("button",{type:"button",className:"flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",onClick:e,"aria-label":"Clear selection",children:(0,b.jsx)(q.X,{size:14})})]})})}var bb=a.i(908225);let bc=(0,d.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),bd={todo:"bg-zinc-400",in_progress:"bg-amber-400",done:"bg-emerald-400",cancelled:"bg-red-400"};function be({item:a,run:d,participants:e,itemStatusOptions:f,itemStatusUpdating:g,onItemStatusChange:h,onBack:k}){let{messages:l,setMessages:m,sendMessage:n,loadHistory:o,stop:q}=(0,A.useGroupChat)(d.threadId),{processes:r,streaming:s,chatRuns:t}=(0,B.useProcessPolling)(d.rootMessageId?{workspaceId:d.threadId,threadId:d.rootMessageId}:{workspaceId:d.threadId},{messages:l,setMessages:m}),u=(0,c.useMemo)(()=>{let a=t[0];if(!a)return an(d);let b={queued:"queued",running:"running",awaiting_user:"running",blocked:"running",completed:"success",failed:"failed",cancelled:"cancelled"}[a.status]??d.status;return an({...d,status:b})},[t,d]);(0,c.useEffect)(()=>{o()},[o,d.threadId]);let v=(0,c.useMemo)(()=>new Map(e.map(a=>[a.id,a])),[e]),w=(0,c.useRef)(null),[x,y]=(0,c.useState)(!1);(0,c.useEffect)(()=>{let a=w.current;if(!a)return;let b=()=>{let{scrollTop:b,scrollHeight:c,clientHeight:d}=a;y(c-b-d>200)};return a.addEventListener("scroll",b,{passive:!0}),()=>a.removeEventListener("scroll",b)},[]);let z=(0,c.useCallback)(()=>{let a=w.current;a&&a.scrollTo({top:a.scrollHeight,behavior:"smooth"})},[]),D=(0,c.useRef)(0);(0,c.useEffect)(()=>{l.length>D.current&&w.current?.scrollTo({top:w.current.scrollHeight,behavior:"smooth"}),D.current=l.length},[l.length]);let E=new Set(["queued","running","awaiting_user","blocked"]),F=t.some(a=>E.has(a.status))||r.some(a=>"spawning"===a.state||"running"===a.state)?t.some(a=>"queued"===a.status)?"queued":"working":"ready",G=(0,c.useCallback)((a,b,c,f,g,h,i)=>{d.rootMessageId&&n(a,b,void 0,d.rootMessageId,c,void 0,(0,O.orderParticipantIds)(e.map(a=>a.id),g),d.projectSlug??void 0,h,i)},[e,d.projectSlug,d.rootMessageId,n]);return(0,b.jsxs)("div",{className:"relative flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-[var(--card-border)] px-6",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[k&&(0,b.jsx)("button",{type:"button",onClick:k,className:"shrink-0 rounded p-0.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"Back to sessions",children:(0,b.jsx)(i.ChevronLeft,{size:16})}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-sm text-[var(--muted-foreground)]",children:a.identifier}),(0,b.jsx)("div",{className:"h-1 w-1 shrink-0 rounded-full bg-[var(--card-border)]"}),(0,b.jsx)("span",{className:"truncate text-sm font-medium text-[var(--foreground)]",children:ao(d)})]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-4",children:[(0,b.jsx)(av,{status:a.status,options:f,disabled:0===f.length,updating:g,onChange:b=>h(a,b)}),(0,b.jsxs)("div",{className:`flex items-center gap-2 rounded-md border px-2.5 py-1 ${aq[u.tone]}`,children:[(0,b.jsx)("div",{className:`h-1.5 w-1.5 rounded-full ${ar[u.tone]}`}),(0,b.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider",children:u.label})]}),null!=d.durationMs&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)(j.Clock,{size:14}),(0,b.jsxs)("span",{children:[(d.durationMs/1e3).toFixed(1),"s"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 rounded-full border border-[var(--card-border)] bg-[var(--card-bg)] px-2 py-1",children:[(0,b.jsx)("img",{src:aP(d.agentId,v.get(d.agentId)?.color),alt:d.agentName,className:"h-5 w-5 rounded-full object-cover"}),(0,b.jsx)("span",{className:"pr-1 text-xs font-medium",children:d.agentName})]})]})]}),(0,b.jsx)("div",{ref:w,className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 pb-64",children:0===l.length?(0,b.jsx)("div",{className:"py-8 text-center text-xs text-[var(--muted-foreground)]",children:"queued"===d.status||"running"===d.status?"Starting session...":"No thread messages yet."}):(0,b.jsxs)("div",{className:"mx-auto max-w-4xl space-y-8",children:[l.map(a=>{let c=a.participantId?v.get(a.participantId):null,e=(0,J.stripMarkers)(a.content);if(!e.trim())return null;let f=a.participantId??d.agentId;return(0,b.jsxs)("div",{className:"flex gap-3",children:["user"===a.role?(0,b.jsx)("div",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[var(--app-shell-subtle,var(--card-bg))]",children:(0,b.jsx)(p.User,{className:"h-3.5 w-3.5 text-[var(--muted-foreground)]"})}):(0,b.jsx)("img",{src:aP(f,c?.color),alt:c?.name??d.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("div",{className:"flex items-center gap-2",children:"user"===a.role?(0,b.jsx)("span",{className:"text-sm font-semibold text-[var(--foreground)]",children:"You"}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-sm font-semibold",style:{color:c?.color??"var(--foreground)"},children:c?.name??d.agentName}),(0,b.jsx)("span",{className:"rounded bg-[var(--card-bg)] px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Agent"})]})}),(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:new Date(a.timestamp).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),"user"===a.role?(0,b.jsx)("div",{className:"w-fit max-w-[85%] rounded-xl rounded-tl-sm border border-[var(--card-border)] bg-[var(--card-bg)] px-4 py-3 text-sm text-[var(--foreground)]",children:(0,b.jsx)(C.Markdown,{content:e,isUser:!0})}):(0,b.jsx)("div",{className:"text-sm text-[var(--foreground)]",children:(0,b.jsx)(C.Markdown,{content:e,isUser:!1})})]})]},a.id)}),Object.entries(s).filter(([,a])=>!d.rootMessageId||a.rootMessageId===d.rootMessageId).map(([a])=>{let c=v.get(a);return(0,b.jsxs)("div",{className:"flex items-center gap-3 text-sm text-[var(--muted-foreground)]",children:[(0,b.jsx)("img",{src:aP(a,c?.color),alt:c?.name??d.agentName,className:"h-7 w-7 shrink-0 rounded-full object-cover"}),c?.name??d.agentName," is thinking..."]},`stream-${a}`)})]})}),(0,b.jsx)(bb.JumpToLatestButton,{visible:x&&l.length>10,onClick:z,offsetClassName:"bottom-40"}),(0,b.jsx)("div",{className:"absolute bottom-3 left-3 right-3 p-2",children:d.rootMessageId?(0,b.jsx)(bc,{onSend:G,onStop:q,participants:e,projectId:d.projectId??void 0,projectSlug:d.projectSlug??void 0,loading:"ready"!==F,commands:[],activityStatus:F,placeholder:"Continue this session...",initialPinnedParticipantId:d.agentId}):(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-[var(--muted-foreground)]",children:"Waiting for the session to start..."})})]})}function bf({trackerType:a,projectId:d,projectSlug:g,initialShowSettings:i,initialGroupId:j}){let p,s,{isTouchLayout:t}=(0,K.useInputCapabilities)(),{connected:u,loading:A,user:B,clis:C,mcpConfigured:D,connect:E,connectWithKey:F,disconnect:G,configureMcp:H}=(0,x.useTrackerConnection)(a,d??""),J=(0,c.useRef)(null),[O,Q]=(0,c.useState)(i??!1),[R,S]=(0,c.useState)(!1),[T,U]=(0,c.useState)(()=>(0,M.loadLinearTicketPanelWidth)()||576),[V,W]=(0,c.useState)(""),[X,Y]=(0,c.useState)(""),[Z,$]=(0,c.useState)(!1),[_,aa]=(0,c.useState)([]),[ab,ac]=(0,c.useState)([]),[ad,ae]=(0,c.useState)([]),[af,ag]=(0,c.useState)([]),[ah,ai]=(0,c.useState)([]),[aj,ak]=(0,c.useState)([]),[aq,ar]=(0,c.useState)("Group"),[av,ax]=(0,c.useState)(""),[ay,az]=(0,c.useState)(""),[aA,aB]=(0,c.useState)("activity"),[aC,aD]=(0,c.useState)("desc"),[aE,aF]=(0,c.useState)([]),[aG,aH]=(0,c.useState)(()=>new Set),[aI,aJ]=(0,c.useState)(null),[aK,aL]=(0,c.useState)(null),[aM,aN]=(0,c.useState)(new Set),{participants:aR}=(0,aY.useTrackerParticipants)(a,d),{issueActiveAgents:aS}=function(a,b){let[d,e]=(0,c.useState)(new Map);return(0,c.useEffect)(()=>{let c=!1;async function d(){try{let d=new URLSearchParams;b&&d.set("projectId",b);let f=await fetch(`/api/trackers/${a}/active-agents?${d}`);if(!f.ok||c)return;let g=await f.json(),h=new Map;for(let a of g.agents??[]){let b=h.get(a.issueId)??[];b.push({agentId:a.agentId,agentName:a.agentName}),h.set(a.issueId,b)}c||e(h)}catch{}}d();let f=setInterval(()=>void d(),5e3);return()=>{c=!0,clearInterval(f)}},[a,b]),{issueActiveAgents:d}}(a,d),{issueStats:aT}=function(a,b){let[d,e]=(0,c.useState)(new Map);return(0,c.useEffect)(()=>{let c=!1;async function d(){try{let d=new URLSearchParams;b&&d.set("projectId",b);let f=await fetch(`/api/trackers/${a}/stats?${d}`);if(!f.ok||c)return;let g=await f.json(),h=new Map;for(let a of g.stats??[])h.set(a.issueId,{sessions:a.sessions,messages:a.messages});c||e(h)}catch{}}d();let f=setInterval(()=>void d(),1e4);return()=>{c=!0,clearInterval(f)}},[a,b]),{issueStats:d}}(a,d),[aU,aV]=(0,c.useState)(null),[aW,aZ]=(0,c.useState)(null),[a$,a0]=(0,c.useState)("runs"),a1=(0,c.useRef)(null),a4=(0,c.useRef)(!0),a8=(0,c.useRef)(null),a9=(0,c.useRef)(null),{getSelection:bc,pushSelection:bf,replaceSelection:bg}=(0,r.useUrlSelection)(),bh=bc("issue"),bi=bc("run"),bj=bc("group"),{groups:bk,createGroup:bl,updateGroup:bm,deleteGroup:bn,addTasksToGroup:bo,removeTaskFromGroup:bp,refetch:bq}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)(!1),g=(0,c.useCallback)(async()=>{if(a){f(!0);try{let b=await fetch(`/api/task-groups?project_id=${encodeURIComponent(a)}`);if(!b.ok)throw Error("Failed to fetch groups");let c=await b.json();d(c.groups??[])}catch(a){console.error("useTaskGroups fetch error:",a)}finally{f(!1)}}},[a]);(0,c.useEffect)(()=>{g()},[g]);let h=(0,c.useCallback)(async(b,c)=>{if(!a)return null;try{let d=await fetch("/api/task-groups",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({project_id:a,name:b,task_ids:c})});if(!d.ok)throw Error("Failed to create group");let e=await d.json();return await g(),e.group}catch(a){return console.error("createGroup error:",a),null}},[a,g]),i=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})).ok)throw Error("Failed to update group");await g()}catch(a){console.error("updateGroup error:",a)}},[g]),j=(0,c.useCallback)(async a=>{try{if(!(await fetch(`/api/task-groups/${a}`,{method:"DELETE"})).ok)throw Error("Failed to delete group");await g()}catch(a){console.error("deleteGroup error:",a)}},[g]),k=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}/tasks`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({task_ids:b})})).ok)throw Error("Failed to assign tasks");await g()}catch(a){console.error("addTasksToGroup error:",a)}},[g]),l=(0,c.useCallback)(async(a,b)=>{try{if(!(await fetch(`/api/task-groups/${a}/tasks?task_id=${encodeURIComponent(b)}`,{method:"DELETE"})).ok)throw Error("Failed to remove task");await g()}catch(a){console.error("removeTaskFromGroup error:",a)}},[g]);return{groups:b,isLoading:e,refetch:g,createGroup:h,updateGroup:i,deleteGroup:j,addTasksToGroup:k,removeTaskFromGroup:l}}(d),[br,bs]=(0,c.useState)(new Set),[bt,bu]=(0,c.useState)(!1),[bv,bw]=(0,c.useState)([]),[bx,by]=(0,c.useState)(null),bz=(0,aO.useSensors)((0,aO.useSensor)(aO.PointerSensor,{activationConstraint:{distance:8}})),[bA,bB]=(0,c.useState)(null),bC=(0,c.useCallback)(a=>{bs(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),bD=(0,c.useCallback)(async a=>{bv.length<2||(await bl(a,bv),bw([]),bu(!1),by(null),bs(new Set))},[bv,bl]),bE=(0,c.useRef)([]),bF=(0,c.useRef)(null),bG=(0,c.useCallback)(()=>{let a=Array.from(br),b=bE.current.find(a=>br.has(a.id));bw(a),by(b?.id??a[0]??null),bu(!0)},[br]),bH=bk.find(a=>a.id===bj),bI=(0,c.useMemo)(()=>new Set(bk.flatMap(a=>a.task_ids)),[bk]),bJ=(0,c.useCallback)(a=>{bB(a.active.id)},[]),bK=(0,c.useCallback)(async a=>{bB(null);let{active:b,over:c}=a,d=b.id;if(bt){let a=bv.includes(d);if(!c||b.id===c.id){a&&bw(a=>{let b=a.filter(a=>a!==d);return b.length<2?(bu(!1),by(null),[]):b});return}let e=c.id,f=e===a3||bv.includes(e);a&&!f?bw(a=>{let b=a.filter(a=>a!==d);return b.length<2?(bu(!1),by(null),[]):b}):a||bw(a=>[...a,d]);return}if(!c||b.id===c.id)return;let e=c.id;if(e.startsWith(a6)){let a=e.slice(a6.length),b=bE.current.find(a=>a.id===d),c=bE.current.find(b=>b.status===a)?.statusCategory;b&&b.status!==a&&await bF.current?.(b,a,c);return}let f=bE.current.find(a=>a.id===d),g=bE.current.find(a=>a.id===e);if(f&&g&&f.status!==g.status)return void await bF.current?.(f,g.status,g.statusCategory);let h=bk.find(a=>a.id===e);if(h)return void await bo(h.id,[d]);let i=!bI.has(e);if(!bI.has(d)&&i){bw([d,e]),by(e),bu(!0);return}let j=bk.find(a=>a.task_ids.includes(d));j&&i&&await bp(j.id,d)},[bk,bI,bo,bp,bt,bv]),bL=(0,c.useCallback)(a=>{W(a),a1.current&&clearTimeout(a1.current),a1.current=setTimeout(()=>Y(a),300)},[]),bM=(0,c.useCallback)(a=>{aH(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[a,g]);(0,c.useEffect)(()=>()=>{a1.current&&clearTimeout(a1.current)},[]),(0,c.useEffect)(()=>{let a={...L};a4.current=!0,W(a.search),Y(a.search),ag(a.assigneeIds),ai(a.statusCategories),az(j??a.groupIds?.[0]??""),ax(j??a.groupIds?.[0]??""),aB(a.sortBy),aD(a.sortDir),aF(a.labelNames??[]),aH(new Set)},[a,g,j]),(0,c.useEffect)(()=>{if(a4.current){a4.current=!1;return}},[a,g,V,af,ah,ay,av,aE,aA,aC]),(0,c.useEffect)(()=>{if(!u||!d)return;let b=!1;$(!1);let c=new URLSearchParams;return c.set("projectId",d),g&&c.set("projectSlug",g),fetch(`/api/trackers/${a}/options?${c.toString()}`).then(a=>a.json()).then(a=>{b||(aa(Array.isArray(a.assignees)?a.assignees:[]),ac(Array.isArray(a.statuses)?a.statuses.map(a=>({value:a.name,label:a.name})):[]),ae(Array.isArray(a.teams)?a.teams:[]),ak(Array.isArray(a.groups)?a.groups:[]),a.groupLabel&&ar(a.groupLabel),$(!0))}).catch(()=>{b||(aa([]),ac([]),ae([]),ak([]),$(!0))}),()=>{b=!0}},[u,a,d,g]),(0,c.useEffect)(()=>{if(!Z)return;let a=af.filter(a=>_.some(b=>b.id===a));a.length!==af.length&&ag(a)},[_,Z,af]),(0,c.useEffect)(()=>{if(!Z)return;let a=ab.map(a=>a.value),b=ah.filter(b=>a.includes(b));b.length!==ah.length&&ai(b)},[Z,ah,ab]),(0,c.useEffect)(()=>{if(Z){if(ad.length<=1&&ay)return void az("");ay&&!ad.some(a=>a.id===ay)&&az("")}},[Z,ay,ad]),(0,c.useEffect)(()=>{Z&&av&&!aj.some(a=>a.id===av)&&ax("")},[aj,Z,av]);let{items:bN,loading:bO,hasMore:bP,loadMore:bQ,refresh:bR,updateItem:bS}=function(a,b,d,e){let[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(!0),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(!1),n=(0,c.useRef)(j),o=(0,c.useRef)(!1);n.current=j;let p=`/api/trackers/${encodeURIComponent(a)}/items`,q=e.projectId?function(a,b,c){let d={};for(let a of Object.keys(c).sort()){let b=c[a];if(null!=b&&""!==b&&!1!==b)if(Array.isArray(b)){if(!b.length)continue;d[a]=[...b].map(String).sort()}else d[a]=b}return`${a}:${b}:${JSON.stringify(d)}`}(a,e.projectId,{statuses:b.statuses,statusCategories:b.statusCategories,search:b.search,assigneeIds:b.assigneeIds,groupIds:b.groupIds,sortBy:b.sortBy,sortDir:b.sortDir,hasActivity:b.hasActivity,limit:e.limit}):null,r=(0,c.useRef)(q);r.current=q;let s=(0,c.useCallback)(async a=>{if(d&&e.projectId){i(!0);try{let c=new URLSearchParams;if(c.set("projectId",e.projectId),b.statuses?.length)for(let a of b.statuses)c.append("status",a);if(b.statusCategories?.length)for(let a of b.statusCategories)c.append("statusCategory",a);if(b.search&&c.set("search",b.search),b.assigneeIds?.length)for(let a of b.assigneeIds)c.append("assigneeId",a);if(b.groupIds?.length)for(let a of b.groupIds)c.append("groupId",a);b.sortBy&&c.set("sortBy",b.sortBy),b.sortDir&&c.set("sortDir",b.sortDir),b.hasActivity&&c.set("hasActivity","true"),a&&n.current&&c.set("cursor",n.current),e.limit&&c.set("limit",String(e.limit));let d=await fetch(`${p}?${c.toString()}`),f=await d.json(),h=f.items??[];g(b=>a?[...b,...h]:h);let i=f.pageInfo?.endCursor??null,j=f.pageInfo?.hasNextPage??!1;k(i),m(j),o.current=!0,!a&&r.current&&w(r.current,{items:h,endCursor:i,hasNextPage:j,savedAt:Date.now()})}catch{a||g([])}finally{i(!1)}}},[p,b.statuses,b.statusCategories,b.search,b.assigneeIds,b.groupIds,b.sortBy,b.sortDir,b.hasActivity,d,e.projectId,e.limit]);(0,c.useEffect)(()=>{let a=!1;return k(null),o.current=!1,d&&q&&v(q).then(b=>{a||!b||o.current||(g(b.items),k(b.endCursor),m(b.hasNextPage),i(!1))}),s(!1),()=>{a=!0}},[s,q,d]);let t=(0,c.useCallback)(()=>s(!0),[s]);return{items:f,loading:h,hasMore:l,loadMore:t,refresh:(0,c.useCallback)(()=>(k(null),s(!1)),[s]),updateItem:(0,c.useCallback)(a=>{g(b=>b.map(b=>b.id===a.id?a:b))},[])}}(a,(0,c.useMemo)(()=>({search:X||void 0,statuses:ah.length>0&&ah.length<ab.length?ah:void 0,assigneeIds:af.length>0?af:void 0,groupIds:av?[av]:void 0,sortBy:aA,sortDir:aC}),[X,af,av,ah,ab.length,aA,aC]),u&&Z&&!!d,{projectId:d??""}),{metadataMap:bT,refresh:bU}=function(a,b,d){let[e,f]=(0,c.useState)(new Map),[g,h]=(0,c.useState)(!1),i=(0,c.useRef)(""),j=(0,c.useCallback)(async()=>{if(!b||0===d.length)return void f(new Map);h(!0);try{let c=await fetch(`/api/trackers/${encodeURIComponent(a)}/metadata/bulk?projectId=${encodeURIComponent(b)}&issueIds=${d.map(encodeURIComponent).join(",")}`),e=await c.json(),g=new Map;for(let[a,b]of Object.entries(e))g.set(a,{labels:Array.isArray(b.labels)?b.labels:[],estimate:"number"==typeof b.estimate?b.estimate:null});f(g)}catch{}h(!1)},[a,b,d]);return(0,c.useEffect)(()=>{let a=d.join(",");a!==i.current&&(i.current=a,j())},[j,d]),{metadataMap:e,loading:g,refresh:j}}(a,d,(0,c.useMemo)(()=>bN.map(a=>a.id),[bN])),{labels:bV,definitions:bW,refresh:bX,createDefinition:bY}=al(a,d),bZ=(0,c.useMemo)(()=>bh?bN.find(a=>a.id===bh)??null:null,[bN,bh]),b$=bZ??(aI?.id===bh?aI:null),b_=(0,c.useMemo)(()=>{if(0===aG.size)return bN;let a=[],b=[];for(let c of bN)aG.has(c.id)?a.push(c):b.push(c);return[...a,...b]},[bN,aG]);bE.current=b_;let b0=(0,c.useDeferredValue)(aE),b1=(0,c.useMemo)(()=>{if(0===b0.length)return b_;let a=new Set(b0),b=[];for(let c of b_){let d=bT.get(c.id)?.labels;if(d){for(let e of d)if(a.has(e)){b.push(c);break}}}return b},[b_,b0,bT]),b2=(0,c.useMemo)(()=>{let a=new Map;for(let b of b1){let c=a.get(b.status);c||(c={status:b.status,category:b.statusCategory,items:[]},a.set(b.status,c)),c.items.push(b)}let b={in_progress:0,todo:1,done:2,cancelled:3};return[...a.values()].sort((a,c)=>(b[a.category]??1)-(b[c.category]??1))},[!0,b1]),{runs:b3,loading:b4,loadedForIssueId:b5,createRun:b6,updateRun:b7}=y(a,b$?.id??null,d??null),{scripts:b8,activeScriptId:b9,activeScript:ca,setActiveScriptId:cb,saveScript:cc,deleteScript:cd}=function(a,b){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(null);(0,c.useEffect)(()=>{let a={...z};e(a.scripts),g(a.activeScriptId)},[a,b]);let h=(0,c.useCallback)((a,b)=>{e(a),g(b)},[a,b]),i=(0,c.useCallback)(a=>{let b=a&&d.some(b=>b.id===a)?a:null;h(d,b)},[h,d]),j=(0,c.useCallback)(a=>{let b=new Date().toISOString(),c=a.name.trim(),e=a.prompt.trim();if(!c||!e)throw Error("Run script name and prompt are required.");let f=a.id?d.find(b=>b.id===a.id):null,g=f?{...f,name:c,prompt:e,updatedAt:b}:{id:crypto.randomUUID(),name:c,prompt:e,createdAt:b,updatedAt:b};return h([...f?d.map(a=>a.id===f.id?g:a):[g,...d]].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),g.id),g},[h,d]),k=(0,c.useCallback)(a=>{h(d.filter(b=>b.id!==a),f===a?null:f)},[f,h,d]),l=(0,c.useMemo)(()=>d.find(a=>a.id===f)??null,[f,d]);return{scripts:d,activeScriptId:f,activeScript:l,setActiveScriptId:i,saveScript:j,deleteScript:k}}(a,g),ce=bi?b3.find(a=>a.id===bi)??null:null,cf=bh&&!bi?(0,N.loadLastRunForIssue)(bh):null,cg=!!cf&&J.current!==bh,ch=(0,c.useMemo)(()=>_.map(a=>({value:a.id,label:a.name})),[_]),ci=(0,c.useMemo)(()=>ab.map(a=>({value:a.value,label:a.label})),[ab]),cj=(0,c.useMemo)(()=>{let a=ab.map(a=>({value:a.label,label:a.label})),b=new Set(a.map(a=>a.value)),c=b$?.status?.trim();return c&&!b.has(c)&&a.unshift({value:c,label:c}),a},[b$?.status,ab]),ck=(0,c.useMemo)(()=>[{value:"",label:"Workspace"},...ad.map(a=>({value:a.id,label:a.name}))],[ad]),cl=(0,c.useMemo)(()=>[{value:"",label:aq},...aj.map(a=>({value:a.id,label:a.name}))],[aj,aq]),cm=ci.length>0,cn=cl.length>1,co=ck.length>2,cp=ca?.name??"AGX default",cq=(0,c.useMemo)(()=>bV.map(a=>({value:a.name,label:a.name})),[bV]),cr=(0,c.useCallback)(async(b,c)=>{if(!d)return;let e=bT.get(b)?.labels??[],f=e.includes(c)?e.filter(a=>a!==c):[...e,c];try{await fetch(`/api/trackers/${a}/metadata?projectId=${encodeURIComponent(d)}&issueId=${encodeURIComponent(b)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({labels:f})}),bU(),bX()}catch{}},[d,a,bT,bU,bX]),cs=(0,c.useCallback)(async a=>{d&&await bY(a)},[d,bY]),ct=(0,c.useCallback)(async(b,c,e)=>{let f=c.trim();if(!f||f===b.status||!d)return;let g={...b,status:f,statusCategory:e??b.statusCategory};bS(g),bh===b.id&&aJ(g),aL(b.id);try{let c=await fetch(`/api/trackers/${a}/items/${encodeURIComponent(b.id)}?projectId=${encodeURIComponent(d??"")}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:f})}),e=await c.json().catch(()=>({}));if(!c.ok||!e.item)throw Error(e.error||"Failed to update ticket status");let g=e.item;bS(g),bh===g.id&&aJ(g),await bR()}catch(a){bS(b),bh===b.id&&aJ(b),a instanceof Error&&window.alert(a.message)}finally{aL(a=>a===b.id?null:a)}},[bR,bh,bS,a,d]);bF.current=ct;let cu=(0,c.useCallback)(async(b,c,e,f)=>{let h=f??aR[0]?.id;if(h)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee?.name??null,agentId:h,scriptName:c,scriptPrompt:e})})}catch(a){console.error(`Failed to start ${c} for ${b.identifier}:`,a)}},[aR,a,d,g]),cv=(0,c.useCallback)(async()=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0===b.length||0===aR.length)return;let c=aR[0];for(let e of b)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c.id,scriptName:"Recap",scriptPrompt:"Summarize recent activity and current state of this ticket. Focus on: what was done, what's outstanding, and any blockers."})})}catch(a){console.error(`Failed to start recap for ${e.identifier}:`,a)}bs(new Set)},[br,bN,aR,a,d,g]),cw=(0,c.useCallback)(async(b,c)=>{for(let e of Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean))try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c,scriptPrompt:b})})}catch(a){console.error(`Failed to send prompt for ${e.identifier}:`,a)}bs(new Set)},[br,bN,a,d,g]),cx=(0,c.useCallback)(async()=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0===b.length||0===aR.length)return;let c=aR[0];for(let e of b)try{await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:e.id,issueIdentifier:e.identifier,issueTitle:e.title,issueStatus:e.status,issueAssignee:e.assignee?.name??null,agentId:c.id,scriptName:"Estimate",scriptPrompt:"Assess the complexity and scope of this ticket and assign a Fibonacci story-point estimate (1, 2, 3, 5, 8, 13, or 21). Consider: required investigation, files likely to change, unknowns, and testing effort. Briefly justify the number, then set the estimate using the available tooling."})})}catch(a){console.error(`Failed to start estimate for ${e.identifier}:`,a)}bs(new Set)},[br,bN,aR,a,d,g]),cy=(0,c.useCallback)(async b=>{let c=Array.from(br);if(0!==c.length&&d)try{await fetch(`/api/trackers/${a}/metadata/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d,issueIds:c,action:"add_labels",payload:{labels:[b]}})}),bU(),bX()}catch{}},[br,d,a,bU,bX]),cz=(0,c.useCallback)(async b=>{let c=Array.from(br);if(0!==c.length&&d)try{await fetch(`/api/trackers/${a}/metadata/bulk`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d,issueIds:c,action:"remove_label",payload:{label:b}})}),bU(),bX()}catch{}},[br,d,a,bU,bX]),[cA,cB]=(0,c.useState)(!1),cC=(0,c.useCallback)(async a=>{let b=Array.from(br).map(a=>bN.find(b=>b.id===a)).filter(Boolean);if(0!==b.length){for(let c of(cB(!0),b))await ct(c,a);cB(!1),bs(new Set)}},[br,bN,ct]),cD=(0,c.useCallback)(async a=>{d&&await bY(a)},[d,bY]),cE=(0,c.useCallback)(b=>({statusOptions:cj,onRecap:()=>{let c=d?`?projectId=${encodeURIComponent(d)}`:"";fetch(`/api/trackers/${encodeURIComponent(a)}/items/${encodeURIComponent(b.id)}/recap${c}`,{method:"POST"}).then(()=>{window.dispatchEvent(new CustomEvent("tracker:recap-triggered",{detail:{trackerType:a,issueId:b.id}}))})},onPrompt:(a,c)=>{cu(b,"Prompt",a,c)},onEstimate:()=>{cu(b,"Estimate","Assess the complexity and scope of this ticket and assign a Fibonacci story-point estimate (1, 2, 3, 5, 8, 13, or 21). Consider: required investigation, files likely to change, unknowns, and testing effort. Briefly justify the number, then set the estimate using the available tooling.")},onStatus:a=>{ct(b,a)}}),[cj,cu,ct,a,d]),cF=(0,c.useMemo)(()=>{let a=new Map;for(let b of br){let c=bT.get(b);a.set(b,c??{labels:[],estimate:null})}return a},[br,bT]);(0,c.useEffect)(()=>{if(!bh||!d)return void aJ(null);if(bZ)return void aJ(a=>a?.id===bh?bZ:null);let b=!1;return(async()=>{try{let c=await fetch(`/api/trackers/${a}/items/${encodeURIComponent(bh)}?projectId=${encodeURIComponent(d??"")}`);if(b)return;if(404===c.status)return void aJ(null);if(!c.ok)throw Error(`Failed to fetch selected tracker ticket: ${c.status}`);let e=await c.json().catch(()=>({}));if(!e.item?.id)return void aJ(null);aJ(e.item)}catch(a){b||console.error("Failed to hydrate selected tracker item",a)}})(),()=>{b=!0}},[bg,bZ,bh,a,d]),(0,c.useEffect)(()=>{if(!bh){bi&&bg({run:null});return}},[bg,bh,bi]),(0,c.useEffect)(()=>{b$&&bi&&!b4&&(b3.some(a=>a.id===bi)||bg({run:null}))},[bg,b3,b4,b$,bi]),(0,c.useEffect)(()=>{bh&&bi&&(0,N.persistLastRunForIssue)(bh,bi)},[bh,bi]),(0,c.useEffect)(()=>{cg&&!b4&&b5===bh&&(J.current=bh,cf&&b3.some(a=>a.id===cf)&&bg({run:cf}))},[cg,cf,bh,b3,b4,b5,bg]),(0,c.useEffect)(()=>{if(t){if(!b$)return void a0("runs");if(ce||0===b3.length)return void a0("ticket");a0("runs")}},[t,b3.length,b$,ce]),(0,c.useEffect)(()=>{if(!R)return;let a=a=>{let b=a.target;a9.current?.contains(b)||a8.current?.contains(b)||S(!1)},b=a=>{"Escape"===a.key&&S(!1)};return document.addEventListener("pointerdown",a),document.addEventListener("keydown",b),()=>{document.removeEventListener("pointerdown",a),document.removeEventListener("keydown",b)}},[R]);let cG=(0,c.useCallback)(async(b,c)=>{aV(null),aZ(null);try{let e=await fetch(`/api/trackers/${a}/runs/scripted`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:d??void 0,projectSlug:g??void 0,issueId:b.id,issueIdentifier:b.identifier,issueTitle:b.title,issueStatus:b.status,issueAssignee:b.assignee?.name??null,agentId:c.id,scriptName:ca?.name,scriptPrompt:ca?.prompt})}),f=await e.json().catch(()=>({}));if(!e.ok||!f.run||!f.chatRunId||!f.userMessageId)throw Error(f.error||"Failed to start scripted session");bf({issue:b.id,run:f.run.id})}catch(a){console.error("Failed to start scripted tracker session:",a),a instanceof Error&&window.alert(a.message)}},[ca,d,g,bf,a]),cH=(0,c.useCallback)((a,b)=>{if(S(!1),0===aR.length)return void window.alert("Add at least one agent to this project before starting a scripted session.");if(1===aR.length)return void cG(a,aR[0]);let c=b?.currentTarget?.getBoundingClientRect();aV(a),aZ(c?{top:c.bottom+4,left:c.left}:{top:200,left:200})},[cG,aR]),cI=(0,c.useRef)(null),cJ=(0,c.useRef)(null),cK=(0,c.useRef)(null),[cL,cM]=(0,c.useState)(!1);(0,c.useEffect)(()=>{let a=[cJ.current,cK.current].filter(Boolean);if(0===a.length)return;let b=a=>{cM(a.currentTarget.scrollTop>400)};return a.forEach(a=>a.addEventListener("scroll",b,{passive:!0})),()=>a.forEach(a=>a.removeEventListener("scroll",b))},[t]);let cN=(0,c.useCallback)(()=>{let a=cJ.current??cK.current;a?.scrollTo({top:0,behavior:"smooth"})},[]);return((0,c.useEffect)(()=>{let a=cI.current;if(!a||!bP)return;let b=new IntersectionObserver(a=>{a[0]?.isIntersecting&&bQ()},{threshold:.1});return b.observe(a),()=>b.disconnect()},[bP,bQ]),u)?(0,b.jsxs)("div",{className:"relative flex h-full overflow-hidden",children:[t?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:V,onChange:a=>bL(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void bR(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:bO,children:(0,b.jsx)(l.RefreshCw,{size:16,className:bO?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>{S(!1),Q(!0)},title:"Tracker settings",children:(0,b.jsx)(n.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5 px-3 pb-2",children:[cn?(0,b.jsx)(au,{label:aq,value:av,options:cl,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:ax}):null,cm?(0,b.jsx)(aw,{label:"Status",values:ah,options:ci,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:ai,emptyLabel:"All statuses"}):null,(0,b.jsx)(aw,{label:"Assignee",values:af,options:ch,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:ag,emptyLabel:"All assignees"}),cq.length>0&&(0,b.jsx)(aw,{label:"Label",values:aE,options:cq,activeClasses:"border-pink-500/30 bg-pink-500/10 text-pink-400",onChange:aF,emptyLabel:"All labels"}),co?(0,b.jsx)(au,{label:"Workspace",value:ay,options:ck,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:az}):null,(0,b.jsx)(au,{label:"Sort",value:aA,options:[{value:"activity",label:"Updated At"},{value:"identifier",label:"Ticket ID"},{value:"status",label:"Status"},{value:"created",label:"Created At"}],activeClasses:"border-sky-500/30 bg-sky-500/10 text-sky-400",onChange:a=>aB(a)}),(0,b.jsx)("button",{type:"button",className:"rounded-full border border-[var(--card-border)] p-1 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"desc"===aC?"Descending":"Ascending",onClick:()=>aD(a=>"desc"===a?"asc":"desc"),children:"desc"===aC?(0,b.jsx)(e.ArrowDown,{size:12}):(0,b.jsx)(f.ArrowUp,{size:12})})]})]}),(0,b.jsxs)("div",{className:"relative flex-1 min-h-0 flex flex-col",children:[(0,b.jsx)("div",{ref:cK,className:"flex-1 overflow-y-auto",children:bO&&0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[b2.map(a=>{let d=aM.has(a.status);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a7,{status:a.status,categoryColor:bd[a.category]??"bg-zinc-400",count:a.items.length,collapsed:d,onToggle:()=>aN(b=>{let c=new Set(b);return c.has(a.status)?c.delete(a.status):c.add(a.status),c})}),!d&&a.items.map(a=>(0,b.jsx)(aQ,{item:a,selected:b$?.id===a.id,pinned:aG.has(a.id),activeAgents:aS.get(a.id),participants:aR,projectSlug:g,stats:aT.get(a.id),hideStatus:!0,estimate:bT.get(a.id)?.estimate,localLabels:bT.get(a.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:b=>cr(a.id,b),onAddLabel:cs,onSelect:()=>{a0("runs"),bf({issue:a.id,run:null})},onTogglePin:()=>bM(a.id),rowActions:cE(a),showGroup:!av},a.id))]},`sg-${a.status}`)}),bP?(0,b.jsx)("div",{ref:cI,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:bO?"Loading...":"Load more"}):null]})}),(0,b.jsx)(bb.JumpToLatestButton,{visible:cL&&bN.length>20,direction:"top",onClick:cN})]})]}),b$?(0,b.jsxs)("div",{className:"absolute inset-0 z-20 flex flex-col bg-[var(--background)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3 border-b border-[var(--card-border)] px-4 py-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-[var(--muted-foreground)]",children:b$.identifier}),(0,b.jsx)("div",{className:"truncate text-sm font-semibold text-[var(--foreground)]",children:b$.title})]}),(0,b.jsx)("button",{type:"button",className:"rounded p-2 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>bg({issue:null,run:null}),"aria-label":"Close ticket panel",children:(0,b.jsx)(q.X,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("button",{type:"button",className:`rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${"runs"===a$?"bg-[var(--card-bg)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,onClick:()=>a0("runs"),children:"Runs"}),(0,b.jsx)("button",{type:"button",className:`rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${"ticket"===a$?"bg-[var(--card-bg)] text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,onClick:()=>a0("ticket"),children:"Ticket"})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-hidden",children:"runs"===a$?(0,b.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"relative flex items-center justify-between border-b border-[var(--card-border)] px-3 py-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-[var(--foreground)]",children:"Sessions"}),(0,b.jsxs)("button",{ref:a8,type:"button",className:"inline-flex items-center gap-1 rounded px-2 py-1 text-[10px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-40",onClick:()=>{S(!1),a0("ticket"),bf({run:null})},title:"Open a fresh chat for this ticket. You can choose or edit the session script in the ticket tab.","aria-label":"New session",disabled:!b$,children:[(0,b.jsx)(k.Plus,{size:12}),"New session"]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:b4&&0===b3.length||cg?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading sessions..."}):0===b3.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No previous sessions yet."}):b3.map(a=>{let c=an(a);return(0,b.jsxs)("button",{type:"button",className:`w-full px-3 py-2 text-left text-xs transition-colors ${ce?.id===a.id?"bg-[var(--card-bg)]":"hover:bg-[var(--card-bg)]"}`,onClick:()=>{a0("ticket"),bf({run:a.id})},children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1",children:[(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-[11px] font-medium text-[var(--foreground)]",children:ao(a)}),(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:new Date(a.startedAt).toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,b.jsxs)("div",{className:"mt-0.5 flex items-center gap-1.5 text-[10px]",children:[(0,b.jsx)("span",{className:`font-medium ${as[c.tone]}`,children:c.label}),(0,b.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:a.agentName})]}),null!=a.durationMs?(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[(a.durationMs/1e3).toFixed(1),"s"]}):null]},a.id)})})]}):ce?(0,b.jsx)(be,{item:b$??{id:ce.issueId,identifier:ce.issueIdentifier,title:ce.issueTitle,status:ce.issueStatus,statusCategory:"todo",labels:[],trackerId:"",trackerType:a,assignee:ce.issueAssignee?{id:"",name:ce.issueAssignee}:void 0,updatedAt:ce.updatedAt,createdAt:ce.updatedAt,url:""},run:ce,participants:aR,itemStatusOptions:cj,itemStatusUpdating:aK===ce.issueId,onItemStatusChange:ct,onBack:()=>bg({run:null})}):cg?null:0===aR.length?(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Add at least one agent to this project to start a session."}):(0,b.jsx)(aX,{item:b$,trackerType:a,runs:b3,participants:aR,projectId:d,projectSlug:g,itemStatusOptions:cj,itemStatusUpdating:aK===b$.id,onItemStatusChange:ct,activeSessionScriptLabel:cp,onOpenSessionScripts:()=>S(!0),onStartScriptedSession:a=>cH(b$,a),createRun:b6,updateRun:b7,onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})},b$.id)})]}):null]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex shrink-0 flex-col border-r border-[var(--card-border)]",style:{width:T},children:[(0,b.jsxs)("div",{className:"shrink-0 border-b border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex h-12 items-center gap-2 px-3",children:[(0,b.jsxs)("div",{className:"flex flex-1 items-center gap-2 rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2.5 py-1.5 transition-all focus-within:border-[var(--muted-foreground)] focus-within:ring-1 focus-within:ring-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Search,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",className:"flex-1 bg-transparent text-sm outline-none placeholder:text-[var(--muted-foreground)]",placeholder:"Search tickets...",value:V,onChange:a=>bL(a.target.value)})]}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:cursor-not-allowed disabled:opacity-50",onClick:()=>void bR(),title:"Refresh tickets","aria-label":"Refresh tickets",disabled:bO,children:(0,b.jsx)(l.RefreshCw,{size:16,className:bO?"animate-spin":void 0})}),(0,b.jsx)("button",{type:"button",className:"shrink-0 rounded p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",onClick:()=>{S(!1),Q(!0)},title:"Tracker settings",children:(0,b.jsx)(n.Settings,{size:16})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 px-3 pb-2",children:[cn?(0,b.jsx)(au,{label:aq,value:av,options:cl,activeClasses:"border-purple-500/30 bg-purple-500/10 text-purple-400",onChange:ax}):null,cm?(0,b.jsx)(aw,{label:"Status",values:ah,options:ci,activeClasses:"border-amber-500/30 bg-amber-500/10 text-amber-300",onChange:ai,emptyLabel:"All statuses"}):null,(0,b.jsx)(aw,{label:"Assignee",values:af,options:ch,activeClasses:"border-blue-500/30 bg-blue-500/10 text-blue-400",onChange:ag,emptyLabel:"All assignees"}),cq.length>0&&(0,b.jsx)(aw,{label:"Label",values:aE,options:cq,activeClasses:"border-pink-500/30 bg-pink-500/10 text-pink-400",onChange:aF,emptyLabel:"All labels"}),co?(0,b.jsx)(au,{label:"Workspace",value:ay,options:ck,activeClasses:"border-emerald-500/30 bg-emerald-500/10 text-emerald-400",onChange:az}):null,(0,b.jsx)(au,{label:"Sort",value:aA,options:[{value:"activity",label:"Updated At"},{value:"identifier",label:"Ticket ID"},{value:"status",label:"Status"},{value:"created",label:"Created At"}],activeClasses:"border-sky-500/30 bg-sky-500/10 text-sky-400",onChange:a=>aB(a)}),(0,b.jsx)("button",{type:"button",className:"rounded-full border border-[var(--card-border)] p-0.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]",title:"desc"===aC?"Descending":"Ascending",onClick:()=>aD(a=>"desc"===a?"asc":"desc"),children:"desc"===aC?(0,b.jsx)(e.ArrowDown,{size:12}):(0,b.jsx)(f.ArrowUp,{size:12})}),b1.length>0&&(p=b1.length>0&&b1.every(a=>br.has(a.id)),(0,b.jsxs)("button",{type:"button",className:`flex items-center gap-1 rounded-full border px-2 py-0.5 text-[11px] transition-colors ${p?"border-[var(--primary)]/40 bg-[var(--primary)]/10 text-[var(--primary)]":"border-[var(--card-border)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"}`,title:p?"Clear selection":"Select all filtered tickets",onClick:()=>{p?bs(new Set):bs(new Set(b1.map(a=>a.id)))},children:[p?(0,b.jsx)(h,{size:12}):(0,b.jsx)(o,{size:12}),p?"Clear":`Select all (${b1.length})`]}))]})]}),(0,b.jsxs)(aO.DndContext,{sensors:bz,collisionDetection:aO.closestCenter,onDragStart:bJ,onDragEnd:bK,children:[(0,b.jsxs)("div",{className:"relative flex-1 min-h-0 flex flex-col",children:[(0,b.jsxs)("div",{ref:cJ,className:"flex-1 overflow-y-auto",children:[bO&&0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"Loading tickets..."}):0===bN.length?(0,b.jsx)("div",{className:"px-3 py-4 text-xs text-[var(--muted-foreground)]",children:"No tickets found."}):(0,b.jsxs)(b.Fragment,{children:[b2.map(a=>{let d=aM.has(a.status);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a7,{status:a.status,categoryColor:bd[a.category]??"bg-zinc-400",count:a.items.length,collapsed:d,onToggle:()=>aN(b=>{let c=new Set(b);return c.has(a.status)?c.delete(a.status):c.add(a.status),c})}),!d&&(()=>{let d=bt?new Set(bv):null,e=new Map;for(let b of bk){let c=a.items.find(a=>b.task_ids.includes(a.id));c&&e.set(c.id,b)}let f=bt?bv.map(b=>a.items.find(a=>a.id===b)).filter(Boolean).map(a=>({id:a.id,identifier:a.identifier,title:a.title,status:ap[a.status]??a.status})):[],h=new Set;return a.items.map(i=>{if(d?.has(i.id))return i.id===bx&&bt?(0,b.jsx)(a5,{tickets:f,onConfirm:bD,onCancel:()=>{bu(!1),bw([]),by(null)}},"__pending-group__"):null;let j=e.get(i.id);if(j&&!h.has(j.id)){h.add(j.id);let d=j.task_ids.map(b=>a.items.find(a=>a.id===b)).filter(Boolean);return(0,b.jsxs)(c.default.Fragment,{children:[(0,b.jsx)(a_,{groupId:j.id,name:j.name,count:d.length,collapsed:!!j.collapsed,selected:bj===j.id,projectSlug:g,onToggleCollapse:()=>bm(j.id,{collapsed:!j.collapsed}),onSelect:()=>bf({group:j.id,issue:null,run:null}),onUngroup:()=>{bn(j.id),bj===j.id&&bg({group:null})}}),!j.collapsed&&d.map((a,c)=>(0,b.jsx)(aQ,{item:a,selected:b$?.id===a.id,pinned:aG.has(a.id),activeAgents:aS.get(a.id),participants:aR,draggable:!0,multiSelected:br.has(a.id),treeConnector:c===d.length-1?"last":"mid",projectSlug:g,stats:aT.get(a.id),hideStatus:!0,estimate:bT.get(a.id)?.estimate,localLabels:bT.get(a.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:b=>cr(a.id,b),onAddLabel:cs,onSelect:b=>{b&&(b.metaKey||b.ctrlKey)?bC(a.id):bf({issue:a.id,run:null,group:null})},onTogglePin:()=>bM(a.id),rowActions:cE(a),showGroup:!av},a.id))]},`group-${j.id}`)}return bI.has(i.id)?null:(0,b.jsx)(aQ,{item:i,selected:b$?.id===i.id,pinned:aG.has(i.id),activeAgents:aS.get(i.id),participants:aR,draggable:!0,multiSelected:br.has(i.id),projectSlug:g,stats:aT.get(i.id),hideStatus:!0,estimate:bT.get(i.id)?.estimate,localLabels:bT.get(i.id)?.labels,labelDefinitions:bW,allLabels:bV,onToggleLabel:a=>cr(i.id,a),onAddLabel:cs,onSelect:a=>{a&&(a.metaKey||a.ctrlKey)?bC(i.id):bf({issue:i.id,run:null,group:null})},onTogglePin:()=>bM(i.id),rowActions:cE(i),showGroup:!av},i.id)})})()]},`sg-${a.status}`)}),bP?(0,b.jsx)("div",{ref:cI,className:"py-2 text-center text-xs text-[var(--muted-foreground)]",children:bO?"Loading...":"Load more"}):null]}),(0,b.jsx)(ba,{count:br.size,onGroup:bG,onClear:()=>bs(new Set),onBulkRecap:cv,onBulkPrompt:cw,onBulkEstimate:cx,onBulkAddLabel:cy,onBulkRemoveLabel:cz,onBulkStatus:cC,statusOptions:cj,participants:aR,labels:bV,onCreateLabel:cD,selectedMetadata:cF,statusUpdating:cA})]}),(0,b.jsx)(bb.JumpToLatestButton,{visible:cL&&bN.length>20,direction:"top",onClick:cN})]}),(0,b.jsx)(aO.DragOverlay,{dropAnimation:null,children:bA&&((s=bE.current.find(a=>a.id===bA))?(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-lg border border-[var(--primary)]/30 bg-[var(--card-bg)] px-4 py-2.5 text-sm shadow-xl backdrop-blur-sm",children:[(0,b.jsx)("span",{className:"w-24 shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)]",children:s.identifier}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-[var(--foreground)]",children:s.title})]}):null)})]})]}),(0,b.jsx)(at.ResizeHandle,{onResize:a=>U(b=>{let c=Math.max(280,Math.min(960,b+a));return(0,M.persistLinearTicketPanelWidth)(c),c})}),R?(0,b.jsx)("div",{ref:a9,className:"absolute right-6 top-16 z-20 max-h-[80vh] overflow-y-auto rounded-2xl border border-[var(--card-border)] bg-[var(--background)] p-4 shadow-2xl",style:{width:"min(760px, calc(100vw - 32px))"},children:(0,b.jsx)(I,{projectSlug:g,scripts:b8,activeScriptId:b9,onSetActiveScriptId:cb,onSaveScript:cc,onDeleteScript:cd})}):null,(0,b.jsx)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:ce?(0,b.jsx)(be,{item:b$??{id:ce.issueId,identifier:ce.issueIdentifier,title:ce.issueTitle,status:ce.issueStatus,statusCategory:"todo",labels:[],trackerId:"",trackerType:a,assignee:ce.issueAssignee?{id:"",name:ce.issueAssignee}:void 0,updatedAt:ce.updatedAt,createdAt:ce.updatedAt,url:""},run:ce,participants:aR,itemStatusOptions:cj,itemStatusUpdating:aK===ce.issueId,onItemStatusChange:ct,onBack:()=>bg({run:null})}):bH&&!b$?(0,b.jsx)(a2,{group:bH,items:bN,trackerType:a,participants:aR,projectId:d,projectSlug:g,onUpdateName:a=>bm(bH.id,{name:a}),onDelete:async()=>{await bn(bH.id),bg({group:null})},onSelectItem:a=>bf({issue:a,group:null,run:null}),onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})}):b$?cg?null:0===aR.length?(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Add at least one agent to this project to start a session."}):(0,b.jsx)(aX,{item:b$,trackerType:a,runs:b3,participants:aR,projectId:d,projectSlug:g,itemStatusOptions:cj,itemStatusUpdating:aK===b$.id,onItemStatusChange:ct,activeSessionScriptLabel:cp,onOpenSessionScripts:()=>S(!0),onStartScriptedSession:a=>cH(b$,a),createRun:b6,updateRun:b7,onRunCreated:a=>bf({run:a}),onSelectRun:a=>bf({run:a})},b$.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center text-xs text-[var(--muted-foreground)]",children:"Select a ticket from the list."})})]}),O&&(0,b.jsx)(am,{trackerType:a,connected:u,user:B,clis:C,mcpConfigured:D,onConnect:E,onConnectWithKey:F,onDisconnect:G,onConfigureMcp:H,onClose:()=>Q(!1),projectId:d}),R&&t?(0,b.jsx)("div",{className:"absolute inset-0 z-30 flex items-center justify-center bg-black/50 p-4",children:(0,b.jsx)("div",{ref:a9,className:"max-h-[85vh] w-full max-w-3xl overflow-y-auto rounded-2xl border border-[var(--card-border)] bg-[var(--background)] p-4 shadow-2xl",children:(0,b.jsx)(I,{projectSlug:g,scripts:b8,activeScriptId:b9,onSetActiveScriptId:cb,onSaveScript:cc,onDeleteScript:cd})})}):null,aU&&aW&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>{aV(null),aZ(null)}}),(0,b.jsxs)("div",{className:"fixed z-50 min-w-[180px] rounded border border-[var(--card-border)] bg-[var(--card-bg)] py-1 shadow-lg",style:{top:aW.top,left:aW.left},children:[(0,b.jsx)("div",{className:"px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Pick an agent"}),aR.map(a=>(0,b.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors hover:bg-[var(--card-bg)]",onClick:()=>void cG(aU,a),children:[(0,b.jsx)("img",{src:aP(a.id,a.color,20),alt:"",className:"h-5 w-5 shrink-0 rounded-full"}),(0,b.jsxs)("span",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"font-medium text-[var(--foreground)]",children:a.name}),a.role?(0,b.jsx)("span",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.role}):null]})]},a.id))]})]})]}):(0,b.jsx)(P.default,{trackerType:a,projectId:d??"",connected:u,onConnect:E,onConnectWithKey:F})}a.s(["default",()=>bf],859117)}];
|
|
49
49
|
|
|
50
50
|
//# sourceMappingURL=apps_local_components_TrackerBoard_tsx_98970bab._.js.map
|
package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_eec36ab6._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[663504,235992,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);a.s(["Key",()=>c],663504);let d=(0,b.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);a.s(["Globe",()=>d],235992)},500650,a=>{"use strict";let b=(0,a.i(831709).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);a.s(["LogOut",()=>b],500650)},778784,451844,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(44668),e=a.i(663504),f=a.i(235992),g=a.i(349692),h=a.i(693896),i=a.i(356239),j=a.i(500650),k=a.i(392045),l=a.i(353532),m=a.i(824179),n=a.i(864061);let o=(0,a.i(831709).default)("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);function p({projectId:a}){let[d,e]=(0,c.useState)([]),[f,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)("all"),[C,D]=(0,c.useState)(new Set),[E,F]=(0,c.useState)(!1),G=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/github/repos",{cache:"no-store"});if(!a.ok)throw Error("Failed to load repos");let b=await a.json();e(b.repos??[]),j(null)}catch{j("Failed to load repositories")}finally{h(!1)}},[]);(0,c.useEffect)(()=>{G()},[G]);let H=(0,c.useCallback)((a,b)=>`${a}/${b}`.toLowerCase(),[]),I=(0,c.useMemo)(()=>new Set(d.map(a=>H(a.owner,a.name))),[d,H]),J=(0,c.useCallback)(async()=>{if(r(!0),D(new Set),z(""),B("all"),!(s.length>0)){v(!0),x(null);try{let b=await fetch(`/api/github/user-repos?projectId=${encodeURIComponent(a)}`,{cache:"no-store"});if(!b.ok){let a=await b.json().catch(()=>({}));throw Error(a?.error??"Failed to fetch repos")}let c=await b.json();t(c.repos??[])}catch(a){x(a instanceof Error?a.message:"Failed to fetch repos")}finally{v(!1)}}},[a,s.length]),K=()=>{r(!1)};(0,c.useEffect)(()=>{if(!q)return;let a=a=>{"Escape"===a.key&&K()};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[q]);let L=(0,c.useMemo)(()=>{let a=[],b=[];for(let c of s)I.has(H(c.owner,c.name))?a.push(c):b.push(c);return[...a,...b]},[s,I,H]),M=(0,c.useMemo)(()=>{let a=y.trim().toLowerCase();return L.filter(b=>("public"!==A||!b.private)&&("private"!==A||!!b.private)&&(!a||b.fullName.toLowerCase().includes(a)||(b.description??"").toLowerCase().includes(a)))},[L,y,A]),N=(0,c.useMemo)(()=>M.filter(a=>!I.has(H(a.owner,a.name))),[M,I,H]),O=N.length>0&&N.every(a=>C.has(a.id)),P=async()=>{if(0!==C.size){F(!0);try{let a=s.filter(a=>C.has(a.id));await Promise.all(a.map(a=>fetch("/api/github/repos",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:a.owner,name:a.name,defaultBranch:a.defaultBranch,private:a.private})}))),await G(),K()}finally{F(!1)}}},Q=(0,c.useCallback)(async a=>{p(a);try{await fetch("/api/github/repos",{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({id:a})}),await G()}finally{p(null)}},[G]);return(0,b.jsxs)("div",{className:"w-full max-w-md space-y-4",children:[(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{className:"text-sm font-medium",children:"Attached repositories"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Repos the local agent watches for PRs, reviews, and comments."})]}),(0,b.jsxs)("button",{type:"button",onClick:J,className:"text-xs px-2.5 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1",children:[(0,b.jsx)(l.Plus,{className:"w-3.5 h-3.5"}),"Add"]})]}),f?(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(g.Loader2,{className:"w-4 h-4 animate-spin"}),"Loading repositories…"]}):i?(0,b.jsx)("p",{className:"text-sm text-destructive",children:i}):0===d.length?(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"No repositories attached yet."}):(0,b.jsx)("ul",{className:"divide-y",children:d.map(a=>(0,b.jsxs)("li",{className:"flex items-center justify-between py-2",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsxs)("span",{className:"text-sm font-mono",children:[a.owner,"/",a.name]}),(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[a.defaultBranch??"no default branch",a.private?" · private":" · public",a.accessRevoked?" · access revoked":""]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>Q(a.id),disabled:k===a.id,className:"p-1.5 rounded hover:bg-accent disabled:opacity-50",title:"Remove",children:(0,b.jsx)(m.X,{className:"w-3.5 h-3.5"})})]},a.id))})]}),(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{className:"text-sm font-medium",children:"Sync"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Pull the latest PRs, reviews, and comments for attached repos."})]}),(0,b.jsxs)("button",{type:"button",onClick:()=>alert("Sync will run when worker is scheduled"),className:"text-xs px-3 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1.5",children:[(0,b.jsx)(n.RefreshCw,{className:"w-3.5 h-3.5"}),"Sync now"]})]}),q&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:K,children:(0,b.jsxs)("div",{className:"w-full max-w-3xl max-h-[90vh] flex flex-col rounded-xl border border-[var(--border)] bg-[var(--background)] text-[var(--foreground)] shadow-2xl",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("header",{className:"px-6 py-5 border-b border-[var(--border)] flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] mb-1",children:[(0,b.jsx)("span",{children:"GitHub"}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:"Attach repositories"})]}),(0,b.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Select repositories"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] mt-1",children:"Pick the repos you want agx to track. Already-attached repos are pinned at the top."})]}),(0,b.jsx)("button",{onClick:K,className:"p-1.5 rounded hover:bg-[var(--item-hover-bg)] text-[var(--muted-foreground)]","aria-label":"Close",children:(0,b.jsx)(m.X,{className:"w-4 h-4"})})]}),(0,b.jsx)("div",{className:"px-6 py-4 flex-1 overflow-hidden flex flex-col",children:w?(0,b.jsx)("div",{className:"rounded-lg border border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed)] px-4 py-3 text-sm",children:w}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 mb-3",children:[(0,b.jsxs)("div",{className:"relative flex-1",children:[(0,b.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,b.jsx)("path",{d:"m21 21-4.3-4.3"})]}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>z(a.target.value),placeholder:"Search repositories...",className:"w-full pl-9 pr-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--input)] text-sm focus:outline-none focus:border-[var(--primary)] focus:bg-[var(--input-focus)] transition-colors"})]}),(0,b.jsx)("div",{className:"flex gap-1 rounded-lg border border-[var(--border)] p-1",children:["all","public","private"].map(a=>(0,b.jsx)("button",{onClick:()=>B(a),className:`px-3 py-1 text-xs rounded-md capitalize transition-colors ${A===a?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:a},a))})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("button",{onClick:()=>{D(a=>{let b=new Set(a);return O?N.forEach(a=>b.delete(a.id)):N.forEach(a=>b.add(a.id)),b})},disabled:0===N.length,className:"hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:[O?"Deselect all":"Select all",y||"all"!==A?` (${N.length} shown)`:""]}),C.size>0&&(0,b.jsx)("button",{onClick:()=>D(new Set),className:"hover:text-[var(--foreground)] transition-colors",children:"Clear selection"})]}),(0,b.jsx)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--card-bg)] overflow-hidden flex-1 min-h-0",children:(0,b.jsx)("div",{className:"h-full overflow-y-auto",children:u?(0,b.jsx)("div",{className:"divide-y divide-[var(--border)]",children:Array.from({length:6}).map((a,c)=>(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3 animate-pulse",children:[(0,b.jsx)("div",{className:"w-4 h-4 rounded bg-[var(--muted)]"}),(0,b.jsx)("div",{className:"w-6 h-6 rounded-full bg-[var(--muted)]"}),(0,b.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,b.jsx)("div",{className:"h-3 w-1/3 rounded bg-[var(--muted)]"}),(0,b.jsx)("div",{className:"h-2 w-2/3 rounded bg-[var(--muted)]"})]})]},c))}):0===M.length?(0,b.jsx)("div",{className:"px-4 py-10 text-center text-sm text-[var(--muted-foreground)]",children:0===s.length?"No repositories found on your account.":"No repos match your search."}):(0,b.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:M.map(a=>{let c=I.has(H(a.owner,a.name)),d=C.has(a.id);return(0,b.jsx)("li",{children:(0,b.jsxs)("label",{className:`flex items-start gap-3 px-4 py-3 transition-colors ${c?"bg-[var(--primary-muted)]/40 cursor-default":d?"bg-[var(--primary-muted)] cursor-pointer":"hover:bg-[var(--item-hover-bg)] cursor-pointer"}`,children:[c?(0,b.jsx)("div",{className:"mt-1 w-4 h-4 rounded-sm bg-[var(--primary)]/20 text-[var(--primary)] flex items-center justify-center",title:"Already attached",children:(0,b.jsx)(o,{className:"w-2.5 h-2.5"})}):(0,b.jsx)("input",{type:"checkbox",checked:d,onChange:()=>{!I.has(H(a.owner,a.name))&&D(b=>{let c=new Set(b);return c.has(a.id)?c.delete(a.id):c.add(a.id),c})},className:"mt-1 accent-[var(--primary)]"}),(0,b.jsx)("img",{src:a.avatarUrl,alt:"",className:"w-6 h-6 rounded-full mt-0.5 flex-shrink-0"}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,b.jsx)("span",{className:"text-sm font-medium truncate",children:a.fullName}),c&&(0,b.jsxs)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--primary)]/15 text-[var(--primary)] flex items-center gap-1",children:[(0,b.jsx)(o,{className:"w-2.5 h-2.5"}),"Attached"]}),a.private&&(0,b.jsx)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)]",children:"Private"})]}),a.description&&(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:a.description}),(0,b.jsxs)("div",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:["Updated ",function(a){let b=Math.floor((Date.now()-new Date(a).getTime())/1e3);if(b<60)return"just now";let c=Math.floor(b/60);if(c<60)return`${c}m ago`;let d=Math.floor(c/60);if(d<24)return`${d}h ago`;let e=Math.floor(d/24);if(e<30)return`${e}d ago`;let f=Math.floor(e/30);return f<12?`${f}mo ago`:`${Math.floor(f/12)}y ago`}(a.updatedAt)]})]})]})},a.id)})})})})]})}),(0,b.jsxs)("footer",{className:"px-6 py-4 border-t border-[var(--border)] flex items-center justify-between gap-3",children:[(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[C.size," selected"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:K,className:"px-4 py-2 rounded-lg border border-[var(--border)] hover:bg-[var(--item-hover-bg)] text-sm font-medium transition-colors",children:"Cancel"}),(0,b.jsx)("button",{onClick:P,disabled:0===C.size||E,className:"px-4 py-2 rounded-lg bg-[var(--primary)] hover:bg-[var(--primary-hover)] text-[var(--primary-foreground)] text-sm font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:E?"Attaching...":`Attach ${C.size} ${1===C.size?"repo":"repos"}`})]})]})]})})]})}a.s(["Pin",()=>o],451844);var q=a.i(734709);let r={claude:{name:"Claude Code",configPath:"~/.claude/settings.json"},codex:{name:"Codex CLI",configPath:"~/.codex/config.toml"},gemini:{name:"Gemini CLI",configPath:"~/.gemini/settings.json"}};function s({trackerType:a,projectId:l,connected:m,onConnect:n,onConnectWithKey:o,onDisconnect:s,loading:t=!1,clis:u,mcpConfigured:v,onConfigureMcp:w}){let[x,y]=c.default.useState(""),[z,A]=c.default.useState(null),[B,C]=c.default.useState(!1),[D,E]=c.default.useState(!1),[F,G]=c.default.useState(null),[H,I]=c.default.useState({}),[J,K]=c.default.useState(!1),L=async a=>{if(!w)return;G(a),I(b=>({...b,[a]:""}));let b=await w(a);b.ok||I(c=>({...c,[a]:b.error??"Failed to install MCP"})),G(null)},M=u?["claude","codex","gemini"].filter(a=>u[a]):["claude"];if(t)return(0,b.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,b.jsx)(g.Loader2,{className:"animate-spin h-8 w-8 text-muted-foreground"})});if(m)return(0,b.jsxs)("div",{className:"p-8 flex flex-col items-center gap-6",children:[(0,b.jsxs)("div",{className:"w-full max-w-md p-8 border border-green-500/20 bg-green-500/5 rounded-2xl flex flex-col items-center gap-4 text-center",children:[(0,b.jsx)("div",{className:"h-16 w-16 rounded-full bg-green-500/10 flex items-center justify-center text-green-600 shadow-inner",children:(0,b.jsx)(d.CheckCircle2,{className:"h-8 w-8"})}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xl font-bold text-foreground capitalize",children:[a," Connected"]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground leading-relaxed",children:["Your ",a," workspace is successfully connected. The agent can now sync issues and manage your backlog."]})]}),(0,b.jsxs)("div",{className:"mt-2 px-4 py-1.5 rounded-full bg-background border text-xs font-medium text-muted-foreground flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-1.5 w-1.5 rounded-full bg-green-500 animate-pulse"}),"Active Connection"]}),s&&(0,b.jsxs)("button",{onClick:()=>K(!0),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors mt-1",children:[(0,b.jsx)(j.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]}),"github"===a&&(0,b.jsx)(p,{projectId:l}),s&&(0,b.jsx)(q.default,{isOpen:J,title:`Disconnect ${a}?`,message:"github"===a?"This revokes the stored credentials. Your attached repositories and synced history stay — reconnecting will resume where you left off.":`This revokes the stored credentials for ${a}. Project settings and synced history stay.`,confirmLabel:"Disconnect",cancelLabel:"Cancel",variant:"danger",onConfirm:()=>{K(!1),s()},onCancel:()=>K(!1)}),"github"!==a&&M.length>0&&(0,b.jsx)("div",{className:"w-full max-w-md",children:(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(i.Terminal,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"MCP Server"})]}),(0,b.jsxs)("p",{className:"text-xs text-muted-foreground leading-relaxed -mt-2",children:["Install the ",a," MCP server so agents can access ",a," directly."]}),M.map(a=>{let c=r[a],e=v?.[a]??!1,f=F===a,i=H[a];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-foreground",children:c.name}),e?(0,b.jsxs)("span",{className:"text-xs font-medium text-green-600 flex items-center gap-1",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3.5 w-3.5"}),"Installed"]}):(0,b.jsx)("button",{onClick:()=>L(a),disabled:f||!w,className:"flex items-center gap-1.5 px-3 py-1 bg-secondary text-secondary-foreground rounded-md text-xs font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-3 w-3 animate-spin"}),"Installing…"]}):(0,b.jsx)(b.Fragment,{children:"Install"})})]}),e&&(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Configured in ",(0,b.jsx)("code",{className:"font-mono",children:c.configPath})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),i]})]},a)})]})})]});let N=async()=>{if(x.trim()){E(!0),A(null);try{let a=await o(x.trim());a.ok?(y(""),C(!1)):A(a.error??"Failed to connect")}catch(a){A("An unexpected error occurred")}finally{E(!1)}}};return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(k.TrackerIcon,{trackerType:a,className:"h-16 w-16"}),(0,b.jsx)("div",{className:"absolute -bottom-1 -right-1 h-6 w-6 rounded-full bg-background border flex items-center justify-center shadow-sm",children:(0,b.jsx)(f.Globe,{className:"h-3 w-3 text-muted-foreground"})})]}),(0,b.jsxs)("div",{className:"text-center space-y-2",children:[(0,b.jsxs)("h3",{className:"text-lg font-semibold capitalize",children:["Connect to ",a]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground text-center max-w-sm leading-relaxed",children:["Link your ",a," account to import issues, track progress, and automate your workflow."]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,b.jsxs)("button",{onClick:n,className:"flex items-center justify-center gap-2 w-full px-4 py-2.5 bg-primary text-primary-foreground rounded-lg text-sm font-semibold hover:bg-primary/90 transition-all active:scale-[0.98] shadow-sm",children:[(0,b.jsx)(f.Globe,{className:"h-4 w-4"}),"Connect with OAuth"]}),"github"!==a&&(0,b.jsxs)("button",{onClick:()=>{C(!B),A(null)},className:"flex items-center justify-center gap-2 w-full px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,b.jsx)(e.Key,{className:"h-3.5 w-3.5"}),B?"Use OAuth instead":"Connect with API key"]}),(0,b.jsx)("div",{className:`grid transition-all duration-300 ease-in-out ${B?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3 pt-2",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("input",{type:"password",value:x,onChange:a=>{y(a.target.value),z&&A(null)},placeholder:"Paste your API key here",className:`w-full px-3 py-2 border rounded-lg text-sm bg-background transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20 ${z?"border-destructive":"focus:border-primary"}`,onKeyDown:a=>"Enter"===a.key&&N()}),(0,b.jsx)(e.Key,{className:"absolute right-3 top-2.5 h-4 w-4 text-muted-foreground/50"})]}),z&&(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("p",{children:z})]}),(0,b.jsx)("button",{onClick:N,disabled:D||!x.trim(),className:"flex items-center justify-center gap-2 w-full px-4 py-2 bg-secondary text-secondary-foreground rounded-lg text-sm font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:D?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-4 w-4 animate-spin"}),"Connecting..."]}):"Verify & Connect"}),(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground text-center px-2",children:["Your API key is stored securely and only used for ",a," integration."]})]})})})]})]})}a.s(["default",()=>s],778784)}];
|
|
1
|
+
module.exports=[663504,235992,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);a.s(["Key",()=>c],663504);let d=(0,b.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);a.s(["Globe",()=>d],235992)},500650,a=>{"use strict";let b=(0,a.i(831709).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);a.s(["LogOut",()=>b],500650)},778784,451844,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(44668),e=a.i(663504),f=a.i(235992),g=a.i(349692),h=a.i(693896),i=a.i(356239),j=a.i(500650),k=a.i(392045),l=a.i(353532),m=a.i(824179),n=a.i(864061);let o=(0,a.i(831709).default)("pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]);function p({projectId:a}){let[d,e]=(0,c.useState)([]),[f,h]=(0,c.useState)(!0),[i,j]=(0,c.useState)(null),[k,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)("all"),[C,D]=(0,c.useState)(new Set),[E,F]=(0,c.useState)(!1),G=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/github/repos",{cache:"no-store"});if(!a.ok)throw Error("Failed to load repos");let b=await a.json();e(b.repos??[]),j(null)}catch{j("Failed to load repositories")}finally{h(!1)}},[]);(0,c.useEffect)(()=>{G()},[G]);let H=(0,c.useCallback)((a,b)=>`${a}/${b}`.toLowerCase(),[]),I=(0,c.useMemo)(()=>new Set(d.map(a=>H(a.owner,a.name))),[d,H]),J=(0,c.useCallback)(async()=>{if(r(!0),D(new Set),z(""),B("all"),!(s.length>0)){v(!0),x(null);try{let b=await fetch(`/api/github/user-repos?projectId=${encodeURIComponent(a)}`,{cache:"no-store"});if(!b.ok){let a=await b.json().catch(()=>({}));throw Error(a?.error??"Failed to fetch repos")}let c=await b.json();t(c.repos??[])}catch(a){x(a instanceof Error?a.message:"Failed to fetch repos")}finally{v(!1)}}},[a,s.length]),K=()=>{r(!1)};(0,c.useEffect)(()=>{if(!q)return;let a=a=>{"Escape"===a.key&&K()};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[q]);let L=(0,c.useMemo)(()=>{let a=[],b=[];for(let c of s)I.has(H(c.owner,c.name))?a.push(c):b.push(c);return[...a,...b]},[s,I,H]),M=(0,c.useMemo)(()=>{let a=y.trim().toLowerCase();return L.filter(b=>("public"!==A||!b.private)&&("private"!==A||!!b.private)&&(!a||b.fullName.toLowerCase().includes(a)||(b.description??"").toLowerCase().includes(a)))},[L,y,A]),N=(0,c.useMemo)(()=>M.filter(a=>!I.has(H(a.owner,a.name))),[M,I,H]),O=N.length>0&&N.every(a=>C.has(a.id)),P=async()=>{if(0!==C.size){F(!0);try{let a=s.filter(a=>C.has(a.id));await Promise.all(a.map(a=>fetch("/api/github/repos",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({owner:a.owner,name:a.name,defaultBranch:a.defaultBranch,private:a.private})}))),await G(),K()}finally{F(!1)}}},Q=(0,c.useCallback)(async a=>{p(a);try{await fetch("/api/github/repos",{method:"DELETE",headers:{"content-type":"application/json"},body:JSON.stringify({id:a})}),await G()}finally{p(null)}},[G]);return(0,b.jsxs)("div",{className:"w-full max-w-md space-y-4",children:[(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{className:"text-sm font-medium",children:"Attached repositories"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Repos the local agent watches for PRs, reviews, and comments."})]}),(0,b.jsxs)("button",{type:"button",onClick:J,className:"text-xs px-2.5 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1",children:[(0,b.jsx)(l.Plus,{className:"w-3.5 h-3.5"}),"Add"]})]}),f?(0,b.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,b.jsx)(g.Loader2,{className:"w-4 h-4 animate-spin"}),"Loading repositories…"]}):i?(0,b.jsx)("p",{className:"text-sm text-destructive",children:i}):0===d.length?(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:"No repositories attached yet."}):(0,b.jsx)("ul",{className:"divide-y",children:d.map(a=>(0,b.jsxs)("li",{className:"flex items-center justify-between py-2",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsxs)("span",{className:"text-sm font-mono",children:[a.owner,"/",a.name]}),(0,b.jsxs)("span",{className:"text-xs text-muted-foreground",children:[a.defaultBranch??"no default branch",a.private?" · private":" · public",a.accessRevoked?" · access revoked":""]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>Q(a.id),disabled:k===a.id,className:"p-1.5 rounded hover:bg-accent disabled:opacity-50",title:"Remove",children:(0,b.jsx)(m.X,{className:"w-3.5 h-3.5"})})]},a.id))})]}),(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex items-center justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h4",{className:"text-sm font-medium",children:"Sync"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground mt-0.5",children:"Pull the latest PRs, reviews, and comments for attached repos."})]}),(0,b.jsxs)("button",{type:"button",onClick:()=>alert("Sync will run when worker is scheduled"),className:"text-xs px-3 py-1.5 rounded border hover:bg-accent inline-flex items-center gap-1.5",children:[(0,b.jsx)(n.RefreshCw,{className:"w-3.5 h-3.5"}),"Sync now"]})]}),q&&(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-sm",onClick:K,children:(0,b.jsxs)("div",{className:"w-full max-w-3xl max-h-[90vh] flex flex-col rounded-xl border border-[var(--border)] bg-[var(--background)] text-[var(--foreground)] shadow-2xl",onClick:a=>a.stopPropagation(),children:[(0,b.jsxs)("header",{className:"px-6 py-5 border-b border-[var(--border)] flex items-start justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-[var(--muted-foreground)] mb-1",children:[(0,b.jsx)("span",{children:"GitHub"}),(0,b.jsx)("span",{children:"·"}),(0,b.jsx)("span",{children:"Attach repositories"})]}),(0,b.jsx)("h1",{className:"text-xl font-semibold tracking-tight",children:"Select repositories"}),(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)] mt-1",children:"Pick the repos you want agx to track. Already-attached repos are pinned at the top."})]}),(0,b.jsx)("button",{onClick:K,className:"p-1.5 rounded hover:bg-[var(--item-hover-bg)] text-[var(--muted-foreground)]","aria-label":"Close",children:(0,b.jsx)(m.X,{className:"w-4 h-4"})})]}),(0,b.jsx)("div",{className:"px-6 py-4 flex-1 overflow-hidden flex flex-col",children:w?(0,b.jsx)("div",{className:"rounded-lg border border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed)] px-4 py-3 text-sm",children:w}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col sm:flex-row gap-2 mb-3",children:[(0,b.jsxs)("div",{className:"relative flex-1",children:[(0,b.jsxs)("svg",{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--muted-foreground)]",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,b.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,b.jsx)("path",{d:"m21 21-4.3-4.3"})]}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>z(a.target.value),placeholder:"Search repositories...",className:"w-full pl-9 pr-3 py-2 rounded-lg border border-[var(--border)] bg-[var(--input)] text-sm focus:outline-none focus:border-[var(--primary)] focus:bg-[var(--input-focus)] transition-colors"})]}),(0,b.jsx)("div",{className:"flex gap-1 rounded-lg border border-[var(--border)] p-1",children:["all","public","private"].map(a=>(0,b.jsx)("button",{onClick:()=>B(a),className:`px-3 py-1 text-xs rounded-md capitalize transition-colors ${A===a?"bg-[var(--primary)] text-[var(--primary-foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:a},a))})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("button",{onClick:()=>{D(a=>{let b=new Set(a);return O?N.forEach(a=>b.delete(a.id)):N.forEach(a=>b.add(a.id)),b})},disabled:0===N.length,className:"hover:text-[var(--foreground)] transition-colors disabled:opacity-50",children:[O?"Deselect all":"Select all",y||"all"!==A?` (${N.length} shown)`:""]}),C.size>0&&(0,b.jsx)("button",{onClick:()=>D(new Set),className:"hover:text-[var(--foreground)] transition-colors",children:"Clear selection"})]}),(0,b.jsx)("div",{className:"rounded-lg border border-[var(--border)] bg-[var(--card-bg)] overflow-hidden flex-1 min-h-0",children:(0,b.jsx)("div",{className:"h-full overflow-y-auto",children:u?(0,b.jsx)("div",{className:"divide-y divide-[var(--border)]",children:Array.from({length:6}).map((a,c)=>(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3 animate-pulse",children:[(0,b.jsx)("div",{className:"w-4 h-4 rounded bg-[var(--muted)]"}),(0,b.jsx)("div",{className:"w-6 h-6 rounded-full bg-[var(--muted)]"}),(0,b.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,b.jsx)("div",{className:"h-3 w-1/3 rounded bg-[var(--muted)]"}),(0,b.jsx)("div",{className:"h-2 w-2/3 rounded bg-[var(--muted)]"})]})]},c))}):0===M.length?(0,b.jsx)("div",{className:"px-4 py-10 text-center text-sm text-[var(--muted-foreground)]",children:0===s.length?"No repositories found on your account.":"No repos match your search."}):(0,b.jsx)("ul",{className:"divide-y divide-[var(--border)]",children:M.map(a=>{let c=I.has(H(a.owner,a.name)),d=C.has(a.id);return(0,b.jsx)("li",{children:(0,b.jsxs)("label",{className:`flex items-start gap-3 px-4 py-3 transition-colors ${c?"bg-[var(--primary-muted)]/40 cursor-default":d?"bg-[var(--primary-muted)] cursor-pointer":"hover:bg-[var(--item-hover-bg)] cursor-pointer"}`,children:[c?(0,b.jsx)("div",{className:"mt-1 w-4 h-4 rounded-sm bg-[var(--primary)]/20 text-[var(--primary)] flex items-center justify-center",title:"Already attached",children:(0,b.jsx)(o,{className:"w-2.5 h-2.5"})}):(0,b.jsx)("input",{type:"checkbox",checked:d,onChange:()=>{!I.has(H(a.owner,a.name))&&D(b=>{let c=new Set(b);return c.has(a.id)?c.delete(a.id):c.add(a.id),c})},className:"mt-1 accent-[var(--primary)]"}),(0,b.jsx)("img",{src:a.avatarUrl,alt:"",className:"w-6 h-6 rounded-full mt-0.5 flex-shrink-0"}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,b.jsx)("span",{className:"text-sm font-medium truncate",children:a.fullName}),c&&(0,b.jsxs)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--primary)]/15 text-[var(--primary)] flex items-center gap-1",children:[(0,b.jsx)(o,{className:"w-2.5 h-2.5"}),"Attached"]}),a.private&&(0,b.jsx)("span",{className:"text-[10px] uppercase tracking-wide px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)]",children:"Private"})]}),a.description&&(0,b.jsx)("p",{className:"text-xs text-[var(--muted-foreground)] mt-0.5 line-clamp-1",children:a.description}),(0,b.jsxs)("div",{className:"text-[11px] text-[var(--muted-foreground)] mt-0.5",children:["Updated ",function(a){let b=Math.floor((Date.now()-new Date(a).getTime())/1e3);if(b<60)return"just now";let c=Math.floor(b/60);if(c<60)return`${c}m ago`;let d=Math.floor(c/60);if(d<24)return`${d}h ago`;let e=Math.floor(d/24);if(e<30)return`${e}d ago`;let f=Math.floor(e/30);return f<12?`${f}mo ago`:`${Math.floor(f/12)}y ago`}(a.updatedAt)]})]})]})},a.id)})})})})]})}),(0,b.jsxs)("footer",{className:"px-6 py-4 border-t border-[var(--border)] flex items-center justify-between gap-3",children:[(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[C.size," selected"]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:K,className:"px-4 py-2 rounded-lg border border-[var(--border)] hover:bg-[var(--item-hover-bg)] text-sm font-medium transition-colors",children:"Cancel"}),(0,b.jsx)("button",{onClick:P,disabled:0===C.size||E,className:"px-4 py-2 rounded-lg bg-[var(--primary)] hover:bg-[var(--primary-hover)] text-[var(--primary-foreground)] text-sm font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:E?"Attaching...":`Attach ${C.size} ${1===C.size?"repo":"repos"}`})]})]})]})})]})}a.s(["Pin",()=>o],451844);var q=a.i(734709);let r={claude:{name:"Claude Code",configPath:"~/.claude/settings.json"},codex:{name:"Codex CLI",configPath:"~/.codex/config.toml"},gemini:{name:"Gemini CLI",configPath:"~/.gemini/settings.json"}};function s({trackerType:a,projectId:l,connected:m,onConnect:n,onConnectWithKey:o,onDisconnect:s,loading:t=!1,clis:u,mcpConfigured:v,onConfigureMcp:w}){let[x,y]=c.default.useState(""),[z,A]=c.default.useState(null),[B,C]=c.default.useState(!1),[D,E]=c.default.useState(!1),[F,G]=c.default.useState(null),[H,I]=c.default.useState({}),[J,K]=c.default.useState(!1),L=async a=>{if(!w)return;G(a),I(b=>({...b,[a]:""}));let b=await w(a);b.ok||I(c=>({...c,[a]:b.error??"Failed to install MCP"})),G(null)},M=u?["claude","codex","gemini"].filter(a=>u[a]):["claude"];if(t)return(0,b.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,b.jsx)(g.Loader2,{className:"animate-spin h-8 w-8 text-muted-foreground"})});if(m)return(0,b.jsxs)("div",{className:"p-8 flex flex-col items-center gap-6",children:[(0,b.jsxs)("div",{className:"w-full max-w-md p-8 border border-green-500/20 bg-green-500/5 rounded-2xl flex flex-col items-center gap-4 text-center",children:[(0,b.jsx)("div",{className:"h-16 w-16 rounded-full bg-green-500/10 flex items-center justify-center text-green-600 shadow-inner",children:(0,b.jsx)(d.CheckCircle2,{className:"h-8 w-8"})}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xl font-bold text-foreground capitalize",children:[a," Connected"]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground leading-relaxed",children:["Your ",a," workspace is successfully connected. The agent can now sync issues and manage your backlog."]})]}),(0,b.jsxs)("div",{className:"mt-2 px-4 py-1.5 rounded-full bg-background border text-xs font-medium text-muted-foreground flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-1.5 w-1.5 rounded-full bg-green-500 animate-pulse"}),"Active Connection"]}),s&&(0,b.jsxs)("button",{onClick:()=>K(!0),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors mt-1",children:[(0,b.jsx)(j.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]}),"github"===a&&(0,b.jsx)(p,{projectId:l}),s&&(0,b.jsx)(q.default,{isOpen:J,title:`Disconnect ${a}?`,message:"github"===a?"This revokes the stored credentials. Your attached repositories and synced history stay — reconnecting will resume where you left off.":`This revokes the stored credentials for ${a}. Project settings and synced history stay.`,confirmLabel:"Disconnect",cancelLabel:"Cancel",variant:"danger",onConfirm:()=>{K(!1),s()},onCancel:()=>K(!1)}),"github"!==a&&M.length>0&&(0,b.jsx)("div",{className:"w-full max-w-md",children:(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(i.Terminal,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"MCP Server"})]}),(0,b.jsxs)("p",{className:"text-xs text-muted-foreground leading-relaxed -mt-2",children:["Install the ",a," MCP server so agents can access ",a," directly."]}),M.map(a=>{let c=r[a],e=v?.[a]??!1,f=F===a,i=H[a];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-foreground",children:c.name}),e?(0,b.jsxs)("span",{className:"text-xs font-medium text-green-600 flex items-center gap-1",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3.5 w-3.5"}),"Installed"]}):(0,b.jsx)("button",{onClick:()=>L(a),disabled:f||!w,className:"flex items-center gap-1.5 px-3 py-1 bg-secondary text-secondary-foreground rounded-md text-xs font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-3 w-3 animate-spin"}),"Installing…"]}):(0,b.jsx)(b.Fragment,{children:"Install"})})]}),e&&(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Configured in ",(0,b.jsx)("code",{className:"font-mono",children:c.configPath})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),i]})]},a)})]})})]});let N=async()=>{if(x.trim()){E(!0),A(null);try{let a=await o(x.trim());a.ok?(y(""),C(!1)):A(a.error??"Failed to connect")}catch(a){A("An unexpected error occurred")}finally{E(!1)}}};return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(k.TrackerIcon,{trackerType:a,className:"h-16 w-16"}),(0,b.jsx)("div",{className:"absolute -bottom-1 -right-1 h-6 w-6 rounded-full bg-background border flex items-center justify-center shadow-sm",children:(0,b.jsx)(f.Globe,{className:"h-3 w-3 text-muted-foreground"})})]}),(0,b.jsxs)("div",{className:"text-center space-y-2",children:[(0,b.jsxs)("h3",{className:"text-lg font-semibold capitalize",children:["Connect to ",a]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground text-center max-w-sm leading-relaxed",children:["Link your ",a," account to import issues, track progress, and automate your workflow."]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,b.jsxs)("button",{onClick:n,className:"flex items-center justify-center gap-2 w-full px-4 py-2.5 bg-primary text-primary-foreground rounded-lg text-sm font-semibold hover:bg-primary/90 transition-all active:scale-[0.98] shadow-sm",children:[(0,b.jsx)(f.Globe,{className:"h-4 w-4"}),"Connect with OAuth"]}),(0,b.jsxs)("button",{onClick:()=>{C(!B),A(null)},className:"flex items-center justify-center gap-2 w-full px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,b.jsx)(e.Key,{className:"h-3.5 w-3.5"}),B?"Use OAuth instead":"github"===a?"Connect with Personal Access Token":"Connect with API key"]}),(0,b.jsx)("div",{className:`grid transition-all duration-300 ease-in-out ${B?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3 pt-2",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("input",{type:"password",value:x,onChange:a=>{y(a.target.value),z&&A(null)},placeholder:"github"===a?"ghp_… or github_pat_…":"Paste your API key here",className:`w-full px-3 py-2 border rounded-lg text-sm bg-background transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20 ${z?"border-destructive":"focus:border-primary"}`,onKeyDown:a=>"Enter"===a.key&&N()}),(0,b.jsx)(e.Key,{className:"absolute right-3 top-2.5 h-4 w-4 text-muted-foreground/50"})]}),z&&(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("p",{children:z})]}),(0,b.jsx)("button",{onClick:N,disabled:D||!x.trim(),className:"flex items-center justify-center gap-2 w-full px-4 py-2 bg-secondary text-secondary-foreground rounded-lg text-sm font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:D?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-4 w-4 animate-spin"}),"Connecting..."]}):"Verify & Connect"}),(0,b.jsx)("p",{className:"text-[10px] text-muted-foreground text-center px-2",children:"github"===a?"Fine-grained PAT recommended. Needs repo access + read on issues/pull requests.":`Your API key is stored securely and only used for ${a} integration.`})]})})})]})]})}a.s(["default",()=>s],778784)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=apps_local_eec36ab6._.js.map
|