@nilsr0711/drydock 0.1.3 → 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.
Files changed (247) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +4 -2
  3. package/.next/standalone/.next/build-manifest.json +5 -5
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/routes-manifest.json +12 -0
  6. package/.next/standalone/.next/server/app/_global-error/page.js +2 -2
  7. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.rsc +7 -7
  10. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  11. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
  12. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +3 -3
  13. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  14. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  15. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  17. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/adrs/page.js +2 -2
  20. package/.next/standalone/.next/server/app/adrs/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/adrs/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/analytics/page.js +2 -0
  23. package/.next/standalone/.next/server/app/analytics/page.js.nft.json +1 -0
  24. package/.next/standalone/.next/server/app/analytics/page_client-reference-manifest.js +1 -0
  25. package/.next/standalone/.next/server/app/api/cost/export/route.js +2 -1
  26. package/.next/standalone/.next/server/app/api/cost/export/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/sse/dashboard/route.js +15 -2
  28. package/.next/standalone/.next/server/app/api/sse/dashboard/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/sse/jobs/[id]/route.js +2 -2
  30. package/.next/standalone/.next/server/app/api/sse/jobs/[id]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js +14 -1
  32. package/.next/standalone/.next/server/app/api/webhooks/[repoId]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/costs/page.js +2 -2
  34. package/.next/standalone/.next/server/app/costs/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/costs/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/jobs/[id]/page.js +3 -5
  37. package/.next/standalone/.next/server/app/jobs/[id]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/jobs/[id]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/jobs/page.js +2 -0
  40. package/.next/standalone/.next/server/app/jobs/page.js.nft.json +1 -0
  41. package/.next/standalone/.next/server/app/jobs/page_client-reference-manifest.js +1 -0
  42. package/.next/standalone/.next/server/app/needs-human/page.js +2 -2
  43. package/.next/standalone/.next/server/app/needs-human/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/needs-human/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/page.js +2 -2
  46. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/prompts/page.js +2 -2
  49. package/.next/standalone/.next/server/app/prompts/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/prompts/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/repos/[id]/page.js +2 -2
  52. package/.next/standalone/.next/server/app/repos/[id]/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/repos/[id]/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/settings/page.js +2 -2
  55. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app-paths-manifest.json +4 -2
  58. package/.next/standalone/.next/server/chunks/198.js +1 -0
  59. package/.next/standalone/.next/server/chunks/279.js +1 -0
  60. package/.next/standalone/.next/server/chunks/318.js +14 -0
  61. package/.next/standalone/.next/server/chunks/417.js +1 -0
  62. package/.next/standalone/.next/server/chunks/468.js +24 -0
  63. package/.next/standalone/.next/server/chunks/471.js +1 -0
  64. package/.next/standalone/.next/server/chunks/49.js +3 -0
  65. package/.next/standalone/.next/server/chunks/496.js +1 -0
  66. package/.next/standalone/.next/server/chunks/511.js +1 -0
  67. package/.next/standalone/.next/server/chunks/541.js +1 -1
  68. package/.next/standalone/.next/server/chunks/665.js +9 -0
  69. package/.next/standalone/.next/server/chunks/847.js +93 -0
  70. package/.next/standalone/.next/server/chunks/{868.js → 997.js} +2 -2
  71. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  72. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  73. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  74. package/.next/standalone/.next/server/pages/500.html +1 -1
  75. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  77. package/.next/standalone/.next/static/ImQS3LTFl-iHwI2K1uXy0/_buildManifest.js +1 -0
  78. package/.next/standalone/.next/static/chunks/165-f2c11a8b0992483d.js +1 -0
  79. package/.next/standalone/.next/static/chunks/174-34fe81abafec07fe.js +1 -0
  80. package/.next/standalone/.next/static/chunks/188-14494263cefd30a4.js +1 -0
  81. package/.next/standalone/.next/static/chunks/312-5ab18c6fbb20b9cc.js +1 -0
  82. package/.next/standalone/.next/static/chunks/381-b0d5a35969fad985.js +1 -0
  83. package/.next/standalone/.next/static/chunks/540-b0819a434d7516b1.js +1 -0
  84. package/.next/standalone/.next/static/chunks/586-d7d6e7d3794dcf02.js +32 -0
  85. package/.next/standalone/.next/static/chunks/730-ae05580815adb9b2.js +1 -0
  86. package/.next/standalone/.next/static/chunks/736-503f37bb672c129b.js +1 -0
  87. package/.next/standalone/.next/static/chunks/878-f08fd91a6c00d84b.js +62 -0
  88. package/.next/standalone/.next/static/chunks/app/_global-error/page-03b9886f969453ed.js +1 -0
  89. package/.next/standalone/.next/static/chunks/app/_not-found/page-aa469cca9dc68961.js +1 -0
  90. package/.next/standalone/.next/static/chunks/app/adrs/page-ed0f94a800ba51c8.js +1 -0
  91. package/.next/standalone/.next/static/chunks/app/analytics/page-2d61245dbc9dd300.js +1 -0
  92. package/.next/standalone/.next/static/chunks/app/api/cost/export/route-03b9886f969453ed.js +1 -0
  93. package/.next/standalone/.next/static/chunks/app/api/sse/dashboard/route-03b9886f969453ed.js +1 -0
  94. package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-03b9886f969453ed.js +1 -0
  95. package/.next/standalone/.next/static/chunks/app/api/webhooks/[repoId]/route-03b9886f969453ed.js +1 -0
  96. package/.next/standalone/.next/static/chunks/app/costs/page-3eca75e55c68e079.js +1 -0
  97. package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-528826c79cab6cbb.js +1 -0
  98. package/.next/standalone/.next/static/chunks/app/jobs/page-70bd2189d7249e3f.js +1 -0
  99. package/.next/standalone/.next/static/chunks/app/layout-0e04e8b455f51432.js +1 -0
  100. package/.next/standalone/.next/static/chunks/app/needs-human/page-90cc5147aadb3ebe.js +1 -0
  101. package/.next/standalone/.next/static/chunks/app/page-a142f2aa01a429d9.js +1 -0
  102. package/.next/standalone/.next/static/chunks/app/prompts/page-fba107f32faa6568.js +1 -0
  103. package/.next/standalone/.next/static/chunks/app/repos/[id]/page-0da8e297142d8567.js +1 -0
  104. package/.next/standalone/.next/static/chunks/app/settings/page-bd473b1d183c3db6.js +1 -0
  105. package/.next/standalone/.next/static/chunks/ec24c40a-fc218f196ad8b89e.js +1 -0
  106. package/.next/standalone/.next/static/chunks/framework-3631188fe017d11d.js +1 -0
  107. package/.next/standalone/.next/static/chunks/main-app-2ce5d113f02aa743.js +1 -0
  108. package/.next/standalone/.next/static/chunks/main-c73a28f721635e7a.js +5 -0
  109. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-03b9886f969453ed.js +1 -0
  110. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-03b9886f969453ed.js +1 -0
  111. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-3d82ee7a5f817d84.js +1 -0
  112. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-03b9886f969453ed.js +1 -0
  113. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-03b9886f969453ed.js +1 -0
  114. package/.next/standalone/.next/static/css/96c4f935104c1f9a.css +3 -0
  115. package/.next/standalone/drizzle/0010_one_shot_costs.sql +12 -0
  116. package/.next/standalone/drizzle/0021_robust_wind_dancer.sql +48 -0
  117. package/.next/standalone/drizzle/0022_issue_model_override.sql +2 -0
  118. package/.next/standalone/drizzle/meta/0021_snapshot.json +1780 -0
  119. package/.next/standalone/drizzle/meta/_journal.json +7 -0
  120. package/.next/standalone/package.json +2 -1
  121. package/.next/static/ImQS3LTFl-iHwI2K1uXy0/_buildManifest.js +1 -0
  122. package/.next/static/chunks/165-f2c11a8b0992483d.js +1 -0
  123. package/.next/static/chunks/174-34fe81abafec07fe.js +1 -0
  124. package/.next/static/chunks/188-14494263cefd30a4.js +1 -0
  125. package/.next/static/chunks/312-5ab18c6fbb20b9cc.js +1 -0
  126. package/.next/static/chunks/381-b0d5a35969fad985.js +1 -0
  127. package/.next/static/chunks/540-b0819a434d7516b1.js +1 -0
  128. package/.next/static/chunks/586-d7d6e7d3794dcf02.js +32 -0
  129. package/.next/static/chunks/730-ae05580815adb9b2.js +1 -0
  130. package/.next/static/chunks/736-503f37bb672c129b.js +1 -0
  131. package/.next/static/chunks/878-f08fd91a6c00d84b.js +62 -0
  132. package/.next/static/chunks/app/_global-error/page-03b9886f969453ed.js +1 -0
  133. package/.next/static/chunks/app/_not-found/page-aa469cca9dc68961.js +1 -0
  134. package/.next/static/chunks/app/adrs/page-ed0f94a800ba51c8.js +1 -0
  135. package/.next/static/chunks/app/analytics/page-2d61245dbc9dd300.js +1 -0
  136. package/.next/static/chunks/app/api/cost/export/route-03b9886f969453ed.js +1 -0
  137. package/.next/static/chunks/app/api/sse/dashboard/route-03b9886f969453ed.js +1 -0
  138. package/.next/static/chunks/app/api/sse/jobs/[id]/route-03b9886f969453ed.js +1 -0
  139. package/.next/static/chunks/app/api/webhooks/[repoId]/route-03b9886f969453ed.js +1 -0
  140. package/.next/static/chunks/app/costs/page-3eca75e55c68e079.js +1 -0
  141. package/.next/static/chunks/app/jobs/[id]/page-528826c79cab6cbb.js +1 -0
  142. package/.next/static/chunks/app/jobs/page-70bd2189d7249e3f.js +1 -0
  143. package/.next/static/chunks/app/layout-0e04e8b455f51432.js +1 -0
  144. package/.next/static/chunks/app/needs-human/page-90cc5147aadb3ebe.js +1 -0
  145. package/.next/static/chunks/app/page-a142f2aa01a429d9.js +1 -0
  146. package/.next/static/chunks/app/prompts/page-fba107f32faa6568.js +1 -0
  147. package/.next/static/chunks/app/repos/[id]/page-0da8e297142d8567.js +1 -0
  148. package/.next/static/chunks/app/settings/page-bd473b1d183c3db6.js +1 -0
  149. package/.next/static/chunks/ec24c40a-fc218f196ad8b89e.js +1 -0
  150. package/.next/static/chunks/framework-3631188fe017d11d.js +1 -0
  151. package/.next/static/chunks/main-app-2ce5d113f02aa743.js +1 -0
  152. package/.next/static/chunks/main-c73a28f721635e7a.js +5 -0
  153. package/.next/static/chunks/next/dist/client/components/builtin/app-error-03b9886f969453ed.js +1 -0
  154. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-03b9886f969453ed.js +1 -0
  155. package/.next/static/chunks/next/dist/client/components/builtin/global-error-3d82ee7a5f817d84.js +1 -0
  156. package/.next/static/chunks/next/dist/client/components/builtin/not-found-03b9886f969453ed.js +1 -0
  157. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-03b9886f969453ed.js +1 -0
  158. package/.next/static/css/96c4f935104c1f9a.css +3 -0
  159. package/README.md +11 -3
  160. package/bin/drydock.mjs +32 -0
  161. package/drizzle/0010_one_shot_costs.sql +12 -0
  162. package/drizzle/0021_robust_wind_dancer.sql +48 -0
  163. package/drizzle/0022_issue_model_override.sql +2 -0
  164. package/drizzle/meta/0021_snapshot.json +1780 -0
  165. package/drizzle/meta/_journal.json +7 -0
  166. package/package.json +2 -1
  167. package/.next/standalone/.next/server/chunks/185.js +0 -32
  168. package/.next/standalone/.next/server/chunks/235.js +0 -1
  169. package/.next/standalone/.next/server/chunks/309.js +0 -1
  170. package/.next/standalone/.next/server/chunks/350.js +0 -9
  171. package/.next/standalone/.next/server/chunks/39.js +0 -3
  172. package/.next/standalone/.next/server/chunks/447.js +0 -1
  173. package/.next/standalone/.next/server/chunks/462.js +0 -1
  174. package/.next/standalone/.next/server/chunks/507.js +0 -9
  175. package/.next/standalone/.next/server/chunks/537.js +0 -1
  176. package/.next/standalone/.next/server/chunks/579.js +0 -62
  177. package/.next/standalone/.next/server/chunks/710.js +0 -1
  178. package/.next/standalone/.next/server/chunks/777.js +0 -1
  179. package/.next/standalone/.next/server/chunks/9.js +0 -3
  180. package/.next/standalone/.next/static/chunks/0-539cfb6a78b205f0.js +0 -1
  181. package/.next/standalone/.next/static/chunks/586-4f743a204f11d627.js +0 -32
  182. package/.next/standalone/.next/static/chunks/66-a23941cbbf88d6cd.js +0 -1
  183. package/.next/standalone/.next/static/chunks/700-c294ac6d353097ec.js +0 -1
  184. package/.next/standalone/.next/static/chunks/744-6b71dbc0b45f3dee.js +0 -1
  185. package/.next/standalone/.next/static/chunks/750-1062dd98095cb147.js +0 -62
  186. package/.next/standalone/.next/static/chunks/77-ff0a9221f1786b0e.js +0 -1
  187. package/.next/standalone/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +0 -1
  188. package/.next/standalone/.next/static/chunks/app/_not-found/page-fbc46f6809bf01bc.js +0 -1
  189. package/.next/standalone/.next/static/chunks/app/adrs/page-54954f500bc3e3c6.js +0 -1
  190. package/.next/standalone/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +0 -1
  191. package/.next/standalone/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +0 -1
  192. package/.next/standalone/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +0 -1
  193. package/.next/standalone/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +0 -1
  194. package/.next/standalone/.next/static/chunks/app/costs/page-737c89e70adff98b.js +0 -1
  195. package/.next/standalone/.next/static/chunks/app/jobs/[id]/page-217e04f338b50a7e.js +0 -1
  196. package/.next/standalone/.next/static/chunks/app/layout-f6048a8c9f541e0d.js +0 -1
  197. package/.next/standalone/.next/static/chunks/app/needs-human/page-c047e3e842681979.js +0 -1
  198. package/.next/standalone/.next/static/chunks/app/page-382b7fef1f749214.js +0 -1
  199. package/.next/standalone/.next/static/chunks/app/prompts/page-9e32fb8f51e7873e.js +0 -1
  200. package/.next/standalone/.next/static/chunks/app/repos/[id]/page-55b03bdcf107eefe.js +0 -1
  201. package/.next/standalone/.next/static/chunks/app/settings/page-5b2b8683fa6afdf4.js +0 -1
  202. package/.next/standalone/.next/static/chunks/ec24c40a-96b312d151fe54b7.js +0 -1
  203. package/.next/standalone/.next/static/chunks/framework-79acb3679912dc5b.js +0 -1
  204. package/.next/standalone/.next/static/chunks/main-a0c070ad11c80668.js +0 -5
  205. package/.next/standalone/.next/static/chunks/main-app-94b142817f01731e.js +0 -1
  206. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +0 -1
  207. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +0 -1
  208. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-0d321d74b6d9f17c.js +0 -1
  209. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +0 -1
  210. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +0 -1
  211. package/.next/standalone/.next/static/css/64af283f7f467bc0.css +0 -3
  212. package/.next/standalone/.next/static/g7t6i0qpogjrDGpmNgFei/_buildManifest.js +0 -1
  213. package/.next/static/chunks/0-539cfb6a78b205f0.js +0 -1
  214. package/.next/static/chunks/586-4f743a204f11d627.js +0 -32
  215. package/.next/static/chunks/66-a23941cbbf88d6cd.js +0 -1
  216. package/.next/static/chunks/700-c294ac6d353097ec.js +0 -1
  217. package/.next/static/chunks/744-6b71dbc0b45f3dee.js +0 -1
  218. package/.next/static/chunks/750-1062dd98095cb147.js +0 -62
  219. package/.next/static/chunks/77-ff0a9221f1786b0e.js +0 -1
  220. package/.next/static/chunks/app/_global-error/page-abc1c30fe033f680.js +0 -1
  221. package/.next/static/chunks/app/_not-found/page-fbc46f6809bf01bc.js +0 -1
  222. package/.next/static/chunks/app/adrs/page-54954f500bc3e3c6.js +0 -1
  223. package/.next/static/chunks/app/api/cost/export/route-abc1c30fe033f680.js +0 -1
  224. package/.next/static/chunks/app/api/sse/dashboard/route-abc1c30fe033f680.js +0 -1
  225. package/.next/static/chunks/app/api/sse/jobs/[id]/route-abc1c30fe033f680.js +0 -1
  226. package/.next/static/chunks/app/api/webhooks/[repoId]/route-abc1c30fe033f680.js +0 -1
  227. package/.next/static/chunks/app/costs/page-737c89e70adff98b.js +0 -1
  228. package/.next/static/chunks/app/jobs/[id]/page-217e04f338b50a7e.js +0 -1
  229. package/.next/static/chunks/app/layout-f6048a8c9f541e0d.js +0 -1
  230. package/.next/static/chunks/app/needs-human/page-c047e3e842681979.js +0 -1
  231. package/.next/static/chunks/app/page-382b7fef1f749214.js +0 -1
  232. package/.next/static/chunks/app/prompts/page-9e32fb8f51e7873e.js +0 -1
  233. package/.next/static/chunks/app/repos/[id]/page-55b03bdcf107eefe.js +0 -1
  234. package/.next/static/chunks/app/settings/page-5b2b8683fa6afdf4.js +0 -1
  235. package/.next/static/chunks/ec24c40a-96b312d151fe54b7.js +0 -1
  236. package/.next/static/chunks/framework-79acb3679912dc5b.js +0 -1
  237. package/.next/static/chunks/main-a0c070ad11c80668.js +0 -5
  238. package/.next/static/chunks/main-app-94b142817f01731e.js +0 -1
  239. package/.next/static/chunks/next/dist/client/components/builtin/app-error-abc1c30fe033f680.js +0 -1
  240. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-abc1c30fe033f680.js +0 -1
  241. package/.next/static/chunks/next/dist/client/components/builtin/global-error-0d321d74b6d9f17c.js +0 -1
  242. package/.next/static/chunks/next/dist/client/components/builtin/not-found-abc1c30fe033f680.js +0 -1
  243. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-abc1c30fe033f680.js +0 -1
  244. package/.next/static/css/64af283f7f467bc0.css +0 -3
  245. package/.next/static/g7t6i0qpogjrDGpmNgFei/_buildManifest.js +0 -1
  246. /package/.next/standalone/.next/static/{g7t6i0qpogjrDGpmNgFei → ImQS3LTFl-iHwI2K1uXy0}/_ssgManifest.js +0 -0
  247. /package/.next/static/{g7t6i0qpogjrDGpmNgFei → ImQS3LTFl-iHwI2K1uXy0}/_ssgManifest.js +0 -0
package/bin/drydock.mjs CHANGED
@@ -13,6 +13,36 @@ import { fileURLToPath } from "node:url";
13
13
 
14
14
  const DEFAULT_HOST = "127.0.0.1";
15
15
  const DEFAULT_PORT = 3737;
16
+
17
+ /**
18
+ * Returns true when the given host address binds only to the local machine.
19
+ * Loopback addresses (127.0.0.1, ::1, localhost) are safe because they are
20
+ * unreachable from the network; all other values expand the attack surface.
21
+ *
22
+ * @param {string} host
23
+ */
24
+ export function isLoopbackHost(host) {
25
+ return host === "127.0.0.1" || host === "::1" || host === "localhost";
26
+ }
27
+
28
+ /**
29
+ * Throws an informative Error when `host` is a non-loopback address and the
30
+ * operator has not set DRYDOCK_ALLOW_REMOTE=1. This is the only gate between
31
+ * the unauthenticated dashboard and the network.
32
+ *
33
+ * @param {string} host
34
+ * @param {Record<string, string | undefined>} [env]
35
+ */
36
+ export function assertSafeHost(host, env = process.env) {
37
+ if (isLoopbackHost(host)) return;
38
+ if (env.DRYDOCK_ALLOW_REMOTE) return;
39
+ throw new Error(
40
+ `Refusing to bind to "${host}": the Drydock dashboard has no authentication and ` +
41
+ `would be reachable by anyone on the network.\n` +
42
+ `To opt in and accept this risk, set DRYDOCK_ALLOW_REMOTE=1:\n` +
43
+ ` DRYDOCK_ALLOW_REMOTE=1 drydock --host ${host}`,
44
+ );
45
+ }
16
46
  const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
17
47
 
18
48
  /**
@@ -270,6 +300,8 @@ async function waitForServer(url, { attempts = 100, intervalMs = 100 } = {}) {
270
300
  }
271
301
 
272
302
  async function serve({ host, port, open }) {
303
+ assertSafeHost(host);
304
+
273
305
  const serverEntry = join(PACKAGE_ROOT, ".next", "standalone", "server.js");
274
306
  if (!existsSync(serverEntry)) {
275
307
  throw new Error(
@@ -0,0 +1,12 @@
1
+ CREATE TABLE `one_shot_costs` (
2
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3
+ `repo_id` integer NOT NULL,
4
+ `type` text NOT NULL,
5
+ `cost_usd` real DEFAULT 0 NOT NULL,
6
+ `input_tokens` integer DEFAULT 0 NOT NULL,
7
+ `output_tokens` integer DEFAULT 0 NOT NULL,
8
+ `created_at` integer DEFAULT (unixepoch()) NOT NULL,
9
+ FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE cascade
10
+ );
11
+ --> statement-breakpoint
12
+ CREATE INDEX `one_shot_costs_repo_idx` ON `one_shot_costs` (`repo_id`);
@@ -0,0 +1,48 @@
1
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
2
+ CREATE TABLE `__new_repos` (
3
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
4
+ `path` text NOT NULL,
5
+ `name` text NOT NULL,
6
+ `default_branch` text DEFAULT 'main' NOT NULL,
7
+ `queue_label` text DEFAULT 'drydock:queue' NOT NULL,
8
+ `working_label` text DEFAULT 'drydock:working' NOT NULL,
9
+ `needs_human_label` text DEFAULT 'drydock:needs-human' NOT NULL,
10
+ `default_model` text DEFAULT 'claude-opus-4-8' NOT NULL,
11
+ `agent` text DEFAULT 'claude' NOT NULL,
12
+ `platform` text DEFAULT 'github' NOT NULL,
13
+ `api_base_url` text,
14
+ `api_token` text,
15
+ `daily_cost_limit_usd` real DEFAULT 10 NOT NULL,
16
+ `adr_gating` integer DEFAULT false NOT NULL,
17
+ `sequential` integer DEFAULT true NOT NULL,
18
+ `auto_triage_enabled` integer DEFAULT false NOT NULL,
19
+ `auto_process_enabled` integer DEFAULT false NOT NULL,
20
+ `auto_heal_ci` integer DEFAULT false NOT NULL,
21
+ `auto_review_feedback` integer DEFAULT false NOT NULL,
22
+ `auto_resolve_merge_conflicts` integer DEFAULT false NOT NULL,
23
+ `include_progress_replies` integer DEFAULT false NOT NULL,
24
+ `auto_decompose` integer DEFAULT false NOT NULL,
25
+ `verify_pr` integer DEFAULT false NOT NULL,
26
+ `auto_heal_deployments` integer DEFAULT false NOT NULL,
27
+ `deployment_platform` text,
28
+ `trusted_reviewers` text DEFAULT '[]' NOT NULL,
29
+ `ignored_bots` text DEFAULT '["dependabot[bot]","github-actions[bot]","codecov[bot]"]' NOT NULL,
30
+ `ready_labels` text DEFAULT '["ready","ready-for-agent","ready-to-work"]' NOT NULL,
31
+ `blocking_labels` text DEFAULT '["blocked","question","needs-human","needs-discussion","wontfix","duplicate","invalid"]' NOT NULL,
32
+ `auto_label_whitelist` text DEFAULT '["bug","enhancement","documentation","ready"]' NOT NULL,
33
+ `priority_authors` text DEFAULT '[]' NOT NULL,
34
+ `min_author_association` text DEFAULT 'approved' NOT NULL,
35
+ `max_attempts` integer DEFAULT 3 NOT NULL,
36
+ `max_job_minutes` integer,
37
+ `max_ci_wait_minutes` integer,
38
+ `max_job_cost_usd` real,
39
+ `agent_instructions` text,
40
+ `release_enabled` integer DEFAULT false NOT NULL,
41
+ `webhook_secret` text,
42
+ `created_at` integer DEFAULT (unixepoch()) NOT NULL
43
+ );
44
+ --> statement-breakpoint
45
+ INSERT INTO `__new_repos`("id", "path", "name", "default_branch", "queue_label", "working_label", "needs_human_label", "default_model", "agent", "platform", "api_base_url", "api_token", "daily_cost_limit_usd", "adr_gating", "sequential", "auto_triage_enabled", "auto_process_enabled", "auto_heal_ci", "auto_review_feedback", "auto_resolve_merge_conflicts", "include_progress_replies", "auto_decompose", "verify_pr", "auto_heal_deployments", "deployment_platform", "trusted_reviewers", "ignored_bots", "ready_labels", "blocking_labels", "auto_label_whitelist", "priority_authors", "min_author_association", "max_attempts", "max_job_minutes", "max_ci_wait_minutes", "max_job_cost_usd", "agent_instructions", "release_enabled", "webhook_secret", "created_at") SELECT "id", "path", "name", "default_branch", "queue_label", "working_label", "needs_human_label", "default_model", "agent", "platform", "api_base_url", "api_token", "daily_cost_limit_usd", "adr_gating", "sequential", "auto_triage_enabled", "auto_process_enabled", "auto_heal_ci", "auto_review_feedback", "auto_resolve_merge_conflicts", "include_progress_replies", "auto_decompose", "verify_pr", "auto_heal_deployments", "deployment_platform", "trusted_reviewers", "ignored_bots", "ready_labels", "blocking_labels", "auto_label_whitelist", "priority_authors", "min_author_association", "max_attempts", "max_job_minutes", "max_ci_wait_minutes", "max_job_cost_usd", "agent_instructions", "release_enabled", "webhook_secret", "created_at" FROM `repos`;--> statement-breakpoint
46
+ DROP TABLE `repos`;--> statement-breakpoint
47
+ ALTER TABLE `__new_repos` RENAME TO `repos`;--> statement-breakpoint
48
+ PRAGMA foreign_keys=ON;
@@ -0,0 +1,2 @@
1
+ ALTER TABLE `issues` ADD COLUMN `model_override` text;--> statement-breakpoint
2
+ ALTER TABLE `issues` ADD COLUMN `agent_override` text;