@synapse-research/synapse 0.2.6 → 0.2.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/bin/synapse.mjs +20 -16
- package/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +117 -117
- package/dist/.next/app-path-routes-manifest.json +26 -26
- package/dist/.next/build-manifest.json +2 -2
- package/dist/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/compute/page.js +1 -1
- package/dist/.next/server/app/(dashboard)/compute/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiment-designs/[designUuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiment-designs/new/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiment-designs/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiment-runs/[runUuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiment-runs/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiments/new/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/experiments/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/insights/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/related-works/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/research-questions/[questionUuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/research-questions/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/settings/page.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/[uuid]/settings/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/new/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/research-projects/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +1 -1
- package/dist/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/admin/companies/new.html +1 -1
- package/dist/.next/server/app/admin/companies/new.rsc +1 -1
- package/dist/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/admin/companies.html +1 -1
- package/dist/.next/server/app/admin/companies.rsc +1 -1
- package/dist/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/admin.html +1 -1
- package/dist/.next/server/app/admin.rsc +1 -1
- package/dist/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/admin/stats/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/compute-gpus/[uuid]/release/route.js +1 -1
- package/dist/.next/server/app/api/compute-gpus/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/compute-nodes/[uuid]/route.js +1 -1
- package/dist/.next/server/app/api/compute-nodes/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/compute-nodes/route.js +1 -1
- package/dist/.next/server/app/api/compute-nodes/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/compute-pools/[uuid]/route.js +1 -1
- package/dist/.next/server/app/api/compute-pools/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/compute-pools/route.js +1 -1
- package/dist/.next/server/app/api/compute-pools/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/documents/[uuid]/images/[filename]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/documents/[uuid]/images/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-designs/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-designs/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-designs/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-designs/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/dependencies/[dependsOnRunUuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/evaluate-criteria/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/registry/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiment-runs/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/complete/route.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/complete/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/progress/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/request-plan/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/reset/route.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/reset/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/review/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/start/route.js +1 -1
- package/dist/.next/server/app/api/experiments/[uuid]/start/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/mcp/route.js +1 -1
- package/dist/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/onboarding/status/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/agent-activity/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/baselines/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiment-designs/[designUuid]/validate/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiment-designs/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiment-designs/summary/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiment-runs/dependencies/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiment-runs/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/experiments/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/github/branches/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/[workUuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/auto-search/complete/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/auto-search/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/deep-research/complete/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/deep-research/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/related-works/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/research-questions/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/synthesis/complete/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/synthesis/refresh/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/[uuid]/synthesis/trigger/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-projects/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-questions/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-questions/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-questions/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-questions/[uuid]/review/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/research-questions/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/settings/integrations/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/ssh-config/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/index.html +1 -1
- package/dist/.next/server/app/index.rsc +1 -1
- package/dist/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/login/admin.html +1 -1
- package/dist/.next/server/app/login/admin.rsc +1 -1
- package/dist/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/login/callback.html +1 -1
- package/dist/.next/server/app/login/callback.rsc +1 -1
- package/dist/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/login/silent-refresh.html +1 -1
- package/dist/.next/server/app/login/silent-refresh.rsc +1 -1
- package/dist/.next/server/app/login.html +1 -1
- package/dist/.next/server/app/login.rsc +1 -1
- package/dist/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/research-projects/new.html +1 -1
- package/dist/.next/server/app/research-projects/new.rsc +1 -1
- package/dist/.next/server/app/research-projects.html +1 -1
- package/dist/.next/server/app/research-projects.rsc +1 -1
- package/dist/.next/server/app/settings.html +1 -1
- package/dist/.next/server/app/settings.rsc +1 -1
- package/dist/.next/server/app-paths-manifest.json +26 -26
- package/dist/.next/server/chunks/3073.js +1 -1
- package/dist/.next/server/chunks/4164.js +1 -1
- package/dist/.next/server/chunks/6499.js +1 -1
- package/dist/.next/server/chunks/8481.js +2 -2
- package/dist/.next/server/middleware-manifest.json +1 -1
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/package.json +1 -1
- /package/dist/.next/static/{pVawa8MT8_c61T_5wF_dM → miDhU6LXKNvhKSD5GUNx4}/_buildManifest.js +0 -0
- /package/dist/.next/static/{pVawa8MT8_c61T_5wF_dM → miDhU6LXKNvhKSD5GUNx4}/_ssgManifest.js +0 -0
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
color: #2563eb;
|
|
11
11
|
font-weight: 500;
|
|
12
12
|
}
|
|
13
|
-
`})]})});n.displayName="MentionEditor"},30457:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ht:()=>j,Vu:()=>l,Xo:()=>k,aQ:()=>n,iK:()=>o,kk:()=>m});var e=c(71255),f=c(62729),g=c(23180),h=a([e,g]);function i(a){return{uuid:a.uuid,agentUuid:a.agentUuid,name:a.name,description:a.description,status:a.status,lastActiveAt:a.lastActiveAt.toISOString(),expiresAt:a.expiresAt?.toISOString()??null,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString(),checkins:(a.runCheckins||[]).map(a=>({runUuid:a.runUuid,checkinAt:a.checkinAt.toISOString(),checkoutAt:a.checkoutAt?.toISOString()??null}))}}async function j(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});return c?i(c):null}async function k(a,b,c){return(await e.z.agentSession.findMany({where:{companyUuid:a,agentUuid:b,...c&&{status:c}},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}},orderBy:{createdAt:"desc"}})).map(i)}async function l(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Session not found");let d=await e.z.sessionRunCheckin.findMany({where:{sessionUuid:b,checkoutAt:null},select:{run:{select:{uuid:!0,researchProjectUuid:!0}}}});await e.z.sessionRunCheckin.updateMany({where:{sessionUuid:b,checkoutAt:null},data:{checkoutAt:new Date}});let g=await e.z.agentSession.update({where:{uuid:b},data:{status:"closed"},include:{runCheckins:{select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});for(let a of d)f.B.emitChange({companyUuid:c.companyUuid,researchProjectUuid:a.run.researchProjectUuid,entityType:"experiment_run",entityUuid:a.run.uuid,action:"updated"});return i(g)}async function m(a,b){return(await e.z.sessionRunCheckin.findMany({where:{runUuid:b,checkoutAt:null,session:{companyUuid:a,status:{in:["active","inactive"]}}},include:{session:{select:{uuid:!0,name:!0,agentUuid:!0,agent:{select:{name:!0}}}}}})).map(a=>({sessionUuid:a.session.uuid,sessionName:a.session.name,agentUuid:a.session.agentUuid,agentName:a.session.agent.name,checkinAt:a.checkinAt.toISOString()}))}async function n(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Session not found");if("closed"!==c.status)throw Error("Only closed sessions can be reopened");let d=await e.z.agentSession.update({where:{uuid:b},data:{status:"active",lastActiveAt:new Date},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});return i(d)}async function o(a,b){if(0===b.length)return{};let c=await e.z.sessionRunCheckin.groupBy({by:["runUuid"],where:{runUuid:{in:b},checkoutAt:null,session:{companyUuid:a,status:{in:["active","inactive"]}}},_count:{runUuid:!0}}),d={};for(let a of c)d[a.runUuid]=a._count.runUuid;return d}[e,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},37943:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$M:()=>n,Ip:()=>o,NL:()=>p,Ug:()=>t,Xm:()=>l,lX:()=>r,p_:()=>m,r5:()=>s,rD:()=>q,vt:()=>k});var e=c(52618),f=c(911),g=a([e]);function h(a){return{uuid:a.uuid,researchProjectUuid:a.researchProjectUuid,projectName:a.projectName,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName,readAt:a.readAt?.toISOString()??null,archivedAt:a.archivedAt?.toISOString()??null,createdAt:a.createdAt.toISOString()}}function i(a){return{uuid:a.uuid,ownerType:a.ownerType,ownerUuid:a.ownerUuid,runAssigned:a.runAssigned,runStatusChanged:a.runStatusChanged,runVerified:a.runVerified,runReopened:a.runReopened,designSubmitted:a.designSubmitted,designApproved:a.designApproved,designRejected:a.designRejected,researchQuestionClaimed:a.researchQuestionClaimed,commentAdded:a.commentAdded,hypothesisFormulationRequested:a.hypothesisFormulationRequested,hypothesisFormulationAnswered:a.hypothesisFormulationAnswered,experimentCompleted:a.experimentCompleted,experimentAutoProposed:a.experimentAutoProposed,experimentStatusChanged:a.experimentStatusChanged,experimentProgress:a.experimentProgress,synthesisUpdated:a.synthesisUpdated,autoSearchCompleted:a.autoSearchCompleted,deepResearchCompleted:a.deepResearchCompleted,autonomousLoopTriggered:a.autonomousLoopTriggered,mentioned:a.mentioned}}function j(a,b){return{type:"new_notification",notificationUuid:a.uuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName,unreadCount:b}}async function k(a){let b=await e.prisma.notification.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName}}),c=await e.prisma.notification.count({where:{companyUuid:a.companyUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,readAt:null,archivedAt:null}});return f.B.emit(`notification:${a.recipientType}:${a.recipientUuid}`,j(b,c)),h(b)}async function l(a){let b=await Promise.all(a.map(a=>e.prisma.notification.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName}}))),c=new Set;for(let b of a)c.add(`${b.recipientType}:${b.recipientUuid}:${b.companyUuid}`);return await Promise.all(Array.from(c).map(async c=>{let[d,g,h]=c.split(":"),i=await e.prisma.notification.count({where:{companyUuid:h,recipientType:d,recipientUuid:g,readAt:null,archivedAt:null}}),k=a.find(a=>a.recipientType===d&&a.recipientUuid===g),l=b.find(a=>a.recipientType===d&&a.recipientUuid===g);l&&k&&f.B.emit(`notification:${d}:${g}`,j(l,i))})),b.map(h)}async function m(a){let{companyUuid:b,recipientType:c,recipientUuid:d,researchProjectUuid:f,readFilter:g,archived:i}=a,j=a.skip??0,k=a.take??20,l={companyUuid:b,recipientType:c,recipientUuid:d,...f&&{researchProjectUuid:f},..."unread"===g&&{readAt:null},..."read"===g&&{readAt:{not:null}},...!1===i&&{archivedAt:null},...!0===i&&{archivedAt:{not:null}}},[m,n,o]=await Promise.all([e.prisma.notification.findMany({where:l,skip:j,take:k,orderBy:{createdAt:"desc"}}),e.prisma.notification.count({where:l}),e.prisma.notification.count({where:{companyUuid:b,recipientType:c,recipientUuid:d,readAt:null,archivedAt:null}})]);return{notifications:m.map(h),total:n,unreadCount:o}}async function n(a,b,c){return e.prisma.notification.count({where:{companyUuid:a,recipientType:b,recipientUuid:c,readAt:null,archivedAt:null}})}async function o(a,b,c,d){await e.prisma.notification.updateMany({where:{uuid:a,companyUuid:b,recipientType:c,recipientUuid:d,readAt:null},data:{readAt:new Date}});let g=await e.prisma.notification.findFirst({where:{uuid:a,companyUuid:b}});if(!g)throw Error("Notification not found");let i=await n(b,c,d);return f.B.emit(`notification:${c}:${d}`,{type:"count_update",unreadCount:i}),h(g)}async function p(a,b,c,d){let g=await e.prisma.notification.updateMany({where:{companyUuid:a,recipientType:b,recipientUuid:c,readAt:null,...d&&{researchProjectUuid:d}},data:{readAt:new Date}}),h=await n(a,b,c);return f.B.emit(`notification:${b}:${c}`,{type:"count_update",unreadCount:h}),{count:g.count}}async function q(a,b,c,d){await e.prisma.notification.updateMany({where:{uuid:a,companyUuid:b,recipientType:c,recipientUuid:d,archivedAt:null},data:{archivedAt:new Date}});let g=await e.prisma.notification.findFirst({where:{uuid:a,companyUuid:b}});if(!g)throw Error("Notification not found");let i=await n(b,c,d);return f.B.emit(`notification:${c}:${d}`,{type:"count_update",unreadCount:i}),h(g)}async function r(a,b,c){let d=await e.prisma.notificationPreference.findUnique({where:{ownerType_ownerUuid:{ownerType:b,ownerUuid:c}}});return d||(d=await e.prisma.notificationPreference.create({data:{companyUuid:a,ownerType:b,ownerUuid:c}})),i(d)}async function s(a,b){let c=b.filter((a,b,c)=>{let d=`${a.type}:${a.uuid}`;return c.findIndex(a=>`${a.type}:${a.uuid}`===d)===b});if(0===c.length)return new Map;let d=await e.prisma.notificationPreference.findMany({where:{companyUuid:a,OR:c.map(a=>({ownerType:a.type,ownerUuid:a.uuid}))}}),f=new Set(d.map(a=>`${a.ownerType}:${a.ownerUuid}`)),g=c.filter(a=>!f.has(`${a.type}:${a.uuid}`));g.length>0&&await Promise.all(g.map(b=>e.prisma.notificationPreference.create({data:{companyUuid:a,ownerType:b.type,ownerUuid:b.uuid}})));let h=g.length>0?await e.prisma.notificationPreference.findMany({where:{companyUuid:a,OR:c.map(a=>({ownerType:a.type,ownerUuid:a.uuid}))}}):d;return new Map(h.map(a=>[`${a.ownerType}:${a.ownerUuid}`,i(a)]))}async function t(a,b,c,d){let f=await e.prisma.notificationPreference.upsert({where:{ownerType_ownerUuid:{ownerType:b,ownerUuid:c}},create:{companyUuid:a,ownerType:b,ownerUuid:c,...d},update:d});return i(f)}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},48873:(a,b,c)=>{c.d(b,{Ik:()=>g,Yy:()=>d,nm:()=>e,xh:()=>f});class d extends Error{constructor(a){super(`${a} is already claimed`),this.name="AlreadyClaimedError"}}class e extends Error{constructor(a){super(`${a} is not currently claimed`),this.name="NotClaimedError"}}class f extends Error{constructor(a,b){super(`Invalid experiment status transition: ${a} -> ${b}`),this.name="InvalidTransitionError",this.from=a,this.to=b}}function g(a){return"object"==typeof a&&null!==a&&"code"in a&&"P2025"===a.code}},51870:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DY:()=>g});var e=c(71255),f=a([e]);async function g(a,b){return e.z.experimentRegistry.findFirst({where:{runUuid:b,companyUuid:a}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},55454:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DB:()=>w,Iz:()=>k,LD:()=>u,OI:()=>v,PQ:()=>s,SU:()=>q,TY:()=>j,XH:()=>i,cx:()=>t,iJ:()=>m,m_:()=>l,pG:()=>n,ut:()=>p,vK:()=>o});var e=c(51455),f=c(52618),g=a([f]);f=(g.then?(await g)():g)[0];let x="available",y={gpus:{orderBy:{slotIndex:"asc"},include:{reservations:{where:{releasedAt:null},include:{run:{select:{uuid:!0,title:!0,status:!0}}}},experimentReservations:{where:{releasedAt:null},include:{experiment:{select:{uuid:!0,title:!0,status:!0}}}}}}};function h(a){let b=a.gpus.map(a=>{let b=a.experimentReservations.find(a=>a.experiment)??null,c=a.reservations.find(a=>a.run)??null,d=null;b?.experiment?d={uuid:b.uuid,kind:"experiment",itemUuid:b.experiment.uuid,itemTitle:b.experiment.title,itemStatus:b.experiment.status}:c?.run&&(d={uuid:c.uuid,kind:"run",itemUuid:c.run.uuid,itemTitle:c.run.title,itemStatus:c.run.status});let e=d?"busy":a.lifecycle;return{uuid:a.uuid,slotIndex:a.slotIndex,model:a.model,memoryGb:a.memoryGb,lifecycle:a.lifecycle,utilizationPercent:a.utilizationPercent,memoryUsedGb:a.memoryUsedGb,temperatureC:a.temperatureC,notes:a.notes,lastReportedAt:a.lastReportedAt?.toISOString()??null,activeReservation:d?{uuid:d.uuid,kind:d.kind,itemUuid:d.itemUuid,itemTitle:d.itemTitle,itemStatus:d.itemStatus}:null,computedStatus:e}}),c=!!(a.sshHost&&a.sshKeyPath&&a.sshKeySource&&"manual_path"!==a.sshKeySource);return{uuid:a.uuid,label:a.label,ec2InstanceId:a.ec2InstanceId,instanceType:a.instanceType,region:a.region,lifecycle:a.lifecycle,sshHost:a.sshHost,sshUser:a.sshUser,sshPort:a.sshPort,sshKeyName:c?null:a.sshKeyName,sshKeySource:c?null:a.sshKeySource,managedKeyAvailable:c,keyManagedByServer:c,ssmTarget:a.ssmTarget,notes:a.notes,lastReportedAt:a.lastReportedAt?.toISOString()??null,telemetryEnabled:a.telemetryEnabled,telemetryError:a.telemetryError??null,gpuCount:b.length,busyGpuCount:b.filter(a=>"busy"===a.computedStatus).length,availableGpuCount:b.filter(a=>a.computedStatus===x).length,inventoryPending:0===b.length,gpus:b}}async function i(a){return(await f.prisma.computePool.findMany({where:{companyUuid:a},orderBy:{createdAt:"asc"},include:{nodes:{orderBy:{label:"asc"},include:y}}})).map(a=>({uuid:a.uuid,name:a.name,description:a.description,nodes:a.nodes.map(a=>h(a))}))}async function j(a){return(await f.prisma.computeNode.findMany({where:{companyUuid:a},orderBy:{label:"asc"},include:{...y,pool:{select:{uuid:!0,name:!0}}}})).map(a=>({...h(a),pool:{uuid:a.pool.uuid,name:a.pool.name}}))}async function k(a,b){let c=await f.prisma.computeNode.findFirst({where:{companyUuid:a,uuid:b},include:y});return c?h(c):null}async function l(a){return f.prisma.computePool.create({data:{companyUuid:a.companyUuid,name:a.name,description:a.description||null}})}async function m(a){return f.prisma.computeNode.create({data:{companyUuid:a.companyUuid,poolUuid:a.poolUuid,label:a.label,ec2InstanceId:a.ec2InstanceId||null,instanceType:a.instanceType||null,region:a.region||null,lifecycle:a.lifecycle||"idle",sshHost:a.sshHost||null,sshUser:a.sshUser||null,sshPort:a.sshPort||null,sshKeyPath:a.sshKeyPath||null,sshKeyName:a.sshKeyName||null,sshKeyFingerprint:a.sshKeyFingerprint||null,sshKeySource:a.sshKeySource||null,ssmTarget:a.ssmTarget||null,notes:a.notes||null}})}async function n(a,b){return!!await f.prisma.computePool.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}})&&(await f.prisma.computePool.delete({where:{uuid:b}}),!0)}async function o(a,b){return!!await f.prisma.computeNode.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}})&&(await f.prisma.computeNode.delete({where:{uuid:b}}),!0)}async function p(a){let b=await f.prisma.computeNode.findUnique({where:{uuid:a.nodeUuid},select:{uuid:!0,companyUuid:!0}});if(!b||a.companyUuid&&b.companyUuid!==a.companyUuid)throw Error("Compute node not found");for(let c of(await f.prisma.computeNode.update({where:{uuid:a.nodeUuid},data:{ec2InstanceId:a.ec2InstanceId??void 0,instanceType:a.instanceType??void 0,region:a.region??void 0,lastReportedAt:new Date}}),a.gpus))await f.prisma.computeGpu.upsert({where:{nodeUuid_slotIndex:{nodeUuid:a.nodeUuid,slotIndex:c.slotIndex}},create:{companyUuid:b.companyUuid,nodeUuid:a.nodeUuid,slotIndex:c.slotIndex,model:c.model,memoryGb:c.memoryGb??null,lifecycle:x,lastReportedAt:new Date},update:{model:c.model,memoryGb:c.memoryGb??null,lastReportedAt:new Date}});return f.prisma.computeNode.findUniqueOrThrow({where:{uuid:a.nodeUuid},include:{gpus:{orderBy:{slotIndex:"asc"}}}})}async function q(a){let b=new Date;for(let c of a.gpus)await f.prisma.computeGpu.update({where:{uuid:c.gpuUuid},data:{lifecycle:c.lifecycle??void 0,utilizationPercent:c.utilizationPercent??void 0,memoryUsedGb:c.memoryUsedGb??void 0,temperatureC:c.temperatureC??void 0,notes:c.notes??void 0,lastReportedAt:b}});await f.prisma.computeNode.update({where:{uuid:a.nodeUuid},data:{lastReportedAt:b}})}async function r(a,b,c){if(0===c.length)return;let d=await f.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{computePoolUuid:!0}});if(d?.computePoolUuid&&(await f.prisma.computeGpu.findMany({where:{uuid:{in:c}},include:{node:{select:{poolUuid:!0}}}})).find(a=>a.node.poolUuid!==d.computePoolUuid))throw Error("GPU does not belong to the compute pool bound to this project")}async function s(a,b){await f.prisma.runGpuReservation.updateMany({where:{companyUuid:a,runUuid:b,releasedAt:null},data:{releasedAt:new Date}})}async function t(a){if(0===a.gpuUuids.length)return[];let b=await f.prisma.experiment.findFirst({where:{uuid:a.experimentUuid,companyUuid:a.companyUuid},select:{researchProjectUuid:!0}});return b&&await r(a.companyUuid,b.researchProjectUuid,a.gpuUuids),f.prisma.$transaction(async b=>{let c=await b.computeGpu.findMany({where:{companyUuid:a.companyUuid,uuid:{in:a.gpuUuids}},include:{reservations:{where:{releasedAt:null},select:{uuid:!0}},experimentReservations:{where:{releasedAt:null},select:{uuid:!0,experimentUuid:!0}}}});if(c.length!==a.gpuUuids.length)throw Error("Some GPUs could not be found");let d=c.find(b=>b.lifecycle!==x||b.reservations.length>0||b.experimentReservations.some(b=>b.experimentUuid!==a.experimentUuid));if(d)throw Error(`GPU ${d.slotIndex} on node ${d.nodeUuid} is not available`);let e=new Set(c.filter(b=>b.experimentReservations.some(b=>b.experimentUuid===a.experimentUuid)).map(a=>a.uuid)),f=a.gpuUuids.filter(a=>!e.has(a));return 0===f.length?[]:Promise.all(f.map(c=>b.experimentGpuReservation.create({data:{companyUuid:a.companyUuid,experimentUuid:a.experimentUuid,gpuUuid:c}})))})}async function u(a,b){await f.prisma.experimentGpuReservation.updateMany({where:{companyUuid:a,experimentUuid:b,releasedAt:null},data:{releasedAt:new Date}})}async function v(a,b){if(!await f.prisma.computeGpu.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}}))throw Error("GPU not found");let c=new Date,[d,e]=await f.prisma.$transaction([f.prisma.experimentGpuReservation.updateMany({where:{companyUuid:a,gpuUuid:b,releasedAt:null},data:{releasedAt:c}}),f.prisma.runGpuReservation.updateMany({where:{companyUuid:a,gpuUuid:b,releasedAt:null},data:{releasedAt:c}})]);return{experimentsReleased:d.count,runsReleased:e.count}}async function w(a){let b=await f.prisma.experiment.findFirst({where:{companyUuid:a.companyUuid,uuid:a.experimentUuid,assigneeType:"agent",assigneeUuid:a.agentUuid},select:{uuid:!0,status:!0}});if(!b)throw Error("Experiment is not assigned to this agent");if("pending_start"!==b.status&&"in_progress"!==b.status)throw Error(`Experiment must be pending_start or in_progress, current status: ${b.status}`);let c=await f.prisma.computeNode.findFirst({where:{companyUuid:a.companyUuid,uuid:a.nodeUuid},select:{uuid:!0,label:!0,sshHost:!0,sshUser:!0,sshPort:!0,sshKeyPath:!0,sshKeyName:!0,sshKeyFingerprint:!0,sshKeySource:!0,ssmTarget:!0}});if(!c)throw Error("Compute node not found");if(!c.sshHost||!c.sshKeyPath)throw Error("This compute node does not have a managed SSH key bundle");let d=await (0,e.readFile)(c.sshKeyPath,"utf8");return{nodeUuid:c.uuid,label:c.label,ssh:{host:c.sshHost,user:c.sshUser??"ubuntu",port:c.sshPort??22,keyName:c.sshKeyName,keyFingerprint:c.sshKeyFingerprint,keySource:c.sshKeySource,privateKeyPemBase64:Buffer.from(d,"utf8").toString("base64")},ssmTarget:c.ssmTarget}}d()}catch(a){d(a)}})},55732:(a,b,c)=>{c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(10837);c(21968);var e=c(21790),f=c(9810),g=c(85487),h=c(95556),i=c(96307);function j({...a}){return(0,d.jsx)(h.Root,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(h.Value,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...f}){return(0,d.jsxs)(h.Trigger,{"data-slot":"select-trigger","data-size":b,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...f,children:[c,(0,d.jsx)(h.Icon,{asChild:!0,children:(0,d.jsx)(e.A,{className:"size-4 opacity-50"})})]})}function m({className:a,children:b,position:c="item-aligned",align:e="center",...f}){return(0,d.jsx)(h.Portal,{children:(0,d.jsxs)(h.Content,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,align:e,...f,children:[(0,d.jsx)(o,{}),(0,d.jsx)(h.Viewport,{className:(0,i.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(h.Item,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,d.jsx)(h.ItemIndicator,{children:(0,d.jsx)(f.A,{className:"size-4"})})}),(0,d.jsx)(h.ItemText,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(h.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(g.A,{className:"size-4"})})}function p({className:a,...b}){return(0,d.jsx)(h.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(e.A,{className:"size-4"})})}},60187:(a,b,c)=>{c.d(b,{Oi:()=>m,eB:()=>k,nd:()=>h,u0:()=>l});var d=c(18481),e=c.n(d);let f=c(65582).vF.child({module:"redis"}),g=function(){if(process.env.REDIS_URL)return process.env.REDIS_URL;let a=process.env.REDIS_HOST;if(!a)return;let b=process.env.REDIS_PORT||"6379",c=process.env.REDIS_USERNAME||"default",d=process.env.REDIS_PASSWORD,e="rediss";return d?`${e}://${c}:${encodeURIComponent(d)}@${a}:${b}`:`${e}://${a}:${b}`}();function h(){return!!g}let i=globalThis;function j(a){let b=new(e())(g,{lazyConnect:!0,maxRetriesPerRequest:null,retryStrategy(b){let c=Math.min(200*b,5e3);return f.warn({name:a,delay:c,attempt:b},"reconnecting"),c}});return b.on("error",b=>{f.error({name:a,err:b.message||"unknown redis error"},"connection error")}),b.on("connect",()=>{f.info({name:a},"connected")}),b}function k(){return h()?(i.redisPub||(i.redisPub=j("pub")),i.redisPub):null}function l(){return h()?(i.redisSub||(i.redisSub=j("sub")),i.redisSub):null}function m(){let a=i.redisPub?.status??"not_initialized",b=i.redisSub?.status??"not_initialized",c=h();return{enabled:c,publisherStatus:a,subscriberStatus:b,transport:c&&("ready"===a||"ready"===b)?"redis":c?"memory-fallback":"disabled"}}},76872:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{LS:()=>i,SJ:()=>k,Uo:()=>l,Xx:()=>m,Z_:()=>h,_9:()=>n,ir:()=>j,lR:()=>g});var e=c(52618),f=a([e]);async function g(a,b){if("user"===a){let a=await e.prisma.user.findUnique({where:{uuid:b},select:{name:!0,email:!0}});return a&&(a.name||a.email)||"Unknown"}if("agent"===a){let a=await e.prisma.agent.findUnique({where:{uuid:b},select:{name:!0}});return a?.name??null}return null}async function h(a,b){if(!a||!b)return null;let c=await g(a,b);return c?{type:a,uuid:b,name:c}:null}async function i(a,b){if(b){let c=await g(b,a);return c?{type:b,uuid:a,name:c}:null}let c=await e.prisma.user.findUnique({where:{uuid:a},select:{name:!0,email:!0}});if(c)return{type:"user",uuid:a,name:c.name||c.email||"Unknown"};let d=await e.prisma.agent.findUnique({where:{uuid:a},select:{name:!0}});return d?{type:"agent",uuid:a,name:d.name}:null}async function j(a,b,c,d){if(!a||!b)return null;let f=await g(a,b);if(!f)return null;let h=null;if("agent"===a){let a=await e.prisma.agent.findUnique({where:{uuid:b},select:{color:!0}});h=a?.color??null}let i=null;if(d){let a=await g("user",d);a&&(i={type:"user",uuid:d,name:a})}return{type:a,uuid:b,name:f,color:h,assignedAt:c?.toISOString()??null,assignedBy:i}}async function k(a,b,c){if(!a)return null;let d=await g("user",a);return d?{reviewedBy:{type:"user",uuid:a,name:d},reviewNote:b,reviewedAt:c?.toISOString()??null}:null}async function l(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a.filter(a=>"user"===a.type).map(a=>a.uuid))],d=[...new Set(a.filter(a=>"agent"===a.type).map(a=>a.uuid))],[f,g]=await Promise.all([c.length>0?e.prisma.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}):[],d.length>0?e.prisma.agent.findMany({where:{uuid:{in:d}},select:{uuid:!0,name:!0}}):[]]);for(let a of f)b.set(a.uuid,a.name||a.email||"Unknown");for(let a of g)b.set(a.uuid,a.name);return b}async function m(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a)],d=await e.prisma.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}),f=new Set;for(let a of d)f.add(a.uuid),b.set(a.uuid,{type:"user",uuid:a.uuid,name:a.name||a.email||"Unknown"});let g=c.filter(a=>!f.has(a));if(g.length>0)for(let a of(await e.prisma.agent.findMany({where:{uuid:{in:g}},select:{uuid:!0,name:!0}})))b.set(a.uuid,{type:"agent",uuid:a.uuid,name:a.name});return b}async function n(a,b,c){let d={uuid:b,companyUuid:c};switch(a){case"research_question":return!!await e.prisma.researchQuestion.findFirst({where:d,select:{uuid:!0}});case"experiment":return!!await e.prisma.experiment.findFirst({where:d,select:{uuid:!0}});case"experiment_design":return!!await e.prisma.experimentDesign.findFirst({where:d,select:{uuid:!0}});case"experiment_run":return!!await e.prisma.experimentRun.findFirst({where:d,select:{uuid:!0}});case"document":return!!await e.prisma.document.findFirst({where:d,select:{uuid:!0}});default:return!1}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},80251:(a,b,c)=>{c.d(b,{eu:()=>g,q5:()=>h});var d=c(10837);c(21968);var e=c(14672),f=c(96307);function g({className:a,size:b="default",...c}){return(0,d.jsx)(e.Root,{"data-slot":"avatar","data-size":b,className:(0,f.cn)("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6",a),...c})}function h({className:a,...b}){return(0,d.jsx)(e.Fallback,{"data-slot":"avatar-fallback",className:(0,f.cn)("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",a),...b})}},82831:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z7:()=>k});var e=c(10837),f=c(21968),g=c.n(f),h=c(41709),i=c(83457),j=a([i]);i=(j.then?(await j)():j)[0];let m=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;function k({children:a,mentions:b}){if(!a||"string"!=typeof a)return null;let c=b&&b.length?function(a,b){let c;if(!b.length)return a;let d=a,e=RegExp(m.source,"g"),f=[];for(;null!==(c=e.exec(d));)f.push({start:c.index,end:c.index+c[0].length});for(let a of b){if("user"!==a.type&&"agent"!==a.type)continue;let b=new Set;for(let c of(b.add(a.name),b.add(a.name.replace(/\s+/g,"_")),b.add(a.name.replace(/\s+/g,"")),b.add(a.name.split(/\s+/)[0]??a.name),b)){if(!c)continue;let b=c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e=RegExp(`(^|[\\s(\\[{])@(${b})(?=[\\s.,:;!?)\\]}]|$)`,"gi");d=d.replace(e,(b,c,d,e)=>{let g=e+c.length;return!function(a){return f.some(b=>a>=b.start&&a<b.end)}(g)?`${c}@[${a.name}](${a.type}:${a.uuid})`:b})}}return d}(a,b):a;if(!new RegExp(m.source).test(c))return(0,e.jsx)("div",{className:"overflow-hidden [&_pre]:overflow-x-auto",children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:c})});let{processed:d,mentions:f}=function(a){let b=[],c=RegExp(m.source,"g");return{processed:a.replace(c,(a,c,d,e)=>{let f=b.length;return b.push({displayName:c,type:d,uuid:e}),`\u200B\u200BMENTION_${f}\u200B\u200B`}),mentions:b}}(c);return(0,e.jsx)(l,{mentions:f,children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:d})})}function l({children:a,mentions:b}){let c=g().useRef(null);return(0,e.jsx)("div",{ref:c,className:"overflow-hidden [&_pre]:overflow-x-auto",children:a})}d()}catch(a){d(a)}})},84819:(a,b,c)=>{c.d(b,{Separator:()=>g});var d=c(10837);c(21968);var e=c(72229),f=c(96307);function g({className:a,orientation:b="horizontal",decorative:c=!0,...g}){return(0,d.jsx)(e.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,f.cn)("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",a),...g})}},88437:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{E1:()=>k,nG:()=>j,s3:()=>i});var e=c(52618),f=c(911),g=c(76872),h=a([e,g]);async function i({companyUuid:a,researchProjectUuid:b,skip:c,take:d,targetType:f,targetUuid:g}){let h={researchProjectUuid:b,companyUuid:a,...f&&{targetType:f},...g&&{targetUuid:g}},[i,j]=await Promise.all([e.prisma.activity.findMany({where:h,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,targetType:!0,targetUuid:!0,actorType:!0,actorUuid:!0,action:!0,value:!0,sessionUuid:!0,sessionName:!0,createdAt:!0}}),e.prisma.activity.count({where:h})]);return{activities:i,total:j}}async function j(a){let{activities:b,total:c}=await i(a),d=await (0,g.Uo)(b.map(a=>({type:a.actorType,uuid:a.actorUuid})));return{activities:b.map(a=>({uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,action:a.action,actorType:a.actorType,actorName:d.get(a.actorUuid)||"Unknown",value:a.value,sessionUuid:a.sessionUuid,sessionName:a.sessionName,createdAt:a.createdAt.toISOString()})),total:c}}async function k({companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j,sessionUuid:k,sessionName:l}){let m=await e.prisma.activity.create({data:{companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j||void 0,sessionUuid:k||void 0,sessionName:l||void 0}});return f.B.emit("activity",{companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j,sessionUuid:k,sessionName:l,uuid:m.uuid}),m}[e,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},90097:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{EN:()=>A,G_:()=>q,M9:()=>z,Qh:()=>t,Qr:()=>s,Xw:()=>u,Z4:()=>E,ci:()=>w,gT:()=>B,nW:()=>D,o4:()=>r,sp:()=>y,wZ:()=>C,x7:()=>v,xv:()=>x});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=c(53870),k=c(23180),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.researchProject&&(e.project=a.researchProject),e}async function p(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("ExperimentDesign not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"research_question"===c.inputType&&h.length>0)for(let b of(await f.z.researchQuestion.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.computeBudgetHours&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b,c,d){let e=await f.z.researchQuestion.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedResearchQuestions:g}}async function r(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}}}});return c?o(c):null}async function s(a,b){return f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.experimentDesign.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"created"}),o(d)}async function u(a,b,c,d){let e=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("ExperimentDesign not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.experimentDesign.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.hG)(e.companyUuid,e.researchProjectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.Kb)(e.companyUuid,e.researchProjectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,runUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.runDependency.create({data:{runUuid:d,dependsOnRunUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({runUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});if(i.B.emitChange({companyUuid:e.companyUuid,researchProjectUuid:e.researchProjectUuid,entityType:"experiment_design",entityUuid:a,action:"updated"}),"research_question"===e.inputType){let a=e.inputUuids||[];a.length>0&&await f.z.researchQuestion.updateMany({where:{uuid:{in:a},companyUuid:b,status:"proposal_created"},data:{status:"completed"}})}let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function v(a,b,c){let d=await f.z.experimentDesign.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,researchProjectUuid:d.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"updated"}),o(d)}async function w(a,b,c){let d=await f.z.experimentDesign.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,researchProjectUuid:d.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"updated"}),o(d)}async function x(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("ExperimentDesign not found");await f.z.experimentDesign.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,researchProjectUuid:c.researchProjectUuid,entityType:"experiment_design",entityUuid:c.uuid,action:"deleted"})}async function y(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("ExperimentDesign not found");if("draft"!==c.status)throw Error("Only draft experiment designs can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`ExperimentDesign validation failed:
|
|
13
|
+
`})]})});n.displayName="MentionEditor"},30457:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ht:()=>j,Vu:()=>l,Xo:()=>k,aQ:()=>n,iK:()=>o,kk:()=>m});var e=c(71255),f=c(62729),g=c(23180),h=a([e,g]);function i(a){return{uuid:a.uuid,agentUuid:a.agentUuid,name:a.name,description:a.description,status:a.status,lastActiveAt:a.lastActiveAt.toISOString(),expiresAt:a.expiresAt?.toISOString()??null,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString(),checkins:(a.runCheckins||[]).map(a=>({runUuid:a.runUuid,checkinAt:a.checkinAt.toISOString(),checkoutAt:a.checkoutAt?.toISOString()??null}))}}async function j(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});return c?i(c):null}async function k(a,b,c){return(await e.z.agentSession.findMany({where:{companyUuid:a,agentUuid:b,...c&&{status:c}},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}},orderBy:{createdAt:"desc"}})).map(i)}async function l(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Session not found");let d=await e.z.sessionRunCheckin.findMany({where:{sessionUuid:b,checkoutAt:null},select:{run:{select:{uuid:!0,researchProjectUuid:!0}}}});await e.z.sessionRunCheckin.updateMany({where:{sessionUuid:b,checkoutAt:null},data:{checkoutAt:new Date}});let g=await e.z.agentSession.update({where:{uuid:b},data:{status:"closed"},include:{runCheckins:{select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});for(let a of d)f.B.emitChange({companyUuid:c.companyUuid,researchProjectUuid:a.run.researchProjectUuid,entityType:"experiment_run",entityUuid:a.run.uuid,action:"updated"});return i(g)}async function m(a,b){return(await e.z.sessionRunCheckin.findMany({where:{runUuid:b,checkoutAt:null,session:{companyUuid:a,status:{in:["active","inactive"]}}},include:{session:{select:{uuid:!0,name:!0,agentUuid:!0,agent:{select:{name:!0}}}}}})).map(a=>({sessionUuid:a.session.uuid,sessionName:a.session.name,agentUuid:a.session.agentUuid,agentName:a.session.agent.name,checkinAt:a.checkinAt.toISOString()}))}async function n(a,b){let c=await e.z.agentSession.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("Session not found");if("closed"!==c.status)throw Error("Only closed sessions can be reopened");let d=await e.z.agentSession.update({where:{uuid:b},data:{status:"active",lastActiveAt:new Date},include:{runCheckins:{where:{checkoutAt:null},select:{runUuid:!0,checkinAt:!0,checkoutAt:!0}}}});return i(d)}async function o(a,b){if(0===b.length)return{};let c=await e.z.sessionRunCheckin.groupBy({by:["runUuid"],where:{runUuid:{in:b},checkoutAt:null,session:{companyUuid:a,status:{in:["active","inactive"]}}},_count:{runUuid:!0}}),d={};for(let a of c)d[a.runUuid]=a._count.runUuid;return d}[e,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},33073:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DB:()=>w,Iz:()=>k,LD:()=>u,OI:()=>v,PQ:()=>s,SU:()=>q,TY:()=>j,XH:()=>i,cx:()=>t,iJ:()=>m,m_:()=>l,pG:()=>n,ut:()=>p,vK:()=>o});var e=c(51455),f=c(52618),g=a([f]);f=(g.then?(await g)():g)[0];let x="available",y={gpus:{orderBy:{slotIndex:"asc"},include:{reservations:{where:{releasedAt:null},include:{run:{select:{uuid:!0,title:!0,status:!0}}}},experimentReservations:{where:{releasedAt:null},include:{experiment:{select:{uuid:!0,title:!0,status:!0}}}}}}};function h(a){let b=a.gpus.map(a=>{let b=a.experimentReservations.find(a=>a.experiment)??null,c=a.reservations.find(a=>a.run)??null,d=null;b?.experiment?d={uuid:b.uuid,kind:"experiment",itemUuid:b.experiment.uuid,itemTitle:b.experiment.title,itemStatus:b.experiment.status}:c?.run&&(d={uuid:c.uuid,kind:"run",itemUuid:c.run.uuid,itemTitle:c.run.title,itemStatus:c.run.status});let e=d?"busy":a.lifecycle;return{uuid:a.uuid,slotIndex:a.slotIndex,model:a.model,memoryGb:a.memoryGb,lifecycle:a.lifecycle,utilizationPercent:a.utilizationPercent,memoryUsedGb:a.memoryUsedGb,temperatureC:a.temperatureC,notes:a.notes,lastReportedAt:a.lastReportedAt?.toISOString()??null,activeReservation:d?{uuid:d.uuid,kind:d.kind,itemUuid:d.itemUuid,itemTitle:d.itemTitle,itemStatus:d.itemStatus}:null,computedStatus:e}}),c=!!(a.sshHost&&a.sshKeyPath&&a.sshKeySource&&"manual_path"!==a.sshKeySource);return{uuid:a.uuid,label:a.label,ec2InstanceId:a.ec2InstanceId,instanceType:a.instanceType,region:a.region,lifecycle:a.lifecycle,sshHost:a.sshHost,sshUser:a.sshUser,sshPort:a.sshPort,sshKeyName:c?null:a.sshKeyName,sshKeySource:c?null:a.sshKeySource,managedKeyAvailable:c,keyManagedByServer:c,ssmTarget:a.ssmTarget,notes:a.notes,lastReportedAt:a.lastReportedAt?.toISOString()??null,telemetryEnabled:a.telemetryEnabled,telemetryError:a.telemetryError??null,gpuCount:b.length,busyGpuCount:b.filter(a=>"busy"===a.computedStatus).length,availableGpuCount:b.filter(a=>a.computedStatus===x).length,inventoryPending:0===b.length,gpus:b}}async function i(a){return(await f.prisma.computePool.findMany({where:{companyUuid:a},orderBy:{createdAt:"asc"},include:{nodes:{orderBy:{label:"asc"},include:y}}})).map(a=>({uuid:a.uuid,name:a.name,description:a.description,nodes:a.nodes.map(a=>h(a))}))}async function j(a){return(await f.prisma.computeNode.findMany({where:{companyUuid:a},orderBy:{label:"asc"},include:{...y,pool:{select:{uuid:!0,name:!0}}}})).map(a=>({...h(a),pool:{uuid:a.pool.uuid,name:a.pool.name}}))}async function k(a,b){let c=await f.prisma.computeNode.findFirst({where:{companyUuid:a,uuid:b},include:y});return c?h(c):null}async function l(a){return f.prisma.computePool.create({data:{companyUuid:a.companyUuid,name:a.name,description:a.description||null}})}async function m(a){return f.prisma.computeNode.create({data:{companyUuid:a.companyUuid,poolUuid:a.poolUuid,label:a.label,ec2InstanceId:a.ec2InstanceId||null,instanceType:a.instanceType||null,region:a.region||null,lifecycle:a.lifecycle||"idle",sshHost:a.sshHost||null,sshUser:a.sshUser||null,sshPort:a.sshPort||null,sshKeyPath:a.sshKeyPath||null,sshKeyName:a.sshKeyName||null,sshKeyFingerprint:a.sshKeyFingerprint||null,sshKeySource:a.sshKeySource||null,ssmTarget:a.ssmTarget||null,notes:a.notes||null}})}async function n(a,b){return!!await f.prisma.computePool.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}})&&(await f.prisma.computePool.delete({where:{uuid:b}}),!0)}async function o(a,b){return!!await f.prisma.computeNode.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}})&&(await f.prisma.computeNode.delete({where:{uuid:b}}),!0)}async function p(a){let b=await f.prisma.computeNode.findUnique({where:{uuid:a.nodeUuid},select:{uuid:!0,companyUuid:!0}});if(!b||a.companyUuid&&b.companyUuid!==a.companyUuid)throw Error("Compute node not found");for(let c of(await f.prisma.computeNode.update({where:{uuid:a.nodeUuid},data:{ec2InstanceId:a.ec2InstanceId??void 0,instanceType:a.instanceType??void 0,region:a.region??void 0,lastReportedAt:new Date}}),a.gpus))await f.prisma.computeGpu.upsert({where:{nodeUuid_slotIndex:{nodeUuid:a.nodeUuid,slotIndex:c.slotIndex}},create:{companyUuid:b.companyUuid,nodeUuid:a.nodeUuid,slotIndex:c.slotIndex,model:c.model,memoryGb:c.memoryGb??null,lifecycle:x,lastReportedAt:new Date},update:{model:c.model,memoryGb:c.memoryGb??null,lastReportedAt:new Date}});return f.prisma.computeNode.findUniqueOrThrow({where:{uuid:a.nodeUuid},include:{gpus:{orderBy:{slotIndex:"asc"}}}})}async function q(a){let b=new Date;for(let c of a.gpus)await f.prisma.computeGpu.update({where:{uuid:c.gpuUuid},data:{lifecycle:c.lifecycle??void 0,utilizationPercent:c.utilizationPercent??void 0,memoryUsedGb:c.memoryUsedGb??void 0,temperatureC:c.temperatureC??void 0,notes:c.notes??void 0,lastReportedAt:b}});await f.prisma.computeNode.update({where:{uuid:a.nodeUuid},data:{lastReportedAt:b}})}async function r(a,b,c){if(0===c.length)return;let d=await f.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{computePoolUuid:!0}});if(d?.computePoolUuid&&(await f.prisma.computeGpu.findMany({where:{uuid:{in:c}},include:{node:{select:{poolUuid:!0}}}})).find(a=>a.node.poolUuid!==d.computePoolUuid))throw Error("GPU does not belong to the compute pool bound to this project")}async function s(a,b){await f.prisma.runGpuReservation.updateMany({where:{companyUuid:a,runUuid:b,releasedAt:null},data:{releasedAt:new Date}})}async function t(a){if(0===a.gpuUuids.length)return[];let b=await f.prisma.experiment.findFirst({where:{uuid:a.experimentUuid,companyUuid:a.companyUuid},select:{researchProjectUuid:!0}});return b&&await r(a.companyUuid,b.researchProjectUuid,a.gpuUuids),f.prisma.$transaction(async b=>{let c=await b.computeGpu.findMany({where:{companyUuid:a.companyUuid,uuid:{in:a.gpuUuids}},include:{reservations:{where:{releasedAt:null},select:{uuid:!0}},experimentReservations:{where:{releasedAt:null},select:{uuid:!0,experimentUuid:!0}}}});if(c.length!==a.gpuUuids.length)throw Error("Some GPUs could not be found");let d=c.find(b=>b.lifecycle!==x||b.reservations.length>0||b.experimentReservations.some(b=>b.experimentUuid!==a.experimentUuid));if(d)throw Error(`GPU ${d.slotIndex} on node ${d.nodeUuid} is not available`);let e=new Set(c.filter(b=>b.experimentReservations.some(b=>b.experimentUuid===a.experimentUuid)).map(a=>a.uuid)),f=a.gpuUuids.filter(a=>!e.has(a));return 0===f.length?[]:Promise.all(f.map(c=>b.experimentGpuReservation.create({data:{companyUuid:a.companyUuid,experimentUuid:a.experimentUuid,gpuUuid:c}})))})}async function u(a,b){await f.prisma.experimentGpuReservation.updateMany({where:{companyUuid:a,experimentUuid:b,releasedAt:null},data:{releasedAt:new Date}})}async function v(a,b){if(!await f.prisma.computeGpu.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0}}))throw Error("GPU not found");let c=new Date,[d,e]=await f.prisma.$transaction([f.prisma.experimentGpuReservation.updateMany({where:{companyUuid:a,gpuUuid:b,releasedAt:null},data:{releasedAt:c}}),f.prisma.runGpuReservation.updateMany({where:{companyUuid:a,gpuUuid:b,releasedAt:null},data:{releasedAt:c}})]);return{experimentsReleased:d.count,runsReleased:e.count}}async function w(a){let b=await f.prisma.experiment.findFirst({where:{companyUuid:a.companyUuid,uuid:a.experimentUuid,assigneeType:"agent",assigneeUuid:a.agentUuid},select:{uuid:!0,status:!0}});if(!b)throw Error("Experiment is not assigned to this agent");if("pending_start"!==b.status&&"in_progress"!==b.status)throw Error(`Experiment must be pending_start or in_progress, current status: ${b.status}`);let c=await f.prisma.computeNode.findFirst({where:{companyUuid:a.companyUuid,uuid:a.nodeUuid},select:{uuid:!0,label:!0,sshHost:!0,sshUser:!0,sshPort:!0,sshKeyPath:!0,sshKeyName:!0,sshKeyFingerprint:!0,sshKeySource:!0,ssmTarget:!0}});if(!c)throw Error("Compute node not found");if(!c.sshHost||!c.sshKeyPath)throw Error("This compute node does not have a managed SSH key bundle");let d=await (0,e.readFile)(c.sshKeyPath,"utf8");return{nodeUuid:c.uuid,label:c.label,ssh:{host:c.sshHost,user:c.sshUser??"ubuntu",port:c.sshPort??22,keyName:c.sshKeyName,keyFingerprint:c.sshKeyFingerprint,keySource:c.sshKeySource,privateKeyPemBase64:Buffer.from(d,"utf8").toString("base64")},ssmTarget:c.ssmTarget}}d()}catch(a){d(a)}})},37943:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$M:()=>n,Ip:()=>o,NL:()=>p,Ug:()=>t,Xm:()=>l,lX:()=>r,p_:()=>m,r5:()=>s,rD:()=>q,vt:()=>k});var e=c(52618),f=c(911),g=a([e]);function h(a){return{uuid:a.uuid,researchProjectUuid:a.researchProjectUuid,projectName:a.projectName,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName,readAt:a.readAt?.toISOString()??null,archivedAt:a.archivedAt?.toISOString()??null,createdAt:a.createdAt.toISOString()}}function i(a){return{uuid:a.uuid,ownerType:a.ownerType,ownerUuid:a.ownerUuid,runAssigned:a.runAssigned,runStatusChanged:a.runStatusChanged,runVerified:a.runVerified,runReopened:a.runReopened,designSubmitted:a.designSubmitted,designApproved:a.designApproved,designRejected:a.designRejected,researchQuestionClaimed:a.researchQuestionClaimed,commentAdded:a.commentAdded,hypothesisFormulationRequested:a.hypothesisFormulationRequested,hypothesisFormulationAnswered:a.hypothesisFormulationAnswered,experimentCompleted:a.experimentCompleted,experimentAutoProposed:a.experimentAutoProposed,experimentStatusChanged:a.experimentStatusChanged,experimentProgress:a.experimentProgress,synthesisUpdated:a.synthesisUpdated,autoSearchCompleted:a.autoSearchCompleted,deepResearchCompleted:a.deepResearchCompleted,autonomousLoopTriggered:a.autonomousLoopTriggered,mentioned:a.mentioned}}function j(a,b){return{type:"new_notification",notificationUuid:a.uuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName,unreadCount:b}}async function k(a){let b=await e.prisma.notification.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName}}),c=await e.prisma.notification.count({where:{companyUuid:a.companyUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,readAt:null,archivedAt:null}});return f.B.emit(`notification:${a.recipientType}:${a.recipientUuid}`,j(b,c)),h(b)}async function l(a){let b=await Promise.all(a.map(a=>e.prisma.notification.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,recipientType:a.recipientType,recipientUuid:a.recipientUuid,entityType:a.entityType,entityUuid:a.entityUuid,entityTitle:a.entityTitle,projectName:a.projectName,action:a.action,message:a.message,actorType:a.actorType,actorUuid:a.actorUuid,actorName:a.actorName}}))),c=new Set;for(let b of a)c.add(`${b.recipientType}:${b.recipientUuid}:${b.companyUuid}`);return await Promise.all(Array.from(c).map(async c=>{let[d,g,h]=c.split(":"),i=await e.prisma.notification.count({where:{companyUuid:h,recipientType:d,recipientUuid:g,readAt:null,archivedAt:null}}),k=a.find(a=>a.recipientType===d&&a.recipientUuid===g),l=b.find(a=>a.recipientType===d&&a.recipientUuid===g);l&&k&&f.B.emit(`notification:${d}:${g}`,j(l,i))})),b.map(h)}async function m(a){let{companyUuid:b,recipientType:c,recipientUuid:d,researchProjectUuid:f,readFilter:g,archived:i}=a,j=a.skip??0,k=a.take??20,l={companyUuid:b,recipientType:c,recipientUuid:d,...f&&{researchProjectUuid:f},..."unread"===g&&{readAt:null},..."read"===g&&{readAt:{not:null}},...!1===i&&{archivedAt:null},...!0===i&&{archivedAt:{not:null}}},[m,n,o]=await Promise.all([e.prisma.notification.findMany({where:l,skip:j,take:k,orderBy:{createdAt:"desc"}}),e.prisma.notification.count({where:l}),e.prisma.notification.count({where:{companyUuid:b,recipientType:c,recipientUuid:d,readAt:null,archivedAt:null}})]);return{notifications:m.map(h),total:n,unreadCount:o}}async function n(a,b,c){return e.prisma.notification.count({where:{companyUuid:a,recipientType:b,recipientUuid:c,readAt:null,archivedAt:null}})}async function o(a,b,c,d){await e.prisma.notification.updateMany({where:{uuid:a,companyUuid:b,recipientType:c,recipientUuid:d,readAt:null},data:{readAt:new Date}});let g=await e.prisma.notification.findFirst({where:{uuid:a,companyUuid:b}});if(!g)throw Error("Notification not found");let i=await n(b,c,d);return f.B.emit(`notification:${c}:${d}`,{type:"count_update",unreadCount:i}),h(g)}async function p(a,b,c,d){let g=await e.prisma.notification.updateMany({where:{companyUuid:a,recipientType:b,recipientUuid:c,readAt:null,...d&&{researchProjectUuid:d}},data:{readAt:new Date}}),h=await n(a,b,c);return f.B.emit(`notification:${b}:${c}`,{type:"count_update",unreadCount:h}),{count:g.count}}async function q(a,b,c,d){await e.prisma.notification.updateMany({where:{uuid:a,companyUuid:b,recipientType:c,recipientUuid:d,archivedAt:null},data:{archivedAt:new Date}});let g=await e.prisma.notification.findFirst({where:{uuid:a,companyUuid:b}});if(!g)throw Error("Notification not found");let i=await n(b,c,d);return f.B.emit(`notification:${c}:${d}`,{type:"count_update",unreadCount:i}),h(g)}async function r(a,b,c){let d=await e.prisma.notificationPreference.findUnique({where:{ownerType_ownerUuid:{ownerType:b,ownerUuid:c}}});return d||(d=await e.prisma.notificationPreference.create({data:{companyUuid:a,ownerType:b,ownerUuid:c}})),i(d)}async function s(a,b){let c=b.filter((a,b,c)=>{let d=`${a.type}:${a.uuid}`;return c.findIndex(a=>`${a.type}:${a.uuid}`===d)===b});if(0===c.length)return new Map;let d=await e.prisma.notificationPreference.findMany({where:{companyUuid:a,OR:c.map(a=>({ownerType:a.type,ownerUuid:a.uuid}))}}),f=new Set(d.map(a=>`${a.ownerType}:${a.ownerUuid}`)),g=c.filter(a=>!f.has(`${a.type}:${a.uuid}`));g.length>0&&await Promise.all(g.map(b=>e.prisma.notificationPreference.create({data:{companyUuid:a,ownerType:b.type,ownerUuid:b.uuid}})));let h=g.length>0?await e.prisma.notificationPreference.findMany({where:{companyUuid:a,OR:c.map(a=>({ownerType:a.type,ownerUuid:a.uuid}))}}):d;return new Map(h.map(a=>[`${a.ownerType}:${a.ownerUuid}`,i(a)]))}async function t(a,b,c,d){let f=await e.prisma.notificationPreference.upsert({where:{ownerType_ownerUuid:{ownerType:b,ownerUuid:c}},create:{companyUuid:a,ownerType:b,ownerUuid:c,...d},update:d});return i(f)}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},48873:(a,b,c)=>{c.d(b,{Ik:()=>g,Yy:()=>d,nm:()=>e,xh:()=>f});class d extends Error{constructor(a){super(`${a} is already claimed`),this.name="AlreadyClaimedError"}}class e extends Error{constructor(a){super(`${a} is not currently claimed`),this.name="NotClaimedError"}}class f extends Error{constructor(a,b){super(`Invalid experiment status transition: ${a} -> ${b}`),this.name="InvalidTransitionError",this.from=a,this.to=b}}function g(a){return"object"==typeof a&&null!==a&&"code"in a&&"P2025"===a.code}},51870:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{DY:()=>g});var e=c(71255),f=a([e]);async function g(a,b){return e.z.experimentRegistry.findFirst({where:{runUuid:b,companyUuid:a}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},55732:(a,b,c)=>{c.d(b,{bq:()=>l,eb:()=>n,gC:()=>m,l6:()=>j,yv:()=>k});var d=c(10837);c(21968);var e=c(21790),f=c(9810),g=c(85487),h=c(95556),i=c(96307);function j({...a}){return(0,d.jsx)(h.Root,{"data-slot":"select",...a})}function k({...a}){return(0,d.jsx)(h.Value,{"data-slot":"select-value",...a})}function l({className:a,size:b="default",children:c,...f}){return(0,d.jsxs)(h.Trigger,{"data-slot":"select-trigger","data-size":b,className:(0,i.cn)("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",a),...f,children:[c,(0,d.jsx)(h.Icon,{asChild:!0,children:(0,d.jsx)(e.A,{className:"size-4 opacity-50"})})]})}function m({className:a,children:b,position:c="item-aligned",align:e="center",...f}){return(0,d.jsx)(h.Portal,{children:(0,d.jsxs)(h.Content,{"data-slot":"select-content",className:(0,i.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md","popper"===c&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:c,align:e,...f,children:[(0,d.jsx)(o,{}),(0,d.jsx)(h.Viewport,{className:(0,i.cn)("p-1","popper"===c&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:b}),(0,d.jsx)(p,{})]})})}function n({className:a,children:b,...c}){return(0,d.jsxs)(h.Item,{"data-slot":"select-item",className:(0,i.cn)("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",a),...c,children:[(0,d.jsx)("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-3.5 items-center justify-center",children:(0,d.jsx)(h.ItemIndicator,{children:(0,d.jsx)(f.A,{className:"size-4"})})}),(0,d.jsx)(h.ItemText,{children:b})]})}function o({className:a,...b}){return(0,d.jsx)(h.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(g.A,{className:"size-4"})})}function p({className:a,...b}){return(0,d.jsx)(h.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:(0,i.cn)("flex cursor-default items-center justify-center py-1",a),...b,children:(0,d.jsx)(e.A,{className:"size-4"})})}},60187:(a,b,c)=>{c.d(b,{Oi:()=>m,eB:()=>k,nd:()=>h,u0:()=>l});var d=c(18481),e=c.n(d);let f=c(65582).vF.child({module:"redis"}),g=function(){if(process.env.REDIS_URL)return process.env.REDIS_URL;let a=process.env.REDIS_HOST;if(!a)return;let b=process.env.REDIS_PORT||"6379",c=process.env.REDIS_USERNAME||"default",d=process.env.REDIS_PASSWORD,e="rediss";return d?`${e}://${c}:${encodeURIComponent(d)}@${a}:${b}`:`${e}://${a}:${b}`}();function h(){return!!g}let i=globalThis;function j(a){let b=new(e())(g,{lazyConnect:!0,maxRetriesPerRequest:null,retryStrategy(b){let c=Math.min(200*b,5e3);return f.warn({name:a,delay:c,attempt:b},"reconnecting"),c}});return b.on("error",b=>{f.error({name:a,err:b.message||"unknown redis error"},"connection error")}),b.on("connect",()=>{f.info({name:a},"connected")}),b}function k(){return h()?(i.redisPub||(i.redisPub=j("pub")),i.redisPub):null}function l(){return h()?(i.redisSub||(i.redisSub=j("sub")),i.redisSub):null}function m(){let a=i.redisPub?.status??"not_initialized",b=i.redisSub?.status??"not_initialized",c=h();return{enabled:c,publisherStatus:a,subscriberStatus:b,transport:c&&("ready"===a||"ready"===b)?"redis":c?"memory-fallback":"disabled"}}},76872:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{LS:()=>i,SJ:()=>k,Uo:()=>l,Xx:()=>m,Z_:()=>h,_9:()=>n,ir:()=>j,lR:()=>g});var e=c(52618),f=a([e]);async function g(a,b){if("user"===a){let a=await e.prisma.user.findUnique({where:{uuid:b},select:{name:!0,email:!0}});return a&&(a.name||a.email)||"Unknown"}if("agent"===a){let a=await e.prisma.agent.findUnique({where:{uuid:b},select:{name:!0}});return a?.name??null}return null}async function h(a,b){if(!a||!b)return null;let c=await g(a,b);return c?{type:a,uuid:b,name:c}:null}async function i(a,b){if(b){let c=await g(b,a);return c?{type:b,uuid:a,name:c}:null}let c=await e.prisma.user.findUnique({where:{uuid:a},select:{name:!0,email:!0}});if(c)return{type:"user",uuid:a,name:c.name||c.email||"Unknown"};let d=await e.prisma.agent.findUnique({where:{uuid:a},select:{name:!0}});return d?{type:"agent",uuid:a,name:d.name}:null}async function j(a,b,c,d){if(!a||!b)return null;let f=await g(a,b);if(!f)return null;let h=null;if("agent"===a){let a=await e.prisma.agent.findUnique({where:{uuid:b},select:{color:!0}});h=a?.color??null}let i=null;if(d){let a=await g("user",d);a&&(i={type:"user",uuid:d,name:a})}return{type:a,uuid:b,name:f,color:h,assignedAt:c?.toISOString()??null,assignedBy:i}}async function k(a,b,c){if(!a)return null;let d=await g("user",a);return d?{reviewedBy:{type:"user",uuid:a,name:d},reviewNote:b,reviewedAt:c?.toISOString()??null}:null}async function l(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a.filter(a=>"user"===a.type).map(a=>a.uuid))],d=[...new Set(a.filter(a=>"agent"===a.type).map(a=>a.uuid))],[f,g]=await Promise.all([c.length>0?e.prisma.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}):[],d.length>0?e.prisma.agent.findMany({where:{uuid:{in:d}},select:{uuid:!0,name:!0}}):[]]);for(let a of f)b.set(a.uuid,a.name||a.email||"Unknown");for(let a of g)b.set(a.uuid,a.name);return b}async function m(a){let b=new Map;if(0===a.length)return b;let c=[...new Set(a)],d=await e.prisma.user.findMany({where:{uuid:{in:c}},select:{uuid:!0,name:!0,email:!0}}),f=new Set;for(let a of d)f.add(a.uuid),b.set(a.uuid,{type:"user",uuid:a.uuid,name:a.name||a.email||"Unknown"});let g=c.filter(a=>!f.has(a));if(g.length>0)for(let a of(await e.prisma.agent.findMany({where:{uuid:{in:g}},select:{uuid:!0,name:!0}})))b.set(a.uuid,{type:"agent",uuid:a.uuid,name:a.name});return b}async function n(a,b,c){let d={uuid:b,companyUuid:c};switch(a){case"research_question":return!!await e.prisma.researchQuestion.findFirst({where:d,select:{uuid:!0}});case"experiment":return!!await e.prisma.experiment.findFirst({where:d,select:{uuid:!0}});case"experiment_design":return!!await e.prisma.experimentDesign.findFirst({where:d,select:{uuid:!0}});case"experiment_run":return!!await e.prisma.experimentRun.findFirst({where:d,select:{uuid:!0}});case"document":return!!await e.prisma.document.findFirst({where:d,select:{uuid:!0}});default:return!1}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},80251:(a,b,c)=>{c.d(b,{eu:()=>g,q5:()=>h});var d=c(10837);c(21968);var e=c(14672),f=c(96307);function g({className:a,size:b="default",...c}){return(0,d.jsx)(e.Root,{"data-slot":"avatar","data-size":b,className:(0,f.cn)("group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6",a),...c})}function h({className:a,...b}){return(0,d.jsx)(e.Fallback,{"data-slot":"avatar-fallback",className:(0,f.cn)("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",a),...b})}},82831:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{z7:()=>k});var e=c(10837),f=c(21968),g=c.n(f),h=c(41709),i=c(83457),j=a([i]);i=(j.then?(await j)():j)[0];let m=/@\[([^\]]+)\]\((user|agent):([a-f0-9-]+)\)/g;function k({children:a,mentions:b}){if(!a||"string"!=typeof a)return null;let c=b&&b.length?function(a,b){let c;if(!b.length)return a;let d=a,e=RegExp(m.source,"g"),f=[];for(;null!==(c=e.exec(d));)f.push({start:c.index,end:c.index+c[0].length});for(let a of b){if("user"!==a.type&&"agent"!==a.type)continue;let b=new Set;for(let c of(b.add(a.name),b.add(a.name.replace(/\s+/g,"_")),b.add(a.name.replace(/\s+/g,"")),b.add(a.name.split(/\s+/)[0]??a.name),b)){if(!c)continue;let b=c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),e=RegExp(`(^|[\\s(\\[{])@(${b})(?=[\\s.,:;!?)\\]}]|$)`,"gi");d=d.replace(e,(b,c,d,e)=>{let g=e+c.length;return!function(a){return f.some(b=>a>=b.start&&a<b.end)}(g)?`${c}@[${a.name}](${a.type}:${a.uuid})`:b})}}return d}(a,b):a;if(!new RegExp(m.source).test(c))return(0,e.jsx)("div",{className:"overflow-hidden [&_pre]:overflow-x-auto",children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:c})});let{processed:d,mentions:f}=function(a){let b=[],c=RegExp(m.source,"g");return{processed:a.replace(c,(a,c,d,e)=>{let f=b.length;return b.push({displayName:c,type:d,uuid:e}),`\u200B\u200BMENTION_${f}\u200B\u200B`}),mentions:b}}(c);return(0,e.jsx)(l,{mentions:f,children:(0,e.jsx)(h.jH,{plugins:{code:i.a},children:d})})}function l({children:a,mentions:b}){let c=g().useRef(null);return(0,e.jsx)("div",{ref:c,className:"overflow-hidden [&_pre]:overflow-x-auto",children:a})}d()}catch(a){d(a)}})},84819:(a,b,c)=>{c.d(b,{Separator:()=>g});var d=c(10837);c(21968);var e=c(72229),f=c(96307);function g({className:a,orientation:b="horizontal",decorative:c=!0,...g}){return(0,d.jsx)(e.b,{"data-slot":"separator",decorative:c,orientation:b,className:(0,f.cn)("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",a),...g})}},88437:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{E1:()=>k,nG:()=>j,s3:()=>i});var e=c(52618),f=c(911),g=c(76872),h=a([e,g]);async function i({companyUuid:a,researchProjectUuid:b,skip:c,take:d,targetType:f,targetUuid:g}){let h={researchProjectUuid:b,companyUuid:a,...f&&{targetType:f},...g&&{targetUuid:g}},[i,j]=await Promise.all([e.prisma.activity.findMany({where:h,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,targetType:!0,targetUuid:!0,actorType:!0,actorUuid:!0,action:!0,value:!0,sessionUuid:!0,sessionName:!0,createdAt:!0}}),e.prisma.activity.count({where:h})]);return{activities:i,total:j}}async function j(a){let{activities:b,total:c}=await i(a),d=await (0,g.Uo)(b.map(a=>({type:a.actorType,uuid:a.actorUuid})));return{activities:b.map(a=>({uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,action:a.action,actorType:a.actorType,actorName:d.get(a.actorUuid)||"Unknown",value:a.value,sessionUuid:a.sessionUuid,sessionName:a.sessionName,createdAt:a.createdAt.toISOString()})),total:c}}async function k({companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j,sessionUuid:k,sessionName:l}){let m=await e.prisma.activity.create({data:{companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j||void 0,sessionUuid:k||void 0,sessionName:l||void 0}});return f.B.emit("activity",{companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:g,actorUuid:h,action:i,value:j,sessionUuid:k,sessionName:l,uuid:m.uuid}),m}[e,g]=h.then?(await h)():h,d()}catch(a){d(a)}})},90097:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{EN:()=>A,G_:()=>q,M9:()=>z,Qh:()=>t,Qr:()=>s,Xw:()=>u,Z4:()=>E,ci:()=>w,gT:()=>B,nW:()=>D,o4:()=>r,sp:()=>y,wZ:()=>C,x7:()=>v,xv:()=>x});var e=c(55511),f=c(71255),g=c(69996),h=c(92633),i=c(62729),j=c(53870),k=c(23180),l=a([f,h,j,k]);function m(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}function n(a){return{...a,uuid:a.uuid||(0,e.randomUUID)()}}async function o(a){let b="user"===a.createdByType?"user":"agent",[c,d]=await Promise.all([(0,h.LS)(a.createdByUuid,b),(0,h.SJ)(a.reviewedByUuid,a.reviewNote,a.reviewedAt)]),e={uuid:a.uuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,documentDrafts:a.documentDrafts,taskDrafts:a.taskDrafts,status:a.status,createdBy:c,createdByType:a.createdByType,review:d,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()};return a.researchProject&&(e.project=a.researchProject),e}async function p(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a}});if(!c)throw Error("ExperimentDesign not found");let d=[],e=c.documentDrafts||[],g=c.taskDrafts||[],h=c.inputUuids||[];for(let a of(0===e.length&&d.push({id:"E1",level:"error",message:"Proposal must contain at least one document draft"}),e))(!a.content||a.content.length<100)&&d.push({id:"E2",level:"error",message:`Document draft "${a.title}" must have content with at least 100 characters`,field:a.title});if(0===g.length&&d.push({id:"E3",level:"error",message:"Proposal must contain at least one task draft"}),0===h.length&&d.push({id:"E4",level:"error",message:"Proposal must have at least one input (idea or other source)"}),"research_question"===c.inputType&&h.length>0)for(let b of(await f.z.researchQuestion.findMany({where:{uuid:{in:h},companyUuid:a},select:{uuid:!0,title:!0,elaborationStatus:!0}})))"resolved"!==b.elaborationStatus&&d.push({id:"E5",level:"error",message:`Input idea "${b.title}" has unresolved elaboration (status: ${b.elaborationStatus})`,field:b.title});for(let a of(e.some(a=>"tech_design"===a.type)||d.push({id:"W1",level:"warning",message:"Proposal should contain at least one tech design document draft"}),g))a.description&&0!==a.description.trim().length||d.push({id:"W2",level:"warning",message:`Task draft "${a.title}" is missing a description`,field:a.title});for(let a of g)a.acceptanceCriteriaItems&&0!==a.acceptanceCriteriaItems.length||d.push({id:"E-AC",level:"error",message:`Task draft "${a.title}" is missing acceptance criteria (structured items required)`,field:a.title});for(let a of(g.length>=2&&(g.some(a=>a.dependsOnDraftUuids&&a.dependsOnDraftUuids.length>0)||d.push({id:"W4",level:"warning",message:"When there are multiple tasks, at least one should declare dependencies"})),c.description&&0!==c.description.trim().length||d.push({id:"W5",level:"warning",message:"Proposal description should not be empty"}),g))a.priority||d.push({id:"I1",level:"info",message:`Task draft "${a.title}" does not have a priority set`,field:a.title});for(let a of g)null==a.computeBudgetHours&&d.push({id:"I2",level:"info",message:`Task draft "${a.title}" does not have story points set`,field:a.title});return{valid:!d.some(a=>"error"===a.level),issues:d}}async function q(a,b,c,d){let e=await f.z.researchQuestion.findMany({where:{uuid:{in:b},companyUuid:a},select:{uuid:!0,assigneeType:!0,assigneeUuid:!0}}),g=[];for(let a of e)(a.assigneeType!==d||a.assigneeUuid!==c)&&g.push(a.uuid);return{valid:0===g.length,unassignedResearchQuestions:g}}async function r(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}}}});return c?o(c):null}async function s(a,b){return f.z.experimentDesign.findFirst({where:{uuid:b,companyUuid:a}})}async function t(a){let b=a.documentDrafts?.map(m),c=a.taskDrafts?.map(n),d=await f.z.experimentDesign.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,title:a.title,description:a.description,inputType:a.inputType,inputUuids:a.inputUuids,...b&&{documentDrafts:b},...c&&{taskDrafts:c},status:"draft",createdByUuid:a.createdByUuid,createdByType:a.createdByType||"agent"},select:{uuid:!0,title:!0,description:!0,inputType:!0,inputUuids:!0,documentDrafts:!0,taskDrafts:!0,status:!0,createdByUuid:!0,createdByType:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,createdAt:!0,updatedAt:!0}});return i.B.emitChange({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"created"}),o(d)}async function u(a,b,c,d){let e=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!e)throw Error("ExperimentDesign not found");let{updatedProposal:g,materializedTasks:h,materializedDocuments:l}=await f.z.$transaction(async b=>{let f=await b.experimentDesign.update({where:{uuid:a},data:{status:"approved",reviewedByUuid:c,reviewNote:d||null,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}}),g=e.documentDrafts,h=e.taskDrafts,i=[],l=[];if(g&&g.length>0)for(let a of g){let b=await (0,j.hG)(e.companyUuid,e.researchProjectUuid,e.uuid,e.createdByUuid,a);l.push({draftUuid:a.uuid,documentUuid:b.uuid,title:b.title})}if(h&&h.length>0){for(let a of h)if(a.acceptanceCriteriaItems&&a.acceptanceCriteriaItems.length>0)for(let b=0;b<a.acceptanceCriteriaItems.length;b++){let c=a.acceptanceCriteriaItems[b];if(!c.description||"string"!=typeof c.description||0===c.description.trim().length)throw Error(`Task draft "${a.title}": acceptanceCriteriaItems[${b}] has an empty or invalid description`)}let{draftToTaskUuidMap:a}=await (0,k.Kb)(e.companyUuid,e.researchProjectUuid,e.uuid,e.createdByUuid,h);for(let b of h){let c=a.get(b.uuid);c&&i.push({draftUuid:b.uuid,runUuid:c,title:b.title})}for(let c of h){if(c.dependsOnDraftUuids&&c.dependsOnDraftUuids.length>0){let d=a.get(c.uuid);if(!d)continue;for(let e of c.dependsOnDraftUuids){let c=a.get(e);c&&await b.runDependency.create({data:{runUuid:d,dependsOnRunUuid:c}})}}if(c.acceptanceCriteriaItems&&c.acceptanceCriteriaItems.length>0){let d=a.get(c.uuid);if(!d)continue;await b.acceptanceCriterion.createMany({data:c.acceptanceCriteriaItems.map((a,b)=>({runUuid:d,description:a.description.trim(),required:a.required??!0,sortOrder:b}))})}}}return{updatedProposal:f,materializedTasks:i,materializedDocuments:l}});if(i.B.emitChange({companyUuid:e.companyUuid,researchProjectUuid:e.researchProjectUuid,entityType:"experiment_design",entityUuid:a,action:"updated"}),"research_question"===e.inputType){let a=e.inputUuids||[];a.length>0&&await f.z.researchQuestion.updateMany({where:{uuid:{in:a},companyUuid:b,status:"proposal_created"},data:{status:"completed"}})}let m=await o(g);return h.length>0&&(m.materializedTasks=h),l.length>0&&(m.materializedDocuments=l),m}async function v(a,b,c){let d=await f.z.experimentDesign.update({where:{uuid:a},data:{status:"draft",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,researchProjectUuid:d.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"updated"}),o(d)}async function w(a,b,c){let d=await f.z.experimentDesign.update({where:{uuid:a},data:{status:"closed",reviewedByUuid:b,reviewNote:c,reviewedAt:new Date},include:{researchProject:{select:{uuid:!0,name:!0}}}});return i.B.emitChange({companyUuid:d.companyUuid,researchProjectUuid:d.researchProjectUuid,entityType:"experiment_design",entityUuid:d.uuid,action:"updated"}),o(d)}async function x(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("ExperimentDesign not found");await f.z.experimentDesign.delete({where:{uuid:a}}),i.B.emitChange({companyUuid:c.companyUuid,researchProjectUuid:c.researchProjectUuid,entityType:"experiment_design",entityUuid:c.uuid,action:"deleted"})}async function y(a,b){let c=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b}});if(!c)throw Error("ExperimentDesign not found");if("draft"!==c.status)throw Error("Only draft experiment designs can be submitted for review");let d=await p(b,a);if(!d.valid){let a=d.issues.map(a=>`[${a.level}] ${a.message}`);throw Error(`ExperimentDesign validation failed:
|
|
14
14
|
${a.join("\n")}`)}let e=await f.z.experimentDesign.update({where:{uuid:a},data:{status:"pending"},include:{researchProject:{select:{uuid:!0,name:!0}}}});if("research_question"===c.inputType){let a=c.inputUuids||[];a.length>0&&await f.z.researchQuestion.updateMany({where:{uuid:{in:a},companyUuid:b,status:"elaborating"},data:{status:"proposal_created"}})}return i.B.emitChange({companyUuid:e.companyUuid,researchProjectUuid:e.researchProjectUuid,entityType:"experiment_design",entityUuid:e.uuid,action:"updated"}),o(e)}async function z(a,b,c){let d=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("ExperimentDesign not found or not in draft status");let e=d.documentDrafts||[],g=m(c),h=[...e,g],i=await f.z.experimentDesign.update({where:{uuid:a},data:{documentDrafts:h},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(i)}async function A(a,b,c){let d=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("ExperimentDesign not found or not in draft status");let e=d.taskDrafts||[],g=n(c),h=[...e,g],i=await f.z.experimentDesign.update({where:{uuid:a},data:{taskDrafts:h},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(i)}async function B(a,b,c,d){let e=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("ExperimentDesign not found or not in draft status");let g=e.documentDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Document draft not found");g[h]={...g[h],...d};let i=await f.z.experimentDesign.update({where:{uuid:a},data:{documentDrafts:g},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(i)}async function C(a,b,c,d){let e=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!e)throw Error("ExperimentDesign not found or not in draft status");let g=e.taskDrafts||[],h=g.findIndex(a=>a.uuid===c);if(-1===h)throw Error("Run draft not found");g[h]={...g[h],...d};let i=await f.z.experimentDesign.update({where:{uuid:a},data:{taskDrafts:g},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(i)}async function D(a,b,c){let d=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("ExperimentDesign not found or not in draft status");let e=(d.documentDrafts||[]).filter(a=>a.uuid!==c),h=await f.z.experimentDesign.update({where:{uuid:a},data:{documentDrafts:e.length>0?e:g.D1.Fj},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(h)}async function E(a,b,c){let d=await f.z.experimentDesign.findFirst({where:{uuid:a,companyUuid:b,status:"draft"}});if(!d)throw Error("ExperimentDesign not found or not in draft status");let e=(d.taskDrafts||[]).filter(a=>a.uuid!==c).map(a=>({...a,dependsOnDraftUuids:a.dependsOnDraftUuids?.filter(a=>a!==c)})),h=await f.z.experimentDesign.update({where:{uuid:a},data:{taskDrafts:e.length>0?e:g.D1.Fj},include:{researchProject:{select:{uuid:!0,name:!0}}}});return o(h)}[f,h,j,k]=l.then?(await l)():l,d()}catch(a){d(a)}})},90136:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$V:()=>o,Ae:()=>v,Be:()=>A,Rd:()=>w,Zv:()=>n,_W:()=>s,e0:()=>x,ok:()=>r,pg:()=>u,ph:()=>z,q0:()=>t,vp:()=>q});var e=c(52618),f=c(76872),g=c(911),h=c(24009),i=c(48873),j=c(65582),k=c(90494),l=c(88437),m=a([e,f,k,l]);[e,f,k,l]=m.then?(await m)():m;let B=j.vF.child({module:"research_question"}),C={open:["elaborating","closed"],elaborating:["proposal_created","closed"],proposal_created:["completed","elaborating","closed"],completed:["closed"],closed:[]};function n(a){switch(a){case"assigned":case"in_progress":return"elaborating";case"pending_review":case"experiment_created":return"proposal_created";default:return a}}function o(a,b){let c=n(a),d=n(b);return(C[c]||[]).includes(d)}async function p(a){let[b,c]=await Promise.all([(0,f.ir)(a.assigneeType,a.assigneeUuid,a.assignedAt,a.assignedByUuid),(0,f.LS)(a.createdByUuid)]);return{uuid:a.uuid,title:a.title,content:a.content,attachments:a.attachments,parentQuestionUuid:a.parentQuestionUuid,childQuestionUuids:a.childQuestions?.map(a=>a.uuid)??[],experimentCount:a._count?.experiments??0,sourceType:a.sourceType,sourceLabel:a.sourceLabel,generatedByAgentUuid:a.generatedByAgentUuid,reviewStatus:a.reviewStatus,reviewedByUuid:a.reviewedByUuid,reviewNote:a.reviewNote,reviewedAt:a.reviewedAt?.toISOString()??null,status:n(a.status),assignee:b,...a.researchProject&&{project:a.researchProject},...null!=a.elaborationStatus&&{elaborationStatus:a.elaborationStatus},...null!=a.elaborationDepth&&{elaborationDepth:a.elaborationDepth},createdBy:c,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}}async function q({companyUuid:a,researchProjectUuid:b,skip:c,take:d,status:f,assignedToMe:g,actorUuid:h,actorType:i}){let j={researchProjectUuid:b,companyUuid:a,...f&&{status:f}};g&&h&&i&&(j.assigneeUuid=h,j.assigneeType=i);let[k,l]=await Promise.all([e.prisma.researchQuestion.findMany({where:j,skip:c,take:d,orderBy:{createdAt:"desc"},select:{uuid:!0,title:!0,content:!0,attachments:!0,parentQuestionUuid:!0,childQuestions:{select:{uuid:!0},orderBy:{createdAt:"asc"}},_count:{select:{experiments:!0}},sourceType:!0,sourceLabel:!0,generatedByAgentUuid:!0,reviewStatus:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,status:!0,elaborationStatus:!0,elaborationDepth:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}}),e.prisma.researchQuestion.count({where:j})]);return{researchQuestions:await Promise.all(k.map(p)),total:l}}async function r(a,b){let c=await e.prisma.researchQuestion.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}},childQuestions:{select:{uuid:!0},orderBy:{createdAt:"asc"}},_count:{select:{experiments:!0}}}});return c?p(c):null}async function s(a,b){return e.prisma.researchQuestion.findFirst({where:{uuid:b,companyUuid:a},include:{parentQuestion:{select:{uuid:!0,researchProjectUuid:!0}},childQuestions:{select:{uuid:!0},orderBy:{createdAt:"asc"}},_count:{select:{experiments:!0}}}})}async function t(a){if(a.parentQuestionUuid&&!await e.prisma.researchQuestion.findFirst({where:{uuid:a.parentQuestionUuid,companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid},select:{uuid:!0}}))throw Error("Parent research question not found");let b=await e.prisma.researchQuestion.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,title:a.title,content:a.content,attachments:a.attachments||void 0,parentQuestionUuid:a.parentQuestionUuid??null,sourceType:a.sourceType??"human",sourceLabel:a.sourceLabel??null,generatedByAgentUuid:a.generatedByAgentUuid??null,reviewStatus:"agent"===a.sourceType?"pending":"accepted",status:"open",createdByUuid:a.createdByUuid},select:{uuid:!0,title:!0,content:!0,attachments:!0,parentQuestionUuid:!0,childQuestions:{select:{uuid:!0},orderBy:{createdAt:"asc"}},_count:{select:{experiments:!0}},sourceType:!0,sourceLabel:!0,generatedByAgentUuid:!0,reviewStatus:!0,reviewedByUuid:!0,reviewNote:!0,reviewedAt:!0,status:!0,elaborationStatus:!0,elaborationDepth:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return g.B.emitChange({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityType:"research_question",entityUuid:b.uuid,action:"created"}),p(b)}async function u(a,b,c,d){let f=void 0!==c.parentQuestionUuid?await e.prisma.researchQuestion.findFirst({where:{uuid:a,companyUuid:b},select:{uuid:!0,researchProjectUuid:!0}}):null;if(void 0!==c.parentQuestionUuid&&f){if(c.parentQuestionUuid===a)throw Error("A research question cannot be its own parent");if(c.parentQuestionUuid){let d=await e.prisma.researchQuestion.findFirst({where:{uuid:c.parentQuestionUuid,companyUuid:b,researchProjectUuid:f.researchProjectUuid},select:{uuid:!0,parentQuestionUuid:!0}});if(!d)throw Error("Parent research question not found");let g=d.uuid;for(;g;){if(g===a)throw Error("Cannot move a research question under one of its descendants");let b=await e.prisma.researchQuestion.findUnique({where:{uuid:g},select:{parentQuestionUuid:!0}});g=b?.parentQuestionUuid}}}let h=null;if(void 0!==c.content&&d){let b=await e.prisma.researchQuestion.findUnique({where:{uuid:a},select:{content:!0}});h=b?.content??null}let i=await e.prisma.researchQuestion.update({where:{uuid:a},data:c,include:{researchProject:{select:{uuid:!0,name:!0}},childQuestions:{select:{uuid:!0},orderBy:{createdAt:"asc"}},_count:{select:{experiments:!0}}}});return g.B.emitChange({companyUuid:i.companyUuid,researchProjectUuid:i.researchProject.uuid,entityType:"research_question",entityUuid:i.uuid,action:"updated"}),void 0!==c.content&&d&&c.content&&y(i.companyUuid,i.researchProject.uuid,i.uuid,i.title,h,c.content,d.actorType,d.actorUuid).catch(a=>B.error({err:a},"failed to process mentions")),p(i)}async function v({researchQuestionUuid:a,companyUuid:b,assigneeType:c,assigneeUuid:d,assignedByUuid:f}){let h=await e.prisma.researchQuestion.findFirst({where:{uuid:a,companyUuid:b}});if(!h||h.assigneeUuid)throw new i.Yy("Idea");if("completed"===h.status||"closed"===h.status)throw Error("Cannot claim a completed or closed ResearchQuestion");if("rejected"===h.reviewStatus)throw Error("Cannot claim a rejected ResearchQuestion");let j=await e.prisma.researchQuestion.update({where:{uuid:a},data:{status:"elaborating",assigneeType:c,assigneeUuid:d,assignedAt:new Date,assignedByUuid:f},include:{researchProject:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:j.companyUuid,researchProjectUuid:j.researchProject.uuid,entityType:"research_question",entityUuid:j.uuid,action:"updated"}),p(j)}async function w(a){let b=await e.prisma.researchQuestion.findUnique({where:{uuid:a}});if(!b)throw Error("ResearchQuestion not found");if("completed"===b.status||"closed"===b.status)throw Error("Cannot release a completed or closed ResearchQuestion");let c=await e.prisma.researchQuestion.update({where:{uuid:a},data:{status:"open",assigneeType:null,assigneeUuid:null,assignedAt:null,assignedByUuid:null,elaborationDepth:null,elaborationStatus:null},include:{researchProject:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:c.companyUuid,researchProjectUuid:c.researchProject.uuid,entityType:"research_question",entityUuid:c.uuid,action:"updated"}),p(c)}async function x(a,b,c,d,f){let h=await e.prisma.researchQuestion.update({where:{uuid:b},data:{reviewStatus:c,reviewedByUuid:d,reviewNote:f??null,reviewedAt:new Date,status:"rejected"===c?"closed":"open",assigneeType:"rejected"===c?null:void 0,assigneeUuid:"rejected"===c?null:void 0,assignedAt:"rejected"===c?null:void 0,assignedByUuid:"rejected"===c?null:void 0},include:{researchProject:{select:{uuid:!0,name:!0}}}});return g.B.emitChange({companyUuid:a,researchProjectUuid:h.researchProject.uuid,entityType:"research_question",entityUuid:h.uuid,action:"updated"}),p(h)}async function y(a,b,c,d,e,f,g,h){let i=e?k.Xs(e):[],j=k.Xs(f),m=new Set(i.map(a=>`${a.type}:${a.uuid}`)),n=j.filter(a=>!m.has(`${a.type}:${a.uuid}`));if(0!==n.length)for(let e of(await k.AM({companyUuid:a,sourceType:"research_question",sourceUuid:c,content:f,actorType:g,actorUuid:h,researchProjectUuid:b,entityTitle:d}),n))(e.type!==g||e.uuid!==h)&&await l.E1({companyUuid:a,researchProjectUuid:b,targetType:"research_question",targetUuid:c,actorType:g,actorUuid:h,action:"mentioned",value:{mentionedType:e.type,mentionedUuid:e.uuid,mentionedName:e.displayName,sourceType:"research_question",sourceUuid:c}})}async function z(a){let b=await e.prisma.researchQuestion.findUnique({where:{uuid:a},select:{uuid:!0,companyUuid:!0,researchProjectUuid:!0}});if(!b)throw Error("ResearchQuestion not found");let c=await e.prisma.researchQuestion.findMany({where:{companyUuid:b.companyUuid,researchProjectUuid:b.researchProjectUuid},select:{uuid:!0,parentQuestionUuid:!0}}),d=new Map;for(let a of c){let b=d.get(a.parentQuestionUuid??null)??[];b.push(a.uuid),d.set(a.parentQuestionUuid??null,b)}let f=[],h=[{uuid:a,depth:0}];for(;h.length>0;){let a=h.shift();for(let b of(f.push(a),d.get(a.uuid)??[]))h.push({uuid:b,depth:a.depth+1})}let i=f.map(a=>a.uuid),j=(await e.prisma.experiment.findMany({where:{companyUuid:b.companyUuid,researchQuestionUuid:{in:i}},select:{uuid:!0}})).map(a=>a.uuid);for(let a of(await e.prisma.$transaction(async a=>{j.length>0&&(await a.experimentGpuReservation.deleteMany({where:{companyUuid:b.companyUuid,experimentUuid:{in:j}}}),await a.experiment.deleteMany({where:{companyUuid:b.companyUuid,uuid:{in:j}}}));let c=new Map;for(let a of f){let b=c.get(a.depth)??[];b.push(a.uuid),c.set(a.depth,b)}for(let b of[...c.keys()].sort((a,b)=>b-a))await a.researchQuestion.deleteMany({where:{uuid:{in:c.get(b)??[]}}})}),j))g.B.emitChange({companyUuid:b.companyUuid,researchProjectUuid:b.researchProjectUuid,entityType:"experiment",entityUuid:a,action:"deleted"});for(let a of f)g.B.emitChange({companyUuid:b.companyUuid,researchProjectUuid:b.researchProjectUuid,entityType:"research_question",entityUuid:a.uuid,action:"deleted"});return b}async function A(a,b,c,d,f="user"){let i=await e.prisma.researchQuestion.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}}}});if(!i)throw new h.hD("NOT_FOUND","ResearchQuestion not found",404);let j=await e.prisma.researchProject.findFirst({where:{uuid:c,companyUuid:a},select:{uuid:!0,name:!0}});if(!j)throw new h.hD("NOT_FOUND","Target project not found",404);if(i.researchProjectUuid===c)throw new h.hD("BAD_REQUEST","ResearchQuestion is already in the target project",400);let k=i.researchProjectUuid;await e.prisma.$transaction(async d=>{await d.researchQuestion.update({where:{uuid:b},data:{researchProjectUuid:c}}),await d.experimentDesign.updateMany({where:{companyUuid:a,inputType:"research_question",inputUuids:{array_contains:[b]},status:{in:["draft","pending"]}},data:{researchProjectUuid:c}})}),await l.E1({companyUuid:a,researchProjectUuid:c,targetType:"research_question",targetUuid:b,actorType:f,actorUuid:d,action:"moved",value:{fromProjectUuid:k,fromProjectName:i.researchProject.name,toProjectUuid:c,toProjectName:j.name}}),g.B.emitChange({companyUuid:a,researchProjectUuid:k,entityType:"research_question",entityUuid:b,action:"updated"}),g.B.emitChange({companyUuid:a,researchProjectUuid:c,entityType:"research_question",entityUuid:b,action:"updated"});let m=await e.prisma.researchQuestion.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}}}});return p(m)}d()}catch(a){d(a)}})},90494:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{AM:()=>j,Xs:()=>i,_L:()=>k});var e=c(52618),f=c(76872),g=c(37943),h=a([e,f,g]);[e,f,g]=h.then?(await h)():h;let m=/@\[([^\]]+)\]\((user|agent):([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\)/gi;function i(a){let b,c=[],d=new Set;for(m.lastIndex=0;null!==(b=m.exec(a))&&!(c.length>=10);){let a=b[1],e=b[2].toLowerCase(),f=b[3].toLowerCase(),g=`${e}:${f}`;d.has(g)||(d.add(g),c.push({type:e,uuid:f,displayName:a}))}return c}async function j(a){let{companyUuid:b,sourceType:c,sourceUuid:d,content:h,actorType:j,actorUuid:k,researchProjectUuid:n,entityTitle:o,explicitMentions:p}=a,q=p&&p.length>0?p.slice(0,10):i(h);if(0===q.length)return;let r=q.filter(a=>a.type!==j||a.uuid!==k);if(0===r.length)return;let s=[];for(let a of r)await l(b,a.type,a.uuid)&&s.push(a);if(0===s.length)return;await e.prisma.mention.createMany({data:s.map(a=>({companyUuid:b,sourceType:c,sourceUuid:d,mentionedType:a.type,mentionedUuid:a.uuid,actorType:j,actorUuid:k}))});let t=await (0,f.lR)(j,k)??"Someone",u=await e.prisma.researchProject.findUnique({where:{uuid:n},select:{name:!0}}),v=u?.name??"Unknown Project",w=function(a){let b=a.replace(m,"@$1");return b.length<=120?b:b.substring(0,117)+"..."}(h),x=c,y=d;if("comment"===c){let a=await e.prisma.comment.findUnique({where:{uuid:d},select:{targetType:!0,targetUuid:!0}});a&&(x=a.targetType,y=a.targetUuid)}let z=[];for(let a of s){if(!(await g.lX(b,a.type,a.uuid)).mentioned)continue;let c=`${t} mentioned you: "${w}"`;z.push({companyUuid:b,researchProjectUuid:n,recipientType:a.type,recipientUuid:a.uuid,entityType:x,entityUuid:y,entityTitle:o,projectName:v,action:"mentioned",message:c,actorType:j,actorUuid:k,actorName:t})}z.length>0&&await g.Xm(z)}async function k(a){let b,{companyUuid:c,query:d,actorType:f,actorUuid:g,ownerUuid:h,limit:i=10}=a,j=Math.min(i,50),k=[];if("user"===f?b=g:"agent"===f&&h&&(b=h),!d){let a=Math.min(5,j),[d,g]=await Promise.all(["agent"===f?e.prisma.user.findMany({where:{companyUuid:c},select:{uuid:!0,name:!0,email:!0,avatarUrl:!0},orderBy:[{name:"asc"}],take:a}):Promise.resolve([]),b?e.prisma.agent.findMany({where:{companyUuid:c,ownerUuid:b},select:{uuid:!0,name:!0,roles:!0},orderBy:{createdAt:"desc"},take:a}):Promise.resolve([])]);for(let a of d)k.push({type:"user",uuid:a.uuid,name:a.name??a.email??"Unknown",email:a.email,avatarUrl:a.avatarUrl});for(let a of g)k.push({type:"agent",uuid:a.uuid,name:a.name,roles:a.roles});return k.slice(0,a)}if("agent"===f)for(let a of(await e.prisma.user.findMany({where:{companyUuid:c,OR:[{name:{contains:d,mode:"insensitive"}},{email:{contains:d,mode:"insensitive"}}]},select:{uuid:!0,name:!0,email:!0,avatarUrl:!0},take:j})))k.push({type:"user",uuid:a.uuid,name:a.name??a.email??"Unknown",email:a.email,avatarUrl:a.avatarUrl});let l={companyUuid:c,name:{contains:d,mode:"insensitive"}};for(let a of(b&&(l.ownerUuid=b),await e.prisma.agent.findMany({where:l,select:{uuid:!0,name:!0,roles:!0},take:j-k.length>0?j-k.length:j})))k.push({type:"agent",uuid:a.uuid,name:a.name,roles:a.roles});return k.slice(0,j)}async function l(a,b,c){return"user"===b?!!await e.prisma.user.findFirst({where:{uuid:c,companyUuid:a},select:{uuid:!0}}):!!await e.prisma.agent.findFirst({where:{uuid:c,companyUuid:a},select:{uuid:!0}})}d()}catch(a){d(a)}})}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=6499,exports.ids=[6499],exports.modules={12241:(a,b,c)=>{c.d(b,{I2:()=>h,jI:()=>g,k9:()=>i,sO:()=>e});let d={open:["assigned","closed"],assigned:["open","in_progress","closed"],in_progress:["to_verify","closed"],to_verify:["done","in_progress","closed"],done:["closed"],closed:[]};function e(a,b){return(d[a]||[]).includes(b)}let f={total:0,required:0,passed:0,failed:0,pending:0,requiredPassed:0,requiredFailed:0,requiredPending:0};function g(a){if(0===a.length)return{status:"not_started",summary:{...f}};let b={...f,total:a.length};for(let c of a)c.required&&b.required++,"passed"===c.status?(b.passed++,c.required&&b.requiredPassed++):"failed"===c.status?(b.failed++,c.required&&b.requiredFailed++):(b.pending++,c.required&&b.requiredPending++);return b.requiredFailed>0?{status:"failed",summary:b}:b.requiredPassed===b.required&&b.required>0?{status:"passed",summary:b}:b.passed>0||b.failed>0?{status:"in_progress",summary:b}:{status:"not_started",summary:b}}function h(a){return{uuid:a.uuid,description:a.description,required:a.required,devStatus:a.devStatus,devEvidence:a.devEvidence,devMarkedByType:a.devMarkedByType,devMarkedBy:a.devMarkedBy,devMarkedAt:a.devMarkedAt?.toISOString()??null,status:a.status,evidence:a.evidence,markedByType:a.markedByType,markedBy:a.markedBy,markedAt:a.markedAt?.toISOString()??null,sortOrder:a.sortOrder}}let i={dependsOn:{select:{dependsOnRun:{select:{uuid:!0,title:!0,status:!0}}}},dependedBy:{select:{run:{select:{uuid:!0,title:!0,status:!0}}}},acceptanceCriteriaItems:{orderBy:{sortOrder:"asc"}}}},19778:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Gz:()=>q,Kb:()=>r,lb:()=>l,m1:()=>p,pk:()=>o,ry:()=>n,yi:()=>m});var e=c(18818),f=c(52618),g=c(48873),h=c(31378),i=c(73310),j=c(55454),k=a([f,h,i,j]);async function l(a){let b=await f.prisma.experimentRun.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,title:a.title,description:a.description,status:"open",priority:a.priority||"medium",computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:null,experimentDesignUuid:a.experimentDesignUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return(0,i.Y4)({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityUuid:b.uuid,action:"created"}),(0,h.Hz)(b)}async function m(a,b,c){let d=null;if(void 0!==b.description&&c){let b=await f.prisma.experimentRun.findUnique({where:{uuid:a},select:{description:!0}});d=b?.description??null}let g={...b};void 0!==b.experimentResults&&(g.experimentResults=null===b.experimentResults?e.D1.Fj:b.experimentResults);let j=null,k=await f.prisma.$transaction(async c=>{if(b.status){let d=await c.experimentRun.findUnique({where:{uuid:a},select:{status:!0}});j=d?.status??null,"done"!==b.status&&d?.status==="to_verify"&&await c.acceptanceCriterion.updateMany({where:{runUuid:a},data:{status:"pending",evidence:null,markedByType:null,markedBy:null,markedAt:null,devStatus:"pending",devEvidence:null,devMarkedByType:null,devMarkedBy:null,devMarkedAt:null}})}return c.experimentRun.update({where:{uuid:a},data:g,include:{researchProject:{select:{uuid:!0,name:!0}}}})});return(0,i.Y4)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,entityUuid:k.uuid,action:"updated"}),await (0,i.sO)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,runUuid:k.uuid,previousStatus:j,nextStatus:b.status,fallbackActorUuid:k.createdByUuid,actorContext:c}),(0,i.NC)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,runUuid:k.uuid,title:k.title,oldDescription:d,newDescription:b.description,actorContext:c}),(0,h.Hz)(k)}async function n(a,b,c,d){let e=await m(b,{status:"to_verify",outcome:c.outcome??null,experimentResults:c.experimentResults??null},d);return await (0,j.PQ)(a,b),e}async function o({runUuid:a,companyUuid:b,assigneeType:c,assigneeUuid:d,assignedByUuid:e}){try{let g=await f.prisma.experimentRun.update({where:{uuid:a,status:"open"},data:{status:"assigned",assigneeType:c,assigneeUuid:d,assignedAt:new Date,assignedByUuid:e},include:{researchProject:{select:{uuid:!0,name:!0}}}});return(0,i.Y4)({companyUuid:b,researchProjectUuid:g.researchProject.uuid,entityUuid:g.uuid,action:"updated"}),(0,h.Hz)(g)}catch(a){if((0,g.Ik)(a))throw new g.Yy("ExperimentRun");throw a}}async function p(a){try{let b=await f.prisma.experimentRun.update({where:{uuid:a,status:"assigned"},data:{status:"open",assigneeType:null,assigneeUuid:null,assignedAt:null,assignedByUuid:null},include:{researchProject:{select:{uuid:!0,name:!0}}}});return(0,i.Y4)({companyUuid:b.companyUuid,researchProjectUuid:b.researchProject.uuid,entityUuid:b.uuid,action:"updated"}),(0,h.Hz)(b)}catch(a){if((0,g.Ik)(a))throw new g.nm("ExperimentRun");throw a}}async function q(a){let b=await f.prisma.experimentRun.delete({where:{uuid:a}});return(0,i.Y4)({companyUuid:b.companyUuid,researchProjectUuid:b.researchProjectUuid,entityUuid:b.uuid,action:"deleted"}),b}async function r(a,b,c,d,e){let g=new Map,i=e.map(e=>f.prisma.experimentRun.create({data:{companyUuid:a,researchProjectUuid:b,title:e.title,description:e.description||null,status:"open",priority:e.priority||"medium",computeBudgetHours:e.computeBudgetHours||null,acceptanceCriteria:e.acceptanceCriteria||null,outcome:null,experimentDesignUuid:c,createdByUuid:d},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}})),j=await Promise.all(i);for(let a=0;a<e.length;a++)e[a].uuid&&g.set(e[a].uuid,j[a].uuid);return{tasks:await Promise.all(j.map(h.Hz)),draftToTaskUuidMap:g}}[f,h,i,j]=k.then?(await k)():k,d()}catch(a){d(a)}})},31378:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bs:()=>o,Hz:()=>j,IM:()=>p,fo:()=>n,mu:()=>l,vv:()=>m,yc:()=>q});var e=c(52618),f=c(76872),g=c(54349),h=c(12241),i=a([e,f,g]);async function j(a,b=0){let[c,d]=await Promise.all([(0,f.ir)(a.assigneeType,a.assigneeUuid,a.assignedAt,a.assignedByUuid),(0,f.LS)(a.createdByUuid)]),e=(a.dependsOn||[]).map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),g=(a.dependedBy||[]).map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status})),i=(a.acceptanceCriteriaItems||[]).map(h.I2),{status:k,summary:l}=(0,h.jI)(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:a.outcome??null,experimentResults:a.experimentResults??null,acceptanceCriteriaItems:i,acceptanceStatus:k,acceptanceSummary:l,assignee:c,experimentDesignUuid:a.experimentDesignUuid,...a.researchProject&&{project:a.researchProject},createdBy:d,dependsOn:e,dependedBy:g,commentCount:b,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}}async function k(a,b){if(0===a.length)return[];let c=[],d=[];for(let b of a)b.assigneeType&&b.assigneeUuid&&c.push({type:b.assigneeType,uuid:b.assigneeUuid}),b.assignedByUuid&&c.push({type:"user",uuid:b.assignedByUuid}),d.push(b.createdByUuid);let[e,g]=await Promise.all([(0,f.Uo)(c),(0,f.Xx)(d)]);return a.map(a=>{let c=null;if(a.assigneeType&&a.assigneeUuid){let b=e.get(a.assigneeUuid);if(b){let d=null;if(a.assignedByUuid){let b=e.get(a.assignedByUuid);b&&(d={type:"user",uuid:a.assignedByUuid,name:b})}c={type:a.assigneeType,uuid:a.assigneeUuid,name:b,assignedAt:a.assignedAt?.toISOString()??null,assignedBy:d}}}let d=g.get(a.createdByUuid)??null,f=(a.dependsOn||[]).map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),i=(a.dependedBy||[]).map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status})),j=(a.acceptanceCriteriaItems||[]).map(h.I2),{status:k,summary:l}=(0,h.jI)(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:a.outcome??null,experimentResults:a.experimentResults??null,acceptanceCriteriaItems:j,acceptanceStatus:k,acceptanceSummary:l,assignee:c,experimentDesignUuid:a.experimentDesignUuid,...a.researchProject&&{project:a.researchProject},createdBy:d,dependsOn:f,dependedBy:i,commentCount:b[a.uuid]??0,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})}async function l({companyUuid:a,researchProjectUuid:b,skip:c,take:d,status:f,priority:i,experimentDesignUuids:j}){let l={researchProjectUuid:b,companyUuid:a,...f&&{status:f},...i&&{priority:i},...j&&j.length>0&&{experimentDesignUuid:{in:j}}},[m,n]=await Promise.all([e.prisma.experimentRun.findMany({where:l,skip:c,take:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...h.k9}}),e.prisma.experimentRun.count({where:l})]),o=await (0,g.uA)(a,"experiment_run",m.map(a=>a.uuid));return{tasks:await k(m,o),total:n}}async function m(a,b){let c=await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}},...h.k9}});if(!c)return null;let d=await e.prisma.comment.count({where:{companyUuid:a,targetType:"experiment_run",targetUuid:b}});return j(c,d)}async function n(a,b){return e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}})}async function o(a,b){let c=await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a},include:h.k9});if(!c)throw Error("ExperimentRun not found");return{dependsOn:c.dependsOn.map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),dependedBy:c.dependedBy.map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status}))}}async function p(a){let b=await e.prisma.runDependency.findMany({where:{runUuid:a},select:{dependsOnRun:{select:{uuid:!0,title:!0,status:!0,assigneeType:!0,assigneeUuid:!0}}}});if(0===b.length)return{resolved:!0,blockers:[]};let c=b.filter(a=>"done"!==a.dependsOnRun.status&&"closed"!==a.dependsOnRun.status);if(0===c.length)return{resolved:!0,blockers:[]};let d=c.map(a=>a.dependsOnRun.uuid),[g,h]=await Promise.all([e.prisma.sessionRunCheckin.findMany({where:{runUuid:{in:d},checkoutAt:null},select:{runUuid:!0,sessionUuid:!0,session:{select:{name:!0}}}}),(0,f.Uo)(c.filter(a=>a.dependsOnRun.assigneeType&&a.dependsOnRun.assigneeUuid).map(a=>({type:a.dependsOnRun.assigneeType,uuid:a.dependsOnRun.assigneeUuid})))]),i=new Map;for(let a of g)i.set(a.runUuid,{sessionUuid:a.sessionUuid,sessionName:a.session.name});let j=c.map(a=>{let b=a.dependsOnRun,c=null;if(b.assigneeType&&b.assigneeUuid){let a=h.get(b.assigneeUuid);a&&(c={type:b.assigneeType,uuid:b.assigneeUuid,name:a})}return{uuid:b.uuid,title:b.title,status:b.status,assignee:c,sessionCheckin:i.get(b.uuid)??null}});return{resolved:!1,blockers:j}}async function q(a,b){let[c,d]=await Promise.all([e.prisma.experimentRun.findMany({where:{companyUuid:a,researchProjectUuid:b},select:{uuid:!0,title:!0,status:!0,priority:!0,experimentDesignUuid:!0,acceptanceCriteriaItems:{select:{metricName:!0,threshold:!0,operator:!0,actualValue:!0,required:!0,isEarlyStop:!0}}}}),e.prisma.runDependency.findMany({where:{run:{companyUuid:a,researchProjectUuid:b}},select:{runUuid:!0,dependsOnRunUuid:!0}})]);return{nodes:c.map(a=>({uuid:a.uuid,title:a.title,status:a.status,priority:a.priority,experimentDesignUuid:a.experimentDesignUuid??null,goNoGoCriteria:(a.acceptanceCriteriaItems??[]).map(a=>({metricName:a.metricName,threshold:a.threshold,operator:a.operator,actualValue:a.actualValue,required:a.required,isEarlyStop:a.isEarlyStop}))})),edges:d.map(a=>({from:a.runUuid,to:a.dependsOnRunUuid}))}}[e,f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},46499:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$O:()=>h.$,Bs:()=>e.Bs,Gz:()=>f.Gz,IM:()=>e.IM,Kb:()=>f.Kb,_M:()=>h._,fo:()=>e.fo,lb:()=>f.lb,m1:()=>f.m1,mu:()=>e.mu,pk:()=>f.pk,ry:()=>f.ry,sO:()=>i.sO,vv:()=>e.vv,yc:()=>e.yc,yi:()=>f.yi});var e=c(31378),f=c(19778),g=c(69595),h=c(71759),i=c(12241),j=a([e,f,g,h]);[e,f,g,h]=j.then?(await j)():j,d()}catch(a){d(a)}})},54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>o,eT:()=>n,fg:()=>m,uA:()=>u});var e=c(52618),f=c(76872),g=c(65582),h=c(90494),i=c(88437),j=c(37943),k=c(911),l=a([e,f,h,i,j]);[e,f,h,i,j]=l.then?(await l)():l;let v=g.vF.child({module:"comment"});async function m({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.prisma.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.prisma.comment.count({where:h})]),k=i.map(a=>a.uuid),l=k.length?await e.prisma.mention.findMany({where:{companyUuid:a,sourceType:"comment",sourceUuid:{in:k}},select:{sourceUuid:!0,mentionedType:!0,mentionedUuid:!0}}):[],m=new Map;for(let a of l){let b=m.get(a.sourceUuid)??[],c=await (0,f.lR)(a.mentionedType,a.mentionedUuid)??a.mentionedType;b.some(b=>b.type===a.mentionedType&&b.uuid===a.mentionedUuid)||b.push({type:a.mentionedType,uuid:a.mentionedUuid,name:c}),m.set(a.sourceUuid,b)}return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString(),mentions:m.get(a.uuid)??[]}})),total:j}}async function n({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h,mentions:j}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let l=await e.prisma.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),m=await (0,f.lR)(l.authorType,l.authorUuid),n=null;try{n=await o(b,c)}catch(a){v.error({err:a},"failed to resolve projectUuid for comment")}if(n){k.B.emitChange({companyUuid:a,researchProjectUuid:n,entityType:b,entityUuid:c,action:"updated",actorUuid:h});try{await i.E1({companyUuid:a,researchProjectUuid:n,targetType:b,targetUuid:c,actorType:g,actorUuid:h,action:"comment_added"})}catch(a){v.error({err:a},"failed to create comment_added activity")}try{await t({companyUuid:a,researchProjectUuid:n,targetType:b,targetUuid:c,commentContent:d,authorType:g,authorUuid:h,authorName:m??"Someone"})}catch(a){v.error({err:a},"failed to dispatch comment_added notifications")}}try{await q(a,b,c,l.uuid,d,g,h,j)}catch(a){v.error({err:a},"failed to process mentions")}let p=[];try{for(let b of(await e.prisma.mention.findMany({where:{companyUuid:a,sourceType:"comment",sourceUuid:l.uuid},select:{mentionedType:!0,mentionedUuid:!0}}))){if(p.some(a=>a.type===b.mentionedType&&a.uuid===b.mentionedUuid))continue;let a=await (0,f.lR)(b.mentionedType,b.mentionedUuid)??b.mentionedType;p.push({type:b.mentionedType,uuid:b.mentionedUuid,name:a})}}catch(a){v.error({err:a},"failed to reload mention summaries for comment response")}return{uuid:l.uuid,targetType:l.targetType,targetUuid:l.targetUuid,content:l.content,author:{type:l.authorType,uuid:l.authorUuid,name:m??"Unknown"},createdAt:l.createdAt.toISOString(),updatedAt:l.updatedAt.toISOString(),mentions:p}}async function o(a,b){switch(a){case"experiment":{let a=await e.prisma.experiment.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"experiment_run":{let a=await e.prisma.experimentRun.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"research_question":{let a=await e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"experiment_design":{let a=await e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"document":{let a=await e.prisma.document.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}default:return null}}async function p(a,b){switch(a){case"experiment":{let a=await e.prisma.experiment.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment"}case"experiment_run":{let a=await e.prisma.experimentRun.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment Run"}case"research_question":{let a=await e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Research Question"}case"experiment_design":{let a=await e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment Design"}case"document":{let a=await e.prisma.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function q(a,b,c,d,e,f,g,j){let k=h.Xs(e),l=function(a,b){let c=new Set,d=[];for(let b of a){let a=`${b.type}:${b.uuid}`;c.has(a)||(c.add(a),d.push(b))}if(b)for(let a of b){if("user"!==a.type&&"agent"!==a.type||!a.uuid)continue;let b=`${a.type}:${a.uuid}`;c.has(b)||(c.add(b),d.push({type:a.type,uuid:a.uuid,displayName:a.displayName??a.type}))}return d}(k,j);if(0===l.length)return;let m=await o(b,c);if(!m)return;let n=await p(b,c);for(let j of(await h.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:g,researchProjectUuid:m,entityTitle:n,explicitMentions:l}),l))(j.type!==f||j.uuid!==g)&&await i.E1({companyUuid:a,researchProjectUuid:m,targetType:b,targetUuid:c,actorType:f,actorUuid:g,action:"mentioned",value:{mentionedType:j.type,mentionedUuid:j.uuid,mentionedName:j.displayName,sourceType:"comment",sourceUuid:d}})}async function r(a,b){switch(a){case"experiment":return e.prisma.experiment.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0,createdByType:!0}});case"experiment_run":return e.prisma.experimentRun.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0}});case"research_question":return e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0}});case"experiment_design":return e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{title:!0,createdByUuid:!0,createdByType:!0}});case"document":return e.prisma.document.findUnique({where:{uuid:b},select:{title:!0,createdByUuid:!0}});default:return null}}async function s(a){return await e.prisma.user.findUnique({where:{uuid:a},select:{uuid:!0}})?"user":await e.prisma.agent.findUnique({where:{uuid:a},select:{uuid:!0}})?"agent":null}async function t(a){let{companyUuid:b,researchProjectUuid:c,targetType:d,targetUuid:f,commentContent:g,authorType:h,authorUuid:i,authorName:k}=a,l=await r(d,f);if(!l)return;let m=l.title??function(a){switch(a){case"experiment":return"Unknown Experiment";case"experiment_run":return"Unknown Experiment Run";case"research_question":return"Unknown Research Question";case"experiment_design":return"Unknown Experiment Design";case"document":return"Unknown Document";default:return"Unknown"}}(d),n=[];if(l.assigneeType&&l.assigneeUuid&&n.push({type:l.assigneeType,uuid:l.assigneeUuid}),l.createdByUuid){let a=l.createdByType??await s(l.createdByUuid);a&&n.push({type:a,uuid:l.createdByUuid})}let o=new Set,p=n.filter(a=>{if(a.type===h&&a.uuid===i)return!1;let b=`${a.type}:${a.uuid}`;return!o.has(b)&&(o.add(b),!0)});if(0===p.length)return;let q=await j.r5(b,p.map(a=>({type:a.type,uuid:a.uuid}))),t=p.filter(a=>{let b=q.get(`${a.type}:${a.uuid}`);return!b||b.commentAdded});if(0===t.length)return;let u=await e.prisma.researchProject.findUnique({where:{uuid:c},select:{name:!0}}),v=u?.name??"Unknown Project",x=function(a){let b=a.replace(w,"@$1").trim();return b.length<=120?b:b.substring(0,117)+"..."}(g),y=x?`${k} commented on "${m}": ${x}`:`${k} commented on "${m}"`,z=t.map(a=>({companyUuid:b,researchProjectUuid:c,recipientType:a.type,recipientUuid:a.uuid,entityType:d,entityUuid:f,entityTitle:m,projectName:v,action:"comment_added",message:y,actorType:h,actorUuid:i,actorName:k}));await j.Xm(z)}let w=/@\[([^\]]+)\]\((?:user|agent):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\)/gi;async function u(a,b,c){if(0===c.length)return{};let d=await e.prisma.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}d()}catch(a){d(a)}})},69595:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(52618),e=c(31378),f=c(73310);c(12241);var g=a([d,e,f]);[d,e,f]=g.then?(await g)():g,b()}catch(a){b(a)}})},71759:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>i,_:()=>h});var e=c(52618),f=a([e]);async function g(a,b){let c=await e.prisma.runDependency.findMany({select:{runUuid:!0,dependsOnRunUuid:!0}}),d=new Map;for(let a of c)d.has(a.runUuid)||d.set(a.runUuid,[]),d.get(a.runUuid).push(a.dependsOnRunUuid);let f=new Set,g=[a];for(;g.length>0;){let a=g.pop();if(a===b)return!0;if(!f.has(a))for(let b of(f.add(a),d.get(a)||[]))f.has(b)||g.push(b)}return!1}async function h(a,b,c){if(b===c)throw Error("An experiment run cannot depend on itself");let[d,f]=await Promise.all([e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}}),e.prisma.experimentRun.findFirst({where:{uuid:c,companyUuid:a}})]);if(!d)throw Error("ExperimentRun not found");if(!f)throw Error("Dependency experiment run not found");if(d.researchProjectUuid!==f.researchProjectUuid)throw Error("Experiment runs must belong to the same project");if(await g(c,b))throw Error("Adding this dependency would create a cycle");let h=await e.prisma.runDependency.create({data:{runUuid:b,dependsOnRunUuid:c}});return{runUuid:h.runUuid,dependsOnRunUuid:h.dependsOnRunUuid,createdAt:h.createdAt}}async function i(a,b,c){if(!await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("ExperimentRun not found");await e.prisma.runDependency.deleteMany({where:{runUuid:b,dependsOnRunUuid:c}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},73310:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{NC:()=>n,Y4:()=>l,sO:()=>m});var e=c(911),f=c(65582),g=c(55454),h=c(96718),i=c(88437),j=c(90494),k=a([g,h,i,j]);[g,h,i,j]=k.then?(await k)():k;let p=f.vF.child({module:"experiment_run"});function l(a){e.B.emitChange({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityType:"experiment_run",entityUuid:a.entityUuid,action:a.action})}async function m(a){let b=new Set(["done","closed"]);null!==a.previousStatus&&void 0!==a.nextStatus&&b.has(a.nextStatus)&&a.previousStatus!==a.nextStatus&&(await (0,g.PQ)(a.companyUuid,a.runUuid),await (0,h.Xh)(a.companyUuid,a.researchProjectUuid,a.actorContext?.actorUuid??a.fallbackActorUuid))}function n(a){a.actorContext&&a.newDescription&&o(a.companyUuid,a.researchProjectUuid,"experiment_run",a.runUuid,a.title,a.oldDescription,a.newDescription,a.actorContext.actorType,a.actorContext.actorUuid).catch(a=>p.error({err:a},"failed to process mentions"))}async function o(a,b,c,d,e,f,g,h,k){let l=f?j.Xs(f):[],m=j.Xs(g),n=new Set(l.map(a=>`${a.type}:${a.uuid}`)),o=m.filter(a=>!n.has(`${a.type}:${a.uuid}`));if(0!==o.length)for(let f of(await j.AM({companyUuid:a,sourceType:c,sourceUuid:d,content:g,actorType:h,actorUuid:k,researchProjectUuid:b,entityTitle:e}),o))(f.type!==h||f.uuid!==k)&&await i.E1({companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:h,actorUuid:k,action:"mentioned",value:{mentionedType:f.type,mentionedUuid:f.uuid,mentionedName:f.displayName,sourceType:c,sourceUuid:d}})}d()}catch(a){d(a)}})},96718:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Xh:()=>j,_I:()=>i,cd:()=>k});var e=c(52618),f=c(37943),g=a([e,f]);function h(a){let b=a.flatMap(a=>a.experiments.map(b=>({ideaTitle:a.title,...b}))),c=b.filter(a=>a.outcome?.toLowerCase().includes("success")).length,d=b.filter(a=>a.outcome?.toLowerCase().includes("fail")).length,e=`${a.length} idea(s), ${b.length} completed experiment(s), ${c} marked as successes, ${d} marked as failures or regressions.`;return{experiments:b,summary:e}}async function i(a,b){return e.prisma.document.findFirst({where:{companyUuid:a,researchProjectUuid:b,type:"project_synthesis"},orderBy:{updatedAt:"desc"}})}async function j(a,b,c){let d=await e.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0,name:!0,researchQuestions:{where:{reviewStatus:"accepted"},select:{uuid:!0,title:!0,content:!0,sourceType:!0}},experiments:{where:{status:"completed"},select:{uuid:!0,title:!0,outcome:!0,results:!0,researchQuestionUuid:!0}}}});if(!d)throw Error("Research Project not found");let g=d.researchQuestions.map(a=>{let b=d.experiments.filter(b=>b.researchQuestionUuid===a.uuid);return 0===b.length?null:{title:a.title,content:a.content,sourceType:a.sourceType,experiments:b.map(a=>({title:a.title,outcome:a.outcome,results:a.results}))}}).filter(a=>!!a);if(0===g.length){let c=await i(a,b);return c&&c.content&&c.content.trim().length>0||await e.prisma.researchProject.update({where:{uuid:b},data:{latestSynthesisAt:null,latestSynthesisIdeaCount:0,latestSynthesisSummary:null}}),null}let j=function(a,b){let{summary:c}=h(b),d=b.map(a=>{let b=a.experiments.map(a=>{var b;let c=!(b=a.results)||"object"!=typeof b||Array.isArray(b)?[]:Object.entries(b).filter(([,a])=>"number"==typeof a||"string"==typeof a||"boolean"==typeof a).map(([a,b])=>`- ${a}: ${String(b)}`);return[`### ${a.title}`,a.outcome?`Outcome: ${a.outcome}`:"Outcome: pending explicit write-up",...c.length>0?["Metrics:",...c]:[]].join("\n")}).join("\n\n");return[`## ${a.title}`,`Source: ${a.sourceType}`,a.content||"",b].filter(Boolean).join("\n\n")});return[`# Rolling Synthesis for ${a}`,"",`Updated: ${new Date().toISOString()}`,"\n## Executive Summary",c,"\n## Cross-Idea Analysis",d.join("\n\n")].join("\n")}(d.name,g),{summary:k}=h(g),l=new Date,m=await i(a,b),n=a=>a.replace(/^Updated: .*$/m,"Updated: <redacted>");if(null!=m&&null!=m.content&&n(m.content)===n(j))return{generatedAt:(m.updatedAt??l).toISOString(),ideaCount:g.length,summary:k};m?await e.prisma.document.update({where:{uuid:m.uuid},data:{title:`${d.name} Rolling Synthesis`,content:j,version:{increment:1}}}):await e.prisma.document.create({data:{companyUuid:a,researchProjectUuid:b,type:"project_synthesis",title:`${d.name} Rolling Synthesis`,content:j,version:1,createdByUuid:c}}),await e.prisma.researchProject.update({where:{uuid:b},data:{latestSynthesisAt:l,latestSynthesisIdeaCount:g.length,latestSynthesisSummary:k}});try{let d=await e.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{name:!0,autonomousLoopAgentUuid:!0}});if(d?.autonomousLoopAgentUuid){let g=await e.prisma.agent.findUnique({where:{uuid:d.autonomousLoopAgentUuid},select:{ownerUuid:!0,name:!0}});g?.ownerUuid&&await f.vt({companyUuid:a,researchProjectUuid:b,recipientType:"user",recipientUuid:g.ownerUuid,entityType:"research_project",entityUuid:b,entityTitle:d.name,projectName:d.name,action:"synthesis_updated",message:`Project synthesis updated: ${k}`,actorType:"agent",actorUuid:c,actorName:g.name??"Agent"})}}catch{}return{generatedAt:l.toISOString(),ideaCount:g.length,summary:k}}async function k(a){let b=await e.prisma.researchProject.findFirst({where:{uuid:a.researchProjectUuid,companyUuid:a.companyUuid},select:{name:!0}});if(!b)throw Error("Research Project not found");let c=a.title?.trim()||`${b.name} Rolling Synthesis`,d=await i(a.companyUuid,a.researchProjectUuid),f=d?await e.prisma.document.update({where:{uuid:d.uuid},data:{title:c,content:a.content,version:{increment:1}},select:{uuid:!0,title:!0,version:!0,updatedAt:!0}}):await e.prisma.document.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,type:"project_synthesis",title:c,content:a.content,version:1,createdByUuid:a.actorUuid},select:{uuid:!0,title:!0,version:!0,updatedAt:!0}}),g=await e.prisma.experiment.count({where:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,status:"completed"}});return await e.prisma.researchProject.update({where:{uuid:a.researchProjectUuid},data:{latestSynthesisAt:f.updatedAt,latestSynthesisIdeaCount:g,latestSynthesisSummary:function(a){let b=a.split(/\n{2,}/).map(a=>a.replace(/^#+\s*/,"").trim()).find(a=>a.length>0);return b?b.length>220?`${b.slice(0,217)}...`:b:null}(a.content)}}),f}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})}};
|
|
1
|
+
"use strict";exports.id=6499,exports.ids=[6499],exports.modules={12241:(a,b,c)=>{c.d(b,{I2:()=>h,jI:()=>g,k9:()=>i,sO:()=>e});let d={open:["assigned","closed"],assigned:["open","in_progress","closed"],in_progress:["to_verify","closed"],to_verify:["done","in_progress","closed"],done:["closed"],closed:[]};function e(a,b){return(d[a]||[]).includes(b)}let f={total:0,required:0,passed:0,failed:0,pending:0,requiredPassed:0,requiredFailed:0,requiredPending:0};function g(a){if(0===a.length)return{status:"not_started",summary:{...f}};let b={...f,total:a.length};for(let c of a)c.required&&b.required++,"passed"===c.status?(b.passed++,c.required&&b.requiredPassed++):"failed"===c.status?(b.failed++,c.required&&b.requiredFailed++):(b.pending++,c.required&&b.requiredPending++);return b.requiredFailed>0?{status:"failed",summary:b}:b.requiredPassed===b.required&&b.required>0?{status:"passed",summary:b}:b.passed>0||b.failed>0?{status:"in_progress",summary:b}:{status:"not_started",summary:b}}function h(a){return{uuid:a.uuid,description:a.description,required:a.required,devStatus:a.devStatus,devEvidence:a.devEvidence,devMarkedByType:a.devMarkedByType,devMarkedBy:a.devMarkedBy,devMarkedAt:a.devMarkedAt?.toISOString()??null,status:a.status,evidence:a.evidence,markedByType:a.markedByType,markedBy:a.markedBy,markedAt:a.markedAt?.toISOString()??null,sortOrder:a.sortOrder}}let i={dependsOn:{select:{dependsOnRun:{select:{uuid:!0,title:!0,status:!0}}}},dependedBy:{select:{run:{select:{uuid:!0,title:!0,status:!0}}}},acceptanceCriteriaItems:{orderBy:{sortOrder:"asc"}}}},19778:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Gz:()=>q,Kb:()=>r,lb:()=>l,m1:()=>p,pk:()=>o,ry:()=>n,yi:()=>m});var e=c(18818),f=c(52618),g=c(48873),h=c(31378),i=c(73310),j=c(33073),k=a([f,h,i,j]);async function l(a){let b=await f.prisma.experimentRun.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,title:a.title,description:a.description,status:"open",priority:a.priority||"medium",computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:null,experimentDesignUuid:a.experimentDesignUuid,createdByUuid:a.createdByUuid},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}});return(0,i.Y4)({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityUuid:b.uuid,action:"created"}),(0,h.Hz)(b)}async function m(a,b,c){let d=null;if(void 0!==b.description&&c){let b=await f.prisma.experimentRun.findUnique({where:{uuid:a},select:{description:!0}});d=b?.description??null}let g={...b};void 0!==b.experimentResults&&(g.experimentResults=null===b.experimentResults?e.D1.Fj:b.experimentResults);let j=null,k=await f.prisma.$transaction(async c=>{if(b.status){let d=await c.experimentRun.findUnique({where:{uuid:a},select:{status:!0}});j=d?.status??null,"done"!==b.status&&d?.status==="to_verify"&&await c.acceptanceCriterion.updateMany({where:{runUuid:a},data:{status:"pending",evidence:null,markedByType:null,markedBy:null,markedAt:null,devStatus:"pending",devEvidence:null,devMarkedByType:null,devMarkedBy:null,devMarkedAt:null}})}return c.experimentRun.update({where:{uuid:a},data:g,include:{researchProject:{select:{uuid:!0,name:!0}}}})});return(0,i.Y4)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,entityUuid:k.uuid,action:"updated"}),await (0,i.sO)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,runUuid:k.uuid,previousStatus:j,nextStatus:b.status,fallbackActorUuid:k.createdByUuid,actorContext:c}),(0,i.NC)({companyUuid:k.companyUuid,researchProjectUuid:k.researchProject.uuid,runUuid:k.uuid,title:k.title,oldDescription:d,newDescription:b.description,actorContext:c}),(0,h.Hz)(k)}async function n(a,b,c,d){let e=await m(b,{status:"to_verify",outcome:c.outcome??null,experimentResults:c.experimentResults??null},d);return await (0,j.PQ)(a,b),e}async function o({runUuid:a,companyUuid:b,assigneeType:c,assigneeUuid:d,assignedByUuid:e}){try{let g=await f.prisma.experimentRun.update({where:{uuid:a,status:"open"},data:{status:"assigned",assigneeType:c,assigneeUuid:d,assignedAt:new Date,assignedByUuid:e},include:{researchProject:{select:{uuid:!0,name:!0}}}});return(0,i.Y4)({companyUuid:b,researchProjectUuid:g.researchProject.uuid,entityUuid:g.uuid,action:"updated"}),(0,h.Hz)(g)}catch(a){if((0,g.Ik)(a))throw new g.Yy("ExperimentRun");throw a}}async function p(a){try{let b=await f.prisma.experimentRun.update({where:{uuid:a,status:"assigned"},data:{status:"open",assigneeType:null,assigneeUuid:null,assignedAt:null,assignedByUuid:null},include:{researchProject:{select:{uuid:!0,name:!0}}}});return(0,i.Y4)({companyUuid:b.companyUuid,researchProjectUuid:b.researchProject.uuid,entityUuid:b.uuid,action:"updated"}),(0,h.Hz)(b)}catch(a){if((0,g.Ik)(a))throw new g.nm("ExperimentRun");throw a}}async function q(a){let b=await f.prisma.experimentRun.delete({where:{uuid:a}});return(0,i.Y4)({companyUuid:b.companyUuid,researchProjectUuid:b.researchProjectUuid,entityUuid:b.uuid,action:"deleted"}),b}async function r(a,b,c,d,e){let g=new Map,i=e.map(e=>f.prisma.experimentRun.create({data:{companyUuid:a,researchProjectUuid:b,title:e.title,description:e.description||null,status:"open",priority:e.priority||"medium",computeBudgetHours:e.computeBudgetHours||null,acceptanceCriteria:e.acceptanceCriteria||null,outcome:null,experimentDesignUuid:c,createdByUuid:d},select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0}})),j=await Promise.all(i);for(let a=0;a<e.length;a++)e[a].uuid&&g.set(e[a].uuid,j[a].uuid);return{tasks:await Promise.all(j.map(h.Hz)),draftToTaskUuidMap:g}}[f,h,i,j]=k.then?(await k)():k,d()}catch(a){d(a)}})},31378:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bs:()=>o,Hz:()=>j,IM:()=>p,fo:()=>n,mu:()=>l,vv:()=>m,yc:()=>q});var e=c(52618),f=c(76872),g=c(54349),h=c(12241),i=a([e,f,g]);async function j(a,b=0){let[c,d]=await Promise.all([(0,f.ir)(a.assigneeType,a.assigneeUuid,a.assignedAt,a.assignedByUuid),(0,f.LS)(a.createdByUuid)]),e=(a.dependsOn||[]).map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),g=(a.dependedBy||[]).map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status})),i=(a.acceptanceCriteriaItems||[]).map(h.I2),{status:k,summary:l}=(0,h.jI)(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:a.outcome??null,experimentResults:a.experimentResults??null,acceptanceCriteriaItems:i,acceptanceStatus:k,acceptanceSummary:l,assignee:c,experimentDesignUuid:a.experimentDesignUuid,...a.researchProject&&{project:a.researchProject},createdBy:d,dependsOn:e,dependedBy:g,commentCount:b,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}}async function k(a,b){if(0===a.length)return[];let c=[],d=[];for(let b of a)b.assigneeType&&b.assigneeUuid&&c.push({type:b.assigneeType,uuid:b.assigneeUuid}),b.assignedByUuid&&c.push({type:"user",uuid:b.assignedByUuid}),d.push(b.createdByUuid);let[e,g]=await Promise.all([(0,f.Uo)(c),(0,f.Xx)(d)]);return a.map(a=>{let c=null;if(a.assigneeType&&a.assigneeUuid){let b=e.get(a.assigneeUuid);if(b){let d=null;if(a.assignedByUuid){let b=e.get(a.assignedByUuid);b&&(d={type:"user",uuid:a.assignedByUuid,name:b})}c={type:a.assigneeType,uuid:a.assigneeUuid,name:b,assignedAt:a.assignedAt?.toISOString()??null,assignedBy:d}}}let d=g.get(a.createdByUuid)??null,f=(a.dependsOn||[]).map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),i=(a.dependedBy||[]).map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status})),j=(a.acceptanceCriteriaItems||[]).map(h.I2),{status:k,summary:l}=(0,h.jI)(a.acceptanceCriteriaItems||[]);return{uuid:a.uuid,title:a.title,description:a.description,status:a.status,priority:a.priority,computeBudgetHours:a.computeBudgetHours,acceptanceCriteria:a.acceptanceCriteria,outcome:a.outcome??null,experimentResults:a.experimentResults??null,acceptanceCriteriaItems:j,acceptanceStatus:k,acceptanceSummary:l,assignee:c,experimentDesignUuid:a.experimentDesignUuid,...a.researchProject&&{project:a.researchProject},createdBy:d,dependsOn:f,dependedBy:i,commentCount:b[a.uuid]??0,createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString()}})}async function l({companyUuid:a,researchProjectUuid:b,skip:c,take:d,status:f,priority:i,experimentDesignUuids:j}){let l={researchProjectUuid:b,companyUuid:a,...f&&{status:f},...i&&{priority:i},...j&&j.length>0&&{experimentDesignUuid:{in:j}}},[m,n]=await Promise.all([e.prisma.experimentRun.findMany({where:l,skip:c,take:d,orderBy:[{priority:"desc"},{createdAt:"desc"}],select:{uuid:!0,title:!0,description:!0,status:!0,priority:!0,computeBudgetHours:!0,acceptanceCriteria:!0,outcome:!0,experimentResults:!0,assigneeType:!0,assigneeUuid:!0,assignedAt:!0,assignedByUuid:!0,experimentDesignUuid:!0,createdByUuid:!0,createdAt:!0,updatedAt:!0,...h.k9}}),e.prisma.experimentRun.count({where:l})]),o=await (0,g.uA)(a,"experiment_run",m.map(a=>a.uuid));return{tasks:await k(m,o),total:n}}async function m(a,b){let c=await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a},include:{researchProject:{select:{uuid:!0,name:!0}},...h.k9}});if(!c)return null;let d=await e.prisma.comment.count({where:{companyUuid:a,targetType:"experiment_run",targetUuid:b}});return j(c,d)}async function n(a,b){return e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}})}async function o(a,b){let c=await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a},include:h.k9});if(!c)throw Error("ExperimentRun not found");return{dependsOn:c.dependsOn.map(a=>({uuid:a.dependsOnRun.uuid,title:a.dependsOnRun.title,status:a.dependsOnRun.status})),dependedBy:c.dependedBy.map(a=>({uuid:a.run.uuid,title:a.run.title,status:a.run.status}))}}async function p(a){let b=await e.prisma.runDependency.findMany({where:{runUuid:a},select:{dependsOnRun:{select:{uuid:!0,title:!0,status:!0,assigneeType:!0,assigneeUuid:!0}}}});if(0===b.length)return{resolved:!0,blockers:[]};let c=b.filter(a=>"done"!==a.dependsOnRun.status&&"closed"!==a.dependsOnRun.status);if(0===c.length)return{resolved:!0,blockers:[]};let d=c.map(a=>a.dependsOnRun.uuid),[g,h]=await Promise.all([e.prisma.sessionRunCheckin.findMany({where:{runUuid:{in:d},checkoutAt:null},select:{runUuid:!0,sessionUuid:!0,session:{select:{name:!0}}}}),(0,f.Uo)(c.filter(a=>a.dependsOnRun.assigneeType&&a.dependsOnRun.assigneeUuid).map(a=>({type:a.dependsOnRun.assigneeType,uuid:a.dependsOnRun.assigneeUuid})))]),i=new Map;for(let a of g)i.set(a.runUuid,{sessionUuid:a.sessionUuid,sessionName:a.session.name});let j=c.map(a=>{let b=a.dependsOnRun,c=null;if(b.assigneeType&&b.assigneeUuid){let a=h.get(b.assigneeUuid);a&&(c={type:b.assigneeType,uuid:b.assigneeUuid,name:a})}return{uuid:b.uuid,title:b.title,status:b.status,assignee:c,sessionCheckin:i.get(b.uuid)??null}});return{resolved:!1,blockers:j}}async function q(a,b){let[c,d]=await Promise.all([e.prisma.experimentRun.findMany({where:{companyUuid:a,researchProjectUuid:b},select:{uuid:!0,title:!0,status:!0,priority:!0,experimentDesignUuid:!0,acceptanceCriteriaItems:{select:{metricName:!0,threshold:!0,operator:!0,actualValue:!0,required:!0,isEarlyStop:!0}}}}),e.prisma.runDependency.findMany({where:{run:{companyUuid:a,researchProjectUuid:b}},select:{runUuid:!0,dependsOnRunUuid:!0}})]);return{nodes:c.map(a=>({uuid:a.uuid,title:a.title,status:a.status,priority:a.priority,experimentDesignUuid:a.experimentDesignUuid??null,goNoGoCriteria:(a.acceptanceCriteriaItems??[]).map(a=>({metricName:a.metricName,threshold:a.threshold,operator:a.operator,actualValue:a.actualValue,required:a.required,isEarlyStop:a.isEarlyStop}))})),edges:d.map(a=>({from:a.runUuid,to:a.dependsOnRunUuid}))}}[e,f,g]=i.then?(await i)():i,d()}catch(a){d(a)}})},46499:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$O:()=>h.$,Bs:()=>e.Bs,Gz:()=>f.Gz,IM:()=>e.IM,Kb:()=>f.Kb,_M:()=>h._,fo:()=>e.fo,lb:()=>f.lb,m1:()=>f.m1,mu:()=>e.mu,pk:()=>f.pk,ry:()=>f.ry,sO:()=>i.sO,vv:()=>e.vv,yc:()=>e.yc,yi:()=>f.yi});var e=c(31378),f=c(19778),g=c(69595),h=c(71759),i=c(12241),j=a([e,f,g,h]);[e,f,g,h]=j.then?(await j)():j,d()}catch(a){d(a)}})},54349:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Hu:()=>o,eT:()=>n,fg:()=>m,uA:()=>u});var e=c(52618),f=c(76872),g=c(65582),h=c(90494),i=c(88437),j=c(37943),k=c(911),l=a([e,f,h,i,j]);[e,f,h,i,j]=l.then?(await l)():l;let v=g.vF.child({module:"comment"});async function m({companyUuid:a,targetType:b,targetUuid:c,skip:d,take:g}){if(!await (0,f._9)(b,c,a))return{comments:[],total:0};let h={companyUuid:a,targetType:b,targetUuid:c},[i,j]=await Promise.all([e.prisma.comment.findMany({where:h,skip:d,take:g,orderBy:{createdAt:"asc"},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),e.prisma.comment.count({where:h})]),k=i.map(a=>a.uuid),l=k.length?await e.prisma.mention.findMany({where:{companyUuid:a,sourceType:"comment",sourceUuid:{in:k}},select:{sourceUuid:!0,mentionedType:!0,mentionedUuid:!0}}):[],m=new Map;for(let a of l){let b=m.get(a.sourceUuid)??[],c=await (0,f.lR)(a.mentionedType,a.mentionedUuid)??a.mentionedType;b.some(b=>b.type===a.mentionedType&&b.uuid===a.mentionedUuid)||b.push({type:a.mentionedType,uuid:a.mentionedUuid,name:c}),m.set(a.sourceUuid,b)}return{comments:await Promise.all(i.map(async a=>{let b=await (0,f.lR)(a.authorType,a.authorUuid);return{uuid:a.uuid,targetType:a.targetType,targetUuid:a.targetUuid,content:a.content,author:{type:a.authorType,uuid:a.authorUuid,name:b??"Unknown"},createdAt:a.createdAt.toISOString(),updatedAt:a.updatedAt.toISOString(),mentions:m.get(a.uuid)??[]}})),total:j}}async function n({companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h,mentions:j}){if(!await (0,f._9)(b,c,a))throw Error(`Target ${b} with UUID ${c} not found`);let l=await e.prisma.comment.create({data:{companyUuid:a,targetType:b,targetUuid:c,content:d,authorType:g,authorUuid:h},select:{uuid:!0,targetType:!0,targetUuid:!0,content:!0,authorType:!0,authorUuid:!0,createdAt:!0,updatedAt:!0}}),m=await (0,f.lR)(l.authorType,l.authorUuid),n=null;try{n=await o(b,c)}catch(a){v.error({err:a},"failed to resolve projectUuid for comment")}if(n){k.B.emitChange({companyUuid:a,researchProjectUuid:n,entityType:b,entityUuid:c,action:"updated",actorUuid:h});try{await i.E1({companyUuid:a,researchProjectUuid:n,targetType:b,targetUuid:c,actorType:g,actorUuid:h,action:"comment_added"})}catch(a){v.error({err:a},"failed to create comment_added activity")}try{await t({companyUuid:a,researchProjectUuid:n,targetType:b,targetUuid:c,commentContent:d,authorType:g,authorUuid:h,authorName:m??"Someone"})}catch(a){v.error({err:a},"failed to dispatch comment_added notifications")}}try{await q(a,b,c,l.uuid,d,g,h,j)}catch(a){v.error({err:a},"failed to process mentions")}let p=[];try{for(let b of(await e.prisma.mention.findMany({where:{companyUuid:a,sourceType:"comment",sourceUuid:l.uuid},select:{mentionedType:!0,mentionedUuid:!0}}))){if(p.some(a=>a.type===b.mentionedType&&a.uuid===b.mentionedUuid))continue;let a=await (0,f.lR)(b.mentionedType,b.mentionedUuid)??b.mentionedType;p.push({type:b.mentionedType,uuid:b.mentionedUuid,name:a})}}catch(a){v.error({err:a},"failed to reload mention summaries for comment response")}return{uuid:l.uuid,targetType:l.targetType,targetUuid:l.targetUuid,content:l.content,author:{type:l.authorType,uuid:l.authorUuid,name:m??"Unknown"},createdAt:l.createdAt.toISOString(),updatedAt:l.updatedAt.toISOString(),mentions:p}}async function o(a,b){switch(a){case"experiment":{let a=await e.prisma.experiment.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"experiment_run":{let a=await e.prisma.experimentRun.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"research_question":{let a=await e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"experiment_design":{let a=await e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}case"document":{let a=await e.prisma.document.findUnique({where:{uuid:b},select:{researchProjectUuid:!0}});return a?.researchProjectUuid??null}default:return null}}async function p(a,b){switch(a){case"experiment":{let a=await e.prisma.experiment.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment"}case"experiment_run":{let a=await e.prisma.experimentRun.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment Run"}case"research_question":{let a=await e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Research Question"}case"experiment_design":{let a=await e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Experiment Design"}case"document":{let a=await e.prisma.document.findUnique({where:{uuid:b},select:{title:!0}});return a?.title??"Unknown Document"}default:return"Unknown"}}async function q(a,b,c,d,e,f,g,j){let k=h.Xs(e),l=function(a,b){let c=new Set,d=[];for(let b of a){let a=`${b.type}:${b.uuid}`;c.has(a)||(c.add(a),d.push(b))}if(b)for(let a of b){if("user"!==a.type&&"agent"!==a.type||!a.uuid)continue;let b=`${a.type}:${a.uuid}`;c.has(b)||(c.add(b),d.push({type:a.type,uuid:a.uuid,displayName:a.displayName??a.type}))}return d}(k,j);if(0===l.length)return;let m=await o(b,c);if(!m)return;let n=await p(b,c);for(let j of(await h.AM({companyUuid:a,sourceType:"comment",sourceUuid:d,content:e,actorType:f,actorUuid:g,researchProjectUuid:m,entityTitle:n,explicitMentions:l}),l))(j.type!==f||j.uuid!==g)&&await i.E1({companyUuid:a,researchProjectUuid:m,targetType:b,targetUuid:c,actorType:f,actorUuid:g,action:"mentioned",value:{mentionedType:j.type,mentionedUuid:j.uuid,mentionedName:j.displayName,sourceType:"comment",sourceUuid:d}})}async function r(a,b){switch(a){case"experiment":return e.prisma.experiment.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0,createdByType:!0}});case"experiment_run":return e.prisma.experimentRun.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0}});case"research_question":return e.prisma.researchQuestion.findUnique({where:{uuid:b},select:{title:!0,assigneeType:!0,assigneeUuid:!0,createdByUuid:!0}});case"experiment_design":return e.prisma.experimentDesign.findUnique({where:{uuid:b},select:{title:!0,createdByUuid:!0,createdByType:!0}});case"document":return e.prisma.document.findUnique({where:{uuid:b},select:{title:!0,createdByUuid:!0}});default:return null}}async function s(a){return await e.prisma.user.findUnique({where:{uuid:a},select:{uuid:!0}})?"user":await e.prisma.agent.findUnique({where:{uuid:a},select:{uuid:!0}})?"agent":null}async function t(a){let{companyUuid:b,researchProjectUuid:c,targetType:d,targetUuid:f,commentContent:g,authorType:h,authorUuid:i,authorName:k}=a,l=await r(d,f);if(!l)return;let m=l.title??function(a){switch(a){case"experiment":return"Unknown Experiment";case"experiment_run":return"Unknown Experiment Run";case"research_question":return"Unknown Research Question";case"experiment_design":return"Unknown Experiment Design";case"document":return"Unknown Document";default:return"Unknown"}}(d),n=[];if(l.assigneeType&&l.assigneeUuid&&n.push({type:l.assigneeType,uuid:l.assigneeUuid}),l.createdByUuid){let a=l.createdByType??await s(l.createdByUuid);a&&n.push({type:a,uuid:l.createdByUuid})}let o=new Set,p=n.filter(a=>{if(a.type===h&&a.uuid===i)return!1;let b=`${a.type}:${a.uuid}`;return!o.has(b)&&(o.add(b),!0)});if(0===p.length)return;let q=await j.r5(b,p.map(a=>({type:a.type,uuid:a.uuid}))),t=p.filter(a=>{let b=q.get(`${a.type}:${a.uuid}`);return!b||b.commentAdded});if(0===t.length)return;let u=await e.prisma.researchProject.findUnique({where:{uuid:c},select:{name:!0}}),v=u?.name??"Unknown Project",x=function(a){let b=a.replace(w,"@$1").trim();return b.length<=120?b:b.substring(0,117)+"..."}(g),y=x?`${k} commented on "${m}": ${x}`:`${k} commented on "${m}"`,z=t.map(a=>({companyUuid:b,researchProjectUuid:c,recipientType:a.type,recipientUuid:a.uuid,entityType:d,entityUuid:f,entityTitle:m,projectName:v,action:"comment_added",message:y,actorType:h,actorUuid:i,actorName:k}));await j.Xm(z)}let w=/@\[([^\]]+)\]\((?:user|agent):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\)/gi;async function u(a,b,c){if(0===c.length)return{};let d=await e.prisma.comment.groupBy({by:["targetUuid"],where:{companyUuid:a,targetType:b,targetUuid:{in:c}},_count:{targetUuid:!0}}),f={};for(let a of c)f[a]=0;for(let a of d)f[a.targetUuid]=a._count.targetUuid;return f}d()}catch(a){d(a)}})},69595:(a,b,c)=>{c.a(a,async(a,b)=>{try{var d=c(52618),e=c(31378),f=c(73310);c(12241);var g=a([d,e,f]);[d,e,f]=g.then?(await g)():g,b()}catch(a){b(a)}})},71759:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$:()=>i,_:()=>h});var e=c(52618),f=a([e]);async function g(a,b){let c=await e.prisma.runDependency.findMany({select:{runUuid:!0,dependsOnRunUuid:!0}}),d=new Map;for(let a of c)d.has(a.runUuid)||d.set(a.runUuid,[]),d.get(a.runUuid).push(a.dependsOnRunUuid);let f=new Set,g=[a];for(;g.length>0;){let a=g.pop();if(a===b)return!0;if(!f.has(a))for(let b of(f.add(a),d.get(a)||[]))f.has(b)||g.push(b)}return!1}async function h(a,b,c){if(b===c)throw Error("An experiment run cannot depend on itself");let[d,f]=await Promise.all([e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}}),e.prisma.experimentRun.findFirst({where:{uuid:c,companyUuid:a}})]);if(!d)throw Error("ExperimentRun not found");if(!f)throw Error("Dependency experiment run not found");if(d.researchProjectUuid!==f.researchProjectUuid)throw Error("Experiment runs must belong to the same project");if(await g(c,b))throw Error("Adding this dependency would create a cycle");let h=await e.prisma.runDependency.create({data:{runUuid:b,dependsOnRunUuid:c}});return{runUuid:h.runUuid,dependsOnRunUuid:h.dependsOnRunUuid,createdAt:h.createdAt}}async function i(a,b,c){if(!await e.prisma.experimentRun.findFirst({where:{uuid:b,companyUuid:a}}))throw Error("ExperimentRun not found");await e.prisma.runDependency.deleteMany({where:{runUuid:b,dependsOnRunUuid:c}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},73310:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{NC:()=>n,Y4:()=>l,sO:()=>m});var e=c(911),f=c(65582),g=c(33073),h=c(96718),i=c(88437),j=c(90494),k=a([g,h,i,j]);[g,h,i,j]=k.then?(await k)():k;let p=f.vF.child({module:"experiment_run"});function l(a){e.B.emitChange({companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,entityType:"experiment_run",entityUuid:a.entityUuid,action:a.action})}async function m(a){let b=new Set(["done","closed"]);null!==a.previousStatus&&void 0!==a.nextStatus&&b.has(a.nextStatus)&&a.previousStatus!==a.nextStatus&&(await (0,g.PQ)(a.companyUuid,a.runUuid),await (0,h.Xh)(a.companyUuid,a.researchProjectUuid,a.actorContext?.actorUuid??a.fallbackActorUuid))}function n(a){a.actorContext&&a.newDescription&&o(a.companyUuid,a.researchProjectUuid,"experiment_run",a.runUuid,a.title,a.oldDescription,a.newDescription,a.actorContext.actorType,a.actorContext.actorUuid).catch(a=>p.error({err:a},"failed to process mentions"))}async function o(a,b,c,d,e,f,g,h,k){let l=f?j.Xs(f):[],m=j.Xs(g),n=new Set(l.map(a=>`${a.type}:${a.uuid}`)),o=m.filter(a=>!n.has(`${a.type}:${a.uuid}`));if(0!==o.length)for(let f of(await j.AM({companyUuid:a,sourceType:c,sourceUuid:d,content:g,actorType:h,actorUuid:k,researchProjectUuid:b,entityTitle:e}),o))(f.type!==h||f.uuid!==k)&&await i.E1({companyUuid:a,researchProjectUuid:b,targetType:c,targetUuid:d,actorType:h,actorUuid:k,action:"mentioned",value:{mentionedType:f.type,mentionedUuid:f.uuid,mentionedName:f.displayName,sourceType:c,sourceUuid:d}})}d()}catch(a){d(a)}})},96718:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Xh:()=>j,_I:()=>i,cd:()=>k});var e=c(52618),f=c(37943),g=a([e,f]);function h(a){let b=a.flatMap(a=>a.experiments.map(b=>({ideaTitle:a.title,...b}))),c=b.filter(a=>a.outcome?.toLowerCase().includes("success")).length,d=b.filter(a=>a.outcome?.toLowerCase().includes("fail")).length,e=`${a.length} idea(s), ${b.length} completed experiment(s), ${c} marked as successes, ${d} marked as failures or regressions.`;return{experiments:b,summary:e}}async function i(a,b){return e.prisma.document.findFirst({where:{companyUuid:a,researchProjectUuid:b,type:"project_synthesis"},orderBy:{updatedAt:"desc"}})}async function j(a,b,c){let d=await e.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{uuid:!0,name:!0,researchQuestions:{where:{reviewStatus:"accepted"},select:{uuid:!0,title:!0,content:!0,sourceType:!0}},experiments:{where:{status:"completed"},select:{uuid:!0,title:!0,outcome:!0,results:!0,researchQuestionUuid:!0}}}});if(!d)throw Error("Research Project not found");let g=d.researchQuestions.map(a=>{let b=d.experiments.filter(b=>b.researchQuestionUuid===a.uuid);return 0===b.length?null:{title:a.title,content:a.content,sourceType:a.sourceType,experiments:b.map(a=>({title:a.title,outcome:a.outcome,results:a.results}))}}).filter(a=>!!a);if(0===g.length){let c=await i(a,b);return c&&c.content&&c.content.trim().length>0||await e.prisma.researchProject.update({where:{uuid:b},data:{latestSynthesisAt:null,latestSynthesisIdeaCount:0,latestSynthesisSummary:null}}),null}let j=function(a,b){let{summary:c}=h(b),d=b.map(a=>{let b=a.experiments.map(a=>{var b;let c=!(b=a.results)||"object"!=typeof b||Array.isArray(b)?[]:Object.entries(b).filter(([,a])=>"number"==typeof a||"string"==typeof a||"boolean"==typeof a).map(([a,b])=>`- ${a}: ${String(b)}`);return[`### ${a.title}`,a.outcome?`Outcome: ${a.outcome}`:"Outcome: pending explicit write-up",...c.length>0?["Metrics:",...c]:[]].join("\n")}).join("\n\n");return[`## ${a.title}`,`Source: ${a.sourceType}`,a.content||"",b].filter(Boolean).join("\n\n")});return[`# Rolling Synthesis for ${a}`,"",`Updated: ${new Date().toISOString()}`,"\n## Executive Summary",c,"\n## Cross-Idea Analysis",d.join("\n\n")].join("\n")}(d.name,g),{summary:k}=h(g),l=new Date,m=await i(a,b),n=a=>a.replace(/^Updated: .*$/m,"Updated: <redacted>");if(null!=m&&null!=m.content&&n(m.content)===n(j))return{generatedAt:(m.updatedAt??l).toISOString(),ideaCount:g.length,summary:k};m?await e.prisma.document.update({where:{uuid:m.uuid},data:{title:`${d.name} Rolling Synthesis`,content:j,version:{increment:1}}}):await e.prisma.document.create({data:{companyUuid:a,researchProjectUuid:b,type:"project_synthesis",title:`${d.name} Rolling Synthesis`,content:j,version:1,createdByUuid:c}}),await e.prisma.researchProject.update({where:{uuid:b},data:{latestSynthesisAt:l,latestSynthesisIdeaCount:g.length,latestSynthesisSummary:k}});try{let d=await e.prisma.researchProject.findFirst({where:{uuid:b,companyUuid:a},select:{name:!0,autonomousLoopAgentUuid:!0}});if(d?.autonomousLoopAgentUuid){let g=await e.prisma.agent.findUnique({where:{uuid:d.autonomousLoopAgentUuid},select:{ownerUuid:!0,name:!0}});g?.ownerUuid&&await f.vt({companyUuid:a,researchProjectUuid:b,recipientType:"user",recipientUuid:g.ownerUuid,entityType:"research_project",entityUuid:b,entityTitle:d.name,projectName:d.name,action:"synthesis_updated",message:`Project synthesis updated: ${k}`,actorType:"agent",actorUuid:c,actorName:g.name??"Agent"})}}catch{}return{generatedAt:l.toISOString(),ideaCount:g.length,summary:k}}async function k(a){let b=await e.prisma.researchProject.findFirst({where:{uuid:a.researchProjectUuid,companyUuid:a.companyUuid},select:{name:!0}});if(!b)throw Error("Research Project not found");let c=a.title?.trim()||`${b.name} Rolling Synthesis`,d=await i(a.companyUuid,a.researchProjectUuid),f=d?await e.prisma.document.update({where:{uuid:d.uuid},data:{title:c,content:a.content,version:{increment:1}},select:{uuid:!0,title:!0,version:!0,updatedAt:!0}}):await e.prisma.document.create({data:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,type:"project_synthesis",title:c,content:a.content,version:1,createdByUuid:a.actorUuid},select:{uuid:!0,title:!0,version:!0,updatedAt:!0}}),g=await e.prisma.experiment.count({where:{companyUuid:a.companyUuid,researchProjectUuid:a.researchProjectUuid,status:"completed"}});return await e.prisma.researchProject.update({where:{uuid:a.researchProjectUuid},data:{latestSynthesisAt:f.updatedAt,latestSynthesisIdeaCount:g,latestSynthesisSummary:function(a){let b=a.split(/\n{2,}/).map(a=>a.replace(/^#+\s*/,"").trim()).find(a=>a.length>0);return b?b.length>220?`${b.slice(0,217)}...`:b:null}(a.content)}}),f}[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})}};
|