@nilsr0711/drydock 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +6 -3
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/routes-manifest.json +20 -0
- package/.next/standalone/.next/server/app/_global-error/page.js +2 -2
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/adrs/page.js +2 -2
- package/.next/standalone/.next/server/app/adrs/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/adrs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cost/export/route.js +1 -0
- package/.next/standalone/.next/server/app/api/cost/export/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/cost/export/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/sse/dashboard/route.js +4 -0
- package/.next/standalone/.next/server/app/api/sse/dashboard/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/sse/dashboard/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/sse/jobs/[id]/route.js +2 -2
- package/.next/standalone/.next/server/app/api/sse/jobs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js +1 -0
- package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/costs/page.js +2 -2
- package/.next/standalone/.next/server/app/costs/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/costs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/jobs/[id]/page.js +5 -2
- package/.next/standalone/.next/server/app/jobs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/jobs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/needs-human/page.js +2 -2
- package/.next/standalone/.next/server/app/needs-human/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/needs-human/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page.js +2 -2
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/prompts/page.js +2 -2
- package/.next/standalone/.next/server/app/prompts/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/prompts/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/repos/[id]/page.js +2 -2
- package/.next/standalone/.next/server/app/repos/[id]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/repos/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +6 -3
- package/.next/standalone/.next/server/chunks/235.js +1 -0
- package/.next/standalone/.next/server/chunks/309.js +1 -0
- package/.next/standalone/.next/server/chunks/350.js +9 -0
- package/.next/standalone/.next/server/chunks/39.js +3 -0
- package/.next/standalone/.next/server/chunks/447.js +1 -0
- package/.next/standalone/.next/server/chunks/507.js +9 -0
- package/.next/standalone/.next/server/chunks/541.js +1 -0
- package/.next/standalone/.next/server/chunks/710.js +1 -0
- package/.next/standalone/.next/server/chunks/75.js +1 -0
- package/.next/standalone/.next/server/chunks/777.js +1 -0
- package/.next/standalone/.next/server/chunks/895.js +62 -0
- package/.next/standalone/.next/server/chunks/9.js +3 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/0-539cfb6a78b205f0.js +1 -0
- package/.next/standalone/.next/static/chunks/66-a23941cbbf88d6cd.js +1 -0
- package/.next/standalone/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/app/adrs/{page-881f748d299c703e.js → page-54954f500bc3e3c6.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/app/costs/page-737c89e70adff98b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-217e04f338b50a7e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/layout-f6048a8c9f541e0d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/needs-human/page-c047e3e842681979.js +1 -0
- package/.next/standalone/.next/static/chunks/app/page-382b7fef1f749214.js +1 -0
- package/.next/standalone/.next/static/chunks/app/prompts/page-9e32fb8f51e7873e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/repos/[id]/page-55b03bdcf107eefe.js +1 -0
- package/.next/standalone/.next/static/chunks/app/settings/page-5b2b8683fa6afdf4.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +1 -0
- package/.next/standalone/.next/static/css/64af283f7f467bc0.css +3 -0
- package/.next/standalone/.next/static/g7t6i0qpogjrDGpmNgFei/_buildManifest.js +1 -0
- package/.next/standalone/drizzle/0013_true_red_wolf.sql +1 -0
- package/.next/standalone/drizzle/0014_dry_medusa.sql +1 -0
- package/.next/standalone/drizzle/0015_dapper_ben_grimm.sql +1 -0
- package/.next/standalone/drizzle/0016_charming_natasha_romanoff.sql +14 -0
- package/.next/standalone/drizzle/0017_free_warbound.sql +1 -0
- package/.next/standalone/drizzle/0018_confused_franklin_storm.sql +1 -0
- package/.next/standalone/drizzle/0019_uneven_meggan.sql +22 -0
- package/.next/standalone/drizzle/0020_chunky_meggan.sql +1 -0
- package/.next/standalone/drizzle/meta/0013_snapshot.json +1487 -0
- package/.next/standalone/drizzle/meta/0014_snapshot.json +1494 -0
- package/.next/standalone/drizzle/meta/0015_snapshot.json +1502 -0
- package/.next/standalone/drizzle/meta/0016_snapshot.json +1600 -0
- package/.next/standalone/drizzle/meta/0017_snapshot.json +1607 -0
- package/.next/standalone/drizzle/meta/0018_snapshot.json +1614 -0
- package/.next/standalone/drizzle/meta/0019_snapshot.json +1773 -0
- package/.next/standalone/drizzle/meta/0020_snapshot.json +1780 -0
- package/.next/standalone/drizzle/meta/_journal.json +56 -0
- package/.next/standalone/package.json +1 -1
- package/.next/static/chunks/0-539cfb6a78b205f0.js +1 -0
- package/.next/static/chunks/66-a23941cbbf88d6cd.js +1 -0
- package/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/app/adrs/{page-881f748d299c703e.js → page-54954f500bc3e3c6.js} +1 -1
- package/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/app/costs/page-737c89e70adff98b.js +1 -0
- package/.next/static/chunks/app/jobs/[id]/page-217e04f338b50a7e.js +1 -0
- package/.next/static/chunks/app/layout-f6048a8c9f541e0d.js +1 -0
- package/.next/static/chunks/app/needs-human/page-c047e3e842681979.js +1 -0
- package/.next/static/chunks/app/page-382b7fef1f749214.js +1 -0
- package/.next/static/chunks/app/prompts/page-9e32fb8f51e7873e.js +1 -0
- package/.next/static/chunks/app/repos/[id]/page-55b03bdcf107eefe.js +1 -0
- package/.next/static/chunks/app/settings/page-5b2b8683fa6afdf4.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +1 -0
- package/.next/static/css/64af283f7f467bc0.css +3 -0
- package/.next/static/g7t6i0qpogjrDGpmNgFei/_buildManifest.js +1 -0
- package/README.md +25 -12
- package/bin/drydock.mjs +132 -7
- package/drizzle/0013_true_red_wolf.sql +1 -0
- package/drizzle/0014_dry_medusa.sql +1 -0
- package/drizzle/0015_dapper_ben_grimm.sql +1 -0
- package/drizzle/0016_charming_natasha_romanoff.sql +14 -0
- package/drizzle/0017_free_warbound.sql +1 -0
- package/drizzle/0018_confused_franklin_storm.sql +1 -0
- package/drizzle/0019_uneven_meggan.sql +22 -0
- package/drizzle/0020_chunky_meggan.sql +1 -0
- package/drizzle/meta/0013_snapshot.json +1487 -0
- package/drizzle/meta/0014_snapshot.json +1494 -0
- package/drizzle/meta/0015_snapshot.json +1502 -0
- package/drizzle/meta/0016_snapshot.json +1600 -0
- package/drizzle/meta/0017_snapshot.json +1607 -0
- package/drizzle/meta/0018_snapshot.json +1614 -0
- package/drizzle/meta/0019_snapshot.json +1773 -0
- package/drizzle/meta/0020_snapshot.json +1780 -0
- package/drizzle/meta/_journal.json +56 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/152.js +0 -8
- package/.next/standalone/.next/server/chunks/21.js +0 -1
- package/.next/standalone/.next/server/chunks/441.js +0 -1
- package/.next/standalone/.next/server/chunks/633.js +0 -1
- package/.next/standalone/.next/server/chunks/706.js +0 -8
- package/.next/standalone/.next/server/chunks/753.js +0 -1
- package/.next/standalone/.next/server/chunks/774.js +0 -62
- package/.next/standalone/.next/server/chunks/859.js +0 -1
- package/.next/standalone/.next/static/chunks/602-2da35213db585d76.js +0 -1
- package/.next/standalone/.next/static/chunks/66-2a5c080641376f3a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/_global-error/page-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/chunks/app/costs/page-7aeb8fd8816090f7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-23dddd5f27bc7c02.js +0 -1
- package/.next/standalone/.next/static/chunks/app/layout-6ad777543855c715.js +0 -1
- package/.next/standalone/.next/static/chunks/app/needs-human/page-abedbafec351380c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/page-ebe54ab85fbcf147.js +0 -1
- package/.next/standalone/.next/static/chunks/app/prompts/page-3b9006a4513a173a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/repos/[id]/page-16e031b6eab3ee05.js +0 -1
- package/.next/standalone/.next/static/chunks/app/settings/page-54d0967b6d9f734f.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-94dd6bc2d60a8443.js +0 -1
- package/.next/standalone/.next/static/css/b4ec7103106db91b.css +0 -3
- package/.next/standalone/.next/static/iEqTV0p0ZoW-sr0JEYokX/_buildManifest.js +0 -1
- package/.next/static/chunks/602-2da35213db585d76.js +0 -1
- package/.next/static/chunks/66-2a5c080641376f3a.js +0 -1
- package/.next/static/chunks/app/_global-error/page-94dd6bc2d60a8443.js +0 -1
- package/.next/static/chunks/app/api/sse/jobs/[id]/route-94dd6bc2d60a8443.js +0 -1
- package/.next/static/chunks/app/costs/page-7aeb8fd8816090f7.js +0 -1
- package/.next/static/chunks/app/jobs/[id]/page-23dddd5f27bc7c02.js +0 -1
- package/.next/static/chunks/app/layout-6ad777543855c715.js +0 -1
- package/.next/static/chunks/app/needs-human/page-abedbafec351380c.js +0 -1
- package/.next/static/chunks/app/page-ebe54ab85fbcf147.js +0 -1
- package/.next/static/chunks/app/prompts/page-3b9006a4513a173a.js +0 -1
- package/.next/static/chunks/app/repos/[id]/page-16e031b6eab3ee05.js +0 -1
- package/.next/static/chunks/app/settings/page-54d0967b6d9f734f.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-94dd6bc2d60a8443.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-94dd6bc2d60a8443.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-94dd6bc2d60a8443.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-94dd6bc2d60a8443.js +0 -1
- package/.next/static/css/b4ec7103106db91b.css +0 -3
- package/.next/static/iEqTV0p0ZoW-sr0JEYokX/_buildManifest.js +0 -1
- /package/.next/standalone/.next/static/{iEqTV0p0ZoW-sr0JEYokX → g7t6i0qpogjrDGpmNgFei}/_ssgManifest.js +0 -0
- /package/.next/static/{iEqTV0p0ZoW-sr0JEYokX → g7t6i0qpogjrDGpmNgFei}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";exports.id=39,exports.ids=[39],exports.modules={12717:(a,b,c)=>{c.d(b,{OE:()=>g,bR:()=>h,og:()=>f});let d=["core","graphql","search"];class e{constructor(a={}){this.resources=new Map,this.now=a.now??Date.now}observe(a,b){this.state(a).snapshot=b}note429(a,b){let c=void 0!==b?1e3*b:this.now()+6e4;this.state(a).limitedUntilMs=c}decide(a,b){let c=this.resources.get(a);if(!c)return{allowed:!0};let d=this.now();if(void 0!==c.limitedUntilMs&&d<c.limitedUntilMs)return{allowed:!1,reason:"limited",retryAfterMs:c.limitedUntilMs-d};let e=c.snapshot;if(!e||e.limit<=0)return{allowed:!0};let f=1e3*e.reset;if(d>=f)return{allowed:!0};let g=e.remaining/e.limit,h=f-d;return g<.05?{allowed:!1,reason:"floor",retryAfterMs:h}:"low"===b&&g<.3?{allowed:!1,reason:"reserve",retryAfterMs:h}:{allowed:!0}}snapshot(a){return this.resources.get(a)?.snapshot}state(a){let b=this.resources.get(a);return b||(b={},this.resources.set(a,b)),b}}let f=new e;class g extends Error{constructor(a,b,c){super(`github ${b} rate limit gated (${a}); retry in ~${Math.ceil(c/1e3)}s`),this.reason=a,this.resource=b,this.retryAfterMs=c,this.name="RateLimitError"}}function h(a){let b=Number(a["x-ratelimit-limit"]),c=Number(a["x-ratelimit-remaining"]),e=Number(a["x-ratelimit-reset"]);if(!Number.isFinite(b)||!Number.isFinite(c)||!Number.isFinite(e))return null;let f=a["x-ratelimit-resource"];return void 0===f?{resource:"core",snapshot:{remaining:c,limit:b,reset:e}}:d.includes(f)?{resource:f,snapshot:{remaining:c,limit:b,reset:e}}:null}},13459:(a,b,c)=>{c.d(b,{ts:()=>m,VK:()=>n,GX:()=>o});var d=c(37003),e=c(97337),f=c(68246),g=c(34775),h=c(90109),i=c(2937),j=c(68464),k=c(93929),l=c(50095);function m(a,b=(0,i.Lf)()){return b.select().from(k.issues).where((0,d.eq)(k.issues.repoId,a)).orderBy((0,e.Y)(k.issues.priority),(0,e.Y)(k.issues.number)).all()}function n(a,b,c=(0,i.Lf)()){var e;let j=c.select().from(k.issues).where((0,d.eq)(k.issues.repoId,a)).all(),l=new Map(j.map(a=>[a.number,a])),m=Math.floor(Date.now()/1e3),o=c.select({value:(e=k.issues.priority,(0,h.ll)`max(${e})`.mapWith((0,g.is)(e,f.V)?e:String))}).from(k.issues).where((0,d.eq)(k.issues.repoId,a)).get(),p=(o?.value??-1)+1,q=new Set;for(let e of b){q.add(e.number);let b=JSON.stringify(e.labels.map(a=>a.name)),f=l.get(e.number);f?c.update(k.issues).set({title:e.title,labels:b,state:"open",syncedAt:m}).where((0,d.eq)(k.issues.id,f.id)).run():c.insert(k.issues).values({repoId:a,number:e.number,title:e.title,labels:b,state:"open",priority:p++,syncedAt:m}).run()}let r=j.filter(a=>!q.has(a.number)).map(a=>a.id);r.length>0&&c.delete(k.issues).where((0,d.RV)(k.issues.id,r)).run()}async function o(a,b=(0,i.Lf)()){let c=function(a,b){let c=(0,j.L8)(a,b);if(!c)throw Error(`repo ${a} not found`);return c}(a,b);return n(a,await (0,l.Ie)(c).listAllIssues(),b),m(a,b)}},23601:(a,b,c)=>{c.d(b,{u:()=>f,v:()=>e});let d=new(c(16698)).AsyncLocalStorage;function e(a,b){return d.run(a,b)}function f(){return d.getStore()??"high"}},24525:(a,b,c)=>{c.d(b,{U9:()=>e,ej:()=>f});let d=new Set;function e(a){return d.add(a),()=>{d.delete(a)}}function f(){for(let a of[...d])try{a()}catch{}}},39889:(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}),d=await c.text();return{status:c.status,ok:c.ok,body:d}}},50095:(a,b,c)=>{c.d(b,{Ie:()=>D});var d=c(35895),e=c(71117);class f{get(a){return this.entries.get(a)}set(a,b,c){this.entries.set(a,{etag:b,body:c})}constructor(){this.entries=new Map}}let g=new f;var h=c(23601),i=c(12717);let j=d.Ik({number:d.ai(),title:d.Yj(),labels:d.YO(d.Ik({name:d.Yj()})).default([]),user:d.Ik({login:d.Yj()}).nullish(),author_association:d.Yj().nullish(),pull_request:d.L5().optional()}).transform(a=>({number:a.number,title:a.title,labels:a.labels,author:a.user?.login??null,authorAssociation:a.author_association??null,isPullRequest:void 0!==a.pull_request})),k=d.Ik({resources:d.g1(d.Yj(),d.Ik({limit:d.ai(),remaining:d.ai(),reset:d.ai()}))}),l=d.Ik({number:d.ai(),title:d.Yj(),body:d.Yj().default(""),state:d.Yj().default("open"),labels:d.YO(d.Ik({name:d.Yj()})).default([]),comments:d.YO(d.Ik({author:d.Ik({login:d.Yj()}).default({login:""}),body:d.Yj().default(""),createdAt:d.Yj().default("")})).default([])}),m=d.Ik({name:d.Yj(),state:d.Yj(),bucket:d.Yj().optional()}),n=d.Ik({data:d.Ik({repository:d.Ik({pullRequest:d.Ik({reviewThreads:d.Ik({nodes:d.YO(d.Ik({id:d.Yj(),isResolved:d.zM().default(!1),isOutdated:d.zM().default(!1),path:d.Yj().nullish(),line:d.ai().nullish(),comments:d.Ik({nodes:d.YO(d.Ik({id:d.Yj(),databaseId:d.ai().nullish(),body:d.Yj().default(""),author:d.Ik({login:d.Yj()}).nullish()}))})}))})}).nullish()})})});class o extends Error{}function p(a,b){return`${a}=${b}`}class q{constructor(a,b=e.S,c=i.og,d=g){this.cwd=a,this.run=b,this.governor=c,this.etags=d}gate(a="core"){let b=this.governor.decide(a,(0,h.u)());if(!b.allowed)throw new i.OE(b.reason,a,b.retryAfterMs)}async exec(a,b="core"){this.gate(b);let c=await this.run("gh",a,this.cwd);return 0!==c.exitCode&&/rate limit|429 too many/i.test(c.stderr)&&this.governor.note429(b),c}async refreshRateLimit(){let a,b=await this.run("gh",["api","rate_limit"],this.cwd);if(0===b.exitCode){try{a=k.parse(JSON.parse(b.stdout||"{}"))}catch{return}for(let b of["core","graphql","search"]){let c=a.resources[b];c&&this.governor.observe(b,c)}}}async conditionalList(a,b){let c;this.gate("core");let e=this.etags.get(a),f=["api",`repos/{owner}/{repo}/issues?${b}`,"--include"];e&&f.push("-H",`If-None-Match: ${e.etag}`);let g=await this.run("gh",f,this.cwd),h=function(a){let b=a.replace(/\r\n/g,"\n"),c=b.lastIndexOf("\nHTTP/"),d=c>=0?c+1:b.startsWith("HTTP/")?0:-1;if(d<0)return{status:null,headers:{},body:a};let e=b.slice(d),f=e.indexOf("\n\n"),g=f>=0?e.slice(0,f):e,h=f>=0?e.slice(f+2):"",i=g.split("\n"),j=(i.shift()??"").match(/^HTTP\/\S+\s+(\d+)/),k=j?Number(j[1]):null,l={};for(let a of i){let b=a.indexOf(":");b<=0||(l[a.slice(0,b).trim().toLowerCase()]=a.slice(b+1).trim())}return{status:k,headers:l,body:h}}(g.stdout),k=(0,i.bR)(h.headers);if(k&&this.governor.observe(k.resource,k.snapshot),304===h.status&&e)c=e.body;else{var l,m;if(l=h.status,m=h.headers,429===l||403===l&&"0"===m["x-ratelimit-remaining"]){let a=Number(h.headers["x-ratelimit-reset"]);throw this.governor.note429("core",Number.isFinite(a)?a:void 0),new o(`gh api rate limited (status ${h.status})`)}if(200===h.status){let b=h.headers.etag;b&&this.etags.set(a,b,h.body),c=h.body}else throw new o(g.stderr||`gh api failed (status ${h.status??"unknown"})`)}let n=d.YO(j).safeParse(JSON.parse(c||"[]"));if(!n.success)throw new o(`unexpected gh output: ${n.error.message}`);return n.data.filter(a=>!a.isPullRequest).map(({isPullRequest:a,...b})=>b)}async listIssues(a){let b=`state=open&per_page=100&labels=${encodeURIComponent(a)}`;return this.conditionalList(`${this.cwd}::label:${a}`,b)}async listAllIssues(){return this.conditionalList(`${this.cwd}::all`,"state=open&per_page=100")}async viewIssue(a){let b=await this.exec(["issue","view",String(a),"--json","number,title,body,state,labels,comments"]);if(0!==b.exitCode)throw new o(b.stderr||"gh issue view failed");let c=l.safeParse(JSON.parse(b.stdout||"{}"));if(!c.success)throw new o(`unexpected gh output: ${c.error.message}`);let d=c.data;return{number:d.number,title:d.title,body:d.body,state:d.state,labels:d.labels.map(a=>a.name),comments:d.comments.map(a=>({author:a.author.login,body:a.body,createdAt:a.createdAt}))}}async editIssue(a,b){let c=["issue","edit",String(a)];if(void 0!==b.title&&c.push(p("--title",b.title)),void 0!==b.body&&c.push(p("--body",b.body)),3===c.length)return;let d=await this.exec(c);if(0!==d.exitCode)throw new o(d.stderr||"gh issue edit failed")}async ensureLabel(a,b={}){let c=await this.exec(["label","list","--json","name","--limit","200"]),e=c.stdout.trim();if(0===c.exitCode&&e)try{let b=d.YO(d.Ik({name:d.Yj()})).safeParse(JSON.parse(e));if(b.success&&b.data.some(b=>b.name===a))return}catch{}let f=["label","create",a];b.color&&f.push("--color",b.color),b.description&&f.push("--description",b.description);let g=await this.exec(f);if(0!==g.exitCode&&!/already exists/i.test(g.stderr))throw new o(g.stderr||"gh label create failed")}async addLabels(a,b){let c=await this.exec(["issue","edit",String(a),p("--add-label",b.join(","))]);if(0!==c.exitCode)throw new o(c.stderr||"gh issue edit failed")}async removeLabels(a,b){let c=await this.exec(["issue","edit",String(a),p("--remove-label",b.join(","))]);if(0!==c.exitCode)throw new o(c.stderr||"gh issue edit failed")}async closeIssue(a){let b=await this.exec(["issue","close",String(a)]);if(0!==b.exitCode)throw new o(b.stderr||"gh issue close failed")}async reopenIssue(a){let b=await this.exec(["issue","reopen",String(a)]);if(0!==b.exitCode)throw new o(b.stderr||"gh issue reopen failed")}async prChecks(a){let b=await this.exec(["pr","checks",String(a),"--json","name,state,bucket"]),c=b.stdout.trim();if(!c){if(0!==b.exitCode)throw new o(b.stderr||"gh pr checks failed");return[]}let e=d.YO(m).safeParse(JSON.parse(c));if(!e.success)throw new o(`unexpected gh output: ${e.error.message}`);return e.data}async prHeadSha(a){let b=await this.exec(["pr","view",String(a),"--json","headRefOid"]);if(0!==b.exitCode)throw new o(b.stderr||"gh pr view failed");let c=d.Ik({headRefOid:d.Yj()}).safeParse(JSON.parse(b.stdout||"{}"));if(!c.success)throw new o(`unexpected gh output: ${c.error.message}`);return c.data.headRefOid}async commentIssue(a,b){let c=await this.exec(["issue","comment",String(a),p("--body",b)]);if(0!==c.exitCode)throw new o(c.stderr||"gh issue comment failed")}async createIssue(a,b){let c=await this.exec(["issue","create",p("--title",a),p("--body",b)]);if(0!==c.exitCode)throw new o(c.stderr||"gh issue create failed");let d=c.stdout.match(/\/issues\/(\d+)/);if(!d?.[1])throw new o(`could not parse issue number from: ${c.stdout}`);return Number(d[1])}async failedRunLog(a){let b,c;if(!this.governor.decide("core",(0,h.u)()).allowed)return"";let e=await this.run("gh",["pr","view",String(a),"--json","headRefName"],this.cwd);if(0!==e.exitCode)return"";try{b=d.Ik({headRefName:d.Yj()}).parse(JSON.parse(e.stdout||"{}")).headRefName}catch{return""}if(!b)return"";let f=await this.run("gh",["run","list","--branch",b,"--json","databaseId,conclusion","--limit","20"],this.cwd);if(0!==f.exitCode)return"";try{c=d.YO(d.Ik({databaseId:d.ai(),conclusion:d.Yj().default("")})).parse(JSON.parse(f.stdout||"[]"))}catch{return""}let g=c.find(a=>"failure"===a.conclusion);if(!g)return"";let i=await this.run("gh",["run","view",String(g.databaseId),"--log-failed"],this.cwd);return 0!==i.exitCode?"":i.stdout.slice(-8e3)}async prDiff(a){if(!this.governor.decide("core",(0,h.u)()).allowed)return"";let b=await this.run("gh",["pr","diff",String(a)],this.cwd);return 0!==b.exitCode?"":b.stdout}async mergePr(a){let b=await this.exec(["pr","merge",String(a),"--squash","--auto"]);if(0!==b.exitCode)throw new o(b.stderr||"gh pr merge failed")}async createPr(a){let b=await this.exec(["pr","create",p("--head",a.head),p("--base",a.base),p("--title",a.title),p("--body",a.body)]);if(0!==b.exitCode)throw new o(b.stderr||"gh pr create failed");let c=b.stdout.match(/\/pull\/(\d+)/);if(!c?.[1])throw new o(`could not parse PR number from: ${b.stdout}`);return Number(c[1])}async listReleases(){let a=await this.exec(["release","list","--json","tagName,createdAt","--limit","100"]);if(0!==a.exitCode)throw new o(a.stderr||"gh release list failed");let b=d.YO(d.Ik({tagName:d.Yj(),createdAt:d.Yj().default("")})).safeParse(JSON.parse(a.stdout||"[]"));if(!b.success)throw new o(`unexpected gh output: ${b.error.message}`);return b.data}async listMergedPrs(a=100){let b=await this.exec(["pr","list","--state","merged","--json","number,title,mergedAt,labels","--limit",String(a)]);if(0!==b.exitCode)throw new o(b.stderr||"gh pr list failed");let c=d.YO(d.Ik({number:d.ai(),title:d.Yj().default(""),mergedAt:d.Yj().default(""),labels:d.YO(d.Ik({name:d.Yj()})).default([])})).safeParse(JSON.parse(b.stdout||"[]"));if(!c.success)throw new o(`unexpected gh output: ${c.error.message}`);return c.data.map(a=>({number:a.number,title:a.title,mergedAt:a.mergedAt,labels:a.labels.map(a=>a.name)}))}async createRelease(a){let b=await this.exec(["release","create",a.tag,p("--title",a.title),p("--notes",a.notes),p("--target",a.target)]);if(0!==b.exitCode)throw new o(b.stderr||"gh release create failed")}async repoSlug(){if(this.slug)return this.slug;let a=await this.exec(["repo","view","--json","nameWithOwner"]);if(0!==a.exitCode)throw new o(a.stderr||"gh repo view failed");let b=d.Ik({nameWithOwner:d.Yj()}).safeParse(JSON.parse(a.stdout||"{}"));if(!b.success)throw new o(`unexpected gh output: ${b.error.message}`);let[c,e]=b.data.nameWithOwner.split("/");if(!c||!e)throw new o(`unexpected repo slug: ${b.data.nameWithOwner}`);return this.slug={owner:c,name:e},this.slug}async listReviewThreads(a){let{owner:b,name:c}=await this.repoSlug(),d=await this.exec(["api","graphql","-F",`owner=${b}`,"-F",`name=${c}`,"-F",`number=${a}`,"-f","query=query($owner:String!,$name:String!,$number:Int!){repository(owner:$owner,name:$name){pullRequest(number:$number){reviewThreads(first:100){nodes{id isResolved isOutdated path line comments(first:100){nodes{id databaseId body author{login}}}}}}}}"],"graphql");if(0!==d.exitCode)throw new o(d.stderr||"gh api graphql failed");let e=n.safeParse(JSON.parse(d.stdout||"{}"));if(!e.success)throw new o(`unexpected gh output: ${e.error.message}`);return(e.data.data.repository.pullRequest?.reviewThreads.nodes??[]).map(a=>({id:a.id,isResolved:a.isResolved,isOutdated:a.isOutdated,path:a.path??null,line:a.line??null,comments:a.comments.nodes.map(a=>({id:a.id,databaseId:a.databaseId??null,author:a.author?.login??"",body:a.body}))}))}async replyToReviewThread(a,b){let c=await this.exec(["api","graphql","-F",`threadId=${a}`,"-f",`body=${b}`,"-f","query=mutation($threadId:ID!,$body:String!){addPullRequestReviewThreadReply(input:{pullRequestReviewThreadId:$threadId,body:$body}){comment{id}}}"],"graphql");if(0!==c.exitCode)throw new o(c.stderr||"gh review reply failed")}async updateReviewComment(a,b){let c=await this.exec(["api","graphql","-F",`id=${a}`,"-f",`body=${b}`,"-f","query=mutation($id:ID!,$body:String!){updatePullRequestReviewComment(input:{pullRequestReviewCommentId:$id,body:$body}){pullRequestReviewComment{id}}}"],"graphql");if(0!==c.exitCode)throw new o(c.stderr||"gh update review comment failed")}async resolveReviewThread(a){let b=await this.exec(["api","graphql","-F",`threadId=${a}`,"-f","query=mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id isResolved}}}"],"graphql");if(0!==b.exitCode)throw new o(b.stderr||"gh resolve thread failed")}async reactToReviewComment(a,b){let c=await this.exec(["api","graphql","-F",`subjectId=${a}`,"-F",`content=${b}`,"-f","query=mutation($subjectId:ID!,$content:ReactionContent!){addReaction(input:{subjectId:$subjectId,content:$content}){reaction{content}}}"],"graphql");if(0!==c.exitCode&&!/already has this reaction/i.test(c.stderr))throw new o(c.stderr||"gh add reaction failed")}}var r=c(39889);class s extends Error{}let t=d.Ik({iid:d.ai(),title:d.Yj(),labels:d.YO(d.Yj()).default([]),author:d.Ik({username:d.Yj()}).nullish()}),u=d.Ik({iid:d.ai(),title:d.Yj(),description:d.Yj().nullable().default(""),state:d.Yj().default("opened"),labels:d.YO(d.Yj()).default([])}),v=d.Ik({author:d.Ik({username:d.Yj().default("")}).default({username:""}),body:d.Yj().default(""),created_at:d.Yj().default(""),system:d.zM().default(!1)}),w=d.Ik({id:d.ai().optional(),name:d.Yj().default(""),status:d.Yj().default("")}),x=d.Ik({id:d.ai()}),y=d.Ik({old_path:d.Yj().default(""),new_path:d.Yj().default(""),diff:d.Yj().default("")});class z{constructor(a,b={}){this.config=a,this.http=b.http??r.D,this.run=b.run??e.S}resolveProject(){return this.projectRef||(this.projectRef=(async()=>{let a=await this.run("git",["remote","get-url","origin"],this.config.cwd);if(0!==a.exitCode||!a.stdout.trim())throw new s(a.stderr||"could not resolve git remote 'origin'");let{host:b,path:c}=function(a){let b=a.trim().replace(/\.git$/,""),c=b.match(/^[\w.-]+@([^:]+):(.+)$/)??b.match(/^ssh:\/\/[^@]+@([^/]+)\/(.+)$/)??b.match(/^https?:\/\/([^/]+)\/(.+)$/);if(!c?.[1]||!c[2])throw new s(`unsupported git remote URL: ${a}`);return{host:c[1],path:c[2]}}(a.stdout);return{baseUrl:(this.config.baseUrl?.trim()||`https://${b}`).replace(/\/$/,""),encodedPath:encodeURIComponent(c)}})()),this.projectRef}async request(a,b,c={}){let d,{baseUrl:e,encodedPath:f}=await this.resolveProject(),g=`${e}/api/v4/projects/${f}${b}`;if(c.query){let a=new URLSearchParams(c.query).toString();a&&(g+=`?${a}`)}let h={};return this.config.token&&(h["PRIVATE-TOKEN"]=this.config.token),void 0!==c.body&&(h["Content-Type"]="application/json",d=JSON.stringify(c.body)),this.http(g,{method:a,headers:h,body:d})}async mutate(a,b,c={}){let d=await this.request(a,b,c);if(!d.ok)throw new s(C(d)||`GitLab ${a} ${b} failed`);return d}async listIssues(a){return A((await this.mutate("GET","/issues",{query:{state:"opened",labels:a,per_page:"100"}})).body)}async listAllIssues(){return A((await this.mutate("GET","/issues",{query:{state:"opened",per_page:"100"}})).body)}async viewIssue(a){let b=await this.mutate("GET",`/issues/${a}`),c=await this.mutate("GET",`/issues/${a}/notes`,{query:{per_page:"100"}}),e=u.parse(B(b.body,{})),f=d.YO(v).parse(B(c.body,[]));return{number:e.iid,title:e.title,body:e.description??"",state:"opened"===e.state?"open":e.state,labels:e.labels,comments:f.filter(a=>!a.system).map(a=>({author:a.author.username,body:a.body,createdAt:a.created_at}))}}async editIssue(a,b){let c={};void 0!==b.title&&(c.title=b.title),void 0!==b.body&&(c.description=b.body),0!==Object.keys(c).length&&await this.mutate("PUT",`/issues/${a}`,{body:c})}async ensureLabel(a,b={}){var c;let e=await this.request("GET","/labels",{query:{per_page:"100"}});if(e.ok){let b=d.YO(d.Ik({name:d.Yj()})).safeParse(B(e.body,[]));if(b.success&&b.data.some(b=>b.name===a))return}let f={name:a,color:(c=b.color??"#808080").startsWith("#")?c:`#${c}`};b.description&&(f.description=b.description);let g=await this.request("POST","/labels",{body:f});if(!g.ok&&409!==g.status&&!/already exists/i.test(g.body))throw new s(C(g)||"GitLab label create failed")}async addLabels(a,b){await this.mutate("PUT",`/issues/${a}`,{body:{add_labels:b.join(",")}})}async removeLabels(a,b){await this.mutate("PUT",`/issues/${a}`,{body:{remove_labels:b.join(",")}})}async closeIssue(a){await this.mutate("PUT",`/issues/${a}`,{body:{state_event:"close"}})}async reopenIssue(a){await this.mutate("PUT",`/issues/${a}`,{body:{state_event:"reopen"}})}async commentIssue(a,b){await this.mutate("POST",`/issues/${a}/notes`,{body:{body:b}})}async createIssue(a,b){let c=await this.mutate("POST","/issues",{body:{title:a,description:b}});return d.Ik({iid:d.ai()}).parse(B(c.body,{})).iid}async prChecks(a){let b=await this.latestPipelineId(a);if(null===b)return[];let c=await this.mutate("GET",`/pipelines/${b}/jobs`,{query:{per_page:"100"}});return d.YO(w).parse(B(c.body,[])).map(a=>({name:a.name,state:function(a){switch(a){case"success":return"SUCCESS";case"failed":return"FAILURE";case"canceled":case"cancelled":return"CANCELLED";case"running":return"IN_PROGRESS";case"pending":case"created":case"scheduled":case"preparing":case"waiting_for_resource":return"PENDING";case"manual":return"MANUAL";case"skipped":return"SKIPPED";default:return a.toUpperCase()}}(a.status)}))}async prHeadSha(a){let b=await this.mutate("GET",`/merge_requests/${a}`);return d.Ik({sha:d.Yj()}).parse(B(b.body,{})).sha}async failedRunLog(a){try{let b=await this.latestPipelineId(a);if(null===b)return"";let c=await this.request("GET",`/pipelines/${b}/jobs`,{query:{per_page:"100"}});if(!c.ok)return"";let e=d.YO(w).safeParse(B(c.body,[]));if(!e.success)return"";let f=e.data.find(a=>"failed"===a.status&&void 0!==a.id);if(!f)return"";let g=await this.request("GET",`/jobs/${f.id}/trace`);if(!g.ok)return"";return g.body.slice(-8e3)}catch{return""}}async prDiff(a){try{let b=await this.request("GET",`/merge_requests/${a}/diffs`,{query:{per_page:"100"}});if(!b.ok)return"";let c=d.YO(y).safeParse(B(b.body,[]));if(!c.success)return"";return c.data.map(a=>`--- a/${a.old_path}
|
|
2
|
+
+++ b/${a.new_path}
|
|
3
|
+
${a.diff}`).join("\n")}catch{return""}}async mergePr(a){await this.mutate("PUT",`/merge_requests/${a}/merge`,{body:{squash:!0,merge_when_pipeline_succeeds:!0}})}async createPr(a){let b=await this.mutate("POST","/merge_requests",{body:{source_branch:a.head,target_branch:a.base,title:a.title,description:a.body}});return d.Ik({iid:d.ai()}).parse(B(b.body,{})).iid}async latestPipelineId(a){let b=await this.request("GET",`/merge_requests/${a}/pipelines`);if(!b.ok)return null;let c=d.YO(x).safeParse(B(b.body,[])),e=c.success?c.data[0]:void 0;return e?e.id:null}}function A(a){let b=d.YO(t).safeParse(B(a,[]));if(!b.success)throw new s(`unexpected GitLab output: ${b.error.message}`);return b.data.map(a=>({number:a.iid,title:a.title,labels:a.labels.map(a=>({name:a})),author:a.author?.username??null,authorAssociation:null}))}function B(a,b){try{return JSON.parse(a||"null")??b}catch{return b}}function C(a){let b=d.Ik({message:d.L5(),error:d.L5()}).partial().safeParse(B(a.body,{}));if(b.success){let a=b.data.message??b.data.error;if("string"==typeof a)return a;if(a)return JSON.stringify(a)}return a.body.slice(0,300)}function D(a){var b;return"gitlab"===("github"===(b=a.platform)||"gitlab"===b?a.platform:"github")?new z({cwd:a.path,baseUrl:a.apiBaseUrl,token:a.apiToken}):new q({cwd:a.path}.cwd,void 0)}},51026:(a,b,c)=>{c.d(b,{Bt:()=>m,OM:()=>l,YA:()=>k,i_:()=>j});var d=c(90109),e=c(37003),f=c(97337),g=c(2937),h=c(93929);let i=a=>void 0===a?void 0:(0,d.ll)`${h.jobs.repoId} = ${a}`;function j(a=(0,g.Lf)(),b){return a.select({day:(0,d.ll)`strftime('%Y-%m-%d', ${h.jobs.startedAt}, 'unixepoch')`,inputTokens:(0,d.ll)`coalesce(sum(${h.jobs.totalInputTokens}), 0)`,outputTokens:(0,d.ll)`coalesce(sum(${h.jobs.totalOutputTokens}), 0)`,costUsd:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where((0,e.Uo)((0,d.ll)`${h.jobs.startedAt} is not null`,i(b))).groupBy((0,d.ll)`1`).orderBy((0,d.ll)`1 desc`).all()}function k(a=(0,g.Lf)(),b){return a.select({model:(0,d.ll)`coalesce(${h.jobs.model}, 'unknown')`,costUsd:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where(i(b)).groupBy(h.jobs.model).all()}function l(a=10,b=(0,g.Lf)(),c){return b.select().from(h.jobs).where(i(c)).orderBy((0,f.i)(h.jobs.costUsd)).limit(a).all()}function m(a=(0,g.Lf)(),b){let c=(0,d.ll)`strftime('%Y-%m-%d', ${h.jobs.startedAt}, 'unixepoch') = strftime('%Y-%m-%d', 'now')`,f=a.select({total:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where((0,e.Uo)(c,i(b))).get();return f?.total??0}},68464:(a,b,c)=>{c.d(b,{L8:()=>j,m:()=>m,uP:()=>i,zC:()=>p,zy:()=>k});var d=c(97337),e=c(37003),f=c(2937),g=c(51026),h=c(93929);function i(a=(0,f.Lf)()){return a.select().from(h.repos).orderBy((0,d.i)(h.repos.createdAt)).all()}function j(a,b=(0,f.Lf)()){return b.select().from(h.repos).where((0,e.eq)(h.repos.id,a)).get()}function k(a=(0,f.Lf)()){return a.select().from(h.jobs).innerJoin(h.repos,(0,e.eq)(h.jobs.repoId,h.repos.id)).where((0,e.eq)(h.jobs.status,"needs_human")).orderBy((0,d.i)(h.jobs.finishedAt)).all().map(a=>({...a.jobs,repoName:a.repos.name}))}let l=["queued","working","ci_running","retrying"];function m(a,b=(0,f.Lf)()){let c=j(a,b);if(!c)return;let g=b.select().from(h.issues).where((0,e.eq)(h.issues.repoId,a)).orderBy((0,d.Y)(h.issues.priority),(0,d.Y)(h.issues.number)).all(),i=b.select().from(h.jobs).where((0,e.eq)(h.jobs.repoId,a)).orderBy((0,d.i)(h.jobs.createdAt)).all();return{repo:c,issues:g,activeJob:i.find(a=>l.includes(a.status)),recentJobs:i.slice(0,8)}}let n=["working","ci_running","retrying"];function o(a){return a.finishedAt??a.startedAt??a.createdAt}function p(a=(0,f.Lf)()){let b=i(a).map(b=>{let c=a.select().from(h.jobs).where((0,e.eq)(h.jobs.repoId,b.id)).orderBy((0,d.Y)(h.jobs.createdAt)).all(),f=a=>c.filter(b=>a.includes(b.status)).length,i=c.filter(a=>n.includes(a.status)).map(a=>({id:a.id,issueNumber:a.issueNumber,status:a.status})),j=c.length?Math.max(...c.map(o)):null,k=f(["needs_human"]),l=f(["ci_failed"]);return{id:b.id,name:b.name,path:b.path,platform:b.platform,queued:f(["queued"]),working:f(["working","retrying"]),ciRunning:f(["ci_running"]),needsHuman:k,inFlight:i,lastActivityAt:j,todaySpend:(0,g.Bt)(a,b.id),attention:k>0||l>0}});return b.sort((a,b)=>{if(a.attention!==b.attention)return a.attention?-1:1;let c=a.inFlight.length>0;if(c!==b.inFlight.length>0)return c?-1:1;let d=a.lastActivityAt??0,e=b.lastActivityAt??0;return d!==e?e-d:a.name.localeCompare(b.name)}),{summary:function(a=(0,f.Lf)()){let b=a.select().from(h.jobs).all(),c=a=>b.filter(b=>a.includes(b.status)).length;return{repos:a.select().from(h.repos).all().length,queued:c(["queued"]),running:c(["working","ci_running","retrying"]),merged:c(["merged"]),needsHuman:c(["needs_human"]),spendToday:(0,g.Bt)(a)}}(a),repos:b}}},71117:(a,b,c)=>{c.d(b,{S:()=>e});var d=c(31421);let e=(a,b,c,e)=>new Promise((f,g)=>{let h=(0,d.spawn)(a,b,{cwd:c,env:process.env}),i="",j="",k=!1,l=e?.timeoutMs??3e5,m=setTimeout(()=>{k=!0,h.kill("SIGKILL")},l);m.unref?.(),h.stdout.on("data",a=>{i+=a.toString()}),h.stderr.on("data",a=>{j+=a.toString()}),h.on("error",a=>{clearTimeout(m),g(a)}),h.on("close",b=>{(clearTimeout(m),k)?g(Error(`\`${a}\` timed out after ${l}ms`)):f({stdout:i,stderr:j,exitCode:b??0})})})}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=447,exports.ids=[447],exports.modules={26424:(a,b,c)=>{c.d(b,{WE:()=>d,cp:()=>i,o:()=>h,sw:()=>e});let d=2;function e(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)}let f=/^\s*[-*]\s*\[[ xX]\]\s+(.+?)\s*$/,g=/^\s*#*\s*(Bug\s+\d+\s*(?:[—:-])\s*.+?)\s*$/;async function h(a,b={}){let c=function(a){let b=function(a){let b=[];for(let c of a.split("\n")){let a=c.match(f);a?.[1]&&b.push(a[1].trim())}return b}(a);if(b.length>=d)return b;let c=function(a){let b=[];for(let c of a.split("\n")){let a=c.match(g);a?.[1]&&b.push(a[1].trim())}return b}(a);return c.length>=d?c:[]}(a.body);if(c.length>=d)return{titles:c,source:"heuristic"};if(b.generate)try{let c=(await b.generate(a)).map(a=>a.trim()).filter(Boolean);if(c.length>=d)return{titles:c,source:"agent"}}catch(b){console.error(`[decompose] agent fallback failed for issue #${a.number}`,b)}return{titles:[],source:"none"}}function i(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")}},35078:(a,b,c)=>{c.d(b,{st:()=>q,Dl:()=>r,NF:()=>s});var d=c(51455),e=c(48161),f=c(76760),g=c(55710),h=c(68434),i=c(22579);let j=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function k(a){let b=j.exec(a.trim());return b?{major:Number(b[1]),minor:Number(b[2]),patch:Number(b[3]),prerelease:b[4]??null}:null}function l(a,b){return`v${function(a,b){let c=k(a);if(!c)throw Error(`cannot bump unparseable version: "${a}"`);let{major:d,minor:e,patch:f}=c;return"major"===b?`${d+1}.0.0`:"minor"===b?`${d}.${e+1}.0`:`${d}.${e}.${f+1}`}(a??"0.0.0",b)}`}function m(a){return 0===a.length?"No changes since the last release.":a.map(a=>`- #${a.number} ${a.title}`).join("\n")}let n=i.Ik({release:i.zM(),bump:i.k5(["patch","minor","major"]),title:i.Yj().default(""),notes:i.Yj().default("")});var o=c(77173);async function p(a){var b;let c,d=await a.listReleases(),e=function(a){let b=null;for(let c of a)k(c)&&(null===b||function(a,b){var c,d;let e=k(a),f=k(b);if(!e||!f)throw Error(`cannot compare versions: "${a}" vs "${b}"`);return e.major!==f.major?e.major-f.major:e.minor!==f.minor?e.minor-f.minor:e.patch!==f.patch?e.patch-f.patch:(c=e.prerelease,c===(d=f.prerelease)?0:null===c?1:null===d||c<d?-1:1)}(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 q(a){let{fromTag:b,prs:c}=await p(a.forge),d=await a.generate({fromTag:b,prs:c}),e=d?.bump??"patch",f=l(b,e);return{fromTag:b,candidateTag:f,bump:e,shouldRelease:d?.release??!1,title:d?.title?.trim()||f,notes:d?.notes?.trim()||m(c),prs:c}}async function r(a,b){let c=b.db??(0,g.Lf)(),d=(0,o.tm)(a,c);if(!d)throw Error(`release run ${a} not found`);let e=d.mode;(0,o.Cq)(a,"evaluating",{},c);try{var f,h,i;let g,j,{fromTag:k,releases:n,prs:q}=await p(b.forge),r=await b.generate({fromTag:k,prs:q});if("auto"===e&&!r)return(0,o.Cq)(a,"error",{errorMessage:"release evaluation failed"},c);if("auto"===e&&r&&!r.release)return(0,o.Cq)(a,"skipped",{fromTag:k},c);let s=(f=e,h=r,i=q,g="manual"===f?"patch":h?.bump??"patch",j=h?.title?.trim()??"",{bump:g,title:j,notes:h?.notes?.trim()||m(i)}),t=d.tag??l(k,s.bump);if((0,o.Cq)(a,"proposed",{bump:s.bump,fromTag:k,tag:t,title:s.title||t,notes:s.notes,prNumbers:q.map(a=>a.number)},c),n.some(a=>a.tagName===t))return(0,o.Cq)(a,"publishing",{},c),(0,o.Cq)(a,"published",{},c);return(0,o.Cq)(a,"publishing",{},c),await b.forge.createRelease({tag:t,title:s.title||t,notes:s.notes,target:b.repo.defaultBranch}),(0,o.Cq)(a,"published",{},c)}catch(f){let b=f instanceof Error?f.message:String(f),d=(0,o.tm)(a,c),e=d?.status??"evaluating";if("evaluating"===e||"proposed"===e||"publishing"===e)return(0,o.Cq)(a,"error",{errorMessage:b.slice(0,500)},c);return(0,o.tm)(a,c)}}async function s(a,b){let c=await (0,d.mkdtemp)((0,f.join)((0,e.tmpdir)(),"drydock-release-"));try{var g;let d,e,f=(d=(g={provider:a.provider,command:a.command,model:a.model,cwd:c,runner:a.runner}).runner??h.S,e=g.timeoutMs??18e4,async a=>{let b,c,f=g.provider.buildOneShotArgs({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")),model:g.model});try{let a=await d(g.command,f,g.cwd,{timeoutMs:e});if(0!==a.exitCode)return null;return function(a){let b,c=a.match(/\{[\s\S]*\}/);if(!c)return null;try{b=JSON.parse(c[0])}catch{return null}let d=n.safeParse(b);return d.success?d.data:null}(a.stdout)}catch{return null}});return await b(f)}finally{try{await (0,d.rm)(c,{recursive:!0,force:!0})}catch{}}}},37567:(a,b,c)=>{c.d(b,{Y:()=>e,v:()=>d});let d=4e3;function e(a){let b=a?.trim();return b?["\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",b.slice(0,d)].join("\n"):""}},38529:(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,autoResolveMergeConflicts:a.autoResolveMergeConflicts,includeProgressReplies:a.includeProgressReplies,autoDecompose:a.autoDecompose,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),ignoredBots:e(a.ignoredBots),minAuthorAssociation:"any"===a.minAuthorAssociation?"any":"approved",maxAttempts:a.maxAttempts}}function g(a,b){return"any"===a.minAuthorAssociation||null!=b&&d.has(b.toUpperCase())}},71218:(a,b,c)=>{c.d(b,{dv:()=>m,t0:()=>k,ZY:()=>l});var d=c(54452),e=c(74366),f=c(55710),g=c(84654);let h={pending:["in_progress","skipped","deferred"],in_progress:["done","skipped","deferred"],deferred:["pending","in_progress","skipped"],done:[],skipped:[]};class i extends Error{constructor(a,b){super(`invalid subtask transition: ${a} -> ${b}`)}}var j=c(26424);function k(a,b,c=(0,f.Lf)()){return c.select().from(g.issueSubtasks).where((0,d.Uo)((0,d.eq)(g.issueSubtasks.repoId,a),(0,d.eq)(g.issueSubtasks.issueNumber,b))).orderBy((0,e.Y)(g.issueSubtasks.ordinal)).all()}function l(a,b,c=(0,f.Lf)()){let e=c.select().from(g.issueSubtasks).where((0,d.eq)(g.issueSubtasks.id,a)).get();if(!e)throw Error(`subtask ${a} not found`);var j=e.status;if(!h[j].includes(b))throw new i(j,b);return c.update(g.issueSubtasks).set({status:b}).where((0,d.eq)(g.issueSubtasks.id,a)).returning().get()}async function m(a,b,c=(0,f.Lf)(),h={}){var i,l,n,o;let p=(0,j.sw)(b.body);if(i=a.id,l=b.number,c.select({h:g.issues.decomposedHash}).from(g.issues).where((0,d.Uo)((0,d.eq)(g.issues.repoId,i),(0,d.eq)(g.issues.number,l))).get()?.h===p)return{subtasks:k(a.id,b.number,c),source:"none",skipped:!0};let{titles:q,source:r}=await (0,j.o)(b,{generate:h.generate}),s=function(a,b,c,h,i=(0,f.Lf)()){return i.transaction(f=>(f.delete(g.issueSubtasks).where((0,d.Uo)((0,d.eq)(g.issueSubtasks.repoId,a),(0,d.eq)(g.issueSubtasks.issueNumber,b))).run(),c.forEach((c,d)=>{f.insert(g.issueSubtasks).values({repoId:a,issueNumber:b,ordinal:d,title:c,bodyHash:h}).run()}),f.select().from(g.issueSubtasks).where((0,d.Uo)((0,d.eq)(g.issueSubtasks.repoId,a),(0,d.eq)(g.issueSubtasks.issueNumber,b))).orderBy((0,e.Y)(g.issueSubtasks.ordinal)).all()))}(a.id,b.number,q,p,c);return n=a.id,o=b.number,c.update(g.issues).set({decomposedHash:p}).where((0,d.Uo)((0,d.eq)(g.issues.repoId,n),(0,d.eq)(g.issues.number,o))).run(),{subtasks:s,source:r,skipped:!1}}},77173:(a,b,c)=>{c.d(b,{v0:()=>j,tm:()=>k,Dn:()=>m,Cq:()=>l});var d=c(54452),e=c(74366),f=c(55710),g=c(84654);let h={detected:["evaluating","error"],evaluating:["proposed","skipped","error"],proposed:["publishing","skipped","error"],publishing:["published","error"],published:[],skipped:[],error:["evaluating"]};class i extends Error{constructor(a,b){super(`invalid release transition: ${a} -> ${b}`)}}function j(a,b=(0,f.Lf)()){let c=a.triggerSha??null;if(null!==c){let e=b.select().from(g.releaseRuns).where((0,d.Uo)((0,d.eq)(g.releaseRuns.repoId,a.repoId),(0,d.eq)(g.releaseRuns.triggerSha,c))).get();if(e)return e}return b.insert(g.releaseRuns).values({repoId:a.repoId,mode:a.mode,triggerPrNumber:a.triggerPrNumber??null,triggerSha:c}).returning().get()}function k(a,b=(0,f.Lf)()){return b.select().from(g.releaseRuns).where((0,d.eq)(g.releaseRuns.id,a)).get()}function l(a,b,c={},e=(0,f.Lf)()){let j=k(a,e);if(!j)throw Error(`release run ${a} not found`);var m=j.status;if(!h[m].includes(b))throw new i(m,b);let{prNumbers:n,...o}=c;return e.update(g.releaseRuns).set({status:b,updatedAt:Math.floor(Date.now()/1e3),...o,...void 0!==n?{prNumbers:JSON.stringify(n)}:{}}).where((0,d.eq)(g.releaseRuns.id,a)).returning().get()}function m(a,b=(0,f.Lf)(),c=10){return b.select().from(g.releaseRuns).where((0,d.eq)(g.releaseRuns.repoId,a)).orderBy((0,e.i)(g.releaseRuns.updatedAt),(0,e.i)(g.releaseRuns.id)).limit(c).all().map(a=>({id:a.id,mode:a.mode,status:a.status,triggerPrNumber:a.triggerPrNumber,fromTag:a.fromTag,tag:a.tag,title:a.title,prNumbers:function(a){try{let b=JSON.parse(a);return Array.isArray(b)?b.filter(a=>"number"==typeof a):[]}catch{return[]}}(a.prNumbers),errorMessage:a.errorMessage,updatedAt:a.updatedAt}))}}};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";exports.id=507,exports.ids=[507],exports.modules={526:(a,b,c)=>{c.d(b,{OX:()=>m,Nx:()=>p});var d=c(54452),e=c(55710),f=c(84654);let g=["resolved","failed","rejected","flagged"],h={pending:["queued","rejected","flagged"],queued:["in_progress","flagged","rejected"],in_progress:["resolved","failed","flagged","queued"],resolved:[],failed:[],rejected:[],flagged:[]};class i extends Error{constructor(a,b){super(`invalid feedback transition: ${a} -> ${b}`)}}let j=/\b(out of scope|follow[- ]?up|separate pr|different pr|unrelated|won'?t fix|nevermind|never mind|ignore this)\b/i,k=/\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 l(a,b,c={},g=(0,e.Lf)()){let j=g.select().from(f.reviewFeedbackItems).where((0,d.eq)(f.reviewFeedbackItems.id,a)).get();if(!j)throw Error(`review feedback item ${a} not found`);var k=j.status;if(!h[k].includes(b))throw new i(k,b);return g.update(f.reviewFeedbackItems).set({status:b,detail:c.detail??j.detail,attempts:"in_progress"===b?j.attempts+1:j.attempts,updatedAt:Math.floor(Date.now()/1e3)}).where((0,d.eq)(f.reviewFeedbackItems.id,a)).returning().get()}function m(a,b=(0,e.Lf)()){return b.select().from(f.reviewFeedbackItems).where((0,d.eq)(f.reviewFeedbackItems.jobId,a)).all()}let n={maxItemsPerSweep:3,maxAttemptsPerItem:2};async function o(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 p(a,b,c){let h=c.db??(0,e.Lf)(),i=c.budgets??n,m={processed:0,resolved:0,flagged:0,rejected:0,failed:0,skipped:0},p=await c.forge.listReviewThreads(b),q=0;for(let n of p){var r;if(n.isResolved){m.skipped++;continue}let p=n.comments[0];if(!p||!function(a,b){let c=a.toLowerCase();return!(c.endsWith("[bot]")||b.ignoredBots.some(a=>a.toLowerCase()===c))&&b.trustedReviewers.some(a=>a.toLowerCase()===c)}(p.author,c.gate)){m.skipped++;continue}let s=function(a){let b=a.trim();return j.test(b)?"out_of_scope":k.test(b)?"actionable":b.includes("?")?"question":"actionable"}(p.body),t=function(a,b=(0,e.Lf)()){let c=function(a,b,c=(0,e.Lf)()){return c.select().from(f.reviewFeedbackItems).where((0,d.Uo)((0,d.eq)(f.reviewFeedbackItems.jobId,a),(0,d.eq)(f.reviewFeedbackItems.threadId,b))).get()}(a.jobId,a.threadId,b);return c||b.insert(f.reviewFeedbackItems).values({jobId:a.jobId,prNumber:a.prNumber,threadId:a.threadId,reviewer:a.reviewer,classification:a.classification}).returning().get()}({jobId:a,prNumber:b,threadId:n.id,reviewer:p.author,classification:s},h);if(r=t.status,g.includes(r)){m.skipped++;continue}if("pending"===t.status)try{await c.forge.reactToReviewComment(p.id,"EYES")}catch{}if("pending"===t.status){if("question"===s){t=l(t.id,"flagged",{},h),await o(c.forge,n,"Drydock: this looks like a question rather than a change request, so it's flagged for a human reviewer."),m.flagged++,m.processed++;continue}if("out_of_scope"===s){t=l(t.id,"rejected",{},h),await o(c.forge,n,"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(n.id),m.rejected++,m.processed++;continue}t=l(t.id,"queued",{},h)}if("queued"===t.status){if(q>=i.maxItemsPerSweep)continue;if(t.attempts>=i.maxAttemptsPerItem){t=l(t.id,"flagged",{},h),await o(c.forge,n,`Drydock: could not resolve this after ${t.attempts} attempt(s); flagging for a human.`),m.flagged++,m.processed++;continue}q++,t=l(t.id,"in_progress",{},h),c.includeProgressReplies&&await o(c.forge,n,"Drydock: working on this now…");let a=await c.applyFeedback(t,n);m.processed++,a.ok?(l(t.id,"resolved",{detail:a.detail},h),await o(c.forge,n,"Drydock: applied this change and pushed a commit. ✅"),await c.forge.resolveReviewThread(n.id),m.resolved++):t.attempts>=i.maxAttemptsPerItem?(l(t.id,"failed",{detail:a.detail},h),await o(c.forge,n,`Drydock: could not apply this automatically (${a.detail??"no change produced"}); flagging for a human.`),m.failed++):l(t.id,"queued",{detail:a.detail},h)}}return m}},2373:(a,b,c)=>{c.d(b,{Pe:()=>g,eT:()=>h});var d=c(54452),e=c(55710),f=c(84654);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,b,c=(0,e.Lf)()){let g=c.update(f.adrs).set({status:b}).where((0,d.eq)(f.adrs.id,a)).returning().get();if(!g)throw Error(`adr ${a} not found`);return g}},34321:(a,b,c)=>{c.d(b,{F1:()=>m,yO:()=>o,Xm:()=>k,yx:()=>n,AI:()=>p});var d=c(54452),e=c(74366),f=c(22579),g=c(55710),h=c(84654),i=c(53944);let j=["$ISSUE_NUM","$BRANCH","$REPO_NAME","$CI_LOG"];function k(a,b){let c={$ISSUE_NUM:void 0!==b.ISSUE_NUM?String(b.ISSUE_NUM):"$ISSUE_NUM",$BRANCH:b.BRANCH??"$BRANCH",$REPO_NAME:b.REPO_NAME??"$REPO_NAME",$CI_LOG:b.CI_LOG??"$CI_LOG"},d=a;for(let a of[...j].sort((a,b)=>b.length-a.length))d=d.split(a).join(c[a]??a);return d}let l=f.Ik({repoId:f.ai().int().positive(),name:f.Yj().min(1),content:f.Yj()});function m(a,b,c=(0,g.Lf)()){return c.select().from(h.promptTemplates).where((0,d.Uo)((0,d.eq)(h.promptTemplates.repoId,a),(0,d.eq)(h.promptTemplates.name,b))).orderBy((0,e.i)(h.promptTemplates.version)).get()}function n(a,b,c=(0,g.Lf)()){return m(a,b,c)?.content??i.E[b]??""}function o(a,b,c=(0,g.Lf)()){return c.select().from(h.promptTemplates).where((0,d.Uo)((0,d.eq)(h.promptTemplates.repoId,a),(0,d.eq)(h.promptTemplates.name,b))).orderBy((0,e.i)(h.promptTemplates.version)).all()}function p(a,b=(0,g.Lf)()){let c=l.parse(a),e=m(c.repoId,c.name,b),f=(e?.version??0)+1,i=b.insert(h.promptTemplates).values({repoId:c.repoId,name:c.name,content:c.content,version:f,updatedAt:Math.floor(Date.now()/1e3)}).returning().get();for(let a of o(c.repoId,c.name,b).slice(20))b.delete(h.promptTemplates).where((0,d.eq)(h.promptTemplates.id,a.id)).run();return i}},39829:(a,b,c)=>{c.d(b,{T9:()=>g});var d=c(17283),e=c(6384),f=c(94448);function g(a){return(0,f.ll)`max(${a})`.mapWith((0,e.is)(a,d.V)?a:String)}},53944:(a,b,c)=>{c.d(b,{E:()=>e,_:()=>d});let d={main:"default",ciFix:"ci-fix"},e={default:'You are working on GitHub issue #$ISSUE_NUM in the repository "$REPO_NAME".\nYou are on branch "$BRANCH". Implement the change the issue asks for.\nKeep the change focused and commit-ready. Do not push or open a PR yourself.',"ci-fix":"CI failed. Fix the failure and keep changes minimal.\n\nFailed CI log:\n$CI_LOG"}},61195:(a,b,c)=>{let d,e,f;c.r(b),c.d(b,{clearAbort:()=>bu,gracefulShutdown:()=>bv,registerAbort:()=>bt,startOrchestrator:()=>bw});var g=c(54452),h=c(55710),i=c(94448),j=c(51605),k=c(84654),l=c(96684),m=c(15629),n=c(77598),o=c(48161),p=c(66952);let q=()=>Math.floor(Date.now()/1e3);function r(){return d||(d=`${(0,o.hostname)()}#${process.pid}`),d}let s=["ci_running","ci_failed","retrying"];var t=c(35743),u=c(40129),v=c(89508),w=c(57846),x=c(20210);let y=["blocked","wontfix","question","needs-human","needs-discussion"],z=[{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 A(a){let b=[],c=a.labels.map(a=>a.toLowerCase()).find(a=>y.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 z)c.test(d)&&b.push(`${a} detected`);return b.length>0?{decision:"needs_review",reasons:b}:{decision:"approved",reasons:[]}}var B=c(69914),C=c(38529);let D=[{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 E(a,b,c,d){d.update(k.issues).set({triageHash:c,triagedAt:Math.floor(Date.now()/1e3)}).where((0,g.Uo)((0,g.eq)(k.issues.repoId,a),(0,g.eq)(k.issues.number,b))).run()}async function F(a,b,c,d=(0,h.Lf)()){let e=(0,C.A)(a),f=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(k.issues).where((0,g.Uo)((0,g.eq)(k.issues.repoId,a.id),(0,g.eq)(k.issues.number,c.number))).get();if(i?.triagedAt&&i.triageHash===f)return{number:c.number,applied:[],reasons:[],skipped:"unchanged"};if(!(0,C.i)(e,c.authorAssociation))return E(a.id,c.number,f,d),{number:c.number,applied:[],reasons:["author not approved"],skipped:"author"};let j=await b.viewIssue(c.number),l=A({number:j.number,title:j.title,body:j.body,labels:j.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 D)c.has(a)&&b.test(d)&&!e.includes(a)&&e.push(a);return e}(j,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]),p=new Set(j.labels),q=[...new Set(n)].filter(a=>o.has(a)&&!p.has(a));if(q.length>0){for(let a of q)await b.ensureLabel(a);await b.addLabels(c.number,q);let e=q.map(a=>`\`${a}\``).join(", ");await b.commentIssue(c.number,`auto-triage: applied ${e} — reasons: ${m.join("; ")}.`),function(a,b,c,d){let e,f=d.select().from(k.issues).where((0,g.Uo)((0,g.eq)(k.issues.repoId,a),(0,g.eq)(k.issues.number,b))).get();if(!f)return;try{let a=JSON.parse(f.labels);e=Array.isArray(a)?a:[]}catch{e=[]}let h=[...e];for(let a of c)h.includes(a)||h.push(a);d.update(k.issues).set({labels:JSON.stringify(h)}).where((0,g.eq)(k.issues.id,f.id)).run()}(a.id,c.number,q,d)}return E(a.id,c.number,f,d),{number:c.number,applied:q,reasons:m}}async function G(a,b,c,d=(0,h.Lf)()){let e=[];for(let f of c)try{e.push(await F(a,b,f,d))}catch(b){console.error(`[triage] issue #${f.number} failed for ${a.name}`,b)}return e}var H=c(36212),I=c(68434),J=c(76760);function K(){return process.env.DRYDOCK_HOME??(0,J.join)((0,o.homedir)(),".drydock")}function L(a){return a.replace(/[^a-zA-Z0-9._-]/g,"-")}function M(a){return(0,J.join)(K(),"worktrees",L(a))}class N extends Error{}class O extends N{constructor(){super("nothing to commit")}}class P{constructor(a=I.S){this.run=a,this.locks=new Map}withRepoLock(a,b){let c=(this.locks.get(a)??Promise.resolve()).then(b,b);return this.locks.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 N(c.stderr.trim()||`git ${a[0]} failed`);return c.stdout}async prepare(a,b,c=0){let d=`drydock/issue-${c}-job-${b}`,e=(0,J.join)(M(a.name),`job-${b}`);return await this.withRepoLock(a.path,()=>this.git(["-C",a.path,"worktree","add","-b",d,e,a.defaultBranch])),{path:e,branch:d}}async prepareForBranch(a,b,c){let d=(0,J.join)(M(a.name),`fb-${L(c)}`);return 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])}),{path:d,branch:b}}async prepareForNewBranch(a,b,c){let d=(0,J.join)(M(a.name),`dh-${L(c)}`);return await this.withRepoLock(a.path,()=>this.git(["-C",a.path,"worktree","add","-b",b,d,a.defaultBranch])),{path:d,branch:b}}async commitAndPush(a,b){if(await this.git(["add","-A"],a.path),""===(await this.git(["status","--porcelain"],a.path)).trim())throw new O;await this.git(["commit","-m",b],a.path),await this.git(["push","-u","origin",a.branch],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"])})}}var Q=c(31421);let R=(a,b,c,d)=>{let e=(0,Q.spawn)(a,b,{cwd:c,env:process.env});return e.stdout?.setEncoding("utf8"),e.stderr?.setEncoding("utf8"),e.stdout?.on("data",a=>d.onStdout(a)),e.stderr?.on("data",a=>d.onStderr?.(a)),{done:new Promise(a=>{e.on("close",b=>a(b??0)),e.on("error",()=>a(1))}),abort:(a=5e3)=>{e.kill("SIGTERM");let b=setTimeout(()=>e.kill("SIGKILL"),a);e.on("close",()=>clearTimeout(b))}}};var S=c(53944),T=c(34321),U=c(63480);class V{constructor(a=(0,h.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=(0,U.f)(JSON.stringify(b.payload??{})),d=JSON.parse(c),e=this.db.insert(k.jobEvents).values({jobId:a,type:b.type,payload:c}).returning().get(),f=this.subs.get(a);if(f)for(let a of f)a.send({id:e.id,type:e.type,payload:d});return e}replay(a,b=200){return this.db.select().from(k.jobEvents).where((0,g.eq)(k.jobEvents.jobId,a)).orderBy(k.jobEvents.ts,k.jobEvents.id).all().slice(-b)}}function W(){return e||(e=new V),e}function X(a,b){let c=()=>{},d=!1;return{tripped:new Promise(a=>{c=a}),observe(){!d&&b()>=a&&(d=!0,c())}}}function Y(a,b={}){let{timeoutMs:c,costTripped:d}=b,e=!!c&&c>0;return e||d?new Promise(b=>{let f,g=!1,h=a=>{g||(g=!0,b(a))};e&&(f=setTimeout(()=>{a.abort(),h({exitCode:-1,timedOut:!0,costExceeded:!1})},c),f.unref?.()),d?.then(()=>{a.abort(),h({exitCode:-2,timedOut:!1,costExceeded:!0})}),a.done.then(a=>{f&&clearTimeout(f),h({exitCode:a,timedOut:!1,costExceeded:!1})})}):a.done.then(a=>({exitCode:a,timedOut:!1,costExceeded:!1}))}function Z(a){return{chunks:a.chunks,costUsd:a.costUsd}}async function $(a,b,c,d={}){let e=d.db??(0,h.Lf)(),f=d.runner??R,i=d.broker??W(),j=d.provider??(0,t.X$)(a.agent),l=d.command??j.defaultCommand,n=a.model??j.defaultModel,o=j.createParser();o.onParseError=b=>i.publish(a.id,{type:"parse_error",payload:b}),"working"!==a.status?(0,m.dk)(a.id,"working",{model:n},e):e.update(k.jobs).set({model:n}).where((0,g.eq)(k.jobs.id,a.id)).run();let p=d.costCapUsd&&d.costCapUsd>0?X(d.costCapUsd,()=>o.costUsd>0?o.costUsd:j.estimateCost(n,o.totalInputTokens,o.totalOutputTokens)):void 0,q=f(l,j.buildStartArgs({prompt:b,model:n,maxTurns:a.maxTurns}),c,{onStdout:b=>{for(let c of o.push(b))i.publish(a.id,{type:c.type,payload:Z(c)});p?.observe()},onStderr:b=>i.publish(a.id,{type:"error",payload:{stderr:b}})});bt(a.id,q.abort);let{exitCode:r,timedOut:s,costExceeded:u}=await Y(q,{timeoutMs:d.timeoutMs,costTripped:p?.tripped});for(let b of(bu(a.id),s&&i.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${d.timeoutMs}ms`}}),u&&i.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${d.costCapUsd} reached`}}),o.flush()))i.publish(a.id,{type:b.type,payload:Z(b)});let v=o.costUsd>0?o.costUsd:j.estimateCost(n,o.totalInputTokens,o.totalOutputTokens);return e.update(k.jobs).set({sessionId:o.sessionId,totalInputTokens:o.totalInputTokens,totalOutputTokens:o.totalOutputTokens,costUsd:v}).where((0,g.eq)(k.jobs.id,a.id)).run(),{exitCode:r,sessionId:o.sessionId,costUsd:v,inputTokens:o.totalInputTokens,outputTokens:o.totalOutputTokens,timedOut:s,costExceeded:u}}async function _(a,b,c,d,e={}){let f=e.db??(0,h.Lf)(),i=e.runner??R,j=e.broker??W(),l=e.provider??(0,t.X$)(a.agent),m=e.command??l.defaultCommand,n=a.model??l.resumeModel,o=l.createParser();o.onParseError=b=>j.publish(a.id,{type:"parse_error",payload:b});let p=(0,T.Xm)((0,T.yx)(a.repoId,S._.ciFix,f),{CI_LOG:c}),q=e.costCapUsd&&e.costCapUsd>0?X(e.costCapUsd,()=>o.costUsd>0?o.costUsd:l.estimateCost(n,o.totalInputTokens,o.totalOutputTokens)):void 0,r=i(m,(l.supportsResume?l.buildResumeArgs({prompt:p,sessionId:b,model:l.resumeModel,maxTurns:l.resumeMaxTurns}):null)??l.buildStartArgs({prompt:p,model:l.resumeModel,maxTurns:l.resumeMaxTurns}),d,{onStdout:b=>{for(let c of o.push(b))j.publish(a.id,{type:c.type,payload:{chunks:c.chunks}});q?.observe()},onStderr:b=>j.publish(a.id,{type:"error",payload:{stderr:b}})});bt(a.id,r.abort);let{exitCode:s,timedOut:u,costExceeded:v}=await Y(r,{timeoutMs:e.timeoutMs,costTripped:q?.tripped});for(let b of(bu(a.id),u&&j.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${e.timeoutMs}ms`}}),v&&j.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${e.costCapUsd} reached`}}),o.flush()))j.publish(a.id,{type:b.type,payload:{chunks:b.chunks}});let w=o.costUsd>0?o.costUsd:l.estimateCost(n,o.totalInputTokens,o.totalOutputTokens),x=f.select().from(k.jobs).where((0,g.eq)(k.jobs.id,a.id)).get();return f.update(k.jobs).set({sessionId:o.sessionId??b,totalInputTokens:(x?.totalInputTokens??0)+o.totalInputTokens,totalOutputTokens:(x?.totalOutputTokens??0)+o.totalOutputTokens,costUsd:(x?.costUsd??0)+w}).where((0,g.eq)(k.jobs.id,a.id)).run(),{exitCode:s,sessionId:o.sessionId??b,costUsd:w,inputTokens:o.totalInputTokens,outputTokens:o.totalOutputTokens,timedOut:u,costExceeded:v}}var aa=c(73024);let ab=["vercel","railway"];function ac(a){return a.exists??aa.existsSync}class ad{async detect(a){let b=ac(a);return b((0,J.join)(a.cwd,"railway.json"))||b((0,J.join)(a.cwd,"railway.toml"))||b((0,J.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"}}class ae{async detect(a){let b=ac(a);return b((0,J.join)(a.cwd,"vercel.json"))||b((0,J.join)(a.cwd,".vercel"))}async getStatus(a){let b=await a.run("vercel",["list"],a.cwd);return function(a,b,c){let d;if(0!==b)return"not_found";let e=a.split("\n").map(a=>a.trim()).filter(Boolean),f=c?c.slice(0,7):null;if(f){if(!(d=e.find(a=>a.includes(f))))return"not_found"}else d=e.find(a=>/●|ready|error|building|queued|initializing/i.test(a));let g=(d??a).toLowerCase();return/\berror\b|\bfailed\b|canceled/.test(g)?"error":/\bready\b/.test(g)?"ready":/\bbuilding\b/.test(g)?"building":/\bqueued\b|initializing|deploying/.test(g)?"deploying":"not_found"}(b.stdout,b.exitCode,a.ref)}async getLogs(a){let b=a.ref?["inspect","--logs",a.ref]:["logs"],c=await a.run("vercel",b,a.cwd);return[c.stdout,c.stderr].filter(Boolean).join("\n").trim()}constructor(){this.id="vercel",this.label="Vercel"}}let af=[new ae,new ad];async function ag(a,b){if(b)return ab.includes(b)?function(a){let b=af.find(b=>b.id===a);if(!b)throw Error(`unsupported deployment platform: ${a}`);return b}(b):null;for(let b of af)if(await b.detect(a))return b;return null}let ah={monitoring:["healthy","failed","escalated"],failed:["repairing","escalated"],repairing:["repaired","escalated"],healthy:[],repaired:[],escalated:[]};class ai extends Error{constructor(a,b){super(`invalid deployment-healing transition: ${a} -> ${b}`)}}let aj={initialDelayMs:6e4,intervalMs:6e4,timeoutMs:12e5,monitorWindowMs:36e5,maxLogLines:200};function ak(){return Math.floor(Date.now()/1e3)}function al(a,b,c={},d=(0,h.Lf)()){let e=function(a,b=(0,h.Lf)()){return b.select().from(k.deploymentHealingSessions).where((0,g.eq)(k.deploymentHealingSessions.id,a)).get()}(a,d);if(!e)throw Error(`deployment healing session ${a} not found`);var f=e.status;if(!ah[f].includes(b))throw new ai(f,b);return d.update(k.deploymentHealingSessions).set({status:b,updatedAt:ak(),...c}).where((0,g.eq)(k.deploymentHealingSessions.id,a)).returning().get()}function am(a,b){return{cwd:a.path,ref:b,run:I.S}}async function an(a={}){let b=a.db??(0,h.Lf)(),c=a.now??Date.now,d=a.budgets??aj;for(let e of(0,u.uP)(b))if((0,C.A)(e).autoHealDeployments)try{let f=a.forgeFor?.(e)??(0,v.Ie)(e),g=a.adapterFor??(a=>ag(am(a,null),a.deploymentPlatform)),h=await g(e);if(!h)continue;let i=a.openFixPr??aq;await ao(e,f,h,{db:b,now:c,budgets:d,openFixPr:i})}catch(a){console.error(`[deploy-heal] sweep failed for ${e.name}`,a)}}async function ao(a,b,c,d){let{db:e,now:f,budgets:i}=d,j=(0,m.N6)(a.id,e);for(let a of j){let d;if("merged"!==a.status||null==a.prNumber)continue;let j=(a.finishedAt??a.createdAt)*1e3;if(!(f()-j>i.monitorWindowMs)){try{d=await b.prHeadSha(a.prNumber)}catch(b){console.error(`[deploy-heal] head sha lookup failed for job ${a.id}`,b);continue}!function(a,b,c=(0,h.Lf)()){return c.select().from(k.deploymentHealingSessions).where((0,g.eq)(k.deploymentHealingSessions.jobId,a)).all().some(a=>a.commitSha===b)}(a.id,d,e)&&function(a,b,c,d,e=(0,h.Lf)()){e.select().from(k.deploymentHealingSessions).where((0,g.eq)(k.deploymentHealingSessions.jobId,a)).all().find(a=>a.commitSha===d)||e.insert(k.deploymentHealingSessions).values({jobId:a,prNumber:b,platform:c,commitSha:d}).returning().get()}(a.id,a.prNumber,c.id,d,e)}}for(let b of e.select().from(k.deploymentHealingSessions).all().filter(a=>"monitoring"===a.status)){let e=j.find(a=>a.id===b.jobId);if(e)try{await ap(a,e,c,b,d)}catch(c){console.error(`[deploy-heal] session ${b.id} failed for ${a.name}`,c)}}}async function ap(a,b,c,d,e){var f,i;let j,{db:l,now:m,budgets:n}=e,o=(j=(f={createdAt:1e3*d.createdAt,lastPolledAt:1e3*d.updatedAt,now:m(),initialDelayMs:n.initialDelayMs,intervalMs:n.intervalMs,timeoutMs:n.timeoutMs}).now-f.createdAt)<f.initialDelayMs?"wait":j>=f.timeoutMs?"timeout":f.lastPolledAt<=f.createdAt||f.now-f.lastPolledAt>=f.intervalMs?"poll":"wait";if("wait"===o)return;if("timeout"===o)return void al(d.id,"escalated",{},l);let p=am(a,d.commitSha),q="ready"===(i=await c.getStatus(p))?"ready":"error"===i?"error":"pending";if("ready"===q)return void al(d.id,"healthy",{},l);if("pending"===q)return void function(a,b=(0,h.Lf)()){b.update(k.deploymentHealingSessions).set({updatedAt:ak()}).where((0,g.eq)(k.deploymentHealingSessions.id,a)).run()}(d.id,l);let r=(await c.getLogs(p).catch(()=>"")).split("\n").slice(-n.maxLogLines).join("\n").trim(),s=al(d.id,"failed",{logsExcerpt:r||null},l);al(d.id,"repairing",{},l);try{let c=await e.openFixPr(a,b,s,r);al(d.id,"repaired",{followupPrNumber:c},l)}catch(a){console.error(`[deploy-heal] fix PR failed for session ${d.id}`,a),al(d.id,"escalated",{},l)}}async function aq(a,b,c,d){let e=(0,h.Lf)(),f=(0,t.X$)(b.agent),g=(0,H.m)(f,e),i=new P,j=c.commitSha.slice(0,7),k=`drydock/deploy-fix-${b.id}-${j}`,l=(0,v.Ie)(a),m=await i.prepareForNewBranch(a,k,`${b.id}-${j}`);try{let h=await $(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"),m.path,{db:e,provider:f,command:g});if(0!==h.exitCode)throw Error(`${f.label} exited non-zero`);return await i.commitAndPush(m,`Fix failed ${c.platform} deployment for PR #${c.prNumber}`),l.createPr({head:k,base:a.defaultBranch,title:`Fix failed ${c.platform} deployment (PR #${c.prNumber})`,body:`The deployment for #${c.prNumber} (commit ${j}) failed. This PR addresses the deployment failure.`})}finally{try{await i.remove(m,a.path)}catch(a){console.error(`[deploy-heal] worktree cleanup failed for job ${b.id}`,a)}}}var ar=c(74058),as=c(77173),at=c(35078);async function au(a={}){let b=a.db??(0,h.Lf)();if(!(0,j.mt)(b).releaseManagementEnabled)return;let c=a.now??Date.now,d=a.windowMs??36e5,e=a.notify??((a,c)=>(0,ar.JD)(a,c,b));for(let f of(0,u.uP)(b))if((0,C.A)(f).releaseEnabled)try{let g=a.forgeFor?.(f)??(0,v.Ie)(f),h="function"==typeof g.listReleases&&"function"==typeof g.listMergedPrs&&"function"==typeof g.createRelease?g:null;if(!h)continue;let i=a.generatorFor?.(f)??function(a,b){let c=(0,t.X$)(a.agent),d=(0,H.m)(c,b),e=a.defaultModel;return a=>(0,at.NF)({provider:c,command:d,model:e},b=>b(a))}(f,b);await av(f,g,h,i,{db:b,now:c,windowMs:d,notify:e})}catch(a){console.error(`[release] sweep failed for ${f.name}`,a)}}async function av(a,b,c,d,e){let{db:f,now:g,windowMs:h}=e;for(let i of(0,m.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 aw(a,i,b,c,d,e)}catch(b){console.error(`[release] job ${i.id} failed for ${a.name}`,b)}}}async function aw(a,b,c,d,e,f){let{db:g,notify:h}=f,i=b.prNumber,j=await c.prHeadSha(i),k=(0,as.v0)({repoId:a.id,mode:"auto",triggerPrNumber:i,triggerSha:j},g);if("detected"!==k.status)return;let l=await (0,at.Dl)(k.id,{repo:a,forge:d,db:g,generate:e});"published"===l.status&&l.tag&&await h("release_published",`🚀 Released ${a.name} ${l.tag}.`)}var ax=c(526);let ay=new Set(["ci_running","ci_failed","retrying","needs_human"]);function az(a){return"function"==typeof a.listReviewThreads&&"function"==typeof a.replyToReviewThread&&"function"==typeof a.updateReviewComment&&"function"==typeof a.resolveReviewThread&&"function"==typeof a.reactToReviewComment}async function aA(a={}){let b=a.db??(0,h.Lf)(),c=a.processJob??aB;for(let d of(0,u.uP)(b))if((0,C.A)(d).autoReviewFeedback)try{let e=a.forgeFor?.(d)??(0,v.Ie)(d);if(!az(e))continue;for(let a of(0,m.N6)(d.id,b).filter(a=>null!=a.prNumber&&ay.has(a.status)))try{await c(d,a,e)}catch(b){console.error(`[review-feedback] job ${a.id} failed for ${d.name}`,b)}}catch(a){console.error(`[review-feedback] sweep failed for ${d.name}`,a)}}async function aB(a,b,c){var d;if(!az(c)||null==b.prNumber)return;let e=(0,h.Lf)(),f=(0,C.A)(a),g=(0,t.X$)(b.agent),i=(0,H.m)(g,e),j=(d={repo:a,job:b,worktrees:new P,runSession:(a,b,c)=>$(a,b,c,{db:e,provider:g,command:i}).then(a=>({exitCode:a.exitCode}))},async(a,b)=>{if(!d.job.branch)return{ok:!1,detail:"job has no branch"};let c=await d.worktrees.prepareForBranch(d.repo,d.job.branch,`${d.job.id}-${b.id}`);try{let a,e,f=await d.runSession(d.job,(a=b.comments[0],e=b.path?`${b.path}${b.line?`:${b.line}`:""}`:"this PR",[`A reviewer left this comment on ${e} 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!==f.exitCode)return{ok:!1,detail:"agent exited non-zero"};try{await d.worktrees.commitAndPush(c,`Address review feedback on ${b.path??"PR"}`)}catch{return{ok:!1,detail:"no change produced"}}return{ok:!0}}finally{try{await d.worktrees.remove(c,d.repo.path)}catch(a){console.error(`[review-feedback] worktree cleanup failed for job ${d.job.id}`,a)}}});await (0,ax.Nx)(b.id,b.prNumber,{forge:c,db:e,gate:{trustedReviewers:f.trustedReviewers,ignoredBots:f.ignoredBots},includeProgressReplies:f.includeProgressReplies,applyFeedback:j})}var aC=c(2373),aD=c(71218),aE=c(37567);let aF=new Set(["CANCELLED","ACTION_REQUIRED"]),aG=new Set(["TIMED_OUT"]),aH=/\b(ai|claude|codex|copilot|gpt|llm)\b.*\breview\b|\breview\b.*\b(ai|bot)\b/i,aI=/\bcancell?ed\b|\bsecret\b|\b(rate.?limit|secondary rate)\b|\b5\d\d\b|\b(401|403|unauthorized|forbidden)\b|service unavailable/i,aJ=/\b(time(d)?.?out|timeout|intermittent|flak(y|e)|econnreset|etimedout|esockettimedout)\b/i,aK=/\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,aL=[{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 aM(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 aL)if(c.test(a))return b;return"unknown"}(a);if("unknown"===d)return{kind:d,evidence:c.slice(-b).join("\n")};let e=aL.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 aN={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."},aO=["healed","blocked","escalated","superseded"],aP=["blocked","escalated","superseded"],aQ={triaging:["awaiting_slot",...aP],awaiting_slot:["repairing",...aP],repairing:["awaiting_ci",...aP],awaiting_ci:["verifying",...aP],verifying:["healed","cooldown",...aP],cooldown:["awaiting_slot",...aP],healed:[],blocked:[],escalated:[],superseded:[]};class aR extends Error{constructor(a,b){super(`invalid healing transition: ${a} -> ${b}`)}}let aS={maxHealAttemptsPerSession:3,maxHealAttemptsPerFingerprint:2,cooldownMs:9e5,maxConcurrentHealingRuns:1,maxEvidenceLines:200},aT=["repairing","awaiting_ci","verifying"];function aU(a,b=(0,h.Lf)()){return b.select().from(k.healingSessions).where((0,g.eq)(k.healingSessions.id,a)).get()}function aV(a,b,c=(0,h.Lf)()){let d=aU(a,c);if(!d)throw Error(`healing session ${a} not found`);var e=d.status;if(!aQ[e].includes(b))throw new aR(e,b);return c.update(k.healingSessions).set({status:b,updatedAt:Math.floor(Date.now()/1e3)}).where((0,g.eq)(k.healingSessions.id,a)).returning().get()}function aW(a,b,c=(0,h.Lf)()){c.update(k.healingAttempts).set({status:b.status,afterSha:b.afterSha??null}).where((0,g.eq)(k.healingAttempts.id,a)).run()}let aX=new Set(["FAILURE","ERROR","CANCELLED","TIMED_OUT","ACTION_REQUIRED"]),aY=new Set(["PENDING","QUEUED","IN_PROGRESS","WAITING","REQUESTED"]);function aZ(a){return 0===a.length?"pending":a.some(a=>aX.has(a.state.toUpperCase()))?"failed":a.some(a=>aY.has(a.state.toUpperCase()))?"pending":"passed"}let a$=a=>new Promise(b=>setTimeout(b,a));async function a_(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(k.followupIssues).values({jobId:a.id,ghIssueNumber:f,title:`Follow-up for #${a.issueNumber}`}).run(),(0,m.dk)(a.id,"needs_human",{errorMessage:c.slice(0,500)},e)}async function a0(a,b,c,d,e){let f=Math.round(c/6e4),g=`CI did not complete in time (checks stayed pending for over ${f} min on PR #${b}).`;return await d.gh.commentIssue(a.issueNumber,`${g} Handing over to a human.`),(0,m.yM)(a.id,"status",{reason:"ci wait budget exceeded",prNumber:b},e),(0,m.dk)(a.id,"needs_human",{errorMessage:g.slice(0,500)},e)}async function a1(a,b,c){if(c.autoHeal)return a2(a,b,c,c.autoHeal);let d=c.db??(0,h.Lf)(),e=c.sleep??a$,f=c.pollMs??3e4,g=c.maxPolls??1/0,i=c.ciWaitMs??1/0,j=c.now??Date.now,k=j()+i,l=a,n=0;for(;n<g;){n++;let a=aZ(await c.gh.prChecks(b));if("pending"===a){if(j()>=k)return a0(l,b,i,c,d);await e(f);continue}if("passed"===a)return await c.gh.mergePr(b),(0,m.dk)(l.id,"merged",{prNumber:b},d);if((l=(0,m.dk)(l.id,"ci_failed",{prNumber:b},d)).ciRetryCount>=3)return a_(l,b,"CI failed 3 times.",c,d);if(!l.sessionId)return(0,m.yM)(l.id,"status",{reason:"missing session id, cannot resume for CI fix"},d),(0,m.dk)(l.id,"needs_human",{errorMessage:"CI failed but no session id to resume"},d);let g=l.sessionId;l=(0,m.dk)(l.id,"retrying",{ciRetryCount:l.ciRetryCount+1},d);let{evidence:h}=aM(await c.gh.failedRunLog(b),200);await c.resumeSession(l,g,h),l=(0,m.dk)(l.id,"ci_running",{},d)}return(0,m.ax)(l.id,d)??l}async function a2(a,b,c,d){let e,f=c.db??(0,h.Lf)(),i=c.sleep??a$,j=c.pollMs??3e4,l=c.maxPolls??1/0,n=d.budgets??aS,o=c.now??d.now??Date.now,p=c.ciWaitMs??1/0,q=o()+p,r=a,s=0;for(;s<l;){s++;let a=await c.gh.prChecks(b),l=aZ(a);if("pending"===l){if(o()>=q)return a0(r,b,p,c,f);await i(j);continue}if("passed"===l){if(e){let a=await d.headSha(b);aW(e.attemptId,{status:"healed",afterSha:a},f),aV(e.sessionId,"verifying",f),aV(e.sessionId,"healed",f)}return await c.gh.mergePr(b),(0,m.dk)(r.id,"merged",{prNumber:b},f)}let u=a.filter(a=>aX.has(a.state.toUpperCase())),v=await d.headSha(b);if(e){var t;let a=(t={beforeSha:e.beforeSha,afterSha:v,beforeFailingCount:e.beforeFailing,afterFailingCount:u.length}).afterSha===t.beforeSha?{verdict:"rejected",reason:"no change pushed (no new commit)"}:t.afterFailingCount>=t.beforeFailingCount?{verdict:"rejected",reason:"no measurable improvement in failing checks"}:0===t.afterFailingCount?{verdict:"healed",reason:"all checks green"}:{verdict:"progressed",reason:"fewer checks failing"};aW(e.attemptId,{status:a.verdict,afterSha:v},f);let d=e.sessionId;if(e=void 0,"rejected"===a.verdict)return aV(d,"verifying",f),aV(d,"escalated",f),a_(r,b,`CI auto-heal: ${a.reason}.`,c,f)}let w=function(a,b,c,d=(0,h.Lf)()){let e=d.select().from(k.healingSessions).where((0,g.eq)(k.healingSessions.prNumber,b)).all();for(let a of e){var f;a.headSha===c||(f=a.status,aO.includes(f))||aV(a.id,"superseded",d)}let i=e.find(a=>a.headSha===c);return i?aU(i.id,d)??i:d.insert(k.healingSessions).values({jobId:a,prNumber:b,headSha:c}).returning().get()}(r.id,b,v,f),x=await c.gh.failedRunLog(b),y=u.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}`,aF.has(f)||aH.test(d)||aI.test(g)?"blocked_external":aG.has(f)||aJ.test(g)?"flaky_or_ambiguous":aK.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,x)),z=function(a,b=(0,h.Lf)()){return b.select().from(k.healingAttempts).where((0,g.eq)(k.healingAttempts.sessionId,a)).all()}(w.id,f),A=z.at(-1),B=function(a){let{failures:b,attempts:c,budgets:d}=a,e=b.filter(a=>"healable_in_branch"===a.category),f=b.filter(a=>"flaky_or_ambiguous"===a.category),g=b.filter(a=>"blocked_external"===a.category);if(0==[...e,...f].length){let a=g[0];return a?{action:"block",reason:`external failure: ${a.checkName}`}:{action:"escalate",reason:"unrecognised CI failure"}}if(c.length>=d.maxHealAttemptsPerSession)return{action:"escalate",reason:"per-session heal budget exhausted"};let h=new Map;for(let a of c)h.set(a.fingerprint,(h.get(a.fingerprint)??0)+1);let i=a=>(h.get(a.fingerprint)??0)<d.maxHealAttemptsPerFingerprint,j=e.find(i)??f.find(i);if(!j)return{action:"escalate",reason:"per-fingerprint heal budget exhausted"};if(a.activeRuns>=d.maxConcurrentHealingRuns)return{action:"wait_slot"};if(null!=a.lastAttemptAt){let b=a.now-a.lastAttemptAt;if(b<d.cooldownMs)return{action:"cooldown",waitMs:d.cooldownMs-b}}return"healable_in_branch"===j.category?{action:"repair",target:j}:{action:"rerun",target:j}}({failures:y,attempts:z.map(a=>({fingerprint:a.fingerprint})),lastAttemptAt:A?1e3*A.createdAt:null,now:o(),activeRuns:function(a=(0,h.Lf)()){return a.select().from(k.healingSessions).all().filter(a=>aT.includes(a.status)).length}(f),budgets:n});switch(B.action){case"block":return"triaging"===w.status&&aV(w.id,"blocked",f),await c.gh.commentIssue(r.issueNumber,`CI auto-heal: ${B.reason} — not auto-fixable. Handing over to a human.`),(0,m.dk)(r.id,"needs_human",{errorMessage:`auto-heal blocked: ${B.reason}`.slice(0,500)},f);case"escalate":return"triaging"===w.status&&aV(w.id,"escalated",f),a_(r,b,`CI auto-heal: ${B.reason}.`,c,f);case"wait_slot":await i(j);continue;case"cooldown":await i(Math.min(B.waitMs,j));continue;case"repair":case"rerun":{let a=r.sessionId;if(!a)return"triaging"===w.status&&aV(w.id,"escalated",f),a_(r,b,"CI failed but no session id to resume.",c,f);let d=function(a,b,c,d=(0,h.Lf)()){return d.insert(k.healingAttempts).values({sessionId:a,fingerprint:b.fingerprint,category:b.category,checkName:b.checkName,beforeSha:c}).returning().get()}(w.id,B.target,v,f);if(aV(w.id,"awaiting_slot",f),aV(w.id,"repairing",f),r=(0,m.dk)(r.id,"ci_failed",{prNumber:b},f),r=(0,m.dk)(r.id,"retrying",{ciRetryCount:r.ciRetryCount+1},f),"repair"===B.action){let b=function(a){let{kind:b,evidence:c}=aM(a.log,a.maxLines);return[`CI check "${a.checkName}" is failing on this PR.`,aN[b],"Fix only this failure, then commit and push. Failure evidence:\n",c].join("\n")}({checkName:B.target.checkName,log:x,maxLines:n.maxEvidenceLines});await c.resumeSession(r,a,b)}aV(w.id,"awaiting_ci",f),r=(0,m.dk)(r.id,"ci_running",{},f),e={attemptId:d.id,sessionId:w.id,beforeSha:v,beforeFailing:u.length};continue}}}return(0,m.ax)(r.id,f)??r}var a3=c(26424);async function a4(a,b,c,d=(0,h.Lf)(),e={}){for(let f of c)try{let c=await b.viewIssue(f.number),g=await (0,aD.dv)(a,{number:c.number,title:c.title,body:c.body},d,{generate:e.generate});if(!g.skipped&&g.subtasks.length>=a3.WE){let a=(0,a3.cp)(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:
|
|
7
|
+
|
|
8
|
+
${a}`)}}catch(b){console.error(`[subtasks] decomposition failed for ${a.name}#${f.number}`,b)}}var a5=c(51455),a6=c(22579);function a7(a,b){if(a.length<=b)return a;let c=a.length-b;return`${a.slice(0,b)}
|
|
9
|
+
…[truncated ${c} chars]`}let a8=a6.Ik({ordinal:a6.ai().int().nonnegative(),status:a6.k5(["done","pending","deferred"]),reason:a6.Yj().default("")}),a9=a6.Ik({summary:a6.Yj().default(""),verdicts:a6.YO(a8).default([])});async function ba(a){let b,{job:c,prNumber:d,repo:e,forge:f,db:g,provider:i,command:j,model:k}=a;try{let n=await f.prDiff(d);if(!n.trim())return null;let p=await f.viewIssue(c.issueNumber),q=(0,aD.t0)(e.id,c.issueNumber,g),r={issueNumber:c.issueNumber,issueTitle:p.title,issueBody:p.body,subtasks:q.map(a=>({ordinal:a.ordinal,title:a.title})),diff:n},s=a.generate;if(!s){var l;let c,d;b=await (0,a5.mkdtemp)((0,J.join)((0,o.tmpdir)(),"drydock-verify-")),c=(l={provider:i,command:j,model:k,cwd:b,runner:a.runner}).runner??I.S,d=l.timeoutMs??18e4,s=async a=>{var b;let e,f,g=l.provider.buildOneShotArgs({prompt:(e=a7(a.issueBody.trim(),6e3),f=a7(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}`,"",e,"\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",f,'```\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")),model:l.model});try{let a=await c(l.command,g,l.cwd,{timeoutMs:d});if(0!==a.exitCode)return null;return function(a){let b,c=a.match(/\{[\s\S]*\}/);if(!c)return null;try{b=JSON.parse(c[0])}catch{return null}let d=a9.safeParse(b);return d.success?d.data:null}(a.stdout)}catch{return null}}}let t=await s(r);if(!t)return(0,m.yM)(c.id,"verification",{ok:!1},g),null;let u=function(a,b,c,d=(0,h.Lf)()){let e=new Map((0,aD.t0)(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(0,aD.ZY)(a.id,"done",b);(0,aD.ZY)(a.id,"in_progress",b),(0,aD.ZY)(a.id,"done",b)}catch{}}(b,d),f+=1;else if("deferred"===a.status)try{(0,aD.ZY)(b.id,"deferred",d),g+=1}catch{}else i.push(b.title)}return{done:f,deferred:g,pendingTitles:i}}(e.id,c.issueNumber,t,g);return await f.commentIssue(c.issueNumber,(0,U.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")}(t,u))),(0,m.yM)(c.id,"verification",{ok:!0,summary:t.summary,done:u.done,deferred:u.deferred,pending:u.pendingTitles.length},g),t}catch(a){return console.error(`[verify] verification pass failed for ${e.name}#${c.issueNumber}`,a),null}finally{if(b)try{await (0,a5.rm)(b,{recursive:!0,force:!0})}catch{}}}async function bb(a,b={}){let c=b.db??(0,h.Lf)(),d=b.notify??((a,b)=>(0,ar.JD)(a,b,c)),e=await bc(a,b,d);return"merged"===e.status?await d("pr_merged",`✅ Merged: ${e.repoId}#${e.issueNumber} (PR #${e.prNumber}).`):"needs_human"===e.status?await d("needs_human",`⚠️ Needs human: ${e.repoId}#${e.issueNumber} — ${e.errorMessage??"review required"}.`):"aborted"===e.status&&await d("job_failed",`🛑 Aborted: ${e.repoId}#${e.issueNumber} — ${e.errorMessage??"job aborted"}.`),e}async function bc(a,b,c){let d,e=b.db??(0,h.Lf)(),f=(0,m.ax)(a,e);if(!f)throw Error(`job ${a} not found`);let g=(0,u.L8)(f.repoId,e);if(!g)throw Error(`repo ${f.repoId} not found`);"queued"===f.status&&(0,m.dk)(f.id,"working",{},e);let i=b.worktrees??new P,k=(0,v.Ie)(g),l=(0,t.X$)(f.agent),n=(0,H.m)(l,e),o=(0,j.mt)(e),p=g.maxJobMinutes??o.maxJobMinutes,q=6e4*p,r=(g.maxCiWaitMinutes??o.maxCiWaitMinutes)*6e4,s=g.maxJobCostUsd??o.maxJobCostUsd,w=b.runSession??((a,b,c)=>$(a,b,c,{db:e,provider:l,command:n,timeoutMs:q,costCapUsd:s})),x=b.createPr??(a=>k.createPr(a)),y=b.runBabysitter??((a,b)=>a1(a,b,{gh:k,db:e,ciWaitMs:r,resumeSession:(a,b,c)=>_(a,b,c,g.path,{db:e,provider:l,command:n,timeoutMs:q,costCapUsd:s}).then(()=>void 0),autoHeal:g.autoHealCi?{headSha:a=>k.prHeadSha(a),provider:g.platform}:void 0})),z=b.verify??((a,b)=>ba({job:a,prNumber:b,repo:g,forge:k,db:e,provider:l,command:n,model:a.model??g.defaultModel}).then(()=>void 0));try{d=await i.prepare(g,f.id,f.issueNumber),(0,m.yM)(f.id,"worktree",{path:d.path,branch:d.branch},e);let a=(0,T.Xm)((0,T.yx)(g.id,S._.main,e),{ISSUE_NUM:f.issueNumber,BRANCH:d.branch,REPO_NAME:g.name});if(g.autoDecompose){let b=(0,aD.t0)(g.id,f.issueNumber,e);if(b.length>0){var A;a+=(A=b.map(a=>({title:a.title,status:a.status})),0===A.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",(0,a3.cp)(A)].join("\n")),function(a,b,c=(0,h.Lf)()){for(let d of(0,aD.t0)(a,b,c))"pending"===d.status&&(0,aD.ZY)(d.id,"in_progress",c)}(g.id,f.issueNumber,e)}}a+=(0,aE.Y)(g.agentInstructions);let b=await w((0,m.ax)(f.id,e),a,d.path);if(b.timedOut)return(0,m.dk)(f.id,"needs_human",{errorMessage:`${l.label} timed out after ${p} minutes`},e);if(b.costExceeded)return(0,m.dk)(f.id,"needs_human",{errorMessage:`per-job cost limit of $${s} reached`},e);if(0!==b.exitCode)return(0,m.dk)(f.id,"needs_human",{errorMessage:`${l.label} exited non-zero`},e);if(g.adrGating){let a=(0,aC.Pe)("pending_review",e,g.id);if(a.length>0)return(0,m.dk)(f.id,"needs_human",{errorMessage:`Blocked by ${a.length} pending ADR review(s).`},e)}try{await i.commitAndPush(d,`Fix #${f.issueNumber}`)}catch(a){if(a instanceof O)return(0,m.dk)(f.id,"needs_human",{errorMessage:"Agent produced no changes"},e);throw a}let j=(0,B.ts)(g.id,e).find(a=>a.number===f.issueNumber)?.title??`Fix #${f.issueNumber}`,k=await x({head:d.branch,base:g.defaultBranch,title:j,body:`Closes #${f.issueNumber}`});if((0,m.dk)(f.id,"ci_running",{branch:d.branch,prNumber:k},e),await c("pr_opened",`🔀 PR opened: ${g.id}#${f.issueNumber} (PR #${k}).`),g.verifyPr)try{await z((0,m.ax)(f.id,e),k)}catch(b){let a=b instanceof Error?b.message:String(b);(0,m.yM)(f.id,"error",{message:`verification pass failed: ${a}`},e)}let n=await y((0,m.ax)(f.id,e),k);return g.autoDecompose&&"merged"===n.status&&function(a,b,c=(0,h.Lf)()){for(let d of(0,aD.t0)(a,b,c))!function(a,b){let c=a.status;if("done"!==c&&"skipped"!==c){if("in_progress"===c)return(0,aD.ZY)(a.id,"done",b);(0,aD.ZY)(a.id,"in_progress",b),(0,aD.ZY)(a.id,"done",b)}}(d,c)}(g.id,f.issueNumber,e),n}catch(c){let a=c instanceof Error?c.message:String(c);(0,m.yM)(f.id,"error",{message:a},e);let b=(0,m.ax)(f.id,e);if(["working","ci_running","retrying"].includes(b.status))return(0,m.dk)(f.id,"needs_human",{errorMessage:a.slice(0,500)},e);return b}finally{if(d)try{await i.remove(d,g.path)}catch(a){console.error(`[run-job] worktree cleanup failed for job ${f.id}`,a)}}}let bd=!1,be=new Set;function bf(a){let b=(0,aa.openSync)(a,"wx");try{(0,aa.writeSync)(b,JSON.stringify({pid:process.pid,ts:Date.now()}))}finally{(0,aa.closeSync)(b)}}let bg={active:!1};function bh(a,b,c,d,e={}){var f;let g,h=(0,t.X$)(a.agent),i=(g=(f={provider:h,command:(0,H.m)(h,d),model:a.defaultModel,cwd:a.path,runner:e.runner}).runner??I.S,async a=>{let b=f.provider.buildOneShotArgs({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"),model:f.model}),c=await g(f.command,b,f.cwd);if(0!==c.exitCode)return[];let d=c.stdout.match(/\[[\s\S]*\]/);if(!d)return[];try{let a=JSON.parse(d[0]);if(!Array.isArray(a))return[];return a.filter(a=>"string"==typeof a).map(a=>a.trim()).filter(Boolean)}catch{return[]}});return a4(a,b,c,d,{generate:i})}let bi=["needs_human","aborted"];async function bj(a,b,c,d,e,f){var h,i;let j=e.some(a=>b.readyLabels.includes(a)),l=e.some(a=>b.blockingLabels.includes(a));return!!j&&!l&&!!(0,C.i)(b,d.authorAssociation)&&(h=a.id,i=d.number,!(f.select().from(k.jobs).where((0,g.Uo)((0,g.eq)(k.jobs.repoId,h),(0,g.eq)(k.jobs.issueNumber,i),(0,g.RV)(k.jobs.status,[...bi]))).all().length>=b.maxAttempts)||(e.includes(a.needsHumanLabel)||(await c.ensureLabel(a.needsHumanLabel,{color:"d73a4a",description:"Drydock gave up after repeated failures; needs a human"}),await c.addLabels(d.number,[a.needsHumanLabel])),!1))}let bk=["queued","working","ci_running","ci_failed","retrying"],bl=["working","ci_running","ci_failed","retrying"];async function bm(a={}){let b=a.db??(0,h.Lf)(),c=a.runJob??bb,d=(0,u.uP)(b),e=a.triage??G,f=a.decompose??bh;for(let c of d)try{await (0,w.v)("low",async()=>{let d=a.forgeFor?.(c)??(0,v.Ie)(c),i=a.fetchIssues??(async(a,b)=>(await d.refreshRateLimit?.(),d.listAllIssues())),j=await i(c.path,c.queueLabel);(0,B.VK)(c.id,j,b);let l=(0,C.A)(c);if(l.autoTriageEnabled&&await e(c,d,j,b),l.autoDecompose){let a=j.filter(a=>{let b=a.labels.map(a=>a.name);return b.includes(c.queueLabel)||b.some(a=>l.readyLabels.includes(a))});a.length>0&&await f(c,d,a,b)}for(let a of j){let e=a.labels.map(a=>a.name),f=e.includes(c.queueLabel),i=!!l.autoProcessEnabled&&await bj(c,l,d,a,e,b);if(!f&&!i)continue;let j=A({number:a.number,title:a.title,labels:e});if("approved"===j.decision&&!function(a,b,c){return(0,m.i1)([...bk],a).some(a=>a.repoId===b&&a.issueNumber===c)}(b,c.id,a.number)){var n,o;i&&a.author&&l.priorityAuthors.includes(a.author)&&(n=c.id,o=a.number,b.update(k.issues).set({priority:-1}).where((0,g.Uo)((0,g.eq)(k.issues.repoId,n),(0,g.eq)(k.issues.number,o))).run()),function(a,b=(0,h.Lf)()){let c=a.dedupeKey??`${a.repoId}:${a.issueNumber}`;if(!b.select({id:k.jobs.id}).from(k.jobs).where((0,g.Uo)((0,g.eq)(k.jobs.dedupeKey,c),(0,g.KL)(k.jobs.status,[...p.kl]))).get())try{(0,m._S)({...a,dedupeKey:c},b)}catch(a){if(a instanceof Error&&"string"==typeof a.code&&"SQLITE_CONSTRAINT_UNIQUE"===a.code)return;throw a}}({repoId:c.id,issueNumber:a.number,model:c.defaultModel,agent:c.agent},b)}}})}catch(a){a instanceof x.OE?console.debug(`[driver] ${c.name} sweep yielded: ${a.message}`):console.error(`[driver] issue sync failed for ${c.name}`,a)}(0,l.PH)("cost_limit"===(0,j.Jf)(b).reason,bg,b);let o=(0,j.mt)(b).maxParallelJobs,s=r();for(;!bd&&(0,j.Jf)(b).allowed&&be.size<o;){let a=d.filter(a=>(0,j.DA)(a.id,b).allowed).filter(a=>!(a.sequential&&function(a,b){return(0,m.i1)([...bl],a).some(a=>a.repoId===b)}(b,a.id))).map(a=>a.id);if(0===a.length)break;let e=function(a={},b=(0,h.Lf)()){let{repoIds:c}=a;if(c&&0===c.length)return;let d=a.leaseMs??3e4,e=a.worker??r(),f=a.now??q();return b.transaction(a=>{let b=a.select({job:k.jobs}).from(k.jobs).leftJoin(k.issues,(0,g.Uo)((0,g.eq)(k.issues.repoId,k.jobs.repoId),(0,g.eq)(k.issues.number,k.jobs.issueNumber))).where((0,g.Uo)((0,g.eq)(k.jobs.status,"queued"),(0,g.or)((0,g.kZ)(k.jobs.availableAt),(0,g.wJ)(k.jobs.availableAt,f)),c?(0,g.RV)(k.jobs.repoId,c):void 0)).orderBy((0,i.ll)`COALESCE(${k.issues.priority}, 1e9)`,k.jobs.createdAt).get()?.job;if(b)return(0,m.dk)(b.id,"working",{leaseToken:(0,n.randomUUID)(),leaseExpiresAt:f+Math.ceil(d/1e3),workerId:e,attempts:b.attempts+1,availableAt:null},a)})}({repoIds:a,worker:s,leaseMs:3e4},b);if(!e)break;let f=e.id,l=e.leaseToken;be.add(f);let o=setInterval(()=>{try{!function(a,b,c={},d=(0,h.Lf)()){let e=c.leaseMs??3e4,f=c.now??q();d.update(k.jobs).set({leaseExpiresAt:f+Math.ceil(e/1e3)}).where((0,g.Uo)((0,g.eq)(k.jobs.id,a),(0,g.eq)(k.jobs.leaseToken,b),(0,g.eq)(k.jobs.status,"working"))).run().changes}(f,l,{},b)}catch(a){console.error(`[driver] heartbeat failed for job ${f}`,a)}},1e4);o.unref?.(),c(f).catch(a=>console.error(`[driver] job ${f} failed`,a)).finally(()=>{clearInterval(o),function(a,b,c=(0,h.Lf)()){c.update(k.jobs).set({leaseToken:null,leaseExpiresAt:null,workerId:null}).where((0,g.Uo)((0,g.eq)(k.jobs.id,a),(0,g.eq)(k.jobs.leaseToken,b))).run().changes}(f,l,b),be.delete(f)})}let t=a.reviewFeedback??(a=>aA({db:a}));try{await (0,w.v)("low",()=>t(b))}catch(a){console.error("[driver] review-feedback sweep failed",a)}let y=a.deploymentHealing??(a=>an({db:a}));try{await (0,w.v)("low",()=>y(b))}catch(a){console.error("[driver] deployment-healing sweep failed",a)}let z=a.releaseManagement??(a=>au({db:a}));try{await (0,w.v)("low",()=>z(b))}catch(a){console.error("[driver] release-management sweep failed",a)}}let bn=!1,bo=!1,bp=/^job-(\d+)$/;async function bq(a={}){let b=a.db??(0,h.Lf)(),c=a.run??I.S,d=function(a){let b=a.select({id:k.jobs.id,status:k.jobs.status}).from(k.jobs).all(),c=new Set;for(let a of b)p.kl.includes(a.status)||c.add(a.id);return c}(b),e=0;for(let a of(0,u.uP)(b)){let b;await c("git",["-C",a.path,"worktree","prune"]).catch(()=>void 0);let f=M(a.name);try{b=(0,aa.readdirSync)(f,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name)}catch{continue}for(let g of b){let b=bp.exec(g);if(!b||d.has(Number(b[1])))continue;let h=(0,J.join)(f,g);await c("git",["-C",a.path,"worktree","remove","--force",h]).catch(()=>void 0);try{(0,aa.rmSync)(h,{recursive:!0,force:!0}),e++}catch(a){console.error(`[worktree-reaper] failed to remove ${h}`,a)}}}return e}let br=!1,bs=new Map;function bt(a,b){bs.set(a,b)}function bu(a){bs.delete(a)}async function bv(){for(let a of(bd=!0,bn=!1,f&&clearTimeout(f),f=void 0,await (0,l.CZ)().catch(a=>console.error("[orchestrator] drain notify failed",a)),bs.values()))a(5e3);bs.clear(),await function(a=3e4,b=100){let c=Date.now()+a;return new Promise(a=>{let d=()=>{if(0===be.size||Date.now()>=c)return a();setTimeout(d,b)};d()})}(5e3);try{let a=(0,h.Lf)();for(let b of a.select().from(k.jobs).where((0,g.RV)(k.jobs.status,["working","ci_running","ci_failed","retrying"])).all())try{(0,m.dk)(b.id,"interrupted",{},a)}catch(a){console.error(`[orchestrator] shutdown transition failed for job ${b.id}`,a)}}catch(a){console.error("[orchestrator] shutdown DB update failed",a)}}function bw(){if(br)return;if(br=!0,!process.env.VITEST){try{let{requeued:a,interrupted:b}=function(a=(0,h.Lf)()){return{requeued:function(a={},b=(0,h.Lf)()){let c=a.now??q(),d=a.expiredBefore,e=void 0===d?void 0:(0,g.or)((0,g.kZ)(k.jobs.leaseExpiresAt),(0,g.wJ)(k.jobs.leaseExpiresAt,d)),f=b.select().from(k.jobs).where((0,g.Uo)((0,g.eq)(k.jobs.status,"working"),e)).all();for(let a of f)b.update(k.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)(k.jobs.id,a.id)).run(),(0,m.yM)(a.id,"status",{from:"working",to:"queued",reason:"lease_expired"},b);return f.length}({},a),interrupted:function(a=(0,h.Lf)()){let b=a.select().from(k.jobs).where((0,g.RV)(k.jobs.status,s)).all();for(let c of b)a.update(k.jobs).set({status:"interrupted"}).where((0,g.eq)(k.jobs.id,c.id)).run(),(0,m.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){console.error("[orchestrator] recovery failed",a)}if(function(){let a=(0,J.join)(K(),"instance.lock");(0,aa.mkdirSync)((0,J.dirname)(a),{recursive:!0});try{return bf(a),!0}catch{}let b=!1;try{let{pid:c}=JSON.parse((0,aa.readFileSync)(a,"utf8"));!function(a){try{return process.kill(a,0),!0}catch{return!1}}(c)&&(b=!0)}catch{b=!0}if(!b)return!1;try{return(0,aa.unlinkSync)(a),bf(a),!0}catch{return!1}}()){let a,b;bq().then(a=>{a>0&&console.log(`[orchestrator] reaped ${a} orphaned worktree(s)`)}).catch(a=>console.error("[orchestrator] worktree reap failed",a)),function(a={}){if(bn)return;bn=!0;let b=a.tick??(()=>bm()),c=a.intervalMs??1e3*(0,j.mt)().pollIntervalSec,d=async()=>{if(bn){if(!bo){bo=!0;try{await b()}catch(a){console.error("[driver] tick failed",a)}finally{bo=!1}}bn&&(f=setTimeout(d,c))}};d()}(),(a=()=>{try{let{jobEventsDeleted:a}=function(a=(0,h.Lf)(),b={}){let c=b.days??(0,j.mt)(a).retentionDays,d=b.vacuum??!0,e=Math.floor((b.now?.getTime()??Date.now())/1e3)-86400*c,f=a.select({id:k.jobs.id}).from(k.jobs).where((0,g.Uo)((0,g.Pe)(k.jobs.finishedAt),(0,g.lt)(k.jobs.finishedAt,e))).all().map(a=>a.id),l=0;return f.length>0&&(l=a.delete(k.jobEvents).where((0,g.RV)(k.jobEvents.jobId,f)).run().changes),d&&a.run((0,i.ll)`VACUUM`),{jobEventsDeleted:l,vacuumed:d,cutoff:e}}((0,h.Lf)());a>0&&console.log(`[orchestrator] pruned ${a} job event(s)`)}catch(a){console.error("[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 bv(),process.exit(0)};process.once("SIGINT",a),process.once("SIGTERM",a)}},63480:(a,b,c)=>{c.d(b,{f:()=>f});let d="[REDACTED]",e=[/\bgh[pousr]_[A-Za-z0-9]{36,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{50,}\b/g,/\bglpat-[A-Za-z0-9_-]{20,}\b/g,/(Bearer )[A-Za-z0-9._~+/-]+=*/g,/(https?:\/\/)[^\s/@:]+:[^\s/@]+(?=@)/g,/(PRIVATE-TOKEN:\s*)\S+/gi,/(Basic )[A-Za-z0-9+/]+=*/g,/\b(?:AKIA|ASIA|AGPA|AIDA|ANPA|AROA)[0-9A-Z]{16}\b/g];function f(a){let b=a;for(let a of e)b=b.replace(a,(a,b)=>"string"==typeof b?`${b}${d}`:d);return b}},74058:(a,b,c)=>{c.d(b,{Fl:()=>j,JD:()=>i,QD:()=>k});var d=c(55710),e=c(63480),f=c(51605);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})}];function h(a){return g.filter(b=>b.isConfigured(a))}async function i(a,b,c=(0,d.Lf)(),g=k){let j=(0,f.mt)(c);if(j.notifyEvents.includes(a))for(let a of h(j))try{await a.send(b,j,g)}catch(b){console.error(`[notify] ${a.id} delivery failed`,(0,e.f)(String(b)))}}async function j(a=(0,d.Lf)(),b=k){let c=(0,f.mt)(a),g=[];for(let a of h(c))try{await a.send("Drydock test notification — your channel is configured correctly.",c,b),g.push({channel:a.id,ok:!0})}catch(b){var i;console.error(`[notify] ${a.id} test failed`,(0,e.f)(String(b))),g.push({channel:a.id,ok:!1,error:(0,e.f)((i=b)instanceof Error?i.message:String(i))})}return g}let k={postJson:async(a,b)=>{let c=await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b)});if(!c.ok)throw Error(`HTTP ${c.status}`)},sendMail:async(a,b)=>{let d=(await c.e(462).then(c.t.bind(c,17462,19))).createTransport({host:b.host,port:b.port,secure:465===b.port,auth:b.user?{user:b.user,pass:b.pass}:void 0});await d.sendMail(a)}}},96684:(a,b,c)=>{c.d(b,{CZ:()=>h,Dp:()=>g,PH:()=>f});var d=c(55710),e=c(74058);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}async function g(a,b,c=(0,d.Lf)(),f=e.QD){!a&&b&&await (0,e.JD)("automation_paused","⏸️ Automation paused — no new jobs will start until it resumes.",c,f)}async function h(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)}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports.id=541,exports.ids=[541],exports.modules={2937:(a,b,c)=>{"use strict";let d;c.d(b,{Lf:()=>k});var e=c(73024),f=c(76760),g=c(87550),h=c.n(g),i=c(96652),j=c(93929);function k(){if(!d){var a;let b;":memory:"!==(a=process.env.DRYDOCK_DB??(0,f.resolve)(process.cwd(),"data/drydock.db"))&&(0,e.mkdirSync)((0,f.dirname)(a),{recursive:!0}),(b=new(h())(a)).pragma("journal_mode = WAL"),b.pragma("foreign_keys = ON"),function(a){let b,c=process.env.DRYDOCK_MIGRATIONS??(0,f.resolve)(process.cwd(),"drizzle");try{b=(0,e.readdirSync)(c).filter(a=>a.endsWith(".sql")).sort()}catch{return}a.exec("CREATE TABLE IF NOT EXISTS __migrations (name TEXT PRIMARY KEY)");let d=new Set(a.prepare("SELECT name FROM __migrations").all().map(a=>a.name)),g=a.prepare("INSERT INTO __migrations (name) VALUES (?)");for(let h of b){if(d.has(h))continue;let b=(0,e.readFileSync)((0,f.join)(c,h),"utf8");a.transaction(()=>{for(let c of b.split("--\x3e statement-breakpoint")){let b=c.trim();b&&a.exec(b)}g.run(h)})()}}(b),d=(0,i.f)(b,{schema:j}),Promise.all([c.e(895),c.e(39),c.e(75),c.e(350)]).then(c.bind(c,89350)).then(a=>a.startOrchestrator()).catch(a=>console.error("[orchestrator] bootstrap failed",a))}return d}},63107:()=>{},63787:()=>{},93929:(a,b,c)=>{"use strict";c.r(b),c.d(b,{adrs:()=>n,deploymentHealingSessions:()=>u,followupIssues:()=>o,healingAttempts:()=>r,healingSessions:()=>q,issueSubtasks:()=>t,issues:()=>p,jobEvents:()=>m,jobs:()=>l,prQuestions:()=>v,promptTemplates:()=>k,releaseRuns:()=>w,repos:()=>j,reviewFeedbackItems:()=>s,settings:()=>x});var d=c(90109),e=c(55215),f=c(38151),g=c(71126),h=c(72717),i=c(2049);let j=(0,e.D)("repos",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),path:(0,g.Qq)("path").notNull(),name:(0,g.Qq)("name").notNull(),defaultBranch:(0,g.Qq)("default_branch").notNull().default("main"),queueLabel:(0,g.Qq)("queue_label").notNull().default("drydock:queue"),workingLabel:(0,g.Qq)("working_label").notNull().default("drydock:working"),needsHumanLabel:(0,g.Qq)("needs_human_label").notNull().default("drydock:needs-human"),defaultModel:(0,g.Qq)("default_model").notNull().default("claude-opus-4-7"),agent:(0,g.Qq)("agent").notNull().default("claude"),platform:(0,g.Qq)("platform").notNull().default("github"),apiBaseUrl:(0,g.Qq)("api_base_url"),apiToken:(0,g.Qq)("api_token"),dailyCostLimitUsd:(0,h.x)("daily_cost_limit_usd").notNull().default(10),adrGating:(0,f.nd)("adr_gating",{mode:"boolean"}).notNull().default(!1),sequential:(0,f.nd)("sequential",{mode:"boolean"}).notNull().default(!0),autoTriageEnabled:(0,f.nd)("auto_triage_enabled",{mode:"boolean"}).notNull().default(!1),autoProcessEnabled:(0,f.nd)("auto_process_enabled",{mode:"boolean"}).notNull().default(!1),autoHealCi:(0,f.nd)("auto_heal_ci",{mode:"boolean"}).notNull().default(!1),autoReviewFeedback:(0,f.nd)("auto_review_feedback",{mode:"boolean"}).notNull().default(!1),autoResolveMergeConflicts:(0,f.nd)("auto_resolve_merge_conflicts",{mode:"boolean"}).notNull().default(!1),includeProgressReplies:(0,f.nd)("include_progress_replies",{mode:"boolean"}).notNull().default(!1),autoDecompose:(0,f.nd)("auto_decompose",{mode:"boolean"}).notNull().default(!1),verifyPr:(0,f.nd)("verify_pr",{mode:"boolean"}).notNull().default(!1),autoHealDeployments:(0,f.nd)("auto_heal_deployments",{mode:"boolean"}).notNull().default(!1),deploymentPlatform:(0,g.Qq)("deployment_platform"),trustedReviewers:(0,g.Qq)("trusted_reviewers").notNull().default("[]"),ignoredBots:(0,g.Qq)("ignored_bots").notNull().default('["dependabot[bot]","github-actions[bot]","codecov[bot]"]'),readyLabels:(0,g.Qq)("ready_labels").notNull().default('["ready","ready-for-agent","ready-to-work"]'),blockingLabels:(0,g.Qq)("blocking_labels").notNull().default('["blocked","question","needs-human","needs-discussion","wontfix","duplicate","invalid"]'),autoLabelWhitelist:(0,g.Qq)("auto_label_whitelist").notNull().default('["bug","enhancement","documentation","ready"]'),priorityAuthors:(0,g.Qq)("priority_authors").notNull().default("[]"),minAuthorAssociation:(0,g.Qq)("min_author_association").notNull().default("approved"),maxAttempts:(0,f.nd)("max_attempts").notNull().default(3),maxJobMinutes:(0,f.nd)("max_job_minutes"),maxCiWaitMinutes:(0,f.nd)("max_ci_wait_minutes"),maxJobCostUsd:(0,h.x)("max_job_cost_usd"),agentInstructions:(0,g.Qq)("agent_instructions"),releaseEnabled:(0,f.nd)("release_enabled",{mode:"boolean"}).notNull().default(!1),webhookSecret:(0,g.Qq)("webhook_secret"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),k=(0,e.D)("prompt_templates",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").references(()=>j.id,{onDelete:"cascade"}),name:(0,g.Qq)("name").notNull(),content:(0,g.Qq)("content").notNull(),version:(0,f.nd)("version").notNull().default(1),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)}),l=(0,e.D)("jobs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),issueNumber:(0,f.nd)("issue_number").notNull(),status:(0,g.Qq)("status").notNull().default("queued"),branch:(0,g.Qq)("branch"),prNumber:(0,f.nd)("pr_number"),sessionId:(0,g.Qq)("session_id"),agent:(0,g.Qq)("agent").notNull().default("claude"),startedAt:(0,f.nd)("started_at"),finishedAt:(0,f.nd)("finished_at"),model:(0,g.Qq)("model"),maxTurns:(0,f.nd)("max_turns").notNull().default(40),totalInputTokens:(0,f.nd)("total_input_tokens").notNull().default(0),totalOutputTokens:(0,f.nd)("total_output_tokens").notNull().default(0),costUsd:(0,h.x)("cost_usd").notNull().default(0),ciRetryCount:(0,f.nd)("ci_retry_count").notNull().default(0),errorMessage:(0,g.Qq)("error_message"),attempts:(0,f.nd)("attempts").notNull().default(0),leaseToken:(0,g.Qq)("lease_token"),leaseExpiresAt:(0,f.nd)("lease_expires_at"),workerId:(0,g.Qq)("worker_id"),availableAt:(0,f.nd)("available_at"),dedupeKey:(0,g.Qq)("dedupe_key"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoIdx:(0,i.Pe)("jobs_repo_idx").on(a.repoId),statusIdx:(0,i.Pe)("jobs_status_idx").on(a.status),leaseIdx:(0,i.Pe)("jobs_lease_idx").on(a.leaseExpiresAt),dedupeActiveUnique:(0,i.GL)("jobs_dedupe_active_unique").on(a.dedupeKey).where((0,d.ll)`${a.dedupeKey} is not null and ${a.status} not in ('merged', 'aborted')`)})),m=(0,e.D)("job_events",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),ts:(0,f.nd)("ts").notNull().default((0,d.ll)`(unixepoch())`),type:(0,g.Qq)("type").notNull(),payload:(0,g.Qq)("payload").notNull().default("{}")},a=>({jobTsIdx:(0,i.Pe)("job_events_job_ts_idx").on(a.jobId,a.ts)})),n=(0,e.D)("adrs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").references(()=>l.id,{onDelete:"set null"}),repoId:(0,f.nd)("repo_id").references(()=>j.id,{onDelete:"cascade"}),filePath:(0,g.Qq)("file_path").notNull(),title:(0,g.Qq)("title").notNull(),status:(0,g.Qq)("status").notNull().default("pending_review"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),o=(0,e.D)("followup_issues",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").references(()=>l.id,{onDelete:"set null"}),ghIssueNumber:(0,f.nd)("gh_issue_number").notNull(),title:(0,g.Qq)("title").notNull(),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),p=(0,e.D)("issues",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),number:(0,f.nd)("number").notNull(),title:(0,g.Qq)("title").notNull(),labels:(0,g.Qq)("labels").notNull().default("[]"),state:(0,g.Qq)("state").notNull().default("open"),priority:(0,f.nd)("priority").notNull().default(0),triageHash:(0,g.Qq)("triage_hash"),triagedAt:(0,f.nd)("triaged_at"),decomposedHash:(0,g.Qq)("decomposed_hash"),syncedAt:(0,f.nd)("synced_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoNumberUnique:(0,i.GL)("issues_repo_number_unique").on(a.repoId,a.number),repoPriorityIdx:(0,i.Pe)("issues_repo_priority_idx").on(a.repoId,a.priority)})),q=(0,e.D)("healing_sessions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),headSha:(0,g.Qq)("head_sha").notNull(),status:(0,g.Qq)("status").notNull().default("triaging"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("healing_sessions_job_idx").on(a.jobId),prShaIdx:(0,i.Pe)("healing_sessions_pr_sha_idx").on(a.prNumber,a.headSha)})),r=(0,e.D)("healing_attempts",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),sessionId:(0,f.nd)("session_id").notNull().references(()=>q.id,{onDelete:"cascade"}),fingerprint:(0,g.Qq)("fingerprint").notNull(),category:(0,g.Qq)("category").notNull(),checkName:(0,g.Qq)("check_name").notNull(),status:(0,g.Qq)("status").notNull().default("repairing"),beforeSha:(0,g.Qq)("before_sha"),afterSha:(0,g.Qq)("after_sha"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({sessionIdx:(0,i.Pe)("healing_attempts_session_idx").on(a.sessionId),fingerprintIdx:(0,i.Pe)("healing_attempts_fingerprint_idx").on(a.sessionId,a.fingerprint)})),s=(0,e.D)("review_feedback_items",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),threadId:(0,g.Qq)("thread_id").notNull(),reviewer:(0,g.Qq)("reviewer").notNull(),classification:(0,g.Qq)("classification").notNull(),status:(0,g.Qq)("status").notNull().default("pending"),attempts:(0,f.nd)("attempts").notNull().default(0),detail:(0,g.Qq)("detail"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("review_feedback_job_idx").on(a.jobId),jobThreadUnique:(0,i.GL)("review_feedback_job_thread_unique").on(a.jobId,a.threadId)})),t=(0,e.D)("issue_subtasks",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),issueNumber:(0,f.nd)("issue_number").notNull(),ordinal:(0,f.nd)("ordinal").notNull(),title:(0,g.Qq)("title").notNull(),status:(0,g.Qq)("status").notNull().default("pending"),bodyHash:(0,g.Qq)("body_hash").notNull(),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({issueIdx:(0,i.Pe)("issue_subtasks_issue_idx").on(a.repoId,a.issueNumber),issueOrdinalUnique:(0,i.GL)("issue_subtasks_issue_ordinal_unique").on(a.repoId,a.issueNumber,a.ordinal)})),u=(0,e.D)("deployment_healing_sessions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),platform:(0,g.Qq)("platform").notNull(),commitSha:(0,g.Qq)("commit_sha").notNull(),status:(0,g.Qq)("status").notNull().default("monitoring"),logsExcerpt:(0,g.Qq)("logs_excerpt"),followupPrNumber:(0,f.nd)("followup_pr_number"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("deployment_healing_job_idx").on(a.jobId),jobShaUnique:(0,i.GL)("deployment_healing_job_sha_unique").on(a.jobId,a.commitSha)})),v=(0,e.D)("pr_questions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),question:(0,g.Qq)("question").notNull(),answer:(0,g.Qq)("answer"),status:(0,g.Qq)("status").notNull().default("answering"),errorMessage:(0,g.Qq)("error_message"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("pr_questions_job_idx").on(a.jobId)})),w=(0,e.D)("release_runs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),mode:(0,g.Qq)("mode").notNull().default("auto"),triggerPrNumber:(0,f.nd)("trigger_pr_number"),triggerSha:(0,g.Qq)("trigger_sha"),status:(0,g.Qq)("status").notNull().default("detected"),bump:(0,g.Qq)("bump"),fromTag:(0,g.Qq)("from_tag"),tag:(0,g.Qq)("tag"),title:(0,g.Qq)("title"),notes:(0,g.Qq)("notes"),prNumbers:(0,g.Qq)("pr_numbers").notNull().default("[]"),errorMessage:(0,g.Qq)("error_message"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoIdx:(0,i.Pe)("release_runs_repo_idx").on(a.repoId),triggerUnique:(0,i.GL)("release_runs_trigger_unique").on(a.repoId,a.triggerSha).where((0,d.ll)`${a.triggerSha} is not null`)})),x=(0,e.D)("settings",{key:(0,g.Qq)("key").primaryKey(),value:(0,g.Qq)("value").notNull()})}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=710,exports.ids=[710],exports.modules={55710:(a,b,c)=>{let d;c.d(b,{Lf:()=>k});var e=c(73024),f=c(76760),g=c(87550),h=c.n(g),i=c(61609),j=c(84654);function k(){if(!d){var a;let b;":memory:"!==(a=process.env.DRYDOCK_DB??(0,f.resolve)(process.cwd(),"data/drydock.db"))&&(0,e.mkdirSync)((0,f.dirname)(a),{recursive:!0}),(b=new(h())(a)).pragma("journal_mode = WAL"),b.pragma("foreign_keys = ON"),function(a){let b,c=process.env.DRYDOCK_MIGRATIONS??(0,f.resolve)(process.cwd(),"drizzle");try{b=(0,e.readdirSync)(c).filter(a=>a.endsWith(".sql")).sort()}catch{return}a.exec("CREATE TABLE IF NOT EXISTS __migrations (name TEXT PRIMARY KEY)");let d=new Set(a.prepare("SELECT name FROM __migrations").all().map(a=>a.name)),g=a.prepare("INSERT INTO __migrations (name) VALUES (?)");for(let h of b){if(d.has(h))continue;let b=(0,e.readFileSync)((0,f.join)(c,h),"utf8");a.transaction(()=>{for(let c of b.split("--\x3e statement-breakpoint")){let b=c.trim();b&&a.exec(b)}g.run(h)})()}}(b),d=(0,i.f)(b,{schema:j}),Promise.all([c.e(579),c.e(9),c.e(447),c.e(507)]).then(c.bind(c,61195)).then(a=>a.startOrchestrator()).catch(a=>console.error("[orchestrator] bootstrap failed",a))}return d}},84654:(a,b,c)=>{c.r(b),c.d(b,{adrs:()=>n,deploymentHealingSessions:()=>u,followupIssues:()=>o,healingAttempts:()=>r,healingSessions:()=>q,issueSubtasks:()=>t,issues:()=>p,jobEvents:()=>m,jobs:()=>l,prQuestions:()=>v,promptTemplates:()=>k,releaseRuns:()=>w,repos:()=>j,reviewFeedbackItems:()=>s,settings:()=>x});var d=c(94448),e=c(25356),f=c(95584),g=c(71139),h=c(73042),i=c(73126);let j=(0,e.D)("repos",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),path:(0,g.Qq)("path").notNull(),name:(0,g.Qq)("name").notNull(),defaultBranch:(0,g.Qq)("default_branch").notNull().default("main"),queueLabel:(0,g.Qq)("queue_label").notNull().default("drydock:queue"),workingLabel:(0,g.Qq)("working_label").notNull().default("drydock:working"),needsHumanLabel:(0,g.Qq)("needs_human_label").notNull().default("drydock:needs-human"),defaultModel:(0,g.Qq)("default_model").notNull().default("claude-opus-4-7"),agent:(0,g.Qq)("agent").notNull().default("claude"),platform:(0,g.Qq)("platform").notNull().default("github"),apiBaseUrl:(0,g.Qq)("api_base_url"),apiToken:(0,g.Qq)("api_token"),dailyCostLimitUsd:(0,h.x)("daily_cost_limit_usd").notNull().default(10),adrGating:(0,f.nd)("adr_gating",{mode:"boolean"}).notNull().default(!1),sequential:(0,f.nd)("sequential",{mode:"boolean"}).notNull().default(!0),autoTriageEnabled:(0,f.nd)("auto_triage_enabled",{mode:"boolean"}).notNull().default(!1),autoProcessEnabled:(0,f.nd)("auto_process_enabled",{mode:"boolean"}).notNull().default(!1),autoHealCi:(0,f.nd)("auto_heal_ci",{mode:"boolean"}).notNull().default(!1),autoReviewFeedback:(0,f.nd)("auto_review_feedback",{mode:"boolean"}).notNull().default(!1),autoResolveMergeConflicts:(0,f.nd)("auto_resolve_merge_conflicts",{mode:"boolean"}).notNull().default(!1),includeProgressReplies:(0,f.nd)("include_progress_replies",{mode:"boolean"}).notNull().default(!1),autoDecompose:(0,f.nd)("auto_decompose",{mode:"boolean"}).notNull().default(!1),verifyPr:(0,f.nd)("verify_pr",{mode:"boolean"}).notNull().default(!1),autoHealDeployments:(0,f.nd)("auto_heal_deployments",{mode:"boolean"}).notNull().default(!1),deploymentPlatform:(0,g.Qq)("deployment_platform"),trustedReviewers:(0,g.Qq)("trusted_reviewers").notNull().default("[]"),ignoredBots:(0,g.Qq)("ignored_bots").notNull().default('["dependabot[bot]","github-actions[bot]","codecov[bot]"]'),readyLabels:(0,g.Qq)("ready_labels").notNull().default('["ready","ready-for-agent","ready-to-work"]'),blockingLabels:(0,g.Qq)("blocking_labels").notNull().default('["blocked","question","needs-human","needs-discussion","wontfix","duplicate","invalid"]'),autoLabelWhitelist:(0,g.Qq)("auto_label_whitelist").notNull().default('["bug","enhancement","documentation","ready"]'),priorityAuthors:(0,g.Qq)("priority_authors").notNull().default("[]"),minAuthorAssociation:(0,g.Qq)("min_author_association").notNull().default("approved"),maxAttempts:(0,f.nd)("max_attempts").notNull().default(3),maxJobMinutes:(0,f.nd)("max_job_minutes"),maxCiWaitMinutes:(0,f.nd)("max_ci_wait_minutes"),maxJobCostUsd:(0,h.x)("max_job_cost_usd"),agentInstructions:(0,g.Qq)("agent_instructions"),releaseEnabled:(0,f.nd)("release_enabled",{mode:"boolean"}).notNull().default(!1),webhookSecret:(0,g.Qq)("webhook_secret"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),k=(0,e.D)("prompt_templates",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").references(()=>j.id,{onDelete:"cascade"}),name:(0,g.Qq)("name").notNull(),content:(0,g.Qq)("content").notNull(),version:(0,f.nd)("version").notNull().default(1),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)}),l=(0,e.D)("jobs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),issueNumber:(0,f.nd)("issue_number").notNull(),status:(0,g.Qq)("status").notNull().default("queued"),branch:(0,g.Qq)("branch"),prNumber:(0,f.nd)("pr_number"),sessionId:(0,g.Qq)("session_id"),agent:(0,g.Qq)("agent").notNull().default("claude"),startedAt:(0,f.nd)("started_at"),finishedAt:(0,f.nd)("finished_at"),model:(0,g.Qq)("model"),maxTurns:(0,f.nd)("max_turns").notNull().default(40),totalInputTokens:(0,f.nd)("total_input_tokens").notNull().default(0),totalOutputTokens:(0,f.nd)("total_output_tokens").notNull().default(0),costUsd:(0,h.x)("cost_usd").notNull().default(0),ciRetryCount:(0,f.nd)("ci_retry_count").notNull().default(0),errorMessage:(0,g.Qq)("error_message"),attempts:(0,f.nd)("attempts").notNull().default(0),leaseToken:(0,g.Qq)("lease_token"),leaseExpiresAt:(0,f.nd)("lease_expires_at"),workerId:(0,g.Qq)("worker_id"),availableAt:(0,f.nd)("available_at"),dedupeKey:(0,g.Qq)("dedupe_key"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoIdx:(0,i.Pe)("jobs_repo_idx").on(a.repoId),statusIdx:(0,i.Pe)("jobs_status_idx").on(a.status),leaseIdx:(0,i.Pe)("jobs_lease_idx").on(a.leaseExpiresAt),dedupeActiveUnique:(0,i.GL)("jobs_dedupe_active_unique").on(a.dedupeKey).where((0,d.ll)`${a.dedupeKey} is not null and ${a.status} not in ('merged', 'aborted')`)})),m=(0,e.D)("job_events",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),ts:(0,f.nd)("ts").notNull().default((0,d.ll)`(unixepoch())`),type:(0,g.Qq)("type").notNull(),payload:(0,g.Qq)("payload").notNull().default("{}")},a=>({jobTsIdx:(0,i.Pe)("job_events_job_ts_idx").on(a.jobId,a.ts)})),n=(0,e.D)("adrs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").references(()=>l.id,{onDelete:"set null"}),repoId:(0,f.nd)("repo_id").references(()=>j.id,{onDelete:"cascade"}),filePath:(0,g.Qq)("file_path").notNull(),title:(0,g.Qq)("title").notNull(),status:(0,g.Qq)("status").notNull().default("pending_review"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),o=(0,e.D)("followup_issues",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").references(()=>l.id,{onDelete:"set null"}),ghIssueNumber:(0,f.nd)("gh_issue_number").notNull(),title:(0,g.Qq)("title").notNull(),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)}),p=(0,e.D)("issues",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),number:(0,f.nd)("number").notNull(),title:(0,g.Qq)("title").notNull(),labels:(0,g.Qq)("labels").notNull().default("[]"),state:(0,g.Qq)("state").notNull().default("open"),priority:(0,f.nd)("priority").notNull().default(0),triageHash:(0,g.Qq)("triage_hash"),triagedAt:(0,f.nd)("triaged_at"),decomposedHash:(0,g.Qq)("decomposed_hash"),syncedAt:(0,f.nd)("synced_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoNumberUnique:(0,i.GL)("issues_repo_number_unique").on(a.repoId,a.number),repoPriorityIdx:(0,i.Pe)("issues_repo_priority_idx").on(a.repoId,a.priority)})),q=(0,e.D)("healing_sessions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),headSha:(0,g.Qq)("head_sha").notNull(),status:(0,g.Qq)("status").notNull().default("triaging"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("healing_sessions_job_idx").on(a.jobId),prShaIdx:(0,i.Pe)("healing_sessions_pr_sha_idx").on(a.prNumber,a.headSha)})),r=(0,e.D)("healing_attempts",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),sessionId:(0,f.nd)("session_id").notNull().references(()=>q.id,{onDelete:"cascade"}),fingerprint:(0,g.Qq)("fingerprint").notNull(),category:(0,g.Qq)("category").notNull(),checkName:(0,g.Qq)("check_name").notNull(),status:(0,g.Qq)("status").notNull().default("repairing"),beforeSha:(0,g.Qq)("before_sha"),afterSha:(0,g.Qq)("after_sha"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({sessionIdx:(0,i.Pe)("healing_attempts_session_idx").on(a.sessionId),fingerprintIdx:(0,i.Pe)("healing_attempts_fingerprint_idx").on(a.sessionId,a.fingerprint)})),s=(0,e.D)("review_feedback_items",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),threadId:(0,g.Qq)("thread_id").notNull(),reviewer:(0,g.Qq)("reviewer").notNull(),classification:(0,g.Qq)("classification").notNull(),status:(0,g.Qq)("status").notNull().default("pending"),attempts:(0,f.nd)("attempts").notNull().default(0),detail:(0,g.Qq)("detail"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("review_feedback_job_idx").on(a.jobId),jobThreadUnique:(0,i.GL)("review_feedback_job_thread_unique").on(a.jobId,a.threadId)})),t=(0,e.D)("issue_subtasks",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),issueNumber:(0,f.nd)("issue_number").notNull(),ordinal:(0,f.nd)("ordinal").notNull(),title:(0,g.Qq)("title").notNull(),status:(0,g.Qq)("status").notNull().default("pending"),bodyHash:(0,g.Qq)("body_hash").notNull(),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({issueIdx:(0,i.Pe)("issue_subtasks_issue_idx").on(a.repoId,a.issueNumber),issueOrdinalUnique:(0,i.GL)("issue_subtasks_issue_ordinal_unique").on(a.repoId,a.issueNumber,a.ordinal)})),u=(0,e.D)("deployment_healing_sessions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),platform:(0,g.Qq)("platform").notNull(),commitSha:(0,g.Qq)("commit_sha").notNull(),status:(0,g.Qq)("status").notNull().default("monitoring"),logsExcerpt:(0,g.Qq)("logs_excerpt"),followupPrNumber:(0,f.nd)("followup_pr_number"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("deployment_healing_job_idx").on(a.jobId),jobShaUnique:(0,i.GL)("deployment_healing_job_sha_unique").on(a.jobId,a.commitSha)})),v=(0,e.D)("pr_questions",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),jobId:(0,f.nd)("job_id").notNull().references(()=>l.id,{onDelete:"cascade"}),prNumber:(0,f.nd)("pr_number").notNull(),question:(0,g.Qq)("question").notNull(),answer:(0,g.Qq)("answer"),status:(0,g.Qq)("status").notNull().default("answering"),errorMessage:(0,g.Qq)("error_message"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({jobIdx:(0,i.Pe)("pr_questions_job_idx").on(a.jobId)})),w=(0,e.D)("release_runs",{id:(0,f.nd)("id").primaryKey({autoIncrement:!0}),repoId:(0,f.nd)("repo_id").notNull().references(()=>j.id,{onDelete:"cascade"}),mode:(0,g.Qq)("mode").notNull().default("auto"),triggerPrNumber:(0,f.nd)("trigger_pr_number"),triggerSha:(0,g.Qq)("trigger_sha"),status:(0,g.Qq)("status").notNull().default("detected"),bump:(0,g.Qq)("bump"),fromTag:(0,g.Qq)("from_tag"),tag:(0,g.Qq)("tag"),title:(0,g.Qq)("title"),notes:(0,g.Qq)("notes"),prNumbers:(0,g.Qq)("pr_numbers").notNull().default("[]"),errorMessage:(0,g.Qq)("error_message"),createdAt:(0,f.nd)("created_at").notNull().default((0,d.ll)`(unixepoch())`),updatedAt:(0,f.nd)("updated_at").notNull().default((0,d.ll)`(unixepoch())`)},a=>({repoIdx:(0,i.Pe)("release_runs_repo_idx").on(a.repoId),triggerUnique:(0,i.GL)("release_runs_trigger_unique").on(a.repoId,a.triggerSha).where((0,d.ll)`${a.triggerSha} is not null`)})),x=(0,e.D)("settings",{key:(0,g.Qq)("key").primaryKey(),value:(0,g.Qq)("value").notNull()})}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=75,exports.ids=[75],exports.modules={34717:(a,b,c)=>{c.d(b,{v0:()=>j,tm:()=>k,Dn:()=>m,Cq:()=>l});var d=c(37003),e=c(97337),f=c(2937),g=c(93929);let h={detected:["evaluating","error"],evaluating:["proposed","skipped","error"],proposed:["publishing","skipped","error"],publishing:["published","error"],published:[],skipped:[],error:["evaluating"]};class i extends Error{constructor(a,b){super(`invalid release transition: ${a} -> ${b}`)}}function j(a,b=(0,f.Lf)()){let c=a.triggerSha??null;if(null!==c){let e=b.select().from(g.releaseRuns).where((0,d.Uo)((0,d.eq)(g.releaseRuns.repoId,a.repoId),(0,d.eq)(g.releaseRuns.triggerSha,c))).get();if(e)return e}return b.insert(g.releaseRuns).values({repoId:a.repoId,mode:a.mode,triggerPrNumber:a.triggerPrNumber??null,triggerSha:c}).returning().get()}function k(a,b=(0,f.Lf)()){return b.select().from(g.releaseRuns).where((0,d.eq)(g.releaseRuns.id,a)).get()}function l(a,b,c={},e=(0,f.Lf)()){let j=k(a,e);if(!j)throw Error(`release run ${a} not found`);var m=j.status;if(!h[m].includes(b))throw new i(m,b);let{prNumbers:n,...o}=c;return e.update(g.releaseRuns).set({status:b,updatedAt:Math.floor(Date.now()/1e3),...o,...void 0!==n?{prNumbers:JSON.stringify(n)}:{}}).where((0,d.eq)(g.releaseRuns.id,a)).returning().get()}function m(a,b=(0,f.Lf)(),c=10){return b.select().from(g.releaseRuns).where((0,d.eq)(g.releaseRuns.repoId,a)).orderBy((0,e.i)(g.releaseRuns.updatedAt),(0,e.i)(g.releaseRuns.id)).limit(c).all().map(a=>({id:a.id,mode:a.mode,status:a.status,triggerPrNumber:a.triggerPrNumber,fromTag:a.fromTag,tag:a.tag,title:a.title,prNumbers:function(a){try{let b=JSON.parse(a);return Array.isArray(b)?b.filter(a=>"number"==typeof a):[]}catch{return[]}}(a.prNumbers),errorMessage:a.errorMessage,updatedAt:a.updatedAt}))}},46146:(a,b,c)=>{c.d(b,{ad:()=>j,eV:()=>k,SR:()=>n,eY:()=>o,FL:()=>l,ED:()=>r,LR:()=>q,X:()=>p});var d=c(37003),e=c(97337),f=c(2937),g=c(93929);let h={monitoring:["healthy","failed","escalated"],failed:["repairing","escalated"],repairing:["repaired","escalated"],healthy:[],repaired:[],escalated:[]};class i extends Error{constructor(a,b){super(`invalid deployment-healing transition: ${a} -> ${b}`)}}let j={initialDelayMs:6e4,intervalMs:6e4,timeoutMs:12e5,monitorWindowMs:36e5,maxLogLines:200};function k(a){return"ready"===a?"ready":"error"===a?"error":"pending"}function l(a){let b=a.now-a.createdAt;return b<a.initialDelayMs?"wait":b>=a.timeoutMs?"timeout":a.lastPolledAt<=a.createdAt||a.now-a.lastPolledAt>=a.intervalMs?"poll":"wait"}function m(){return Math.floor(Date.now()/1e3)}function n(a,b,c=(0,f.Lf)()){return c.select().from(g.deploymentHealingSessions).where((0,d.eq)(g.deploymentHealingSessions.jobId,a)).all().some(a=>a.commitSha===b)}function o(a,b,c,e,h=(0,f.Lf)()){let i=h.select().from(g.deploymentHealingSessions).where((0,d.eq)(g.deploymentHealingSessions.jobId,a)).all().find(a=>a.commitSha===e);return i||h.insert(g.deploymentHealingSessions).values({jobId:a,prNumber:b,platform:c,commitSha:e}).returning().get()}function p(a,b,c={},e=(0,f.Lf)()){let j=function(a,b=(0,f.Lf)()){return b.select().from(g.deploymentHealingSessions).where((0,d.eq)(g.deploymentHealingSessions.id,a)).get()}(a,e);if(!j)throw Error(`deployment healing session ${a} not found`);var k=j.status;if(!h[k].includes(b))throw new i(k,b);return e.update(g.deploymentHealingSessions).set({status:b,updatedAt:m(),...c}).where((0,d.eq)(g.deploymentHealingSessions.id,a)).returning().get()}function q(a,b=(0,f.Lf)()){b.update(g.deploymentHealingSessions).set({updatedAt:m()}).where((0,d.eq)(g.deploymentHealingSessions.id,a)).run()}function r(a,b=(0,f.Lf)(),c=10){return b.select({id:g.deploymentHealingSessions.id,jobId:g.deploymentHealingSessions.jobId,issueNumber:g.jobs.issueNumber,prNumber:g.deploymentHealingSessions.prNumber,platform:g.deploymentHealingSessions.platform,commitSha:g.deploymentHealingSessions.commitSha,status:g.deploymentHealingSessions.status,followupPrNumber:g.deploymentHealingSessions.followupPrNumber,updatedAt:g.deploymentHealingSessions.updatedAt}).from(g.deploymentHealingSessions).innerJoin(g.jobs,(0,d.eq)(g.jobs.id,g.deploymentHealingSessions.jobId)).where((0,d.eq)(g.jobs.repoId,a)).orderBy((0,e.i)(g.deploymentHealingSessions.updatedAt)).limit(c).all()}},53566:(a,b,c)=>{c.d(b,{op:()=>m,Bz:()=>x,Az:()=>u,VJ:()=>v,dT:()=>r,ZM:()=>n,ZA:()=>w,Z7:()=>t,Yv:()=>s,I0:()=>o});var d=c(37003),e=c(90109),f=c(97337),g=c(2937),h=c(93929);let i=["healed","blocked","escalated","superseded"],j=["blocked","escalated","superseded"],k={triaging:["awaiting_slot",...j],awaiting_slot:["repairing",...j],repairing:["awaiting_ci",...j],awaiting_ci:["verifying",...j],verifying:["healed","cooldown",...j],cooldown:["awaiting_slot",...j],healed:[],blocked:[],escalated:[],superseded:[]};class l extends Error{constructor(a,b){super(`invalid healing transition: ${a} -> ${b}`)}}let m={maxHealAttemptsPerSession:3,maxHealAttemptsPerFingerprint:2,cooldownMs:9e5,maxConcurrentHealingRuns:1,maxEvidenceLines:200};function n(a){let{failures:b,attempts:c,budgets:d}=a,e=b.filter(a=>"healable_in_branch"===a.category),f=b.filter(a=>"flaky_or_ambiguous"===a.category),g=b.filter(a=>"blocked_external"===a.category);if(0==[...e,...f].length){let a=g[0];return a?{action:"block",reason:`external failure: ${a.checkName}`}:{action:"escalate",reason:"unrecognised CI failure"}}if(c.length>=d.maxHealAttemptsPerSession)return{action:"escalate",reason:"per-session heal budget exhausted"};let h=new Map;for(let a of c)h.set(a.fingerprint,(h.get(a.fingerprint)??0)+1);let i=a=>(h.get(a.fingerprint)??0)<d.maxHealAttemptsPerFingerprint,j=e.find(i)??f.find(i);if(!j)return{action:"escalate",reason:"per-fingerprint heal budget exhausted"};if(a.activeRuns>=d.maxConcurrentHealingRuns)return{action:"wait_slot"};if(null!=a.lastAttemptAt){let b=a.now-a.lastAttemptAt;if(b<d.cooldownMs)return{action:"cooldown",waitMs:d.cooldownMs-b}}return"healable_in_branch"===j.category?{action:"repair",target:j}:{action:"rerun",target:j}}function o(a){return a.afterSha===a.beforeSha?{verdict:"rejected",reason:"no change pushed (no new commit)"}:a.afterFailingCount>=a.beforeFailingCount?{verdict:"rejected",reason:"no measurable improvement in failing checks"}:0===a.afterFailingCount?{verdict:"healed",reason:"all checks green"}:{verdict:"progressed",reason:"fewer checks failing"}}let p=["repairing","awaiting_ci","verifying"];function q(a,b=(0,g.Lf)()){return b.select().from(h.healingSessions).where((0,d.eq)(h.healingSessions.id,a)).get()}function r(a,b,c,e=(0,g.Lf)()){let f=e.select().from(h.healingSessions).where((0,d.eq)(h.healingSessions.prNumber,b)).all();for(let a of f){var j;a.headSha===c||(j=a.status,i.includes(j))||s(a.id,"superseded",e)}let k=f.find(a=>a.headSha===c);return k?q(k.id,e)??k:e.insert(h.healingSessions).values({jobId:a,prNumber:b,headSha:c}).returning().get()}function s(a,b,c=(0,g.Lf)()){let e=q(a,c);if(!e)throw Error(`healing session ${a} not found`);var f=e.status;if(!k[f].includes(b))throw new l(f,b);return c.update(h.healingSessions).set({status:b,updatedAt:Math.floor(Date.now()/1e3)}).where((0,d.eq)(h.healingSessions.id,a)).returning().get()}function t(a,b,c,d=(0,g.Lf)()){return d.insert(h.healingAttempts).values({sessionId:a,fingerprint:b.fingerprint,category:b.category,checkName:b.checkName,beforeSha:c}).returning().get()}function u(a,b,c=(0,g.Lf)()){c.update(h.healingAttempts).set({status:b.status,afterSha:b.afterSha??null}).where((0,d.eq)(h.healingAttempts.id,a)).run()}function v(a,b=(0,g.Lf)()){return b.select().from(h.healingAttempts).where((0,d.eq)(h.healingAttempts.sessionId,a)).all()}function w(a,b=(0,g.Lf)(),c=10){return b.select({id:h.healingSessions.id,jobId:h.healingSessions.jobId,issueNumber:h.jobs.issueNumber,prNumber:h.healingSessions.prNumber,headSha:h.healingSessions.headSha,status:h.healingSessions.status,updatedAt:h.healingSessions.updatedAt,attempts:(0,e.ll)`(select count(*) from ${h.healingAttempts} where ${h.healingAttempts.sessionId} = ${h.healingSessions.id})`}).from(h.healingSessions).innerJoin(h.jobs,(0,d.eq)(h.jobs.id,h.healingSessions.jobId)).where((0,d.eq)(h.jobs.repoId,a)).orderBy((0,f.i)(h.healingSessions.updatedAt)).limit(c).all()}function x(a=(0,g.Lf)()){return a.select().from(h.healingSessions).all().filter(a=>p.includes(a.status)).length}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports.id=777,exports.ids=[777],exports.modules={2210:(a,b,c)=>{"use strict";function d(...a){return a.filter(Boolean).join(" ")}c.d(b,{cn:()=>d})},4356:(a,b,c)=>{"use strict";c.d(b,{d:()=>m,t:()=>l});var d=c(37477),e=c(42700),f=c(95024),g=c(51499),h=c(37561),i=c(54848),j=c(2210);let k=(0,i.createContext)(null);function l({children:a}){let[b,c]=(0,i.useState)([]),e=(0,i.useCallback)(a=>{c(b=>b.filter(b=>b.id!==a))},[]),f=(0,i.useCallback)(a=>{let b=Date.now()+Math.random(),d={id:b,title:a.title,description:a.description,variant:a.variant??"info"};c(a=>[...a,d]),setTimeout(()=>e(b),5e3)},[e]),g=(0,i.useMemo)(()=>({toast:f,success:(a,b)=>f({title:a,description:b,variant:"success"}),error:(a,b)=>f({title:a,description:b,variant:"error"})}),[f]);return(0,d.jsxs)(k.Provider,{value:g,children:[a,(0,d.jsx)(p,{toasts:b,onDismiss:e})]})}function m(){let a=(0,i.useContext)(k);if(!a)throw Error("useToast must be used within a ToastProvider");return a}let n={success:e.A,error:f.A,info:g.A},o={success:"text-success",error:"text-destructive",info:"text-muted-foreground"};function p({toasts:a,onDismiss:b}){return 0===a.length?null:(0,d.jsx)("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[60] flex w-full max-w-sm flex-col gap-2",children:a.map(a=>{let c=n[a.variant];return(0,d.jsxs)("output",{"aria-live":"polite",className:"pointer-events-auto flex items-start gap-3 rounded-xl border border-card-border bg-card p-3 shadow-lg",children:[(0,d.jsx)(c,{className:(0,j.cn)("mt-0.5 h-4 w-4 shrink-0",o[a.variant])}),(0,d.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,d.jsx)("p",{className:"text-sm font-medium",children:a.title}),a.description&&(0,d.jsx)("p",{className:"mt-0.5 text-xs text-muted-foreground",children:a.description})]}),(0,d.jsx)("button",{type:"button","aria-label":"Dismiss notification",onClick:()=>b(a.id),className:"shrink-0 rounded-md p-0.5 text-muted-foreground hover-elevate",children:(0,d.jsx)(h.A,{className:"h-3.5 w-3.5"})})]},a.id)})})}},10520:(a,b,c)=>{"use strict";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}},18008:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>u});var d=c(37477),e=c(60372),f=c(35178),g=c(71416),h=c.n(g),i=c(1087),j=c(43207),k=c(37412),l=c(56556),m=c(54848),n=c(78233);function o(){let{resolvedTheme:a,setTheme:b}=(0,l.D)(),[c,e]=(0,m.useState)(!1),f="dark"===a;return(0,d.jsx)(n.$,{variant:"ghost",size:"icon","aria-label":"Toggle theme",onClick:()=>b(f?"light":"dark"),children:c&&f?(0,d.jsx)(j.A,{}):(0,d.jsx)(k.A,{})})}var p=c(78916),q=c(37561);function r({status:a,installKind:b}){let[c,e]=(0,m.useState)(null),[f,g]=(0,m.useState)(!1);return f&&a.updateAvailable&&a.latestVersion&&a.latestVersion!==c?(0,d.jsxs)("div",{className:"flex items-center gap-1.5 rounded-md border border-success-border bg-success-muted px-2 py-1 text-xs font-medium text-success",children:[(0,d.jsx)(p.A,{className:"h-3.5 w-3.5 shrink-0"}),a.releaseUrl?(0,d.jsxs)("a",{href:a.releaseUrl,target:"_blank",rel:"noreferrer",className:"hover:underline",title:"global"===b?"Run `drydock update` to upgrade":"View the release on GitHub",children:["Update available: v",a.latestVersion]}):(0,d.jsxs)("span",{children:["Update available: v",a.latestVersion]}),"global"===b&&(0,d.jsx)("code",{className:"rounded bg-success/15 px-1 font-mono",children:"drydock update"}),(0,d.jsx)("button",{type:"button",onClick:()=>{try{a.latestVersion&&localStorage.setItem("drydock:update-dismissed",a.latestVersion)}catch{}e(a.latestVersion)},"aria-label":"Dismiss update notice",className:"rounded p-0.5 hover-elevate",children:(0,d.jsx)(q.A,{className:"h-3 w-3"})})]}):null}var s=c(2210);let t=[{href:"/",label:"Dashboard"},{href:"/needs-human",label:"Needs human"},{href:"/prompts",label:"Prompts"},{href:"/adrs",label:"ADRs"},{href:"/costs",label:"Costs"},{href:"/settings",label:"Settings"}];function u({children:a,adrPending:b=0,needsHuman:c=0,paused:g=!1,updateStatus:j,installKind:k="local"}){let l=(0,i.usePathname)();return(0,d.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,d.jsx)("header",{className:"sticky top-0 z-30 border-b border-border bg-background/80 backdrop-blur",children:(0,d.jsxs)("div",{className:"mx-auto flex h-12 max-w-7xl items-center gap-1 px-4",children:[(0,d.jsxs)(h(),{href:"/",className:"mr-3 flex items-center gap-2",children:[(0,d.jsx)("span",{className:"flex h-6 w-6 items-center justify-center rounded-md bg-primary text-primary-foreground",children:(0,d.jsx)(e.A,{className:"h-3.5 w-3.5"})}),(0,d.jsx)("span",{className:"text-sm font-semibold tracking-tight",children:"Drydock"})]}),(0,d.jsx)("nav",{className:"flex items-center gap-0.5",children:t.map(a=>{var e;let f="/"===(e=a.href)?"/"===l:l.startsWith(e);return(0,d.jsxs)(h(),{href:a.href,className:(0,s.cn)("flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm transition-colors hover-elevate",f?"bg-accent font-medium text-accent-foreground":"text-muted-foreground"),children:[a.label,"/adrs"===a.href&&b>0&&(0,d.jsx)("span",{className:"rounded-full bg-destructive px-1.5 text-[10px] font-semibold text-destructive-foreground",children:b}),"/needs-human"===a.href&&c>0&&(0,d.jsx)("span",{className:"rounded-full bg-destructive px-1.5 text-[10px] font-semibold text-destructive-foreground",children:c})]},a.href)})}),(0,d.jsxs)("div",{className:"ml-auto flex items-center gap-2",children:[j&&(0,d.jsx)(r,{status:j,installKind:k}),g&&(0,d.jsxs)(h(),{href:"/settings","aria-label":"Automation paused — open settings",className:"flex items-center gap-1.5 rounded-md border border-warning-border bg-warning-muted px-2 py-1 text-xs font-medium text-warning",children:[(0,d.jsx)(f.A,{className:"h-3.5 w-3.5"}),"Paused"]}),(0,d.jsx)(o,{})]})]})}),(0,d.jsx)("main",{className:"mx-auto max-w-7xl px-4 py-6",children:a})]})}},22674:(a,b,c)=>{Promise.resolve().then(c.bind(c,89402)),Promise.resolve().then(c.bind(c,99168))},24532:(a,b,c)=>{"use strict";c.d(b,{Pe:()=>g,dj:()=>h});var d=c(37003),e=c(2937),f=c(93929);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}},30028:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,74111,23))},36108:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,5381,23))},38593:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>y,dynamic:()=>w,metadata:()=>x});var d=c(39747),e=c(58672),f=c.n(e),g=c(43453),h=c.n(g),i=c(89402),j=c(99168),k=c(24532),l=c(68464),m=c(78293),n=c(73024),o=c(76760);function p(){let a=JSON.parse((0,n.readFileSync)((0,o.join)(process.cwd(),"package.json"),"utf8")).version;return"string"==typeof a?a:null}function q(a={}){let b=a.env??process.env,c=b.DRYDOCK_VERSION?.trim();if(c)return c;let d=a.readPackageVersion??p;try{return d()??"0.0.0"}catch{return"0.0.0"}}var r=c(39889),s=c(10520);let t=null,u=null;async function v(a){let b=a.http??r.D,c=a.repo??"NilsR0711/drydock",d=a.currentVersion??q(),e={updateAvailable:!1,currentVersion:d,latestVersion:null,releaseUrl:null};try{let a=await b(`https://api.github.com/repos/${c}/releases?per_page=20`,{headers:{Accept:"application/vnd.github+json","User-Agent":"drydock-update-check","X-GitHub-Api-Version":"2022-11-28"}});if(!a.ok)return e;let f=function(a){if(!Array.isArray(a))return null;let b=null;for(let c of a){if(!0===c.draft||!0===c.prerelease||"string"!=typeof c.tag_name)continue;let a=(0,s.kf)(c.tag_name);if(!a||null!==a.prerelease)continue;let d=`${a.major}.${a.minor}.${a.patch}`;(!b||(0,s.MQ)(d,b.version))&&(b={version:d,url:"string"==typeof c.html_url?c.html_url:null})}return b}(JSON.parse(a.body));if(!f)return e;return{updateAvailable:(0,s.MQ)(f.version,d),currentVersion:d,latestVersion:f.version,releaseUrl:f.url}}catch{return e}}c(63475);let w="force-dynamic",x={title:"Drydock",description:"Autonomously process GitHub issues via Claude Code"};function y({children:a}){let b=0,c=0,e=!1;try{b=(0,k.dj)(),c=(0,l.zy)().length,e=(0,m.mt)().paused}catch{}let g=function(a={}){let b=a.now??Date.now,c=a.ttlMs??36e5;return(null!==t&&b()-t.fetchedAt<c||u||(function(a={}){let b=a.now??Date.now,c=a.ttlMs??36e5;return t&&b()-t.fetchedAt<c?Promise.resolve(t.status):u||(u=v(a).then(a=>(t={status:a,fetchedAt:b()},a)).finally(()=>{u=null}))})(a).catch(()=>{}),t)?t.status:{updateAvailable:!1,currentVersion:a.currentVersion??q(),latestVersion:null,releaseUrl:null}}(),n=function(a=process.env){let b=a.DRYDOCK_INSTALL_KIND;return"global"===b||"npx"===b?b:"local"}();return(0,d.jsx)("html",{lang:"en",className:`${f().variable} ${h().variable}`,suppressHydrationWarning:!0,children:(0,d.jsx)("body",{children:(0,d.jsx)(j.Providers,{children:(0,d.jsx)(i.AppShell,{adrPending:b,needsHuman:c,paused:e,updateStatus:g,installKind:n,children:a})})})})}},39889:(a,b,c)=>{"use strict";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}),d=await c.text();return{status:c.status,ok:c.ok,body:d}}},51026:(a,b,c)=>{"use strict";c.d(b,{Bt:()=>m,OM:()=>l,YA:()=>k,i_:()=>j});var d=c(90109),e=c(37003),f=c(97337),g=c(2937),h=c(93929);let i=a=>void 0===a?void 0:(0,d.ll)`${h.jobs.repoId} = ${a}`;function j(a=(0,g.Lf)(),b){return a.select({day:(0,d.ll)`strftime('%Y-%m-%d', ${h.jobs.startedAt}, 'unixepoch')`,inputTokens:(0,d.ll)`coalesce(sum(${h.jobs.totalInputTokens}), 0)`,outputTokens:(0,d.ll)`coalesce(sum(${h.jobs.totalOutputTokens}), 0)`,costUsd:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where((0,e.Uo)((0,d.ll)`${h.jobs.startedAt} is not null`,i(b))).groupBy((0,d.ll)`1`).orderBy((0,d.ll)`1 desc`).all()}function k(a=(0,g.Lf)(),b){return a.select({model:(0,d.ll)`coalesce(${h.jobs.model}, 'unknown')`,costUsd:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where(i(b)).groupBy(h.jobs.model).all()}function l(a=10,b=(0,g.Lf)(),c){return b.select().from(h.jobs).where(i(c)).orderBy((0,f.i)(h.jobs.costUsd)).limit(a).all()}function m(a=(0,g.Lf)(),b){let c=(0,d.ll)`strftime('%Y-%m-%d', ${h.jobs.startedAt}, 'unixepoch') = strftime('%Y-%m-%d', 'now')`,f=a.select({total:(0,d.ll)`coalesce(sum(${h.jobs.costUsd}), 0)`}).from(h.jobs).where((0,e.Uo)(c,i(b))).get();return f?.total??0}},63475:()=>{},68464:(a,b,c)=>{"use strict";c.d(b,{L8:()=>j,m:()=>m,uP:()=>i,zC:()=>p,zy:()=>k});var d=c(97337),e=c(37003),f=c(2937),g=c(51026),h=c(93929);function i(a=(0,f.Lf)()){return a.select().from(h.repos).orderBy((0,d.i)(h.repos.createdAt)).all()}function j(a,b=(0,f.Lf)()){return b.select().from(h.repos).where((0,e.eq)(h.repos.id,a)).get()}function k(a=(0,f.Lf)()){return a.select().from(h.jobs).innerJoin(h.repos,(0,e.eq)(h.jobs.repoId,h.repos.id)).where((0,e.eq)(h.jobs.status,"needs_human")).orderBy((0,d.i)(h.jobs.finishedAt)).all().map(a=>({...a.jobs,repoName:a.repos.name}))}let l=["queued","working","ci_running","retrying"];function m(a,b=(0,f.Lf)()){let c=j(a,b);if(!c)return;let g=b.select().from(h.issues).where((0,e.eq)(h.issues.repoId,a)).orderBy((0,d.Y)(h.issues.priority),(0,d.Y)(h.issues.number)).all(),i=b.select().from(h.jobs).where((0,e.eq)(h.jobs.repoId,a)).orderBy((0,d.i)(h.jobs.createdAt)).all();return{repo:c,issues:g,activeJob:i.find(a=>l.includes(a.status)),recentJobs:i.slice(0,8)}}let n=["working","ci_running","retrying"];function o(a){return a.finishedAt??a.startedAt??a.createdAt}function p(a=(0,f.Lf)()){let b=i(a).map(b=>{let c=a.select().from(h.jobs).where((0,e.eq)(h.jobs.repoId,b.id)).orderBy((0,d.Y)(h.jobs.createdAt)).all(),f=a=>c.filter(b=>a.includes(b.status)).length,i=c.filter(a=>n.includes(a.status)).map(a=>({id:a.id,issueNumber:a.issueNumber,status:a.status})),j=c.length?Math.max(...c.map(o)):null,k=f(["needs_human"]),l=f(["ci_failed"]);return{id:b.id,name:b.name,path:b.path,platform:b.platform,queued:f(["queued"]),working:f(["working","retrying"]),ciRunning:f(["ci_running"]),needsHuman:k,inFlight:i,lastActivityAt:j,todaySpend:(0,g.Bt)(a,b.id),attention:k>0||l>0}});return b.sort((a,b)=>{if(a.attention!==b.attention)return a.attention?-1:1;let c=a.inFlight.length>0;if(c!==b.inFlight.length>0)return c?-1:1;let d=a.lastActivityAt??0,e=b.lastActivityAt??0;return d!==e?e-d:a.name.localeCompare(b.name)}),{summary:function(a=(0,f.Lf)()){let b=a.select().from(h.jobs).all(),c=a=>b.filter(b=>a.includes(b.status)).length;return{repos:a.select().from(h.repos).all().length,queued:c(["queued"]),running:c(["working","ci_running","retrying"]),merged:c(["merged"]),needsHuman:c(["needs_human"]),spendToday:(0,g.Bt)(a)}}(a),repos:b}}},69530:(a,b,c)=>{Promise.resolve().then(c.bind(c,18008)),Promise.resolve().then(c.bind(c,75922))},72388:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,74111,23)),Promise.resolve().then(c.t.bind(c,35598,23)),Promise.resolve().then(c.t.bind(c,77192,23)),Promise.resolve().then(c.t.bind(c,22047,23)),Promise.resolve().then(c.t.bind(c,99607,23)),Promise.resolve().then(c.t.bind(c,25241,23)),Promise.resolve().then(c.t.bind(c,60518,23)),Promise.resolve().then(c.t.bind(c,89871,23))},75922:(a,b,c)=>{"use strict";c.d(b,{Providers:()=>g});var d=c(37477),e=c(56556),f=c(4356);function g({children:a}){return(0,d.jsx)(e.N,{attribute:"class",defaultTheme:"light",enableSystem:!1,disableTransitionOnChange:!0,children:(0,d.jsx)(f.t,{children:a})})}},78233:(a,b,c)=>{"use strict";c.d(b,{$:()=>i});var d=c(37477),e=c(54848),f=c(2210);let g={default:"bg-primary text-primary-foreground shadow-xs hover-elevate active-elevate-2",secondary:"bg-secondary text-secondary-foreground hover-elevate active-elevate-2",outline:"border border-border bg-transparent shadow-xs hover-elevate active-elevate-2",destructive:"bg-destructive text-destructive-foreground shadow-xs hover-elevate active-elevate-2",ghost:"border border-transparent hover-elevate active-elevate-2"},h={default:"h-9 px-4 py-2 rounded-lg text-sm",sm:"h-8 px-3 rounded-md text-xs",lg:"h-10 px-8 rounded-lg text-sm",icon:"h-9 w-9 rounded-lg"},i=e.forwardRef(({className:a,variant:b="default",size:c="default",...e},i)=>(0,d.jsx)("button",{ref:i,className:(0,f.cn)("inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors","focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring","disabled:pointer-events-none disabled:opacity-50","[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",g[b],h[c],a),...e}));i.displayName="Button"},78293:(a,b,c)=>{"use strict";c.d(b,{mt:()=>k,Jf:()=>l,DA:()=>m});var d=c(37003),e=c(35895),f=c(2937),g=c(51026),h=c(93929);let i=["needs_human","job_failed","pr_opened","pr_merged","release_published","cost_limit","automation_paused"],j=e.Ik({paused:e.zM().default(!1),dailyCostLimitUsd:e.ai().nonnegative().default(10),pollIntervalSec:e.ai().int().positive().default(30),maxTurns:e.ai().int().positive().default(40),maxJobMinutes:e.ai().int().positive().default(30),maxCiWaitMinutes:e.ai().int().positive().default(60),maxJobCostUsd:e.ai().nonnegative().default(0),releaseManagementEnabled:e.zM().default(!1),defaultModel:e.Yj().default("claude-opus-4-7"),defaultAgent:e.k5(["claude","codex"]).default("claude"),claudePath:e.Yj().default("claude"),codexPath:e.Yj().default("codex"),ghPath:e.Yj().default("gh"),maxParallelJobs:e.ai().int().positive().default(3),telegramBotToken:e.Yj().default(""),telegramChatId:e.Yj().default(""),slackWebhookUrl:e.Yj().default(""),smtpHost:e.Yj().default(""),smtpPort:e.ai().int().positive().default(587),smtpUser:e.Yj().default(""),smtpPass:e.Yj().default(""),emailFrom:e.Yj().default(""),emailTo:e.Yj().default(""),notifyEvents:e.YO(e.k5(i)).default([...i]),retentionDays:e.ai().int().positive().default(30)});function k(a=(0,f.Lf)()){let b=a.select().from(h.settings).where((0,d.eq)(h.settings.key,"global")).get();if(!b)return j.parse({});try{return j.parse(JSON.parse(b.value))}catch{return j.parse({})}}function l(a=(0,f.Lf)()){let b=k(a);return b.paused?{allowed:!1,reason:"paused"}:(0,g.Bt)(a)>=b.dailyCostLimitUsd?{allowed:!1,reason:"cost_limit"}:{allowed:!0}}function m(a,b=(0,f.Lf)()){let c=b.select().from(h.repos).where((0,d.eq)(h.repos.id,a)).get();return!c||(0,g.Bt)(b,a)>=c.dailyCostLimitUsd?{allowed:!1,reason:"repo_cost_limit"}:{allowed:!0}}},89402:(a,b,c)=>{"use strict";c.d(b,{AppShell:()=>d});let d=(0,c(37251).registerClientReference)(function(){throw Error("Attempted to call AppShell() from the server but AppShell is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/drydock/drydock/src/components/app-shell.tsx","AppShell")},96356:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,5381,23)),Promise.resolve().then(c.t.bind(c,45308,23)),Promise.resolve().then(c.t.bind(c,93298,23)),Promise.resolve().then(c.t.bind(c,98181,23)),Promise.resolve().then(c.t.bind(c,10689,23)),Promise.resolve().then(c.t.bind(c,86563,23)),Promise.resolve().then(c.t.bind(c,57548,23)),Promise.resolve().then(c.bind(c,9217))},99168:(a,b,c)=>{"use strict";c.d(b,{Providers:()=>d});let d=(0,c(37251).registerClientReference)(function(){throw Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/drydock/drydock/src/components/providers.tsx","Providers")}};
|