@nilsr0711/drydock 0.1.4 → 0.1.5
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 +2 -2
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- 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 +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- 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/analytics/page.js +2 -2
- package/.next/standalone/.next/server/app/analytics/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/analytics/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/cost/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sse/dashboard/route.js +2 -2
- package/.next/standalone/.next/server/app/api/sse/dashboard/route.js.nft.json +1 -1
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js.nft.json +1 -1
- 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 +3 -3
- 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/jobs/page.js +2 -2
- package/.next/standalone/.next/server/app/jobs/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/jobs/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 +2 -2
- package/.next/standalone/.next/server/chunks/198.js +1 -0
- package/.next/standalone/.next/server/chunks/279.js +1 -0
- package/.next/standalone/.next/server/chunks/318.js +2 -2
- package/.next/standalone/.next/server/chunks/417.js +1 -0
- package/.next/standalone/.next/server/chunks/468.js +3 -3
- package/.next/standalone/.next/server/chunks/471.js +1 -0
- package/.next/standalone/.next/server/chunks/496.js +1 -0
- package/.next/standalone/.next/server/chunks/511.js +1 -0
- package/.next/standalone/.next/server/chunks/665.js +1 -1
- package/.next/standalone/.next/server/chunks/847.js +93 -0
- package/.next/standalone/.next/server/chunks/{868.js → 997.js} +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +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/165-f2c11a8b0992483d.js +1 -0
- package/.next/standalone/.next/static/chunks/174-34fe81abafec07fe.js +1 -0
- package/.next/standalone/.next/static/chunks/188-14494263cefd30a4.js +1 -0
- package/.next/standalone/.next/static/chunks/312-5ab18c6fbb20b9cc.js +1 -0
- package/.next/standalone/.next/static/chunks/381-b0d5a35969fad985.js +1 -0
- package/.next/standalone/.next/static/chunks/540-b0819a434d7516b1.js +1 -0
- package/.next/standalone/.next/static/chunks/586-d7d6e7d3794dcf02.js +32 -0
- package/.next/standalone/.next/static/chunks/730-ae05580815adb9b2.js +1 -0
- package/.next/standalone/.next/static/chunks/736-503f37bb672c129b.js +1 -0
- package/.next/{static/chunks/334-ac65cc1c43f3e786.js → standalone/.next/static/chunks/878-f08fd91a6c00d84b.js} +3 -3
- package/.next/standalone/.next/static/chunks/app/_global-error/page-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/app/_not-found/page-aa469cca9dc68961.js +1 -0
- package/.next/standalone/.next/static/chunks/app/adrs/page-ed0f94a800ba51c8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/analytics/page-2d61245dbc9dd300.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/cost/export/route-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sse/dashboard/route-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/webhooks/[repoId]/route-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/app/costs/page-3eca75e55c68e079.js +1 -0
- package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-528826c79cab6cbb.js +1 -0
- package/.next/standalone/.next/static/chunks/app/jobs/page-70bd2189d7249e3f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/layout-0e04e8b455f51432.js +1 -0
- package/.next/standalone/.next/static/chunks/app/needs-human/page-90cc5147aadb3ebe.js +1 -0
- package/.next/standalone/.next/static/chunks/app/page-a142f2aa01a429d9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/prompts/page-fba107f32faa6568.js +1 -0
- package/.next/standalone/.next/static/chunks/app/repos/[id]/page-0da8e297142d8567.js +1 -0
- package/.next/standalone/.next/static/chunks/app/settings/page-bd473b1d183c3db6.js +1 -0
- package/.next/standalone/.next/static/chunks/ec24c40a-fc218f196ad8b89e.js +1 -0
- package/.next/standalone/.next/static/chunks/framework-3631188fe017d11d.js +1 -0
- package/.next/standalone/.next/static/chunks/main-app-2ce5d113f02aa743.js +1 -0
- package/.next/standalone/.next/static/chunks/main-c73a28f721635e7a.js +5 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-3d82ee7a5f817d84.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-03b9886f969453ed.js +1 -0
- package/.next/standalone/.next/static/css/96c4f935104c1f9a.css +3 -0
- package/.next/standalone/package.json +1 -1
- package/.next/static/chunks/165-f2c11a8b0992483d.js +1 -0
- package/.next/static/chunks/174-34fe81abafec07fe.js +1 -0
- package/.next/static/chunks/188-14494263cefd30a4.js +1 -0
- package/.next/static/chunks/312-5ab18c6fbb20b9cc.js +1 -0
- package/.next/static/chunks/381-b0d5a35969fad985.js +1 -0
- package/.next/static/chunks/540-b0819a434d7516b1.js +1 -0
- package/.next/static/chunks/586-d7d6e7d3794dcf02.js +32 -0
- package/.next/static/chunks/730-ae05580815adb9b2.js +1 -0
- package/.next/static/chunks/736-503f37bb672c129b.js +1 -0
- package/.next/{standalone/.next/static/chunks/334-ac65cc1c43f3e786.js → static/chunks/878-f08fd91a6c00d84b.js} +3 -3
- package/.next/static/chunks/app/_global-error/page-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/app/_not-found/page-aa469cca9dc68961.js +1 -0
- package/.next/static/chunks/app/adrs/page-ed0f94a800ba51c8.js +1 -0
- package/.next/static/chunks/app/analytics/page-2d61245dbc9dd300.js +1 -0
- package/.next/static/chunks/app/api/cost/export/route-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/app/api/sse/dashboard/route-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/app/api/sse/jobs/[id]/route-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[repoId]/route-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/app/costs/page-3eca75e55c68e079.js +1 -0
- package/.next/static/chunks/app/jobs/[id]/page-528826c79cab6cbb.js +1 -0
- package/.next/static/chunks/app/jobs/page-70bd2189d7249e3f.js +1 -0
- package/.next/static/chunks/app/layout-0e04e8b455f51432.js +1 -0
- package/.next/static/chunks/app/needs-human/page-90cc5147aadb3ebe.js +1 -0
- package/.next/static/chunks/app/page-a142f2aa01a429d9.js +1 -0
- package/.next/static/chunks/app/prompts/page-fba107f32faa6568.js +1 -0
- package/.next/static/chunks/app/repos/[id]/page-0da8e297142d8567.js +1 -0
- package/.next/static/chunks/app/settings/page-bd473b1d183c3db6.js +1 -0
- package/.next/static/chunks/ec24c40a-fc218f196ad8b89e.js +1 -0
- package/.next/static/chunks/framework-3631188fe017d11d.js +1 -0
- package/.next/static/chunks/main-app-2ce5d113f02aa743.js +1 -0
- package/.next/static/chunks/main-c73a28f721635e7a.js +5 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-3d82ee7a5f817d84.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-03b9886f969453ed.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-03b9886f969453ed.js +1 -0
- package/.next/static/css/96c4f935104c1f9a.css +3 -0
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/462.js +0 -1
- package/.next/standalone/.next/server/chunks/537.js +0 -1
- package/.next/standalone/.next/server/chunks/675.js +0 -1
- package/.next/standalone/.next/server/chunks/785.js +0 -93
- package/.next/standalone/.next/server/chunks/859.js +0 -1
- package/.next/standalone/.next/static/chunks/0-539cfb6a78b205f0.js +0 -1
- package/.next/standalone/.next/static/chunks/131-754f0b3c6a7625f0.js +0 -1
- package/.next/standalone/.next/static/chunks/488-94313c3750ed9fec.js +0 -1
- package/.next/standalone/.next/static/chunks/586-4f743a204f11d627.js +0 -32
- package/.next/standalone/.next/static/chunks/626-25255b0a66c520cb.js +0 -1
- package/.next/standalone/.next/static/chunks/744-6b71dbc0b45f3dee.js +0 -1
- package/.next/standalone/.next/static/chunks/751-17d24a843c68c75a.js +0 -1
- package/.next/standalone/.next/static/chunks/77-ff0a9221f1786b0e.js +0 -1
- package/.next/standalone/.next/static/chunks/860-5c68ffeb97288824.js +0 -1
- package/.next/standalone/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/app/_not-found/page-fbc46f6809bf01bc.js +0 -1
- package/.next/standalone/.next/static/chunks/app/adrs/page-d427443f113c3575.js +0 -1
- package/.next/standalone/.next/static/chunks/app/analytics/page-4154e54399ac6fb4.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/app/costs/page-85ceb7f167a8095a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-eb2e6d420c330df8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/jobs/page-73240c8c9b0571cf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/layout-717833ce6aaa45ee.js +0 -1
- package/.next/standalone/.next/static/chunks/app/needs-human/page-fd702f6eeab08820.js +0 -1
- package/.next/standalone/.next/static/chunks/app/page-43ce9934744597e6.js +0 -1
- package/.next/standalone/.next/static/chunks/app/prompts/page-ecd6816b8dd8b583.js +0 -1
- package/.next/standalone/.next/static/chunks/app/repos/[id]/page-df838c0805fce188.js +0 -1
- package/.next/standalone/.next/static/chunks/app/settings/page-3274e07b560fc8bc.js +0 -1
- package/.next/standalone/.next/static/chunks/ec24c40a-96b312d151fe54b7.js +0 -1
- package/.next/standalone/.next/static/chunks/framework-79acb3679912dc5b.js +0 -1
- package/.next/standalone/.next/static/chunks/main-a0c070ad11c80668.js +0 -5
- package/.next/standalone/.next/static/chunks/main-app-94b142817f01731e.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-0d321d74b6d9f17c.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +0 -1
- package/.next/standalone/.next/static/css/1f98a1f790475168.css +0 -3
- package/.next/static/chunks/0-539cfb6a78b205f0.js +0 -1
- package/.next/static/chunks/131-754f0b3c6a7625f0.js +0 -1
- package/.next/static/chunks/488-94313c3750ed9fec.js +0 -1
- package/.next/static/chunks/586-4f743a204f11d627.js +0 -32
- package/.next/static/chunks/626-25255b0a66c520cb.js +0 -1
- package/.next/static/chunks/744-6b71dbc0b45f3dee.js +0 -1
- package/.next/static/chunks/751-17d24a843c68c75a.js +0 -1
- package/.next/static/chunks/77-ff0a9221f1786b0e.js +0 -1
- package/.next/static/chunks/860-5c68ffeb97288824.js +0 -1
- package/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/app/_not-found/page-fbc46f6809bf01bc.js +0 -1
- package/.next/static/chunks/app/adrs/page-d427443f113c3575.js +0 -1
- package/.next/static/chunks/app/analytics/page-4154e54399ac6fb4.js +0 -1
- package/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/app/costs/page-85ceb7f167a8095a.js +0 -1
- package/.next/static/chunks/app/jobs/[id]/page-eb2e6d420c330df8.js +0 -1
- package/.next/static/chunks/app/jobs/page-73240c8c9b0571cf.js +0 -1
- package/.next/static/chunks/app/layout-717833ce6aaa45ee.js +0 -1
- package/.next/static/chunks/app/needs-human/page-fd702f6eeab08820.js +0 -1
- package/.next/static/chunks/app/page-43ce9934744597e6.js +0 -1
- package/.next/static/chunks/app/prompts/page-ecd6816b8dd8b583.js +0 -1
- package/.next/static/chunks/app/repos/[id]/page-df838c0805fce188.js +0 -1
- package/.next/static/chunks/app/settings/page-3274e07b560fc8bc.js +0 -1
- package/.next/static/chunks/ec24c40a-96b312d151fe54b7.js +0 -1
- package/.next/static/chunks/framework-79acb3679912dc5b.js +0 -1
- package/.next/static/chunks/main-a0c070ad11c80668.js +0 -5
- package/.next/static/chunks/main-app-94b142817f01731e.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-0d321d74b6d9f17c.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +0 -1
- package/.next/static/css/1f98a1f790475168.css +0 -3
- /package/.next/standalone/.next/static/{eWyghWWF4zppTRQ7rmwde → ImQS3LTFl-iHwI2K1uXy0}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{eWyghWWF4zppTRQ7rmwde → ImQS3LTFl-iHwI2K1uXy0}/_ssgManifest.js +0 -0
- /package/.next/static/{eWyghWWF4zppTRQ7rmwde → ImQS3LTFl-iHwI2K1uXy0}/_buildManifest.js +0 -0
- /package/.next/static/{eWyghWWF4zppTRQ7rmwde → ImQS3LTFl-iHwI2K1uXy0}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=665,exports.ids=[665],exports.modules={20031:(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"}},22157:(a,b,c)=>{let d;c.d(b,{k:()=>j});var e=c(37003),f=c(2937),g=c(93929),h=c(36639);class i{constructor(a=(0,f.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,h.f)(JSON.stringify(b.payload??{})),d=JSON.parse(c),e=this.db.insert(g.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(g.jobEvents).where((0,e.eq)(g.jobEvents.jobId,a)).orderBy(g.jobEvents.ts,g.jobEvents.id).all().slice(-b)}}function j(){return d||(d=new i),d}},23791:(a,b,c)=>{c.d(b,{QJ:()=>g,kl:()=>e});let d={queued:["working","aborted","interrupted"],working:["ci_running","needs_human","aborted","interrupted"],ci_running:["ci_failed","merged","needs_human","aborted","interrupted"],ci_failed:["retrying","needs_human","aborted","interrupted"],retrying:["ci_running","needs_human","aborted","interrupted"],merged:[],needs_human:["queued","aborted"],aborted:[],interrupted:["queued","aborted"]},e=["merged","aborted"];class f extends Error{constructor(a,b){super(`invalid job transition: ${a} -> ${b}`)}}function g(a,b){if(!d[a].includes(b))throw new f(a,b)}},50813:(a,b,c)=>{c.d(b,{F1:()=>l,yO:()=>n,Xm:()=>k,yx:()=>m});var d=c(37003),e=c(97337),f=c(35895),g=c(2937),h=c(93929),i=c(20031);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}function l(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 m(a,b,c=(0,g.Lf)()){return l(a,b,c)?.content??i.E[b]??""}function n(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()}f.Ik({repoId:f.ai().int().positive(),name:f.Yj().min(1),content:f.Yj()})},68476:(a,b,c)=>{c.d(b,{N6:()=>n,_S:()=>j,ax:()=>k,dk:()=>m,i1:()=>o,yM:()=>l});var d=c(37003),e=c(97337),f=c(2937),g=c(93929),h=c(24525),i=c(23791);function j(a,b=(0,f.Lf)()){let c=b.insert(g.jobs).values({repoId:a.repoId,issueNumber:a.issueNumber,status:"queued",model:a.model,agent:a.agent??"claude",maxTurns:a.maxTurns??40,dedupeKey:a.dedupeKey??null}).returning().get();return(0,h.ej)(),c}function k(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.eq)(g.jobs.id,a)).get()}function l(a,b,c,d=(0,f.Lf)()){d.insert(g.jobEvents).values({jobId:a,type:b,payload:JSON.stringify(c??{})}).run()}function m(a,b,c={},e=(0,f.Lf)()){let j=k(a,e);if(!j)throw Error(`job ${a} not found`);(0,i.QJ)(j.status,b);let n=Math.floor(Date.now()/1e3),o={};"working"!==b||j.startedAt||(o.startedAt=n),["merged","needs_human","aborted"].includes(b)&&(o.finishedAt=n);let p=e.update(g.jobs).set({...o,...c,status:b}).where((0,d.eq)(g.jobs.id,a)).returning().get();return l(a,"status",{from:j.status,to:b},e),(0,h.ej)(),p}function n(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.eq)(g.jobs.repoId,a)).orderBy((0,e.i)(g.jobs.createdAt)).all()}function o(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.RV)(g.jobs.status,a)).all()}},99665:(a,b,c)=>{let d,e;c.r(b),c.d(b,{abortAllJobs:()=>b6,abortJob:()=>b5,clearAbort:()=>b4,gracefulShutdown:()=>b7,registerAbort:()=>b3,startOrchestrator:()=>b8});var f=c(37003),g=c(2937),h=c(90109),i=c(78293),j=c(93929),k=c(23226),l=c(36639);let m=[{id:"telegram",isConfigured:a=>!!(a.telegramBotToken&&a.telegramChatId),send:(a,b,c)=>c.postJson(`https://api.telegram.org/bot${b.telegramBotToken}/sendMessage`,{chat_id:b.telegramChatId,text:a})},{id:"slack",isConfigured:a=>!!a.slackWebhookUrl,send:(a,b,c)=>c.postJson(b.slackWebhookUrl,{text:a})},{id:"email",isConfigured:a=>!!(a.smtpHost&&a.emailFrom&&a.emailTo),send:(a,b,c)=>c.sendMail({to:b.emailTo,from:b.emailFrom,subject:"Drydock notification",text:a},{host:b.smtpHost,port:b.smtpPort,user:b.smtpUser,pass:b.smtpPass})}];async function n(a,b,c=(0,g.Lf)(),d=p){var e,f;let h=(0,i.mt)(c);if(!h.notifyEvents.includes(a))return;let j=m.filter(a=>a.isConfigured(h));0!==j.length&&await (e=o(j,b,h,d),f=()=>console.error(`[notify] dispatch for ${a} exceeded 5000ms; continuing in background`),new Promise(a=>{let b=setTimeout(()=>{f(),a()},5e3);b.unref?.();let c=()=>{clearTimeout(b),a()};e.then(c,c)}))}async function o(a,b,c,d){for(let e of a)try{await e.send(b,c,d)}catch(a){console.error(`[notify] ${e.id} delivery failed`,(0,l.f)(String(a)))}}let p={postJson:async(a,b)=>{let c=await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b),signal:AbortSignal.timeout(1e4)});if(!c.ok)throw Error(`HTTP ${c.status}`)},sendMail:async(a,b)=>{let d=(await c.e(537).then(c.t.bind(c,83537,19))).createTransport({host:b.host,port:b.port,secure:465===b.port,auth:b.user?{user:b.user,pass:b.pass}:void 0,connectionTimeout:1e4,greetingTimeout:1e4,socketTimeout:1e4});await d.sendMail(a)}};async function q(a,b,c=(0,g.Lf)(),d=p){a?b.active||(b.active=!0,await n("cost_limit","\uD83D\uDCB8 Daily cost limit reached — new jobs are paused until the budget resets.",c,d)):b.active=!1}async function r(a=(0,g.Lf)(),b=p){await n("automation_paused","\uD83C\uDF19 Automation draining — finishing in-flight jobs, then shutting down.",a,b)}var s=c(68476),t=c(77598),u=c(48161),v=c(23791);let w=()=>Math.floor(Date.now()/1e3);function x(){return d||(d=`${(0,u.hostname)()}#${process.pid}`),d}function y(a={},b=(0,g.Lf)()){let c=a.now??w(),d=a.expiredBefore,e=void 0===d?void 0:(0,f.or)((0,f.kZ)(j.jobs.leaseExpiresAt),(0,f.wJ)(j.jobs.leaseExpiresAt,d)),h=b.select().from(j.jobs).where((0,f.Uo)((0,f.eq)(j.jobs.status,"working"),e)).all();for(let a of h)b.update(j.jobs).set({status:"queued",leaseToken:null,leaseExpiresAt:null,workerId:null,availableAt:c+function(a,b=5,c=300){return a<=0?0:Math.min(b*2**(a-1),c)}(a.attempts)}).where((0,f.eq)(j.jobs.id,a.id)).run(),(0,s.yM)(a.id,"status",{from:"working",to:"queued",reason:"lease_expired"},b);return h.length}let z=["ci_running","ci_failed","retrying"],A={"claude-opus-4-8":{inputPerMTok:5,outputPerMTok:25,cacheWritePerMTok:6.25,cacheReadPerMTok:.5},"claude-opus-4-7":{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5},"claude-sonnet-4-5":{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3},"claude-haiku-4-5":{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}},B=Object.values(A).reduce((a,b)=>b.outputPerMTok>a.outputPerMTok?b:a,{inputPerMTok:0,outputPerMTok:0,cacheWritePerMTok:0,cacheReadPerMTok:0});var C=c(35895);let D=C.Ik({input_tokens:C.ai().optional(),output_tokens:C.ai().optional(),cache_creation_input_tokens:C.ai().optional(),cache_read_input_tokens:C.ai().optional()}).passthrough(),E=C.Ik({type:C.eu("system"),subtype:C.Yj().optional(),session_id:C.Yj().optional(),model:C.Yj().optional()}),F=C.Ik({type:C.eu("assistant"),message:C.Ik({role:C.eu("assistant"),content:C.YO(C.g1(C.Yj(),C.L5())),usage:D.optional()})}),G=C.Ik({type:C.eu("user"),message:C.Ik({role:C.eu("user"),content:C.YO(C.g1(C.Yj(),C.L5()))})}),H=C.Ik({type:C.eu("result"),subtype:C.Yj().optional(),session_id:C.Yj().optional(),is_error:C.zM().optional(),total_cost_usd:C.ai().optional(),usage:D.optional()}),I=C.gM("type",[E,F,G,H]);function J(a){return a instanceof Error?a.message:String(a)}function K(a){let b=[];for(let c of a)"text"===c.type&&"string"==typeof c.text?b.push({kind:"text",text:c.text}):"tool_use"===c.type?b.push({kind:"tool_use",name:String(c.name??"unknown"),id:String(c.id??""),input:c.input}):"tool_result"===c.type&&b.push({kind:"tool_result",toolUseId:String(c.tool_use_id??""),isError:!!c.is_error});return b}class L{push(a){this.buffer+=a;let b=[],c=this.buffer.indexOf("\n");for(;-1!==c;){let a=this.buffer.slice(0,c);this.buffer=this.buffer.slice(c+1);let d=this.consume(a);d&&b.push(d),c=this.buffer.indexOf("\n")}return b}flush(){let a=this.buffer;this.buffer="";let b=this.consume(a);return b?[b]:[]}consume(a){let b;try{b=function(a){var b;let c,d=a.trim();if(!d)return null;let e=JSON.parse(d);return c={type:(b=I.parse(e)).type,chunks:[],inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0,isError:!1,raw:b},"system"===b.type?(c.sessionId=b.session_id,c.model=b.model):"assistant"===b.type?(c.chunks=K(b.message.content),c.inputTokens=b.message.usage?.input_tokens??0,c.outputTokens=b.message.usage?.output_tokens??0,c.cacheCreationInputTokens=b.message.usage?.cache_creation_input_tokens??0,c.cacheReadInputTokens=b.message.usage?.cache_read_input_tokens??0):"user"===b.type?c.chunks=K(b.message.content):(c.sessionId=b.session_id,c.costUsd=b.total_cost_usd,c.inputTokens=b.usage?.input_tokens??0,c.outputTokens=b.usage?.output_tokens??0,c.cacheCreationInputTokens=b.usage?.cache_creation_input_tokens??0,c.cacheReadInputTokens=b.usage?.cache_read_input_tokens??0,c.isError=b.is_error??!1),c}(a)}catch(b){return this.onParseError?.({line:a.trim(),message:J(b)}),null}return b?(b.sessionId&&(this.sessionId=b.sessionId),b.model&&(this.model=b.model),"result"===b.type?(b.inputTokens>0&&(this.totalInputTokens=b.inputTokens),b.outputTokens>0&&(this.totalOutputTokens=b.outputTokens),b.cacheReadInputTokens>0&&(this.totalCacheReadInputTokens=b.cacheReadInputTokens),void 0!==b.costUsd&&(this.costUsd=b.costUsd)):(this.totalInputTokens+=b.inputTokens,this.totalOutputTokens+=b.outputTokens,this.totalCacheCreationInputTokens+=b.cacheCreationInputTokens,this.totalCacheReadInputTokens+=b.cacheReadInputTokens),b):null}constructor(){this.buffer="",this.totalInputTokens=0,this.totalOutputTokens=0,this.totalCacheCreationInputTokens=0,this.totalCacheReadInputTokens=0,this.costUsd=0}}let M="gpt-5-codex",N={"gpt-5-codex":{inputPerMTok:1.25,outputPerMTok:10,cacheWritePerMTok:0,cacheReadPerMTok:0},"gpt-5":{inputPerMTok:1.25,outputPerMTok:10,cacheWritePerMTok:0,cacheReadPerMTok:0},"gpt-5-mini":{inputPerMTok:.25,outputPerMTok:2,cacheWritePerMTok:0,cacheReadPerMTok:0}},O=Object.values(N).reduce((a,b)=>b.outputPerMTok>a.outputPerMTok?b:a,{inputPerMTok:0,outputPerMTok:0,cacheWritePerMTok:0,cacheReadPerMTok:0}),P=C.Ik({input_tokens:C.ai().optional(),cached_input_tokens:C.ai().optional(),output_tokens:C.ai().optional(),reasoning_output_tokens:C.ai().optional()}).passthrough(),Q=C.Ik({id:C.Yj().optional(),item_type:C.Yj().optional(),text:C.Yj().optional(),command:C.Yj().optional(),exit_code:C.ai().optional(),server:C.Yj().optional(),tool:C.Yj().optional()}).passthrough(),R=C.Ik({type:C.Yj(),thread_id:C.Yj().optional(),usage:P.optional(),item:Q.optional()}).passthrough();class S{push(a){this.buffer+=a;let b=[],c=this.buffer.indexOf("\n");for(;-1!==c;){let a=this.buffer.slice(0,c);this.buffer=this.buffer.slice(c+1);let d=this.consume(a);d&&b.push(d),c=this.buffer.indexOf("\n")}return b}flush(){let a=this.buffer;this.buffer="";let b=this.consume(a);return b?[b]:[]}consume(a){let b;try{b=function(a){let b=a.trim();if(!b)return null;let c=JSON.parse(b);var d=R.parse(c);let e={type:"assistant",chunks:[],inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0,isError:!1,raw:d};if("thread.started"===d.type)return{...e,type:"system",sessionId:d.thread_id};if("item.completed"===d.type&&d.item)return{...e,type:"assistant",chunks:function(a){let b=a.id??"";switch(a.item_type){case"assistant_message":case"reasoning":return a.text?[{kind:"text",text:a.text}]:[];case"command_execution":return[{kind:"tool_use",name:"command",id:b,input:{command:a.command,exit_code:a.exit_code}}];case"file_change":return[{kind:"tool_use",name:"edit",id:b,input:a}];case"mcp_tool_call":return[{kind:"tool_use",name:`${a.server??"mcp"}/${a.tool??"tool"}`,id:b,input:a}];default:return[]}}(d.item)};if("turn.completed"===d.type){let a=d.usage;return{...e,type:"result",inputTokens:a?.input_tokens??0,outputTokens:(a?.output_tokens??0)+(a?.reasoning_output_tokens??0)}}return"turn.failed"===d.type||"error"===d.type?{...e,type:"result",isError:!0}:null}(a)}catch(b){return this.onParseError?.({line:a.trim(),message:J(b)}),null}return b?(b.sessionId&&(this.sessionId=b.sessionId),this.totalInputTokens+=b.inputTokens,this.totalOutputTokens+=b.outputTokens,b):null}constructor(){this.buffer="",this.totalInputTokens=0,this.totalOutputTokens=0,this.costUsd=0}}let T={claude:{id:"claude",label:"Claude Code",defaultCommand:"claude",supportsResume:!0,resumeModel:"claude-haiku-4-5",resumeMaxTurns:15,defaultModel:"claude-opus-4-8",buildStartArgs:({prompt:a,model:b,maxTurns:c})=>["-p",a,"--max-turns",String(c),"--permission-mode","acceptEdits","--model",b,"--output-format","stream-json","--verbose"],buildResumeArgs:({prompt:a,sessionId:b,model:c,maxTurns:d})=>["-p",a,"--resume",b,"--max-turns",String(d),"--model",c,"--output-format","stream-json","--verbose"],buildOneShotArgs:({prompt:a,model:b})=>["-p",a,"--model",b],buildStreamOneShotArgs:({prompt:a,model:b})=>["-p",a,"--model",b,"--output-format","stream-json","--verbose"],createParser:()=>new L,estimateCost:function(a,b,c,d=0,e=0){let f=function(a){if(!a)return B;let b=A[a];return b||(console.warn(`[drydock] Unknown model id "${a}" — using max-priced fallback to avoid under-counting cost`),B)}(a);return b/1e6*f.inputPerMTok+c/1e6*f.outputPerMTok+d/1e6*f.cacheWritePerMTok+e/1e6*f.cacheReadPerMTok}},codex:{id:"codex",label:"Codex CLI",defaultCommand:"codex",supportsResume:!0,resumeModel:M,resumeMaxTurns:15,defaultModel:M,buildStartArgs:({prompt:a,model:b})=>["exec","--json","--sandbox","workspace-write","--model",b,a],buildResumeArgs:({prompt:a,sessionId:b,model:c})=>["exec","resume",b,"--json","--sandbox","workspace-write","--model",c,a],buildOneShotArgs:({prompt:a,model:b})=>["exec","--model",b,a],buildStreamOneShotArgs:()=>null,createParser:()=>new S,estimateCost:function(a,b,c){let d=function(a){if(!a)return O;let b=N[a];return b||(console.warn(`[drydock] Unknown codex model id "${a}" — using max-priced fallback to avoid under-counting cost`),O)}(a);return b/1e6*d.inputPerMTok+c/1e6*d.outputPerMTok}}},U=["claude","codex"];function V(a){return"string"==typeof a&&U.includes(a)?T[a]:T.claude}var W=c(68464),X=c(12731),Y=c(23601),Z=c(12717);let $=["blocked","wontfix","question","needs-human","needs-discussion"],_=[{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 aa(a){let b=[],c=a.labels.map(a=>a.toLowerCase()).find(a=>$.includes(a));if(c)return{decision:"blocked",reasons:[`blocking label: ${c}`]};let d=`${a.title}
|
|
1
|
+
"use strict";exports.id=665,exports.ids=[665],exports.modules={20031:(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"}},22157:(a,b,c)=>{let d;c.d(b,{k:()=>j});var e=c(37003),f=c(2937),g=c(93929),h=c(36639);class i{constructor(a=(0,f.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,h.f)(JSON.stringify(b.payload??{})),d=JSON.parse(c),e=this.db.insert(g.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(g.jobEvents).where((0,e.eq)(g.jobEvents.jobId,a)).orderBy(g.jobEvents.ts,g.jobEvents.id).all().slice(-b)}}function j(){return d||(d=new i),d}},23791:(a,b,c)=>{c.d(b,{QJ:()=>g,kl:()=>e});let d={queued:["working","aborted","interrupted"],working:["ci_running","needs_human","aborted","interrupted"],ci_running:["ci_failed","merged","needs_human","aborted","interrupted"],ci_failed:["retrying","needs_human","aborted","interrupted"],retrying:["ci_running","needs_human","aborted","interrupted"],merged:[],needs_human:["queued","aborted"],aborted:[],interrupted:["queued","aborted"]},e=["merged","aborted"];class f extends Error{constructor(a,b){super(`invalid job transition: ${a} -> ${b}`)}}function g(a,b){if(!d[a].includes(b))throw new f(a,b)}},50813:(a,b,c)=>{c.d(b,{F1:()=>l,yO:()=>n,Xm:()=>k,yx:()=>m});var d=c(37003),e=c(97337),f=c(35895),g=c(2937),h=c(93929),i=c(20031);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}function l(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 m(a,b,c=(0,g.Lf)()){return l(a,b,c)?.content??i.E[b]??""}function n(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()}f.Ik({repoId:f.ai().int().positive(),name:f.Yj().min(1),content:f.Yj()})},68476:(a,b,c)=>{c.d(b,{N6:()=>n,_S:()=>j,ax:()=>k,dk:()=>m,i1:()=>o,yM:()=>l});var d=c(37003),e=c(97337),f=c(2937),g=c(93929),h=c(24525),i=c(23791);function j(a,b=(0,f.Lf)()){let c=b.insert(g.jobs).values({repoId:a.repoId,issueNumber:a.issueNumber,status:"queued",model:a.model,agent:a.agent??"claude",maxTurns:a.maxTurns??40,dedupeKey:a.dedupeKey??null}).returning().get();return(0,h.ej)(),c}function k(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.eq)(g.jobs.id,a)).get()}function l(a,b,c,d=(0,f.Lf)()){d.insert(g.jobEvents).values({jobId:a,type:b,payload:JSON.stringify(c??{})}).run()}function m(a,b,c={},e=(0,f.Lf)()){let j=k(a,e);if(!j)throw Error(`job ${a} not found`);(0,i.QJ)(j.status,b);let n=Math.floor(Date.now()/1e3),o={};"working"!==b||j.startedAt||(o.startedAt=n),["merged","needs_human","aborted"].includes(b)&&(o.finishedAt=n);let p=e.update(g.jobs).set({...o,...c,status:b}).where((0,d.eq)(g.jobs.id,a)).returning().get();return l(a,"status",{from:j.status,to:b},e),(0,h.ej)(),p}function n(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.eq)(g.jobs.repoId,a)).orderBy((0,e.i)(g.jobs.createdAt)).all()}function o(a,b=(0,f.Lf)()){return b.select().from(g.jobs).where((0,d.RV)(g.jobs.status,a)).all()}},99665:(a,b,c)=>{let d,e;c.r(b),c.d(b,{abortAllJobs:()=>b6,abortJob:()=>b5,clearAbort:()=>b4,gracefulShutdown:()=>b7,registerAbort:()=>b3,startOrchestrator:()=>b8});var f=c(37003),g=c(2937),h=c(90109),i=c(78293),j=c(93929),k=c(23226),l=c(36639);let m=[{id:"telegram",isConfigured:a=>!!(a.telegramBotToken&&a.telegramChatId),send:(a,b,c)=>c.postJson(`https://api.telegram.org/bot${b.telegramBotToken}/sendMessage`,{chat_id:b.telegramChatId,text:a})},{id:"slack",isConfigured:a=>!!a.slackWebhookUrl,send:(a,b,c)=>c.postJson(b.slackWebhookUrl,{text:a})},{id:"email",isConfigured:a=>!!(a.smtpHost&&a.emailFrom&&a.emailTo),send:(a,b,c)=>c.sendMail({to:b.emailTo,from:b.emailFrom,subject:"Drydock notification",text:a},{host:b.smtpHost,port:b.smtpPort,user:b.smtpUser,pass:b.smtpPass})}];async function n(a,b,c=(0,g.Lf)(),d=p){var e,f;let h=(0,i.mt)(c);if(!h.notifyEvents.includes(a))return;let j=m.filter(a=>a.isConfigured(h));0!==j.length&&await (e=o(j,b,h,d),f=()=>console.error(`[notify] dispatch for ${a} exceeded 5000ms; continuing in background`),new Promise(a=>{let b=setTimeout(()=>{f(),a()},5e3);b.unref?.();let c=()=>{clearTimeout(b),a()};e.then(c,c)}))}async function o(a,b,c,d){for(let e of a)try{await e.send(b,c,d)}catch(a){console.error(`[notify] ${e.id} delivery failed`,(0,l.f)(String(a)))}}let p={postJson:async(a,b)=>{let c=await fetch(a,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(b),signal:AbortSignal.timeout(1e4)});if(!c.ok)throw Error(`HTTP ${c.status}`)},sendMail:async(a,b)=>{let d=(await c.e(511).then(c.t.bind(c,94511,19))).createTransport({host:b.host,port:b.port,secure:465===b.port,auth:b.user?{user:b.user,pass:b.pass}:void 0,connectionTimeout:1e4,greetingTimeout:1e4,socketTimeout:1e4});await d.sendMail(a)}};async function q(a,b,c=(0,g.Lf)(),d=p){a?b.active||(b.active=!0,await n("cost_limit","\uD83D\uDCB8 Daily cost limit reached — new jobs are paused until the budget resets.",c,d)):b.active=!1}async function r(a=(0,g.Lf)(),b=p){await n("automation_paused","\uD83C\uDF19 Automation draining — finishing in-flight jobs, then shutting down.",a,b)}var s=c(68476),t=c(77598),u=c(48161),v=c(23791);let w=()=>Math.floor(Date.now()/1e3);function x(){return d||(d=`${(0,u.hostname)()}#${process.pid}`),d}function y(a={},b=(0,g.Lf)()){let c=a.now??w(),d=a.expiredBefore,e=void 0===d?void 0:(0,f.or)((0,f.kZ)(j.jobs.leaseExpiresAt),(0,f.wJ)(j.jobs.leaseExpiresAt,d)),h=b.select().from(j.jobs).where((0,f.Uo)((0,f.eq)(j.jobs.status,"working"),e)).all();for(let a of h)b.update(j.jobs).set({status:"queued",leaseToken:null,leaseExpiresAt:null,workerId:null,availableAt:c+function(a,b=5,c=300){return a<=0?0:Math.min(b*2**(a-1),c)}(a.attempts)}).where((0,f.eq)(j.jobs.id,a.id)).run(),(0,s.yM)(a.id,"status",{from:"working",to:"queued",reason:"lease_expired"},b);return h.length}let z=["ci_running","ci_failed","retrying"],A={"claude-opus-4-8":{inputPerMTok:5,outputPerMTok:25,cacheWritePerMTok:6.25,cacheReadPerMTok:.5},"claude-opus-4-7":{inputPerMTok:15,outputPerMTok:75,cacheWritePerMTok:18.75,cacheReadPerMTok:1.5},"claude-sonnet-4-5":{inputPerMTok:3,outputPerMTok:15,cacheWritePerMTok:3.75,cacheReadPerMTok:.3},"claude-haiku-4-5":{inputPerMTok:1,outputPerMTok:5,cacheWritePerMTok:1.25,cacheReadPerMTok:.1}},B=Object.values(A).reduce((a,b)=>b.outputPerMTok>a.outputPerMTok?b:a,{inputPerMTok:0,outputPerMTok:0,cacheWritePerMTok:0,cacheReadPerMTok:0});var C=c(35895);let D=C.Ik({input_tokens:C.ai().optional(),output_tokens:C.ai().optional(),cache_creation_input_tokens:C.ai().optional(),cache_read_input_tokens:C.ai().optional()}).passthrough(),E=C.Ik({type:C.eu("system"),subtype:C.Yj().optional(),session_id:C.Yj().optional(),model:C.Yj().optional()}),F=C.Ik({type:C.eu("assistant"),message:C.Ik({role:C.eu("assistant"),content:C.YO(C.g1(C.Yj(),C.L5())),usage:D.optional()})}),G=C.Ik({type:C.eu("user"),message:C.Ik({role:C.eu("user"),content:C.YO(C.g1(C.Yj(),C.L5()))})}),H=C.Ik({type:C.eu("result"),subtype:C.Yj().optional(),session_id:C.Yj().optional(),is_error:C.zM().optional(),total_cost_usd:C.ai().optional(),usage:D.optional()}),I=C.gM("type",[E,F,G,H]);function J(a){return a instanceof Error?a.message:String(a)}function K(a){let b=[];for(let c of a)"text"===c.type&&"string"==typeof c.text?b.push({kind:"text",text:c.text}):"tool_use"===c.type?b.push({kind:"tool_use",name:String(c.name??"unknown"),id:String(c.id??""),input:c.input}):"tool_result"===c.type&&b.push({kind:"tool_result",toolUseId:String(c.tool_use_id??""),isError:!!c.is_error});return b}class L{push(a){this.buffer+=a;let b=[],c=this.buffer.indexOf("\n");for(;-1!==c;){let a=this.buffer.slice(0,c);this.buffer=this.buffer.slice(c+1);let d=this.consume(a);d&&b.push(d),c=this.buffer.indexOf("\n")}return b}flush(){let a=this.buffer;this.buffer="";let b=this.consume(a);return b?[b]:[]}consume(a){let b;try{b=function(a){var b;let c,d=a.trim();if(!d)return null;let e=JSON.parse(d);return c={type:(b=I.parse(e)).type,chunks:[],inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0,isError:!1,raw:b},"system"===b.type?(c.sessionId=b.session_id,c.model=b.model):"assistant"===b.type?(c.chunks=K(b.message.content),c.inputTokens=b.message.usage?.input_tokens??0,c.outputTokens=b.message.usage?.output_tokens??0,c.cacheCreationInputTokens=b.message.usage?.cache_creation_input_tokens??0,c.cacheReadInputTokens=b.message.usage?.cache_read_input_tokens??0):"user"===b.type?c.chunks=K(b.message.content):(c.sessionId=b.session_id,c.costUsd=b.total_cost_usd,c.inputTokens=b.usage?.input_tokens??0,c.outputTokens=b.usage?.output_tokens??0,c.cacheCreationInputTokens=b.usage?.cache_creation_input_tokens??0,c.cacheReadInputTokens=b.usage?.cache_read_input_tokens??0,c.isError=b.is_error??!1),c}(a)}catch(b){return this.onParseError?.({line:a.trim(),message:J(b)}),null}return b?(b.sessionId&&(this.sessionId=b.sessionId),b.model&&(this.model=b.model),"result"===b.type?(b.inputTokens>0&&(this.totalInputTokens=b.inputTokens),b.outputTokens>0&&(this.totalOutputTokens=b.outputTokens),b.cacheReadInputTokens>0&&(this.totalCacheReadInputTokens=b.cacheReadInputTokens),void 0!==b.costUsd&&(this.costUsd=b.costUsd)):(this.totalInputTokens+=b.inputTokens,this.totalOutputTokens+=b.outputTokens,this.totalCacheCreationInputTokens+=b.cacheCreationInputTokens,this.totalCacheReadInputTokens+=b.cacheReadInputTokens),b):null}constructor(){this.buffer="",this.totalInputTokens=0,this.totalOutputTokens=0,this.totalCacheCreationInputTokens=0,this.totalCacheReadInputTokens=0,this.costUsd=0}}let M="gpt-5-codex",N={"gpt-5-codex":{inputPerMTok:1.25,outputPerMTok:10,cacheWritePerMTok:0,cacheReadPerMTok:0},"gpt-5":{inputPerMTok:1.25,outputPerMTok:10,cacheWritePerMTok:0,cacheReadPerMTok:0},"gpt-5-mini":{inputPerMTok:.25,outputPerMTok:2,cacheWritePerMTok:0,cacheReadPerMTok:0}},O=Object.values(N).reduce((a,b)=>b.outputPerMTok>a.outputPerMTok?b:a,{inputPerMTok:0,outputPerMTok:0,cacheWritePerMTok:0,cacheReadPerMTok:0}),P=C.Ik({input_tokens:C.ai().optional(),cached_input_tokens:C.ai().optional(),output_tokens:C.ai().optional(),reasoning_output_tokens:C.ai().optional()}).passthrough(),Q=C.Ik({id:C.Yj().optional(),item_type:C.Yj().optional(),text:C.Yj().optional(),command:C.Yj().optional(),exit_code:C.ai().optional(),server:C.Yj().optional(),tool:C.Yj().optional()}).passthrough(),R=C.Ik({type:C.Yj(),thread_id:C.Yj().optional(),usage:P.optional(),item:Q.optional()}).passthrough();class S{push(a){this.buffer+=a;let b=[],c=this.buffer.indexOf("\n");for(;-1!==c;){let a=this.buffer.slice(0,c);this.buffer=this.buffer.slice(c+1);let d=this.consume(a);d&&b.push(d),c=this.buffer.indexOf("\n")}return b}flush(){let a=this.buffer;this.buffer="";let b=this.consume(a);return b?[b]:[]}consume(a){let b;try{b=function(a){let b=a.trim();if(!b)return null;let c=JSON.parse(b);var d=R.parse(c);let e={type:"assistant",chunks:[],inputTokens:0,outputTokens:0,cacheCreationInputTokens:0,cacheReadInputTokens:0,isError:!1,raw:d};if("thread.started"===d.type)return{...e,type:"system",sessionId:d.thread_id};if("item.completed"===d.type&&d.item)return{...e,type:"assistant",chunks:function(a){let b=a.id??"";switch(a.item_type){case"assistant_message":case"reasoning":return a.text?[{kind:"text",text:a.text}]:[];case"command_execution":return[{kind:"tool_use",name:"command",id:b,input:{command:a.command,exit_code:a.exit_code}}];case"file_change":return[{kind:"tool_use",name:"edit",id:b,input:a}];case"mcp_tool_call":return[{kind:"tool_use",name:`${a.server??"mcp"}/${a.tool??"tool"}`,id:b,input:a}];default:return[]}}(d.item)};if("turn.completed"===d.type){let a=d.usage;return{...e,type:"result",inputTokens:a?.input_tokens??0,outputTokens:(a?.output_tokens??0)+(a?.reasoning_output_tokens??0)}}return"turn.failed"===d.type||"error"===d.type?{...e,type:"result",isError:!0}:null}(a)}catch(b){return this.onParseError?.({line:a.trim(),message:J(b)}),null}return b?(b.sessionId&&(this.sessionId=b.sessionId),this.totalInputTokens+=b.inputTokens,this.totalOutputTokens+=b.outputTokens,b):null}constructor(){this.buffer="",this.totalInputTokens=0,this.totalOutputTokens=0,this.costUsd=0}}let T={claude:{id:"claude",label:"Claude Code",defaultCommand:"claude",supportsResume:!0,resumeModel:"claude-haiku-4-5",resumeMaxTurns:15,defaultModel:"claude-opus-4-8",buildStartArgs:({prompt:a,model:b,maxTurns:c})=>["-p",a,"--max-turns",String(c),"--permission-mode","acceptEdits","--model",b,"--output-format","stream-json","--verbose"],buildResumeArgs:({prompt:a,sessionId:b,model:c,maxTurns:d})=>["-p",a,"--resume",b,"--max-turns",String(d),"--model",c,"--output-format","stream-json","--verbose"],buildOneShotArgs:({prompt:a,model:b})=>["-p",a,"--model",b],buildStreamOneShotArgs:({prompt:a,model:b})=>["-p",a,"--model",b,"--output-format","stream-json","--verbose"],createParser:()=>new L,estimateCost:function(a,b,c,d=0,e=0){let f=function(a){if(!a)return B;let b=A[a];return b||(console.warn(`[drydock] Unknown model id "${a}" — using max-priced fallback to avoid under-counting cost`),B)}(a);return b/1e6*f.inputPerMTok+c/1e6*f.outputPerMTok+d/1e6*f.cacheWritePerMTok+e/1e6*f.cacheReadPerMTok}},codex:{id:"codex",label:"Codex CLI",defaultCommand:"codex",supportsResume:!0,resumeModel:M,resumeMaxTurns:15,defaultModel:M,buildStartArgs:({prompt:a,model:b})=>["exec","--json","--sandbox","workspace-write","--model",b,a],buildResumeArgs:({prompt:a,sessionId:b,model:c})=>["exec","resume",b,"--json","--sandbox","workspace-write","--model",c,a],buildOneShotArgs:({prompt:a,model:b})=>["exec","--model",b,a],buildStreamOneShotArgs:()=>null,createParser:()=>new S,estimateCost:function(a,b,c){let d=function(a){if(!a)return O;let b=N[a];return b||(console.warn(`[drydock] Unknown codex model id "${a}" — using max-priced fallback to avoid under-counting cost`),O)}(a);return b/1e6*d.inputPerMTok+c/1e6*d.outputPerMTok}}},U=["claude","codex"];function V(a){return"string"==typeof a&&U.includes(a)?T[a]:T.claude}var W=c(68464),X=c(12731),Y=c(23601),Z=c(12717);let $=["blocked","wontfix","question","needs-human","needs-discussion"],_=[{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 aa(a){let b=[],c=a.labels.map(a=>a.toLowerCase()).find(a=>$.includes(a));if(c)return{decision:"blocked",reasons:[`blocking label: ${c}`]};let d=`${a.title}
|
|
2
2
|
${a.body??""}`;for(let{label:a,re:c}of _)c.test(d)&&b.push(`${a} detected`);return b.length>0?{decision:"needs_review",reasons:b}:{decision:"approved",reasons:[]}}var ab=c(32693);let ac=new Set(["OWNER","MEMBER","COLLABORATOR"]);function ad(a){try{let b=JSON.parse(a);return Array.isArray(b)?b.filter(a=>"string"==typeof a):[]}catch{return[]}}function ae(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:ad(a.readyLabels),blockingLabels:ad(a.blockingLabels),autoLabelWhitelist:ad(a.autoLabelWhitelist),priorityAuthors:ad(a.priorityAuthors),trustedReviewers:ad(a.trustedReviewers),ignoredBots:ad(a.ignoredBots),minAuthorAssociation:"any"===a.minAuthorAssociation?"any":"approved",maxAttempts:a.maxAttempts}}function af(a,b){return"any"===a.minAuthorAssociation||null!=b&&ac.has(b.toUpperCase())}let ag=[{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 ah(a,b,c,d){d.update(j.issues).set({triageHash:c,triagedAt:Math.floor(Date.now()/1e3)}).where((0,f.Uo)((0,f.eq)(j.issues.repoId,a),(0,f.eq)(j.issues.number,b))).run()}async function ai(a,b,c,d=(0,g.Lf)()){let e=ae(a),h=function(a){let b=JSON.stringify([a.title,a.labels.map(a=>a.name).sort()]),c=5381;for(let a=0;a<b.length;a++)c=(c<<5)+c+b.charCodeAt(a)|0;return(c>>>0).toString(16)}(c),i=d.select().from(j.issues).where((0,f.Uo)((0,f.eq)(j.issues.repoId,a.id),(0,f.eq)(j.issues.number,c.number))).get();if(i?.triagedAt&&i.triageHash===h)return{number:c.number,applied:[],reasons:[],skipped:"unchanged"};if(!af(e,c.authorAssociation))return ah(a.id,c.number,h,d),{number:c.number,applied:[],reasons:["author not approved"],skipped:"author"};let k=await b.viewIssue(c.number),l=aa({number:k.number,title:k.title,body:k.body,labels:k.labels}),m=[],n=function(a,b){let c=new Set(b),d=`${a.title}
|
|
3
3
|
${a.body}`,e=[];for(let{label:a,re:b}of ag)c.has(a)&&b.test(d)&&!e.includes(a)&&e.push(a);return e}(k,e.autoLabelWhitelist);for(let a of n)m.push(`classified as ${a}`);if("approved"===l.decision){let a=e.readyLabels[0];a&&(n.push(a),m.push("safe and well-specified"))}else{let a=e.blockingLabels[0];a&&(n.push(a),m.push(...l.reasons.length?l.reasons:["flagged for human review"]))}let o=new Set([...e.autoLabelWhitelist,...e.readyLabels,...e.blockingLabels]),p=new Set(k.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,g=d.select().from(j.issues).where((0,f.Uo)((0,f.eq)(j.issues.repoId,a),(0,f.eq)(j.issues.number,b))).get();if(!g)return;try{let a=JSON.parse(g.labels);e=Array.isArray(a)?a:[]}catch{e=[]}let h=[...e];for(let a of c)h.includes(a)||h.push(a);d.update(j.issues).set({labels:JSON.stringify(h)}).where((0,f.eq)(j.issues.id,g.id)).run()}(a.id,c.number,q,d)}return ah(a.id,c.number,h,d),{number:c.number,applied:q,reasons:m}}async function aj(a,b,c,d=(0,g.Lf)()){let e=[];for(let f of c)try{e.push(await ai(a,b,f,d))}catch(b){(0,k.v)(`[triage] issue #${f.number} failed for ${a.name}`,b)}return e}function ak(a,b){let c=(0,i.mt)(b);return"codex"===a.id?c.codexPath:c.claudePath}var al=c(71117),am=c(76760);function an(){return process.env.DRYDOCK_HOME??(0,am.join)((0,u.homedir)(),".drydock")}function ao(a){return a.replace(/[^a-zA-Z0-9._-]/g,"-")}function ap(a){return(0,am.join)(an(),"worktrees",ao(a))}class aq extends Error{}class ar extends aq{constructor(){super("nothing to commit")}}class as{constructor(a=al.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 aq(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,am.join)(ap(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,am.join)(ap(a.name),`fb-${ao(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,am.join)(ap(a.name),`dh-${ao(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 ar;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 at=c(31421);let au=(a,b,c,d)=>{let e,f=(0,at.spawn)(a,b,{cwd:c,env:process.env});f.stdout?.setEncoding("utf8"),f.stderr?.setEncoding("utf8"),f.stdout?.on("data",a=>d.onStdout(a)),f.stderr?.on("data",a=>d.onStderr?.(a));let g={done:new Promise(a=>{f.on("close",b=>{e&&clearTimeout(e),a(b??0)}),f.on("error",b=>{g.spawnError=b,a(1)})}),abort:(a=5e3)=>{f.kill("SIGTERM"),e=setTimeout(()=>f.kill("SIGKILL"),a)}};return g};var av=c(20031),aw=c(50813),ax=c(22157);function ay(a,b){let c=()=>{},d=!1;return{tripped:new Promise(a=>{c=a}),observe(){!d&&b()>=a&&(d=!0,c())}}}function az(a,b={}){let{timeoutMs:c,costTripped:d}=b,e=b.graceMs??5e3,f=!!c&&c>0;return f||d?new Promise(b=>{let g,h=!1,i=!1,j=a=>{h||(h=!0,b(a))},k=b=>{let c;if(i)return;i=!0,g&&clearTimeout(g),a.abort();let d=new Promise(a=>{c=setTimeout(a,e),c.unref?.()});Promise.race([a.done,d]).then(()=>{clearTimeout(c),j(b)})};f&&(g=setTimeout(()=>{k({exitCode:-1,timedOut:!0,costExceeded:!1})},c),g.unref?.()),d?.then(()=>{k({exitCode:-2,timedOut:!1,costExceeded:!0})}),a.done.then(a=>{i||(g&&clearTimeout(g),j({exitCode:a,timedOut:!1,costExceeded:!1}))})}):a.done.then(a=>({exitCode:a,timedOut:!1,costExceeded:!1}))}function aA(a){return{chunks:a.chunks,costUsd:a.costUsd}}async function aB(a,b,c,d={}){let e=d.db??(0,g.Lf)(),h=d.runner??au,i=d.broker??(0,ax.k)(),k=d.provider??V(a.agent),l=d.command??k.defaultCommand,m=a.model??k.defaultModel,n=k.createParser();n.onParseError=b=>i.publish(a.id,{type:"parse_error",payload:b}),"working"!==a.status?(0,s.dk)(a.id,"working",{model:m},e):e.update(j.jobs).set({model:m}).where((0,f.eq)(j.jobs.id,a.id)).run();let o=d.costCapUsd&&d.costCapUsd>0?ay(d.costCapUsd,()=>n.costUsd>0?n.costUsd:k.estimateCost(m,n.totalInputTokens,n.totalOutputTokens)):void 0,p=h(l,k.buildStartArgs({prompt:b,model:m,maxTurns:a.maxTurns}),c,{onStdout:b=>{for(let c of n.push(b))i.publish(a.id,{type:c.type,payload:aA(c)});o?.observe()},onStderr:b=>i.publish(a.id,{type:"error",payload:{stderr:b}})});b3(a.id,p.abort);let{exitCode:q,timedOut:r,costExceeded:t}=await az(p,{timeoutMs:d.timeoutMs,costTripped:o?.tripped,graceMs:d.graceMs});b4(a.id);let u=r||t?void 0:p.spawnError;for(let b of(r&&i.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${d.timeoutMs}ms`}}),t&&i.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${d.costCapUsd} reached`}}),n.flush()))i.publish(a.id,{type:b.type,payload:aA(b)});let v=n.costUsd>0?n.costUsd:k.estimateCost(m,n.totalInputTokens,n.totalOutputTokens);return e.update(j.jobs).set({sessionId:n.sessionId,totalInputTokens:n.totalInputTokens,totalOutputTokens:n.totalOutputTokens,costUsd:v}).where((0,f.eq)(j.jobs.id,a.id)).run(),{exitCode:q,sessionId:n.sessionId,costUsd:v,inputTokens:n.totalInputTokens,outputTokens:n.totalOutputTokens,timedOut:r,costExceeded:t,spawnError:u}}async function aC(a,b,c,d,e={}){let h=e.db??(0,g.Lf)(),i=e.runner??au,k=e.broker??(0,ax.k)(),l=e.provider??V(a.agent),m=e.command??l.defaultCommand,n=a.model??l.resumeModel,o=l.createParser();o.onParseError=b=>k.publish(a.id,{type:"parse_error",payload:b});let p=(0,aw.Xm)((0,aw.yx)(a.repoId,av._.ciFix,h),{CI_LOG:c}),q=e.costCapUsd&&e.costCapUsd>0?h.select().from(j.jobs).where((0,f.eq)(j.jobs.id,a.id)).get()?.costUsd??0:0,r=e.costCapUsd&&e.costCapUsd>0?ay(e.costCapUsd,()=>q+(o.costUsd>0?o.costUsd:l.estimateCost(n,o.totalInputTokens,o.totalOutputTokens))):void 0,s=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))k.publish(a.id,{type:c.type,payload:{chunks:c.chunks}});r?.observe()},onStderr:b=>k.publish(a.id,{type:"error",payload:{stderr:b}})});b3(a.id,s.abort);let{exitCode:t,timedOut:u,costExceeded:v}=await az(s,{timeoutMs:e.timeoutMs,costTripped:r?.tripped,graceMs:e.graceMs});b4(a.id);let w=u||v?void 0:s.spawnError;for(let b of(u&&k.publish(a.id,{type:"error",payload:{stderr:`session timed out after ${e.timeoutMs}ms`}}),v&&k.publish(a.id,{type:"error",payload:{stderr:`session aborted: per-job cost limit of $${e.costCapUsd} reached`}}),o.flush()))k.publish(a.id,{type:b.type,payload:{chunks:b.chunks}});let x=o.costUsd>0?o.costUsd:l.estimateCost(n,o.totalInputTokens,o.totalOutputTokens),y=h.select().from(j.jobs).where((0,f.eq)(j.jobs.id,a.id)).get();return h.update(j.jobs).set({sessionId:o.sessionId??b,totalInputTokens:(y?.totalInputTokens??0)+o.totalInputTokens,totalOutputTokens:(y?.totalOutputTokens??0)+o.totalOutputTokens,costUsd:(y?.costUsd??0)+x}).where((0,f.eq)(j.jobs.id,a.id)).run(),{exitCode:t,sessionId:o.sessionId??b,costUsd:x,inputTokens:o.totalInputTokens,outputTokens:o.totalOutputTokens,timedOut:u,costExceeded:v,spawnError:w}}var aD=c(73024);let aE=["vercel","railway"];function aF(a){return a.exists??aD.existsSync}class aG{async detect(a){let b=aF(a);return b((0,am.join)(a.cwd,"railway.json"))||b((0,am.join)(a.cwd,"railway.toml"))||b((0,am.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 aH{async detect(a){let b=aF(a);return b((0,am.join)(a.cwd,"vercel.json"))||b((0,am.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 aI=[new aH,new aG];async function aJ(a,b){if(b)return aE.includes(b)?function(a){let b=aI.find(b=>b.id===a);if(!b)throw Error(`unsupported deployment platform: ${a}`);return b}(b):null;for(let b of aI)if(await b.detect(a))return b;return null}var aK=c(46146);function aL(a,b){return{cwd:a.path,ref:b,run:al.S}}async function aM(a={}){let b=a.db??(0,g.Lf)(),c=a.now??Date.now,d=a.budgets??aK.ad;for(let e of(0,W.uP)(b))if(ae(e).autoHealDeployments)try{let f=a.forgeFor?.(e)??(0,X.Ie)(e),g=a.adapterFor??(a=>aJ(aL(a,null),a.deploymentPlatform)),h=await g(e);if(!h)continue;let i=a.openFixPr??aP;await aN(e,f,h,{db:b,now:c,budgets:d,openFixPr:i})}catch(a){(0,k.v)(`[deploy-heal] sweep failed for ${e.name}`,a)}}async function aN(a,b,c,d){let{db:e,now:f,budgets:g}=d,h=(0,s.N6)(a.id,e);for(let a of h){let d;if("merged"!==a.status||null==a.prNumber)continue;let h=(a.finishedAt??a.createdAt)*1e3;if(!(f()-h>g.monitorWindowMs)){try{d=await b.prHeadSha(a.prNumber)}catch(b){(0,k.v)(`[deploy-heal] head sha lookup failed for job ${a.id}`,b);continue}(0,aK.SR)(a.id,d,e)||(0,aK.eY)(a.id,a.prNumber,c.id,d,e)}}for(let b of e.select().from(j.deploymentHealingSessions).all().filter(a=>"monitoring"===a.status)){let e=h.find(a=>a.id===b.jobId);if(e)try{await aO(a,e,c,b,d)}catch(c){(0,k.v)(`[deploy-heal] session ${b.id} failed for ${a.name}`,c)}}}async function aO(a,b,c,d,e){let{db:f,now:g,budgets:h}=e,i=(0,aK.FL)({createdAt:1e3*d.createdAt,lastPolledAt:1e3*d.updatedAt,now:g(),initialDelayMs:h.initialDelayMs,intervalMs:h.intervalMs,timeoutMs:h.timeoutMs});if("wait"===i)return;if("timeout"===i)return void(0,aK.X)(d.id,"escalated",{},f);let j=aL(a,d.commitSha),l=(0,aK.eV)(await c.getStatus(j));if("ready"===l)return void(0,aK.X)(d.id,"healthy",{},f);if("pending"===l)return void(0,aK.LR)(d.id,f);let m=(await c.getLogs(j).catch(()=>"")).split("\n").slice(-h.maxLogLines).join("\n").trim(),n=(0,aK.X)(d.id,"failed",{logsExcerpt:m||null},f);(0,aK.X)(d.id,"repairing",{},f);try{let c=await e.openFixPr(a,b,n,m);(0,aK.X)(d.id,"repaired",{followupPrNumber:c},f)}catch(a){(0,k.v)(`[deploy-heal] fix PR failed for session ${d.id}`,a),(0,aK.X)(d.id,"escalated",{},f)}}async function aP(a,b,c,d){let e=(0,g.Lf)(),f=V(b.agent),h=ak(f,e),i=new as,j=c.commitSha.slice(0,7),l=`drydock/deploy-fix-${b.id}-${j}`,m=(0,X.Ie)(a),n=await i.prepareForNewBranch(a,l,`${b.id}-${j}`);try{let g=await aB(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"),n.path,{db:e,provider:f,command:h});if(0!==g.exitCode)throw Error(`${f.label} exited non-zero`);return await i.commitAndPush(n,`Fix failed ${c.platform} deployment for PR #${c.prNumber}`),m.createPr({head:l,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(n,a.path)}catch(a){(0,k.v)(`[deploy-heal] worktree cleanup failed for job ${b.id}`,a)}}}var aQ=c(34717),aR=c(51455),aS=c(10520);let aT=C.Ik({release:C.zM(),bump:C.k5(["patch","minor","major"]),title:C.Yj().default(""),notes:C.Yj().default("")});async function aU(a){let b=a.runner??al.S,c=a.db??(0,g.Lf)(),d=void 0!==a.timeoutMs?{timeoutMs:a.timeoutMs}:void 0,e=a.provider.buildStreamOneShotArgs({prompt:a.prompt,model:a.model});if(null===e){let c=a.provider.buildOneShotArgs({prompt:a.prompt,model:a.model}),e=d?await b(a.command,c,a.cwd,d):await b(a.command,c,a.cwd);return{text:e.stdout,exitCode:e.exitCode,costUsd:0}}let f=d?await b(a.command,e,a.cwd,d):await b(a.command,e,a.cwd),h=new L,i=[...h.push(f.stdout),...h.flush()],k=[];for(let a of i)for(let b of a.chunks)"text"===b.kind&&k.push(b.text);let l=k.join(""),m=h.costUsd>0?h.costUsd:0;return m>0&&void 0!==a.repoId&&c.insert(j.oneShotCosts).values({repoId:a.repoId,type:a.type,costUsd:m,inputTokens:h.totalInputTokens,outputTokens:h.totalOutputTokens}).run(),{text:l,exitCode:f.exitCode,costUsd:m}}async function aV(a){var b;let c,d=await a.listReleases(),e=function(a){let b=null;for(let c of a)(0,aS.kf)(c)&&(null===b||(0,aS.mU)(c,b)>0)&&(b=c);return b}(d.map(a=>a.tagName)),f=e?d.find(a=>a.tagName===e)?.createdAt??null:null;return{fromTag:e,releases:d,prs:(b=(await a.listMergedPrs(100)).map(a=>({number:a.number,title:a.title,labels:a.labels,mergedAt:a.mergedAt})),c=null===f?null:Date.parse(f),b.filter(a=>{let b=Date.parse(a.mergedAt);return!Number.isNaN(b)&&(null===c||b>c)}).sort((a,b)=>a.number-b.number))}}async function aW(a,b){let c=b.db??(0,g.Lf)(),d=(0,aQ.tm)(a,c);if(!d)throw Error(`release run ${a} not found`);let e=d.mode;(0,aQ.Cq)(a,"evaluating",{},c);try{var f;let{fromTag:g,releases:h,prs:i}=await aV(b.forge),j=await b.generate({fromTag:g,prs:i});if("auto"===e&&!j)return(0,aQ.Cq)(a,"error",{errorMessage:"release evaluation failed"},c);if("auto"===e&&j&&!j.release)return(0,aQ.Cq)(a,"skipped",{fromTag:g},c);let k=function(a,b,c){let d="manual"===a?"patch":b?.bump??"patch",e=b?.title?.trim()??"";return{bump:d,title:e,notes:b?.notes?.trim()||(0===c.length?"No changes since the last release.":c.map(a=>`- #${a.number} ${a.title}`).join("\n"))}}(e,j,i),l=d.tag??(f=k.bump,`v${(0,aS.rr)(g??"0.0.0",f)}`);if((0,aQ.Cq)(a,"proposed",{bump:k.bump,fromTag:g,tag:l,title:k.title||l,notes:k.notes,prNumbers:i.map(a=>a.number)},c),h.some(a=>a.tagName===l))return(0,aQ.Cq)(a,"publishing",{},c),(0,aQ.Cq)(a,"published",{},c);return(0,aQ.Cq)(a,"publishing",{},c),await b.forge.createRelease({tag:l,title:k.title||l,notes:k.notes,target:b.repo.defaultBranch}),(0,aQ.Cq)(a,"published",{},c)}catch(f){let b=f instanceof Error?f.message:String(f),d=(0,aQ.tm)(a,c),e=d?.status??"evaluating";if("evaluating"===e||"proposed"===e||"publishing"===e)return(0,aQ.Cq)(a,"error",{errorMessage:b.slice(0,500)},c);return(0,aQ.tm)(a,c)}}async function aX(a,b){let c=await (0,aR.mkdtemp)((0,am.join)((0,u.tmpdir)(),"drydock-release-"));try{var d;let e,f=(e=(d={provider:a.provider,command:a.command,model:a.model,cwd:c,runner:a.runner}).timeoutMs??18e4,async a=>{try{let b,c,f,{text:g,exitCode:h}=await aU({provider:d.provider,command:d.command,model:d.model,cwd:d.cwd,prompt:(c=(b=a.prs.slice(0,200)).length>0?b.map(a=>{let b=a.labels.length>0?` [${a.labels.join(", ")}]`:"";return`- #${a.number} ${a.title}${b}`}).join("\n"):"(no merged pull requests)",["You are deciding whether to cut a new software release. Given the most\nrecent release and the pull requests merged since then, decide whether a\nrelease is warranted, which semantic-version bump it should be, and write\nconcise Markdown release notes.\n",a.fromTag?`The most recent release is ${a.fromTag}.`:"There is no prior release (this would be the first).","\n## Pull requests merged since the last release\n",c,'\n## How to choose the bump\n\n- "major": incompatible / breaking changes.\n- "minor": new, backwards-compatible features.\n- "patch": backwards-compatible bug fixes or internal-only changes.\n\n## Response format\n\nRespond with ONLY a JSON object (no prose, no code fences) of the shape:\n\n{"release": <true|false>, "bump": "patch"|"minor"|"major",\n "title": "<short release title>", "notes": "<Markdown release notes>"}\n\nSet "release" to false when the changes do not warrant a release yet (e.g.\nonly docs/CI tweaks). When false, the other fields are ignored.'].join("\n")),repoId:d.repoId,type:"release",timeoutMs:e,runner:d.runner,db:d.db});if(0!==h)return null;let i=g.match(/\{[\s\S]*\}/);if(!i)return null;try{f=JSON.parse(i[0])}catch{return null}let j=aT.safeParse(f);return j.success?j.data:null}catch{return null}});return await b(f)}finally{try{await (0,aR.rm)(c,{recursive:!0,force:!0})}catch{}}}async function aY(a={}){let b=a.db??(0,g.Lf)();if(!(0,i.mt)(b).releaseManagementEnabled)return;let c=a.now??Date.now,d=a.windowMs??36e5,e=a.notify??((a,c)=>n(a,c,b));for(let f of(0,W.uP)(b))if(ae(f).releaseEnabled)try{let g=a.forgeFor?.(f)??(0,X.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=V(a.agent),d=ak(c,b),e=a.defaultModel;return a=>aX({provider:c,command:d,model:e},b=>b(a))}(f,b);await aZ(f,g,h,i,{db:b,now:c,windowMs:d,notify:e})}catch(a){(0,k.v)(`[release] sweep failed for ${f.name}`,a)}}async function aZ(a,b,c,d,e){let{db:f,now:g,windowMs:h}=e;for(let i of(0,s.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 a$(a,i,b,c,d,e)}catch(b){(0,k.v)(`[release] job ${i.id} failed for ${a.name}`,b)}}}async function a$(a,b,c,d,e,f){let{db:g,notify:h}=f,i=b.prNumber,j=await c.prHeadSha(i),k=(0,aQ.v0)({repoId:a.id,mode:"auto",triggerPrNumber:i,triggerSha:j},g);if("detected"!==k.status)return;let l=await aW(k.id,{repo:a,forge:d,db:g,generate:e});"published"===l.status&&l.tag&&await h("release_published",`🚀 Released ${a.name} ${l.tag}.`)}let a_=["resolved","failed","rejected","flagged"],a0={pending:["queued","rejected","flagged"],queued:["in_progress","flagged","rejected"],in_progress:["resolved","failed","flagged","queued"],resolved:[],failed:[],rejected:[],flagged:[]};class a1 extends Error{constructor(a,b){super(`invalid feedback transition: ${a} -> ${b}`)}}let a2=/\b(out of scope|follow[- ]?up|separate pr|different pr|unrelated|won'?t fix|nevermind|never mind|ignore this)\b/i,a3=/\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 a4(a,b,c={},d=(0,g.Lf)()){let e=d.select().from(j.reviewFeedbackItems).where((0,f.eq)(j.reviewFeedbackItems.id,a)).get();if(!e)throw Error(`review feedback item ${a} not found`);var h=e.status;if(!a0[h].includes(b))throw new a1(h,b);return d.update(j.reviewFeedbackItems).set({status:b,detail:c.detail??e.detail,attempts:"in_progress"===b?e.attempts+1:e.attempts,updatedAt:Math.floor(Date.now()/1e3)}).where((0,f.eq)(j.reviewFeedbackItems.id,a)).returning().get()}let a5={maxItemsPerSweep:3,maxAttemptsPerItem:2};async function a6(a,b,c){var d;let e=(d=b.id,`<!-- drydock:review-feedback:${d} -->`),f=`${c}
|
|
4
4
|
|