@nilsr0711/drydock 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +4 -4
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  15. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/adrs/page.js +2 -2
  18. package/.next/standalone/.next/server/app/adrs/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/adrs/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/analytics/page.js +1 -1
  21. package/.next/standalone/.next/server/app/analytics/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/api/control/shutdown/route.js +1 -1
  24. package/.next/standalone/.next/server/app/api/control/shutdown/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/cost/export/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  27. package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/sse/dashboard/route.js +1 -1
  29. package/.next/standalone/.next/server/app/api/sse/dashboard/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/sse/jobs/[id]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/costs/page.js +1 -1
  34. package/.next/standalone/.next/server/app/costs/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/costs/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/jobs/[id]/page.js +3 -3
  37. package/.next/standalone/.next/server/app/jobs/[id]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/jobs/[id]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/jobs/page.js +2 -2
  40. package/.next/standalone/.next/server/app/jobs/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/jobs/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/needs-human/page.js +2 -2
  43. package/.next/standalone/.next/server/app/needs-human/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/needs-human/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/page.js +2 -2
  46. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/prompts/page.js +2 -2
  49. package/.next/standalone/.next/server/app/prompts/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/prompts/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/repos/[id]/page.js +2 -2
  52. package/.next/standalone/.next/server/app/repos/[id]/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/repos/[id]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/settings/page.js +2 -2
  55. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app-paths-manifest.json +4 -4
  58. package/.next/standalone/.next/server/chunks/152.js +3 -0
  59. package/.next/standalone/.next/server/chunks/304.js +1 -1
  60. package/.next/standalone/.next/server/chunks/387.js +34 -0
  61. package/.next/standalone/.next/server/chunks/40.js +1 -1
  62. package/.next/standalone/.next/server/chunks/403.js +1 -0
  63. package/.next/standalone/.next/server/chunks/475.js +19 -0
  64. package/.next/standalone/.next/server/chunks/50.js +1 -0
  65. package/.next/standalone/.next/server/chunks/521.js +1 -1
  66. package/.next/standalone/.next/server/chunks/578.js +1 -1
  67. package/.next/standalone/.next/server/chunks/614.js +2 -2
  68. package/.next/standalone/.next/server/chunks/668.js +1 -0
  69. package/.next/standalone/.next/server/chunks/786.js +1 -1
  70. package/.next/standalone/.next/server/chunks/83.js +1 -1
  71. package/.next/standalone/.next/server/chunks/908.js +1 -1
  72. package/.next/standalone/.next/server/chunks/944.js +1 -0
  73. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  74. package/.next/standalone/.next/server/pages/500.html +1 -1
  75. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  77. package/.next/standalone/.next/static/chunks/3433-ece700d2e393c23b.js +1 -0
  78. package/.next/standalone/.next/static/chunks/3894-4f48e3cc5be58e10.js +1 -0
  79. package/.next/standalone/.next/static/chunks/5080-16cb43874ff5c536.js +1 -0
  80. package/.next/standalone/.next/static/chunks/6634-74f0b66587b57037.js +1 -0
  81. package/.next/standalone/.next/static/chunks/{1642-a1ea35450c1b5c95.js → 8264-c27834f1552f983a.js} +1 -1
  82. package/.next/standalone/.next/static/chunks/8382-5201fc3dd1f64e60.js +1 -0
  83. package/.next/{static/chunks/4624-5e23973d35b58ca5.js → standalone/.next/static/chunks/8745-8b3833b3d2afa30c.js} +1 -1
  84. package/.next/standalone/.next/static/chunks/app/adrs/page-ca11e90e9404af90.js +1 -0
  85. package/.next/standalone/.next/static/chunks/app/costs/{page-24d086bf67620e30.js → page-5d66d93815eea63a.js} +1 -1
  86. package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-dfb41b4785fd7cbb.js +1 -0
  87. package/.next/standalone/.next/static/chunks/app/jobs/page-98215ec1497b829e.js +1 -0
  88. package/.next/standalone/.next/static/chunks/app/layout-134301ff0a9b828d.js +1 -0
  89. package/.next/standalone/.next/static/chunks/app/needs-human/page-569fc0e6aefc7677.js +1 -0
  90. package/.next/standalone/.next/static/chunks/app/page-504585be128c823c.js +1 -0
  91. package/.next/standalone/.next/static/chunks/app/prompts/page-c6bf6a4c782035ac.js +1 -0
  92. package/.next/standalone/.next/static/chunks/app/repos/[id]/page-c0c4531c2af46526.js +1 -0
  93. package/.next/standalone/.next/static/chunks/app/settings/page-84a44ab52a0ff49d.js +1 -0
  94. package/.next/standalone/.next/static/css/{bdce0893cf6b9cb9.css → 600a5b5311ad42be.css} +1 -1
  95. package/.next/standalone/drizzle/0034_human_instruction.sql +1 -0
  96. package/.next/standalone/drizzle/0035_agent_release.sql +4 -0
  97. package/.next/standalone/drizzle/0036_adopt_claude_mem.sql +1 -0
  98. package/.next/standalone/mcp-server.cjs +43157 -0
  99. package/.next/standalone/package.json +5 -3
  100. package/.next/static/chunks/3433-ece700d2e393c23b.js +1 -0
  101. package/.next/static/chunks/3894-4f48e3cc5be58e10.js +1 -0
  102. package/.next/static/chunks/5080-16cb43874ff5c536.js +1 -0
  103. package/.next/static/chunks/6634-74f0b66587b57037.js +1 -0
  104. package/.next/static/chunks/{1642-a1ea35450c1b5c95.js → 8264-c27834f1552f983a.js} +1 -1
  105. package/.next/static/chunks/8382-5201fc3dd1f64e60.js +1 -0
  106. package/.next/{standalone/.next/static/chunks/4624-5e23973d35b58ca5.js → static/chunks/8745-8b3833b3d2afa30c.js} +1 -1
  107. package/.next/static/chunks/app/adrs/page-ca11e90e9404af90.js +1 -0
  108. package/.next/static/chunks/app/costs/{page-24d086bf67620e30.js → page-5d66d93815eea63a.js} +1 -1
  109. package/.next/static/chunks/app/jobs/[id]/page-dfb41b4785fd7cbb.js +1 -0
  110. package/.next/static/chunks/app/jobs/page-98215ec1497b829e.js +1 -0
  111. package/.next/static/chunks/app/layout-134301ff0a9b828d.js +1 -0
  112. package/.next/static/chunks/app/needs-human/page-569fc0e6aefc7677.js +1 -0
  113. package/.next/static/chunks/app/page-504585be128c823c.js +1 -0
  114. package/.next/static/chunks/app/prompts/page-c6bf6a4c782035ac.js +1 -0
  115. package/.next/static/chunks/app/repos/[id]/page-c0c4531c2af46526.js +1 -0
  116. package/.next/static/chunks/app/settings/page-84a44ab52a0ff49d.js +1 -0
  117. package/.next/static/css/{bdce0893cf6b9cb9.css → 600a5b5311ad42be.css} +1 -1
  118. package/README.md +66 -21
  119. package/bin/drydock.mjs +77 -2
  120. package/drizzle/0034_human_instruction.sql +1 -0
  121. package/drizzle/0035_agent_release.sql +4 -0
  122. package/drizzle/0036_adopt_claude_mem.sql +1 -0
  123. package/package.json +5 -3
  124. package/.next/standalone/.next/server/chunks/382.js +0 -31
  125. package/.next/standalone/.next/server/chunks/468.js +0 -1
  126. package/.next/standalone/.next/server/chunks/822.js +0 -1
  127. package/.next/standalone/.next/server/chunks/99.js +0 -18
  128. package/.next/standalone/.next/static/chunks/1298-7ac9c00c70b27598.js +0 -1
  129. package/.next/standalone/.next/static/chunks/3433-719d6f55f39342d8.js +0 -1
  130. package/.next/standalone/.next/static/chunks/3894-c7b01dcfcf83d89b.js +0 -1
  131. package/.next/standalone/.next/static/chunks/7690-6dcfd9ae4cbf4e7d.js +0 -1
  132. package/.next/standalone/.next/static/chunks/app/adrs/page-1dfee698ea4c111f.js +0 -1
  133. package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-8a9e4ed64c3303fe.js +0 -1
  134. package/.next/standalone/.next/static/chunks/app/jobs/page-4180ccc9acd3ddba.js +0 -1
  135. package/.next/standalone/.next/static/chunks/app/layout-189fa697d72d1fdf.js +0 -1
  136. package/.next/standalone/.next/static/chunks/app/needs-human/page-e458ffa78c06a6fa.js +0 -1
  137. package/.next/standalone/.next/static/chunks/app/page-add53cbf6d87a3f5.js +0 -1
  138. package/.next/standalone/.next/static/chunks/app/prompts/page-ff6cc30777232933.js +0 -1
  139. package/.next/standalone/.next/static/chunks/app/repos/[id]/page-cd11007841a5d73f.js +0 -1
  140. package/.next/standalone/.next/static/chunks/app/settings/page-280668b9c92e9b48.js +0 -1
  141. package/.next/static/chunks/1298-7ac9c00c70b27598.js +0 -1
  142. package/.next/static/chunks/3433-719d6f55f39342d8.js +0 -1
  143. package/.next/static/chunks/3894-c7b01dcfcf83d89b.js +0 -1
  144. package/.next/static/chunks/7690-6dcfd9ae4cbf4e7d.js +0 -1
  145. package/.next/static/chunks/app/adrs/page-1dfee698ea4c111f.js +0 -1
  146. package/.next/static/chunks/app/jobs/[id]/page-8a9e4ed64c3303fe.js +0 -1
  147. package/.next/static/chunks/app/jobs/page-4180ccc9acd3ddba.js +0 -1
  148. package/.next/static/chunks/app/layout-189fa697d72d1fdf.js +0 -1
  149. package/.next/static/chunks/app/needs-human/page-e458ffa78c06a6fa.js +0 -1
  150. package/.next/static/chunks/app/page-add53cbf6d87a3f5.js +0 -1
  151. package/.next/static/chunks/app/prompts/page-ff6cc30777232933.js +0 -1
  152. package/.next/static/chunks/app/repos/[id]/page-cd11007841a5d73f.js +0 -1
  153. package/.next/static/chunks/app/settings/page-280668b9c92e9b48.js +0 -1
  154. /package/.next/standalone/.next/static/{-sJQutzNDvUvcdmf3YlJA → gBXyOslZ8CoJrAVnOEHDm}/_buildManifest.js +0 -0
  155. /package/.next/standalone/.next/static/{-sJQutzNDvUvcdmf3YlJA → gBXyOslZ8CoJrAVnOEHDm}/_ssgManifest.js +0 -0
  156. /package/.next/static/{-sJQutzNDvUvcdmf3YlJA → gBXyOslZ8CoJrAVnOEHDm}/_buildManifest.js +0 -0
  157. /package/.next/static/{-sJQutzNDvUvcdmf3YlJA → gBXyOslZ8CoJrAVnOEHDm}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=40,exports.ids=[40],exports.modules={11183:(a,b,c)=>{c.d(b,{oW:()=>z,$p:()=>y,VL:()=>B,u3:()=>A});var d=c(14565),e=c(89642),f=c(26370);let g="main";async function h(a,b,c){try{let d=await a("git",["-C",b,...c]);if(0!==d.exitCode)return null;return d.stdout.trim()||null}catch{return null}}async function i(a,b=f.Sx){let c=await h(b,a,["symbolic-ref","--short","refs/remotes/origin/HEAD"]);if(c){let a=c.replace(/^origin\//,"");if(a)return a}let d=await h(b,a,["rev-parse","--abbrev-ref","HEAD"]);return d&&"HEAD"!==d?d:g}async function j(a,b=f.Sx){let c=a.defaultBranch?.trim();return c||i(a.path,b)}var k=c(88162),l=c(79241),m=c(67055),n=c(95310),o=c(92958),p=c(51769),q=c(20200),r=c(3061),s=c(70040),t=c(16719),u=c(41575);function v(a){return m.YO(m.Yj()).default(()=>JSON.parse(a)).transform(a=>JSON.stringify(a))}let w=m.Ik({path:m.Yj().min(1,"path is required"),name:m.Yj().min(1,"name is required"),defaultBranch:m.Yj().min(1).default("main"),queueLabel:m.Yj().min(1).default("drydock:queue"),workingLabel:m.Yj().min(1).default("drydock:working"),needsHumanLabel:m.Yj().min(1).default("drydock:needs-human"),defaultModel:m.Yj().min(1).default("claude-opus-4-8"),agent:m.k5(["claude","codex","openrouter"]).default("claude"),platform:m.k5(["github","gitlab"]).default("github"),apiBaseUrl:m.Yj().refine(a=>""===a||(0,p.g)(a),{message:"apiBaseUrl must be an absolute http(s) URL"}).nullish(),apiToken:m.Yj().nullish(),dailyCostLimitUsd:m.ai().nonnegative().default(10),adrGating:m.zM().default(!1),sequential:m.zM().default(!0),autoTriageEnabled:m.zM().default(!1),autoProcessEnabled:m.zM().default(!1),autoHealCi:m.zM().default(!1),autoReviewFeedback:m.zM().default(!0),autoResolveMergeConflicts:m.zM().default(!1),includeProgressReplies:m.zM().default(!1),autoDecompose:m.zM().default(!1),planFirst:m.zM().default(!1),verifyPr:m.zM().default(!1),autoHealDeployments:m.zM().default(!1),releaseEnabled:m.zM().default(!1),deploymentPlatform:m.k5(["vercel","railway"]).nullish(),readyLabels:v('["ready","ready-for-agent","ready-to-work"]'),blockingLabels:v('["blocked","question","needs-human","needs-discussion","wontfix","duplicate","invalid"]'),autoLabelWhitelist:v('["bug","enhancement","documentation","ready"]'),priorityAuthors:v("[]"),trustedReviewers:v("[]"),trustedBots:v('["cursor[bot]","coderabbitai[bot]"]'),ignoredBots:v('["dependabot[bot]","github-actions[bot]","codecov[bot]"]'),minAuthorAssociation:m.k5(["approved","any"]).default("approved"),maxAttempts:m.ai().int().positive().default(3),maxJobMinutes:m.ai().int().nonnegative().nullish(),maxCiWaitMinutes:m.ai().int().nonnegative().nullish(),mergeGateMinutes:m.ai().int().nonnegative().default(0),mergeWithoutChecks:m.zM().default(!1),maxJobCostUsd:m.ai().nonnegative().nullish(),agentInstructions:m.Yj().max(t.v).nullish(),webhookSecret:m.Yj().nullish(),autoPrAudit:m.zM().default(!1),prAuditAgent:m.k5(["claude","codex"]).nullish(),prAuditModel:m.Yj().min(1).refine(q.WM,{message:"unknown model id"}).nullish(),prAuditLanguage:m.Yj().regex(/^[a-zA-Z]{2,8}(-[a-zA-Z0-9]{1,8})*$/,{message:"prAuditLanguage must be a simple or BCP 47 language code"}).default("en"),prAuditPostOnPr:m.zM().default(!1),escalateModelOnRetry:m.zM().default(!1),sandbox:m.k5(["none","docker"]).default("none"),sandboxImage:m.Yj().nullish(),sandboxAllowNetwork:m.zM().default(!1),sandboxCpus:m.Yj().nullish(),sandboxMemory:m.Yj().nullish()});function x(a,b,c){if("openrouter"===a){let a=(0,r.Hi)(b,c);if(!a||!(0,r.fj)(a))throw Error(`OpenRouter model "${b}" is not in the synced catalog (or no longer available) — refresh the catalog in Settings or pick a different model`);if((0,u.mt)(c).openrouterFreeModelsOnly&&!a.isFree)throw Error(`OpenRouter model "${b}" is not free and the free-models-only policy is enabled`);return}if(!(0,q.WM)(b))throw Error("unknown model id")}async function y(a){return a.trim()?i(a):g}async function z(a){let b=await j(a),c=function(a,b=(0,n.Lf)()){let c=w.parse(a);return x(c.agent,c.defaultModel,b),b.insert(o.repos).values(c).returning().get()}({...a,defaultBranch:b});return(0,e.revalidatePath)("/"),(0,k.ej)(),c}async function A(a,b){let c=function(a,b,c=(0,n.Lf)()){let d,e=Object.fromEntries(Object.entries(w.partial().parse(b)).filter(([a])=>a in b&&void 0!==b[a]));if(void 0!==e.agent||void 0!==e.defaultModel){if(!(d=c.select().from(o.repos).where((0,l.eq)(o.repos.id,a)).get()))throw Error(`repo ${a} not found`);x(e.agent??d.agent,e.defaultModel??d.defaultModel,c)}if(0===Object.keys(e).length){if(!(d??=c.select().from(o.repos).where((0,l.eq)(o.repos.id,a)).get()))throw Error(`repo ${a} not found`);return d}let f=c.update(o.repos).set(e).where((0,l.eq)(o.repos.id,a)).returning().get();if(!f)throw Error(`repo ${a} not found`);return f}(a,b);return(0,e.revalidatePath)("/"),(0,e.revalidatePath)(`/repos/${a}`),(0,k.ej)(),c}async function B(a){!function(a,b=(0,n.Lf)()){b.transaction(()=>{let c=b.select({id:o.jobs.id}).from(o.jobs).where((0,l.Uo)((0,l.eq)(o.jobs.repoId,a),(0,l.KL)(o.jobs.status,[...s.kl]))).all();if(c.length>0)throw Error(`Cannot remove this repository: ${c.length} job(s) are still active. Abort or finish them first.`);b.delete(o.repos).where((0,l.eq)(o.repos.id,a)).run()})}(a),(0,e.revalidatePath)("/"),(0,k.ej)()}(0,c(13897).D)([y,z,A,B]),(0,d.A)(y,"40ff46484b8d0230f28e7853cff3b0037220bc4029",null),(0,d.A)(z,"40fd63aacb5de1dd97754363caf4af17282a4ba203",null),(0,d.A)(A,"60861191b2d2651b7286a7965542afae3ae420dd40",null),(0,d.A)(B,"40fcc887f9ff7ac5868aa79ea734267acaafdf2939",null)},22096:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(71859).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},37756:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(71859).A)("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]])},40104:(a,b,c)=>{c.d(b,{Sparkline:()=>g});var d=c(27905),e=c(35924),f=c(62507);function g({data:a,width:b=132,height:c=36,tone:h="chart-1",fill:i=!0,strokeWidth:j=1.75,average:k=!1}){let l=`sp${(0,e.useId)().replace(/:/g,"")}`;if(0===a.length)return null;let m=Math.min(...a),n=Math.max(...a)-m||1,o=a.length>1?b/(a.length-1):b,p=a.map((a,b)=>[b*o,c-3-(a-m)/n*(c-6)]),q=p.map((a,b)=>`${b?"L":"M"}${a[0].toFixed(1)} ${a[1].toFixed(1)}`).join(" "),r=`${q} L${b} ${c} L0 ${c} Z`,s=(0,f.U)(h),t=p[p.length-1]??[0,c-3],u=c-3-(a.reduce((a,b)=>a+b,0)/a.length-m)/n*(c-6);return(0,d.jsxs)("svg",{width:b,height:c,viewBox:`0 0 ${b} ${c}`,className:"overflow-visible","aria-hidden":"true",children:[i&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("defs",{children:(0,d.jsxs)("linearGradient",{id:l,x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"0%",stopColor:s,stopOpacity:"0.22"}),(0,d.jsx)("stop",{offset:"100%",stopColor:s,stopOpacity:"0"})]})}),(0,d.jsx)("path",{d:r,fill:`url(#${l})`})]}),k&&a.length>1&&(0,d.jsx)("line",{x1:0,x2:b,y1:u,y2:u,stroke:"hsl(var(--muted-foreground) / 0.45)",strokeWidth:1,strokeDasharray:"3 3"}),(0,d.jsx)("path",{d:q,fill:"none",stroke:s,strokeWidth:j,strokeLinecap:"round",strokeLinejoin:"round"}),(0,d.jsx)("circle",{cx:t[0],cy:t[1],r:2.5,fill:s})]})}},62507:(a,b,c)=>{c.d(b,{U:()=>d});function d(a){return a?`hsl(var(--${a}))`:"hsl(var(--muted-foreground))"}}};
1
+ "use strict";exports.id=40,exports.ids=[40],exports.modules={11183:(a,b,c)=>{c.d(b,{oW:()=>z,$p:()=>y,VL:()=>B,u3:()=>A});var d=c(14565),e=c(89642),f=c(26370);let g="main";async function h(a,b,c){try{let d=await a("git",["-C",b,...c]);if(0!==d.exitCode)return null;return d.stdout.trim()||null}catch{return null}}async function i(a,b=f.Sx){let c=await h(b,a,["symbolic-ref","--short","refs/remotes/origin/HEAD"]);if(c){let a=c.replace(/^origin\//,"");if(a)return a}let d=await h(b,a,["rev-parse","--abbrev-ref","HEAD"]);return d&&"HEAD"!==d?d:g}async function j(a,b=f.Sx){let c=a.defaultBranch?.trim();return c||i(a.path,b)}var k=c(88162),l=c(79241),m=c(67055),n=c(95310),o=c(92958),p=c(51769),q=c(20200),r=c(3061),s=c(70040),t=c(16719),u=c(41575);function v(a){return m.YO(m.Yj()).default(()=>JSON.parse(a)).transform(a=>JSON.stringify(a))}let w=m.Ik({path:m.Yj().min(1,"path is required"),name:m.Yj().min(1,"name is required"),defaultBranch:m.Yj().min(1).default("main"),queueLabel:m.Yj().min(1).default("drydock:queue"),workingLabel:m.Yj().min(1).default("drydock:working"),needsHumanLabel:m.Yj().min(1).default("drydock:needs-human"),defaultModel:m.Yj().min(1).default("claude-opus-4-8"),agent:m.k5(["claude","codex","openrouter"]).default("claude"),platform:m.k5(["github","gitlab"]).default("github"),apiBaseUrl:m.Yj().refine(a=>""===a||(0,p.g)(a),{message:"apiBaseUrl must be an absolute http(s) URL"}).nullish(),apiToken:m.Yj().nullish(),dailyCostLimitUsd:m.ai().nonnegative().default(0),adrGating:m.zM().default(!1),sequential:m.zM().default(!0),autoTriageEnabled:m.zM().default(!0),autoProcessEnabled:m.zM().default(!0),autoHealCi:m.zM().default(!0),autoReviewFeedback:m.zM().default(!0),autoResolveMergeConflicts:m.zM().default(!0),includeProgressReplies:m.zM().default(!1),autoDecompose:m.zM().default(!0),planFirst:m.zM().default(!1),verifyPr:m.zM().default(!0),autoHealDeployments:m.zM().default(!1),releaseEnabled:m.zM().default(!1),deploymentPlatform:m.k5(["vercel","railway"]).nullish(),readyLabels:v('["ready","ready-for-agent","ready-to-work"]'),blockingLabels:v('["blocked","question","needs-human","needs-discussion","wontfix","duplicate","invalid"]'),autoLabelWhitelist:v('["bug","enhancement","documentation","ready"]'),priorityAuthors:v("[]"),trustedReviewers:v("[]"),trustedBots:v('["cursor[bot]","coderabbitai[bot]"]'),ignoredBots:v('["dependabot[bot]","github-actions[bot]","codecov[bot]"]'),minAuthorAssociation:m.k5(["approved","any"]).default("approved"),maxAttempts:m.ai().int().positive().default(3),maxJobMinutes:m.ai().int().nonnegative().nullish(),maxCiWaitMinutes:m.ai().int().nonnegative().nullish(),mergeGateMinutes:m.ai().int().nonnegative().default(0),mergeWithoutChecks:m.zM().default(!1),maxJobCostUsd:m.ai().nonnegative().nullish(),agentInstructions:m.Yj().max(t.v).nullish(),webhookSecret:m.Yj().nullish(),autoPrAudit:m.zM().default(!0),prAuditAgent:m.k5(["claude","codex"]).nullish(),prAuditModel:m.Yj().min(1).refine(q.WM,{message:"unknown model id"}).nullish(),prAuditLanguage:m.Yj().regex(/^[a-zA-Z]{2,8}(-[a-zA-Z0-9]{1,8})*$/,{message:"prAuditLanguage must be a simple or BCP 47 language code"}).default("en"),prAuditPostOnPr:m.zM().default(!1),escalateModelOnRetry:m.zM().default(!1),sandbox:m.k5(["none","docker"]).default("none"),sandboxImage:m.Yj().nullish(),sandboxAllowNetwork:m.zM().default(!1),sandboxCpus:m.Yj().nullish(),sandboxMemory:m.Yj().nullish(),adoptClaudeMem:m.zM().default(!1)});function x(a,b,c){if("openrouter"===a){let a=(0,r.Hi)(b,c);if(!a||!(0,r.fj)(a))throw Error(`OpenRouter model "${b}" is not in the synced catalog (or no longer available) — refresh the catalog in Settings or pick a different model`);if((0,u.mt)(c).openrouterFreeModelsOnly&&!a.isFree)throw Error(`OpenRouter model "${b}" is not free and the free-models-only policy is enabled`);return}if(!(0,q.WM)(b))throw Error("unknown model id")}async function y(a){return a.trim()?i(a):g}async function z(a){let b=await j(a),c=function(a,b=(0,n.Lf)()){let c=w.parse(a);return x(c.agent,c.defaultModel,b),b.insert(o.repos).values(c).returning().get()}({...a,defaultBranch:b});return(0,e.revalidatePath)("/"),(0,k.ej)(),c}async function A(a,b){let c=function(a,b,c=(0,n.Lf)()){let d,e=Object.fromEntries(Object.entries(w.partial().parse(b)).filter(([a])=>a in b&&void 0!==b[a]));if(void 0!==e.agent||void 0!==e.defaultModel){if(!(d=c.select().from(o.repos).where((0,l.eq)(o.repos.id,a)).get()))throw Error(`repo ${a} not found`);x(e.agent??d.agent,e.defaultModel??d.defaultModel,c)}if(0===Object.keys(e).length){if(!(d??=c.select().from(o.repos).where((0,l.eq)(o.repos.id,a)).get()))throw Error(`repo ${a} not found`);return d}let f=c.update(o.repos).set(e).where((0,l.eq)(o.repos.id,a)).returning().get();if(!f)throw Error(`repo ${a} not found`);return f}(a,b);return(0,e.revalidatePath)("/"),(0,e.revalidatePath)(`/repos/${a}`),(0,k.ej)(),c}async function B(a){!function(a,b=(0,n.Lf)()){b.transaction(()=>{let c=b.select({id:o.jobs.id}).from(o.jobs).where((0,l.Uo)((0,l.eq)(o.jobs.repoId,a),(0,l.KL)(o.jobs.status,[...s.kl]))).all();if(c.length>0)throw Error(`Cannot remove this repository: ${c.length} job(s) are still active. Abort or finish them first.`);b.delete(o.repos).where((0,l.eq)(o.repos.id,a)).run()})}(a),(0,e.revalidatePath)("/"),(0,k.ej)()}(0,c(13897).D)([y,z,A,B]),(0,d.A)(y,"40328ee6b94d3714897e8dc923d8ac524f3b739202",null),(0,d.A)(z,"40aee73460344615dd6abf795f8eee1a3244be843e",null),(0,d.A)(A,"600ab73aefdfa18cb73f40404e31cac1a432251128",null),(0,d.A)(B,"4054080db167d1cf1abb31c2d68ee13cfd3f079979",null)},22096:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(71859).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},37756:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(71859).A)("inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]])},40104:(a,b,c)=>{c.d(b,{Sparkline:()=>g});var d=c(27905),e=c(35924),f=c(62507);function g({data:a,width:b=132,height:c=36,tone:h="chart-1",fill:i=!0,strokeWidth:j=1.75,average:k=!1}){let l=`sp${(0,e.useId)().replace(/:/g,"")}`;if(0===a.length)return null;let m=Math.min(...a),n=Math.max(...a)-m||1,o=a.length>1?b/(a.length-1):b,p=a.map((a,b)=>[b*o,c-3-(a-m)/n*(c-6)]),q=p.map((a,b)=>`${b?"L":"M"}${a[0].toFixed(1)} ${a[1].toFixed(1)}`).join(" "),r=`${q} L${b} ${c} L0 ${c} Z`,s=(0,f.U)(h),t=p[p.length-1]??[0,c-3],u=c-3-(a.reduce((a,b)=>a+b,0)/a.length-m)/n*(c-6);return(0,d.jsxs)("svg",{width:b,height:c,viewBox:`0 0 ${b} ${c}`,className:"overflow-visible","aria-hidden":"true",children:[i&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("defs",{children:(0,d.jsxs)("linearGradient",{id:l,x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,d.jsx)("stop",{offset:"0%",stopColor:s,stopOpacity:"0.22"}),(0,d.jsx)("stop",{offset:"100%",stopColor:s,stopOpacity:"0"})]})}),(0,d.jsx)("path",{d:r,fill:`url(#${l})`})]}),k&&a.length>1&&(0,d.jsx)("line",{x1:0,x2:b,y1:u,y2:u,stroke:"hsl(var(--muted-foreground) / 0.45)",strokeWidth:1,strokeDasharray:"3 3"}),(0,d.jsx)("path",{d:q,fill:"none",stroke:s,strokeWidth:j,strokeLinecap:"round",strokeLinejoin:"round"}),(0,d.jsx)("circle",{cx:t[0],cy:t[1],r:2.5,fill:s})]})}},62507:(a,b,c)=>{c.d(b,{U:()=>d});function d(a){return a?`hsl(var(--${a}))`:"hsl(var(--muted-foreground))"}}};
@@ -0,0 +1 @@
1
+ exports.id=403,exports.ids=[403],exports.modules={772:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(34215).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/drydock/drydock/node_modules/.pnpm/lucide-react@1.18.0_react@19.2.7/node_modules/lucide-react/dist/esm/Icon.mjs\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/drydock/drydock/node_modules/.pnpm/lucide-react@1.18.0_react@19.2.7/node_modules/lucide-react/dist/esm/Icon.mjs","default")},1711:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]])},7100:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=c(56590),e=c(49307),f=c(88144),g=c(2036),h=c(75429),i=c(59977);("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},8978:(a,b,c)=>{"use strict";var d=c(59234);c.o(d,"notFound")&&c.d(b,{notFound:function(){return d.notFound}})},10285:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("corner-down-right",[["path",{d:"m15 10 5 5-5 5",key:"qqa56n"}],["path",{d:"M4 4v7a4 4 0 0 0 4 4h12",key:"z08zvw"}]])},10781:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return d}});class c extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class d extends URLSearchParams{append(){throw new c}delete(){throw new c}set(){throw new c}sort(){throw new c}}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},12248:(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}function e(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}c.r(b),c.d(b,{_:()=>e})},16027:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(98022),g=c(76844),h=c(19121).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},22089:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]])},29295:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]])},30263:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(30285).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},30285:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(8578);let e=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var f=c(772);let g=(a,b)=>{let c=(0,d.forwardRef)(({className:c,...g},h)=>(0,d.createElement)(f.default,{ref:h,iconNode:b,className:((...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim())(`lucide-${e(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,c),...g}));return c.displayName=e(a),c}},38186:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("arrow-up-to-line",[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]])},41645:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=c(7100).unstable_rethrow;("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},44697:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},45030:(a,b,c)=>{let{createProxy:d}=c(81374);a.exports=d("/home/runner/work/drydock/drydock/node_modules/.pnpm/next@16.2.9_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/client/app-dir/link.js")},49616:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]])},50411:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"notFound",{enumerable:!0,get:function(){return f}});let d=c(61222),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},52097:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]])},52457:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"unauthorized",{enumerable:!0,get:function(){return d}}),c(61222).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},59234:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(10781),g=c(16027),h=c(50411),i=c(90734),j=c(52457),k=c(41645);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},60501:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},77283:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={default:function(){return i},useLinkStatus:function(){return h.useLinkStatus}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(12248),g=c(87383),h=f._(c(45030));function i(a){let b=a.legacyBehavior,c="string"==typeof a.children||"number"==typeof a.children||"string"==typeof a.children?.type,d=a.children?.type?.$$typeof===Symbol.for("react.client.reference");return!b||c||d||(a.children?.type?.$$typeof===Symbol.for("react.lazy")?console.error("Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's `<a>` tag."):console.error("Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's `<a>` tag.")),(0,g.jsx)(h.default,{...a})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},79874:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(30285).A)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},80851:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])},85117:(a,b,c)=>{"use strict";c.d(b,{aY:()=>bR});var d=c(27905),e=c(35924),f=c(65061);function g(a){a()}function h(a,b){return c=>a(b(c))}function i(a){return void 0!==a}function j(){}function k(a,b){return b(a)}function l(...a){return a}function m(a){a(2)}function n(a){return a(4)}function o(a,b){return a(1,a=>b(0,a))}function p(a,b){let c=a(1,a=>{c(),b(a)});return c}function q(a){let b,c;return d=>e=>{b=e,c&&clearTimeout(c),c=setTimeout(()=>{d(b)},a)}}function r(a,b){return a===b}function s(a=r){let b;return c=>d=>{a(b,d)||(b=d,c(d))}}function t(a){return b=>c=>{a(c)&&b(c)}}function u(a){return b=>h(b,a)}function v(a){return b=>()=>{b(a)}}function w(a,...b){let c=function(...a){return b=>a.reduceRight(k,b)}(...b);return(b,d)=>{switch(b){case 2:m(a);return;case 1:return a(1,c(d))}}}function x(a,b){return c=>d=>{c(b=a(b,d))}}function y(a){return b=>c=>{a>0?a--:b(c)}}function z(a){let b=null,c;return d=>e=>{b=e,c||(c=setTimeout(()=>{c=void 0,d(b)},a))}}function A(...a){let b=Array(a.length),c=0,d=null,e=2**a.length-1;return a.forEach((a,f)=>{let g=2**f;a(1,a=>{let h=c;c|=g,b[f]=a,h!==e&&c===e&&d&&(d(),d=null)})}),a=>f=>{let g=()=>{a([f].concat(b))};c===e?g():d=g}}function B(a){let b=a,c=D();return(a,d)=>{switch(a){case 0:b=d;break;case 1:d(b);break;case 4:return b}return c(a,d)}}function C(a,b){var c;return c=B(b),o(a,c),c}function D(){let a=[];return(b,c)=>{switch(b){case 0:a.slice().forEach(a=>{a(c)});return;case 2:a.splice(0,a.length);return;case 1:return a.push(c),()=>{let b=a.indexOf(c);b>-1&&a.splice(b,1)}}}}function E(a){var b;return b=D(),o(a,b),b}function F(a,b=[],{singleton:c}={singleton:!0}){return{constructor:a,dependencies:b,id:G(),singleton:c}}let G=()=>Symbol();function H(...a){let b=D(),c=Array(a.length),d=0,e=2**a.length-1;return a.forEach((a,f)=>{let g=2**f;a(1,a=>{c[f]=a,(d|=g)===e&&b(0,c)})}),function(a,f){switch(a){case 2:return void m(b);case 1:return d===e&&f(c),b(1,f)}}}function I(a,b=r){return w(a,s(b))}function J(...a){return function(b,c){switch(b){case 2:return;case 1:return function(...a){return()=>{a.map(g)}}(...a.map(a=>a(1,c)))}}}let K=1,L={0:"debug",3:"error",[K]:"log",2:"warn"},M=F(()=>{let a=B(3);return{log:B((b,c,d=K)=>{d>=((typeof globalThis>"u"?window:globalThis).VIRTUOSO_LOG_LEVEL??n(a))&&console[L[d]]("%creact-virtuoso: %c%s %o","color: #0253b3; font-weight: bold","color: initial",b,c)}),logLevel:a}},[],{singleton:!0}),N=new WeakMap;function O(a){return"self"in a?a.document.documentElement:a}function P(a){N.delete(O(a))}function Q(a,b){return!function(a){let b=O(a),c=N.get(b);if(void 0!==c)return c;let d="rtl"===b.ownerDocument.defaultView.getComputedStyle(b).direction;return N.set(b,d),d}(a)?b:-b}function R(a,b,c){return S(a,b,c).callbackRef}function S(a,b,c){let d=e.useRef(null),f=e.useMemo(()=>"u">typeof ResizeObserver?new ResizeObserver(b=>{let d=()=>{let c=b[0].target;null!==c.offsetParent&&a(c)};c?d():requestAnimationFrame(d)}):null,[a,c]);return{callbackRef:a=>{a&&b?(f?.observe(a),d.current=a):(d.current&&f?.unobserve(d.current),d.current=null)},ref:d}}function T(a,b,c,d,f,g,h,i,j){return S(e.useCallback(c=>{let e,j=function(a,b,c,d){let e=a.length;if(0===e)return null;let f=[];for(let g=0;g<e;g++){let e=a.item(g);if(void 0===e.dataset.index)continue;let h=parseInt(e.dataset.index),i=parseFloat(e.dataset.knownSize),j=b(e,c);if(0===j&&d("Zero-sized element, this should not happen",{child:e},3),j===i)continue;let k=f[f.length-1];0===f.length||k.size!==j||k.endIndex!==h-1?f.push({endIndex:h,size:j,startIndex:h}):f[f.length-1].endIndex++}return f}(c.children,b,i?"offsetWidth":"offsetHeight",f),k=c.parentElement;for(;void 0===k.dataset.virtuosoScroller;)k=k.parentElement;let l="window"===k.lastElementChild.dataset.viewportType;l&&(e=k.ownerDocument.defaultView);let m=h?i?h.scrollWidth:h.scrollHeight:l?i?e.document.documentElement.scrollWidth:e.document.documentElement.scrollHeight:i?k.scrollWidth:k.scrollHeight,n=h?i?h.offsetWidth:h.offsetHeight:l?i?e.innerWidth:e.innerHeight:i?k.offsetWidth:k.offsetHeight;d({scrollHeight:m,scrollTop:Math.max(h?i?Q(h,h.scrollLeft):h.scrollTop:l?i?Q(e,e.scrollX||e.document.documentElement.scrollLeft):e.scrollY||e.document.documentElement.scrollTop:i?Q(k,k.scrollLeft):k.scrollTop,0),viewportHeight:n}),g?.(i?U("column-gap",getComputedStyle(c).columnGap,f):U("row-gap",getComputedStyle(c).rowGap,f)),null!==j&&a(j)},[a,b,f,g,h,d,i]),c,j)}function U(a,b,c){return"normal"!==b&&b?.endsWith("px")!==!0&&c(`${a} was not resolved to pixel value correctly`,b,2),"normal"===b?0:parseInt(b??"0",10)}function V(a,b,c){let d=e.useRef(null),f=e.useCallback(c=>{let e,f;if(!c?.offsetParent)return;let g=c.getBoundingClientRect(),i=g.width;if(b){let a=b.getBoundingClientRect(),c=g.top-a.top;f=a.height-Math.max(0,c),e=c+b.scrollTop}else{let a=h.current.ownerDocument.defaultView;f=a.innerHeight-Math.max(0,g.top),e=g.top+a.scrollY}d.current={listHeight:g.height,offsetTop:e,visibleHeight:f,visibleWidth:i},a(d.current)},[a,b]),{callbackRef:g,ref:h}=S(f,!0,c),i=e.useCallback(()=>{f(h.current)},[f,h]);return e.useEffect(()=>{if(b){b.addEventListener("scroll",i);let a=new ResizeObserver(()=>{requestAnimationFrame(i)});return a.observe(b),()=>{b.removeEventListener("scroll",i),a.unobserve(b)}}let a=h.current?.ownerDocument.defaultView;return a?.addEventListener("scroll",i),a?.addEventListener("resize",i),()=>{a?.removeEventListener("scroll",i),a?.removeEventListener("resize",i)}},[i,b,h]),g}let W=F(()=>{let a=D(),b=D(),c=B(0),d=D(),e=B(0),f=D(),g=D(),h=B(0),i=B(0),j=B(0),k=B(0),l=D(),m=D(),n=B(!1),p=B(!1),q=B(!1);return o(w(a,u(({scrollTop:a})=>a)),b),o(w(a,u(({scrollHeight:a})=>a)),g),o(b,e),{deviation:c,fixedFooterHeight:j,fixedHeaderHeight:i,footerHeight:k,headerHeight:h,horizontalDirection:p,scrollBy:m,scrollContainerState:a,scrollHeight:g,scrollingInProgress:n,scrollTo:l,scrollTop:b,skipAnimationFrameInResizeObserver:q,smoothScrollTargetReached:d,statefulScrollTop:e,viewportHeight:f}},[],{singleton:!0}),X={lvl:0};function Y(a,b){let c=a.length;if(0===c)return[];let{index:d,value:e}=b(a[0]),f=[];for(let g=1;g<c;g++){let{index:c,value:h}=b(a[g]);f.push({end:c-1,start:d,value:e}),d=c,e=h}return f.push({end:1/0,start:d,value:e}),f}function Z(a){return a===X}function $(a,b){if(!Z(a))return b===a.k?a.v:b<a.k?$(a.l,b):$(a.r,b)}function _(a,b,c="k"){if(Z(a))return[-1/0,void 0];if(Number(a[c])===b)return[a.k,a.v];if(Number(a[c])<b){let d=_(a.r,b,c);return d[0]===-1/0?[a.k,a.v]:d}return _(a.l,b,c)}function aa(a,b,c){return Z(a)?ag(b,c,1):b===a.k?ae(a,{k:b,v:c}):b<a.k?ai(ah(ae(a,{l:aa(a.l,b,c)}))):ai(ah(ae(a,{r:aa(a.r,b,c)})))}function ab(a,b,c){if(Z(a))return[];let d=_(a,b)[0];return Y(function a(b,c,d){if(Z(b))return[];let{k:e,l:f,r:g,v:h}=b,i=[];return e>c&&(i=i.concat(a(f,c,d))),e>=c&&e<=d&&i.push({k:e,v:h}),e<=d&&(i=i.concat(a(g,c,d))),i}(a,d,c),({k:a,v:b})=>({index:a,value:b}))}function ac(a){return Z(a)?[]:[...ac(a.l),{k:a.k,v:a.v},...ac(a.r)]}function ad(a){let{l:b,lvl:c,r:d}=a;if(d.lvl>=c-1&&b.lvl>=c-1)return a;if(c>d.lvl+1){if(af(b))return ah(ae(a,{lvl:c-1}));if(!Z(b)&&!Z(b.r))return ae(b.r,{l:ae(b,{r:b.r.l}),lvl:c,r:ae(a,{l:b.r.r,lvl:c-1})});throw Error("Unexpected empty nodes")}if(af(a))return ai(ae(a,{lvl:c-1}));if(!Z(d)&&!Z(d.l)){let b=d.l,e=af(b)?d.lvl-1:d.lvl;return ae(b,{l:ae(a,{lvl:c-1,r:b.l}),lvl:b.lvl+1,r:ai(ae(d,{l:b.r,lvl:e}))})}throw Error("Unexpected empty nodes")}function ae(a,b){return ag(void 0!==b.k?b.k:a.k,void 0!==b.v?b.v:a.v,void 0!==b.lvl?b.lvl:a.lvl,void 0!==b.l?b.l:a.l,void 0!==b.r?b.r:a.r)}function af(a){return Z(a)||a.lvl>a.r.lvl}function ag(a,b,c,d=X,e=X){return{k:a,l:d,lvl:c,r:e,v:b}}function ah(a){let{l:b}=a;return Z(b)||b.lvl!==a.lvl?a:ae(b,{r:ae(a,{l:b.r})})}function ai(a){let{lvl:b,r:c}=a;return Z(c)||Z(c.r)||c.lvl!==b||c.r.lvl!==b?a:ae(c,{l:ae(a,{r:c.l}),lvl:b+1})}function aj(a,b){return!!(a&&a.startIndex===b.startIndex&&a.endIndex===b.endIndex)}function ak(a,b){return!!(a&&a[0]===b[0]&&a[1]===b[1])}let al=F(()=>({recalcInProgress:B(!1)}),[],{singleton:!0});function am(a,b,c,d=0){let e=a.length-1;for(;d<=e;){let f=Math.floor((d+e)/2),g=c(a[f],b);if(0===g)return f;if(-1===g){if(e-d<2)return f-1;e=f-1}else{if(e===d)return f;d=f+1}}throw Error(`Failed binary finding record in array - ${a.join(",")}, searched for ${b}`)}function an(a,b){return Math.round(a.getBoundingClientRect()[b])}function ao(a){return!Z(a.groupOffsetTree)}function ap({index:a},b){return b===a?0:b<a?-1:1}function aq({offset:a},b){return b===a?0:b<a?-1:1}function ar(a,b,c){if(0===b.length)return 0;let{index:d,offset:e,size:f}=b[am(b,a,ap)],g=a-d,h=f*g+(g-1)*c+e;return h>0?h+c:h}function as(a,b){if(!ao(b))return a;let c=0;for(;b.groupIndices[c]<=a+c;)c++;return a+c}function at(a,b,c){if("u">typeof a.groupIndex)return b.groupIndices[a.groupIndex]+1;let d=as("LAST"===a.index?c:a.index,b);return Math.max(0,d,Math.min(c,d))}function au(a,[b,c,d,e]){b.length>0&&d("received item sizes",b,0);let f=a.sizeTree,g=f,h=0;if(c.length>0&&Z(f)&&2===b.length){let a=b[0].size,d=b[1].size;g=c.reduce((b,c)=>aa(aa(b,c,a),c+1,d),g)}else[g,h]=function(a,b){let c=Z(a)?0:1/0;for(let d of b){let{endIndex:b,size:e,startIndex:f}=d;if(c=Math.min(c,f),Z(a)){a=aa(a,0,e);continue}let g=ab(a,f-1,b+1);if(g.some(function(a){let{endIndex:b,size:c,startIndex:d}=a;return a=>a.start===d&&(a.end===b||a.end===1/0)&&a.value===c}(d)))continue;let h=!1,i=!1;for(let{end:c,start:d,value:f}of g)h?(b>=d||e===f)&&(a=function a(b,c){if(Z(b))return X;let{k:d,l:e,r:f}=b;if(c===d){if(Z(e))return f;if(Z(f))return e;let[a,c]=function a(b){return Z(b.r)?[b.k,b.v]:a(b.r)}(e);return ad(ae(b,{k:a,l:function a(b){return Z(b.r)?b.l:ad(ae(b,{r:a(b.r)}))}(e),v:c}))}return c<d?ad(ae(b,{l:a(e,c)})):ad(ae(b,{r:a(f,c)}))}(a,d)):(i=f!==e,h=!0),c>b&&b>=d&&f!==e&&(a=aa(a,b+1,f));i&&(a=aa(a,f,e))}return[a,c]}(g,b);if(g===f)return a;let{lastIndex:i,lastOffset:j,lastSize:k,offsetTree:l}=aw(a.offsetTree,h,g,e);return{groupIndices:c,groupOffsetTree:c.reduce((a,b)=>aa(a,b,ar(b,l,e)),X),lastIndex:i,lastOffset:j,lastSize:k,offsetTree:l,sizeTree:g}}function av(a,b){let c=0,d=0;for(;c<a;)c+=b[d+1]-b[d]-1,d++;return d-(c!==a)}function aw(a,b,c,d){let e=a,f=0,g=0,h=0,i=0;if(0!==b){i=am(e,b-1,ap),h=e[i].offset;let a=_(c,b-1);f=a[0],g=a[1],e.length&&e[i].size===_(c,b)[1]&&(i-=1),e=e.slice(0,i+1)}else e=[];for(let{start:a,value:i}of ab(c,b,1/0)){let b=a-f,c=b*g+h+b*d;e.push({index:a,offset:c,size:i}),f=a,h=c,g=i}return{lastIndex:f,lastOffset:h,lastSize:g,offsetTree:e}}function ax(a){return{index:a.index,value:a}}let ay={offsetHeight:"height",offsetWidth:"width"},az=F(([{log:a},{recalcInProgress:b}])=>{let c=D(),d=D(),e=C(d,0),f=D(),g=D(),h=B(0),i=B([]),j=B(void 0),k=B(void 0),l=B(void 0),m=B(void 0),p=B((a,b)=>an(a,ay[b])),q=B(void 0),r=B(0),v={groupIndices:[],groupOffsetTree:X,lastIndex:0,lastOffset:0,lastSize:0,offsetTree:[],sizeTree:X},y=C(w(c,A(i,a,r),x(au,v),s()),v),z=C(w(i,s(),x((a,b)=>({current:b,prev:a.current}),{current:[],prev:[]}),u(({prev:a})=>a)),[]);o(w(i,t(a=>a.length>0),A(y,r),u(([a,b,c])=>{let d=a.reduce((a,d,e)=>aa(a,d,ar(d,b.offsetTree,c)||e),X);return{...b,groupIndices:a,groupOffsetTree:d}})),y),o(w(d,A(y),t(([a,{lastIndex:b}])=>a<b),u(([a,{lastIndex:b,lastSize:c}])=>[{endIndex:b,size:c,startIndex:a}])),c),o(j,k);let F=C(w(j,u(a=>void 0===a)),!0);o(w(k,t(a=>void 0!==a&&Z(n(y).sizeTree)),u(a=>{let b=n(l),c=n(i).length>0;return void 0!==b&&0!==b?c?[{endIndex:0,size:b,startIndex:0},{endIndex:1,size:a,startIndex:1}]:[]:[{endIndex:0,size:a,startIndex:0}]})),c),o(w(m,t(a=>void 0!==a&&a.length>0&&Z(n(y).sizeTree)),u(a=>{let b=[],c=a[0],d=0;for(let e=1;e<a.length;e++){let f=a[e];f!==c&&(b.push({endIndex:e-1,size:c,startIndex:d}),c=f,d=e)}return b.push({endIndex:a.length-1,size:c,startIndex:d}),b})),c),o(w(i,A(l,k),t(([,a,b])=>void 0!==a&&void 0!==b),u(([a,b,c])=>{let d=[];for(let e=0;e<a.length;e++){let f=a[e],g=a[e+1];d.push({startIndex:f,endIndex:f,size:b}),void 0!==g&&d.push({startIndex:f+1,endIndex:g-1,size:c})}return d})),c);let G=E(w(c,A(y),x(({sizes:a},[b,c])=>({changed:c!==a,sizes:c}),{changed:!1,sizes:v}),u(a=>a.changed)));w(h,x((a,b)=>({diff:a.prev-b,prev:b}),{diff:0,prev:0}),u(a=>a.diff))(1,a=>{let{groupIndices:c}=n(y);if(a>0)b(0,!0),f(0,a+av(a,c));else if(a<0){let b=n(z);b.length>0&&(a-=av(-a,b)),g(0,a)}}),w(h,A(a))(1,([a,b])=>{a<0&&b("`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value",{firstItemIndex:h},3)});let H=E(f);o(w(f,A(y),u(([a,b])=>{let c=b.groupIndices.length>0,d=[],e=b.lastSize;if(c){let c=$(b.sizeTree,0),f=0,g=0;for(;f<a;){let a=b.groupIndices[g],h=b.groupIndices.length===g+1?1/0:b.groupIndices[g+1]-a-1;d.push({endIndex:a,size:c,startIndex:a}),d.push({endIndex:a+1+h-1,size:e,startIndex:a+1}),g++,f+=h+1}let h=ac(b.sizeTree);return f!==a&&h.shift(),h.reduce((b,{k:c,v:d})=>{let e=b.ranges;return 0!==b.prevSize&&(e=[...b.ranges,{endIndex:c+a-1,size:b.prevSize,startIndex:b.prevIndex}]),{prevIndex:c+a,prevSize:d,ranges:e}},{prevIndex:a,prevSize:0,ranges:d}).ranges}return ac(b.sizeTree).reduce((b,{k:c,v:d})=>({prevIndex:c+a,prevSize:d,ranges:[...b.ranges,{endIndex:c+a-1,size:b.prevSize,startIndex:b.prevIndex}]}),{prevIndex:0,prevSize:e,ranges:[]}).ranges})),c);let I=E(w(g,A(y,r),u(([a,{offsetTree:b},c])=>ar(-a,b,c))));return o(w(g,A(y,r),u(([a,b,c])=>{if(b.groupIndices.length>0){if(Z(b.sizeTree))return b;let d=X,e=n(z),f=0,g=0,h=0;for(;f<-a;){h=e[g];let a=e[g+1]-h-1;g++,f+=a+1}return d=ac(b.sizeTree).reduce((b,{k:c,v:d})=>aa(b,Math.max(0,c+a),d),d),f!==-a&&(d=aa(d,0,$(b.sizeTree,h)),d=aa(d,1,_(b.sizeTree,-a+1)[1])),{...b,sizeTree:d,...aw(b.offsetTree,0,d,c)}}let d=ac(b.sizeTree).reduce((b,{k:c,v:d})=>aa(b,Math.max(0,c+a),d),X);return{...b,sizeTree:d,...aw(b.offsetTree,0,d,c)}})),y),{beforeUnshiftWith:H,data:q,defaultItemSize:k,firstItemIndex:h,fixedItemSize:j,fixedGroupSize:l,gap:r,groupIndices:i,heightEstimates:m,itemSize:p,listRefresh:G,shiftWith:g,shiftWithOffset:I,sizeRanges:c,sizes:y,statefulTotalCount:e,totalCount:d,trackItemSizes:F,unshiftWith:f}},l(M,al),{singleton:!0});function aA(a){return a.reduce((a,b)=>(a.groupIndices.push(a.totalCount),a.totalCount+=b+1,a),{groupIndices:[],totalCount:0})}let aB=F(([{groupIndices:a,sizes:b,totalCount:c},{headerHeight:d,scrollTop:e}])=>{let f=D(),g=D(),h=E(w(f,u(aA)));return o(w(h,u(a=>a.totalCount)),c),o(w(h,u(a=>a.groupIndices)),a),o(w(H(e,b,d),t(([a,b])=>ao(b)),u(([a,b,c])=>_(b.groupOffsetTree,Math.max(a-c,0),"v")[0]),s(),u(a=>[a])),g),{groupCounts:f,topItemsIndexes:g}},l(az,W)),aC=F(([{log:a}])=>{let b=B(!1),c=E(w(b,t(a=>a),s()));return b(1,b=>{b&&n(a)("props updated",{},0)}),{didMount:c,propsReady:b}},l(M),{singleton:!0}),aD="u">typeof document&&"scrollBehavior"in document.documentElement.style;function aE(a){let b="number"==typeof a?{index:a}:a;return b.align||(b.align="start"),b.behavior&&aD||(b.behavior="auto"),void 0===b.offset&&(b.offset=0),b}let aF=F(([{gap:a,listRefresh:b,sizes:c,totalCount:d},{fixedFooterHeight:e,fixedHeaderHeight:f,footerHeight:g,headerHeight:h,scrollingInProgress:i,scrollTo:j,smoothScrollTargetReached:k,viewportHeight:l},{log:m}])=>{let n=D(),q=D(),r=B(0),s=null,t=null,v=null;function x(){null!==s&&(s(),s=null),null!==v&&(v(),v=null),t&&(clearTimeout(t),t=null),i(0,!1)}return o(w(n,A(c,l,d,r,h,g,m),A(a,f,e),u(([[a,c,d,e,f,g,h,j],l,m,o])=>{let r=aE(a),{align:u,behavior:y,offset:z}=r,A=e-1,B=at(r,c,A),C=ar(B,c.offsetTree,l)+g;"end"===u?(C+=m+_(c.sizeTree,B)[1]-d+o,B===A&&(C+=h)):"center"===u?C+=(m+_(c.sizeTree,B)[1]-d+o)/2:C-=f,void 0!==z&&0!==z&&(C+=z);let D=b=>{x(),b?(j("retrying to scroll to",{location:a},0),n(0,a)):(q(0,!0),j("list did not change, scroll successful",{},0))};if(x(),"smooth"===y){let a=!1;v=b(1,b=>{a=a||b}),s=p(k,()=>{D(a)})}else s=p(w(b,a=>{let b=setTimeout(()=>{a(!1)},150);return c=>{c&&(a(!0),clearTimeout(b))}}),D);return t=setTimeout(()=>{x()},1200),i(0,!0),j("scrolling from index to",{behavior:y,index:B,top:C},0),{behavior:y,top:C}})),j),{scrollTargetReached:q,scrollToIndex:n,topListHeight:r}},l(az,W,M),{singleton:!0});function aG(a,b){0===a?b():requestAnimationFrame(()=>{aG(a-1,b)})}function aH(a,b){return"number"==typeof a?a:"LAST"===a.index?b-1:a.index}let aI=F(([{defaultItemSize:a,listRefresh:b,sizes:c},{scrollTop:d},{scrollTargetReached:e,scrollToIndex:f},{didMount:g}])=>{let h=B(!0),j=B(0),k=B(!0);return o(w(g,A(j),t(([a,b])=>0!==b),v(!1)),h),o(w(g,A(j),t(([a,b])=>0!==b),v(!1)),k),w(H(b,g),A(h,c,a,k),t(([[,a],b,{sizeTree:c},d,e])=>a&&(!Z(c)||i(d))&&!b&&!e),A(j))(1,([,a])=>{p(e,()=>{k(0,!0)}),aG(4,()=>{p(d,()=>{h(0,!0)}),f(0,a)})}),{initialItemFinalLocationReached:k,initialTopMostItemIndex:j,scrolledToInitialItem:h}},l(az,W,aF,aC),{singleton:!0});function aJ(a,b){return 1.01>Math.abs(a-b)}let aK="down",aL={atBottom:!1,notAtBottomBecause:"NOT_SHOWING_LAST_ITEM",state:{offsetBottom:0,scrollHeight:0,scrollTop:0,viewportHeight:0}},aM=F(([{footerHeight:a,headerHeight:b,scrollBy:c,scrollContainerState:d,scrollTop:e,viewportHeight:f}])=>{let g=B(!1),h=B(!0),i=D(),j=D(),k=B(4),l=B(0),m=C(w(J(w(I(e),y(1),v(!0)),w(I(e),y(1),v(!1),q(100))),s()),!1),p=C(w(J(w(c,v(!0)),w(c,v(!1),q(200))),s()),!1);o(w(H(I(e),I(l)),u(([a,b])=>a<=b),s()),h),o(w(h,z(50)),j);let r=E(w(H(d,I(f),I(b),I(a),I(k)),x((a,[{scrollHeight:b,scrollTop:c},d,e,f,g])=>{let h={scrollHeight:b,scrollTop:c,viewportHeight:d};if(c+d-b>-g){let b,d;return c>a.state.scrollTop?(b="SCROLLED_DOWN",d=a.state.scrollTop-c):(b="SIZE_DECREASED",d=a.state.scrollTop-c||a.scrollTopDelta),{atBottom:!0,atBottomBecause:b,scrollTopDelta:d,state:h}}return{atBottom:!1,notAtBottomBecause:h.scrollHeight>a.state.scrollHeight?"SIZE_INCREASED":d<a.state.viewportHeight?"VIEWPORT_HEIGHT_DECREASING":c<a.state.scrollTop?"SCROLLING_UPWARDS":"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM",state:h}},aL),s((a,b)=>void 0!==a&&a.atBottom===b.atBottom))),F=C(w(d,x((a,{scrollHeight:b,scrollTop:c,viewportHeight:d})=>{if(!aJ(a.scrollHeight,b)){let e=b-(c+d)<1;return a.scrollTop!==c&&e?{changed:!0,jump:a.scrollTop-c,scrollHeight:b,scrollTop:c}:{changed:!0,jump:0,scrollHeight:b,scrollTop:c}}return{changed:!1,jump:0,scrollHeight:b,scrollTop:c}},{changed:!1,jump:0,scrollHeight:0,scrollTop:0}),t(a=>a.changed),u(a=>a.jump)),0);o(w(r,u(a=>a.atBottom)),g),o(w(g,z(50)),i);let G=B(aK);o(w(d,u(({scrollTop:a})=>a),s(),x((a,b)=>n(p)?{direction:a.direction,prevScrollTop:b}:{direction:b<a.prevScrollTop?"up":aK,prevScrollTop:b},{direction:aK,prevScrollTop:0}),u(a=>a.direction)),G),o(w(d,z(50),v("none")),G);let K=B(0);return o(w(m,t(a=>!a),v(0)),K),o(w(e,z(100),A(m),t(([a,b])=>b),x(([a,b],[c])=>[b,c],[0,0]),u(([a,b])=>b-a)),K),{atBottomState:r,atBottomStateChange:i,atBottomThreshold:k,atTopStateChange:j,atTopThreshold:l,isAtBottom:g,isAtTop:h,isScrolling:m,lastJumpDueToItemResize:F,scrollDirection:G,scrollVelocity:K}},l(W)),aN="bottom",aO="none";function aP(a,b,c){return"number"==typeof a?"up"===c&&"top"===b||c===aK&&b===aN?a:0:"up"===c?"top"===b?a.main:a.reverse:b===aN?a.main:a.reverse}function aQ(a,b){return"number"==typeof a?a:a[b]??0}let aR=F(([{deviation:a,fixedHeaderHeight:b,headerHeight:c,scrollTop:d,viewportHeight:e}])=>{let f=D(),g=B(0),h=B(0),i=B(0),j=C(w(H(I(d),I(e),I(c),I(f,ak),I(i),I(g),I(b),I(a),I(h)),u(([a,b,c,[d,e],f,g,h,i,j])=>{let k=a-i,l=Math.max(c-k,0),m=aO,n=aQ(j,"top"),o=aQ(j,aN);return d-=i,d+=c+h,e+=c+h,d>a+(g+h)-n&&(m="up"),(e-=i)<a-l+b+o&&(m=aK),m!==aO?[Math.max(k-c-aP(f,"top",m)-n,0),k-l-h+b+aP(f,aN,m)+o]:null}),t(a=>null!==a),s(ak)),[0,0]);return{increaseViewportBy:h,listBoundary:f,overscan:i,topListHeight:g,visibleRange:j}},l(W),{singleton:!0}),aS={bottom:0,firstItemIndex:0,items:[],offsetBottom:0,offsetTop:0,top:0,topItems:[],topListHeight:0,totalCount:0};function aT(a,b,c,d,e,f){let{lastIndex:g,lastOffset:h,lastSize:i}=e,j=0,k=0;if(a.length>0){j=a[0].offset;let b=a[a.length-1];k=b.offset+b.size}let l=c-g,m=j,n=h+l*i+(l-1)*d-k;return{bottom:k,firstItemIndex:f,items:aV(a,e,f),offsetBottom:n,offsetTop:j,top:m,topItems:aV(b,e,f),topListHeight:b.reduce((a,b)=>b.size+a,0),totalCount:c}}function aU(a,b,c,d,e,f){let g=0;if(c.groupIndices.length>0)for(let b of c.groupIndices){if(b-g>=a)break;g++}let h=a+g,i=aH(b,h);return aT(Array.from({length:h}).map((a,b)=>({data:f[b+i],index:b+i,offset:0,size:0})),[],h,e,c,d)}function aV(a,b,c){if(0===a.length)return[];if(!ao(b))return a.map(a=>({...a,index:a.index+c,originalIndex:a.index}));let d=a[0].index,e=a[a.length-1].index,f=[],g=ab(b.groupOffsetTree,d,e),h,i=0;for(let d of a){let a;(!h||h.end<d.index)&&(h=g.shift(),i=b.groupIndices.indexOf(h.start)),a=d.index===h.start?{index:i,type:"group"}:{groupIndex:i,index:d.index-(i+1)+c},f.push({...a,data:d.data,offset:d.offset,originalIndex:d.index,size:d.size})}return f}function aW(a,b){return void 0===a?0:"number"==typeof a?a:a[b]??0}let aX=F(([{data:a,firstItemIndex:b,gap:c,sizes:d,totalCount:e},f,{listBoundary:g,topListHeight:h,visibleRange:j},{initialTopMostItemIndex:k,scrolledToInitialItem:l},{topListHeight:m},p,{didMount:q},{recalcInProgress:r}])=>{let v=B([]),x=B(0),y=D(),F=B(0);o(f.topItemsIndexes,v);let G=C(w(H(q,r,I(j,ak),I(e),I(d),I(k),l,I(v),I(b),I(c),I(F),a),t(([a,b,,c,,,,,,,,d])=>{let e=void 0!==d&&d.length!==c;return a&&!b&&!e}),u(([,,[a,b],c,d,e,f,g,h,i,j,k])=>{var l;let{offsetTree:m,sizeTree:o}=d,p=n(x);if(0===c)return{...aS,totalCount:c};if(0===a&&0===b)return 0===p?{...aS,totalCount:c}:aU(p,e,d,h,i,k||[]);if(Z(o))return p>0?null:aT(function(a,b,c){if(ao(b)){let d=as(a,b);return[{index:_(b.groupOffsetTree,d)[0],offset:0,size:0},{data:c?.[0],index:d,offset:0,size:0}]}return[{data:c?.[0],index:a,offset:0,size:0}]}(aH(e,c),d,k),[],c,i,d,h);let q=[];if(g.length>0){let a=g[0],b=g[g.length-1],c=0;for(let d of ab(o,a,b)){let e=d.value,f=Math.max(d.start,a),g=Math.min(d.end,b);for(let a=f;a<=g;a++)q.push({data:k?.[a],index:a,offset:c,size:e}),c+=e}}if(!f)return aT([],q,c,i,d,h);let r=g.length>0?g[g.length-1]+1:0,s=function(a,b,c,d=0){let e,f;return d>0&&(b=Math.max(b,a[am(a,d,ap)].offset)),Y((e=am(a,b,aq),f=am(a,c,aq,e),a.slice(e,f+1)),ax)}(m,a,b,r);if(0===s.length)return null;let t=c-1,u=((c=>{for(let d of s){let e=d.value,f=e.offset,g=d.start,h=e.size;if(e.offset<a){let b=(g+=Math.floor((a-e.offset+i)/(h+i)))-d.start;f+=b*h+b*i}g<r&&(f+=(r-g)*h,g=r);let j=Math.min(d.end,t);for(let a=g;a<=j&&!(f>=b);a++)c.push({data:k?.[a],index:a,offset:f,size:h}),f+=h+i}})(l=[]),l),v=aW(j,"top"),w=aW(j,aN);if(u.length>0&&(v>0||w>0)){let a=u[0],b=u[u.length-1];if(v>0&&a.index>r){let b=Math.min(v,a.index-r),c=[],d=a.offset;for(let e=a.index-1;e>=a.index-b;e--){let b=ab(o,e,e)[0]?.value??a.size;d-=b+i,c.unshift({data:k?.[e],index:e,offset:d,size:b})}u.unshift(...c)}if(w>0&&b.index<t){let a=Math.min(w,t-b.index),c=b.offset+b.size+i;for(let d=b.index+1;d<=b.index+a;d++){let a=ab(o,d,d)[0]?.value??b.size;u.push({data:k?.[d],index:d,offset:c,size:a}),c+=a+i}}}return aT(u,q,c,i,d,h)}),t(a=>null!==a),s()),aS);o(w(a,t(i),u(a=>a?.length)),e),o(w(G,u(a=>a.topListHeight)),m),o(m,h),o(w(G,u(a=>[a.top,a.bottom])),g),o(w(G,u(a=>a.items)),y);let J=E(w(G,t(({items:a})=>a.length>0),A(e,a),t(([{items:a},b])=>a[a.length-1].originalIndex===b-1),u(([,a,b])=>[a-1,b]),s(ak),u(([a])=>a))),K=E(w(G,z(200),t(({items:a,topItems:b})=>a.length>0&&a[0].originalIndex===b.length),u(({items:a})=>a[0].index),s())),L=E(w(G,t(({items:a})=>a.length>0),u(({items:a})=>{let b=0,c=a.length-1;for(;"group"===a[b].type&&b<c;)b++;for(;"group"===a[c].type&&c>b;)c--;return{endIndex:a[c].index,startIndex:a[b].index}}),s(aj)));return{endReached:J,initialItemCount:x,itemsRendered:y,listState:G,minOverscanItemCount:F,rangeChanged:L,startReached:K,topItemsIndexes:v,...p}},l(az,aB,aR,aI,aF,aM,aC,al),{singleton:!0}),aY=F(([{fixedFooterHeight:a,fixedHeaderHeight:b,footerHeight:c,headerHeight:d},{listState:e}])=>{let f=D(),g=C(w(H(c,a,d,b,e),u(([a,b,c,d,e])=>a+b+c+d+e.offsetBottom+e.bottom)),0);return o(I(g),f),{totalListHeight:g,totalListHeightChanged:f}},l(W,aX),{singleton:!0}),aZ=F(([{viewportHeight:a},{totalListHeight:b}])=>{let c=B(!1),d=C(w(H(c,a,b),t(([a])=>a),u(([,a,b])=>Math.max(0,a-b)),z(0),s()),0);return{alignToBottom:c,paddingTopAddition:d}},l(W,aY),{singleton:!0}),a$=F(()=>({context:B(null)})),a_=({itemBottom:a,itemTop:b,locationParams:{align:c,behavior:d,...e},viewportBottom:f,viewportTop:g})=>b<g?{...e,align:c??"start",...void 0!==d?{behavior:d}:{}}:a>f?{...e,align:c??"end",...void 0!==d?{behavior:d}:{}}:null,a0=F(([{gap:a,sizes:b,totalCount:c},{fixedFooterHeight:d,fixedHeaderHeight:e,headerHeight:f,scrollingInProgress:g,scrollTop:h,viewportHeight:i},{scrollToIndex:j}])=>{let k=D();return o(w(k,A(b,i,c,f,e,d,h),A(a),u(([[a,b,c,d,e,f,h,i],j])=>{let{calculateViewLocation:k=a_,done:l,...m}=a,o=at(a,b,d-1),q=ar(o,b.offsetTree,j)+e+f,r=k({itemBottom:q+_(b.sizeTree,o)[1],itemTop:q,locationParams:m,viewportBottom:i+c-h,viewportTop:i+f});return null!==r?l&&p(w(g,t(a=>!a),y(n(g)?1:2)),l):l?.(),r}),t(a=>null!==a)),j),{scrollIntoView:k}},l(az,W,aF,aX,M),{singleton:!0});function a1(a){return!1!==a&&("smooth"===a?"smooth":"auto")}let a2=F(([{listRefresh:a,totalCount:b,fixedItemSize:c,data:d},{atBottomState:e,isAtBottom:f},{scrollToIndex:g},{scrolledToInitialItem:h},{didMount:i,propsReady:j},{log:k},{scrollingInProgress:l},{context:m},{scrollIntoView:q}])=>{let r=B(!1),s=D(),v=null;function C(a){g(0,{align:"end",behavior:a,index:"LAST"})}function E(a){setTimeout(p(e,b=>{a&&!b.atBottom&&"SIZE_INCREASED"===b.notAtBottomBecause&&null===v&&(n(k)("scrolling to bottom due to increased size",{},0),C("auto"))}),100)}w(H(w(I(b),y(1)),i),A(I(r),f,h,l),u(([[a,b],c,d,e,f])=>{let g,h=b&&e,i="auto";return h&&(g=d||f,i="function"==typeof c?a1(c(g)):g&&a1(c),h=h&&!1!==i),{followOutputBehavior:i,shouldFollow:h,totalCount:a}}),t(({shouldFollow:a})=>a))(1,({followOutputBehavior:b,totalCount:d})=>{null!==v&&(v(),v=null),void 0!==n(c)?requestAnimationFrame(()=>{n(k)("following output to ",{totalCount:d},0),C(b)}):v=p(a,()=>{n(k)("following output to ",{totalCount:d},0),C(b),v=null})}),w(H(I(r),b,j),t(([a,,b])=>!1!==a&&b),x(({value:a},[,b])=>({refreshed:a===b,value:b}),{refreshed:!1,value:0}),t(({refreshed:a})=>a),A(r,b))(1,([,a])=>{n(h)&&E(!1!==a)}),s(1,()=>{E(!1!==n(r))}),H(I(r),e)(1,([a,b])=>{!1===a||b.atBottom||"VIEWPORT_HEIGHT_DECREASING"!==b.notAtBottomBecause||C("auto")});let F=B(null),G=D();return o(J(w(I(d),u(a=>a?.length??0)),w(I(b))),G),w(H(w(G,y(1)),i),A(I(F),h,l,m),u(([[a,b],c,d,e,f])=>b&&d&&c?.({context:f,totalCount:a,scrollingInProgress:e})),t(a=>!!a),z(0))(1,b=>{null!==v&&(v(),v=null),void 0!==n(c)?requestAnimationFrame(()=>{n(k)("scrolling into view",{}),q(0,b)}):v=p(a,()=>{n(k)("scrolling into view",{}),q(0,b),v=null})}),{autoscrollToBottom:s,followOutput:r,scrollIntoViewOnChange:F}},l(az,aM,aF,aI,aC,M,W,a$,a0)),a3=F(([{data:a,firstItemIndex:b,gap:c,sizes:d},{initialTopMostItemIndex:e},{initialItemCount:f,listState:g},{didMount:h}])=>(o(w(h,A(f),t(([,a])=>0!==a),A(e,d,b,c,a),u(([[,a],b,c,d,e,f=[]])=>aU(a,b,c,d,e,f))),g),{}),l(az,aI,aX,aC),{singleton:!0}),a4=F(([{didMount:a},{scrollTo:b},{listState:c}])=>{let d=B(0);return w(a,A(d),t(([,a])=>0!==a),u(([,a])=>({top:a})))(1,a=>{p(w(c,y(1),t(a=>a.items.length>1)),()=>{requestAnimationFrame(()=>{b(0,a)})})}),{initialScrollTop:d}},l(aC,W,aX),{singleton:!0}),a5=F(([{scrollVelocity:a}])=>{let b=B(!1),c=D(),d=B(!1);return o(w(a,A(d,b,c),t(([a,b])=>!1!==b&&void 0!==b),u(([a,b,c,d])=>{let{enter:e,exit:f}=b;if(c){if(f(a,d))return!1}else if(e(a,d))return!0;return c}),s()),b),w(H(b,a,c),A(d))(1,([[a,b,c],d])=>{a&&!1!==d&&void 0!==d&&d.change&&d.change(b,c)}),{isSeeking:b,scrollSeekConfiguration:d,scrollSeekRangeChanged:c,scrollVelocity:a}},l(aM),{singleton:!0}),a6=F(([{scrollContainerState:a,scrollTo:b}])=>{let c=D(),d=D(),e=D(),f=B(!1),g=B(void 0);return o(w(H(c,d),u(([{scrollTop:a,viewportHeight:b},{offsetTop:c,listHeight:d}])=>({scrollHeight:d,scrollTop:Math.max(0,a-c),viewportHeight:b}))),a),o(w(b,A(d),u(([a,{offsetTop:b}])=>({...a,top:a.top+b}))),e),{customScrollParent:g,useWindowScroll:f,windowScrollContainerState:c,windowScrollTo:e,windowViewportRect:d}},l(W)),a7=F(([{sizeRanges:a,sizes:b},{headerHeight:c,scrollTop:d},{initialTopMostItemIndex:e},{didMount:f},{useWindowScroll:g,windowScrollContainerState:h,windowViewportRect:j}])=>{let k=D(),l=B(void 0),m=B(null),n=B(null);return o(h,m),o(j,n),w(k,A(b,d,g,m,n,c))(1,([a,b,c,d,e,f,g])=>{let h=ac(b.sizeTree).map(({k:a,v:b},c,d)=>{let e=d[c+1];return{endIndex:void 0!==e?e.k-1:1/0,size:b,startIndex:a}});d&&null!==e&&null!==f&&(c=e.scrollTop-f.offsetTop),a({ranges:h,scrollTop:c-=g})}),o(w(l,t(i),u(a8)),e),o(w(f,A(l),t(([,a])=>void 0!==a),s(),u(([,a])=>a.ranges)),a),{getState:k,restoreStateFrom:l}},l(az,W,aI,aC,a6));function a8(a){return{align:"start",index:0,offset:a.scrollTop}}let a9=F(([{topItemsIndexes:a}])=>{let b=B(0);return o(w(b,t(a=>a>=0),u(a=>Array.from({length:a}).map((a,b)=>b))),a),{topItemCount:b}},l(aX));function ba(a){let b=!1,c;return()=>(b||(b=!0,c=a()),c)}let bb=ba(()=>/iP(ad|od|hone)/i.test(navigator.userAgent)&&/WebKit/i.test(navigator.userAgent)),bc=F(([{deviation:a,scrollBy:b,scrollingInProgress:c,scrollTop:d},{isAtBottom:e,isScrolling:f,lastJumpDueToItemResize:g,scrollDirection:h},{listState:i},{beforeUnshiftWith:j,gap:k,shiftWithOffset:l,sizes:m},{log:n},{recalcInProgress:p}])=>{let q=E(w(i,A(g),x(([,a,b,c],[{bottom:d,items:e,offsetBottom:f,totalCount:g},h])=>{let i=d+f,j=0;return b===g&&a.length>0&&e.length>0&&(0===e[0].originalIndex&&0===a[0].originalIndex||0!=(j=i-c)&&(j+=h)),[j,e,g,i]},[0,[],0,0]),t(([a])=>0!==a),A(d,h,c,e,n,p),t(([,a,b,c,,,d])=>!d&&!c&&0!==a&&"up"===b),u(([[a],,,,,b])=>(b("Upward scrolling compensation",{amount:a},0),a))));function r(c){c>0?(b(0,{behavior:"auto",top:-c}),a(0,0)):(a(0,0),b(0,{behavior:"auto",top:-c}))}return w(q,A(a,f))(1,([b,c,d])=>{d&&bb()?a(0,c-b):r(-b)}),w(H(C(f,!1),a,p),t(([a,b,c])=>!a&&!c&&0!==b),u(([a,b])=>b),z(1))(1,r),o(w(l,u(a=>({top:-a}))),b),w(j,A(m,k),u(([a,{groupIndices:b,lastSize:c,sizeTree:d},e])=>{if(0===b.length)return a*(c+e);let f=0,g=$(d,0),h=0,i=0;for(;h<a;){h++,f+=g;let d=b.length===i+1?1/0:b[i+1]-b[i]-1;h+d>a&&(f-=g,d=a-h+1),h+=d,f+=d*(c+e),i++}return f}))(1,c=>{a(0,c),requestAnimationFrame(()=>{b(0,{top:c}),requestAnimationFrame(()=>{a(0,0),p(0,!1)})})}),{deviation:a}},l(W,aM,aX,az,M,al)),bd=F(([a,b,c,d,e,f,g,h,i,j,k])=>({...a,...b,...c,...d,...e,...f,...g,...h,...i,...j,...k}),l(aR,a3,aC,a5,aY,a4,aZ,a6,a0,M,a$)),be=F(([{data:a,defaultItemSize:b,firstItemIndex:c,fixedItemSize:d,fixedGroupSize:e,gap:f,groupIndices:g,heightEstimates:h,itemSize:i,sizeRanges:j,sizes:k,statefulTotalCount:l,totalCount:m,trackItemSizes:n},{initialItemFinalLocationReached:p,initialTopMostItemIndex:q,scrolledToInitialItem:r},s,t,v,x,{scrollToIndex:y},z,{topItemCount:A},{groupCounts:B},C])=>{let{listState:D,minOverscanItemCount:E,topItemsIndexes:F,rangeChanged:G,...H}=x;return o(G,C.scrollSeekRangeChanged),o(w(C.windowViewportRect,u(a=>a.visibleHeight)),s.viewportHeight),{data:a,defaultItemHeight:b,firstItemIndex:c,fixedItemHeight:d,fixedGroupHeight:e,gap:f,groupCounts:B,heightEstimates:h,initialItemFinalLocationReached:p,initialTopMostItemIndex:q,scrolledToInitialItem:r,sizeRanges:j,topItemCount:A,topItemsIndexes:F,totalCount:m,...v,groupIndices:g,itemSize:i,listState:D,minOverscanItemCount:E,scrollToIndex:y,statefulTotalCount:l,trackItemSizes:n,rangeChanged:G,...H,...C,...s,sizes:k,...t}},l(az,aI,W,a7,a2,aX,aF,bc,a9,aB,bd)),bf="u">typeof document?e.useLayoutEffect:e.useEffect;function bg(a,b,c){let f=Object.keys(b.required||{}),g=Object.keys(b.optional||{}),h=Object.keys(b.methods||{}),i=Object.keys(b.events||{}),k=e.createContext({});function l(a,c){for(let d of(void 0!==a.propsReady&&(0,a.propsReady)(0,!1),f))(0,a[b.required[d]])(0,c[d]);for(let d of g)d in c&&(0,a[b.optional[d]])(0,c[d]);void 0!==a.propsReady&&(0,a.propsReady)(0,!0)}function o(a){return i.reduce((c,d)=>{var e;let f,g,h;return c[d]=(e=a[b.events[d]],h=()=>f?.(),function(a,b){switch(a){case 1:return b?g===b?void 0:(h(),g=b,f=e(1,b)):(h(),j);case 2:h(),g=null;return}}),c},{})}return{Component:e.forwardRef(function(j,n){var p;let{children:q,...r}=j,[s]=e.useState(()=>{var b;let c,d;return c=new Map,l(b=(d=({constructor:a,dependencies:b,id:e,singleton:f})=>{if(f&&c.has(e))return c.get(e);let g=a(b.map(a=>d(a)));return f&&c.set(e,g),g})(a),r),b}),[t]=e.useState(()=>o(s));return bf(()=>{for(let a of i)a in r&&(0,t[a])(1,r[a]);return()=>{Object.values(t).map(m)}},[r,t,s]),bf(()=>{l(s,r)}),e.useImperativeHandle(n,(p=h.reduce((a,c)=>(a[c]=a=>{(0,s[b.methods[c]])(0,a)},a),{}),()=>p)),(0,d.jsx)(k.Provider,{value:s,children:void 0!==c?(0,d.jsx)(c,{...function(a,b){let c={},d={},e=0,f=a.length;for(;e<f;)d[a[e]]=1,e+=1;for(let a in b)Object.hasOwn(d,a)||(c[a]=b[a]);return c}([...f,...g,...i],r),children:q}):q})}),useEmitter:(a,b)=>{let c=e.useContext(k)[a];bf(()=>c(1,b),[b,c])},useEmitterValue:parseInt(e.version)>=18?a=>{let b=e.useContext(k)[a],c=e.useCallback(a=>b(1,a),[b]);return e.useSyncExternalStore(c,()=>n(b),()=>n(b))}:a=>{let b=e.useContext(k)[a],[c,d]=e.useState(()=>n(b));return bf(()=>b(1,a=>{a!==c&&d(()=>a)}),[b,c]),c},usePublisher:a=>{let b=e.useContext(k);return e.useCallback(c=>{(0,b[a])(0,c)},[b,a])}}}let bh=e.createContext(void 0),bi=e.createContext(void 0),bj="-webkit-sticky",bk="sticky",bl=ba(()=>{if(typeof document>"u")return bk;let a=document.createElement("div");return a.style.position=bj,a.style.position===bj?bj:bk}),bm="u">typeof document?e.useLayoutEffect:e.useEffect;function bn(a){return"self"in a}function bo(a,b,c,d=j,g,h){let i=e.useRef(null),k=e.useRef(null),l=e.useRef(null),m=e.useCallback(c=>{let d,e,g,i=c.target;if("body"in i||bn(i)){let a=bn(i)?i:i.defaultView;g=!0===h?Q(a,a.scrollX):a.scrollY,d=!0===h?a.document.documentElement.scrollWidth:a.document.documentElement.scrollHeight,e=!0===h?a.innerWidth:a.innerHeight}else g=!0===h?Q(i,i.scrollLeft):i.scrollTop,d=!0===h?i.scrollWidth:i.scrollHeight,e=!0===h?i.offsetWidth:i.offsetHeight;let j=()=>{a({scrollHeight:d,scrollTop:Math.max(g,0),viewportHeight:e})};!0===c.suppressFlushSync?j():f.flushSync(j),null!==k.current&&(g===k.current||g<=0||g===d-e)&&(k.current=null,b(!0),l.current&&(clearTimeout(l.current),l.current=null))},[a,b,h]);return e.useEffect(()=>{let a=g||i.current;return P(a),d(g||i.current),m({suppressFlushSync:!0,target:a}),a.addEventListener("scroll",m,{passive:!0}),()=>{P(a),d(null),a.removeEventListener("scroll",m)}},[i,m,c,d,g]),{scrollByCallback:function(a){!0===h&&(a={...void 0!==a.behavior?{behavior:a.behavior}:{},...void 0!==a.top?{left:Q(i.current,a.top)}:{}}),i.current.scrollBy(a)},scrollerRef:i,scrollToCallback:function(c){let d,e,f,g=i.current;if(!g||(!0===h?"offsetWidth"in g&&0===g.offsetWidth:"offsetHeight"in g&&0===g.offsetHeight))return;let j="smooth"===c.behavior;bn(g)?(e=Math.max(an(g.document.documentElement,!0===h?"width":"height"),!0===h?g.document.documentElement.scrollWidth:g.document.documentElement.scrollHeight),d=!0===h?g.innerWidth:g.innerHeight,f=!0===h?Q(g,g.scrollX):g.scrollY):(e=g[!0===h?"scrollWidth":"scrollHeight"],d=an(g,!0===h?"width":"height"),f=!0===h?Q(g,g.scrollLeft):g.scrollTop);let m=e-d;if(void 0===c.top)return void g.scrollTo(c);let n=Math.ceil(Math.max(Math.min(m,c.top),0));if(c.top=n,aJ(d,e)||n===f){a({scrollHeight:e,scrollTop:f,viewportHeight:d}),j&&b(!0);return}j?(k.current=n,l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{l.current=null,k.current=null,b(!0)},1e3)):k.current=null,!0===h&&(c={...void 0!==c.behavior?{behavior:c.behavior}:{},left:Q(g,n)}),g.scrollTo(c)}}}function bp(a){return a}let bq=F(()=>{let a=B(a=>`Item ${a}`),b=B(a=>`Group ${a}`),c=B({}),d=B(bp),e=B("div"),f=B(j),g=(a,b=null)=>C(w(c,u(b=>b[a]),s()),b);return{components:c,computeItemKey:d,EmptyPlaceholder:g("EmptyPlaceholder"),FooterComponent:g("Footer"),GroupComponent:g("Group","div"),groupContent:b,HeaderComponent:g("Header"),HeaderFooterTag:e,ItemComponent:g("Item","div"),itemContent:a,ListComponent:g("List","div"),ScrollerComponent:g("Scroller","div"),scrollerRef:f,ScrollSeekPlaceholder:g("ScrollSeekPlaceholder"),TopItemListComponent:g("TopItemList")}}),br=F(([a,b])=>({...a,...b}),l(be,bq)),bs=({height:a})=>(0,d.jsx)("div",{style:{height:a}}),bt={overflowAnchor:"none",position:bl(),zIndex:1},bu={overflowAnchor:"none"},bv={...bu,display:"inline-block",height:"100%"},bw=e.memo(function({showTopList:a=!1}){let b=bN("listState"),c=bO("sizeRanges"),f=bN("useWindowScroll"),g=bN("customScrollParent"),h=bO("windowScrollContainerState"),i=bO("scrollContainerState"),k=bN("itemContent"),l=bN("context"),m=bN("groupContent"),n=bN("trackItemSizes"),o=bN("itemSize"),p=bN("log"),q=bO("gap"),r=bN("horizontalDirection"),{callbackRef:s}=T(c,o,n,a?j:g||f?h:i,p,q,g,r,bN("skipAnimationFrameInResizeObserver")),[t,u]=e.useState(0);bM("deviation",a=>{t!==a&&u(a)});let v=bN("EmptyPlaceholder"),w=bN("ScrollSeekPlaceholder")??bs,x=bN("ListComponent"),y=bN("ItemComponent"),z=bN("GroupComponent"),A=bN("computeItemKey"),B=bN("isSeeking"),C=bN("groupIndices").length>0,D=bN("alignToBottom"),E=bN("initialItemFinalLocationReached"),F=a?{}:{boxSizing:"border-box",...r?{display:"inline-block",height:"100%",marginInlineStart:0!==t?t:D?"auto":0,paddingInlineEnd:b.offsetBottom,paddingInlineStart:b.offsetTop,whiteSpace:"nowrap"}:{marginTop:0!==t?t:D?"auto":0,paddingBottom:b.offsetBottom,paddingTop:b.offsetTop},...E?{}:{visibility:"hidden"}};return a||0!==b.totalCount||null==v?(0,d.jsx)(x,{...bC(x,l),"data-testid":a?"virtuoso-top-item-list":"virtuoso-item-list",ref:s,style:F,children:(a?b.topItems:b.items).map(a=>{let c=a.originalIndex,d=A(c+b.firstItemIndex,a.data,l);return B?(0,e.createElement)(w,{...bC(w,l),height:a.size,index:a.index,key:d,type:a.type||"item",..."group"===a.type?{}:{groupIndex:a.groupIndex}}):"group"===a.type?(0,e.createElement)(z,{...bC(z,l),"data-index":c,"data-item-index":a.index,"data-known-size":a.size,key:d,style:bt},m(a.index,l)):(0,e.createElement)(y,{...bC(y,l),...bD(y,a.data),"data-index":c,"data-item-group-index":a.groupIndex,"data-item-index":a.index,"data-known-size":a.size,key:d,style:r?bv:bu},C?k(a.index,a.groupIndex,a.data,l):k(a.index,a.data,l))})}):(0,d.jsx)(v,{...bC(v,l)})}),bx={height:"100%",outline:"none",overflowY:"auto",position:"relative",WebkitOverflowScrolling:"touch"},by={outline:"none",overflowX:"auto",position:"relative"},bz=a=>({height:"100%",position:"absolute",top:0,width:"100%",...a?{display:"flex",flexDirection:"column"}:void 0}),bA=(a,b,c=0)=>({...bz(a),position:b?"relative":"absolute",top:b?-c:0}),bB={position:bl(),top:0,width:"100%",zIndex:1};function bC(a,b){if("string"!=typeof a)return{context:b}}function bD(a,b){return{item:"string"==typeof a?void 0:b}}let bE=e.memo(function(){let a=bN("HeaderComponent"),b=bO("headerHeight"),c=bN("HeaderFooterTag"),f=R(e.useMemo(()=>a=>{b(an(a,"height"))},[b]),!0,bN("skipAnimationFrameInResizeObserver")),g=bN("context");return null!=a?(0,d.jsx)(c,{ref:f,children:(0,d.jsx)(a,{...bC(a,g)})}):null}),bF=e.memo(function(){let a=bN("FooterComponent"),b=bO("footerHeight"),c=bN("HeaderFooterTag"),f=R(e.useMemo(()=>a=>{b(an(a,"height"))},[b]),!0,bN("skipAnimationFrameInResizeObserver")),g=bN("context");return null!=a?(0,d.jsx)(c,{ref:f,children:(0,d.jsx)(a,{...bC(a,g)})}):null});function bG({useEmitter:a,useEmitterValue:b,usePublisher:c}){return e.memo(function({children:e,style:f,context:g,...h}){let i=c("scrollContainerState"),j=b("ScrollerComponent"),k=c("smoothScrollTargetReached"),l=b("scrollerRef"),m=b("horizontalDirection")||!1,{scrollByCallback:n,scrollerRef:o,scrollToCallback:p}=bo(i,k,j,l,void 0,m);return a("scrollTo",p),a("scrollBy",n),(0,d.jsx)(j,{"data-testid":"virtuoso-scroller","data-virtuoso-scroller":!0,ref:o,style:{...m?by:bx,...f},tabIndex:0,...h,...bC(j,g),children:e})})}function bH({useEmitter:a,useEmitterValue:b,usePublisher:c}){return e.memo(function({children:f,style:g,context:h,...i}){let j=c("windowScrollContainerState"),k=b("ScrollerComponent"),l=c("smoothScrollTargetReached"),m=b("totalListHeight"),n=b("deviation"),o=b("customScrollParent"),p=e.useRef(null),{scrollByCallback:q,scrollerRef:r,scrollToCallback:s}=bo(j,l,k,b("scrollerRef"),o);return bm(()=>(r.current=o||p.current?.ownerDocument.defaultView,()=>{r.current=null}),[r,o]),a("windowScrollTo",s),a("scrollBy",q),(0,d.jsx)(k,{ref:p,"data-virtuoso-scroller":!0,style:{position:"relative",...g,...0!==m?{height:m+n}:void 0},...i,...bC(k,h),children:f})})}let bI=({children:a})=>{let b=e.useContext(bh),c=bO("viewportHeight"),f=bO("fixedItemHeight"),g=bN("alignToBottom"),i=bN("horizontalDirection"),j=R(e.useMemo(()=>h(c,a=>an(a,i?"width":"height")),[c,i]),!0,bN("skipAnimationFrameInResizeObserver"));return e.useEffect(()=>{b&&(c(b.viewportHeight),f(b.itemHeight))},[b,c,f]),(0,d.jsx)("div",{"data-viewport-type":"element",ref:j,style:bz(g),children:a})},bJ=({children:a})=>{let b=e.useContext(bh),c=bO("windowViewportRect"),f=bO("fixedItemHeight"),g=bN("customScrollParent"),h=bN("useWindowScroll"),i=bN("topListHeight"),j=V(c,g,bN("skipAnimationFrameInResizeObserver")),k=bN("alignToBottom");return e.useEffect(()=>{b&&(f(b.itemHeight),c({listHeight:0,offsetTop:0,visibleHeight:b.viewportHeight,visibleWidth:100}))},[b,c,f]),(0,d.jsx)("div",{"data-viewport-type":"window",ref:j,style:bA(k,h,i),children:a})},bK=({children:a})=>{let b=bN("TopItemListComponent")??"div",c=bN("headerHeight"),e={...bB,marginTop:`${c}px`},f=bN("context");return(0,d.jsx)(b,{style:e,...bC(b,f),children:a})},{Component:bL,useEmitter:bM,useEmitterValue:bN,usePublisher:bO}=bg(br,{optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",scrollIntoViewOnChange:"scrollIntoViewOnChange",itemContent:"itemContent",groupContent:"groupContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",minOverscanItemCount:"minOverscanItemCount",totalCount:"totalCount",groupCounts:"groupCounts",topItemCount:"topItemCount",firstItemIndex:"firstItemIndex",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedGroupHeight:"fixedGroupHeight",fixedItemHeight:"fixedItemHeight",heightEstimates:"heightEstimates",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"HeaderFooterTag",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",horizontalDirection:"horizontalDirection",skipAnimationFrameInResizeObserver:"skipAnimationFrameInResizeObserver"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",autoscrollToBottom:"autoscrollToBottom",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},e.memo(function(a){let b=bN("useWindowScroll"),c=bN("topItemsIndexes").length>0,e=bN("customScrollParent"),f=bN("context");return(0,d.jsxs)(e||b?bQ:bP,{...a,context:f,children:[c&&(0,d.jsx)(bK,{children:(0,d.jsx)(bw,{showTopList:!0})}),(0,d.jsxs)(e||b?bJ:bI,{children:[(0,d.jsx)(bE,{}),(0,d.jsx)(bw,{}),(0,d.jsx)(bF,{})]})]})})),bP=bG({useEmitter:bM,useEmitterValue:bN,usePublisher:bO}),bQ=bH({useEmitter:bM,useEmitterValue:bN,usePublisher:bO}),bR=bL,bS=F(()=>{let a=B(a=>(0,d.jsxs)("td",{children:["Item $",a]})),b=B(null),c=B(a=>(0,d.jsxs)("td",{colSpan:1e3,children:["Group ",a]})),e=B(null),f=B(null),g=B({}),h=B(bp),i=B(j),k=(a,b=null)=>C(w(g,u(b=>b[a]),s()),b);return{components:g,computeItemKey:h,context:b,EmptyPlaceholder:k("EmptyPlaceholder"),FillerRow:k("FillerRow"),fixedFooterContent:f,fixedHeaderContent:e,itemContent:a,groupContent:c,ScrollerComponent:k("Scroller","div"),scrollerRef:i,ScrollSeekPlaceholder:k("ScrollSeekPlaceholder"),TableBodyComponent:k("TableBody","tbody"),TableComponent:k("Table","table"),TableFooterComponent:k("TableFoot","tfoot"),TableHeadComponent:k("TableHead","thead"),TableRowComponent:k("TableRow","tr"),GroupComponent:k("Group","tr")}}),bT=F(([a,b])=>({...a,...b}),l(be,bS)),bU=({height:a})=>(0,d.jsx)("tr",{children:(0,d.jsx)("td",{style:{height:a}})}),bV=({height:a})=>(0,d.jsx)("tr",{children:(0,d.jsx)("td",{style:{border:0,height:a,padding:0}})}),bW={overflowAnchor:"none"},bX={position:bl(),zIndex:2,overflowAnchor:"none"},bY=e.memo(function({showTopList:a=!1}){let b=b1("listState"),c=b1("computeItemKey"),d=b1("firstItemIndex"),f=b1("context"),g=b1("isSeeking"),h=b1("fixedHeaderHeight"),i=b1("groupIndices").length>0,j=b1("itemContent"),k=b1("groupContent"),l=b1("ScrollSeekPlaceholder")??bU,m=b1("GroupComponent"),n=b1("TableRowComponent"),o=(a?b.topItems:[]).reduce((a,b,c)=>(0===c?a.push(b.size):a.push(a[c-1]+b.size),a),[]);return(a?b.topItems:b.items).map(b=>{let p=b.originalIndex,q=c(p+d,b.data,f),r=a?0===p?0:o[p-1]:0;return g?(0,e.createElement)(l,{...bC(l,f),height:b.size,index:b.index,key:q,type:b.type||"item"}):"group"===b.type?(0,e.createElement)(m,{...bC(m,f),"data-index":p,"data-item-index":b.index,"data-known-size":b.size,key:q,style:{...bX,top:h}},k(b.index,f)):(0,e.createElement)(n,{...bC(n,f),...bD(n,b.data),"data-index":p,"data-item-index":b.index,"data-known-size":b.size,"data-item-group-index":b.groupIndex,key:q,style:a?{...bX,top:h+r}:bW},i?j(b.index,b.groupIndex,b.data,f):j(b.index,b.data,f))})}),bZ=e.memo(function(){let a=b1("listState"),b=b1("topItemsIndexes").length>0,c=b2("sizeRanges"),f=b1("useWindowScroll"),g=b1("customScrollParent"),h=b2("windowScrollContainerState"),i=b2("scrollContainerState"),j=b1("trackItemSizes"),{callbackRef:k,ref:l}=T(c,b1("itemSize"),j,g||f?h:i,b1("log"),void 0,g,!1,b1("skipAnimationFrameInResizeObserver")),[m,n]=e.useState(0);b0("deviation",a=>{m!==a&&(l.current.style.marginTop=`${a}px`,n(a))});let o=b1("EmptyPlaceholder"),p=b1("FillerRow")??bV,q=b1("TableBodyComponent"),r=b1("paddingTopAddition"),s=b1("statefulTotalCount"),t=b1("context");if(0===s&&null!=o)return(0,d.jsx)(o,{...bC(o,t)});let u=(b?a.topItems:[]).reduce((a,b)=>a+b.size,0),v=a.offsetTop+r+m-u,w=a.offsetBottom,x=v>0?(0,d.jsx)(p,{context:t,height:v},"padding-top"):null,y=w>0?(0,d.jsx)(p,{context:t,height:w},"padding-bottom"):null;return(0,d.jsxs)(q,{"data-testid":"virtuoso-item-list",ref:k,...bC(q,t),children:[x,b&&(0,d.jsx)(bY,{showTopList:!0}),(0,d.jsx)(bY,{}),y]})}),b$=({children:a})=>{let b=e.useContext(bh),c=b2("viewportHeight"),f=b2("fixedItemHeight"),g=R(e.useMemo(()=>h(c,a=>an(a,"height")),[c]),!0,b1("skipAnimationFrameInResizeObserver"));return e.useEffect(()=>{b&&(c(b.viewportHeight),f(b.itemHeight))},[b,c,f]),(0,d.jsx)("div",{"data-viewport-type":"element",ref:g,style:bz(!1),children:a})},b_=({children:a})=>{let b=e.useContext(bh),c=b2("windowViewportRect"),f=b2("fixedItemHeight"),g=b1("customScrollParent"),h=b1("useWindowScroll"),i=V(c,g,b1("skipAnimationFrameInResizeObserver"));return e.useEffect(()=>{b&&(f(b.itemHeight),c({listHeight:0,offsetTop:0,visibleHeight:b.viewportHeight,visibleWidth:100}))},[b,c,f]),(0,d.jsx)("div",{"data-viewport-type":"window",ref:i,style:bA(!1,h),children:a})},{useEmitter:b0,useEmitterValue:b1,usePublisher:b2}=bg(bT,{optional:{restoreStateFrom:"restoreStateFrom",context:"context",followOutput:"followOutput",firstItemIndex:"firstItemIndex",itemContent:"itemContent",groupContent:"groupContent",fixedHeaderContent:"fixedHeaderContent",fixedFooterContent:"fixedFooterContent",overscan:"overscan",increaseViewportBy:"increaseViewportBy",minOverscanItemCount:"minOverscanItemCount",totalCount:"totalCount",topItemCount:"topItemCount",initialTopMostItemIndex:"initialTopMostItemIndex",components:"components",groupCounts:"groupCounts",atBottomThreshold:"atBottomThreshold",atTopThreshold:"atTopThreshold",computeItemKey:"computeItemKey",defaultItemHeight:"defaultItemHeight",fixedGroupHeight:"fixedGroupHeight",fixedItemHeight:"fixedItemHeight",itemSize:"itemSize",scrollSeekConfiguration:"scrollSeekConfiguration",data:"data",initialItemCount:"initialItemCount",initialScrollTop:"initialScrollTop",alignToBottom:"alignToBottom",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel"},methods:{scrollToIndex:"scrollToIndex",scrollIntoView:"scrollIntoView",scrollTo:"scrollTo",scrollBy:"scrollBy",getState:"getState"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",totalListHeightChanged:"totalListHeightChanged",itemsRendered:"itemsRendered",groupIndices:"groupIndices"}},e.memo(function(a){let b=b1("useWindowScroll"),c=b1("customScrollParent"),f=b2("fixedHeaderHeight"),g=b2("fixedFooterHeight"),i=b1("fixedHeaderContent"),j=b1("fixedFooterContent"),k=b1("context"),l=R(e.useMemo(()=>h(f,a=>an(a,"height")),[f]),!0,b1("skipAnimationFrameInResizeObserver")),m=R(e.useMemo(()=>h(g,a=>an(a,"height")),[g]),!0,b1("skipAnimationFrameInResizeObserver")),n=c||b?b4:b3,o=c||b?b_:b$,p=b1("TableComponent"),q=b1("TableHeadComponent"),r=b1("TableFooterComponent"),s=i?(0,d.jsx)(q,{ref:l,style:{position:"sticky",top:0,zIndex:2},...bC(q,k),children:i()},"TableHead"):null,t=j?(0,d.jsx)(r,{ref:m,style:{bottom:0,position:"sticky",zIndex:1},...bC(r,k),children:j()},"TableFoot"):null;return(0,d.jsx)(n,{...a,...bC(n,k),children:(0,d.jsx)(o,{children:(0,d.jsxs)(p,{style:{borderSpacing:0,overflowAnchor:"none"},...bC(p,k),children:[s,(0,d.jsx)(bZ,{},"TableBody"),t]})})})})),b3=bG({useEmitter:b0,useEmitterValue:b1,usePublisher:b2}),b4=bH({useEmitter:b0,useEmitterValue:b1,usePublisher:b2}),b5={bottom:0,itemHeight:0,items:[],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},b6={bottom:0,itemHeight:0,items:[{index:0}],itemWidth:0,offsetBottom:0,offsetTop:0,top:0},{ceil:b7,floor:b8,max:b9,min:ca,round:cb}=Math;function cc(a,b,c){return Array.from({length:b-a+1}).map((b,d)=>({data:null===c?null:c[d+a],index:d+a}))}function cd(a,b){return void 0!==a&&a.width===b.width&&a.height===b.height}function ce(a,b){return void 0!==a&&a.column===b.column&&a.row===b.row}let cf=F(([{increaseViewportBy:a,listBoundary:b,overscan:c,visibleRange:d},{footerHeight:e,headerHeight:f,scrollBy:g,scrollContainerState:h,scrollTo:i,scrollTop:j,smoothScrollTargetReached:k,viewportHeight:l},m,n,{didMount:q,propsReady:r},{customScrollParent:x,useWindowScroll:F,windowScrollContainerState:G,windowScrollTo:J,windowViewportRect:K},L])=>{let M=B(0),N=B(0),O=B(b5),P=B({height:0,width:0}),Q=B({height:0,width:0}),R=D(),S=D(),T=B(0),U=B(null),V=B({column:0,row:0}),W=D(),X=D(),Y=B(!1),Z=B(0),$=B(!0),_=B(!1),aa=B(!1);w(q,A(Z),t(([a,b])=>0!==b))(1,()=>{$(0,!1)}),w(H(q,$,Q,P,Z,_),t(([a,b,c,d,,e])=>a&&!b&&0!==c.height&&0!==d.height&&!e))(1,([,,,,a])=>{_(0,!0),aG(1,()=>{R(0,a)}),p(w(j),()=>{b(0,[0,0]),$(0,!0)})}),o(w(X,t(a=>null!=a&&a.scrollTop>0),v(0)),N),w(q,A(X),t(([,a])=>null!=a))(1,([,a])=>{a&&(P(0,a.viewport),Q(0,a.item),V(0,a.gap),a.scrollTop>0&&(Y(0,!0),p(w(j,y(1)),a=>{Y(0,!1)}),i(0,{top:a.scrollTop})))}),o(w(P,u(({height:a})=>a)),l),o(w(H(I(P,cd),I(Q,cd),I(V,(a,b)=>void 0!==a&&a.column===b.column&&a.row===b.row),I(j)),u(([a,b,c,d])=>({gap:c,item:b,scrollTop:d,viewport:a}))),W),o(w(H(I(M),d,I(V,ce),I(Q,cd),I(P,cd),I(U),I(N),I(Y),I($),I(Z)),t(([,,,,,,,a])=>!a),u(([a,[b,c],d,e,f,g,h,,i,j])=>{let k,l,{column:m,row:n}=d,{height:o,width:p}=e,{width:q}=f;if(0===h&&(0===a||0===q))return b5;if(0===p){var r;let b=aH(j,a),c=b+Math.max(h-1,0);return r=cc(b,c,g),{...b6,items:r}}let s=cg(q,p,m);i?0===b&&0===c&&h>0?(k=0,l=h-1):(k=s*b8((b+n)/(o+n)),l=ca(a-1,b9(l=s*b7((c+n)/(o+n))-1,s-1)),k=ca(l,b9(0,k))):(k=0,l=-1);let t=cc(k,l,g),{bottom:u,top:v}=ch(f,d,e,t),w=b7(a/s);return{bottom:u,itemHeight:o,items:t,itemWidth:p,offsetBottom:w*o+(w-1)*n-u,offsetTop:v,top:v}})),O),o(w(U,t(a=>null!==a),u(a=>a.length)),M),o(w(H(P,Q,O,V),t(([a,b,{items:c}])=>c.length>0&&0!==b.height&&0!==a.height),u(([a,b,{items:c},d])=>{let{bottom:e,top:f}=ch(a,d,b,c);return[f,e]}),s(ak)),b);let ab=B(!1);o(w(j,A(ab),u(([a,b])=>b||0!==a)),ab);let ac=E(w(H(O,M),t(([{items:a}])=>a.length>0),A(ab),t(([[a,b],c])=>{let d=a.items[a.items.length-1].index===b-1;return(c||a.bottom>0&&a.itemHeight>0&&0===a.offsetBottom&&a.items.length===b)&&d}),u(([[,a]])=>a-1),s())),ad=E(w(I(O),t(({items:a})=>a.length>0&&0===a[0].index),v(0),s())),ae=E(w(I(O),A(Y),t(([{items:a},b])=>a.length>0&&!b),u(([{items:a}])=>({endIndex:a[a.length-1].index,startIndex:a[0].index})),s(aj),z(0)));o(ae,n.scrollSeekRangeChanged),o(w(R,A(P,Q,M,V),u(([a,b,c,d,e])=>{let f=aE(a),{align:g,behavior:h,offset:i}=f,j=f.index;"LAST"===j&&(j=d-1);let k=ci(b,e,c,j=b9(0,j,ca(d-1,j)));return"end"===g?k=cb(k-b.height+c.height):"center"===g&&(k=cb(k-b.height/2+c.height/2)),void 0!==i&&0!==i&&(k+=i),{behavior:h,top:k}})),i);let af=C(w(O,u(a=>a.offsetBottom+a.bottom)),0);return o(w(K,u(a=>({height:a.visibleHeight,width:a.visibleWidth}))),P),{customScrollParent:x,data:U,deviation:T,footerHeight:e,gap:V,headerHeight:f,increaseViewportBy:a,initialItemCount:N,itemDimensions:Q,overscan:c,restoreStateFrom:X,scrollBy:g,scrollContainerState:h,scrollHeight:S,scrollTo:i,scrollToIndex:R,scrollTop:j,smoothScrollTargetReached:k,totalCount:M,useWindowScroll:F,viewportDimensions:P,windowScrollContainerState:G,windowScrollTo:J,windowViewportRect:K,...n,gridState:O,horizontalDirection:aa,initialTopMostItemIndex:Z,totalListHeight:af,...m,endReached:ac,propsReady:r,rangeChanged:ae,startReached:ad,stateChanged:W,stateRestoreInProgress:Y,...L}},l(aR,W,aM,a5,aC,a6,M));function cg(a,b,c){return b9(1,b8((a+c)/(b8(b)+c)))}function ch(a,b,c,d){let{height:e}=c;if(void 0===e||0===d.length)return{bottom:0,top:0};let f=ci(a,b,c,d[0].index);return{bottom:ci(a,b,c,d[d.length-1].index)+e,top:f}}function ci(a,b,c,d){let e=b8(d/cg(a.width,c.width,b.column)),f=e*c.height+b9(0,e-1)*b.row;return f>0?f+b.row:f}let cj=F(()=>{let a=B(a=>`Item ${a}`),b=B({}),c=B(null),d=B("virtuoso-grid-item"),e=B("virtuoso-grid-list"),f=B(bp),g=B("div"),h=B(j),i=(a,c=null)=>C(w(b,u(b=>b[a]),s()),c),k=B(!1),l=B(!1);return o(I(l),k),{components:b,computeItemKey:f,context:c,FooterComponent:i("Footer"),HeaderComponent:i("Header"),headerFooterTag:g,itemClassName:d,ItemComponent:i("Item","div"),itemContent:a,listClassName:e,ListComponent:i("List","div"),readyStateChanged:k,reportReadyState:l,ScrollerComponent:i("Scroller","div"),scrollerRef:h,ScrollSeekPlaceholder:i("ScrollSeekPlaceholder","div")}}),ck=F(([a,b])=>({...a,...b}),l(cf,cj)),cl=e.memo(function(){let a=cr("gridState"),b=cr("listClassName"),c=cr("itemClassName"),f=cr("itemContent"),g=cr("computeItemKey"),h=cr("isSeeking"),i=cs("scrollHeight"),j=cr("ItemComponent"),k=cr("ListComponent"),l=cr("ScrollSeekPlaceholder"),m=cr("context"),n=cs("itemDimensions"),o=cs("gap"),p=cr("log"),q=cr("stateRestoreInProgress"),r=cs("reportReadyState"),s=R(e.useMemo(()=>a=>{i(a.parentElement.parentElement.scrollHeight);let b=a.firstChild;if(null!==b){let{height:a,width:c}=b.getBoundingClientRect();n({height:a,width:c})}o({column:cv("column-gap",getComputedStyle(a).columnGap,p),row:cv("row-gap",getComputedStyle(a).rowGap,p)})},[i,n,o,p]),!0,!1);return bm(()=>{a.itemHeight>0&&a.itemWidth>0&&r(!0)},[a]),q?null:(0,d.jsx)(k,{className:b,ref:s,...bC(k,m),"data-testid":"virtuoso-item-list",style:{paddingBottom:a.offsetBottom,paddingTop:a.offsetTop},children:a.items.map(b=>{let i=g(b.index,b.data,m);return h?(0,d.jsx)(l,{...bC(l,m),height:a.itemHeight,index:b.index,width:a.itemWidth},i):(0,e.createElement)(j,{...bC(j,m),className:c,"data-index":b.index,key:i},f(b.index,b.data,m))})})}),cm=e.memo(function(){let a=cr("HeaderComponent"),b=cs("headerHeight"),c=cr("headerFooterTag"),f=R(e.useMemo(()=>a=>{b(an(a,"height"))},[b]),!0,!1),g=cr("context");return null!=a?(0,d.jsx)(c,{ref:f,children:(0,d.jsx)(a,{...bC(a,g)})}):null}),cn=e.memo(function(){let a=cr("FooterComponent"),b=cs("footerHeight"),c=cr("headerFooterTag"),f=R(e.useMemo(()=>a=>{b(an(a,"height"))},[b]),!0,!1),g=cr("context");return null!=a?(0,d.jsx)(c,{ref:f,children:(0,d.jsx)(a,{...bC(a,g)})}):null}),co=({children:a})=>{let b=e.useContext(bi),c=cs("itemDimensions"),f=cs("viewportDimensions"),g=R(e.useMemo(()=>a=>{f(a.getBoundingClientRect())},[f]),!0,!1);return e.useEffect(()=>{b&&(f({height:b.viewportHeight,width:b.viewportWidth}),c({height:b.itemHeight,width:b.itemWidth}))},[b,f,c]),(0,d.jsx)("div",{ref:g,style:bz(!1),children:a})},cp=({children:a})=>{let b=e.useContext(bi),c=cs("windowViewportRect"),f=cs("itemDimensions"),g=cr("customScrollParent"),h=cr("useWindowScroll"),i=V(c,g,!1);return e.useEffect(()=>{b&&(f({height:b.itemHeight,width:b.itemWidth}),c({listHeight:0,offsetTop:0,visibleHeight:b.viewportHeight,visibleWidth:b.viewportWidth}))},[b,c,f]),(0,d.jsx)("div",{ref:i,style:bA(!1,h),children:a})},{useEmitter:cq,useEmitterValue:cr,usePublisher:cs}=bg(ck,{optional:{context:"context",totalCount:"totalCount",overscan:"overscan",itemContent:"itemContent",components:"components",computeItemKey:"computeItemKey",data:"data",initialItemCount:"initialItemCount",scrollSeekConfiguration:"scrollSeekConfiguration",headerFooterTag:"headerFooterTag",listClassName:"listClassName",itemClassName:"itemClassName",useWindowScroll:"useWindowScroll",customScrollParent:"customScrollParent",scrollerRef:"scrollerRef",logLevel:"logLevel",restoreStateFrom:"restoreStateFrom",initialTopMostItemIndex:"initialTopMostItemIndex",increaseViewportBy:"increaseViewportBy"},methods:{scrollTo:"scrollTo",scrollBy:"scrollBy",scrollToIndex:"scrollToIndex"},events:{isScrolling:"isScrolling",endReached:"endReached",startReached:"startReached",rangeChanged:"rangeChanged",atBottomStateChange:"atBottomStateChange",atTopStateChange:"atTopStateChange",stateChanged:"stateChanged",readyStateChanged:"readyStateChanged"}},e.memo(function({...a}){let b=cr("useWindowScroll"),c=cr("customScrollParent"),e=c||b?cu:ct,f=c||b?cp:co,g=cr("context");return(0,d.jsx)(e,{...a,...bC(e,g),children:(0,d.jsxs)(f,{children:[(0,d.jsx)(cm,{}),(0,d.jsx)(cl,{}),(0,d.jsx)(cn,{})]})})})),ct=bG({useEmitter:cq,useEmitterValue:cr,usePublisher:cs}),cu=bH({useEmitter:cq,useEmitterValue:cr,usePublisher:cs});function cv(a,b,c){return"normal"!==b&&b?.endsWith("px")!==!0&&c(`${a} was not resolved to pixel value correctly`,b,2),"normal"===b?0:parseInt(b??"0",10)}},89494:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(30285).A)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]])},90295:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("list-filter",[["path",{d:"M2 5h20",key:"1fs1ex"}],["path",{d:"M6 12h12",key:"8npq4p"}],["path",{d:"M9 19h6",key:"456am0"}]])},90734:(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"forbidden",{enumerable:!0,get:function(){return d}}),c(61222).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},99506:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(71859).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])}};
@@ -0,0 +1,19 @@
1
+ "use strict";exports.id=475,exports.ids=[475],exports.modules={1065:(a,b,c)=>{c.d(b,{ND:()=>s,RD:()=>q,TG:()=>h,_M:()=>k,mL:()=>j});var d=c(73024),e=c(48161),f=c(76760),g=c(77597);function h(){return process.env.DRYDOCK_HOME??(0,f.join)((0,e.homedir)(),".drydock")}function i(a){return a.replace(/[^a-zA-Z0-9._-]/g,"-")}function j(a,b){let c=b?b.normalize("NFKD").replace(/\p{Diacritic}/gu,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,50).replace(/-+$/g,""):"";return c?`issue-${a}-${c}`:`issue-${a}`}function k(a){return(0,f.join)(h(),"worktrees",i(a))}let l="claude|anthropic|codex|openai|chatgpt|copilot|gemini|cursor|devin",m=RegExp(`^(?:co-authored-by:.*\\b(?:${l})\\b|🤖?\\s*generated (?:with|by)\\b.*\\b(?:${l})\\b)`,"i");function n(a){return a.split("\n").filter(a=>!m.test(a.trim())).join("\n").replace(/\n{3,}/g,"\n\n").replace(/\s+$/,"")}function o(a){return""===a.trim()?"chore: update":a}class p extends Error{}class q extends p{constructor(){super("nothing to commit")}}let r=new Map;class s{constructor(a=g.Sx){this.run=a}withRepoLock(a,b){let c=(r.get(a)??Promise.resolve()).then(b,b);return r.set(a,c.then(()=>void 0,()=>void 0)),c}async git(a,b){let c=await this.run("git",a,b);if(0!==c.exitCode)throw new p(c.stderr.trim()||`git ${a[0]} failed`);return c.stdout}async prepare(a,b,c=0,e=`issue-${c}`){let g=`drydock/${e}-job-${b}`,h=(0,f.join)(k(a.name),`job-${b}`),i=await this.withRepoLock(a.path,async()=>(await this.git(["-C",a.path,"worktree","remove","--force",h]).catch(()=>void 0),(0,d.rmSync)(h,{recursive:!0,force:!0}),await this.git(["-C",a.path,"worktree","prune"]).catch(()=>void 0),await this.git(["-C",a.path,"branch","-D",g]).catch(()=>void 0),await this.git(["-C",a.path,"worktree","add","-b",g,h,a.defaultBranch]),this.resolveBase(a.path,g)));return{path:h,branch:g,base:i}}async prepareForBranch(a,b,c){let d=(0,f.join)(k(a.name),`fb-${i(c)}`),e=await this.withRepoLock(a.path,async()=>(await this.git(["-C",a.path,"fetch","origin",b]),await this.git(["-C",a.path,"worktree","add",d,b]),this.resolveBase(a.path,b)));return{path:d,branch:b,base:e}}async prepareResume(a,b,c){let e=(0,f.join)(k(a.name),`job-${b}`),g=await this.withRepoLock(a.path,async()=>(await this.git(["-C",a.path,"worktree","remove","--force",e]).catch(()=>void 0),(0,d.rmSync)(e,{recursive:!0,force:!0}),await this.git(["-C",a.path,"worktree","prune"]).catch(()=>void 0),await this.git(["-C",a.path,"branch","-D",c]).catch(()=>void 0),await this.git(["-C",a.path,"fetch","origin",c]),await this.git(["-C",a.path,"worktree","add","-B",c,e,`origin/${c}`]),this.resolveBase(a.path,c)));return{path:e,branch:c,base:g}}async prepareForNewBranch(a,b,c){let d=(0,f.join)(k(a.name),`dh-${i(c)}`),e=await this.withRepoLock(a.path,async()=>(await this.git(["-C",a.path,"worktree","add","-b",b,d,a.defaultBranch]),this.resolveBase(a.path,b)));return{path:d,branch:b,base:e}}async resolveBase(a,b){return(await this.git(["-C",a,"rev-parse",b])).trim()}async hasNewCommits(a){return!!a.base&&Number.parseInt((await this.git(["rev-list","--count",`${a.base}..HEAD`],a.path)).trim()||"0",10)>0}async stageForPush(a,b){return(await this.git(["add","-A"],a.path),""!==(await this.git(["status","--porcelain"],a.path)).trim())?(await this.git(["commit","-m",o(n(b))],a.path),!0):this.hasNewCommits(a)}async commitAndPush(a,b){if(!await this.stageForPush(a,b))throw new q;await this.stripAttributionFromHistory(a),await this.git(["push","-u","origin",a.branch],a.path)}async commitAndPushForHuman(a,b){return!!await this.stageForPush(a,b)&&(await this.stripAttributionFromHistory(a),await this.git(["push","-u","origin",a.branch],a.path),!0)}async stripAttributionFromHistory(a){if(!a.base)return;let b=(await this.git(["rev-list","--reverse",`${a.base}..HEAD`],a.path)).trim();if(!b)return;let c=b.split("\n"),d=[],e=!1;for(let b of c){let c=(await this.git(["log","-1","--format=%B",b],a.path)).replace(/\s+$/,""),f=n(c);d.push({sha:b,original:c,cleaned:f}),f!==c&&(e=!0)}if(e)for(let b of(await this.git(["reset","--hard",a.base],a.path),d))await this.git(["cherry-pick",b.sha],a.path),b.cleaned!==b.original&&await this.git(["commit","--amend","-m",o(b.cleaned)],a.path)}async remove(a,b){await this.withRepoLock(b,async()=>{await this.git(["-C",b,"worktree","remove","--force",a.path]),await this.git(["-C",b,"worktree","prune"])})}}},9617:(a,b,c)=>{let d;c.d(b,{Ix:()=>u,Ym:()=>q,_$:()=>p,jQ:()=>r,m:()=>n,pp:()=>t,sV:()=>m,wL:()=>s});var e=c(77598),f=c(48161),g=c(97496),h=c(84232),i=c(2025),j=c(64537),k=c(2412),l=c(52479);let m=3e4,n=1e4,o=()=>Math.floor(Date.now()/1e3);function p(){return d||(d=`${(0,f.hostname)()}#${process.pid}`),d}function q(a={},b=(0,i.Lf)()){let{repoIds:c,excludeAgents:d}=a;if(c&&0===c.length)return;let f=a.leaseMs??m,l=a.worker??p(),n=a.now??o();return b.transaction(a=>{let b=a.select({job:j.jobs}).from(j.jobs).leftJoin(j.issues,(0,g.Uo)((0,g.eq)(j.issues.repoId,j.jobs.repoId),(0,g.eq)(j.issues.number,j.jobs.issueNumber))).where((0,g.Uo)((0,g.eq)(j.jobs.status,"queued"),(0,g.or)((0,g.kZ)(j.jobs.availableAt),(0,g.wJ)(j.jobs.availableAt,n)),c?(0,g.RV)(j.jobs.repoId,c):void 0,d&&d.length>0?(0,g.KL)(j.jobs.agent,d):void 0)).orderBy((0,h.ll)`COALESCE(${j.issues.priority}, 1e9)`,j.jobs.createdAt).get()?.job;if(b)return(0,k.dk)(b.id,"working",{leaseToken:(0,e.randomUUID)(),leaseExpiresAt:n+Math.ceil(f/1e3),workerId:l,attempts:b.attempts+1,availableAt:null},a)})}function r(a,b,c={},d=(0,i.Lf)()){let e=c.leaseMs??m,f=c.now??o();return d.update(j.jobs).set({leaseExpiresAt:f+Math.ceil(e/1e3)}).where((0,g.Uo)((0,g.eq)(j.jobs.id,a),(0,g.eq)(j.jobs.leaseToken,b),(0,g.eq)(j.jobs.status,"working"))).run().changes>0}function s(a,b,c=(0,i.Lf)()){return c.update(j.jobs).set({leaseToken:null,leaseExpiresAt:null,workerId:null}).where((0,g.Uo)((0,g.eq)(j.jobs.id,a),(0,g.eq)(j.jobs.leaseToken,b))).run().changes>0}function t(a={},b=(0,i.Lf)()){let c=a.now??o(),d=a.expiredBefore,e=void 0===d?void 0:(0,g.or)((0,g.kZ)(j.jobs.leaseExpiresAt),(0,g.wJ)(j.jobs.leaseExpiresAt,d)),f=b.select().from(j.jobs).where((0,g.Uo)((0,g.eq)(j.jobs.status,"working"),e)).all();for(let a of f)b.update(j.jobs).set({status:"queued",leaseToken:null,leaseExpiresAt:null,workerId:null,availableAt:c+function(a,b=5,c=300){return a<=0?0:Math.min(b*2**(a-1),c)}(a.attempts)}).where((0,g.eq)(j.jobs.id,a.id)).run(),(0,k.yM)(a.id,"status",{from:"working",to:"queued",reason:"lease_expired"},b);return f.length}function u(a,b=(0,i.Lf)()){let c=a.dedupeKey??`${a.repoId}:${a.issueNumber}`;if(!b.select({id:j.jobs.id}).from(j.jobs).where((0,g.Uo)((0,g.eq)(j.jobs.dedupeKey,c),(0,g.KL)(j.jobs.status,[...l.kl]))).get())try{return(0,k._S)({...a,dedupeKey:c},b)}catch(a){if(a instanceof Error&&"string"==typeof a.code&&"SQLITE_CONSTRAINT_UNIQUE"===a.code)return;throw a}}},16544:(a,b,c)=>{c.d(b,{A:()=>f,i:()=>g});let d=new Set(["OWNER","MEMBER","COLLABORATOR"]);function e(a){try{let b=JSON.parse(a);return Array.isArray(b)?b.filter(a=>"string"==typeof a):[]}catch{return[]}}function f(a){return{autoTriageEnabled:a.autoTriageEnabled,autoProcessEnabled:a.autoProcessEnabled,autoHealCi:a.autoHealCi,autoReviewFeedback:a.autoReviewFeedback,mergeWithoutChecks:a.mergeWithoutChecks,autoResolveMergeConflicts:a.autoResolveMergeConflicts,includeProgressReplies:a.includeProgressReplies,autoDecompose:a.autoDecompose,planFirst:a.planFirst,verifyPr:a.verifyPr,autoHealDeployments:a.autoHealDeployments,releaseEnabled:a.releaseEnabled,deploymentPlatform:a.deploymentPlatform,readyLabels:e(a.readyLabels),blockingLabels:e(a.blockingLabels),autoLabelWhitelist:e(a.autoLabelWhitelist),priorityAuthors:e(a.priorityAuthors),trustedReviewers:e(a.trustedReviewers),trustedBots:e(a.trustedBots),ignoredBots:e(a.ignoredBots),minAuthorAssociation:"any"===a.minAuthorAssociation?"any":"approved",maxAttempts:a.maxAttempts,sandbox:"docker"===a.sandbox?"docker":"none",sandboxImage:a.sandboxImage,sandboxAllowNetwork:a.sandboxAllowNetwork,sandboxCpus:a.sandboxCpus,sandboxMemory:a.sandboxMemory}}function g(a,b){return"any"===a.minAuthorAssociation||null!=b&&d.has(b.toUpperCase())}},27630:(a,b,c)=>{c.d(b,{V:()=>A,n:()=>B});var d=c(97496),e=c(84232),f=c(51214),g=c(20203),h=c(2025),i=c(64537),j=c(94534),k=c(26287),l=c(29668),m=c(48733),n=c(2412),o=c(7611),p=c(5079),q=c(96356);function r(a,b){return!b.timedOut&&!b.costExceeded&&"error_max_turns"===a.resultSubtype}function s(a,b,c,d){let e=(0,o.nc)(a.id,d);if(e)return c.publish(b.id,{type:"error",payload:{stderr:`session not started: ${a.label} is limit-blocked (${e.kind}) until ${new Date(1e3*e.blockedUntil).toISOString()}`}}),{exitCode:-3,costUsd:0,inputTokens:0,outputTokens:0,timedOut:!1,costExceeded:!1,maxTurnsReached:!1,limit:{agent:a.id,kind:e.kind,resetAt:e.blockedUntil,rawSnippet:e.rawSnippet,latched:!0}}}function t(a,b,c,d){if(!d.timedOut&&!d.costExceeded&&(0!==d.exitCode||b.resultIsError))return a.classifyFailure?.({exitCode:d.exitCode,stderr:c,resultText:b.resultText,resultIsError:b.resultIsError})}function u(a,b,c){let d=Math.floor(Date.now()/1e3),e=(0,f.qE)(b.rateLimit,d);e&&(0,p.IP)(a.id,e,c);let g=a.captureUsage?.(b);g&&(0,p.Cx)(g,c,d)}function v(a,b){let c=()=>{},d=!1;return{tripped:new Promise(a=>{c=a}),observe(){!d&&b()>=a&&(d=!0,c())}}}function w(a,b={}){let{timeoutMs:c,costTripped:d}=b,e=b.graceMs??5e3,f=!!c&&c>0;return f||d?new Promise(b=>{let g,h=!1,i=!1,j=a=>{h||(h=!0,b(a))},k=b=>{let c;if(i)return;i=!0,g&&clearTimeout(g),a.abort();let d=new Promise(a=>{c=setTimeout(a,e),c.unref?.()});Promise.race([a.done,d]).then(()=>{clearTimeout(c),j(b)})};f&&(g=setTimeout(()=>{k({exitCode:-1,timedOut:!0,costExceeded:!1})},c),g.unref?.()),d?.then(()=>{k({exitCode:-2,timedOut:!1,costExceeded:!0})}),a.done.then(a=>{i||(g&&clearTimeout(g),j({exitCode:a,timedOut:!1,costExceeded:!1}))})}):a.done.then(a=>({exitCode:a,timedOut:!1,costExceeded:!1}))}let x={costUsd:0,inputTokens:0,outputTokens:0};function y(a,b){let c=a.select().from(i.jobs).where((0,d.eq)(i.jobs.id,b)).get();return{costUsd:c?.costUsd??0,inputTokens:c?.totalInputTokens??0,outputTokens:c?.totalOutputTokens??0}}function z(a,b){return{chunks:a.chunks,costUsd:b.costUsd,inputTokens:b.inputTokens,outputTokens:b.outputTokens}}async function A(a,b,f,k={}){let l=k.db??(0,h.Lf)(),o=k.runner??j.g,p=k.broker??(0,m.k)(),B=k.provider??(0,g.X$)(a.agent);if("http"===B.kind){let{runOpenRouterJobSession:d}=await c.e(908).then(c.bind(c,17908));return d(a,b,f,{db:l,broker:k.broker,timeoutMs:k.timeoutMs,costCapUsd:k.costCapUsd,sideSession:k.sideSession,fetchImpl:k.fetchImpl,toolExecutor:k.toolExecutor})}let C=k.command??B.defaultCommand,D=a.model??B.defaultModel,E=B.createParser();E.onParseError=b=>p.publish(a.id,{type:"parse_error",payload:b});let F=s(B,a,p,l);if(F)return F;k.sideSession||("working"!==a.status?(0,n.dk)(a.id,"working",{model:D},l):l.update(i.jobs).set({model:D}).where((0,d.eq)(i.jobs.id,a.id)).run());let G=()=>E.costUsd>0?E.costUsd:B.estimateCost(D,E.totalInputTokens,E.totalOutputTokens,E.totalCacheCreationInputTokens,E.totalCacheReadInputTokens),H=k.costCapUsd&&k.costCapUsd>0?v(k.costCapUsd,G):void 0,I=k.sideSession?y(l,a.id):x,J=()=>({costUsd:I.costUsd+G(),inputTokens:I.inputTokens+E.totalInputTokens,outputTokens:I.outputTokens+E.totalOutputTokens}),K=B.buildStartArgs({prompt:b,model:D,maxTurns:a.maxTurns,bypassPermissions:k.bypassPermissions}),L="",M=o(C,K,f,{onStdout:b=>{for(let c of E.push(b))p.publish(a.id,{type:c.type,payload:z(c,J())});H?.observe()},onStderr:b=>{L=(L+b).slice(-16384),p.publish(a.id,{type:"error",payload:{stderr:b}})}});(0,q.registerAbort)(a.id,M.abort);let{exitCode:N,timedOut:O,costExceeded:P}=await w(M,{timeoutMs:k.timeoutMs,costTripped:H?.tripped,graceMs:k.graceMs});(0,q.clearAbort)(a.id);let Q=O||P?void 0:M.spawnError;for(let b of(O&&p.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${k.timeoutMs}ms`}}),P&&p.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${k.costCapUsd} reached`}}),E.flush()))p.publish(a.id,{type:b.type,payload:z(b,J())});let R=E.costUsd>0?E.costUsd:B.estimateCost(D,E.totalInputTokens,E.totalOutputTokens,E.totalCacheCreationInputTokens,E.totalCacheReadInputTokens);return k.sideSession?l.update(i.jobs).set({totalInputTokens:(0,e.ll)`coalesce(${i.jobs.totalInputTokens}, 0) + ${E.totalInputTokens}`,totalOutputTokens:(0,e.ll)`coalesce(${i.jobs.totalOutputTokens}, 0) + ${E.totalOutputTokens}`,costUsd:(0,e.ll)`coalesce(${i.jobs.costUsd}, 0) + ${R}`}).where((0,d.eq)(i.jobs.id,a.id)).run():l.update(i.jobs).set({sessionId:E.sessionId,totalInputTokens:E.totalInputTokens,totalOutputTokens:E.totalOutputTokens,costUsd:R}).where((0,d.eq)(i.jobs.id,a.id)).run(),u(B,E,l),{exitCode:N,sessionId:E.sessionId,costUsd:R,inputTokens:E.totalInputTokens,outputTokens:E.totalOutputTokens,timedOut:O,costExceeded:P,maxTurnsReached:r(E,{timedOut:O,costExceeded:P}),spawnError:Q,limit:t(B,E,L,{exitCode:N,timedOut:O,costExceeded:P})}}async function B(a,b,e,f,n={}){let o=n.db??(0,h.Lf)(),p=n.runner??j.g,x=n.broker??(0,m.k)(),A=n.provider??(0,g.X$)(a.agent),C=n.resumePrompt??(0,l.Xm)((0,l.yx)(a.repoId,k._.ciFix,o),{CI_LOG:e});if("http"===A.kind){let{runOpenRouterJobSession:b}=await c.e(908).then(c.bind(c,17908));return b(a,C,f,{db:o,broker:n.broker,timeoutMs:n.timeoutMs,costCapUsd:n.costCapUsd,sideSession:n.sideSession,additive:!0,maxTurns:n.resumeMaxTurns??A.resumeMaxTurns,fetchImpl:n.fetchImpl,toolExecutor:n.toolExecutor})}let D=n.command??A.defaultCommand,E=n.resumeModel??A.resumeModel,F=n.resumeMaxTurns??A.resumeMaxTurns,G=A.createParser();G.onParseError=b=>x.publish(a.id,{type:"parse_error",payload:b});let H=s(A,a,x,o);if(H)return{...H,sessionId:b};let I=y(o,a.id),J=()=>{let a=G.costUsd>0?G.costUsd:A.estimateCost(E,G.totalInputTokens,G.totalOutputTokens,G.totalCacheCreationInputTokens,G.totalCacheReadInputTokens);return I.costUsd+a},K=n.costCapUsd&&n.costCapUsd>0?v(n.costCapUsd,J):void 0,L=()=>({costUsd:J(),inputTokens:I.inputTokens+G.totalInputTokens,outputTokens:I.outputTokens+G.totalOutputTokens}),M=(A.supportsResume?A.buildResumeArgs({prompt:C,sessionId:b,model:E,maxTurns:F,bypassPermissions:n.bypassPermissions}):null)??A.buildStartArgs({prompt:C,model:E,maxTurns:F,bypassPermissions:n.bypassPermissions}),N="",O=p(D,M,f,{onStdout:b=>{for(let c of G.push(b))x.publish(a.id,{type:c.type,payload:z(c,L())});K?.observe()},onStderr:b=>{N=(N+b).slice(-16384),x.publish(a.id,{type:"error",payload:{stderr:b}})}});(0,q.registerAbort)(a.id,O.abort);let{exitCode:P,timedOut:Q,costExceeded:R}=await w(O,{timeoutMs:n.timeoutMs,costTripped:K?.tripped,graceMs:n.graceMs});(0,q.clearAbort)(a.id);let S=Q||R?void 0:O.spawnError;for(let b of(Q&&x.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${n.timeoutMs}ms`}}),R&&x.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${n.costCapUsd} reached`}}),G.flush()))x.publish(a.id,{type:b.type,payload:z(b,L())});let T=G.costUsd>0?G.costUsd:A.estimateCost(E,G.totalInputTokens,G.totalOutputTokens,G.totalCacheCreationInputTokens,G.totalCacheReadInputTokens),U=o.select().from(i.jobs).where((0,d.eq)(i.jobs.id,a.id)).get();return o.update(i.jobs).set({sessionId:G.sessionId??b,totalInputTokens:(U?.totalInputTokens??0)+G.totalInputTokens,totalOutputTokens:(U?.totalOutputTokens??0)+G.totalOutputTokens,costUsd:(U?.costUsd??0)+T}).where((0,d.eq)(i.jobs.id,a.id)).run(),u(A,G,o),{exitCode:P,sessionId:G.sessionId??b,costUsd:T,inputTokens:G.totalInputTokens,outputTokens:G.totalOutputTokens,timedOut:Q,costExceeded:R,maxTurnsReached:r(G,{timedOut:Q,costExceeded:R}),spawnError:S,limit:t(A,G,N,{exitCode:P,timedOut:Q,costExceeded:R})}}},35494:(a,b,c)=>{c.d(b,{$J:()=>n,DS:()=>t,Hb:()=>s,IZ:()=>i,JY:()=>m,Pn:()=>k,_1:()=>x,f1:()=>v,i2:()=>l,jQ:()=>j});var d=c(73024),e=c(76760),f=c(1065);let g=!1,h=new Set;function i(a){g=a}function j(){return g}function k(a){h.add(a)}function l(a){h.delete(a)}function m(){return h.size}function n(a=3e4,b=100){let c=Date.now()+a;return new Promise(a=>{let d=()=>{if(0===h.size||Date.now()>=c)return a();setTimeout(d,b)};d()})}function o(){return(0,e.join)((0,f.TG)(),"instance.lock")}function p(a){try{return process.kill(a,0),!0}catch{return!1}}function q(a){try{var b;let c,e,f,g;return b=(0,d.readFileSync)(a,"utf8"),e=(c=JSON.parse(b)).pid,f="number"==typeof e&&Number.isInteger(e)&&e>0?e:null,g=c.ts,{pid:f,ts:"number"==typeof g&&Number.isFinite(g)?g:null}}catch{return{pid:null,ts:null}}}function r(a){let b=(0,d.openSync)(a,"wx");try{(0,d.writeSync)(b,JSON.stringify({pid:process.pid,ts:Date.now()}))}finally{(0,d.closeSync)(b)}}function s(){let{pid:a,ts:b}=q(o()),c=null!==b&&Date.now()-b<=9e4,d=null!==a&&c&&p(a);return{held:d,pid:a,self:d&&a===process.pid}}function t(){let a=o();(0,d.mkdirSync)((0,e.dirname)(a),{recursive:!0});try{return r(a),!0}catch{}if(!function(a,b){let{pid:c,ts:d}=a;return!(null!==c&&c!==process.pid&&p(c))||null===d||b-d>9e4}(q(a),Date.now()))return!1;try{return(0,d.unlinkSync)(a),r(a),!0}catch{return!1}}let u=null;function v(a=3e4){w(),u=setInterval(()=>{!function(){let a=o();if(q(a).pid!==process.pid)return!1;let b=`${a}.${process.pid}.tmp`;try{if((0,d.writeFileSync)(b,JSON.stringify({pid:process.pid,ts:Date.now()})),q(a).pid!==process.pid)return(0,d.unlinkSync)(b),!1;return(0,d.renameSync)(b,a),!0}catch{try{(0,d.unlinkSync)(b)}catch{}return!1}}()&&w()},a),u.unref?.()}function w(){u&&(clearInterval(u),u=null)}function x(){w();let a=o();if(q(a).pid===process.pid)try{(0,d.unlinkSync)(a)}catch{}}},41947:(a,b,c)=>{c.d(b,{m:()=>e});var d=c(74644);function e(a,b){if("http"===a.kind)return a.id;let c=(0,d.mt)(b);return"codex"===a.id?c.codexPath:c.claudePath}},44769:(a,b,c)=>{c.d(b,{t:()=>d});function d(a){let b=process.env.DRYDOCK_OPENROUTER_API_KEY?.trim();return b||a.openrouterApiKey}},48036:(a,b,c)=>{c.d(b,{Pe:()=>g,dj:()=>h});var d=c(97496),e=c(2025),f=c(64537);function g(a,b=(0,e.Lf)(),c){let h=[];return a&&h.push((0,d.eq)(f.adrs.status,a)),void 0!==c&&h.push((0,d.eq)(f.adrs.repoId,c)),(h.length?b.select().from(f.adrs).where((0,d.Uo)(...h)).all():b.select().from(f.adrs).all()).sort((a,b)=>b.createdAt-a.createdAt)}function h(a=(0,e.Lf)()){return a.select().from(f.adrs).where((0,d.eq)(f.adrs.status,"pending_review")).all().length}},48733:(a,b,c)=>{let d;c.d(b,{k:()=>k});var e=c(97496),f=c(14694),g=c(2025),h=c(64537),i=c(14543);class j{constructor(a=(0,g.Lf)()){this.db=a,this.subs=new Map}subscribe(a,b){let c=this.subs.get(a);c||(c=new Set,this.subs.set(a,c)),c.add(b)}unsubscribe(a,b){let c=this.subs.get(a);c&&(c.delete(b),0===c.size&&this.subs.delete(a))}subscriberCount(a){return this.subs.get(a)?.size??0}publish(a,b){let c,d=(0,i.f)(JSON.stringify(b.payload??{}));try{c=JSON.parse(d)}catch{c={error:"unparseable event payload"}}let e=this.db.insert(h.jobEvents).values({jobId:a,type:b.type,payload:d}).returning().get(),f=this.subs.get(a);if(f)for(let b of[...f])try{b.send({id:e.id,type:e.type,payload:c})}catch{this.unsubscribe(a,b)}return e}replay(a,b=200,c){return void 0!==c?this.db.select().from(h.jobEvents).where((0,e.Uo)((0,e.eq)(h.jobEvents.jobId,a),(0,e.gt)(h.jobEvents.id,c))).orderBy(h.jobEvents.ts,h.jobEvents.id).limit(b).all():this.db.select().from(h.jobEvents).where((0,e.eq)(h.jobEvents.jobId,a)).orderBy((0,f.i)(h.jobEvents.ts),(0,f.i)(h.jobEvents.id)).limit(b).all().reverse()}}function k(){return d||(d=new j),d}},52484:(a,b,c)=>{c.d(b,{dC:()=>f,rN:()=>e});let d=new Set;function e(a){return b=>new Promise(c=>{let e={repoId:a.repoId,prNumber:a.prNumber,wake:b=>{d.delete(e),clearTimeout(f);try{a.onNudge?.(b)}catch{}c()}},f=setTimeout(()=>{d.delete(e),c()},b);f.unref?.(),d.add(e)})}function f(a,b,c){let e=[...d].filter(c=>c.repoId===a&&(0===b.length||b.includes(c.prNumber)));for(let a of e)a.wake(c);return e.length}},52819:(a,b,c)=>{c.d(b,{CZ:()=>j,PH:()=>f,RQ:()=>h,mW:()=>i});var d=c(2025),e=c(76373);async function f(a,b,c=(0,d.Lf)(),g=e.QD){a?b.active||(b.active=!0,await (0,e.JD)("cost_limit","\uD83D\uDCB8 Daily cost limit reached — new jobs are paused until the budget resets.",c,g)):b.active=!1}let g={claude:{event:"claude_limit",blocked:"⏳ Claude usage limit reached — Claude jobs are parked until the quota resets.",cleared:"▶️ Claude quota available again — parked jobs are resuming."},codex:{event:"codex_limit",blocked:"⏳ Codex usage limit reached — Codex jobs are parked until the quota resets.",cleared:"▶️ Codex capacity available again — parked jobs are resuming."},openrouter:{event:"openrouter_limit",blocked:"⏳ OpenRouter limit reached — OpenRouter jobs are parked until the window resets.",cleared:"▶️ OpenRouter available again — parked jobs are resuming."}};async function h(a,b,c,f=(0,d.Lf)(),i=e.QD){let j=g[a];if(b){if(c.active)return;c.active=!0,await (0,e.JD)(j.event,j.blocked,f,i)}else{if(!c.active)return;c.active=!1,await (0,e.JD)(j.event,j.cleared,f,i)}}async function i(a,b,c=(0,d.Lf)(),f=e.QD){if(a.length>0){if(b.active)return;b.active=!0;let d=a.map(a=>`${a.label}: ${a.message}`).join("; ");await (0,e.JD)("auth_expired",`🔑 Credential check failed — new jobs are paused until auth is restored. ${d}`,c,f)}else{if(!b.active)return;b.active=!1,await (0,e.JD)("auth_expired","\uD83D\uDD11 Credentials restored — the queue is resuming.",c,f)}}async function j(a=(0,d.Lf)(),b=e.QD){await (0,e.JD)("automation_paused","\uD83C\uDF19 Automation draining — finishing in-flight jobs, then shutting down.",a,b)}},59144:(a,b,c)=>{c.d(b,{MQ:()=>h,kf:()=>e,mU:()=>f,rr:()=>g});let d=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function e(a){let b=d.exec(a.trim());return b?{major:Number(b[1]),minor:Number(b[2]),patch:Number(b[3]),prerelease:b[4]??null}:null}function f(a,b){var c,d;let f=e(a),g=e(b);if(!f||!g)throw Error(`cannot compare versions: "${a}" vs "${b}"`);return f.major!==g.major?f.major-g.major:f.minor!==g.minor?f.minor-g.minor:f.patch!==g.patch?f.patch-g.patch:(c=f.prerelease,c===(d=g.prerelease)?0:null===c?1:null===d||c<d?-1:1)}function g(a,b){let c=e(a);if(!c)throw Error(`cannot bump unparseable version: "${a}"`);let{major:d,minor:f,patch:g}=c;return"major"===b?`${d+1}.0.0`:"minor"===b?`${d}.${f+1}.0`:`${d}.${f}.${g+1}`}function h(a,b){return!!e(a)&&!!e(b)&&f(a,b)>0}},62907:(a,b,c)=>{c.d(b,{L4:()=>F,Yr:()=>H});var d=c(20203),e=c(2025),f=c(54304),g=c(24978),h=c(1065),i=c(64417),j=c(75818),k=c(16544),l=c(41947),m=c(27630),n=c(2412),o=c(7611),p=c(97496),q=c(64537);let r=["resolved","failed","rejected","flagged"],s={pending:["queued","rejected","flagged"],queued:["in_progress","flagged","rejected"],in_progress:["resolved","failed","flagged","queued"],resolved:[],failed:[],rejected:[],flagged:[]};class t extends Error{constructor(a,b){super(`invalid feedback transition: ${a} -> ${b}`)}}function u(a){return a.toLowerCase().replace(/\[bot\]$/,"")}let v=/\b(out of scope|follow[- ]?up|separate pr|different pr|unrelated|won'?t fix|nevermind|never mind|ignore this)\b/i,w=/\b(please|change|rename|fix|add|remove|delete|use|extract|refactor|move|replace|guard|handle|update|simplify|inline|should be|consider|nit)\b/i;function x(a,b,c={},d=(0,e.Lf)()){let f=d.select().from(q.reviewFeedbackItems).where((0,p.eq)(q.reviewFeedbackItems.id,a)).get();if(!f)throw Error(`review feedback item ${a} not found`);var g=f.status;if(!s[g].includes(b))throw new t(g,b);return d.update(q.reviewFeedbackItems).set({status:b,detail:c.detail??f.detail,attempts:"in_progress"===b?f.attempts+1:f.attempts,updatedAt:Math.floor(Date.now()/1e3)}).where((0,p.eq)(q.reviewFeedbackItems.id,a)).returning().get()}let y={maxItemsPerSweep:3,maxAttemptsPerItem:2};async function z(a,b,c){var d;let e=(d=b.id,`<!-- drydock:review-feedback:${d} -->`),f=`${c}
2
+
3
+ ${e}`,g=b.comments.find(a=>a.body.includes(e));g?await a.updateReviewComment(g.id,f):await a.replyToReviewThread(b.id,f)}async function A(a,b,c){let d=c.db??(0,e.Lf)(),f=c.budgets??y,g={processed:0,resolved:0,flagged:0,rejected:0,failed:0,skipped:0},h=await c.forge.listReviewThreads(b),i=0;for(let k of h){var j;if(k.isResolved){g.skipped++;continue}let h=k.comments[0];if(!h||!function(a,b,c={}){let d=a.toLowerCase();if(c.isBot||d.endsWith("[bot]")){let c=u(a);return!b.ignoredBots.some(a=>u(a)===c)&&b.trustedBots.some(a=>u(a)===c)}return!b.ignoredBots.some(a=>a.toLowerCase()===d)&&b.trustedReviewers.some(a=>a.toLowerCase()===d)}(h.author,c.gate,{isBot:h.authorIsBot})){g.skipped++;continue}let l=function(a){let b=a.trim();return v.test(b)?"out_of_scope":w.test(b)?"actionable":b.includes("?")?"question":"actionable"}(h.body),m=function(a,b=(0,e.Lf)()){let c=function(a,b,c=(0,e.Lf)()){return c.select().from(q.reviewFeedbackItems).where((0,p.Uo)((0,p.eq)(q.reviewFeedbackItems.jobId,a),(0,p.eq)(q.reviewFeedbackItems.threadId,b))).get()}(a.jobId,a.threadId,b);return c||b.insert(q.reviewFeedbackItems).values({jobId:a.jobId,prNumber:a.prNumber,threadId:a.threadId,reviewer:a.reviewer,classification:a.classification}).returning().get()}({jobId:a,prNumber:b,threadId:k.id,reviewer:h.author,classification:l},d);if(j=m.status,r.includes(j)){g.skipped++;continue}if("in_progress"===m.status&&(m=x(m.id,"queued",{},d)),"pending"===m.status)try{await c.forge.reactToReviewComment(h.id,"EYES")}catch{}if("pending"===m.status){if("question"===l){m=x(m.id,"flagged",{},d),await z(c.forge,k,"Drydock: this looks like a question rather than a change request, so it's flagged for a human reviewer."),g.flagged++,g.processed++;continue}if("out_of_scope"===l){m=x(m.id,"rejected",{},d),await z(c.forge,k,"Drydock: treating this as out of scope for this PR — please open a follow-up issue if it should be tracked."),await c.forge.resolveReviewThread(k.id),g.rejected++,g.processed++;continue}m=x(m.id,"queued",{},d)}if("queued"===m.status){let a;if(i>=f.maxItemsPerSweep)continue;if(m.attempts>=f.maxAttemptsPerItem){m=x(m.id,"flagged",{},d),await z(c.forge,k,`Drydock: could not resolve this after ${m.attempts} attempt(s); flagging for a human.`),g.flagged++,g.processed++;continue}i++,m=x(m.id,"in_progress",{},d),c.includeProgressReplies&&await z(c.forge,k,"Drydock: working on this now…");try{a=await c.applyFeedback(m,k)}catch(b){a={ok:!1,detail:b instanceof Error?b.message:String(b)}}g.processed++,a.ok?(x(m.id,"resolved",{detail:a.detail},d),await z(c.forge,k,"Drydock: applied this change and pushed a commit. ✅"),await c.forge.resolveReviewThread(k.id),g.resolved++):m.attempts>=f.maxAttemptsPerItem?(x(m.id,"failed",{detail:a.detail},d),await z(c.forge,k,`Drydock: could not apply this automatically (${a.detail??"no change produced"}); flagging for a human.`),g.failed++):x(m.id,"queued",{detail:a.detail},d)}}return g}let B=new Set(["ci_running","ci_failed","retrying","needs_human"]);function C(a){return"function"==typeof a.listReviewThreads&&"function"==typeof a.replyToReviewThread&&"function"==typeof a.updateReviewComment&&"function"==typeof a.resolveReviewThread&&"function"==typeof a.reactToReviewComment}async function D(a={}){let b=a.db??(0,e.Lf)(),c=a.processJob??I;for(let d of(0,f.uP)(b))if((null==a.repoId||d.id===a.repoId)&&(0,k.A)(d).autoReviewFeedback)try{let e=a.forgeFor?.(d)??(0,g.Ie)(d);if(!C(e))continue;for(let a of(0,n.N6)(d.id,b).filter(a=>null!=a.prNumber&&B.has(a.status)&&!(0,o.nc)(a.agent,b)))try{await c(d,a,e)}catch(b){(0,j.v)(`[review-feedback] job ${a.id} failed for ${d.name}`,b)}}catch(a){(0,j.v)(`[review-feedback] sweep failed for ${d.name}`,a)}}let E=Promise.resolve();function F(a={}){let b=E.then(()=>D(a));return E=b.catch(()=>{}),b}let G=new Map;function H(a,b=2e3){let c=G.get(a);c&&clearTimeout(c);let d=setTimeout(()=>{G.delete(a),(0,i.v)("low",()=>F({repoId:a})).catch(b=>{(0,j.v)(`[webhook] review-feedback sweep failed for repo ${a}`,b)})},b);d.unref?.(),G.set(a,d)}async function I(a,b,c){var f;if(!C(c)||null==b.prNumber)return;let g=(0,e.Lf)(),i=(0,k.A)(a),n=(0,d.X$)(b.agent),o=(0,l.m)(n,g),p=(f={repo:a,job:b,worktrees:new h.ND,runSession:(a,b,c)=>(0,m.V)(a,b,c,{db:g,provider:n,command:o,sideSession:!0}).then(a=>({exitCode:a.exitCode}))},async(a,b)=>{if(!f.job.branch)return{ok:!1,detail:"job has no branch"};let c=await f.worktrees.prepareForBranch(f.repo,f.job.branch,`${f.job.id}-${b.id}`);try{let a,d,e=await f.runSession(f.job,(a=b.comments[0],d=b.path?`${b.path}${b.line?`:${b.line}`:""}`:"this PR",[`A reviewer left this comment on ${d} of the current pull request:`,"",(a?.body??"").trim(),"\nMake only the change this comment asks for. Do not address anything else.\nWhen done, ensure the working tree builds and tests pass, then stop — the\ncommit and push are handled for you."].join("\n")),c.path);if(0!==e.exitCode)return{ok:!1,detail:"agent exited non-zero"};try{await f.worktrees.commitAndPush(c,`Address review feedback on ${b.path??"PR"}`)}catch{return{ok:!1,detail:"no change produced"}}return{ok:!0}}finally{try{await f.worktrees.remove(c,f.repo.path)}catch(a){(0,j.v)(`[review-feedback] worktree cleanup failed for job ${f.job.id}`,a)}}});await A(b.id,b.prNumber,{forge:c,db:g,gate:{trustedReviewers:i.trustedReviewers,trustedBots:i.trustedBots,ignoredBots:i.ignoredBots},includeProgressReplies:i.includeProgressReplies,applyFeedback:p})}},70793:(a,b,c)=>{c.d(b,{T9:()=>h,U9:()=>g});var d=c(26557),e=c(27544),f=c(84232);function g(a){return(0,f.ll)`count(${a||f.ll.raw("*")})`.mapWith(Number)}function h(a){return(0,f.ll)`max(${a})`.mapWith((0,e.is)(a,d.V)?a:String)}},76373:(a,b,c)=>{c.d(b,{JD:()=>h,QD:()=>j});var d=c(2025),e=c(14543),f=c(74644);let g=[{id:"telegram",isConfigured:a=>!!(a.telegramBotToken&&a.telegramChatId),send:(a,b,c)=>c.postJson(`https://api.telegram.org/bot${b.telegramBotToken}/sendMessage`,{chat_id:b.telegramChatId,text:a})},{id:"slack",isConfigured:a=>!!a.slackWebhookUrl,send:(a,b,c)=>c.postJson(b.slackWebhookUrl,{text:a})},{id:"email",isConfigured:a=>!!(a.smtpHost&&a.emailFrom&&a.emailTo),send:(a,b,c)=>c.sendMail({to:b.emailTo,from:b.emailFrom,subject:"Drydock notification",text:a},{host:b.smtpHost,port:b.smtpPort,user:b.smtpUser,pass:b.smtpPass})}];async function h(a,b,c=(0,d.Lf)(),e=j){var k,l;let m=(0,f.mt)(c);if(!m.notifyEvents.includes(a))return;let n=g.filter(a=>a.isConfigured(m));0!==n.length&&await (k=i(n,b,m,e),l=()=>console.error(`[notify] dispatch for ${a} exceeded 5000ms; continuing in background`),new Promise(a=>{let b=setTimeout(()=>{l(),a()},5e3);b.unref?.();let c=()=>{clearTimeout(b),a()};k.then(c,c)}))}async function i(a,b,c,d){for(let f of a)try{await f.send(b,c,d)}catch(a){console.error(`[notify] ${f.id} delivery failed`,(0,e.f)(String(a)))}}let j={postJson:async(a,b)=>{let c=await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b),signal:AbortSignal.timeout(1e4)});if(!c.ok)throw Error(`HTTP ${c.status}`)},sendMail:async(a,b)=>{let d=(await c.e(689).then(c.t.bind(c,93689,19))).createTransport({host:b.host,port:b.port,secure:465===b.port,auth:b.user?{user:b.user,pass:b.pass}:void 0,connectionTimeout:1e4,greetingTimeout:1e4,socketTimeout:1e4});await d.sendMail(a)}}},87105:(a,b,c)=>{c.d(b,{D:()=>d});let d=async(a,b)=>{let c=await fetch(a,{method:b?.method??"GET",headers:b?.headers,body:b?.body,redirect:"manual"}),d=await c.text(),e={};return c.headers.forEach((a,b)=>{e[b.toLowerCase()]=a}),{status:c.status,ok:c.ok,body:d,headers:e}}},89405:(a,b,c)=>{let d,e;c.d(b,{Bd:()=>cl,tn:()=>cm,py:()=>cn});var f=c(97496),g=c(20203),h=c(2025),i=c(54304),j=c(64537),k=c(24978),l=c(64417),m=c(91549);let n=["blocked","wontfix","question","needs-human","needs-discussion"],o=[{label:"destructive command",re:/\brm\s+-rf\b|\bdrop\s+table\b|\bgit\s+push\s+--force\b|disable\s+auth/i},{label:"secret material",re:/\bapi[_-]?key\b|\bpassword\b|\bsecret\b|\.env\b|\bsk-[a-z0-9]/i},{label:"exfiltration",re:/\bcurl\b|\bwget\b|webhook|pastebin/i},{label:"privileged area",re:/\bauth(entication|orization)?\b|\bpayment|\bbilling\b|\bdeploy|\bsecurity\b|\bci\/cd\b/i}];function p(a){let b=[],c=a.labels.map(a=>a.toLowerCase()).find(a=>n.includes(a));if(c)return{decision:"blocked",reasons:[`blocking label: ${c}`]};let d=`${a.title}
4
+ ${a.body??""}`;for(let{label:a,re:c}of o)c.test(d)&&b.push(`${a} detected`);return b.length>0?{decision:"needs_review",reasons:b}:{decision:"approved",reasons:[]}}var q=c(24421),r=c(75818),s=c(16544);let t=[{label:"bug",re:/\b(bug|crash|crashes|broken|error|exception|fails?|regression|defect)\b/i},{label:"enhancement",re:/\b(add|support|feature|implement|enhancement|would be nice|allow|introduce)\b/i},{label:"documentation",re:/\b(docs?|documentation|readme|typo|wording|clarify)\b/i}];function u(a,b,c,d){d.update(j.issues).set({triageHash:c,triagedAt:Math.floor(Date.now()/1e3)}).where((0,f.Uo)((0,f.eq)(j.issues.repoId,a),(0,f.eq)(j.issues.number,b))).run()}async function v(a,b,c,d=(0,h.Lf)()){let e=(0,s.A)(a),g=function(a){let b=JSON.stringify([a.title,a.labels.map(a=>a.name).sort()]),c=5381;for(let a=0;a<b.length;a++)c=(c<<5)+c+b.charCodeAt(a)|0;return(c>>>0).toString(16)}(c),i=d.select().from(j.issues).where((0,f.Uo)((0,f.eq)(j.issues.repoId,a.id),(0,f.eq)(j.issues.number,c.number))).get();if(i?.triagedAt&&i.triageHash===g)return{number:c.number,applied:[],reasons:[],skipped:"unchanged"};if(!(0,s.i)(e,c.authorAssociation))return u(a.id,c.number,g,d),{number:c.number,applied:[],reasons:["author not approved"],skipped:"author"};let k=await b.viewIssue(c.number),l=p({number:k.number,title:k.title,body:k.body,labels:k.labels}),m=[],n=function(a,b){let c=new Set(b),d=`${a.title}
5
+ ${a.body}`,e=[];for(let{label:a,re:b}of t)c.has(a)&&b.test(d)&&!e.includes(a)&&e.push(a);return e}(k,e.autoLabelWhitelist);for(let a of n)m.push(`classified as ${a}`);if("approved"===l.decision){let a=e.readyLabels[0];a&&(n.push(a),m.push("safe and well-specified"))}else{let a=e.blockingLabels[0];a&&(n.push(a),m.push(...l.reasons.length?l.reasons:["flagged for human review"]))}let o=new Set([...e.autoLabelWhitelist,...e.readyLabels,...e.blockingLabels]),r=new Set(k.labels),w=[...new Set(n)].filter(a=>o.has(a)&&!r.has(a));if(w.length>0){for(let a of w)await b.ensureLabel(a);await b.addLabels(c.number,w);let e=w.map(a=>`\`${a}\``).join(", ");await b.commentIssue(c.number,`auto-triage: applied ${e} — reasons: ${m.join("; ")}.`),(0,q.sp)(a.id,c.number,w,[],d)}return u(a.id,c.number,g,d),{number:c.number,applied:w,reasons:m}}async function w(a,b,c,d=(0,h.Lf)()){let e=[];for(let f of c)try{e.push(await v(a,b,f,d))}catch(b){(0,r.v)(`[triage] issue #${f.number} failed for ${a.name}`,b)}return e}var x=c(52819),y=c(74340),z=c(44769),A=c(74644),B=c(41947),C=c(2412);let D={color:"d73a4a",description:"Drydock parked this issue; needs a human"};function E(a){return`<!-- drydock:needs-human:${a} -->`}async function F(a,b,c,d=(0,h.Lf)()){try{await c.ensureLabel(a.needsHumanLabel,D)}catch(a){(0,r.v)(`[needs-human] failed to ensure needs-human label on #${b}`,a)}try{await c.addLabels(b,[a.needsHumanLabel])}catch(a){(0,r.v)(`[needs-human] failed to add needs-human label on #${b}`,a)}try{await c.removeLabels(b,[a.queueLabel]),(0,q.nc)(a.id,b,a.queueLabel,!1,d)}catch(a){(0,r.v)(`[needs-human] failed to drop queue label on #${b}`,a)}}async function G(a,b,c,d){let e,f=E(c),g=(e=d.trim()||"review required",[E(c),`⚠️ **Drydock needs a human.** Job \`#${c}\` was parked and removed from the queue.`,"",`**Reason:** ${e}`,"\nFind it under **Needs human** in your Drydock dashboard, then requeue it once the blocker is cleared."].join("\n"));if(a.listIssueComments&&a.updateIssueComment)try{let c=(await a.listIssueComments(b)).find(a=>a.body.includes(f));if(c)return void await a.updateIssueComment(b,c.id,g)}catch(a){(0,r.v)(`[needs-human] comment upsert degraded to a fresh post on #${b}`,a)}await a.commentIssue(b,g)}async function H(a,b={}){let c=b.db??(0,h.Lf)(),d=(0,i.L8)(a.repoId,c);if(!d)return void(0,r.v)(`[needs-human] repo ${a.repoId} not found for job ${a.id}; skipping announce`);let e=b.forge??(0,k.Ie)(d);await F(d,a.issueNumber,e,c);try{await G(e,a.issueNumber,a.id,a.errorMessage??"")}catch(b){(0,r.v)(`[needs-human] failed to comment on #${a.issueNumber}`,b)}}var I=c(52479);let J="janitor",K=new Set(["ci_running","ci_failed","retrying"]);function L(a){return a?.startsWith("drydock/")??!1}async function M(a,b,c,d){if("function"!=typeof c.deleteBranch)return;let e=function(a,b){let c=b.select({jobId:j.jobEvents.jobId,payload:j.jobEvents.payload}).from(j.jobEvents).innerJoin(j.jobs,(0,f.eq)(j.jobEvents.jobId,j.jobs.id)).where((0,f.Uo)((0,f.eq)(j.jobEvents.type,J),(0,f.eq)(j.jobs.repoId,a))).all(),d=new Set;for(let a of c)try{"branch_deleted"===JSON.parse(a.payload??"{}").action&&d.add(a.jobId)}catch{}return d}(a,d),g=new Set(b.filter(a=>!["merged","released","aborted"].includes(a.status)).map(a=>a.branch).filter(L));for(let a of b.filter(a=>"merged"===a.status&&null!==a.prNumber&&L(a.branch)&&!e.has(a.id)&&!g.has(a.branch))){let b=a.branch;try{await c.deleteBranch(b),(0,C.yM)(a.id,J,{action:"branch_deleted",branch:b},d)}catch(c){(0,r.v)(`[janitor] branch delete failed for job ${a.id} (${b})`,c)}}}async function N(a,b,c,d){if("function"==typeof c.prMergeState)for(let e of b.filter(a=>K.has(a.status)&&null!==a.prNumber&&L(a.branch))){let b=e.prNumber;try{let f=await c.prMergeState(b);"behind"===f&&"function"==typeof c.updatePrBranch?(await c.updatePrBranch(b),(0,C.yM)(e.id,J,{action:"branch_updated",prNumber:b},d)):"conflicted"===f&&await O(a,e,b,c,d)}catch(a){(0,r.v)(`[janitor] PR refresh failed for job ${e.id} (PR #${b})`,a)}}}async function O(a,b,c,d,e){let f=`rebase needed: conflicts with ${a.defaultBranch}`;try{await d.commentIssue(b.issueNumber,`⚠️ PR #${c} conflicts with \`${a.defaultBranch}\` — a rebase is needed. Parking job #${b.id} for a human.`)}catch(a){(0,r.v)(`[janitor] conflict comment failed for job ${b.id}`,a)}try{let g=(0,C.ax)(b.id,e);if(!g||!K.has(g.status))return;(0,C.yM)(b.id,"status",{reason:"merge_conflict",prNumber:c},e),(0,C.dk)(b.id,"needs_human",{errorMessage:f},e),await F(a,b.issueNumber,d,e)}catch(a){if(!(a instanceof I.xh))throw a}}async function P(a={}){let b=a.db??(0,h.Lf)();for(let c of(0,i.uP)(b))try{let d=a.forgeFor?.(c)??(0,k.Ie)(c),e=(0,C.N6)(c.id,b);await M(c.id,e,d,b),await N(c,e,d,b)}catch(a){(0,r.v)(`[janitor] sweep failed for ${c.name}`,a)}}var Q=c(61408),R=c(77597);async function S(a,b={}){let c=b.command??a.defaultCommand,d=b.runner??R.Sx;try{let{stdout:b,exitCode:e}=await d(c,["--version"]);if(0===e)return{agent:a.id,installed:!0,version:b.trim()};return{agent:a.id,installed:!1,message:`${a.label} CLI '${c}' exited ${e} on --version. Check the installation or the CLI path in settings.`}}catch{return{agent:a.id,installed:!1,message:`${a.label} CLI '${c}' not found. Install it or set the correct CLI path in settings.`}}}var T=c(87105),U=c(25480),V=c(14543),W=c(93612);let X={kind:"ok"},Y={kind:"unknown"};function Z(a,b,c){return{kind:"failed",failure:{target:a,label:b,message:c}}}function $(a){return(0,V.f)(a.trim()).slice(0,200)}async function _(a){let b=a.db??(0,h.Lf)(),c={runner:a.runner??R.Sx,http:a.http??T.D,fetchImpl:a.fetchImpl??fetch,governor:a.governor??m.og,now:a.now??Date.now,probeTimeoutMs:a.probeTimeoutMs??3e4},d=(0,A.mt)(b),e=function(a,b,c,d){let e=[];a.some(a=>"gitlab"!==a.platform)&&e.push({id:"github",probe:async()=>{if(!d.governor.decide("core","low").allowed)return Y;try{let a=await d.runner(b.ghPath,["auth","status"],void 0,{timeoutMs:d.probeTimeoutMs});if(0===a.exitCode)return X;let c=$(a.stderr||a.stdout);return Z("github","GitHub CLI auth",`\`${b.ghPath} auth status\` exited ${a.exitCode}${c?`: ${c}`:""}. Re-authenticate with \`gh auth login\`.`)}catch(a){if(a instanceof Error&&/timed out/i.test(a.message))return Y;return Z("github","GitHub CLI auth",`GitHub CLI '${b.ghPath}' could not be probed: ${$(String(a))}`)}}});let f=new Map;for(let b of a){if("gitlab"!==b.platform||!b.apiBaseUrl||!b.apiToken)continue;let a=b.apiBaseUrl.trim().replace(/\/+$/,"");!a||f.has(a)||f.set(a,b.apiToken)}for(let[a,b]of f)e.push(function(a,b,c){let d=`gitlab:${a}`,e=a;try{e=new URL(a).host}catch{}let f=`GitLab (${e})`;return{id:d,probe:async()=>{let g=`${a}/api/v4/user`;try{(0,U.sM)(g,{allowPrivate:(0,U.gT)()})}catch(a){return(0,r.v)(`[watchdog] gitlab probe skipped for ${e}`,a),Y}try{var h,i;let a=await (h=c.http(g,{headers:{"PRIVATE-TOKEN":b}}),i=c.probeTimeoutMs,new Promise((a,b)=>{let c=setTimeout(()=>b(Error(`probe timed out after ${i}ms`)),i);c.unref?.(),h.then(b=>{clearTimeout(c),a(b)},a=>{clearTimeout(c),b(a)})}));if(401===a.status||403===a.status)return Z(d,f,`GitLab rejected the access token (HTTP ${a.status}). Update the token in the repo's forge settings.`);if(a.ok)return X;return Y}catch{return Y}}}}(a,b,d));let h=new Set;for(let b of a)(0,g.TU)(b.agent)&&h.add(b.agent);for(let a of h)e.push(function(a,b,c,d){let e=`agent:${a}`,f=(0,g.X$)(a);return"openrouter"===a?{id:e,probe:async()=>{let a=(0,z.t)(b);if(!a)return Z(e,"OpenRouter API key","No OpenRouter API key is configured — set it in settings or via DRYDOCK_OPENROUTER_API_KEY.");let c=await (0,W.lw)(a,d.fetchImpl);return c.ok?X:/HTTP 40[13]\b/.test(c.error)?Z(e,"OpenRouter API key",`OpenRouter rejected the API key (${$(c.error)}). Update the key in settings.`):Y}}:{id:e,probe:async()=>{let a=await S(f,{command:(0,B.m)(f,c),runner:(a,b,c,e)=>d.runner(a,b,c,{timeoutMs:d.probeTimeoutMs,...e})});return a.installed?X:Z(e,`${f.label} CLI`,a.message??"CLI probe failed.")}}}(a,b,c,d));return e}((0,i.uP)(b),d,b,c),f=(0,Q.iC)(b),j=new Map((f?.failures??[]).map(a=>[a.target,a])),k=[];for(let{id:a,outcome:b}of(await Promise.all(e.map(async a=>{try{return{id:a.id,outcome:await a.probe()}}catch(b){return(0,r.v)(`[watchdog] credential probe for ${a.id} failed`,b),{id:a.id,outcome:Y}}}))))if("failed"===b.kind)k.push(b.failure);else if("unknown"===b.kind){let b=j.get(a);b&&k.push(b)}let l={checkedAt:Math.floor(c.now()/1e3),failures:k};return(0,Q.z8)(l,b),l}let aa=!1;async function ab(a={}){if(!aa){aa=!0,d=(a.now??Date.now)();try{return await _(a)}finally{aa=!1}}}var ac=c(1065),ad=c(27630),ae=c(73024);let af=["vercel","railway"];function ag(a){return a.exists??ae.existsSync}var ah=c(76760);class ai{async detect(a){let b=ag(a);return b((0,ah.join)(a.cwd,"railway.json"))||b((0,ah.join)(a.cwd,"railway.toml"))||b((0,ah.join)(a.cwd,".railway"))}async getStatus(a){let b=await a.run("railway",["status"],a.cwd);return function(a,b){if(0!==b)return"not_found";let c=a.toLowerCase();return/\bfailed\b|\bcrashed\b|\berror\b/.test(c)?"error":/\bsuccess\b|\bdeployed\b|\bready\b/.test(c)?"ready":/\bbuilding\b/.test(c)?"building":/\bdeploying\b|\binitializing\b|\bqueued\b/.test(c)?"deploying":"not_found"}(b.stdout,b.exitCode)}async getLogs(a){let b=await a.run("railway",["logs"],a.cwd);return[b.stdout,b.stderr].filter(Boolean).join("\n").trim()}constructor(){this.id="railway",this.label="Railway"}}function aj(a){return a?["list","--meta",`githubCommitSha=${a}`]:["list"]}class ak{async detect(a){let b=ag(a);return b((0,ah.join)(a.cwd,"vercel.json"))||b((0,ah.join)(a.cwd,".vercel"))}async getStatus(a){let b=await a.run("vercel",aj(a.ref),a.cwd);return function(a,b){if(0!==b)return"not_found";let c=a.split("\n").map(a=>a.trim()).filter(Boolean).find(a=>/●|ready|error|building|queued|initializing/i.test(a.replace(/https?:\/\/\S+/g," ")));if(!c)return"not_found";let d=c.replace(/https?:\/\/\S+/g," ").toLowerCase();return/\berror\b|\bfailed\b|canceled/.test(d)?"error":/\bready\b/.test(d)?"ready":/\bbuilding\b/.test(d)?"building":/\bqueued\b|initializing|deploying/.test(d)?"deploying":"not_found"}(b.stdout,b.exitCode)}async getLogs(a){let b=null;if(a.ref){var c;let d=await a.run("vercel",aj(a.ref),a.cwd);0===d.exitCode&&(c=d.stdout,b=c.match(/https?:\/\/\S+/)?.[0]??null)}let d=b?["inspect","--logs",b]:["logs"],e=await a.run("vercel",d,a.cwd);return[e.stdout,e.stderr].filter(Boolean).join("\n").trim()}constructor(){this.id="vercel",this.label="Vercel"}}let al=[new ak,new ai];async function am(a,b){if(b)return af.includes(b)?function(a){let b=al.find(b=>b.id===a);if(!b)throw Error(`unsupported deployment platform: ${a}`);return b}(b):null;for(let b of al)if(await b.detect(a))return b;return null}var an=c(64080);function ao(a,b){return{cwd:a.path,ref:b,run:R.Sx}}async function ap(a={}){let b=a.db??(0,h.Lf)(),c=a.now??Date.now,d=a.budgets??an.ad;for(let e of(0,i.uP)(b))if((0,s.A)(e).autoHealDeployments)try{let f=a.forgeFor?.(e)??(0,k.Ie)(e),g=a.adapterFor??(a=>am(ao(a,null),a.deploymentPlatform)),h=await g(e);if(!h)continue;let i=a.openFixPr??as;await aq(e,f,h,{db:b,now:c,budgets:d,openFixPr:i})}catch(a){(0,r.v)(`[deploy-heal] sweep failed for ${e.name}`,a)}}async function aq(a,b,c,d){let{db:e,now:f,budgets:g}=d,h=(0,C.N6)(a.id,e);for(let a of h){let d;if("merged"!==a.status||null==a.prNumber)continue;let h=(a.finishedAt??a.createdAt)*1e3;if(!(f()-h>g.monitorWindowMs)){try{d=await b.prMergeCommitSha?.(a.prNumber)??await b.prHeadSha(a.prNumber)}catch(b){(0,r.v)(`[deploy-heal] merged sha lookup failed for job ${a.id}`,b);continue}(0,an.SR)(a.id,d,e)||(0,an.eY)(a.id,a.prNumber,c.id,d,e)}}for(let b of e.select().from(j.deploymentHealingSessions).all().filter(a=>"monitoring"===a.status)){let e=h.find(a=>a.id===b.jobId);if(e)try{await ar(a,e,c,b,d)}catch(c){(0,r.v)(`[deploy-heal] session ${b.id} failed for ${a.name}`,c)}}}async function ar(a,b,c,d,e){let{db:f,now:g,budgets:h}=e,i=(0,an.FL)({createdAt:1e3*d.createdAt,lastPolledAt:1e3*d.updatedAt,now:g(),initialDelayMs:h.initialDelayMs,intervalMs:h.intervalMs,timeoutMs:h.timeoutMs});if("wait"===i)return;if("timeout"===i)return void(0,an.X)(d.id,"escalated",{},f);let j=ao(a,d.commitSha),k=(0,an.eV)(await c.getStatus(j));if("ready"===k)return void(0,an.X)(d.id,"healthy",{},f);if("pending"===k)return void(0,an.LR)(d.id,f);let l=(await c.getLogs(j).catch(()=>"")).split("\n").slice(-h.maxLogLines).join("\n").trim(),m=(0,an.X)(d.id,"failed",{logsExcerpt:l||null},f);(0,an.X)(d.id,"repairing",{},f);try{let c=await e.openFixPr(a,b,m,l);(0,an.X)(d.id,"repaired",{followupPrNumber:c},f)}catch(a){(0,r.v)(`[deploy-heal] fix PR failed for session ${d.id}`,a),(0,an.X)(d.id,"escalated",{},f)}}async function as(a,b,c,d){let e=(0,h.Lf)(),f=(0,g.X$)(b.agent),i=(0,B.m)(f,e),j=new ac.ND,l=c.commitSha.slice(0,7),m=`drydock/deploy-fix-${b.id}-${l}`,n=(0,k.Ie)(a),o=await j.prepareForNewBranch(a,m,`${b.id}-${l}`);try{let g=await (0,ad.V)(b,[`The deployment of the merged pull request #${c.prNumber} failed on`,`${c.platform} (commit ${c.commitSha.slice(0,7)}).`,"\nDeployment logs:\n```",d||"(no logs captured)","```\n\nDiagnose the deployment failure and make the minimal change that fixes it.\nEnsure the project builds and tests pass, then stop — the commit, push, and\npull request are handled for you."].join("\n"),o.path,{db:e,provider:f,command:i,sideSession:!0});if(0!==g.exitCode)throw Error(`${f.label} exited non-zero`);return await j.commitAndPush(o,`Fix failed ${c.platform} deployment for PR #${c.prNumber}`),n.createPr({head:m,base:a.defaultBranch,title:`Fix failed ${c.platform} deployment (PR #${c.prNumber})`,body:`The deployment for #${c.prNumber} (commit ${l}) failed. This PR addresses the deployment failure.`})}finally{try{await j.remove(o,a.path)}catch(a){(0,r.v)(`[deploy-heal] worktree cleanup failed for job ${b.id}`,a)}}}var at=c(7611),au=c(9617),av=c(76373),aw=c(8804),ax=c(51455),ay=c(48161),az=c(29980),aA=c(59144);let aB=az.Ik({release:az.zM(),bump:az.k5(["patch","minor","major"]),title:az.Yj().default(""),notes:az.Yj().default("")});var aC=c(98887);async function aD(a){if("http"===a.provider.kind){let{runOpenRouterOneShot:b}=await c.e(528).then(c.bind(c,59528));return b({model:a.model,prompt:a.prompt,repoId:a.repoId,type:a.type,timeoutMs:a.timeoutMs,db:a.db,fetchImpl:a.fetchImpl})}let b=a.runner??R.Sx,d=a.db??(0,h.Lf)(),e=void 0!==a.timeoutMs?{timeoutMs:a.timeoutMs}:void 0,f=a.provider.buildStreamOneShotArgs({prompt:a.prompt,model:a.model});if(null===f){let c=a.provider.buildOneShotArgs({prompt:a.prompt,model:a.model}),d=e?await b(a.command,c,a.cwd,e):await b(a.command,c,a.cwd);return{text:d.stdout,exitCode:d.exitCode,costUsd:0,stderr:d.stderr}}let g=e?await b(a.command,f,a.cwd,e):await b(a.command,f,a.cwd),i=new aC.KO,k=[...i.push(g.stdout),...i.flush()],l=[];for(let a of k)for(let b of a.chunks)"text"===b.kind&&l.push(b.text);let m=l.join(""),n=i.costUsd>0?i.costUsd:0;return n>0&&void 0!==a.repoId&&d.insert(j.oneShotCosts).values({repoId:a.repoId,type:a.type,costUsd:n,inputTokens:i.totalInputTokens,outputTokens:i.totalOutputTokens}).run(),{text:m,exitCode:g.exitCode,costUsd:n,stderr:g.stderr}}async function aE(a){var b;let c,d=await a.listReleases(),e=function(a){let b=null;for(let c of a)(0,aA.kf)(c)&&(null===b||(0,aA.mU)(c,b)>0)&&(b=c);return b}(d.map(a=>a.tagName)),f=e?d.find(a=>a.tagName===e)?.createdAt??null:null;return{fromTag:e,releases:d,prs:(b=(await a.listMergedPrs(100)).map(a=>({number:a.number,title:a.title,labels:a.labels,mergedAt:a.mergedAt})),c=null===f?null:Date.parse(f),b.filter(a=>{let b=Date.parse(a.mergedAt);return!Number.isNaN(b)&&(null===c||b>c)}).sort((a,b)=>a.number-b.number))}}async function aF(a,b){let c=b.db??(0,h.Lf)(),d=(0,aw.tm)(a,c);if(!d)throw Error(`release run ${a} not found`);let e=d.mode;(0,aw.Cq)(a,"evaluating",{},c);try{var f;let{fromTag:g,releases:h,prs:i}=await aE(b.forge);if("manual"===e&&0===i.length&&!d.tag)return(0,aw.Cq)(a,"skipped",{fromTag:g},c);let j=await b.generate({fromTag:g,prs:i});if("auto"===e&&!j)return(0,aw.Cq)(a,"error",{errorMessage:"release evaluation failed"},c);if("auto"===e&&j&&!j.release)return(0,aw.Cq)(a,"skipped",{fromTag:g},c);let k=function(a,b,c){let d="manual"===a?"patch":b?.bump??"patch",e=b?.title?.trim()??"";return{bump:d,title:e,notes:b?.notes?.trim()||(0===c.length?"No changes since the last release.":c.map(a=>`- #${a.number} ${a.title}`).join("\n"))}}(e,j,i),l=d.tag??(f=k.bump,`v${(0,aA.rr)(g??"0.0.0",f)}`);if((0,aw.Cq)(a,"proposed",{bump:k.bump,fromTag:g,tag:l,title:k.title||l,notes:k.notes,prNumbers:i.map(a=>a.number)},c),h.some(a=>a.tagName===l))return(0,aw.Cq)(a,"publishing",{},c),(0,aw.Cq)(a,"published",{},c);return(0,aw.Cq)(a,"publishing",{},c),await b.forge.createRelease({tag:l,title:k.title||l,notes:k.notes,target:b.repo.defaultBranch}),(0,aw.Cq)(a,"published",{},c)}catch(f){let b=f instanceof Error?f.message:String(f),d=(0,aw.tm)(a,c),e=d?.status??"evaluating";if("evaluating"===e||"proposed"===e||"publishing"===e)return(0,aw.Cq)(a,"error",{errorMessage:b.slice(0,500)},c);return(0,aw.tm)(a,c)}}async function aG(a,b){let c=await (0,ax.mkdtemp)((0,ah.join)((0,ay.tmpdir)(),"drydock-release-"));try{var d;let e,f=(e=(d={provider:a.provider,command:a.command,model:a.model,cwd:c,runner:a.runner}).timeoutMs??18e4,async a=>{try{let b,c,f,{text:g,exitCode:h}=await aD({provider:d.provider,command:d.command,model:d.model,cwd:d.cwd,prompt:(c=(b=a.prs.slice(0,200)).length>0?b.map(a=>{let b=a.labels.length>0?` [${a.labels.join(", ")}]`:"";return`- #${a.number} ${a.title}${b}`}).join("\n"):"(no merged pull requests)",["You are deciding whether to cut a new software release. Given the most\nrecent release and the pull requests merged since then, decide whether a\nrelease is warranted, which semantic-version bump it should be, and write\nconcise Markdown release notes.\n",a.fromTag?`The most recent release is ${a.fromTag}.`:"There is no prior release (this would be the first).","\n## Pull requests merged since the last release\n",c,'\n## How to choose the bump\n\n- "major": incompatible / breaking changes.\n- "minor": new, backwards-compatible features.\n- "patch": backwards-compatible bug fixes or internal-only changes.\n\n## Response format\n\nRespond with ONLY a JSON object (no prose, no code fences) of the shape:\n\n{"release": <true|false>, "bump": "patch"|"minor"|"major",\n "title": "<short release title>", "notes": "<Markdown release notes>"}\n\nSet "release" to false when the changes do not warrant a release yet (e.g.\nonly docs/CI tweaks). When false, the other fields are ignored.'].join("\n")),repoId:d.repoId,type:"release",timeoutMs:e,runner:d.runner,db:d.db});if(0!==h)return null;let i=g.match(/\{[\s\S]*\}/);if(!i)return null;try{f=JSON.parse(i[0])}catch{return null}let j=aB.safeParse(f);return j.success?j.data:null}catch{return null}});return await b(f)}finally{try{await (0,ax.rm)(c,{recursive:!0,force:!0})}catch{}}}async function aH(a={}){let b=a.db??(0,h.Lf)();if(!(0,A.mt)(b).releaseManagementEnabled)return;let c=a.now??Date.now,d=a.windowMs??36e5,e=a.notify??((a,c)=>(0,av.JD)(a,c,b));for(let f of(0,i.uP)(b))if((0,s.A)(f).releaseEnabled)try{let h=a.forgeFor?.(f)??(0,k.Ie)(f),i="function"==typeof h.listReleases&&"function"==typeof h.listMergedPrs&&"function"==typeof h.createRelease?h:null;if(!i)continue;let j=a.generatorFor?.(f)??function(a,b){let c=(0,g.X$)(a.agent),d=(0,B.m)(c,b),e=a.defaultModel;return a=>aG({provider:c,command:d,model:e},b=>b(a))}(f,b);await aI(f,h,i,j,{db:b,now:c,windowMs:d,notify:e})}catch(a){(0,r.v)(`[release] sweep failed for ${f.name}`,a)}}async function aI(a,b,c,d,e){let{db:f,now:g,windowMs:h}=e;for(let i of(0,C.N6)(a.id,f)){if("merged"!==i.status||null==i.prNumber)continue;let f=(i.finishedAt??i.createdAt)*1e3;if(!(g()-f>h))try{await aJ(a,i,b,c,d,e)}catch(b){(0,r.v)(`[release] job ${i.id} failed for ${a.name}`,b)}}}async function aJ(a,b,c,d,e,f){let{db:g,notify:h}=f,i=b.prNumber,j=(0,aw.$J)(a.id,i,g);if(j&&"detected"!==j.status)return;let k=await c.prHeadSha(i),l=(0,aw.v0)({repoId:a.id,mode:"auto",triggerPrNumber:i,triggerSha:k},g);if("detected"!==l.status)return;let m=await aF(l.id,{repo:a,forge:d,db:g,generate:e});"published"===m.status&&m.tag&&await h("release_published",`🚀 Released ${a.name} ${m.tag}.`)}var aK=c(62907),aL=c(48036),aM=c(14694);let aN={pending:["in_progress","skipped","deferred"],in_progress:["done","skipped","deferred"],deferred:["pending","in_progress","skipped"],done:[],skipped:[]};class aO extends Error{constructor(a,b){super(`invalid subtask transition: ${a} -> ${b}`)}}let aP=/^\s*[-*]\s*\[[ xX]\]\s+(.+?)\s*$/,aQ=/^\s*#*\s*(Bug\s+\d+\s*(?:[—:-])\s*.+?)\s*$/;async function aR(a,b={}){let c=function(a){let b=function(a){let b=[];for(let c of a.split("\n")){let a=c.match(aP);a?.[1]&&b.push(a[1].trim())}return b}(a);if(b.length>=2)return b;let c=function(a){let b=[];for(let c of a.split("\n")){let a=c.match(aQ);a?.[1]&&b.push(a[1].trim())}return b}(a);return c.length>=2?c:[]}(a.body);if(c.length>=2)return{titles:c,source:"heuristic"};if(b.generate)try{let c=(await b.generate(a)).map(a=>a.trim()).filter(Boolean);if(c.length>=2)return{titles:c,source:"agent"}}catch(b){if(b instanceof at.vu)throw b;(0,r.v)(`[decompose] agent fallback failed for issue #${a.number}`,b)}return{titles:[],source:"none"}}function aS(a){return a.map((a,b)=>{let{box:c,suffix:d}=function(a){switch(a){case"done":return{box:"[x]",suffix:""};case"skipped":return{box:"[~]",suffix:" — skipped"};case"in_progress":return{box:"[ ]",suffix:" — in progress"};case"deferred":return{box:"[ ]",suffix:" — deferred"};default:return{box:"[ ]",suffix:""}}}(a.status);return`${b+1}. ${c} ${a.title}${d}`}).join("\n")}function aT(a,b,c=(0,h.Lf)()){return c.select().from(j.issueSubtasks).where((0,f.Uo)((0,f.eq)(j.issueSubtasks.repoId,a),(0,f.eq)(j.issueSubtasks.issueNumber,b))).orderBy((0,aM.Y)(j.issueSubtasks.ordinal)).all()}function aU(a,b,c=(0,h.Lf)()){let d=c.select().from(j.issueSubtasks).where((0,f.eq)(j.issueSubtasks.id,a)).get();if(!d)throw Error(`subtask ${a} not found`);var e=d.status;if(!aN[e].includes(b))throw new aO(e,b);return c.update(j.issueSubtasks).set({status:b}).where((0,f.eq)(j.issueSubtasks.id,a)).returning().get()}async function aV(a,b,c=(0,h.Lf)(),d={}){var e,g,i,k;let l=function(a){let b=5381;for(let c=0;c<a.length;c++)b=(b<<5)+b+a.charCodeAt(c)|0;return(b>>>0).toString(16)}(b.body);if(e=a.id,g=b.number,c.select({h:j.issues.decomposedHash}).from(j.issues).where((0,f.Uo)((0,f.eq)(j.issues.repoId,e),(0,f.eq)(j.issues.number,g))).get()?.h===l)return{subtasks:aT(a.id,b.number,c),source:"none",skipped:!0};let{titles:m,source:n}=await aR(b,{generate:d.generate}),o=function(a,b,c,d,e=(0,h.Lf)()){return e.transaction(e=>(e.delete(j.issueSubtasks).where((0,f.Uo)((0,f.eq)(j.issueSubtasks.repoId,a),(0,f.eq)(j.issueSubtasks.issueNumber,b))).run(),c.forEach((c,f)=>{e.insert(j.issueSubtasks).values({repoId:a,issueNumber:b,ordinal:f,title:c,bodyHash:d}).run()}),e.select().from(j.issueSubtasks).where((0,f.Uo)((0,f.eq)(j.issueSubtasks.repoId,a),(0,f.eq)(j.issueSubtasks.issueNumber,b))).orderBy((0,aM.Y)(j.issueSubtasks.ordinal)).all()))}(a.id,b.number,m,l,c);return i=a.id,k=b.number,c.update(j.issues).set({decomposedHash:l}).where((0,f.Uo)((0,f.eq)(j.issues.repoId,i),(0,f.eq)(j.issues.number,k))).run(),{subtasks:o,source:n,skipped:!1}}var aW=c(26287),aX=c(29668);function aY(a){return a?.trim()||null}async function aZ(a={}){let b=a.runner??R.Sx,c=a.preferred??"auto",d="auto"===c?["docker","podman"]:[c];for(let a of d)try{let{exitCode:c}=await b(a,["--version"]);if(0===c)return{runtime:a}}catch{}let e=d.join(" / ");return{runtime:null,message:`No usable container runtime found (tried ${e}). Install Docker or Podman, or disable sandboxed execution for this repo.`}}var a$=c(94534);function a_(a){try{return(0,ae.readFileSync)(a,"utf8")}catch{return null}}async function a0(a){var b;let c,d,e=a.deps??{},f=e.detect??(a=>aZ({preferred:a})),g=await f(a.preferredRuntime);if(null===g.runtime)return{ok:!1,reason:g.message};let h=function(a,b,c){if(a.imageOverride)return a.imageOverride;let d=function(a,b){for(let c of[(0,ah.join)(a,".devcontainer","devcontainer.json"),(0,ah.join)(a,".devcontainer.json")]){let a=b.readFileText(c);if(null!=a)try{let b=JSON.parse(a.replace(/\/\*[\s\S]*?\*\//g,"").replace(/(^|[^:])\/\/.*$/gm,"$1").replace(/,\s*([}\]])/g,"$1"));if("string"==typeof b.image&&b.image.trim())return b.image.trim()}catch{}}return null}(b,c);return d||aY(a.defaultImage)}(a.config,a.worktreePath,{readFileText:e.readFileText??a_});if(!h)return{ok:!1,reason:"Sandboxed execution is enabled but no container image could be resolved. Set a per-repo sandbox image, add a devcontainer.json, or set a global default image in settings."};let i=(c=(function(a,b){switch(a){case"codex":return[{host:(0,ah.join)(b,".codex"),container:"/root/.codex"}];case"openrouter":return[];default:return[{host:(0,ah.join)(b,".claude"),container:"/root/.claude"},{host:(0,ah.join)(b,".claude.json"),container:"/root/.claude.json"}]}})((b={agent:a.agent,home:e.home??(0,ay.homedir)(),env:e.env??process.env,exists:e.exists??ae.existsSync}).agent,b.home).filter(a=>b.exists(a.host)),d=[],b.env.GH_TOKEN?.trim()?d.push("GH_TOKEN"):b.env.GITHUB_TOKEN?.trim()&&d.push("GITHUB_TOKEN"),{mounts:c,env:d});return{ok:!0,session:{runner:function(a,b={}){let c=b.baseRunner??a$.g,d=b.cleanup??R.Sx;return(b,e,f,g)=>{let h=function(a,b,c){let d=["run","--rm","--init","--name",a.containerName,"-v",`${a.hostPath}:${a.workdir}`,"-w",a.workdir];for(let b of(a.allowNetwork||d.push("--network","none"),a.cpus&&d.push("--cpus",a.cpus),a.memory&&d.push("--memory",a.memory),a.mounts))d.push("-v",`${b.host}:${b.container}:ro`);for(let b of a.env)d.push("-e",b);return d.push(a.image,b,...c),{cmd:a.runtime,args:d}}(a,b,e),i=c(h.cmd,h.args,f,g);return{done:i.done,get spawnError(){return i.spawnError},abort:b=>{i.abort(b);try{d(a.runtime,["rm","-f",a.containerName]).catch(b=>(0,r.v)(`[sandbox] failed to remove container ${a.containerName}`,b))}catch(b){(0,r.v)(`[sandbox] failed to remove container ${a.containerName}`,b)}}}}}({runtime:g.runtime,image:h,workdir:"/workspace",hostPath:a.worktreePath,containerName:`drydock-job-${a.jobId}`,allowNetwork:a.config.allowNetwork,cpus:a.config.cpus,memory:a.config.memory,mounts:i.mounts,env:i.env},{baseRunner:e.baseRunner,cleanup:e.cleanup}),command:a.inContainerCommand}}}let a1=["usage_limit","rate_limit","overloaded"],a2=new Set(["CANCELLED","ACTION_REQUIRED"]),a3=new Set(["TIMED_OUT"]),a4=/\b(ai|claude|codex|copilot|gpt|llm)\b.*\breview\b|\breview\b.*\b(ai|bot)\b/i,a5=/\bcancell?ed\b|\bsecret\b|\b(rate.?limit|secondary rate)\b|\b5\d\d\b|\b(401|403|unauthorized|forbidden)\b|service unavailable/i,a6=/\b(time(d)?.?out|timeout|intermittent|flak(y|e)|econnreset|etimedout|esockettimedout)\b/i,a7=/\b(typecheck|tsc|type error|ts\d{3,5}|lint|biome|eslint|prettier|test|tests|spec|vitest|jest|pytest|assert(ion)?|build|compile|compilation|codegen|generated|snapshot|out of date|outdated)\b/i,a8=[{kind:"type",re:/\berror TS\d{2,5}\b|\bTS\d{2,5}:|\bType error:|is not assignable to/i},{kind:"dependency",re:/\bnpm ERR!|\bERR_PNPM|\bERESOLVE\b|unmet peer|peer dep|frozen lockfile|out of date lockfile|cannot find module '/i},{kind:"lint",re:/\bbiome\b|\beslint\b|\bprettier\b|\blint\/[a-z]|@typescript-eslint\/|formatter would have/i},{kind:"test",re:/\bFAIL\b|✕|✗|✖|●|\bAssertionError\b|expect\(|Expected:|Received:|\bTests?:\s|\d+ failed/i},{kind:"build",re:/failed to compile|module not found|compilation (failed|error)|\bcompile error\b|cannot compile/i},{kind:"timeout",re:/\btimed out\b|\btimeout\b|exceeded \d+\s?ms/i},{kind:"flaky",re:/\bECONNRESET\b|\bETIMEDOUT\b|\bESOCKETTIMEDOUT\b|intermittent|\bflak(y|e)\b/i}];function a9(a,b){if(0===a.length)return{kind:"unknown",evidence:""};let c=a.split("\n"),d=function(a){for(let{kind:b,re:c}of a8)if(c.test(a))return b;return"unknown"}(a);if("unknown"===d)return{kind:d,evidence:c.slice(-b).join("\n")};let e=a8.find(a=>a.kind===d),f=e?c.findIndex(a=>e.re.test(a)):-1;if(f<0)return{kind:d,evidence:c.slice(-b).join("\n")};let g=Math.max(0,f-3);return{kind:d,evidence:c.slice(g,g+b).join("\n")}}let ba={test:"A test is failing. Identify the failing test(s) from the evidence and fix the underlying code so they pass. Do not delete or skip tests, and do not weaken assertions to go green.",type:"A type error is failing the check. Fix the reported type error(s) properly — correct the types; do not silence them with `any` or `@ts-ignore`.",lint:"A lint/format check is failing. Fix the reported rule violations. Prefer the autofix (e.g. `npx biome check --write`) and resolve anything it cannot fix by hand.",build:"The build/compile step failed. Fix the compilation error(s) shown below (e.g. a broken import or unresolved module).",dependency:"A dependency step failed. Resolve the dependency problem below — a missing or incompatible package, or an out-of-date lockfile. Update package.json and the lockfile together.",timeout:"A check timed out. If a change in this branch introduced a hang or a slow path, fix it; otherwise make the affected code complete within the time budget.",flaky:"A check failed on what looks like an intermittent/network error. If the branch made the code fragile to this, harden it; otherwise the failure may not be code-related.",unknown:"A CI check is failing. Diagnose the failure from the evidence below and fix it."};var bb=c(34666);let bc=new Set(["FAILURE","ERROR","CANCELLED","TIMED_OUT","ACTION_REQUIRED"]),bd=new Set(["PENDING","QUEUED","IN_PROGRESS","WAITING","REQUESTED"]);function be(a){return 0===a.length?"none":a.some(a=>bc.has(a.state.toUpperCase()))?"failed":a.some(a=>bd.has(a.state.toUpperCase()))?"pending":"passed"}function bf(a){return a.timedOut?"CI-fix session timed out":a.costExceeded?"per-job cost limit reached during the CI fix":a.spawnError?`CI-fix session failed to start: ${a.spawnError.message}`:0!==a.exitCode?"CI-fix session exited non-zero":a.settledExternally?"job was settled externally during the CI fix":a.noChanges?"CI-fix session produced no changes":null}function bg(a,b){return()=>!!(0,at.nc)(a.agent,b)}function bh(a,b,c,d){let e=c.limit;if(!e)return null;if("auth"===e.kind||"billing"===e.kind){let c="auth"===e.kind?"authentication":"billing",f=`CI fix blocked by a provider ${c} error: ${e.rawSnippet}`.slice(0,500);return(0,C.yM)(a.id,"status",{reason:f,prNumber:b},d),{job:(0,C.dk)(a.id,"needs_human",{errorMessage:f},d),done:!0}}return a1.includes(e.kind)&&(0,at.$q)(e.agent,d)?(e.latched||(0,at.H_)(e,d),(0,C.yM)(a.id,"status",{reason:`${e.agent}_${e.kind} during CI fix`,prNumber:b},d),{job:(0,C.dk)(a.id,"ci_running",{ciRetryCount:Math.max(0,a.ciRetryCount-1)},d),done:!1}):null}function bi(a,b){let c;return{start:()=>!(a<=0)&&void 0===c&&(c=b(),!0),open:()=>a>0&&void 0!==c&&b()-c<a,reset(){c=void 0}}}let bj=a=>new Promise(b=>setTimeout(b,a)),bk=new Set(["ci_running","ci_failed","retrying"]);function bl(a,b){let c=(0,C.ax)(a,b);if(!(!c||bk.has(c.status)))return c}async function bm(a,b,c,d,e){await d.gh.commentIssue(a.issueNumber,`${c} Handing over to a human.`);let f=await d.gh.createIssue(`Follow-up: CI keeps failing for issue #${a.issueNumber}`,`Job ${a.id} could not be auto-healed on PR #${b}. ${c}`);return e.insert(j.followupIssues).values({jobId:a.id,ghIssueNumber:f,title:`Follow-up for #${a.issueNumber}`}).run(),(0,C.dk)(a.id,"needs_human",{errorMessage:c.slice(0,500)},e)}async function bn(a,b,c,d,e,f="checks stayed pending"){let g=Math.round(c/6e4),h=`CI did not complete in time (${f} for over ${g} min on PR #${b}).`;return await d.gh.commentIssue(a.issueNumber,`${h} Handing over to a human.`),(0,C.yM)(a.id,"status",{reason:"ci wait budget exceeded",prNumber:b},e),(0,C.dk)(a.id,"needs_human",{errorMessage:h.slice(0,500)},e)}async function bo(a,b,c){if(c.autoHeal)return bp(a,b,c,c.autoHeal);let d=c.db??(0,h.Lf)(),e=c.sleep??bj,f=c.pollMs??3e4,g=c.maxPolls??1/0,i=c.ciWaitMs??1/0,j=c.now??Date.now,k=j()+i,l=bi(c.mergeGateMs??0,j),m=bi(Math.max(c.mergeGateMs??0,f),j),n=c.limitBlocked??bg(a,d),o=!1,p=a,q=0;for(;q<g;){q++;let a=bl(p.id,d);if(a)return a;let g=be(await c.gh.prChecks(b));if("pending"===g){if(l.reset(),m.reset(),j()>=k)return bn(p,b,i,c,d);await e(f);continue}if("none"===g&&!c.mergeWithoutChecks){if(l.reset(),m.reset(),j()>=k)return bn(p,b,i,c,d,"no CI checks were reported");await e(f);continue}if("none"===g){if(l.reset(),m.start()&&(0,C.yM)(p.id,"status",{reason:"no CI checks reported; settling before an unverified merge",prNumber:b},d),m.open()){if(j()>=k)return bn(p,b,i,c,d,"no CI checks were reported");await e(f);continue}let a=bl(p.id,d);if(a)return a;return(0,C.yM)(p.id,"status",{reason:"merging without CI verification (no checks reported)",prNumber:b},d),await c.gh.mergePr(b),(0,C.dk)(p.id,"merged",{prNumber:b},d)}if("passed"===g){if(m.reset(),l.start()&&(0,C.yM)(p.id,"status",{reason:"merge gate: CI green, waiting for late reviews",prNumber:b},d),l.open()){await e(f);continue}let a=bl(p.id,d);if(a)return a;return await c.gh.mergePr(b),(0,C.dk)(p.id,"merged",{prNumber:b},d)}if(l.reset(),m.reset(),n()){if(j()>=k)return bn(p,b,i,c,d,"the provider usage limit blocked the CI fix");o||((0,C.yM)(p.id,"status",{reason:"ci fix deferred: provider limit latched",prNumber:b},d),o=!0),await e(f);continue}if(o=!1,(p=(0,C.dk)(p.id,"ci_failed",{prNumber:b},d)).ciRetryCount>=3)return bm(p,b,"CI failed 3 times.",c,d);if(!p.sessionId)return(0,C.yM)(p.id,"status",{reason:"missing session id, cannot resume for CI fix"},d),(0,C.dk)(p.id,"needs_human",{errorMessage:"CI failed but no session id to resume"},d);let h=p.sessionId;p=(0,C.dk)(p.id,"retrying",{ciRetryCount:p.ciRetryCount+1},d);let{evidence:r}=a9(await c.gh.failedRunLog(b),200),s=await c.resumeSession(p,h,r),t=bh(p,b,s,d);if(t){if(p=t.job,t.done)return p;continue}let u=bf(s);if(u)return(0,C.yM)(p.id,"status",{reason:u,prNumber:b},d),(0,C.dk)(p.id,"needs_human",{errorMessage:u},d);(0,at._x)(p.agent,d),p=(0,C.dk)(p.id,"ci_running",{},d)}return(0,C.ax)(p.id,d)??p}async function bp(a,b,c,d){let e,f=c.db??(0,h.Lf)(),g=c.sleep??bj,i=c.pollMs??3e4,j=c.maxPolls??1/0,k=d.budgets??bb.op,l=c.now??d.now??Date.now,m=c.ciWaitMs??1/0,n=l()+m,o=bi(c.mergeGateMs??0,l),p=bi(Math.max(c.mergeGateMs??0,i),l),q=c.limitBlocked??bg(a,f),r=a,s=0;for(;s<j;){s++;let a=bl(r.id,f);if(a)return e&&(0,bb.rh)(e.sessionId,"superseded",f),a;let h=await c.gh.prChecks(b),j=be(h);if("pending"===j){if(o.reset(),p.reset(),l()>=n)return e&&(0,bb.rh)(e.sessionId,"escalated",f),bn(r,b,m,c,f);await g(i);continue}if("none"===j&&!c.mergeWithoutChecks){if(o.reset(),p.reset(),l()>=n)return e&&(0,bb.rh)(e.sessionId,"escalated",f),bn(r,b,m,c,f,"no CI checks were reported");await g(i);continue}if("none"===j){if(o.reset(),p.start()&&(0,C.yM)(r.id,"status",{reason:"no CI checks reported; settling before an unverified merge",prNumber:b},f),p.open()){if(l()>=n)return e&&(0,bb.rh)(e.sessionId,"escalated",f),bn(r,b,m,c,f,"no CI checks were reported");await g(i);continue}let a=bl(r.id,f);if(a)return e&&(0,bb.rh)(e.sessionId,"superseded",f),a;return e&&(0,bb.rh)(e.sessionId,"superseded",f),(0,C.yM)(r.id,"status",{reason:"merging without CI verification (no checks reported)",prNumber:b},f),await c.gh.mergePr(b),(0,C.dk)(r.id,"merged",{prNumber:b},f)}if("passed"===j){if(p.reset(),o.start()&&(0,C.yM)(r.id,"status",{reason:"merge gate: CI green, waiting for late reviews",prNumber:b},f),o.open()){await g(i);continue}let a=bl(r.id,f);if(a)return e&&(0,bb.rh)(e.sessionId,"superseded",f),a;if(e){let a=await d.headSha(b);(0,bb.Az)(e.attemptId,{status:"healed",afterSha:a},f),(0,bb.Yv)(e.sessionId,"verifying",f),(0,bb.Yv)(e.sessionId,"healed",f)}return await c.gh.mergePr(b),(0,C.dk)(r.id,"merged",{prNumber:b},f)}o.reset(),p.reset();let t=h.filter(a=>bc.has(a.state.toUpperCase())),u=await d.headSha(b);if(e){let a="rerun"===e.kind?(0,bb.sk)({beforeFailingCount:e.beforeFailing,afterFailingCount:t.length}):(0,bb.I0)({beforeSha:e.beforeSha,afterSha:u,beforeFailingCount:e.beforeFailing,afterFailingCount:t.length});(0,bb.Az)(e.attemptId,{status:a.verdict,afterSha:u},f);let d=e.sessionId;if(e=void 0,"rejected"===a.verdict)return(0,bb.Yv)(d,"verifying",f),(0,bb.Yv)(d,"escalated",f),bm(r,b,`CI auto-heal: ${a.reason}.`,c,f);(0,bb.Yv)(d,"verifying",f),(0,bb.Yv)(d,"cooldown",f)}if(q()){if(l()>=n)return bn(r,b,m,c,f,"the provider usage limit blocked auto-heal");await g(i);continue}let v=(0,bb.dT)(r.id,b,u,f),w=await c.gh.failedRunLog(b),x=t.map(a=>(function(a,b,c=""){var d,e;let f,g,h=(d=b.name,e=b.state??"",f=e.toUpperCase(),g=`${d}
6
+ ${c}`,a2.has(f)||a4.test(d)||a5.test(g)?"blocked_external":a3.has(f)||a6.test(g)?"flaky_or_ambiguous":a7.test(g)?"healable_in_branch":"unknown");return{checkName:b.name,category:h,fingerprint:`${a}:${h}:${b.name.trim().toLowerCase().replace(/\s+/g," ")}`}})(d.provider,a,w)),y=(0,bb.VJ)(v.id,f),z=y.at(-1),A=(0,bb.ZM)({failures:x,attempts:y.map(a=>({fingerprint:a.fingerprint})),lastAttemptAt:z?1e3*z.createdAt:null,now:l(),activeRuns:(0,bb.Bz)(f),budgets:k});switch(A.action){case"block":return(0,bb.rh)(v.id,"blocked",f),await c.gh.commentIssue(r.issueNumber,`CI auto-heal: ${A.reason} — not auto-fixable. Handing over to a human.`),(0,C.dk)(r.id,"needs_human",{errorMessage:`auto-heal blocked: ${A.reason}`.slice(0,500)},f);case"escalate":return(0,bb.rh)(v.id,"escalated",f),bm(r,b,`CI auto-heal: ${A.reason}.`,c,f);case"wait_slot":if(l()>=n)return(0,bb.rh)(v.id,"escalated",f),bn(r,b,m,c,f,"auto-heal waited for a free healing slot");await g(i);continue;case"cooldown":if(l()>=n)return(0,bb.rh)(v.id,"escalated",f),bn(r,b,m,c,f,"auto-heal waited out its cooldown");await g(Math.min(A.waitMs,i));continue;case"repair":{let a=r.sessionId;if(!a)return(0,bb.rh)(v.id,"escalated",f),bm(r,b,"CI failed but no session id to resume.",c,f);let d=(0,bb.Z7)(v.id,A.target,u,f);(0,bb.Yv)(v.id,"awaiting_slot",f),(0,bb.Yv)(v.id,"repairing",f);let g=null;try{r=(0,C.dk)(r.id,"ci_failed",{prNumber:b},f),r=(0,C.dk)(r.id,"retrying",{ciRetryCount:r.ciRetryCount+1},f);let e=function(a){let{kind:b,evidence:c}=a9(a.log,a.maxLines);return[`CI check "${a.checkName}" is failing on this PR.`,ba[b],"Fix only this failure, then commit and push. Failure evidence:\n",c].join("\n")}({checkName:A.target.checkName,log:w,maxLines:k.maxEvidenceLines}),h=await c.resumeSession(r,a,e),i=bh(r,b,h,f);if(i){if((0,bb.kb)(d.id,f),(0,bb.rh)(v.id,i.done?"escalated":"superseded",f),r=i.job,i.done)return r;continue}(g=bf(h))||((0,at._x)(r.agent,f),(0,bb.Yv)(v.id,"awaiting_ci",f),r=(0,C.dk)(r.id,"ci_running",{},f))}catch(a){throw(0,bb.rh)(v.id,"escalated",f),a}if(g)return(0,bb.Az)(d.id,{status:"rejected",afterSha:null},f),(0,bb.rh)(v.id,"escalated",f),bm(r,b,`CI auto-heal: ${g}.`,c,f);e={attemptId:d.id,sessionId:v.id,beforeSha:u,beforeFailing:t.length,kind:"repair"};continue}case"rerun":{if(!await c.gh.reRunFailedChecks?.(b))return(0,bb.rh)(v.id,"escalated",f),bm(r,b,`CI auto-heal: flaky check "${A.target.checkName}" requires a manual re-run (this forge cannot re-run failed checks).`,c,f);let a=(0,bb.Z7)(v.id,A.target,u,f);(0,bb.Yv)(v.id,"awaiting_slot",f),(0,bb.Yv)(v.id,"awaiting_ci",f),(0,C.yM)(r.id,"status",{reason:"auto-heal re-ran flaky check",checkName:A.target.checkName,prNumber:b},f),e={attemptId:a.id,sessionId:v.id,beforeSha:u,beforeFailing:t.length,kind:"rerun"};continue}}}return(0,C.ax)(r.id,f)??r}function bq(a,b){let c=a.split(".").map(a=>Number.parseInt(a,10)||0),d=b.split(".").map(a=>Number.parseInt(a,10)||0);for(let a=0;a<Math.max(c.length,d.length);a++){let b=(d[a]??0)-(c[a]??0);if(0!==b)return b}return b.localeCompare(a)}function br(a=process.env.CLAUDE_CONFIG_DIR??(0,ah.join)((0,ay.homedir)(),".claude")){let b=[],c=process.env.CLAUDE_PLUGIN_ROOT??process.env.PLUGIN_ROOT;c&&b.push(c);let d=(0,ah.join)(a,"plugins","cache","thedotmack","claude-mem");if((0,ae.existsSync)(d)){let a=[];try{a=(0,ae.readdirSync)(d,{withFileTypes:!0}).filter(a=>a.isDirectory()&&/^\d/.test(a.name)).map(a=>a.name).sort(bq)}catch{a=[]}for(let c of a)b.push((0,ah.join)(d,c))}for(let c of(b.push((0,ah.join)(a,"plugins","marketplaces","thedotmack","plugin")),b)){let a=(0,ae.existsSync)((0,ah.join)(c,"plugin","scripts"))?(0,ah.join)(c,"plugin"):c;if((0,ae.existsSync)((0,ah.join)(a,"scripts","bun-runner.js"))&&(0,ae.existsSync)((0,ah.join)(a,"scripts","worker-service.cjs")))return a}return null}async function bs(a,b={}){let c=b.resolvePlugin??br,d=b.run??R.Sx;try{let e=c(b.configDir);if(!e)return void(0,r.v)(`[claude-mem] adoption skipped for ${a.branch}: plugin not installed`);let f=[(0,ah.join)(e,"scripts","bun-runner.js"),(0,ah.join)(e,"scripts","worker-service.cjs"),"adopt","--branch",a.branch,"--cwd",a.cwd],g=await d("node",f,a.cwd,{timeoutMs:b.timeoutMs??6e4});0!==g.exitCode&&(0,r.v)(`[claude-mem] adoption for ${a.branch} exited ${g.exitCode}: ${g.stderr.trim()}`)}catch(b){(0,r.v)(`[claude-mem] adoption failed for ${a.branch}`,b)}}let bt=(0,ah.join)(".drydock","FOLLOWUPS.md"),bu=/^##\s+(.*)$/;function bv(a){let b=function(a){let b;try{b=(0,ae.readFileSync)((0,ah.join)(a,bt),"utf8")}catch{return[]}return function(a){let b=[],c=new Set,d=null,e=[],f=()=>{if(null!==d){if(""!==d&&!c.has(d)&&b.length<20){c.add(d);let a=e.join("\n").trim(),f=a.length>6e4?`${a.slice(0,6e4)}
7
+ … (truncated)`:a;b.push({title:d,body:f})}d=null,e=[]}};for(let b of a.split("\n")){let a=b.match(bu);a?(f(),d=(a[1]??"").trim().slice(0,300)):null!==d&&e.push(b)}return f(),b}(b)}(a);return(0,ae.rmSync)((0,ah.join)(a,bt),{force:!0}),b}function bw(a,b){if(a.length<=b)return a;let c=a.length-b;return`${a.slice(0,b)}
8
+ …[truncated ${c} chars]`}let bx=az.Ik({ordinal:az.ai().int().nonnegative(),status:az.k5(["done","pending","deferred"]),reason:az.Yj().default("")}),by=az.Ik({summary:az.Yj().default(""),verdicts:az.YO(bx).default([])}),bz=["blocker","major","minor","nit","praise"],bA=az.Ik({severity:az.k5(bz),title:az.Yj().default(""),body:az.Yj().default(""),path:az.Yj().optional(),line:az.ai().int().nonnegative().optional(),suggestion:az.Yj().optional()}),bB=az.Ik({summary:az.Yj().default(""),recommendation:az.k5(["approve","request_changes","comment"]),findings:az.YO(bA).default([]),issueCoverage:az.Ik({met:az.YO(az.Yj()).default([]),missing:az.YO(az.Yj()).default([])}).default({met:[],missing:[]})});function bC(a){return`<!-- drydock:pr-audit:${a} -->`}let bD={blocker:"⛔",major:"\uD83D\uDD34",minor:"\uD83D\uDFE1",nit:"\uD83D\uDD35",praise:"\uD83C\uDF89"},bE={approve:"✅ approve",request_changes:"\uD83D\uDED1 request changes",comment:"\uD83D\uDCAC comment"};function bF(a){return[bC(a.jobId),"",`### 🔍 Drydock PR audit (${a.agent}/${a.model}, ${a.language})`,""]}var bG=c(58543);async function bH(a,b,c,d){if(a.listIssueComments&&a.updateIssueComment)try{let e=(await a.listIssueComments(b)).find(a=>a.body.includes(c));if(e)return await a.updateIssueComment(b,e.id,d),"updated"}catch(a){(0,r.v)(`[pr-audit] comment upsert degraded to a fresh post on #${b}`,a)}return await a.commentIssue(b,d),"created"}async function bI(a,b){try{return await a()}catch(a){return(0,r.v)("[pr-audit] best-effort read failed, using fallback",a),b}}async function bJ(a){var b;let c,d,e,f,i,{job:j,prNumber:k,repo:l,forge:m,db:n}=a,o=(e=(d=(0,g.TU)(l.agent)?l.agent:g.kz)===l.agent,f=(0,g.TU)(l.prAuditAgent)?l.prAuditAgent:d,i=l.prAuditModel??(e&&f===d?l.defaultModel:(0,bG.VJ)(f)),{agent:f,model:i,language:l.prAuditLanguage||"en"}),p={jobId:j.id,agent:o.agent,model:o.model,language:o.language};try{let d;if((0,A.mt)(n).paused)return(0,C.yM)(j.id,"pr_audit_skipped",{reason:"paused"},n),null;(0,C.yM)(j.id,"pr_audit_started",{...p,prNumber:k},n);let e=await bI(()=>m.prDiff(k),"");if(!e.trim())return(0,C.yM)(j.id,"pr_audit_failed",{reason:"empty diff",prNumber:k},n),null;let[f,i]=await Promise.all([bI(()=>m.prChecks(k),[]),bI(()=>m.viewIssue(j.issueNumber),null)]),q=aT(l.id,j.issueNumber,n),r={issueNumber:j.issueNumber,issueTitle:i?.title??`Issue #${j.issueNumber}`,issueBody:i?.body??"",subtasks:q.map(a=>({ordinal:a.ordinal,title:a.title})),prNumber:k,branch:j.branch,diff:e,checks:f.map(a=>({name:a.name,state:a.state})),language:o.language},s=a.generate;if(!s){let d;c=await (0,ax.mkdtemp)((0,ah.join)((0,ay.tmpdir)(),"drydock-pr-audit-"));let e=(0,g.X$)(o.agent);d=(b={provider:e,command:(0,B.m)(e,n),model:o.model,cwd:c,repoId:l.id,db:n,runner:a.runner}).timeoutMs??36e4,s=async a=>{let c,e,f,g;try{var i,j;let g,h,k;({text:c,exitCode:e,stderr:f}=await aD({provider:b.provider,command:b.command,model:b.model,cwd:b.cwd,prompt:(g=bw(a.issueBody.trim(),6e3),h=bw(a.diff.trim(),48e3),k=function(a){let b=a.trim();if(!b)return"English";try{return new Intl.DisplayNames(["en"],{type:"language"}).of(b)??b}catch{return b}}(a.language),["You are performing a READ-ONLY pull request audit. Do NOT edit files, run\ncommands, or make any changes. Review the full diff like a senior code\nreviewer (in the spirit of Bugbot/CodeRabbit) across these dimensions:\n\n1. Correctness — logic bugs, race conditions, error handling gaps\n2. Security — injection, authz, secrets, unsafe defaults (no CVE speculation)\n3. Tests — missing coverage for changed behavior\n4. API / compatibility — breaking changes, migration needs\n5. Maintainability — complexity, naming, duplication\n6. Issue fit — does the diff actually address the linked issue and subtasks\n",`## Issue #${a.issueNumber}: ${a.issueTitle}`,"",g,"\n## Subtasks\n",0===(i=a.subtasks).length?"This issue has no tracked subtasks; judge the issue as a whole.":i.map(a=>`- [ordinal ${a.ordinal}] ${a.title}`).join("\n"),"",`## Pull request #${a.prNumber}${a.branch?` (branch ${a.branch})`:""}`,"\n## CI results\n",0===(j=a.checks).length?"No CI results available.":j.map(a=>`- ${a.name}: ${a.state}`).join("\n"),"\n## Diff\n\n```diff",h,'```\n\n## Response format\n\nRespond with ONLY a JSON object (no prose outside it) of the shape:\n\n{"summary": "<one or two sentence overall assessment>",\n "recommendation": "approve"|"request_changes"|"comment",\n "findings": [{"severity": "blocker"|"major"|"minor"|"nit"|"praise",\n "title": "<short title>", "body": "<explanation>",\n "path": "<file path, optional>", "line": <number, optional>,\n "suggestion": "<suggested fix, optional>"}],\n "issueCoverage": {"met": ["<criterion>"], "missing": ["<criterion>"]}}\n\nReport only findings you are confident about; an empty findings list is a\nvalid answer for a clean diff. This review is advisory: do not gate, merge,\nor approve anything yourself.\n\nWrite all human-readable text (summary, titles, bodies, suggestions,',`coverage entries) in ${k}.`].join("\n")),repoId:b.repoId,type:"pr_audit",timeoutMs:d,runner:b.runner,db:b.db}))}catch{return null}if(0!==e){let a=b.provider.classifyFailure?.({exitCode:e,stderr:f,resultText:c});if(a&&a1.includes(a.kind)){let c=b.db??(0,h.Lf)();if((0,at.$q)(b.provider.id,c))throw(0,at.H_)(a,c),new at.vu(a)}return null}let k=c.match(/\{[\s\S]*\}/);if(!k)return null;try{g=JSON.parse(k[0])}catch{return null}let l=bB.safeParse(g);return l.success?l.data:null}}try{d=await s(r)}catch(a){if(a instanceof at.vu)return(0,C.yM)(j.id,"pr_audit_failed",{reason:"provider limit",kind:a.info.kind,agent:a.info.agent},n),null;throw a}let t=bC(j.id);if(!d){let a,b=((a=bF(p)).push("The audit run failed: the agent returned no parseable review (timeout, non-zero exit, or invalid JSON).",""),a.push("Job state is unchanged; re-run the audit from the job page to retry."),a.join("\n"));return await bH(m,j.issueNumber,t,(0,V.f)(b)),(0,C.yM)(j.id,"pr_audit_failed",{reason:"unparseable output",prNumber:k},n),null}let u=(0,V.f)(function(a,b){let c=bF(b);c.push(`**Recommendation:** ${bE[a.recommendation]}`,""),a.summary.trim()&&c.push(a.summary.trim(),"");let d=new Map(bz.map((a,b)=>[a,b])),e=[...a.findings].sort((a,b)=>(d.get(a.severity)??99)-(d.get(b.severity)??99));if(0===e.length)c.push("No findings — the diff looks clean across all review dimensions.","");else{for(let a of(c.push(`#### Findings (${e.length})`,""),e.slice(0,30)))c.push(function(a){let b=a.path?` — \`${a.path}${void 0!==a.line?`:${a.line}`:""}\``:"",c=[`- ${bD[a.severity]} **[${a.severity}] ${a.title}**${b}`];return a.body.trim()&&c.push(` ${a.body.trim().replace(/\n/g,"\n ")}`),a.suggestion?.trim()&&c.push(` Suggested fix: ${a.suggestion.trim().replace(/\n/g,"\n ")}`),c.join("\n")}(a));let a=e.length-30;a>0&&c.push("",`_…and ${a} more finding${1===a?"":"s"} omitted._`),c.push("")}let{met:f,missing:g}=a.issueCoverage;if(f.length>0||g.length>0){for(let a of(c.push("#### Issue coverage",""),f))c.push(`- [x] ${a}`);for(let a of g)c.push(`- [ ] ${a}`);c.push("")}return b.truncated&&(c.push("_Note: the diff and/or issue body was truncated to fit the audit context;_"),c.push("_this is a partial review of an oversized PR._","")),c.push("---"),c.push("_This audit is advisory only; it never merges, blocks, or edits anything._"),c.join("\n")}(d,{...p,truncated:r.diff.trim().length>48e3||r.issueBody.trim().length>6e3}));return await bH(m,j.issueNumber,t,u),l.prAuditPostOnPr&&m.commentPr&&await bI(()=>m.commentPr?.(k,u)??Promise.resolve(),void 0),(0,C.yM)(j.id,"pr_audit_completed",{recommendation:d.recommendation,findings:d.findings.length,blockers:d.findings.filter(a=>"blocker"===a.severity).length,prNumber:k},n),d}catch(a){return(0,r.v)(`[pr-audit] audit pass failed for ${l.name}#${j.issueNumber}`,a),(0,C.yM)(j.id,"pr_audit_failed",{reason:a instanceof Error?a.message.slice(0,300):String(a)},n),null}finally{if(c)try{await (0,ax.rm)(c,{recursive:!0,force:!0})}catch{}}}let bK=(0,ah.join)(".drydock","PR.md");function bL(a){let b=function(a){let b;try{b=(0,ae.readFileSync)((0,ah.join)(a,bK),"utf8")}catch{return null}let c=b.split("\n"),d=0;for(;d<c.length&&""===(c[d]??"").trim();)d++;if(d>=c.length)return null;let e=(c[d]??"").trim().slice(0,300);if(""===e)return null;let f=c.slice(d+1).join("\n").trim();return{title:e,body:f.length>6e4?`${f.slice(0,6e4)}
9
+ … (truncated)`:f}}(a);return(0,ae.rmSync)((0,ah.join)(a,bK),{force:!0}),b}var bM=c(52484);let bN=(0,ah.join)(".drydock","QUESTIONS.md");function bO(a){let b=function(a){let b,c;try{b=(0,ae.readFileSync)((0,ah.join)(a,bN),"utf8")}catch{return null}return""===(c=b.trim())?null:c.length>6e4?`${c.slice(0,6e4)}
10
+ … (truncated)`:c}(a);return(0,ae.rmSync)((0,ah.join)(a,bN),{force:!0}),b}let bP=(0,ah.join)(".drydock","RELEASE.md"),bQ=/^tag:\s*(\S+)\s*$/i,bR=/^v?\d+\.\d+\.\d+/;function bS(a){let b=function(a){let b;try{b=(0,ae.readFileSync)((0,ah.join)(a,bP),"utf8")}catch{return null}return function(a){let b=null,c=[];for(let d of a.split("\n")){let a=d.match(bQ);if(a&&null===b){b=a[1]??null;continue}c.push(d)}let d=0;for(;d<c.length&&""===(c[d]??"").trim();)d++;if(d>=c.length)return b?{tag:b,title:b,notes:""}:null;let e=(c[d]??"").trim().slice(0,300);if(""===e)return null;null===b&&bR.test(e)&&(b=e);let f=c.slice(d+1).join("\n").trim();return{tag:b,title:e,notes:f.length>6e4?`${f.slice(0,6e4)}
11
+ … (truncated)`:f}}(b)}(a);return(0,ae.rmSync)((0,ah.join)(a,bP),{force:!0}),b}async function bT(a,b={},c=(a,c)=>(0,av.JD)(a,c,b.db??(0,h.Lf)())){let d,e=b.db??(0,h.Lf)(),f=(0,C.ax)(a,e);if(!f)throw Error(`job ${a} not found`);let j=(0,i.L8)(f.repoId,e);if(!j)throw Error(`repo ${f.repoId} not found`);let k=(0,aw.Oe)(a,e)??(0,aw.v0)({repoId:j.id,mode:"agent",jobId:a},e);"queued"===f.status&&(0,C.dk)(f.id,"working",{},e);let l=b.worktrees??new ac.ND,m=(0,g.X$)(f.agent),n=(0,B.m)(m,e),o=(0,A.mt)(e),p=j.maxJobMinutes??o.maxJobMinutes,q=6e4*p,s=j.maxJobCostUsd??o.maxJobCostUsd,t=b.runSession??((a,b,c,d)=>(0,ad.V)(a,b,c,{db:e,provider:m,command:n,timeoutMs:q,costCapUsd:s,bypassPermissions:d})),u=b.consumeQuestions??bO,v=b.consumeReleaseMetadata??bS;("detected"===k.status||"error"===k.status)&&(0,aw.Cq)(k.id,"evaluating",{},e);let w=b=>{let c=(0,aw.Oe)(a,e),d=c?.status??"evaluating";("evaluating"===d||"proposed"===d||"publishing"===d)&&(0,aw.Cq)(k.id,"error",{errorMessage:b.slice(0,500)},e)};try{var x,y;d=await l.prepare(j,f.id,0,"release"),(0,C.yM)(f.id,"worktree",{path:d.path,branch:d.branch},e);let a=(0,aX.Xm)((0,aX.yx)(j.id,aW._.release,e),{REPO_NAME:j.name,BRANCH:d.branch,DEFAULT_BRANCH:j.defaultBranch}),b=await t((0,C.ax)(f.id,e),a,d.path,!0),g=(0,C.ax)(f.id,e);if("aborted"===g.status)return w("release aborted"),g;if("interrupted"===g.status)return g;let h=(x=b,y={provider:m.label,maxJobMinutes:p,maxJobCostUsd:s,command:n},x.timedOut?`${y.provider} timed out after ${y.maxJobMinutes} minutes`:x.costExceeded?`per-job cost limit of $${y.maxJobCostUsd} reached`:x.spawnError?`failed to start ${y.command}: ${x.spawnError.message}`:x.limit?`${y.provider} unavailable (${x.limit.kind}): ${x.limit.rawSnippet??"limit reached"}`:0!==x.exitCode?`${y.provider} exited non-zero`:void 0);if(h)return w(h),(0,C.dk)(f.id,"needs_human",{errorMessage:h.slice(0,500)},e);(0,at._x)(m.id,e);let i=u(d.path);if(i)return(0,C.yM)(f.id,"status",{reason:"agent has open questions",questions:i},e),w("agent parked open questions for a human"),(0,C.dk)(f.id,"needs_human",{errorMessage:"agent has open questions",branch:d.branch},e);let o=v(d.path);(0,aw.Dg)(k.id,{tag:o?.tag??null,title:o?.title??null,notes:o?.notes??null},e);let q=(0,C.dk)(f.id,"released",{branch:d.branch},e);return await c("release_published",`🚀 Release done: ${j.name}${o?.tag?` (${o.tag})`:""}.`),q}catch(c){let a=c instanceof Error?c.message:String(c);(0,C.yM)(f.id,"error",{message:a},e),w(a);let b=(0,C.ax)(f.id,e);if("working"===b.status)return(0,C.dk)(f.id,"needs_human",{errorMessage:a.slice(0,500)},e);return b}finally{if(d)try{await l.remove(d,j.path)}catch(a){(0,r.v)(`[release-job] worktree cleanup failed for job ${f.id}`,a)}}}async function bU(a,b,c,d=(0,h.Lf)(),e={}){for(let f of c)try{let c=await b.viewIssue(f.number),g=await aV(a,{number:c.number,title:c.title,body:c.body},d,{generate:e.generate});if(!g.skipped&&g.subtasks.length>=2){let a=aS(g.subtasks.map(a=>({title:a.title,status:a.status})));await b.commentIssue(c.number,`Drydock decomposed this issue into subtasks and will work them in order:
12
+
13
+ ${a}`)}}catch(b){if(b instanceof at.vu)throw b;(0,r.v)(`[subtasks] decomposition failed for ${a.name}#${f.number}`,b)}}function bV(a,b,c=(0,h.Lf)()){for(let d of aT(a,b,c))"pending"===d.status&&aU(d.id,"in_progress",c)}function bW(a,b,c=(0,h.Lf)()){for(let d of aT(a,b,c))"in_progress"===d.status&&(aU(d.id,"deferred",c),aU(d.id,"pending",c))}async function bX(a){let b,{job:c,prNumber:d,repo:e,forge:f,db:g,provider:i,command:j,model:k}=a;try{let m=await f.prDiff(d);if(!m.trim())return null;let n=await f.viewIssue(c.issueNumber),o=aT(e.id,c.issueNumber,g),p={issueNumber:c.issueNumber,issueTitle:n.title,issueBody:n.body,subtasks:o.map(a=>({ordinal:a.ordinal,title:a.title})),diff:m},q=a.generate;if(!q){var l;let c;b=await (0,ax.mkdtemp)((0,ah.join)((0,ay.tmpdir)(),"drydock-verify-")),c=(l={provider:i,command:j,model:k,cwd:b,repoId:e.id,db:g,runner:a.runner}).timeoutMs??18e4,q=async a=>{try{var b;let d,e,f,{text:g,exitCode:h}=await aD({provider:l.provider,command:l.command,model:l.model,cwd:l.cwd,prompt:(d=bw(a.issueBody.trim(),6e3),e=bw(a.diff.trim(),24e3),["You are performing a READ-ONLY verification pass. Do NOT edit files, run\ncommands, or make any changes. Given a GitHub issue, its subtasks, and the\ndiff of a pull request that claims to address it, judge whether the diff\nactually satisfies each subtask (or, if there are none, the issue overall).\n",`## Issue #${a.issueNumber}: ${a.issueTitle}`,"",d,"\n## Subtasks\n",0===(b=a.subtasks).length?"This issue has no tracked subtasks; verify the issue as a whole.":b.map(a=>`- [ordinal ${a.ordinal}] ${a.title}`).join("\n"),"\n## Pull request diff\n\n```diff",e,'```\n\n## Response format\n\nRespond with ONLY a JSON object (no prose, no code fences) of the shape:\n\n{"summary": "<one or two sentence overall assessment>",\n "verdicts": [{"ordinal": <number>, "status": "done"|"pending"|"deferred",\n "reason": "<short justification>"}]}\n\nInclude one verdict per subtask ordinal above. If there are no subtasks,\nreturn a single verdict with ordinal 0 for the issue as a whole. Use\n"done" when the diff fully satisfies it, "pending" when it is unmet or only\npartially addressed, and "deferred" when it is intentionally out of scope.'].join("\n")),repoId:l.repoId,type:"verify",timeoutMs:c,runner:l.runner,db:l.db});if(0!==h)return null;let i=g.match(/\{[\s\S]*\}/);if(!i)return null;try{f=JSON.parse(i[0])}catch{return null}let j=by.safeParse(f);return j.success?j.data:null}catch{return null}}}let r=await q(p);if(!r)return(0,C.yM)(c.id,"verification",{ok:!1},g),null;let s=function(a,b,c,d=(0,h.Lf)()){let e=new Map(aT(a,b,d).map(a=>[a.ordinal,a])),f=0,g=0,i=[];for(let a of c.verdicts){let b=e.get(a.ordinal);if(b)if("done"===a.status)!function(a,b){let c=a.status;if("done"!==c&&"skipped"!==c)try{if("in_progress"===c)return void aU(a.id,"done",b);aU(a.id,"in_progress",b),aU(a.id,"done",b)}catch{}}(b,d),f+=1;else if("deferred"===a.status)try{aU(b.id,"deferred",d),g+=1}catch{}else i.push(b.title)}return{done:f,deferred:g,pendingTitles:i}}(e.id,c.issueNumber,r,g);return await f.commentIssue(c.issueNumber,(0,V.f)(function(a,b){let c=[`🔎 Drydock post-PR verification`,""];if(a.summary.trim()&&c.push(a.summary.trim(),""),b.pendingTitles.length>0)for(let a of(c.push("Subtasks still pending:"),b.pendingTitles))c.push(`- ${a}`);else c.push("All tracked subtasks appear satisfied by the diff.");return c.join("\n")}(r,s))),(0,C.yM)(c.id,"verification",{ok:!0,summary:r.summary,done:s.done,deferred:s.deferred,pending:s.pendingTitles.length},g),r}catch(a){return(0,r.v)(`[verify] verification pass failed for ${e.name}#${c.issueNumber}`,a),null}finally{if(b)try{await (0,ax.rm)(b,{recursive:!0,force:!0})}catch{}}}function bY(a,b){return a.length>b?`${a.slice(0,b)}
14
+ … (truncated)`:a}async function bZ(a,b,c,d){if(0===a.length)return[];let e=new Map(d.select().from(j.followupIssues).where((0,f.eq)(j.followupIssues.jobId,b)).all().map(a=>[a.title,a.ghIssueNumber])),g=[];for(let{title:f,body:h}of a){let a,i=e.get(f);if(void 0!==i){g.push(i);continue}try{a=await c(f,h)}catch(a){(0,r.v)(`[run-job] follow-up issue filing failed for job ${b}: ${f}`,a);continue}g.push(a),e.set(f,a);try{d.insert(j.followupIssues).values({jobId:b,ghIssueNumber:a,title:f}).run()}catch(c){(0,r.v)(`[run-job] follow-up issue recording failed for job ${b}: #${a}`,c)}}return g}function b$(a,b){let[c,d]="codex"===b?["OpenAI","Codex"]:"openrouter"===b?["OpenRouter","OpenRouter"]:["Anthropic","Claude"];switch(a){case"rate_limit":return`${c} API rate limit hit — waiting for the window to clear`;case"overloaded":return`${c} API overloaded — waiting before retrying`;default:return`${d} usage limit reached — waiting for the quota to reset`}}async function b_(a,b={}){let c=b.db??(0,h.Lf)(),d=b.notify??((a,b)=>(0,av.JD)(a,b,c)),e=(0,C.ax)(a,c);if(e?.kind==="release")return bT(a,{db:c},d);let f=await b0(a,b,d);if("merged"===f.status)await d("pr_merged",`✅ Merged: ${f.repoId}#${f.issueNumber} (PR #${f.prNumber}).`);else if("needs_human"===f.status){let a=b.announceNeedsHuman??(a=>H(a,{db:c}));await a(f),await d("needs_human",`⚠️ Needs human: ${f.repoId}#${f.issueNumber} — ${f.errorMessage??"review required"}.`)}else"aborted"===f.status&&await d("job_failed",`🛑 Aborted: ${f.repoId}#${f.issueNumber} — ${f.errorMessage??"job aborted"}.`);return f}async function b0(a,b,c){let d,e=b.db??(0,h.Lf)(),l=(0,C.ax)(a,e);if(!l)throw Error(`job ${a} not found`);let m=(0,i.L8)(l.repoId,e);if(!m)throw Error(`repo ${l.repoId} not found`);"queued"===l.status&&(0,C.dk)(l.id,"working",{},e);let n=b.worktrees??new ac.ND,o=(0,k.Ie)(m),p=(0,g.X$)(l.agent),s=(0,B.m)(p,e),t=(0,A.mt)(e),u=m.maxJobMinutes??t.maxJobMinutes,v=6e4*u,w=(m.maxCiWaitMinutes??t.maxCiWaitMinutes)*6e4,x=m.maxJobCostUsd??t.maxJobCostUsd,y={mode:"docker"===m.sandbox?"docker":"none",imageOverride:aY(m.sandboxImage),defaultImage:t.sandboxDefaultImage,allowNetwork:!!m.sandboxAllowNetwork,cpus:aY(m.sandboxCpus),memory:aY(m.sandboxMemory)},z="docker"===y.mode&&"http"!==p.kind,D=b.prepareSandbox??a0,E={command:s},F=b.runSession??((a,b,c)=>(0,ad.V)(a,b,c,{db:e,provider:p,command:E.command,runner:E.runner,timeoutMs:v,costCapUsd:x})),G=b.createPr??(a=>o.createPr(a)),H=b.runPlan??((a,b,c)=>aD({provider:p,command:s,model:a.model??m.defaultModel,cwd:c,prompt:b,repoId:m.id,type:"plan",timeoutMs:v,db:e}).then(a=>({text:a.text,exitCode:a.exitCode}))),J=b.commentIssue??((a,b)=>o.commentIssue(a,b)),K=b.createIssue??((a,b)=>o.createIssue(a,b)),L=b.viewIssue??(a=>o.viewIssue(a).then(a=>({title:a.title,body:a.body}))),M=b.consumePrMetadata??bL,N=b.consumeQuestions??bO,O=b.consumeFollowups??bv,P=b.markNeedsHuman??(a=>(0,q.$l)(m.id,a,e)),Q=b.adoptClaudeMem??bs,R=(a,b,c)=>{if(!a.sessionId)throw Error(`job ${a.id} has no session id to resume`);return(0,ad.n)(a,a.sessionId,"",c,{db:e,provider:p,command:E.command,runner:E.runner,timeoutMs:v,costCapUsd:x,resumePrompt:b,resumeModel:a.model??m.defaultModel,resumeMaxTurns:a.maxTurns})},S=b.resumeLimitSession??R,T=b.resumeInstructionSession??R,U=async a=>{let b=a.latched?a.resetAt??Math.floor(Date.now()/1e3)+60:(0,at.H_)(a,e).latch.blockedUntil;(0,C.yM)(l.id,"status",{reason:`${a.agent}_${a.kind}`,blockedUntil:b,snippet:a.rawSnippet},e),m.autoDecompose&&bW(m.id,l.issueNumber,e);let c=(0,C.dk)(l.id,"waiting_limit",{errorMessage:b$(a.kind,a.agent),availableAt:b,limitKind:a.kind},e);try{let c=new Date(1e3*b).toISOString().slice(0,16).replace("T"," ");await J(l.issueNumber,`⏳ Drydock paused this job: ${b$(a.kind,a.agent)}. It will retry automatically (next attempt around ${c} UTC).`)}catch(a){(0,r.v)(`[run-job] limit-park comment failed for job ${l.id}`,a)}return c},V=!1,W=async()=>{if(d)try{if(!await n.commitAndPushForHuman(d,`wip: park #${l.issueNumber} for human review`))return;return V=!0,d.branch}catch(a){(0,r.v)(`[run-job] failed to push preserved worktree for job ${l.id}`,a),V=!0;return}},X=async a=>{m.autoDecompose&&bW(m.id,l.issueNumber,e);let b=await W(),c={errorMessage:a.slice(0,500)};return b&&(c.branch=b),(0,C.dk)(l.id,"needs_human",c,e)},Y=b.runBabysitter??((a,b)=>{var c;return bo(a,b,{gh:o,db:e,ciWaitMs:w,mergeGateMs:6e4*m.mergeGateMinutes,mergeWithoutChecks:m.mergeWithoutChecks,sleep:(0,bM.rN)({repoId:m.id,prNumber:b,onNudge:a=>(0,C.yM)(l.id,"status",{reason:`woken by webhook: ${a}`,prNumber:b},e)}),resumeSession:(c={worktrees:n,worktree:()=>d,settled:()=>{let a=(0,C.ax)(l.id,e);return!a||"aborted"===a.status||"interrupted"===a.status},resume:(a,b,c,d)=>(0,ad.n)(a,b,c,d,{db:e,provider:p,command:E.command,runner:E.runner,timeoutMs:v,costCapUsd:x})},async(a,b,d)=>{let e=c.worktree();if(!e)throw Error(`job ${a.id} has no live worktree to resume in`);let f=await c.resume(a,b,d,e.path),g={exitCode:f.exitCode,timedOut:f.timedOut,costExceeded:f.costExceeded,spawnError:f.spawnError,limit:f.limit};if(bf(g))return g;if(c.settled?.())return{...g,settledExternally:!0};try{await c.worktrees.commitAndPush(e,`Fix CI for #${a.issueNumber}`)}catch(a){if(a instanceof ac.RD)return{...g,noChanges:!0};throw a}return g}),autoHeal:m.autoHealCi?{headSha:a=>o.prHeadSha(a),provider:m.platform}:void 0})}),Z=b.verify??((a,b)=>bX({job:a,prNumber:b,repo:m,forge:o,db:e,provider:p,command:s,model:a.model??m.defaultModel}).then(()=>void 0)),$=b.audit??((a,b)=>bJ({job:a,prNumber:b,repo:m,forge:o,db:e}).then(()=>void 0));try{let a,b=l.humanInstruction,g=!!b&&!!l.sessionId&&p.supportsResume,i=!!b&&!!l.branch,k=(0,ac.mL)(l.issueNumber,(0,q.us)(m.id,l.issueNumber,e));if(d=i?await n.prepareResume(m,l.id,l.branch):await n.prepare(m,l.id,l.issueNumber,k),(0,C.yM)(l.id,"worktree",{path:d.path,branch:d.branch},e),z){let a=await D({config:y,worktreePath:d.path,jobId:l.id,agent:p.id,inContainerCommand:p.defaultCommand,preferredRuntime:t.containerRuntime});if(!a.ok)return await X(`Sandbox preflight failed: ${a.reason}`);E.runner=a.session.runner,E.command=a.session.command,(0,C.yM)(l.id,"status",{reason:`sandboxed execution (${y.mode})`},e)}let o=!!l.limitKind&&!!l.sessionId&&p.supportsResume;l.humanInstruction&&e.update(j.jobs).set({humanInstruction:null}).where((0,f.eq)(j.jobs.id,l.id)).run(),l.limitKind&&e.update(j.jobs).set({limitKind:null}).where((0,f.eq)(j.jobs.id,l.id)).run();let v=async a=>{var c,d;let g,h,i=(0,aX.XZ)(m.id,aW._.main,e);e.update(j.jobs).set({implementPromptVersion:i.version}).where((0,f.eq)(j.jobs.id,l.id)).run();let k={title:"",body:""};try{k=await L(l.issueNumber)}catch(a){(0,r.v)(`[run-job] failed to fetch issue #${l.issueNumber} for job ${l.id}`,a)}let n=bY(k.title,500),o=bY(k.body,2e4),p=(0,aX.Xm)(i.content,{ISSUE_NUM:l.issueNumber,BRANCH:a.branch,REPO_NAME:m.name,ISSUE_TITLE:n,ISSUE_BODY:o,PR_FORMAT:(0,aX.yx)(m.id,aW._.prFormat,e)});if(m.autoDecompose){let a=aT(m.id,l.issueNumber,e);a.length>0&&(p+=(c=a.map(a=>({title:a.title,status:a.status})),0===c.length?"":["\n\n## Subtasks\n\nThis issue has been broken into the ordered subtasks below. Work through them\nin order, top to bottom, as part of this single change:\n",aS(c)].join("\n")),bV(m.id,l.issueNumber,e))}if(p+=(d=m.agentInstructions,(g=d?.trim())?["\n\n## Repository-specific agent instructions\n\nThe operator of this repository has provided the following instructions. Follow them\nin addition to the task above, unless they conflict with explicit safety constraints:\n",g.slice(0,4e3)].join("\n"):""),b&&(p+=(h=b.trim())?["\n\n## Human guidance\nA human reviewed where this job got stuck and gave the following instruction.\nFollow it to get unblocked:\n",bY(h,4e3)].join("\n"):""),m.planFirst){let b=(0,aX.Xm)((0,aX.yx)(m.id,aW._.plan,e),{ISSUE_NUM:l.issueNumber,BRANCH:a.branch,REPO_NAME:m.name,ISSUE_TITLE:n,ISSUE_BODY:o});try{let c=await H((0,C.ax)(l.id,e),b,a.path),d=c.text.trim();if(0===c.exitCode&&d.length>0){let a;(0,C.yM)(l.id,"status",{reason:"plan stage complete"},e),p+=(a=d.trim())?["\n\n## Implementation plan\nFollow this plan unless the code contradicts it:\n",a.length>1e4?`${a.slice(0,1e4)}
15
+ … (truncated)`:a].join("\n"):"";try{await J(l.issueNumber,`**Implementation plan** (job ${l.id}):
16
+
17
+ ${d}`)}catch(a){(0,r.v)(`[run-job] plan comment failed for job ${l.id}`,a)}}else(0,C.yM)(l.id,"status",{reason:"plan stage failed, continuing without a plan",exitCode:c.exitCode},e)}catch(a){(0,r.v)(`[run-job] plan stage failed for job ${l.id}`,a),(0,C.yM)(l.id,"status",{reason:"plan stage failed, continuing without a plan"},e)}}return F((0,C.ax)(l.id,e),p,a.path)};if(g){(0,C.yM)(l.id,"status",{reason:"resuming session with human instruction",sessionId:l.sessionId},e),m.autoDecompose&&bV(m.id,l.issueNumber,e);let c=(0,aX.Xm)((0,aX.yx)(m.id,aW._.humanResume,e),{ISSUE_NUM:l.issueNumber,BRANCH:d.branch,REPO_NAME:m.name,INSTRUCTION:bY(b,4e3),PR_FORMAT:(0,aX.yx)(m.id,aW._.prFormat,e)});a=await T((0,C.ax)(l.id,e),c,d.path)}else if(o){(0,C.yM)(l.id,"status",{reason:"resuming session after provider limit",sessionId:l.sessionId},e),m.autoDecompose&&bV(m.id,l.issueNumber,e);let b=(0,aX.Xm)((0,aX.yx)(m.id,aW._.limitResume,e),{ISSUE_NUM:l.issueNumber,BRANCH:d.branch,REPO_NAME:m.name,PR_FORMAT:(0,aX.yx)(m.id,aW._.prFormat,e)});a=await S((0,C.ax)(l.id,e),b,d.path)}else a=await v(d);let w=(0,C.ax)(l.id,e);if("aborted"===w.status||"interrupted"===w.status)return m.autoDecompose&&bW(m.id,l.issueNumber,e),w;let B=0;for(;a.maxTurnsReached&&(0,A.mt)(e).maxTurnsAutoResume&&a.sessionId&&p.supportsResume&&B<3;){B+=1,(0,C.yM)(l.id,"status",{reason:`turn budget (${l.maxTurns}) reached, resuming`,attempt:B,sessionId:a.sessionId},e),m.autoDecompose&&bV(m.id,l.issueNumber,e);let b=(0,aX.Xm)((0,aX.yx)(m.id,aW._.turnResume,e),{ISSUE_NUM:l.issueNumber,BRANCH:d.branch,REPO_NAME:m.name,PR_FORMAT:(0,aX.yx)(m.id,aW._.prFormat,e)});a=await S((0,C.ax)(l.id,e),b,d.path);let c=(0,C.ax)(l.id,e);if("aborted"===c.status||"interrupted"===c.status)return m.autoDecompose&&bW(m.id,l.issueNumber,e),c}if(a.timedOut)return await X(`${p.label} timed out after ${u} minutes`);if(a.costExceeded)return await X(`per-job cost limit of $${x} reached`);if(a.spawnError)return await X(`failed to start ${s}: ${a.spawnError.message}`);if(a.limit){let b=a.limit;if("auth"===b.kind||"billing"===b.kind){let a="auth"===b.kind?"authentication":"billing";return await X(`${p.label} ${a} error: ${b.rawSnippet}`)}if(!(0,at.$q)(p.id,e))return await X(`${b$(b.kind,b.agent)} (auto-wait is disabled)`);return await U(b)}if(a.maxTurnsReached)return await X(`turn budget (${l.maxTurns}) reached`);if(0!==a.exitCode)return await X(`${p.label} exited non-zero`);(0,at._x)(p.id,e);let I=O(d.path),Q=N(d.path);if(Q){m.autoDecompose&&bW(m.id,l.issueNumber,e);try{await n.commitAndPush(d,`Partial work for #${l.issueNumber} (parked for review)`)}catch(a){if(!(a instanceof ac.RD))throw a}try{await J(l.issueNumber,`🙋 Drydock needs a human decision before continuing on #${l.issueNumber}:
18
+
19
+ ${Q}`)}catch(a){(0,r.v)(`[run-job] questions comment failed for job ${l.id}`,a)}try{await P(l.issueNumber)}catch(a){(0,r.v)(`[run-job] needs-human label failed for job ${l.id}`,a)}return(0,C.dk)(l.id,"needs_human",{errorMessage:"agent has open questions",branch:d.branch},e)}if(m.adrGating){let a=(0,aL.Pe)("pending_review",e,m.id);if(a.length>0)return await X(`Blocked by ${a.length} pending ADR review(s).`)}let R=M(d.path),V=R?.title??`Fix #${l.issueNumber}`;try{await n.commitAndPush(d,V)}catch(a){if(a instanceof ac.RD)return await X("Agent produced no changes");throw a}let W=R?.title??(0,q.ts)(m.id,e).find(a=>a.number===l.issueNumber)?.title??`Fix #${l.issueNumber}`,_=await bZ(I,l.id,K,e),aa=`Closes #${l.issueNumber}`,ab=_.length>0?`Spun off: ${_.map(a=>`#${a}`).join(", ")}`:"",ad=[R?.body,aa,ab].filter(Boolean).join("\n\n"),ae=await G({head:d.branch,base:m.defaultBranch,title:W,body:ad});if((0,C.dk)(l.id,"ci_running",{branch:d.branch,prNumber:ae},e),await c("pr_opened",`🔀 PR opened: ${m.id}#${l.issueNumber} (PR #${ae}).`),m.verifyPr)try{await Z((0,C.ax)(l.id,e),ae)}catch(b){let a=b instanceof Error?b.message:String(b);(0,C.yM)(l.id,"error",{message:`verification pass failed: ${a}`},e)}if(m.autoPrAudit)try{await $((0,C.ax)(l.id,e),ae)}catch(b){let a=b instanceof Error?b.message:String(b);(0,C.yM)(l.id,"error",{message:`pr audit failed: ${a}`},e)}let af=await Y((0,C.ax)(l.id,e),ae);return m.autoDecompose&&("merged"===af.status?!function(a,b,c=(0,h.Lf)()){for(let d of aT(a,b,c))!function(a,b){let c=a.status;if("done"!==c&&"skipped"!==c){if("in_progress"===c)return aU(a.id,"done",b);aU(a.id,"in_progress",b),aU(a.id,"done",b)}}(d,c)}(m.id,l.issueNumber,e):bW(m.id,l.issueNumber,e)),af}catch(c){let a=c instanceof Error?c.message:String(c);(0,C.yM)(l.id,"error",{message:a},e);let b=(0,C.ax)(l.id,e);if(["working","ci_running","ci_failed","retrying"].includes(b.status)){m.autoDecompose&&bW(m.id,l.issueNumber,e);let b=await W();try{let c={errorMessage:a.slice(0,500)};return b&&(c.branch=b),(0,C.dk)(l.id,"needs_human",c,e)}catch(b){if(!(b instanceof I.xh))throw b;(0,r.v)(`[run-job] job ${l.id} settled concurrently during failure handling`,b);let a=(0,C.ax)(l.id,e);return"needs_human"!==a.status&&(V=!1),a}}return b}finally{if(d&&!V){if(m.adoptClaudeMem)try{await Q({branch:d.branch,cwd:d.path})}catch(a){(0,r.v)(`[run-job] claude-mem adoption failed for job ${l.id}`,a)}try{await n.remove(d,m.path)}catch(a){(0,r.v)(`[run-job] worktree cleanup failed for job ${l.id}`,a)}}}}var b1=c(35494),b2=c(96356);let b3={active:!1},b4={active:!1},b5={claude:{active:!1},codex:{active:!1},openrouter:{active:!1}};function b6(a,b,c,d,e={}){var f;let i=(0,g.X$)(a.agent),j=(f={provider:i,command:(0,B.m)(i,d),model:a.defaultModel,cwd:a.path,db:d,runner:e.runner},async a=>{let{text:b,exitCode:c,stderr:d}=await aD({provider:f.provider,command:f.command,model:f.model,cwd:f.cwd,prompt:["Break the following GitHub issue into an ordered list of independent subtasks\nthat can each be implemented and reviewed on their own.\n",`Title: ${a.title}`,"",a.body.trim(),"\nRespond with ONLY a JSON array of short subtask title strings, in the order\nthey should be done. If the issue is a single coherent task that should not\nbe split, respond with an empty array []."].join("\n"),repoId:f.repoId,type:"decompose",runner:f.runner,db:f.db});if(0!==c){let a=f.provider.classifyFailure?.({exitCode:c,stderr:d,resultText:b});if(a&&a1.includes(a.kind)){let b=f.db??(0,h.Lf)();if((0,at.$q)(f.provider.id,b))throw(0,at.H_)(a,b),new at.vu(a)}return[]}let e=b.match(/\[[\s\S]*\]/);if(!e)return[];try{let a=JSON.parse(e[0]);if(!Array.isArray(a))return[];return a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean)}catch{return[]}});return bU(a,b,c,d,{generate:j})}let b7={color:"d73a4a",description:"Drydock needs a human before automating this issue"},b8=["needs_human","aborted"];async function b9(a,b,c,d,e,g){var h,i;let k=e.some(a=>b.readyLabels.includes(a)),l=e.some(a=>b.blockingLabels.includes(a));return!!k&&!l&&!!(0,s.i)(b,d.authorAssociation)&&(h=a.id,i=d.number,!(g.select().from(j.jobs).where((0,f.Uo)((0,f.eq)(j.jobs.repoId,h),(0,f.eq)(j.jobs.issueNumber,i),(0,f.RV)(j.jobs.status,[...b8]))).all().length>=b.maxAttempts)||(e.includes(a.needsHumanLabel)||(await c.ensureLabel(a.needsHumanLabel,b7),await c.addLabels(d.number,[a.needsHumanLabel])),!1))}async function ca(a,b,c,d,e){if(d.includes(a.needsHumanLabel))return;await b.ensureLabel(a.needsHumanLabel,b7),await b.addLabels(c.number,[a.needsHumanLabel]);let f=e.length>0?e.join("; "):"flagged for human review";await b.commentIssue(c.number,`⏸️ Held for human review before automated work — ${f}. Remove the \`${a.needsHumanLabel}\` label or use "Start now" to proceed.`)}let cb=I.RH.filter(a=>!I.kl.includes(a)),cc=["working","ci_running","ci_failed","retrying","waiting_limit"];async function cd(a,b,c,d){let e="codex"===a?"Codex capacity":"openrouter"===a?"OpenRouter window":"Claude quota";for(let f of(0,C.i1)(["waiting_limit"],d).filter(b=>b.agent===a)){try{(0,C.dk)(f.id,"queued",{availableAt:null,errorMessage:null},d),(0,C.yM)(f.id,"status",{reason:`${a}_limit_cleared`},d)}catch(a){(0,r.v)(`[driver] limit requeue failed for job ${f.id}`,a);continue}let g=b.find(a=>a.id===f.repoId);if(g)try{let a=c.forgeFor?.(g)??(0,k.Ie)(g);await a.commentIssue(f.issueNumber,`▶️ ${e} available again — resuming job #${f.id}.`)}catch(a){(0,r.v)(`[driver] limit-resume comment failed for job ${f.id}`,a)}}}async function ce(a={}){let b=a.db??(0,h.Lf)(),c=a.runJob??b_,e=(0,i.uP)(b),n=a.triage??w,o=a.decompose??b6;for(let c of e)try{await (0,l.v)("low",async()=>{let d=a.forgeFor?.(c)??(0,k.Ie)(c),e=a.fetchIssues??(async(a,b)=>(await d.refreshRateLimit?.(),d.listAllIssues())),g=await e(c.path,c.queueLabel);(0,q.VK)(c.id,g,b);let h=b.select().from(j.issues).where((0,f.eq)(j.issues.repoId,c.id)).all(),i=new Map(h.map(a=>[a.number,a])),l=(0,s.A)(c);if(l.autoTriageEnabled&&await n(c,d,g,b),l.autoDecompose&&!(0,at.nc)(c.agent,b)){let a=g.filter(a=>{let b=a.labels.map(a=>a.name);return b.includes(c.queueLabel)||b.some(a=>l.readyLabels.includes(a))});if(a.length>0)try{await o(c,d,a,b)}catch(a){(0,r.v)(`[driver] decomposition sweep failed for ${c.name}`,a)}}for(let a of g){var m,t;let e=a.labels.map(a=>a.name),g=e.includes(c.queueLabel),h=!!l.autoProcessEnabled&&await b9(c,l,d,a,e,b);if(!g&&!h)continue;let k=p({number:a.number,title:a.title,labels:e});if("blocked"===k.decision)continue;if("needs_review"===k.decision&&!g){await ca(c,d,a,e,k.reasons);continue}if(function(a,b,c){return(0,C.i1)([...cb],a).some(a=>a.repoId===b&&a.issueNumber===c)}(b,c.id,a.number))continue;h&&a.author&&l.priorityAuthors.includes(a.author)&&(m=c.id,t=a.number,b.update(j.issues).set({priority:-1}).where((0,f.Uo)((0,f.eq)(j.issues.repoId,m),(0,f.eq)(j.issues.number,t))).run());let n=i.get(a.number);(0,au.Ix)({repoId:c.id,issueNumber:a.number,model:n?.modelOverride??c.defaultModel,agent:n?.agentOverride??c.agent},b)}})}catch(a){a instanceof m.OE?console.debug(`[driver] ${c.name} sweep yielded: ${a.message}`):(0,r.v)(`[driver] issue sync failed for ${c.name}`,a)}(0,x.PH)("cost_limit"===(0,A.Jf)(b).reason,b3,b),(0,x.mW)((0,Q.DB)(b),b4,b);try{if(function(a=Date.now()){return!aa&&(void 0===d||a-d>=9e5)}()){let c=a.credentialProbe??(a=>ab({db:a}));Promise.resolve(c(b)).catch(a=>(0,r.v)("[driver] credential probe round failed",a))}}catch(a){(0,r.v)("[driver] credential watchdog sweep failed",a)}(0,au.pp)({expiredBefore:Math.floor(Date.now()/1e3)},b);try{let a=(0,b2.reconcileExternalAborts)(b);a.length>0&&console.log(`[driver] aborted ${a.length} externally-aborted job(s)`)}catch(a){(0,r.v)("[driver] external-abort reconcile failed",a)}let t=[];for(let c of g.FD){let d=(0,at.nc)(c,b);if((0,x.RQ)(c,!!d,b5[c],b),d){t.push(c);continue}try{await cd(c,e,a,b)}catch(a){(0,r.v)(`[driver] ${c} limit-parked job resume sweep failed`,a)}}let u=t.length>0?t:void 0,v=(0,A.mt)(b).maxParallelJobs,z=(0,au._$)();for(;!(0,b1.jQ)()&&(0,A.Jf)(b).allowed&&(0,b1.JY)()<v;){let a=e.filter(a=>(0,A.DA)(a.id,b).allowed).filter(a=>!(a.sequential&&function(a,b){return(0,C.i1)([...cc],a).some(a=>a.repoId===b)}(b,a.id))).map(a=>a.id);if(0===a.length)break;let d=(0,au.Ym)({repoIds:a,worker:z,leaseMs:au.sV,excludeAgents:u},b);if(!d)break;let f=d.id,g=d.leaseToken;(0,b1.Pn)(f);let h=setInterval(()=>{try{(0,au.jQ)(f,g,{},b)}catch(a){(0,r.v)(`[driver] heartbeat failed for job ${f}`,a)}},au.m);h.unref?.(),c(f).catch(a=>(0,r.v)(`[driver] job ${f} failed`,a)).finally(()=>{clearInterval(h),(0,au.wL)(f,g,b),(0,b1.i2)(f)})}let B=a.reviewFeedback??(a=>(0,aK.L4)({db:a}));try{await (0,l.v)("low",()=>B(b))}catch(a){(0,r.v)("[driver] review-feedback sweep failed",a)}let D=a.deploymentHealing??(a=>ap({db:a}));try{await (0,l.v)("low",()=>D(b))}catch(a){(0,r.v)("[driver] deployment-healing sweep failed",a)}let E=a.releaseManagement??(a=>aH({db:a}));try{await (0,l.v)("low",()=>E(b))}catch(a){(0,r.v)("[driver] release-management sweep failed",a)}let F=a.branchJanitor??(a=>P({db:a}));try{await (0,l.v)("low",()=>F(b))}catch(a){(0,r.v)("[driver] branch-janitor sweep failed",a)}try{let c=(0,A.mt)(b);if(c.openrouterEnabled&&(0,y.Mf)({db:b,refreshHours:c.openrouterCatalogRefreshHours})){let c=a.openrouterCatalogSync??cg;Promise.resolve(c(b)).catch(a=>(0,r.v)("[driver] openrouter catalog sync failed",a))}}catch(a){(0,r.v)("[driver] openrouter catalog sweep failed",a)}}let cf=!1;async function cg(a){if(!cf){cf=!0;try{let b=(0,A.mt)(a);await (0,y.yd)({db:a,apiKey:(0,z.t)(b)||void 0})}finally{cf=!1}}}let ch=!1,ci=!1,cj=null,ck=null;function cl(){return{running:ch,lastTickAt:cj,intervalMs:ck}}function cm(a={}){if(ch)return;ch=!0;let b=a.tick??(()=>ce()),c=a.intervalMs??1e3*(0,A.mt)().pollIntervalSec;ck=c;let d=async()=>{if(ch){if(!ci){ci=!0,cj=Date.now();try{await b()}catch(a){(0,r.v)("[driver] tick failed",a)}finally{ci=!1}}ch&&(e=setTimeout(d,c))}};d()}function cn(){ch=!1,e&&clearTimeout(e),e=void 0}},93612:(a,b,c)=>{c.d(b,{Sv:()=>f,lw:()=>e,x8:()=>k});var d=c(29980);async function e(a,b=fetch){let c=new AbortController,d=setTimeout(()=>c.abort(),1e4);d.unref?.();try{let d=await b("https://openrouter.ai/api/v1/key",{headers:{Authorization:`Bearer ${a}`},signal:c.signal});if(d.ok)return{ok:!0};let e=(await d.text().catch(()=>"")).slice(0,200);return{ok:!1,error:`OpenRouter HTTP ${d.status}: ${e}`}}catch(a){if(c.signal.aborted)return{ok:!1,error:"OpenRouter key probe timed out after 10000ms"};return{ok:!1,error:a instanceof Error?a.message:String(a)}}finally{clearTimeout(d)}}class f extends Error{constructor(a,b,c){super(`OpenRouter HTTP ${a}: ${b}`),this.status=a,this.body=b,this.retryAfterMs=c,this.name="OpenRouterHttpError"}}let g=d.Ik({index:d.ai(),id:d.Yj().optional(),function:d.Ik({name:d.Yj().optional(),arguments:d.Yj().optional()}).optional()}),h=d.Ik({choices:d.YO(d.Ik({delta:d.Ik({content:d.Yj().nullish(),tool_calls:d.YO(g).optional()}).passthrough().optional(),finish_reason:d.Yj().nullish()})).optional(),usage:d.Ik({prompt_tokens:d.ai().optional(),completion_tokens:d.ai().optional(),cost:d.ai().nullish()}).passthrough().nullish(),error:d.Ik({code:d.KC([d.ai(),d.Yj()]).nullish(),message:d.Yj().optional()}).passthrough().optional()});function i(a){return"assistant"===a.role&&a.toolCalls?.length?{role:"assistant",content:a.content||null,tool_calls:a.toolCalls.map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:a.arguments}}))}:"tool"===a.role?{role:"tool",tool_call_id:a.toolCallId,content:a.content}:{role:a.role,content:a.content}}async function*j(a){let b=a.getReader(),c=new TextDecoder,d="";try{for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).indexOf("\n");for(;f>=0;)yield d.slice(0,f).replace(/\r$/,""),f=(d=d.slice(f+1)).indexOf("\n")}(d+=c.decode())&&(yield d)}finally{b.releaseLock()}}async function k(a){let b=a.fetchImpl??fetch,c={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};a.siteUrl&&(c["HTTP-Referer"]=a.siteUrl),a.appName&&(c["X-Title"]=a.appName);let d={model:a.model,messages:a.messages.map(i),stream:!0,usage:{include:!0}};a.tools?.length&&(d.tools=a.tools.map(a=>({type:"function",function:{name:a.name,description:a.description,parameters:a.parameters}}))),void 0!==a.maxTokens&&(d.max_tokens=a.maxTokens);let e=await b("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:c,body:JSON.stringify(d),signal:a.signal});if(!e.ok){let a=(await e.text().catch(()=>"")).slice(0,2e3);throw new f(e.status,a,function(a){if(!a)return;if(/^\d+$/.test(a))return 1e3*Number(a);let b=Date.parse(a);if(Number.isNaN(b))return;let c=b-Date.now();return c>0?c:void 0}(e.headers.get("retry-after")))}if(!e.body)throw new f(e.status,"response had no body");let g="",k=null,l=!1,m={promptTokens:0,completionTokens:0,costUsd:0},n=new Map;for await(let b of j(e.body)){let c;if(!b||b.startsWith(":")||!b.startsWith("data:"))continue;let d=b.slice(5).trim();if("[DONE]"===d){l=!0;break}try{c=h.parse(JSON.parse(d))}catch{continue}if(c.error)throw new f("number"==typeof c.error.code?c.error.code:500,c.error.message??"stream error");let e=c.choices?.[0];for(let b of(e?.delta?.content&&(g+=e.delta.content,a.onTextDelta?.(e.delta.content)),e?.delta?.tool_calls??[])){let a=n.get(b.index)??{id:"",name:"",argumentParts:[]};b.id&&(a.id=b.id),b.function?.name&&(a.name=b.function.name),b.function?.arguments&&a.argumentParts.push(b.function.arguments),n.set(b.index,a)}e?.finish_reason&&(k=e.finish_reason),c.usage&&(m.promptTokens=c.usage.prompt_tokens??m.promptTokens,m.completionTokens=c.usage.completion_tokens??m.completionTokens,m.costUsd=c.usage.cost??m.costUsd)}if(!l&&null===k)throw new f(502,"OpenRouter stream ended before completion");return{text:g,toolCalls:[...n.entries()].sort(([a],[b])=>a-b).map(([,a])=>({id:a.id,name:a.name,arguments:a.argumentParts.join("")})),finishReason:k,usage:m}}},94534:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(31421),e=c(77597);let f=(a,b,c,f)=>{let g,h=(0,d.spawn)(a,b,{cwd:c,env:process.env,detached:e.l9,stdio:["ignore","pipe","pipe"]});h.stdout?.setEncoding("utf8"),h.stderr?.setEncoding("utf8"),h.stdout?.on("data",a=>f.onStdout(a)),h.stderr?.on("data",a=>f.onStderr?.(a));let i=!1,j={done:new Promise(a=>{h.on("close",(b,c)=>{g&&clearTimeout(g),a(b??+!!c)}),h.on("error",b=>{j.spawnError=b,a(1)})}),abort:(a=5e3)=>{i||(i=!0,(0,e.g8)(h,"SIGTERM"),g=setTimeout(()=>(0,e.g8)(h,"SIGKILL"),a),g.unref?.())}};return j}},96356:(a,b,c)=>{c.r(b),c.d(b,{abortAllJobs:()=>H,abortJob:()=>F,clearAbort:()=>E,gracefulShutdown:()=>I,reconcileExternalAborts:()=>G,registerAbort:()=>D,startOrchestrator:()=>J});var d=c(97496),e=c(2025),f=c(84232),g=c(74644),h=c(64537),i=c(75818),j=c(52819),k=c(2412),l=c(9617);let m=["ci_running","ci_failed","retrying"];var n=c(89405),o=c(35494),p=c(73024),q=c(76760),r=c(54304),s=c(77597),t=c(1065),u=c(52479);let v=/^job-(\d+)$/,w=/^fb-(\d+)-/,x=/^dh-(\d+)-/;async function y(a={}){let b=a.db??(0,e.Lf)(),c=a.run??s.Sx,f=function(a){let b=a.select({id:h.jobs.id,status:h.jobs.status}).from(h.jobs).all(),c=new Set;for(let a of b)u.kl.includes(a.status)||c.add(a.id);return c}(b),g=0;for(let a of(0,r.uP)(b)){let e;await c("git",["-C",a.path,"worktree","prune"]).catch(()=>void 0);let j=(0,t._M)(a.name);try{e=(0,p.readdirSync)(j,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name)}catch{continue}for(let k of e){let e=v.exec(k)??w.exec(k)??x.exec(k);if(!e)continue;let l=Number(e[1]);if(f.has(l)||function(a,b){let c=b.select({status:h.jobs.status}).from(h.jobs).where((0,d.eq)(h.jobs.id,a)).get();return void 0!==c&&!u.kl.includes(c.status)}(l,b))continue;let m=(0,q.join)(j,k);await c("git",["-C",a.path,"worktree","remove","--force",m]).catch(()=>void 0);try{(0,p.rmSync)(m,{recursive:!0,force:!0}),g++}catch(a){(0,i.v)(`[worktree-reaper] failed to remove ${m}`,a)}}}return g}let z=!1,A=Symbol.for("drydock.orchestrator.abort-handles"),B=globalThis;B[A]??=new Map;let C=B[A];function D(a,b){C.set(a,b)}function E(a){C.delete(a)}function F(a,b=5e3){let c=C.get(a);return"function"==typeof c&&(c(b),C.delete(a),!0)}function G(a=(0,e.Lf)()){let b=[];for(let c of[...C.keys()])try{(0,k.ax)(c,a)?.status==="aborted"&&F(c)&&b.push(c)}catch(a){(0,i.v)(`[orchestrator] external-abort kill failed for job ${c}`,a)}return b}function H(a=5e3){let b=[...C.keys()];for(let b of C.values())b(a);return C.clear(),b}async function I(){(0,o.IZ)(!0),(0,n.py)(),await (0,j.CZ)().catch(a=>(0,i.v)("[orchestrator] drain notify failed",a)),H(5e3),await (0,o.$J)(8e3);try{let a=(0,e.Lf)();for(let b of a.select().from(h.jobs).where((0,d.RV)(h.jobs.status,["working","ci_running","ci_failed","retrying"])).all())try{(0,k.dk)(b.id,"interrupted",{},a)}catch(a){(0,i.v)(`[orchestrator] shutdown transition failed for job ${b.id}`,a)}}catch(a){(0,i.v)("[orchestrator] shutdown DB update failed",a)}(0,o._1)()}function J(){if(z)return;if(z=!0,!process.env.VITEST)if((0,o.DS)()){(0,o.f1)();try{let{requeued:a,interrupted:b}=function(a=(0,e.Lf)()){return{requeued:(0,l.pp)({},a),interrupted:function(a=(0,e.Lf)()){let b=a.select().from(h.jobs).where((0,d.RV)(h.jobs.status,m)).all();for(let c of b)a.update(h.jobs).set({status:"interrupted"}).where((0,d.eq)(h.jobs.id,c.id)).run(),(0,k.yM)(c.id,"status",{from:c.status,to:"interrupted",reason:"recovery"},a);return b.length}(a)}}();a>0&&console.log(`[orchestrator] requeued ${a} orphaned job(s)`),b>0&&console.log(`[orchestrator] recovered ${b} interrupted job(s)`)}catch(a){(0,i.v)("[orchestrator] recovery failed",a)}y().then(a=>{a>0&&console.log(`[orchestrator] reaped ${a} orphaned worktree(s)`)}).catch(a=>(0,i.v)("[orchestrator] worktree reap failed",a)).finally(()=>{let a,b;(0,n.tn)(),(a=()=>{try{let{jobEventsDeleted:a}=function(a=(0,e.Lf)(),b={}){let c=b.days??(0,g.mt)(a).retentionDays,i=b.vacuum??!0,j=Math.floor((b.now?.getTime()??Date.now())/1e3)-86400*c,k=a.select({id:h.jobs.id}).from(h.jobs).where((0,d.Uo)((0,d.Pe)(h.jobs.finishedAt),(0,d.lt)(h.jobs.finishedAt,j))),l=a.delete(h.jobEvents).where((0,d.RV)(h.jobEvents.jobId,k)).run().changes;return i&&a.run((0,f.ll)`VACUUM`),{jobEventsDeleted:l,vacuumed:i,cutoff:j}}((0,e.Lf)());a>0&&console.log(`[orchestrator] pruned ${a} job event(s)`)}catch(a){(0,i.v)("[orchestrator] prune sweep failed",a)}})(),b=setInterval(a,864e5),b.unref?.()})}else console.warn("[orchestrator] another instance holds the lock; driver loop not started");let a=async a=>{console.log(`[orchestrator] ${a} received, shutting down gracefully`),await I(),process.exit(0)};process.once("SIGINT",a),process.once("SIGTERM",a)}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=50,exports.ids=[50],exports.modules={24652:(a,b,c)=>{c.d(b,{m:()=>e});var d=c(23581);let e=(0,d.createServerReference)("40351ea90748f20b6ea53d3973d2f011d8331ea1fe",d.callServer,void 0,d.findSourceMapURL,"saveTemplateAction")},35264:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(30285).A)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},46019:(a,b,c)=>{c.d(b,{EY:()=>h,PS:()=>j,mg:()=>g,vV:()=>i});var d=c(14565),e=c(89642),f=c(24845);async function g(a){let b=(0,f.AI)(a);return(0,e.revalidatePath)("/prompts"),b}async function h(a,b){return(0,f.I7)(a,b),(0,e.revalidatePath)("/prompts"),{content:(0,f.yx)(a,b)}}async function i(a,b){return{content:(0,f.yx)(a,b),versions:(0,f.yO)(a,b).map(a=>({version:a.version,updatedAt:a.updatedAt,content:a.content})),hasRow:!!(0,f.F1)(a,b)}}async function j(a,b,c){let d=(0,f.HF)(a,b,c);return d?{version:d.version,content:d.content,updatedAt:d.updatedAt}:null}(0,c(13897).D)([g,h,i,j]),(0,d.A)(g,"40351ea90748f20b6ea53d3973d2f011d8331ea1fe",null),(0,d.A)(h,"6088db15317c3c87ffee58091f528b3f85324fdc10",null),(0,d.A)(i,"60126324f0952a224a0ab7a0fd69c420f6b2e1e458",null),(0,d.A)(j,"708f3339743f91b1814f6ec7737c0a8b08d4136dde",null)},50059:(a,b,c)=>{c.d(b,{A:()=>d});let d=(0,c(71859).A)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]])},53550:(a,b,c)=>{c.d(b,{v:()=>e});var d=c(23581);let e=(0,d.createServerReference)("60126324f0952a224a0ab7a0fd69c420f6b2e1e458",d.callServer,void 0,d.findSourceMapURL,"loadTemplateAction")},53985:(a,b,c)=>{c.d(b,{_:()=>d});let d={main:"default",ciFix:"ci-fix",plan:"plan",limitResume:"limit-resume",turnResume:"turn-resume",humanResume:"human-resume",prFormat:"pr-format",release:"release"}},60009:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(27905),e=c(5270);function f({value:a,onChange:b,options:c,size:g="default",disabled:h=!1}){return(0,d.jsx)("div",{className:(0,e.cn)("inline-flex items-center gap-0.5 rounded-lg border border-border bg-secondary/50 p-0.5","sm"===g&&"text-xs"),children:c.map(c=>(0,d.jsx)("button",{type:"button",disabled:h,onClick:()=>b(c.value),className:(0,e.cn)("rounded-md px-2.5 py-1 text-xs font-medium transition-colors focus-ring","disabled:cursor-not-allowed disabled:opacity-50",a===c.value?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:c.label},c.value))})}}};