@wular/coder 0.4.2 → 0.4.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 (927) hide show
  1. package/dist/actions-CmfXOVXQ.js +20 -0
  2. package/dist/adapter-7SEiVsmp.js +1 -0
  3. package/dist/adapter-BLEfUqoQ.js +1 -0
  4. package/dist/adapter-H4GlcKQz.js +1 -0
  5. package/dist/add-Bffwutko.js +1 -0
  6. package/dist/add-Bz8uaOcu.js +1 -0
  7. package/dist/add-DTwoL7vJ.js +1 -0
  8. package/dist/add-cdKdz3K0.js +6 -0
  9. package/dist/add-json-BIcbE3Nf.js +1 -0
  10. package/dist/agent-BcXXkOmD.js +3 -0
  11. package/dist/agent-DQK_S1PE.js +1 -0
  12. package/dist/alias-KQ85bphl.js +2 -0
  13. package/dist/app-DaccLHrx.js +1 -0
  14. package/dist/approvals-CZt_aPCy.js +2 -0
  15. package/dist/approve-DxjyXd66.js +2 -0
  16. package/dist/apps-eueTmHR5.js +1 -0
  17. package/dist/archive-C3JazQuo.js +3 -0
  18. package/dist/archive-C9yrU4Wg.js +4 -0
  19. package/dist/archive-sweep-CHbOP-p6.js +1 -0
  20. package/dist/args-DEMOfLz2.js +1 -0
  21. package/dist/ask-DdYrvsTk.js +4 -0
  22. package/dist/auth-FTKev9__.js +1 -0
  23. package/dist/auth-q8CROpG-.js +1 -0
  24. package/dist/chat-bridge-18koyS7c.js +2 -0
  25. package/dist/chat-cknlIhVh.js +13 -0
  26. package/dist/cli-msOzZFXW.js +9 -0
  27. package/dist/cli.d.ts +1 -1
  28. package/dist/cli.js +1 -1
  29. package/dist/client-31YzOj-i.js +1 -0
  30. package/dist/config-BllYHi8S.js +3 -0
  31. package/dist/create-BYki3g42.js +1 -0
  32. package/dist/credentials-DLMuf9OT.js +1 -0
  33. package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/index.js +1238 -0
  34. package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js +34 -0
  35. package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/utils.js +74 -0
  36. package/dist/dash/standalone/node_modules/@tanstack/virtual-core/package.json +56 -0
  37. package/dist/dash/standalone/node_modules/@wular/pnext/config/ts/react.json +10 -0
  38. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/boot-bhemypxz.js +38 -0
  39. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/build-tier-0a96kmx3.js +2456 -0
  40. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/config-0tvz03a6.js +24 -0
  41. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/generate-myw9hef7.js +22 -0
  42. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-0r5eqfc7.js +279 -0
  43. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-0yjv5v47.js +105 -0
  44. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-11xpbfej.js +17 -0
  45. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-141vcwk6.js +109 -0
  46. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-29pq0kax.js +590 -0
  47. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-2vz0wzdn.js +59 -0
  48. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-2wfv4kvx.js +182 -0
  49. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-3e075kny.js +128 -0
  50. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-3ycf5ckv.js +472 -0
  51. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4399bvd2.js +18 -0
  52. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4da76t62.js +297 -0
  53. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4zzebszd.js +10 -0
  54. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-52k54ykj.js +95 -0
  55. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-5hr4062s.js +70 -0
  56. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-68m3mwbd.js +84 -0
  57. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6b009mt0.js +56 -0
  58. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6kp9r0d9.js +11 -0
  59. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6q7zvrap.js +134 -0
  60. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-71885zaq.js +284 -0
  61. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-73z4esab.js +38 -0
  62. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-79ngvam8.js +60 -0
  63. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-7wc9n8be.js +25 -0
  64. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-8ct7rqy3.js +198 -0
  65. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-8kcxdfya.js +206 -0
  66. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-9f49w76j.js +213 -0
  67. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-9hz3s0m8.js +851 -0
  68. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-akkrvjn6.js +535 -0
  69. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-b6wtkdp4.js +24 -0
  70. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-b7j671dj.js +207 -0
  71. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-bcws5eh2.js +35 -0
  72. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-bzd2ef7t.js +10 -0
  73. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cjgqs13g.js +65 -0
  74. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ckkdpht5.js +41 -0
  75. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cn86z041.js +296 -0
  76. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cvr4z22m.js +92 -0
  77. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-d158y67j.js +152 -0
  78. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-d1jsmhhk.js +955 -0
  79. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-dgr390q7.js +9438 -0
  80. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-e3a6yx84.js +18 -0
  81. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-en7n9f7m.js +22 -0
  82. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ezgj0tr1.js +88 -0
  83. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-fn1chkkd.js +214 -0
  84. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-fp8r0sqs.js +64 -0
  85. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-gcmj16xy.js +92 -0
  86. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-gkndxkxf.js +736 -0
  87. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-grta8ap3.js +238 -0
  88. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-h2a70tg4.js +7 -0
  89. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-h4xy648y.js +51 -0
  90. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-hdbwtdv2.js +352 -0
  91. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-he6n2bvp.js +1270 -0
  92. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j0m1jxqa.js +1253 -0
  93. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j2zrcp1k.js +66 -0
  94. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j681c48a.js +2530 -0
  95. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jbj7ehef.js +50 -0
  96. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jcsjq3d1.js +20 -0
  97. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jks0x0a1.js +14 -0
  98. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jn9rbhrx.js +1599 -0
  99. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jt8e1pje.js +12 -0
  100. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-kdhxpwyq.js +483 -0
  101. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-knp0s912.js +7 -0
  102. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-kresp2n8.js +445 -0
  103. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-m63czgq5.js +590 -0
  104. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-n4hxpng2.js +11 -0
  105. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-n629dy38.js +1071 -0
  106. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-nf3df4jy.js +266 -0
  107. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-nqh3xhdc.js +57 -0
  108. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-pym1cezq.js +39 -0
  109. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-q3r9z8mq.js +213 -0
  110. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-q738kkhj.js +100 -0
  111. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qcrvt6er.js +112 -0
  112. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qjj6gddn.js +54 -0
  113. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qpwsgt3a.js +158 -0
  114. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ras0sdab.js +26 -0
  115. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rcs322t1.js +19 -0
  116. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rgj5mx84.js +101 -0
  117. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rt9qq1va.js +4 -0
  118. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-sq3kvz3g.js +200 -0
  119. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-stbk3jhn.js +31 -0
  120. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tf4j19ge.js +130 -0
  121. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tgcakdxc.js +125 -0
  122. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tgsfjmep.js +74 -0
  123. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tq3b39a5.js +107 -0
  124. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-typcbcsv.js +819 -0
  125. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-v1ags1na.js +132 -0
  126. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-vmr35jjw.js +170 -0
  127. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-vz0km5qk.js +33 -0
  128. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-w6h8m6vp.js +138 -0
  129. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-web361b8.js +138 -0
  130. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-wm36rj4v.js +311 -0
  131. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x0y005nh.js +283 -0
  132. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x2m17v9c.js +6166 -0
  133. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x9c55pzy.js +871 -0
  134. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-xh1nbk46.js +1299 -0
  135. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-xvj80c3a.js +30 -0
  136. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-y4d02znn.js +66 -0
  137. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-y7mzvq2q.js +110 -0
  138. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ye9hmsvf.js +47 -0
  139. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-yhxkxghe.js +56 -0
  140. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-yrjkqtfj.js +86 -0
  141. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-z88qv16t.js +11 -0
  142. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-zqpqyg8p.js +666 -0
  143. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/pipeline-4t9q43ht.js +836 -0
  144. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/proxy-config-60gprphe.js +23 -0
  145. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/proxy-gfhmktbk.js +35 -0
  146. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/router-xnrva921.js +501 -0
  147. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/routes-ht868pdc.js +66 -0
  148. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/tsconfig-defaults-bcn34eqb.js +21 -0
  149. package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/cli/start.js +158 -0
  150. package/dist/dash/standalone/node_modules/@wular/pnext/package.json +98 -0
  151. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/client-navigation.ts +337 -0
  152. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/dynamic.tsx +188 -0
  153. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/link.tsx +118 -0
  154. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/navigation.ts +199 -0
  155. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/server.ts +349 -0
  156. package/dist/dash/standalone/node_modules/@wular/pnext/src/api/suspense.ts +16 -0
  157. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/events.ts +68 -0
  158. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/history.ts +70 -0
  159. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/hub.ts +201 -0
  160. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/index.ts +168 -0
  161. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/page-slot.ts +139 -0
  162. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/policies.ts +107 -0
  163. package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/runtime.ts +6272 -0
  164. package/dist/dash/standalone/node_modules/@wular/pnext/src/request/cache.ts +64 -0
  165. package/dist/dash/standalone/node_modules/@wular/pnext/src/routing/href.ts +236 -0
  166. package/dist/dash/standalone/node_modules/@wular/pnext/src/utils/decode.ts +7 -0
  167. package/dist/dash/standalone/node_modules/@wular/pnext/tsconfig.json +10 -0
  168. package/dist/dash/standalone/node_modules/dotenv/lib/main.js +386 -0
  169. package/dist/dash/standalone/node_modules/dotenv/package.json +62 -0
  170. package/dist/dash/standalone/node_modules/preact/compat/client.mjs +24 -0
  171. package/dist/dash/standalone/node_modules/preact/compat/dist/compat.mjs +2 -0
  172. package/dist/dash/standalone/node_modules/preact/compat/package.json +55 -0
  173. package/dist/dash/standalone/node_modules/preact/dist/preact.mjs +2 -0
  174. package/dist/dash/standalone/node_modules/preact/hooks/dist/hooks.mjs +2 -0
  175. package/dist/dash/standalone/node_modules/preact/hooks/package.json +35 -0
  176. package/dist/dash/standalone/node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +2 -0
  177. package/dist/dash/standalone/node_modules/preact/jsx-runtime/package.json +28 -0
  178. package/dist/dash/standalone/node_modules/preact/package.json +265 -0
  179. package/dist/dash/standalone/node_modules/preact-render-to-string/dist/index.mjs +2 -0
  180. package/dist/dash/standalone/node_modules/preact-render-to-string/dist/stream/index.mjs +2 -0
  181. package/dist/dash/standalone/node_modules/preact-render-to-string/package.json +147 -0
  182. package/dist/dash/standalone/node_modules/react/cjs/react.react-server.development.js +878 -0
  183. package/dist/dash/standalone/node_modules/react/cjs/react.react-server.production.js +436 -0
  184. package/dist/dash/standalone/node_modules/react/package.json +51 -0
  185. package/dist/dash/standalone/node_modules/react/react.react-server.js +7 -0
  186. package/dist/dash/standalone/node_modules/react-compiler-runtime/dist/index.js +385 -0
  187. package/dist/dash/standalone/node_modules/react-compiler-runtime/package.json +25 -0
  188. package/dist/dash/standalone/package.json +1 -0
  189. package/dist/dash/standalone/server/build-index.json +1 -0
  190. package/dist/dash/standalone/server/entry.js +1 -0
  191. package/dist/dash/standalone/server/manifest.json +3311 -0
  192. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/index.2feb1c162fab6033.js +336 -0
  193. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.f8b4eee28e030eda.js +27 -0
  194. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/errors.5e991e43e42bd943.js +21 -0
  195. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/log-view.d6aae19495a81adb.js +211 -0
  196. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.7ee1680af722840f.js +11 -0
  197. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/load.bdbf17006af803d1.js +45 -0
  198. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/types.0cf02e7714d7c1a2.js +5 -0
  199. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.0a054a6c9dda53b3.js +23 -0
  200. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/loading.02d57ab48022f8d8.js +9 -0
  201. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/notify.b7451fdf9c3bb62a.js +34 -0
  202. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/page.f9ab6ed02876880e.js +113 -0
  203. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/sign-out.3368aed882d8f1ac.js +13 -0
  204. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agent-menu.e4b6d486442476b5.js +12 -0
  205. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agents-grid.0dbc57156286a18e.js +118 -0
  206. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/connect-apps.3a5673bcd9aa57d9.js +42 -0
  207. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/loading.8df9f4459410cfaa.js +18 -0
  208. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/page.8f85fbaff456c5fe.js +71 -0
  209. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/page.9ea9df9d5f80f310.css.pnext-asset.js +0 -0
  210. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.d3aec63db0f5230d.js +105 -0
  211. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.d53d174ffe56aab3.js +5 -0
  212. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/page.3120ea9ec90cb9cc.css.pnext-asset.js +0 -0
  213. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/page.7fd1bfcf08e25919.js +116 -0
  214. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.849dc6e6050a7e21.js +10 -0
  215. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.143668a9c21806d6.css.pnext-asset.js +0 -0
  216. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.31687af871d75d39.js +170 -0
  217. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.754eff65aec1ab59.js +70 -0
  218. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.861ed9832cbe89c1.js +268 -0
  219. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.d6de90cb40c3bd46.css.pnext-asset.js +0 -0
  220. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.2ec7a3b893925df0.js +8 -0
  221. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.1ed5379637860fab.js +35 -0
  222. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/loading.20a52282c5806719.js +5 -0
  223. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/page.4fd369ba79ed9943.js +11 -0
  224. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/@/app/dash/usage/range-bar.4408a4e0ee81b7b6.css.pnext-asset.js +0 -0
  225. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/@/comps/ui/segmented.ded4aa5c0cd2c608.css.pnext-asset.js +0 -0
  226. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/loading.43b58c5eef3d4253.js +48 -0
  227. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.78bf188a8077c64e.js +160 -0
  228. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.ae5cbdfc43af6658.css.pnext-asset.js +0 -0
  229. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/versions-list.0c6811b66b2fcc49.js +41 -0
  230. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/loading.a18042397ffeaf55.js +29 -0
  231. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/page.1798dbd9cd334e8f.js +69 -0
  232. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.c5710a4f634f9d6a.js +67 -0
  233. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.dcf7e785044cc900.css.pnext-asset.js +0 -0
  234. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.a794a01218c5c9ce.css.pnext-asset.js +0 -0
  235. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.e5c5af2f9fab6a63.js +62 -0
  236. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/instructions.2176859ec1028fc0.css.pnext-asset.js +0 -0
  237. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/instructions.403838f7cb218391.js +74 -0
  238. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/@/app/dash/agents/(list)/page.f2e88eb443d45a74.css.pnext-asset.js +0 -0
  239. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/connect-repositories.6c7088fd2fcd54f4.js +11 -0
  240. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/editor.4b164e6eb19daa2f.js +691 -0
  241. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/editor.6b13621790a6d5d6.css.pnext-asset.js +0 -0
  242. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/import-picker.4bff9b5642aeab17.js +214 -0
  243. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/names.cf9e376a918a5341.js +30 -0
  244. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/loading.72e1b274c475e39a.js +28 -0
  245. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/page.44f60b1a32344f70.js +55 -0
  246. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/layout.946ec7c4ebb1d7c6.css.pnext-asset.js +0 -0
  247. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/layout.96376d18592adfa9.js +391 -0
  248. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/page.669f5926ae12d101.js +10 -0
  249. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials-list.3bd27b14c0d60e48.css.pnext-asset.js +0 -0
  250. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials-list.3fbc413d972a0447.js +538 -0
  251. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.6423846391b20446.js +34 -0
  252. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/engines-list.39cd71b7dc568516.css.pnext-asset.js +0 -0
  253. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/engines-list.5bad79f0d4e12e07.js +75 -0
  254. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/list.2a204889b73638d9.css.pnext-asset.js +0 -0
  255. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/list.2cafbe93b7b2dc0f.js +172 -0
  256. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/loading.1a810cc50ea61706.js +6 -0
  257. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.1fc0f6165dd85b8c.js +249 -0
  258. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.d743e37cd6dc85d8.css.pnext-asset.js +0 -0
  259. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/models-list.520cb30b291794c3.js +396 -0
  260. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.04b07f9c365be073.js +86 -0
  261. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/runners-list.3dac92fb9f64e2be.css.pnext-asset.js +0 -0
  262. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/runners-list.67786d7d51692d19.js +380 -0
  263. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/layout.a619ac4fe999d1b5.js +39 -0
  264. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/model-options.2ca6c87aedf3588c.js +87 -0
  265. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/page.5edeae58f2154a50.js +6 -0
  266. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/settings-head.d726e31e4dd04d60.js +32 -0
  267. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/tunnel-guide.22448081e9e042d6.js +31 -0
  268. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/activity.b23683e6be363068.js +177 -0
  269. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/loading.a8f2aa099bd76606.js +37 -0
  270. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.d1ded90712ca586f.js +24 -0
  271. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-actions.f2be118dd5a02896.js +184 -0
  272. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-view.97433b52e6f7175c.js +593 -0
  273. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-view.c2288044c9032a89.css.pnext-asset.js +0 -0
  274. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer-data.e2d442d6ecbaa6d3.js +63 -0
  275. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer.41721fb98004e79e.css.pnext-asset.js +0 -0
  276. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer.78b7d3000d615c7c.js +730 -0
  277. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/status.9516cc22cbd5d84b.css.pnext-asset.js +0 -0
  278. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/status.d78e769ff1411932.js +16 -0
  279. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/task.674ebeabafa0a7e1.js +53 -0
  280. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-list.55fa11c945f9c6db.css.pnext-asset.js +0 -0
  281. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-list.9698bdff71c3b3c7.js +429 -0
  282. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-section.c77194f05c3f58fb.js +79 -0
  283. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/page.157ac3a0938206b0.js +16 -0
  284. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/@/app/dash/usage/range-bar.72f0c7c440fb34af.css.pnext-asset.js +0 -0
  285. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/@/comps/ui/segmented.81631cafb8e3b260.css.pnext-asset.js +0 -0
  286. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/custom-range.9343f6115e244cb4.js +64 -0
  287. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/day-chart.c7b7d04403f0fc79.css.pnext-asset.js +0 -0
  288. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/day-chart.c7f6c8981a7acb15.js +70 -0
  289. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/loading.1716941ff725f152.js +15 -0
  290. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/metric.5481ab0e025e218e.js +10 -0
  291. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/page.4159d729e8aa0439.js +132 -0
  292. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/range-bar.671afdd0798f4de9.css.pnext-asset.js +0 -0
  293. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/range-bar.8c9b18116c8eb5f0.js +60 -0
  294. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/stats.3b02ee8317b9c4e3.css.pnext-asset.js +0 -0
  295. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/stats.7b8db8c56920b311.js +12 -0
  296. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/top-agents.441006da5b4eae17.css.pnext-asset.js +0 -0
  297. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/top-agents.8af5d53eb64bae9c.js +89 -0
  298. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/usage.d6df7cb6980171ce.css.pnext-asset.js +0 -0
  299. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/globals.89a59affc5df947b.css.pnext-asset.js +0 -0
  300. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/layout.77960a272f19bf24.js +41 -0
  301. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/page.33464bce52044759.js +50 -0
  302. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/page.f852a09edc8b6b44.css.pnext-asset.js +0 -0
  303. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/page.7e7f8611a9bb7b22.js +4 -0
  304. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/responsive.1fd73ea94977bfc0.css.pnext-asset.js +0 -0
  305. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/zone.66f36b17e74cf5f8.js +10 -0
  306. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/@/comps/ui/toast.8d599c6821860a1c.css.pnext-asset.js +0 -0
  307. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/auth-panel.3e020d19aa5ab464.js +48 -0
  308. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/auth-panel.e5af611567239b13.css.pnext-asset.js +0 -0
  309. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.9090aa789dffa730.css.pnext-asset.js +0 -0
  310. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.cf0eb4936a2c7222.js +30 -0
  311. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/heads.5407f7793f985b16.js +47 -0
  312. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.9648c7782502babc.js +64 -0
  313. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/page-head.53db3a3d313c0473.css.pnext-asset.js +0 -0
  314. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/page-head.857951b5dc1ad827.js +65 -0
  315. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/stream.4c04416dab6ffc52.js +39 -0
  316. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/task-toasts.b14bb1f66ed75e75.js +324 -0
  317. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/theme-choices.60d3a5adbd49989f.js +49 -0
  318. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/current-link.87758179b507850c.js +34 -0
  319. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/side-toggle.581456c353d76d67.js +36 -0
  320. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/to.248665fde7daaf07.js +11 -0
  321. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.d21391f2f8573db8.css.pnext-asset.js +0 -0
  322. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.e52db98d78836f9a.js +31 -0
  323. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.4f9265213510ffd3.css.pnext-asset.js +0 -0
  324. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.e6876039e375b849.js +40 -0
  325. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.60c9038c70fb9c46.css.pnext-asset.js +0 -0
  326. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.730d674a8f7eeeae.js +33 -0
  327. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/combo.d478120a76502dd1.js +115 -0
  328. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.cd23ea20bdf120d2.js +53 -0
  329. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.fc6d4da835b75a30.css.pnext-asset.js +0 -0
  330. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/field.37f93068217e1470.js +16 -0
  331. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/field.8db4420dfb447e42.css.pnext-asset.js +0 -0
  332. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.3e8df59ca8abf397.js +252 -0
  333. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.9311d535531caaf3.css.pnext-asset.js +0 -0
  334. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icon.476b846e39908951.css.pnext-asset.js +0 -0
  335. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icon.93605083edf7efe3.js +19 -0
  336. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icons.e17bdd0b5504787f.js +36 -0
  337. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.3b3026ecd4dc31f0.js +103 -0
  338. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.d412af459c187b41.css.pnext-asset.js +0 -0
  339. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.171b067d7cb36977.css.pnext-asset.js +0 -0
  340. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.620f07f6b949d7f1.js +38 -0
  341. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.14e820c8a26ab8b5.js +218 -0
  342. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.5dbceaae2ba7ace4.css.pnext-asset.js +0 -0
  343. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.332fb99b3a214f0e.css.pnext-asset.js +0 -0
  344. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.50afec82b0fd53a1.js +59 -0
  345. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.051c87be5bbb7f2b.js +27 -0
  346. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.87bc5cdfc4d1b85e.css.pnext-asset.js +0 -0
  347. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tail.25fd24d6cd0564b7.css.pnext-asset.js +0 -0
  348. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tail.2d57d68076cef3e1.js +25 -0
  349. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.32503820243ede06.js +80 -0
  350. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.5e35e79f4d575452.css.pnext-asset.js +0 -0
  351. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.f37a313f4811ddb8.js +26 -0
  352. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/format.ba382c381ea40e77.js +75 -0
  353. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/paged.64ead375df845ff2.js +152 -0
  354. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/range.f0a5ef1763ff3cb9.js +102 -0
  355. package/dist/dash/standalone/static/assets/chunks/agent-pills-0163fdf910179991.js +1 -0
  356. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-b1fcd9a5236b1fc7.js +1 -0
  357. package/dist/dash/standalone/static/assets/chunks/agents-grid-1d8f0ec6cf8c797e.js +1 -0
  358. package/dist/dash/standalone/static/assets/chunks/badge-9984d2fd0e7f995d.js +1 -0
  359. package/dist/dash/standalone/static/assets/chunks/card-818c7a0d580e2e0d.js +1 -0
  360. package/dist/dash/standalone/static/assets/chunks/combo-0d55fb62af761ac5.js +1 -0
  361. package/dist/dash/standalone/static/assets/chunks/composer-44516934e5619d32.js +1 -0
  362. package/dist/dash/standalone/static/assets/chunks/composer-8abfcac26339cc99.js +1 -0
  363. package/dist/dash/standalone/static/assets/chunks/confirm-be929e2de15876a6.js +1 -0
  364. package/dist/dash/standalone/static/assets/chunks/connect-apps-3e8b55a43315f58a.js +1 -0
  365. package/dist/dash/standalone/static/assets/chunks/connect-repositories-8864a63f83ffd411.js +1 -0
  366. package/dist/dash/standalone/static/assets/chunks/credentials-list-518af85578eacf6d.js +2 -0
  367. package/dist/dash/standalone/static/assets/chunks/custom-range-e8977f0d9699c1e6.js +1 -0
  368. package/dist/dash/standalone/static/assets/chunks/editor-75d6d2d01f4fc35a.js +7 -0
  369. package/dist/dash/standalone/static/assets/chunks/engines-list-2f6b8b3f2e873e4d.js +1 -0
  370. package/dist/dash/standalone/static/assets/chunks/field-43fea54c1c287e30.js +1 -0
  371. package/dist/dash/standalone/static/assets/chunks/filter-55618648fc10c377.js +1 -0
  372. package/dist/dash/standalone/static/assets/chunks/format-b19b8eec331414f4.js +1 -0
  373. package/dist/dash/standalone/static/assets/chunks/heads-1326669bdce3da2f.js +1 -0
  374. package/dist/dash/standalone/static/assets/chunks/instructions-0b968d5d0a58c716.js +2 -0
  375. package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +1 -0
  376. package/dist/dash/standalone/static/assets/chunks/list-90a47c07c4dd932e.js +1 -0
  377. package/dist/dash/standalone/static/assets/chunks/mcp-list-735e401c60ab51a3.js +1 -0
  378. package/dist/dash/standalone/static/assets/chunks/models-list-999f54c76ca31379.js +1 -0
  379. package/dist/dash/standalone/static/assets/chunks/paged-3ddb6077bef42752.js +1 -0
  380. package/dist/dash/standalone/static/assets/chunks/platform-actions-4592c82f72b21b1a.js +1 -0
  381. package/dist/dash/standalone/static/assets/chunks/runners-list-ab64a5fb01d5eef8.js +1 -0
  382. package/dist/dash/standalone/static/assets/chunks/runtime-37175329f2865f15-1.js +2 -0
  383. package/dist/dash/standalone/static/assets/chunks/segmented-bf5a4c06605249e0.js +1 -0
  384. package/dist/dash/standalone/static/assets/chunks/select-591ca78b6ae29bd8.js +1 -0
  385. package/dist/dash/standalone/static/assets/chunks/sentinel-b4c91a38a5d79219.js +1 -0
  386. package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +5 -0
  387. package/dist/dash/standalone/static/assets/chunks/shared-init-37175329f2865f15-2.js +1 -0
  388. package/dist/dash/standalone/static/assets/chunks/shared-init-8a34c730aabe942d.js +2 -0
  389. package/dist/dash/standalone/static/assets/chunks/tail-74153aeac1f0baec.js +1 -0
  390. package/dist/dash/standalone/static/assets/chunks/task-actions-26ad7f7c937f2589.js +1 -0
  391. package/dist/dash/standalone/static/assets/chunks/task-ddfddeaf07fb684c.js +1 -0
  392. package/dist/dash/standalone/static/assets/chunks/task-view-0d085ce407e8511e.js +5 -0
  393. package/dist/dash/standalone/static/assets/chunks/tasks-list-e9e914cf5dd959e9.js +1 -0
  394. package/dist/dash/standalone/static/assets/chunks/toolbar-a99d36b4b6f05bb1.js +1 -0
  395. package/dist/dash/standalone/static/assets/chunks/versions-list-875a9a0ebb3f7d08.js +1 -0
  396. package/dist/dash/standalone/static/assets/chunks/wular-pnext-37175329f2865f15-0.js +1 -0
  397. package/dist/dash/standalone/static/assets/dash-account-edc56e85dbaaabe0.css +1 -0
  398. package/dist/dash/standalone/static/assets/dash-agents-edba57b67e4005d0.css +1 -0
  399. package/dist/dash/standalone/static/assets/dash-agents-new-fe22253fbada2fbf.css +1 -0
  400. package/dist/dash/standalone/static/assets/dash-agents-param-slug-adf52e9dacb2d825.css +1 -0
  401. package/dist/dash/standalone/static/assets/dash-agents-param-slug-edit-a2937a347689ef29.css +1 -0
  402. package/dist/dash/standalone/static/assets/dash-agents-param-slug-platforms-265ba13db32a460d.css +1 -0
  403. package/dist/dash/standalone/static/assets/dash-agents-param-slug-settings-8afc52eb0372bc4b.css +1 -0
  404. package/dist/dash/standalone/static/assets/dash-agents-param-slug-tasks-6193e646be68dbd2.css +1 -0
  405. package/dist/dash/standalone/static/assets/dash-agents-param-slug-usage-ceadb3a1c911c402.css +1 -0
  406. package/dist/dash/standalone/static/assets/dash-settings-cf1997cd7f72e518.css +1 -0
  407. package/dist/dash/standalone/static/assets/dash-settings-param-tab-b44dac8e79a560e6.css +1 -0
  408. package/dist/dash/standalone/static/assets/dash-tasks-916c7100a8058aa3.css +1 -0
  409. package/dist/dash/standalone/static/assets/dash-tasks-param-id-24265771fd1e3f78.css +1 -0
  410. package/dist/dash/standalone/static/assets/dash-usage-40940b289f85e0b6.css +1 -0
  411. package/dist/dash/standalone/static/assets/pnext-client-1473d0349f242421.js +1 -0
  412. package/dist/dash/standalone/static/assets/pnext-client-195f74ae46e817da.js +1 -0
  413. package/dist/dash/standalone/static/assets/pnext-client-2b5532ce488c9391.js +1 -0
  414. package/dist/dash/standalone/static/assets/pnext-client-2d3ea662f22db27f.js +1 -0
  415. package/dist/dash/standalone/static/assets/pnext-client-43c0166e51dce87f.js +1 -0
  416. package/dist/dash/standalone/static/assets/pnext-client-4ed05f9a51f559a3.js +1 -0
  417. package/dist/dash/standalone/static/assets/pnext-client-652affde71fecdf7.js +1 -0
  418. package/dist/dash/standalone/static/assets/pnext-client-82beeebf704714a6.js +1 -0
  419. package/dist/dash/standalone/static/assets/pnext-client-899f9625435988dd.js +1 -0
  420. package/dist/dash/standalone/static/assets/pnext-client-ad1fab64ee1a5b30.js +1 -0
  421. package/dist/dash/standalone/static/assets/pnext-client-b2dccebfff1465f5.js +1 -0
  422. package/dist/dash/standalone/static/assets/pnext-client-c8a42c9bfeded4e4.js +1 -0
  423. package/dist/dash/standalone/static/assets/pnext-client-d04d2ffbb491564c.js +1 -0
  424. package/dist/dash/standalone/static/assets/pnext-client-d060565c4d80b60e.js +1 -0
  425. package/dist/dash/standalone/static/assets/pnext-client-dce6e1b84ee02f09.js +1 -0
  426. package/dist/dash/standalone/static/assets/pnext-client-e753846e298d2403.js +1 -0
  427. package/dist/default-aLeIO8IR.js +1 -0
  428. package/dist/default-fMaQH1wm.js +1 -0
  429. package/dist/delete-Cj16PYaw.js +2 -0
  430. package/dist/delete-DNj3leWA.js +4 -0
  431. package/dist/disable-CQg5Vybq.js +1 -0
  432. package/dist/discover-CaAtyC0h.js +1 -0
  433. package/dist/discover-bVM8EJEz.js +3 -0
  434. package/dist/dispatch-YW1aqjEg.js +14 -0
  435. package/dist/docs-Byrpar10.js +2 -0
  436. package/dist/docs-CqeYenUp.js +2 -0
  437. package/dist/enable-8m3z7i3i.js +1 -0
  438. package/dist/env-LsVTi18f.js +1 -0
  439. package/dist/exec-DgI3boHa.js +11 -0
  440. package/dist/executor-HWnIIYUL.js +10 -0
  441. package/dist/flow/builtin/review.js +1 -1
  442. package/dist/flow/index.d.ts +2 -2
  443. package/dist/flow/index.js +1 -1
  444. package/dist/flow-DeCL3x2p.js +1 -0
  445. package/dist/github-actions-CvLya8ve.js +24 -0
  446. package/dist/http-DG54kyx4.js +1 -0
  447. package/dist/index-Xe8n_t2Z.d.ts +365 -0
  448. package/dist/init-BujliQ7q.js +1 -0
  449. package/dist/integrations-6kXL9hRo.js +1 -0
  450. package/dist/integrations-B2CavXR1.js +5 -0
  451. package/dist/lib/broker.js +2 -2
  452. package/dist/list-BdiYneg5.js +1 -0
  453. package/dist/list-CXu4cr8D.js +4 -0
  454. package/dist/list-DGoVY-ao.js +1 -0
  455. package/dist/list-DbY1jyj3.js +2 -0
  456. package/dist/list-DhVfqr0A.js +1 -0
  457. package/dist/list-DyqtSWvn.js +1 -0
  458. package/dist/list-QLTjk5SN.js +3 -0
  459. package/dist/list-vKOTwd4G.js +4 -0
  460. package/dist/load-DDZfByUe.js +2 -0
  461. package/dist/local-B0GiaLV0.js +1 -0
  462. package/dist/log-view-DeJstSkw.js +3 -0
  463. package/dist/login-BzdlmD_o.js +1 -0
  464. package/dist/login-otJB9SYu.js +1 -0
  465. package/dist/logout-DOrRoxDV.js +1 -0
  466. package/dist/maintenance-Bg_FzXSq.js +1 -0
  467. package/dist/match-DMI54zg4.js +1 -0
  468. package/dist/mcp-DgMoPoUo.js +1 -0
  469. package/dist/mcp-xSvAWiXX.js +1 -0
  470. package/dist/migrate-CN-fdMV9.js +2 -0
  471. package/dist/migrate-DAC6sFgg.js +1 -0
  472. package/dist/model-BJ-Sokha.js +1 -0
  473. package/dist/models-DGPrMV51.js +1 -0
  474. package/dist/prompt-K7-bKcTC.js +7 -0
  475. package/dist/push-Cg7-XT5h.js +1 -0
  476. package/dist/queue-yo-Z8TaE.js +117 -0
  477. package/dist/refresh-CmBQALAW.js +1 -0
  478. package/dist/remote-AcWWfKVS.js +1 -0
  479. package/dist/remove-BuaShRZ3.js +1 -0
  480. package/dist/remove-C8Rm8KP-.js +1 -0
  481. package/dist/remove-CcMma1x3.js +1 -0
  482. package/dist/remove-DgMg_OOu.js +1 -0
  483. package/dist/rename-C0vNcl8e.js +1 -0
  484. package/dist/result-C6ovl_Dn.js +5 -0
  485. package/dist/result-oQey_hdw.js +18 -0
  486. package/dist/resume-T_TXWfqE.js +3 -0
  487. package/dist/review-CCs6XUSO.js +7 -0
  488. package/dist/rotate-key-CYimsQR5.js +1 -0
  489. package/dist/run-BFYg-zZt.js +5 -0
  490. package/dist/run-D7F7JPV6.js +2 -0
  491. package/dist/run-hiPyO7js.js +2 -0
  492. package/dist/runner-D5jaEfhG.js +1 -0
  493. package/dist/runner-c-2w6Eoj.js +1 -0
  494. package/dist/schema-DoNO0dPh.js +1 -0
  495. package/dist/sdk.d.ts +4 -3
  496. package/dist/sdk.js +1 -1
  497. package/dist/serve-BgGXjT_O.js +1 -0
  498. package/dist/serve-C-AD60Wa.js +12 -0
  499. package/dist/serve-GIK3fqKA.js +8 -0
  500. package/dist/serve-K3BVTcDI.js +2 -0
  501. package/dist/serve-xMihn4g-.js +1 -0
  502. package/dist/server-DQTGc55C.js +1 -0
  503. package/dist/setup-host-By8-gv_v.js +6 -0
  504. package/dist/shared-TznJgMFW.js +1 -0
  505. package/dist/show-C9ojrH5W.js +1 -0
  506. package/dist/show-o4yXzSWZ.js +1 -0
  507. package/dist/status-BBW7Qyde.js +1 -0
  508. package/dist/steer-D47cuggj.js +4 -0
  509. package/dist/stop-7brPdki9.js +1 -0
  510. package/dist/stop-CD2JW6dI.js +3 -0
  511. package/dist/store-BCBTo0rl.js +42 -0
  512. package/dist/store-qp7UE2ES.js +19 -0
  513. package/dist/task-CyrDqqf8.js +1 -0
  514. package/dist/task-DEp3GHwH.js +1 -0
  515. package/dist/task-DhZ5vhyY.js +5 -0
  516. package/dist/test-BcFQUHRo.js +1 -0
  517. package/dist/tools-D20XYPnO.js +1 -0
  518. package/dist/types-DMGBYB_K.d.ts +391 -0
  519. package/dist/unalias-G3sM8fVw.js +1 -0
  520. package/dist/update-JvgB6Xws.js +2 -0
  521. package/dist/upgrade-DN3hXDdo.js +2 -0
  522. package/dist/usage-C1oN2W9c.js +1 -0
  523. package/dist/usage-DR3wWtYD.js +1 -0
  524. package/dist/watch-DDmHonTf.js +5 -0
  525. package/dist/watch-DYkC6Q2q.js +8 -0
  526. package/dist/wire-DxxfWapP.js +1 -0
  527. package/dist/worker-C4Lo6rLS.js +9 -0
  528. package/dist/worker-CaNTsqcD.js +1 -0
  529. package/dist/workflow-7rqzHHWZ.js +1 -0
  530. package/docs/cli.md +1 -2
  531. package/docs/config.md +1 -1
  532. package/docs/flows.md +12 -1
  533. package/docs/mcp.md +1 -1
  534. package/docs/sdk.md +1 -1
  535. package/migrations/0000_initial.sql +8 -0
  536. package/migrations/meta/0000_snapshot.json +75 -1
  537. package/migrations/meta/_journal.json +1 -1
  538. package/package.json +2 -10
  539. package/plugins/agents/skills/coder/SKILL.md +1 -0
  540. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  541. package/plugins/claude/skills/dispatch/SKILL.md +1 -1
  542. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  543. package/plugins/cursor/skills/coder/SKILL.md +1 -0
  544. package/dist/actions-Mk3FSlpJ.js +0 -20
  545. package/dist/adapter-B0oYCI0S.js +0 -1
  546. package/dist/adapter-BKVzTDnn.js +0 -1
  547. package/dist/adapter-DPInwbJG.js +0 -1
  548. package/dist/add-C2y-mVzl.js +0 -1
  549. package/dist/add-CLYTF_up.js +0 -6
  550. package/dist/add-DRsPpQFl.js +0 -1
  551. package/dist/add-DkpUwhtO.js +0 -1
  552. package/dist/add-json-5uPnWPoD.js +0 -1
  553. package/dist/agent-hw3zKw8y.js +0 -3
  554. package/dist/agent-r5mMcehf.js +0 -1
  555. package/dist/alias-_0Rwf2cA.js +0 -2
  556. package/dist/app-oE8G1-bi.js +0 -1
  557. package/dist/approvals-DbVrsxec.js +0 -2
  558. package/dist/approve-DeAhFL-m.js +0 -2
  559. package/dist/apps-eujHiNca.js +0 -1
  560. package/dist/archive-BCUfymIB.js +0 -3
  561. package/dist/archive-DZ6vpMHb.js +0 -4
  562. package/dist/archive-sweep-Cxbh8yAI.js +0 -1
  563. package/dist/args-BOEEdpWk.js +0 -1
  564. package/dist/ask-BU2WVxVM.js +0 -4
  565. package/dist/auth-CBWTmAPA.js +0 -1
  566. package/dist/auth-Dmn2U7rr.js +0 -1
  567. package/dist/chat-B_yhNTo0.js +0 -13
  568. package/dist/chat-bridge-BS9WtP3X.js +0 -2
  569. package/dist/cli-DWCR7iqa.js +0 -9
  570. package/dist/client-D9IoAuDD.js +0 -1
  571. package/dist/config-12pK4qW7.js +0 -3
  572. package/dist/create-D3f6q0Yq.js +0 -1
  573. package/dist/credentials-l6dsrZLL.js +0 -1
  574. package/dist/dash/manifest.json +0 -3313
  575. package/dist/dash/public/assets/chunks/agent-pills-dd0b7643e125bbf1.js +0 -1
  576. package/dist/dash/public/assets/chunks/agent-settings-form-45ae6aeaaed2b568.js +0 -1
  577. package/dist/dash/public/assets/chunks/agents-grid-b906da80c31fc035.js +0 -1
  578. package/dist/dash/public/assets/chunks/badge-676b01e0c615bf7b.js +0 -1
  579. package/dist/dash/public/assets/chunks/card-e0901d68b79dfa93.js +0 -1
  580. package/dist/dash/public/assets/chunks/combo-952a457d52360d88.js +0 -1
  581. package/dist/dash/public/assets/chunks/composer-49f9e7c5c4dfda3b.js +0 -1
  582. package/dist/dash/public/assets/chunks/composer-f331d00837143aee.js +0 -1
  583. package/dist/dash/public/assets/chunks/confirm-f2fe4ba9905a89c6.js +0 -1
  584. package/dist/dash/public/assets/chunks/connect-apps-661f3b3a85f1776a.js +0 -1
  585. package/dist/dash/public/assets/chunks/connect-repositories-5389ec8701a3deac.js +0 -1
  586. package/dist/dash/public/assets/chunks/credentials-list-e6177d0943517929.js +0 -2
  587. package/dist/dash/public/assets/chunks/custom-range-03ba6fb2ade7d282.js +0 -1
  588. package/dist/dash/public/assets/chunks/editor-34cb529d6d8a4b09.js +0 -7
  589. package/dist/dash/public/assets/chunks/engines-list-2f1acee3ecc8461a.js +0 -1
  590. package/dist/dash/public/assets/chunks/field-901f1f35c18c39c9.js +0 -1
  591. package/dist/dash/public/assets/chunks/format-eb03fc9d9744d960.js +0 -1
  592. package/dist/dash/public/assets/chunks/heads-1570a3a6db331979.js +0 -1
  593. package/dist/dash/public/assets/chunks/instructions-052fa45a9daf6db6.js +0 -2
  594. package/dist/dash/public/assets/chunks/instructions-d0a4b0d95009c262.js +0 -1
  595. package/dist/dash/public/assets/chunks/list-87b359bebd26986a.js +0 -1
  596. package/dist/dash/public/assets/chunks/mcp-list-b42f0d2ee463b37d.js +0 -1
  597. package/dist/dash/public/assets/chunks/models-list-0669d26fd662aec3.js +0 -1
  598. package/dist/dash/public/assets/chunks/paged-bc6fa0c2b9d52ed7.js +0 -1
  599. package/dist/dash/public/assets/chunks/platform-actions-c92ca3c6198a9387.js +0 -1
  600. package/dist/dash/public/assets/chunks/runners-list-9fffa50432c470c9.js +0 -1
  601. package/dist/dash/public/assets/chunks/runtime-246221e985d863e5-1.js +0 -2
  602. package/dist/dash/public/assets/chunks/segmented-358ff2b4992b8384.js +0 -1
  603. package/dist/dash/public/assets/chunks/select-1013702bdfb1ade4.js +0 -1
  604. package/dist/dash/public/assets/chunks/sentinel-c972a33dc69a5135.js +0 -1
  605. package/dist/dash/public/assets/chunks/shared-init-20e199043ff5d00f.js +0 -2
  606. package/dist/dash/public/assets/chunks/shared-init-246221e985d863e5-2.js +0 -1
  607. package/dist/dash/public/assets/chunks/shared-init-88cce66bb3cfe1e5.js +0 -5
  608. package/dist/dash/public/assets/chunks/tail-7c27aab8ba268bd9.js +0 -1
  609. package/dist/dash/public/assets/chunks/task-actions-a9603d520434baab.js +0 -1
  610. package/dist/dash/public/assets/chunks/task-fa8b82e95e771c4a.js +0 -1
  611. package/dist/dash/public/assets/chunks/task-view-f7039cb330bcb0b5.js +0 -3
  612. package/dist/dash/public/assets/chunks/tasks-list-2a905b4a0c3a9042.js +0 -1
  613. package/dist/dash/public/assets/chunks/toolbar-f964fa864699f095.js +0 -1
  614. package/dist/dash/public/assets/chunks/versions-list-fc2e0d2a7382e049.js +0 -1
  615. package/dist/dash/public/assets/chunks/wular-pnext-246221e985d863e5-0.js +0 -1
  616. package/dist/dash/public/assets/dash-account-96fc41be318839fa.css +0 -1
  617. package/dist/dash/public/assets/dash-agents-290a7b21c7dc0c92.css +0 -1
  618. package/dist/dash/public/assets/dash-agents-new-a7a07bf4ebda24c2.css +0 -1
  619. package/dist/dash/public/assets/dash-agents-param-slug-69a72fb0bbd14cc2.css +0 -1
  620. package/dist/dash/public/assets/dash-agents-param-slug-edit-397bdfb2f0ca328c.css +0 -1
  621. package/dist/dash/public/assets/dash-agents-param-slug-platforms-a7b3b7247c27f1d2.css +0 -1
  622. package/dist/dash/public/assets/dash-agents-param-slug-settings-8389b7d0555e8ccf.css +0 -1
  623. package/dist/dash/public/assets/dash-agents-param-slug-tasks-5987b8aea5e8f30d.css +0 -1
  624. package/dist/dash/public/assets/dash-agents-param-slug-usage-19abc69e1d4e6b0a.css +0 -1
  625. package/dist/dash/public/assets/dash-settings-53b8e6a8f656fa1a.css +0 -1
  626. package/dist/dash/public/assets/dash-settings-param-tab-ac61fdfdd6fd533f.css +0 -1
  627. package/dist/dash/public/assets/dash-tasks-cc0b1d32874b731c.css +0 -1
  628. package/dist/dash/public/assets/dash-tasks-param-id-02b8c7bd99cc1090.css +0 -1
  629. package/dist/dash/public/assets/dash-usage-884943221f76ad93.css +0 -1
  630. package/dist/dash/public/assets/pnext-client-17ba55bb57a1f4da.js +0 -1
  631. package/dist/dash/public/assets/pnext-client-1afa4148bea69ad2.js +0 -1
  632. package/dist/dash/public/assets/pnext-client-2693db10b197ade1.js +0 -1
  633. package/dist/dash/public/assets/pnext-client-43f52a07f8067b1b.js +0 -1
  634. package/dist/dash/public/assets/pnext-client-4594b693fe612835.js +0 -1
  635. package/dist/dash/public/assets/pnext-client-73f73e24f8141fb6.js +0 -1
  636. package/dist/dash/public/assets/pnext-client-7574da4651b40eae.js +0 -1
  637. package/dist/dash/public/assets/pnext-client-7b3a2c1092cbbb02.js +0 -1
  638. package/dist/dash/public/assets/pnext-client-816fe5fc96d3f768.js +0 -1
  639. package/dist/dash/public/assets/pnext-client-86cb956b448b0887.js +0 -1
  640. package/dist/dash/public/assets/pnext-client-8b64e3c030164288.js +0 -1
  641. package/dist/dash/public/assets/pnext-client-8f6161084c595a22.js +0 -1
  642. package/dist/dash/public/assets/pnext-client-9203ec11926e5d04.js +0 -1
  643. package/dist/dash/public/assets/pnext-client-a38b446f941d44df.js +0 -1
  644. package/dist/dash/public/assets/pnext-client-bd8d51aaa095e8a4.js +0 -1
  645. package/dist/dash/public/assets/pnext-client-e9821d1f1bdb281d.js +0 -1
  646. package/dist/dash/server/bundle-0.1.6-b29ec45cb963d47f/entry.js +0 -2
  647. package/dist/default-CwQXCtoB.js +0 -1
  648. package/dist/default-De8FXiWz.js +0 -1
  649. package/dist/delete-BD6AnCLg.js +0 -2
  650. package/dist/delete-cS01oOIb.js +0 -4
  651. package/dist/disable-BMWWeYFQ.js +0 -1
  652. package/dist/discover-Cfx5RPU7.js +0 -3
  653. package/dist/discover-Dvr_3_Xr.js +0 -1
  654. package/dist/dispatch-BKeAch9E.js +0 -14
  655. package/dist/docs-BX65z2Iu.js +0 -2
  656. package/dist/docs-DWegDRiu.js +0 -2
  657. package/dist/enable-Cfzeau2x.js +0 -1
  658. package/dist/env-CRf6wkM2.js +0 -1
  659. package/dist/exec-RZFLclKX.js +0 -11
  660. package/dist/executor-BvAA7Cgw.js +0 -10
  661. package/dist/flow-kAxxVOiR.js +0 -1
  662. package/dist/github-actions-DwUzm4hC.js +0 -24
  663. package/dist/http-Bkg_OQ6r.js +0 -1
  664. package/dist/index-CZjFX5zV.d.ts +0 -357
  665. package/dist/init-C4tDFH4G.js +0 -1
  666. package/dist/integrations-BAgdVDhj.js +0 -5
  667. package/dist/integrations-D-L3uQRj.js +0 -1
  668. package/dist/list-5Ljf9TxF.js +0 -2
  669. package/dist/list-COAo7eZd.js +0 -4
  670. package/dist/list-DuPqU3fk.js +0 -3
  671. package/dist/list-DzGuMkQy.js +0 -1
  672. package/dist/list-J8d_zh-o.js +0 -1
  673. package/dist/list-vOvIpbOH.js +0 -1
  674. package/dist/list-vpyS-hv8.js +0 -1
  675. package/dist/list-way5oLO0.js +0 -4
  676. package/dist/load-BpEsAn51.js +0 -2
  677. package/dist/local-H3uvqEbq.js +0 -1
  678. package/dist/log-view-dg0TlKLA.js +0 -1
  679. package/dist/login-BBw95-S3.js +0 -1
  680. package/dist/login-CNmeRAL7.js +0 -1
  681. package/dist/logout-j0dTo_Ib.js +0 -1
  682. package/dist/maintenance-DkLVtqM7.js +0 -1
  683. package/dist/match-CXAjDhg7.js +0 -1
  684. package/dist/mcp-BgKb2Cdk.js +0 -1
  685. package/dist/mcp-CsmBtlW9.js +0 -1
  686. package/dist/migrate-D4nzYhk8.js +0 -2
  687. package/dist/migrate-N-85_N7J.js +0 -1
  688. package/dist/model-B79MFtRV.js +0 -1
  689. package/dist/models-_5LVGC3m.js +0 -1
  690. package/dist/prompt-CEuBMNhk.js +0 -7
  691. package/dist/push-DbdnbZYt.js +0 -1
  692. package/dist/queue-C9fSdE_X.js +0 -116
  693. package/dist/refresh-BDmap1RA.js +0 -1
  694. package/dist/remote-miQNTVRa.js +0 -1
  695. package/dist/remove-BNzbUhaK.js +0 -1
  696. package/dist/remove-CLpL12Ya.js +0 -1
  697. package/dist/remove-CaYH9Cna.js +0 -1
  698. package/dist/remove-D-QeeZQL.js +0 -1
  699. package/dist/rename-Bhcb4t9F.js +0 -1
  700. package/dist/result-BfTfJayl.js +0 -5
  701. package/dist/result-D8DsvJDu.js +0 -15
  702. package/dist/resume-aZ8yWDBh.js +0 -3
  703. package/dist/review-BEhDcX4b.js +0 -7
  704. package/dist/rotate-key-BqnKhTK8.js +0 -1
  705. package/dist/run-BWbabvub.js +0 -5
  706. package/dist/run-BdPjxaZU.js +0 -2
  707. package/dist/run-Dqe38jX8.js +0 -2
  708. package/dist/runner-BPpiJvHx.js +0 -1
  709. package/dist/runner-sUpWJ_k0.js +0 -1
  710. package/dist/schema-CU2iFkp8.js +0 -1
  711. package/dist/serve-BTeomYxW.js +0 -1
  712. package/dist/serve-C0WC-QrV.js +0 -2
  713. package/dist/serve-CcObDKKQ.js +0 -12
  714. package/dist/serve-Ck95047c.js +0 -1
  715. package/dist/serve-DA5I2qXj.js +0 -4
  716. package/dist/server-BxLFZL80.js +0 -1
  717. package/dist/setup-host-DLd_j2Uw.js +0 -6
  718. package/dist/shared-BLkGRKty.js +0 -1
  719. package/dist/show-DzoQIs75.js +0 -1
  720. package/dist/show-FC3dJcD-.js +0 -1
  721. package/dist/status-BU3DR1XU.js +0 -1
  722. package/dist/steer-P_38hRRD.js +0 -4
  723. package/dist/stop-BJGDRPsp.js +0 -1
  724. package/dist/stop-BWY6k6v5.js +0 -3
  725. package/dist/store-B3ZHoBJY.js +0 -8
  726. package/dist/store-BLi19UDE.js +0 -42
  727. package/dist/task-C6VAg5WU.js +0 -1
  728. package/dist/task-DeglY79z.js +0 -5
  729. package/dist/task-b2BK481M.js +0 -1
  730. package/dist/test-BrSrhop9.js +0 -1
  731. package/dist/tools-CgswhJzh.js +0 -1
  732. package/dist/types-I5Cwtl_K.d.ts +0 -389
  733. package/dist/unalias-mMHXqok7.js +0 -1
  734. package/dist/update-DbOWToPy.js +0 -2
  735. package/dist/upgrade-D6oC9HQI.js +0 -2
  736. package/dist/usage-Cb8Dtv9V.js +0 -1
  737. package/dist/usage-DMs-IIJC.js +0 -1
  738. package/dist/watch-BcMQXGYO.js +0 -8
  739. package/dist/watch-eE2XiwsC.js +0 -5
  740. package/dist/wire-BeT1Axeo.js +0 -1
  741. package/dist/worker-CXndxmGF.js +0 -9
  742. package/dist/worker-DrucI22w.js +0 -1
  743. package/dist/workflow-Cshghoas.js +0 -1
  744. package/src/client/index.ts +0 -573
  745. package/src/client/types.ts +0 -506
  746. package/src/core/defaults.ts +0 -25
  747. package/src/core/errors.ts +0 -72
  748. package/src/core/task/log-view.ts +0 -173
  749. package/src/server/auth/sign-in.ts +0 -14
  750. package/src/server/dash/api/load.ts +0 -62
  751. package/src/server/dash/api/types.ts +0 -11
  752. package/src/server/dash/app/connect/page.tsx +0 -42
  753. package/src/server/dash/app/dash/account/loading.tsx +0 -11
  754. package/src/server/dash/app/dash/account/notify.tsx +0 -42
  755. package/src/server/dash/app/dash/account/page.css +0 -81
  756. package/src/server/dash/app/dash/account/page.tsx +0 -126
  757. package/src/server/dash/app/dash/account/sign-out.tsx +0 -24
  758. package/src/server/dash/app/dash/agents/(list)/agent-menu.tsx +0 -10
  759. package/src/server/dash/app/dash/agents/(list)/agents-grid.tsx +0 -143
  760. package/src/server/dash/app/dash/agents/(list)/connect-apps.tsx +0 -46
  761. package/src/server/dash/app/dash/agents/(list)/loading.tsx +0 -14
  762. package/src/server/dash/app/dash/agents/(list)/page.css +0 -72
  763. package/src/server/dash/app/dash/agents/(list)/page.tsx +0 -89
  764. package/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.tsx +0 -135
  765. package/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.tsx +0 -5
  766. package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.css +0 -21
  767. package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.tsx +0 -173
  768. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.tsx +0 -18
  769. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.css +0 -87
  770. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.tsx +0 -258
  771. package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.tsx +0 -111
  772. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.css +0 -114
  773. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.tsx +0 -294
  774. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.tsx +0 -5
  775. package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.tsx +0 -54
  776. package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/loading.tsx +0 -5
  777. package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/page.tsx +0 -14
  778. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/loading.tsx +0 -31
  779. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.css +0 -12
  780. package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.tsx +0 -163
  781. package/src/server/dash/app/dash/agents/[slug]/(tabs)/versions-list.tsx +0 -53
  782. package/src/server/dash/app/dash/agents/[slug]/edit/loading.tsx +0 -31
  783. package/src/server/dash/app/dash/agents/[slug]/edit/page.tsx +0 -91
  784. package/src/server/dash/app/dash/agents/agent/agent-pills.css +0 -27
  785. package/src/server/dash/app/dash/agents/agent/agent-pills.tsx +0 -133
  786. package/src/server/dash/app/dash/agents/agent/hero.css +0 -40
  787. package/src/server/dash/app/dash/agents/agent/hero.tsx +0 -60
  788. package/src/server/dash/app/dash/agents/agent/instructions.css +0 -29
  789. package/src/server/dash/app/dash/agents/agent/instructions.tsx +0 -82
  790. package/src/server/dash/app/dash/agents/editor/connect-repositories.ts +0 -16
  791. package/src/server/dash/app/dash/agents/editor/editor.css +0 -263
  792. package/src/server/dash/app/dash/agents/editor/editor.tsx +0 -774
  793. package/src/server/dash/app/dash/agents/editor/import-picker.css +0 -48
  794. package/src/server/dash/app/dash/agents/editor/import-picker.tsx +0 -253
  795. package/src/server/dash/app/dash/agents/editor/names.ts +0 -35
  796. package/src/server/dash/app/dash/agents/new/loading.tsx +0 -25
  797. package/src/server/dash/app/dash/agents/new/page.tsx +0 -72
  798. package/src/server/dash/app/dash/layout.css +0 -322
  799. package/src/server/dash/app/dash/layout.tsx +0 -344
  800. package/src/server/dash/app/dash/page.tsx +0 -14
  801. package/src/server/dash/app/dash/settings/[tab]/credentials-list.css +0 -94
  802. package/src/server/dash/app/dash/settings/[tab]/credentials-list.tsx +0 -619
  803. package/src/server/dash/app/dash/settings/[tab]/credentials.tsx +0 -36
  804. package/src/server/dash/app/dash/settings/[tab]/engines-list.css +0 -16
  805. package/src/server/dash/app/dash/settings/[tab]/engines-list.tsx +0 -135
  806. package/src/server/dash/app/dash/settings/[tab]/list.css +0 -98
  807. package/src/server/dash/app/dash/settings/[tab]/list.tsx +0 -215
  808. package/src/server/dash/app/dash/settings/[tab]/loading.tsx +0 -6
  809. package/src/server/dash/app/dash/settings/[tab]/mcp-list.css +0 -43
  810. package/src/server/dash/app/dash/settings/[tab]/mcp-list.tsx +0 -290
  811. package/src/server/dash/app/dash/settings/[tab]/models-list.tsx +0 -513
  812. package/src/server/dash/app/dash/settings/[tab]/page.tsx +0 -89
  813. package/src/server/dash/app/dash/settings/[tab]/runners-list.css +0 -153
  814. package/src/server/dash/app/dash/settings/[tab]/runners-list.tsx +0 -457
  815. package/src/server/dash/app/dash/settings/layout.tsx +0 -50
  816. package/src/server/dash/app/dash/settings/model-options.ts +0 -117
  817. package/src/server/dash/app/dash/settings/page.tsx +0 -7
  818. package/src/server/dash/app/dash/settings/settings-head.tsx +0 -24
  819. package/src/server/dash/app/dash/settings/tunnel-guide.tsx +0 -28
  820. package/src/server/dash/app/dash/tasks/[id]/activity.tsx +0 -202
  821. package/src/server/dash/app/dash/tasks/[id]/loading.tsx +0 -31
  822. package/src/server/dash/app/dash/tasks/[id]/page.tsx +0 -30
  823. package/src/server/dash/app/dash/tasks/[id]/task-actions.tsx +0 -164
  824. package/src/server/dash/app/dash/tasks/[id]/task-view.css +0 -407
  825. package/src/server/dash/app/dash/tasks/[id]/task-view.tsx +0 -513
  826. package/src/server/dash/app/dash/tasks/composer-data.ts +0 -96
  827. package/src/server/dash/app/dash/tasks/composer.css +0 -316
  828. package/src/server/dash/app/dash/tasks/composer.tsx +0 -890
  829. package/src/server/dash/app/dash/tasks/list/status.css +0 -50
  830. package/src/server/dash/app/dash/tasks/list/status.tsx +0 -20
  831. package/src/server/dash/app/dash/tasks/list/task.ts +0 -45
  832. package/src/server/dash/app/dash/tasks/list/tasks-list.css +0 -85
  833. package/src/server/dash/app/dash/tasks/list/tasks-list.tsx +0 -402
  834. package/src/server/dash/app/dash/tasks/list/tasks-section.tsx +0 -96
  835. package/src/server/dash/app/dash/tasks/page.tsx +0 -53
  836. package/src/server/dash/app/dash/usage/custom-range.tsx +0 -63
  837. package/src/server/dash/app/dash/usage/day-chart.css +0 -109
  838. package/src/server/dash/app/dash/usage/day-chart.tsx +0 -110
  839. package/src/server/dash/app/dash/usage/loading.tsx +0 -17
  840. package/src/server/dash/app/dash/usage/metric.ts +0 -13
  841. package/src/server/dash/app/dash/usage/page.tsx +0 -117
  842. package/src/server/dash/app/dash/usage/range-bar.css +0 -13
  843. package/src/server/dash/app/dash/usage/range-bar.tsx +0 -69
  844. package/src/server/dash/app/dash/usage/stats.css +0 -52
  845. package/src/server/dash/app/dash/usage/stats.tsx +0 -19
  846. package/src/server/dash/app/dash/usage/top-agents.css +0 -40
  847. package/src/server/dash/app/dash/usage/top-agents.tsx +0 -138
  848. package/src/server/dash/app/globals.css +0 -692
  849. package/src/server/dash/app/layout.tsx +0 -52
  850. package/src/server/dash/app/login/page.css +0 -26
  851. package/src/server/dash/app/login/page.tsx +0 -57
  852. package/src/server/dash/app/page.tsx +0 -5
  853. package/src/server/dash/app/responsive.css +0 -49
  854. package/src/server/dash/app/zone.tsx +0 -13
  855. package/src/server/dash/comps/frame/auth-panel.css +0 -60
  856. package/src/server/dash/comps/frame/auth-panel.tsx +0 -44
  857. package/src/server/dash/comps/frame/drawer.css +0 -28
  858. package/src/server/dash/comps/frame/drawer.tsx +0 -39
  859. package/src/server/dash/comps/frame/heads.ts +0 -41
  860. package/src/server/dash/comps/frame/loading-card.tsx +0 -65
  861. package/src/server/dash/comps/frame/page-head.css +0 -83
  862. package/src/server/dash/comps/frame/page-head.tsx +0 -71
  863. package/src/server/dash/comps/frame/stream.tsx +0 -50
  864. package/src/server/dash/comps/frame/task-toasts.tsx +0 -214
  865. package/src/server/dash/comps/frame/theme-choices.tsx +0 -46
  866. package/src/server/dash/comps/nav/current-link.tsx +0 -53
  867. package/src/server/dash/comps/nav/side-toggle.tsx +0 -30
  868. package/src/server/dash/comps/nav/to.ts +0 -22
  869. package/src/server/dash/comps/ui/badge.css +0 -64
  870. package/src/server/dash/comps/ui/badge.tsx +0 -41
  871. package/src/server/dash/comps/ui/card.css +0 -93
  872. package/src/server/dash/comps/ui/card.tsx +0 -77
  873. package/src/server/dash/comps/ui/collapse.css +0 -32
  874. package/src/server/dash/comps/ui/collapse.tsx +0 -49
  875. package/src/server/dash/comps/ui/combo.tsx +0 -154
  876. package/src/server/dash/comps/ui/confirm.css +0 -36
  877. package/src/server/dash/comps/ui/confirm.tsx +0 -67
  878. package/src/server/dash/comps/ui/field.css +0 -25
  879. package/src/server/dash/comps/ui/field.tsx +0 -34
  880. package/src/server/dash/comps/ui/icon.css +0 -22
  881. package/src/server/dash/comps/ui/icon.tsx +0 -17
  882. package/src/server/dash/comps/ui/icons.ts +0 -44
  883. package/src/server/dash/comps/ui/menu.css +0 -178
  884. package/src/server/dash/comps/ui/menu.tsx +0 -156
  885. package/src/server/dash/comps/ui/segmented.css +0 -44
  886. package/src/server/dash/comps/ui/segmented.tsx +0 -58
  887. package/src/server/dash/comps/ui/select.css +0 -103
  888. package/src/server/dash/comps/ui/select.tsx +0 -250
  889. package/src/server/dash/comps/ui/sentinel.css +0 -58
  890. package/src/server/dash/comps/ui/sentinel.tsx +0 -67
  891. package/src/server/dash/comps/ui/tabs.css +0 -81
  892. package/src/server/dash/comps/ui/tabs.tsx +0 -32
  893. package/src/server/dash/comps/ui/tail.css +0 -12
  894. package/src/server/dash/comps/ui/tail.tsx +0 -37
  895. package/src/server/dash/comps/ui/toast.css +0 -73
  896. package/src/server/dash/comps/ui/toolbar.css +0 -143
  897. package/src/server/dash/comps/ui/toolbar.tsx +0 -93
  898. package/src/server/dash/package.json +0 -5
  899. package/src/server/dash/pnext-env.d.ts +0 -4
  900. package/src/server/dash/pnext.config.ts +0 -5
  901. package/src/server/dash/public/assets/apple-touch-icon.png +0 -0
  902. package/src/server/dash/public/assets/favicon.ico +0 -0
  903. package/src/server/dash/public/assets/favicon.svg +0 -1
  904. package/src/server/dash/public/assets/fonts/LICENSE-fira-code +0 -93
  905. package/src/server/dash/public/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
  906. package/src/server/dash/public/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
  907. package/src/server/dash/public/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
  908. package/src/server/dash/tsconfig.json +0 -10
  909. package/src/server/dash/utils/client.ts +0 -19
  910. package/src/server/dash/utils/format.ts +0 -75
  911. package/src/server/dash/utils/paged.ts +0 -184
  912. package/src/server/dash/utils/range.ts +0 -117
  913. /package/{src/server/dash/app/dash/usage/usage.css → dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/page.1df2bb5150dd9575.css.pnext-asset.js} +0 -0
  914. /package/dist/dash/{public → standalone/static}/assets/apple-touch-icon.png +0 -0
  915. /package/dist/dash/{public → standalone/static}/assets/chunks/composer-data-6f7608fed13f3dd7.js +0 -0
  916. /package/dist/dash/{public → standalone/static}/assets/chunks/model-options-15c53331a2f28a4f.js +0 -0
  917. /package/dist/dash/{public → standalone/static}/assets/chunks/shared-init-8f2ac936c95a7f7b.js +0 -0
  918. /package/dist/dash/{public → standalone/static}/assets/connect-382b1729a7ae7808.css +0 -0
  919. /package/dist/dash/{public → standalone/static}/assets/dash-49ca85b59ac65c20.css +0 -0
  920. /package/dist/dash/{public → standalone/static}/assets/favicon.ico +0 -0
  921. /package/dist/dash/{public → standalone/static}/assets/favicon.svg +0 -0
  922. /package/dist/dash/{public → standalone/static}/assets/fonts/LICENSE-fira-code +0 -0
  923. /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
  924. /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
  925. /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
  926. /package/dist/dash/{public → standalone/static}/assets/global-d2adbf01910d9df5.css +0 -0
  927. /package/dist/dash/{public → standalone/static}/assets/login-c129b1ce237be260.css +0 -0
@@ -1,8 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{$t as t,At as n,En as r,Et as i,J as a,Kt as o,Lt as s,On as c,Pt as l,Qt as u,Rt as d,Ut as f,Wt as p,Xt as m,Zt as h,_t as g,bn as _,bt as v,cn as y,d as ee,en as b,g as te,ht as ne,jt as re,kt as ie,nt as ae,o as oe,r as se,rn as ce,s as le,sn as ue,vt as de,x as fe,xt as pe,zt as x}from"./dispatch-BKeAch9E.js";import{t as me}from"./types-D0q15RJa.js";import{a as he,i as ge,l as _e,n as ve,o as ye,r as be,s as xe,t as Se}from"./load-BpEsAn51.js";import{c as Ce,d as we,i as Te,l as Ee,t as De,u as Oe}from"./integrations-BAgdVDhj.js";import{i as ke,t as Ae}from"./discover-Dvr_3_Xr.js";import{a as je,c as Me,n as Ne,s as Pe}from"./actions-Mk3FSlpJ.js";import{g as Fe,h as Ie,i as Le,r as Re}from"./executor-BvAA7Cgw.js";import{n as ze,r as Be,t as Ve}from"./exec-RZFLclKX.js";import{f as He,n as Ue,r as We,t as Ge}from"./task-DeglY79z.js";import{t as Ke}from"./match-CXAjDhg7.js";import{a as qe,i as Je,n as Ye,o as Xe,r as Ze,t as Qe}from"./local-H3uvqEbq.js";import{a as S,c as $e,d as C,f as et,i as tt,l as w,m as nt,n as rt,p as it,r as at,u as ot}from"./http-Bkg_OQ6r.js";import{n as st}from"./github-actions-DwUzm4hC.js";import{t as ct}from"./log-view-dg0TlKLA.js";import{n as lt,t as ut}from"./chat-3Znsevah.js";import T from"node:path";import E from"node:process";import{fileURLToPath as dt,pathToFileURL as ft}from"node:url";import*as D from"zod/mini";import O,{accessSync as pt,constants as mt,cpSync as ht,existsSync as gt,readFileSync as _t,readdirSync as vt,realpathSync as yt,rmSync as bt,statSync as xt,symlinkSync as St}from"node:fs";import{execFile as Ct,spawn as wt}from"node:child_process";import{createCipheriv as Tt,createDecipheriv as Et,createHash as Dt,createHmac as Ot,randomBytes as k,randomUUID as kt}from"node:crypto";import At,{tmpdir as jt}from"node:os";import{isIP as Mt}from"node:net";import{isDeepStrictEqual as Nt,promisify as Pt}from"node:util";import{lookup as Ft}from"node:dns/promises";import{request as It}from"node:https";import{brotliDecompressSync as Lt,constants as Rt,createGzip as zt,gunzipSync as Bt,gzipSync as Vt,inflateSync as Ht}from"node:zlib";import{Chat as Ut,Message as Wt}from"chat";const Gt=e=>`nonce:${we(e)}`;function Kt(e){let t=e.config.encryptionKey??e.config.adminToken;if(!t)throw Error(`A server secret is required to issue browser transactions.`);return t}function qt(e,t){return Ot(`sha256`,Kt(e)).update(t).digest(`base64url`)}async function Jt(e,t,n,r,i=6e5){let a=(e.now??Date.now)(),o={kind:t,user:n,organization:e.organizationId,target:r,nonce:k(18).toString(`base64url`),exp:a+i},s=Xe(o),c=`${s}.${qt(e,s)}`;return await e.store.put(`delivery`,Gt(c),{at:a},{ttlMs:i}),c}function Yt(e,t){let[n,r,i]=t.split(`.`);if(!(!n||!r||i!==void 0)&&Oe(qt(e,n),r))try{return qe(n)}catch{return}}function Xt(e,t){return Yt(e,t)?.organization}function Zt(e,t){return Yt(e,t)?.user}async function Qt(e,t,n,r,i){let a=Yt(e,t),o=(e.now??Date.now)();return!a||a.kind!==n||a.user!==r||a.organization!==e.organizationId||a.target!==i||a.exp<o?!1:e.store.take(`delivery`,Gt(t))}async function $t(e,t,n,r){let i=Yt(e,t),a=(e.now??Date.now)();if(!(!i||i.kind!==n||i.user!==`*`&&i.user!==r||i.organization!==e.organizationId||i.exp<a||!await e.store.take(`delivery`,Gt(t))))return i.target}async function en(e,t,n,r){let i=Yt(e,t),a=(e.now??Date.now)();if(!(!i||i.kind!==n||i.user!==`*`&&i.user!==r||i.organization!==e.organizationId||i.exp<a||!await e.store.get(`delivery`,Gt(t))))return i.target}const tn=(e,t=200)=>Ee(`<title>Coder</title><p>${Ce(e)}</p>`+(t>=400?`<p><a href="/dash">Back to the dashboard</a> to start again.</p>`:``),t);function nn(e){let t=e.get(`agent`),n=e.get(`def`),r=at(n);if(!(!t||!n||!r?.integrations))return{state:{agent:t,repo:e.get(`repo`)??void 0,branch:e.get(`branch`)??void 0,def:n,tx:e.get(`tx`)??void 0,owner:e.get(`owner`)||void 0,...[`1`,`true`].includes(e.get(`public`)??``)?{public:!0}:{}},definition:r}}const rn=e=>typeof e==`string`&&/^\/dash(?:[/?#]|$)/.test(e)?e:void 0,an=(e,t)=>JSON.stringify({integration:e,agent:t.agent,repo:t.repo??null,branch:t.branch??null,def:t.def,owner:t.owner??null,public:t.public??!1});async function on(e,t,n){return(await e.store.list(`app`,{prefix:`${n}:`})).find(e=>e.value.integration===n&&e.value.agent===t.agent)?.value}function sn(e,t,n){let r={kind:`installation`,id:n};return{...e,connections:{...e.connections,[t]:r}}}function cn(e,t,n){return async r=>{let i={};for(let a of Object.keys(e.integrations)){if(a===t.integration)continue;let o=await on(e,t,a);if(o){let t=await Jt(e,`install`,e.session?.user.id??`anonymous`,o.id);i[a]=`${n}/install/${a}?app=${encodeURIComponent(o.id)}&state=${Xe({link:r,tx:t})}`}}return i}}async function ln(e,t,n){let r=await e.store.get(`app`,t.app);return r&&on(e,r,n)}function un(e){return`${e.appId}:${e.installationId}:${e.chat?.thread.id??e.deliveryId}`}async function dn(e,t,n,r){return e.repos.readFile(t,`.coder/${n}.md`,r)}function fn(e){return e.event&&e.source===e.event.integration?un(e.event):`task:${e.id}`}async function pn(e,t,n,r,i,a,o,s){let c={},l=Te(e.integrations),[u,d,f]=await Promise.all([o?.().catch(()=>void 0),e.store.get(`note`,un(r)).catch(()=>void 0),l&&n.settings?.configRepo&&i[l.id]?dn(l,n.settings.configRepo,a.id,i[l.id]).catch(()=>void 0):void 0]);if(u?.length&&(c.messages=u),d&&(c.note=d),f?.trim()&&(c.instructions=f.trim()),s)c.user={name:s.name,email:s.email};else if(s===void 0&&e.auth&&r.actor.id){let n=await e.auth.linkedUser(t.id,r.actor.id).catch(()=>void 0);n&&(c.user={name:n.name,email:n.email})}return c}const A=we;function mn(e,t,n,r=k(32).toString(`base64url`)){let i=`${Xe({task:e,organization:t,attempt:n})}.${r}`;return{token:i,hash:A(i)}}function j(e){try{return qe(e.slice(0,e.indexOf(`.`)))}catch{return{}}}function M(e,t){return t===e.organizationId||!e.scope?e:e.scope(t)}async function hn(e,t){if(!e.appRecord){let n=await e.store.get(`app`,t);return n&&{ctx:e,app:n}}let n=await e.appRecord(t);return n&&{ctx:M(e,n.organizationId),app:n.app}}async function gn(e,t){if(e.boundInstallation?.installation.id===t)return{...M(e,e.boundInstallation.organizationId),boundInstallation:e.boundInstallation};if(!e.installationOrganization)return e;let n=await e.installationOrganization(t);return n===void 0?void 0:M(e,n)}const _n=D.object({env:D.record(D.string(),D.string().check(D.minLength(1)))}),vn=`plain`;function yn(e,t=`SERVER_ENCRYPTION_KEY`){if(!e)return;let n=Buffer.from(e,`base64`);if(n.length!==32)throw Error(`${t} must be a base64-encoded 32-byte key`);return n}function bn(e){return yn(e.encryptionKey)}function xn(e){let t=yn(e);return t?Dt(`sha256`).update(t).digest().readInt32BE(0):0}function Sn(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:yn(e,t),version:xn(e)}))}function Cn(e){let t=_n.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function wn(e,t){let n=bn(e);if(!n)return{iv:vn,tag:``,ciphertext:Buffer.from(JSON.stringify(Cn(t))).toString(`base64`)};let r=k(12),i=Tt(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(Cn(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function Tn(e,t){if(t.iv===vn)return Cn(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of Sn(e))try{let e=Et(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),Cn(JSON.parse(Buffer.concat([e.update(Buffer.from(t.ciphertext,`base64`)),e.final()]).toString(`utf8`)))}catch{}throw Error(`Stored credential was sealed with an unavailable encryption key`)}function N(e,t){let n=bn(e);if(!n)return`${vn}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=k(12),i=Tt(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(t),`utf8`),i.final()]);return[r,i.getAuthTag(),a].map(e=>e.toString(`base64`)).join(`.`)}function P(e,t){if(t.startsWith(`${vn}.`))return JSON.parse(Buffer.from(t.slice(6),`base64`).toString(`utf8`));let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of Sn(e))try{let e=Et(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),JSON.parse(Buffer.concat([e.update(i),e.final()]).toString(`utf8`))}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function En(e,t){if(t.startsWith(`${vn}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of Sn(e))try{let e=Et(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),e.update(i),e.final(),t.version}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}const Dn=`node:22`;function On(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`,i=Object.keys(t).flatMap(e=>[`-e`,e]);return{args:[`run`,`-d`,`--name`,r,`--memory`,String(n.memory??`4g`),`--cpus`,String(n.cpus??2),`--pids-limit`,String(n.pidsLimit??512),`--network`,n.network??`bridge`,...i,n.image??Dn,`coder`,`agent`,`run`,`--task`,e.id],env:t}}var kn=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=this.options.image??Dn,r=await Ze(`docker`,[`run`,`--rm`,`--network`,`none`,`--entrypoint`,`sh`,n,`-c`,`for binary in node coder claude codex; do command -v "$binary" >/dev/null 2>&1 || { printf "%s\\n" "$binary"; exit 127; }; done`],{PATH:E.env.PATH??``});if(r.code!==0)throw r.code===127&&r.stdout.trim()?Error(`Docker image ${n} is missing required binary ${r.stdout.trim()}`):Error(`Docker image ${n} validation failed: ${r.stderr.trim()||`docker run failed`}`);let i=On(e,{...t,CODER_INBOX_SOCKET:Ue},this.options),a=await Ze(`docker`,i.args,{PATH:E.env.PATH??``,...i.env});if(a.code!==0)throw Error(a.stderr.trim()||`docker run failed`);return a.stdout.trim()}async status(e){let t=await Ze(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:E.env.PATH??``});if(t.code!==0)return{state:`exited`};let[n,r]=t.stdout.trim().split(/\s+/);return n===`true`?{state:`running`}:{state:`exited`,code:Number(r)||0}}async logs(e,t=-1){let n=await Ze(`docker`,[`logs`,`--timestamps`,e],{PATH:E.env.PATH??``});if(n.code!==0)throw Error(n.stderr.trim()||`docker logs failed`);let r=[...Ye(n.stdout),...Ye(n.stderr,`err`)].map(({level:e,line:t})=>{let n=t.indexOf(` `),r=t.slice(0,n);return{level:e,line:t.slice(n+1),timestamp:r,at:Date.parse(r)}}).sort((e,t)=>e.timestamp.localeCompare(t.timestamp)).map(({timestamp:e,...t})=>t);return{lines:r.slice(t+1),next:r.length-1}}async stop(e){await Ze(`docker`,[`rm`,`-f`,e],{PATH:E.env.PATH??``})}async push(e,t){let n=await Ze(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,Ge],{PATH:E.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}};function An(e){if(!Mt(e))return!0;if(Mt(e)===6){let t=new URL(`https://[${e}]/`).hostname.slice(1,-1).split(`::`),n=t[0]?t[0].split(`:`):[],r=t[1]?t[1].split(`:`):[],i=[...n,...Array(8-n.length-r.length).fill(`0`),...r].map(e=>parseInt(e,16));if(i.every(e=>e===0)||i.slice(0,7).every(e=>e===0)&&i[7]===1||(i[0]&65024)==64512||(i[0]&65472)==65152||(i[0]&65280)==65280)return!0;let a;if(i.slice(0,5).every(e=>e===0)&&(i[5]===0||i[5]===65535))a=i.slice(6);else if(i.slice(0,4).every(e=>e===0)&&i[4]===65535&&i[5]===0)a=i.slice(6);else if((i[4]===0||i[4]===512)&&i[5]===24318)a=i.slice(6);else if(i[0]===100&&i[1]===65435&&i.slice(2,6).every(e=>e===0))a=i.slice(6);else if(i[0]===8194)a=i.slice(1,3);else if(i[0]===8193&&(i[1]===0||i[1]===3512)||i[0]===100&&i[1]===65435&&i[2]===1)return!0;if(!a)return!1;e=a.flatMap(e=>[e>>8,e&255]).join(`.`)}let t=e.split(`.`).map(Number);return t[0]===0||t[0]===10||t[0]===127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168||t[0]===192&&t[1]===0&&(t[2]===0||t[2]===2)||t[0]===198&&t[1]>=18&&t[1]<=19||t[0]===198&&t[1]===51&&t[2]===100||t[0]===203&&t[1]===0&&t[2]===113||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]>=224}var jn=class{options;kind=`http`;base;fetcher;resolver;constructor(e){if(this.options=e,!e?.url)throw Error(`The http runner requires RUNNER_CONFIG.url`);if(this.base=new URL(`${e.url.replace(/\/+$/,``)}/`),this.base.protocol!==`https:`)throw Error(`The http runner requires an HTTPS URL`);if(this.base.username||this.base.password)throw Error(`The http runner URL cannot contain credentials`);if(!e.secret)throw Error(`RUNNER_CONFIG.secret is required for the http runner`);this.fetcher=e.fetch,this.resolver=e.lookup??Ft}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=Mt(e)?[{address:e,family:Mt(e)}]:await this.resolver(e,{all:!0});if(!t.length)throw Error(`The http runner resolved no address`);if(t.some(e=>An(e.address)))throw Error(`The http runner refuses private and metadata addresses`);return t[0]}send(e,t,n){return this.fetcher?this.fetcher(e,t):new Promise((r,i)=>{let a=(this.options.request??It)(e,{method:t.method,headers:t.headers,signal:t.signal??void 0,agent:!1,lookup:(e,t,r)=>{t.all?r(null,[n]):r(null,n.address,n.family)}},e=>{let t=[];e.on(`data`,e=>t.push(Buffer.from(e))),e.on(`error`,i),e.on(`end`,()=>r(new Response(e.statusCode===204?null:Buffer.concat(t),{status:e.statusCode})))});a.on(`error`,i),a.end(t.body)})}async request(e,t=`GET`,n,r){let i=await this.safe(),a=n===void 0?``:JSON.stringify(n),o=String(Date.now()),s=k(16).toString(`base64url`),c=Ot(`sha256`,this.options.secret).update(`${a}.${o}.${s}`).digest(`base64url`),l=await this.send(new URL(e.replace(/^\//,``),this.base),{method:t,redirect:`manual`,headers:{...this.options.headers,"content-type":`application/json`,"x-coder-timestamp":o,"x-coder-nonce":s,"x-coder-signature":c},...a?{body:a}:{},signal:r??AbortSignal.timeout(e===`/start`?3e4:1e4)},i);if(l.status>=300&&l.status<400)throw Error(`The http runner refuses redirects`);if(!l.ok)throw Error(`HTTP runner request failed: ${l.status}`);if(l.status===204)return;let u=await l.text();return u?JSON.parse(u):void 0}health(e){return this.request(`/health`,`GET`,void 0,e)}async start(e,t){let n=await this.request(`/start`,`POST`,{task:e.id,env:t});if(!n.handle)throw Error(`HTTP runner returned no handle`);return n.handle}status(e){return this.request(`/status/${encodeURIComponent(e)}`)}logs(e,t=-1){return this.request(`/logs/${encodeURIComponent(e)}?after=${t}`)}async stop(e){await this.request(`/stop/${encodeURIComponent(e)}`,`POST`,{})}push(e,t){return this.request(`/messages/${encodeURIComponent(e)}`,`POST`,{entries:t})}};const Mn=e=>qe(e),Nn=18e5,Pn=2097152,Fn=Pn/4,In={"eu-north-1":`arn1`,"ap-south-1":`bom1`,"eu-west-3":`cdg1`,"us-east-2":`cle1`,"af-south-1":`cpt1`,"eu-west-1":`dub1`,"eu-central-1":`fra1`,"sa-east-1":`gru1`,"ap-east-1":`hkg1`,"ap-northeast-1":`hnd1`,"us-east-1":`iad1`,"ap-northeast-2":`icn1`,"ap-northeast-3":`kix1`,"eu-west-2":`lhr1`,"us-west-2":`pdx1`,"us-west-1":`sfo1`,"ap-southeast-1":`sin1`,"ap-southeast-2":`syd1`,"ca-central-1":`yul1`};function Ln(e){if(!e)return;let t=(()=>{try{return new URL(e).hostname}catch{return``}})();return Object.entries(In).find(([e])=>t.includes(e))?.[1]}const Rn={ANTHROPIC_API_KEY:{host:`api.anthropic.com`,header:`x-api-key`,prefix:``},OPENAI_API_KEY:{host:`api.openai.com`,header:`authorization`,prefix:`Bearer `}};function zn(e={}){let t=Object.entries(Rn).filter(([t])=>e[t]).map(([t,n])=>[n.host,[{transform:[{headers:{[n.header]:`${n.prefix}${e[t]}`}}]}]]);return t.length?{allow:{...Object.fromEntries(t),"*":[]}}:void 0}async function Bn(){try{return(await Function(`name`,`return import(name)`)(`@vercel/sandbox`)).Sandbox}catch{throw Error(`The vercel-sandbox runner requires @vercel/sandbox in the adapter app.`)}}function Vn(e){return e&&typeof e==`object`&&`response`in e&&e.response instanceof Response?e.response.status:void 0}function Hn(e){if(Vn(e)!==410||!e||typeof e!=`object`||!(`json`in e))return!1;let t=e.json;if(!t||typeof t!=`object`||!(`error`in t))return!1;let n=t.error;return!!n&&typeof n==`object`&&`code`in n&&n.code===`snapshot_not_found`}var Un=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},Wn=class{options;kind=`vercel-sandbox`;streams=new Map;constructor(e={}){this.options=e}api(){return this.options.sandbox?Promise.resolve(this.options.sandbox):Bn()}now(){return(this.options.now??Date.now)()}auth(){return{...this.options.token?{token:this.options.token,projectId:this.options.projectId??process.env.VERCEL_PROJECT_ID,teamId:this.options.team??process.env.VERCEL_TEAM_ID}:{}}}base(e){return{...e?{source:{type:`snapshot`,snapshotId:e}}:this.options.image?{image:this.options.image}:{},...this.options.region?{region:this.options.region}:{},...this.auth(),resources:{vcpus:this.options.vcpus??2},persistent:!1}}snapshotKey(e,t){let n=e.event?.repo;if(!n)return;let r=[this.baseKey(),t??null,e.event.appId,e.event.installationId,n.owner,n.name];return`repo:${this.options.region??``}:${we(JSON.stringify(r))}`}baseKey(){let e=[_(),this.options.image??null,this.options.tools??[]];return`base:${this.options.region??``}:${we(JSON.stringify(e))}`}async withSandbox(e,t){let n;try{if(n=typeof e==`string`?await(await this.api()).get({...this.auth(),name:e}):e,n.status!==`running`&&n.status!==`pending`)throw new Un(`Vercel Sandbox ${n.name} is ${n.status}`);return await t(n)}catch(t){let r=Vn(t);throw r===410||!n&&typeof e==`string`&&r===404?new Un(t instanceof Error?t.message:`Vercel Sandbox expired`,void 0,{cause:t}):t}}async finalizeSnapshot(e,t){let n=this.options.snapshots,r=this.now(),{build:i,...a}=t;if(!i)return t;try{t=await this.withSandbox(i.sandbox,async e=>{let n=await e.getCommand(i.command);if(n.exitCode===null&&r-i.startedAt<Nn)return t;if(n.exitCode===0){let i=/^coder-snapshot (\S+)$/m.exec(await n.stdout())?.[1];if(i&&i===t.sha)return await e.stop().catch(()=>{}),{...a,checkedAt:r};let o=await e.snapshot({expiration:2592e6});return{...a,snapshotId:o.snapshotId,...i?{sha:i}:{},checkedAt:r}}return await e.stop().catch(()=>{}),{...a,failedAt:r}})}catch(t){if(t instanceof Un){let{failedAt:t,...r}=a,o=await n.get(e);o?.build?.sandbox===i.sandbox&&o.build.command===i.command&&o.build.startedAt===i.startedAt&&await n.put(e,r)}throw t}if(t.build)return t;let o=await n.get(e);return o?.build?.sandbox!==i.sandbox||o.build.command!==i.command||o.build.startedAt!==i.startedAt?o??{}:(await n.put(e,t),t)}async snapshot(e,t,n,r){let i=this.options.snapshots;if(!i)return;let a=this.now(),o=await this.finalizeSnapshot(e,await i.get(e)??{});if(o.build)return o.snapshotId;let s=!o.snapshotId||n&&a-(o.checkedAt??0)>=9e5,c=o.failedAt!==void 0&&a-o.failedAt<36e5;if(s&&!c){let n=await t(o.snapshotId??r).catch(e=>{if(e instanceof Un)throw e});if(n){let t={sandbox:n.sandbox,command:n.command,startedAt:a};await i.put(e,{...o,build:t}),(async()=>{await n.wait();let r=await i.get(e);r?.build?.sandbox===t.sandbox&&r.build.command===t.command&&r.build.startedAt===t.startedAt&&await this.finalizeSnapshot(e,r)})().catch(()=>{})}}return o.snapshotId}async detached(e,t,n={}){let r=await(await this.api()).create({...this.base(e),timeout:this.options.timeoutMs??18e5,...n}).catch(t=>{throw e&&Hn(t)?new Un(t.message,e,{cause:t}):t});try{let e=await this.withSandbox(r,e=>e.runCommand({...t,cwd:`/vercel/sandbox`,detached:!0}));return{sandbox:r.name,command:e.cmdId,wait:()=>e.wait({signal:AbortSignal.timeout(Nn)})}}catch(e){throw await r.stop().catch(()=>{}),e}}async start(e,t,n){let r=[`npm install -g @anthropic-ai/claude-code @openai/codex bun ${[`@wular/coder@${_()}`,...this.options.tools??[]].join(` `)}`,...Je()].join(` && `),i=(t,n)=>({cmd:t?`coder`:`sh`,args:t?[`agent`,`run`,`--task`,e.id]:[`-c`,`sudo -E sh -c "$1" && exec coder agent run --task "$2"`,`coder-task`,r,e.id],env:n}),a=this.baseKey(),o=zn(n);for(let n=0;;n++){let s;try{let n=await this.snapshot(a,()=>this.detached(void 0,{cmd:`sh`,args:[`-c`,r],sudo:!0}),!1);s=this.snapshotKey(e,n);let c=(s?await this.snapshot(s,e=>this.detached(e,i(e,{...t,CODER_PREPARE:`1`})),!0,n):void 0)??n,l=await this.detached(c,i(c,{...t,CODER_INBOX_SOCKET:Ue}),o?{networkPolicy:o}:{});return Xe({sandbox:l.sandbox,command:l.command})}catch(e){if(!(e instanceof Un))throw e;for(let t of[a,s]){if(!t||!e.snapshotId)continue;let n=await this.options.snapshots?.get(t);n?.snapshotId===e.snapshotId&&await this.options.snapshots.put(t,n.build?{build:n.build}:{})}if(n===2)throw e}}}async status(e){let t=Mn(e),n=await(await this.api()).get({...this.auth(),name:t.sandbox});if(n.status===`pending`)return{state:`running`};if(n.status!==`running`)return{state:`exited`,code:1};let r=await n.getCommand(t.command);return r.exitCode===null?{state:`running`}:{state:`exited`,code:r.exitCode}}async push(e,t){let n=await(await(await this.api()).get({...this.auth(),name:Mn(e).sandbox})).runCommand({cmd:`node`,args:[`-e`,Ge],detached:!1,env:{CODER_INBOX_MESSAGES:JSON.stringify(t)}}),r=await n.stdout();if(n.exitCode!==0)throw Error(`Sandbox inbox delivery failed`);return JSON.parse(r)}async logs(e,t=-1){let n=this.streams.get(e);n||(n=this.readStream(e),this.streams.set(e,n),n.catch(()=>{this.streams.get(e)===n&&this.streams.delete(e)}));let r=await n,i=Date.now()+250;for(;!r.done&&Date.now()<i;)await new Promise(e=>setTimeout(e,Math.min(10,i-Date.now())));if(r.error)throw this.streams.delete(e),r.error;let a=r.lines.slice(Math.max(0,t+1-r.offset)),o=Math.max(t,r.offset+r.lines.length-1);return a.length&&r.dropped&&!r.warned&&(a.unshift({level:`err`,line:`Sandbox log buffer dropped ${r.dropped} bytes; showing the retained tail.`}),r.warned=!0),r.done&&!a.length&&this.streams.delete(e),{lines:a,next:o}}async readStream(e){let t=Mn(e),n=(await(await(await this.api()).get({...this.auth(),name:t.sandbox})).getCommand(t.command)).logs(),r={lines:[],offset:0,dropped:0,warned:!1,done:!1,close:()=>n.close?.()};return(async()=>{let e={stdout:``,stderr:``},t=0,i=e=>{if(Buffer.byteLength(e)<=Fn)return e;let t=Buffer.from(e),n=t.length-Fn;for(;(t[n]&192)==128;)n++;return r.dropped+=n,t.subarray(n).toString()},a=(n,a)=>{let o=(e[n]+a).split(/\r?\n/);e[n]=i(o.pop()??``);for(let e of o.filter(Boolean)){let a=i(e);r.lines.push({level:n===`stdout`?`out`:`err`,line:a}),t+=Buffer.byteLength(a)+32}let s=0;for(;t>Pn/2&&s<r.lines.length;){let e=Buffer.byteLength(r.lines[s++].line);t-=e+32,r.dropped+=e}s&&(r.lines.splice(0,s),r.offset+=s)};for await(let e of n)a(e.stream,e.data);a(`stdout`,`
2
- `),a(`stderr`,`
3
- `)})().catch(e=>{r.error=e}).finally(()=>r.done=!0),r}async stop(e){this.streams.get(e)?.then(e=>e.close(),()=>{}),this.streams.delete(e),await(await(await this.api()).get({...this.auth(),name:Mn(e).sandbox})).stop()}};const Gn=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function Kn(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:qn(t,e)}}function qn(e,t){let n=t.config??{};if(e===`local`)return new Qe(t.workDir);if(e===`local-docker`)return new kn(n);if(e===`vercel-sandbox`)return new Wn({...t.sandbox,...n});if(e===`github-actions`)return new st({...n,...t.fetch?{fetch:t.fetch}:{}});if(typeof n.url!=`string`||typeof n.secret!=`string`)throw Error(`HTTP runner requires a URL and secret`);return new jn({url:n.url,secret:n.secret,...t.fetch?{fetch:t.fetch}:{}})}function Jn(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Yn(e){return e.local?`local`:`default`}async function Xn(e,t={}){let n=(await e.store.list(`runner`)).filter(({value:n})=>Jn(n,t.requester)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`)),r=t.runner??t.agent;if(r===Yn(e))return{runner:e.config.runner};let i=r?n.find(({id:e,value:t})=>e===r||t.name===r):n.find(({value:e})=>e.scope===`personal`&&e.default)??n.find(({value:e})=>e.scope===`workspace`&&e.default);if(r&&!i)throw Error(`Unknown runner "${r}".`);return i?{runner:i.value.kind,runnerId:i.id}:{runner:e.config.runner}}function Zn(e,t,n){let r={...t.config,...P(e.config,t.secret)};return qn(t.kind,{workDir:e.config.workDir,config:r,fetch:e.fetch,sandbox:{...n?{snapshots:{get:t=>e.store.get(`snapshot`,`runner:${n}:${t}`),put:(t,r)=>e.store.put(`snapshot`,`runner:${n}:${t}`,r)}}:{}}})}async function Qn(e,t){if(!t.runnerId)return e.runners[t.runner];let n=await e.store.get(`runner`,t.runnerId);if(!n||n.kind!==t.runner||!e.local&&(n.kind===`local`||n.kind===`local-docker`)){e.settings?.runnerInstances?.delete(t.runnerId);return}P(e.config,n.secret);let r=(e.settings??={}).runnerInstances??=new Map,i=JSON.stringify([n.kind,n.config,n.secret]),a=r.get(t.runnerId);return a?.signature!==i&&(a={signature:i,runner:Zn(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}function $n(e,t){if(Object.keys(t).some(t=>!e.fields.some(e=>e.key===t)))throw Error(`Unknown runner field`);for(let n of e.fields)if(!n.optional&&!t[n.key]?.trim())throw Error(`${n.label} is required`);if(e.kind===`http`){if(t.secret.length<32)throw Error(`Secret must contain at least 32 characters`);new jn({url:t.url,secret:t.secret})}if(e.kind===`github-actions`&&!/^[\w.-]+\/[\w.-]+$/.test(t.repo))throw Error(`Repository must be owner/repo`);if(e.kind===`local-docker`&&t.cpus&&!(Number(t.cpus)>0&&Number.isFinite(Number(t.cpus))))throw Error(`CPUs must be positive`)}var F=class extends Error{};async function er(e,t){let n=Date.now(),r=new AbortController,i,a=new Promise((e,t)=>{i=setTimeout(()=>{r.abort(),t(new F(`Runner check timed out`))},5e3)});try{return{ok:!0,detail:await Promise.race([a,(async()=>{let n=t?.kind??e.config.runner,i=t?{...t.config,...P(e.config,t.secret)}:e.config.runnerConfig??{};if(n===`local`){if(!e.local)throw new F(`Local runners require a local server`);return`This machine is available`}if(n===`http`){let n=t?Zn(e,t):e.runners.http;if(!(n instanceof jn)||!(await n.health(r.signal)).ok)throw new F(`Runner health check failed`);return`Runner is reachable`}if(n===`local-docker`){if(!e.local)throw new F(`Docker runners require a local server`);return await new Promise((t,n)=>{(e.runnerExec??Ct)(`docker`,[`info`],{timeout:5e3,signal:r.signal},e=>e?n(new F(`Docker is unavailable`)):t())}),`Docker is available`}let a=async t=>{let n=await(e.fetch??fetch)(t,{signal:r.signal,redirect:`manual`,headers:{authorization:`Bearer ${i.token}`,accept:`application/json`,"user-agent":`coder`}});if(!n.ok)throw new F(`Runner check failed with HTTP ${n.status}`);return n};if(n===`github-actions`){let e=String(i.repo).split(`/`).map(encodeURIComponent).join(`/`);return await a(`https://api.github.com/repos/${e}`),await a(`https://api.github.com/repos/${e}/actions/workflows/${encodeURIComponent(String(i.workflow))}`),`Repository and workflow are accessible`}let o=await(await a(`https://api.vercel.com/v2/teams?limit=100`)).json();if(!Array.isArray(o.teams))throw new F(`Invalid team response`);if(i.team&&!o.teams.some(e=>e.id===i.team||e.slug===i.team))throw new F(`Team is not accessible`);return`Teams are accessible`})()]),ms:Date.now()-n}}catch(e){return{ok:!1,detail:e instanceof F?e.message:`Runner check failed`,ms:Date.now()-n}}finally{clearTimeout(i)}}function tr(e){if(typeof e!=`string`||!e)return{ok:!1,detail:`A folder path is required`};let t=e===`~`?At.homedir():e.startsWith(`~/`)?T.join(At.homedir(),e.slice(2)):e;if(!T.isAbsolute(t))return{ok:!1,detail:`The folder path must be absolute`};let n=T.normalize(t);try{return O.statSync(n).isDirectory()?(O.accessSync(n,O.constants.R_OK),{ok:!0,folder:{path:n,name:T.basename(n)}}):{ok:!1,detail:`The path is not a directory`}}catch{return{ok:!1,detail:`The folder does not exist or is not readable`}}}function nr(e){let t=new Map,n=[...d(e),...s(e,{migrate:!1})].sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt));for(let e of n){let n=tr(e.cwd);if(!(!n.ok||t.has(n.folder.path))&&(t.set(n.folder.path,{...n.folder,recent:Date.parse(e.createdAt)}),t.size===8))break}return{current:{path:e,name:T.basename(e)},recent:[...t.values()],picker:!!ir()}}const rr=e=>(process.env.PATH??``).split(T.delimiter).some(t=>t&&O.existsSync(T.join(t,e)));function ir(){let e=`Choose a folder for the task`;if(process.platform===`darwin`)return[`osascript`,[`-e`,`tell application "System Events"`,`-e`,`activate`,`-e`,`POSIX path of (choose folder with prompt "${e}")`,`-e`,`end tell`]];if(process.platform===`win32`)return[`powershell`,[`-NoProfile`,`-Command`,`Add-Type -AssemblyName System.Windows.Forms; $d = New-Object System.Windows.Forms.FolderBrowserDialog; $d.Description = '${e}'; if ($d.ShowDialog() -eq 'OK') { $d.SelectedPath }`]];if(rr(`zenity`))return[`zenity`,[`--file-selection`,`--directory`,`--title=${e}`]];if(rr(`kdialog`))return[`kdialog`,[`--getexistingdirectory`,At.homedir(),`--title`,e]]}async function ar(){let e=ir();if(!e)return{ok:!1,detail:`This machine has no folder dialog; type a path instead`};try{let{stdout:t}=await Pt(Ct)(e[0],e[1],{timeout:6e5}),n=t.trim().replace(/(.)[\\/]+$/,`$1`);return n?tr(n):{ok:!1,detail:``}}catch{return{ok:!1,detail:``}}}function or(e){let t=/^\w[\w.-]*@([\w.-]+):(?!\/)([^?#]+)$/.exec(e),n=t||!URL.canParse(e)?void 0:new URL(e);if(!t&&(!n||![`https:`,`ssh:`].includes(n.protocol)||n.password||n.search||n.hash))return;let[r,i]=t?[t[1],t[2]]:[n.port?`${n.hostname}_${n.port}`:n.hostname,n.pathname],a=i.replace(/(\.git)?\/?$/,``).split(`/`).filter(Boolean);if(!(!/^[a-z0-9][a-z0-9._-]*$/i.test(r)||a.length<2||!a.every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e))))return[r.toLowerCase(),...a]}async function sr(e){let t=typeof e==`string`?e.trim():``,n=or(t);if(!n)return{ok:!1,detail:`Use an https or ssh git URL, like https://github.com/owner/repo`};let r=ie(`checkouts`,...n),i=AbortSignal.timeout(6e5),a={...process.env,GIT_TERMINAL_PROMPT:`0`,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND??`ssh -o BatchMode=yes`},o=e=>Pt(Ct)(`git`,e,{env:a,signal:i,maxBuffer:67108864});try{await He(r,async()=>{if(O.existsSync(T.join(r,`.git`))){await o([`-C`,r,`remote`,`set-url`,`origin`,t]),await o([`-C`,r,`fetch`,`origin`]);return}let e=await O.promises.mkdtemp(`${r}-clone-`);try{await o([`clone`,`--`,t,e]),await O.promises.rename(e,r)}finally{await O.promises.rm(e,{recursive:!0,force:!0})}})}catch(e){let t=e;if(i.aborted)return{ok:!1,detail:`The clone took longer than 10 minutes`};if(t.code===`ENOENT`&&!t.stderr)return{ok:!1,detail:`Git is not installed on this machine`};let n=String(t.stderr??t.message).split(`
4
- `).map(e=>e.trim()).filter(Boolean),r=(n.find(e=>e.startsWith(`fatal:`))??n.at(-1)??`The clone failed`).replace(/^fatal:\s*/,``);return{ok:!1,detail:r[0].toUpperCase()+r.slice(1)}}return{ok:!0,folder:{path:r,name:n.at(-1),url:t}}}const cr=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function I(e,t){return e.get(`agent`,t)}async function lr(e){return(await e.list(`agent`)).map(e=>e.value)}async function ur(e,t,n){let r=n??(await I(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,cr(t,r))}async function L(e,t){if(e.listAgentsWithVersions)return(await e.listAgentsWithVersions(t))[0]??{};let n=await I(e,t);return{record:n,version:n&&await ur(e,t,n.currentVersion)}}async function dr(e){if(e.listAgentsWithVersions)return e.listAgentsWithVersions();let t=await lr(e);return Promise.all(t.map(async t=>({record:t,version:await ur(e,t.id,t.currentVersion)})))}async function fr(e,t,n){if(e.publishAgent){let r=_e(t.id,t.definition),i=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??r.name??t.id,...t.description??r.description?{description:t.description??r.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:r,systemPrompt:t.systemPrompt,...i?{files:i}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n})}let r=await L(e,t.id),i=await pr(e,t,n,r);return{record:await I(e,t.id),version:i,unchanged:r.record?.currentVersion===i.version}}async function pr(e,t,n,r){if(!r&&e.publishAgent)return(await fr(e,t,n)).version;let i=_e(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await I(e,t.id),s=r?r.version:o?await ur(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>Nt(e.definition,i)&&e.systemPrompt===t.systemPrompt&&Nt(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return Nt(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,cr(t.id,r),u);r++){let n=await e.get(`agentversion`,cr(t.id,r));if(n&&l(n)){u=n;break}}let d=await I(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function mr(e,t,n,r=Date.now()){let i=await I(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}const hr=[`read-only`,`workspace-write`,`auto`];function gr(e,t){if(Array.isArray(e))return[...new Set(e)];let n=me.indexOf(e);return[...new Set(me.slice(0,n+1).flatMap(e=>t?.tools.presets[e]??[]))]}function _r(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},o=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),s=Object.fromEntries([...o].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],o=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents,s=t?.allowedTools&&n?.allowedTools?gr(t.allowedTools,r[e]).filter(t=>new Set(gr(n.allowedTools,r[e])).has(t)):n?.allowedTools??t?.allowedTools;return[e,{...o?{allowedEvents:o}:{},...s?{allowedTools:s}:{}}]})),c=i.permissions??e.permissions??`read-only`,l=a.permissions,u=l&&hr.indexOf(l)<=hr.indexOf(c)?l:c;return{...i,...a,permissions:u,...o.size?{integrations:s}:{}}}function vr(e,t,n,r=De){let i=_r(t.definition,void 0,e.settings,r),a=_r(t.definition,i,n,r),[o]=ve({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:a}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function yr(e,t=``){let n={};for(let r of O.readdirSync(T.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,yr(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=O.readFileSync(T.join(e,i),`utf8`))}return n}async function br(e,t,n,r){let i=ge()[n];return i?await pr(e,{id:n,source:`builtin`,definition:i.json,systemPrompt:O.readFileSync(T.join(i.dir,`system.md`),`utf8`),files:yr(i.dir),importedFrom:`builtin:${_()}`},t,r)!==r.version:!1}async function xr(e,t,n){let r=n??await Promise.all(Object.keys(ge()).map(t=>L(e,t))),i=!1;for(let n of Object.keys(ge()))await br(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}const Sr=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function Cr(e,t,n,r){return{method:e,pattern:t,handler:n,...r?{guard:r}:{}}}function wr(e,t,n){return t.map(t=>({...t,pattern:e+t.pattern,...n&&!t.guard?{guard:n}:{}}))}function Tr(e,t,n){return[e,`${e}/*`].flatMap(e=>Sr.map(r=>Cr(r,e,t,n)))}function Er(e,t){let[n,r]=[e.split(`/`),t.split(`/`)],i=n.at(-1)===`*`;if(i?r.length<n.length:r.length!==n.length)return;let a={};for(let e=0;e<n.length;e++){let[t,o]=[n[e],r[e]];if(t===`*`&&i){a[`*`]=r.slice(e).join(`/`);break}if(t[0]===`:`){if(!o)return;a[t.slice(1)]=o}else if(t!==o)return}return a}async function Dr(e,t,n,r){for(let i of e){let a=Er(i.pattern,r.pathname);if(!a)continue;for(let e of Object.keys(a))e!==`*`&&(a[e]=decodeURIComponent(a[e]));let o=e.filter(e=>e.pattern===i.pattern),s=o.find(e=>e.method===t.method),c=(s??i).guard;if(c){let e=await c(t,n,a,r);if(e instanceof Response)return e;n=e}if(s)return s.handler(t,n,a,r);let l=$e();return l.headers.set(`allow`,[...new Set(o.map(e=>e.method))].join(`, `)),l}}const Or=`coder`;function kr(e,t){let n=e??`/dash`;try{let e=new URL(n,t);return e.origin===t&&!n.includes(`\\`)&&!/^\/[/\\]/.test(e.pathname)?`${e.pathname}${e.search}${e.hash}`:`/dash`}catch{return`/dash`}}const Ar=`The Coder dashboard is not built; run bun run build.`,jr=[`default-src 'self'`,`style-src 'self' 'unsafe-inline'`,`img-src 'self' data:`,`connect-src 'self'`,`object-src 'none'`,`base-uri 'none'`,`frame-ancestors 'none'`,`form-action 'self'`];function Mr(e){let t=T.dirname(dt(e));for(;;){let e=T.join(t,`package.json`);if(gt(e))try{if(JSON.parse(_t(e,`utf8`)).name===`@wular/coder`)return t}catch{}let n=T.dirname(t);if(n===t)break;t=n}throw Error(`Cannot locate the Coder package root.`)}function Nr(e=import.meta.url){let t=T.dirname(dt(e)),n=Mr(e);return[T.join(n,`dist/dash`),T.join(t,`../dash`)].find(e=>gt(T.join(e,`manifest.json`)))}function Pr(e){let t=T.join(e,`server`);if(!gt(t))throw Error(`The Coder dashboard server bundle is missing.`);let n=vt(t,{withFileTypes:!0}).filter(e=>e.isDirectory()&&e.name.startsWith(`bundle-`)).map(e=>T.join(t,e.name,`entry.js`)).filter(gt);if(!n.length)throw Error(`The Coder dashboard server bundle is missing.`);if(n.length!==1)throw Error(`The Coder dashboard has multiple server bundles.`);return n[0]}function Fr(e,t){let n=T.join(jt(),`coder-dash`,Dt(`sha256`).update(e).digest(`hex`).slice(0,12));for(let e of gt(n)?vt(n):[]){let[r,i]=e.split(`-`).map(Number),a=r===process.pid;if(!a)try{process.kill(r,0),a=!0}catch(e){a=e.code===`EPERM`}(!a||r===process.pid&&i<t-1)&&bt(T.join(n,e),{recursive:!0,force:!0})}let r=T.join(n,`${process.pid}-${t}`);ht(T.join(e,`src`),T.join(r,`src`),{recursive:!0});for(let t of[`dist`,`node_modules`])St(T.join(e,t),T.join(r,t),`dir`);return yt(T.join(r,`src/server/dash`))}async function Ir(e,t=0){let n=Mr(e),r=Nr(e);if(!r)throw Error(Ar);let i=JSON.parse(_t(T.join(r,`manifest.json`),`utf8`)),a=t?Fr(n,t):T.join(n,`src/server/dash`),o={...i,outDir:r},s=Pr(r);return{handler:await(await import(ft(s).href)).createRequestHandler({root:a,manifest:o}),manifest:o}}var Lr=class{hosts=new Map;made=new Map};function Rr(e){let t=Nr(e);if(t)try{return xt(T.join(t,`manifest.json`)).mtimeMs}catch{return}}function zr(e,{hosts:t,made:n}){let r=Date.now(),i=t.get(e);if(i&&r-i.checked<1e3)return i.host;let a=Rr(e);if(i&&(i.checked=r,a===void 0||a===i.build))return i.host;let o=n.get(e)??0;n.set(e,o+1);let s={build:a,checked:r,host:Ir(e,o)};return t.set(e,s),s.host}function Br(e,t){let n=e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e;return!!(Er(`/assets/*`,n)||Er(`/dash/*`,n)||t.routes.some(e=>Er(e.route,n)))}const Vr=/<script(?![^>]*\bsrc=)[^>]*>([\s\S]*?)<\/script>/gi,Hr=e=>`'sha256-${Dt(`sha256`).update(e).digest(`base64`)}'`;function Ur(e){let t=[...e.matchAll(Vr)].map(e=>Hr(e[1]));return[...jr,`script-src 'self' ${t.join(` `)}`.trim()].join(`; `)}function Wr(e,t){return t===`gzip`?Bt(e).toString(`utf8`):t===`br`?Lt(e).toString(`utf8`):t===`deflate`?Ht(e).toString(`utf8`):e.toString(`utf8`)}const Gr=e=>(e.headers.get(`accept-encoding`)??``).split(`,`).some(e=>{let[t,...n]=e.split(`;`).map(e=>e.trim()),r=n.find(e=>e.startsWith(`q=`));return t===`gzip`&&(!r||Number(r.slice(2))>0)});function Kr(e){e.set(`content-encoding`,`gzip`),/accept-encoding/i.test(e.get(`vary`)??``)||e.append(`vary`,`accept-encoding`)}function qr(e){let t=zt(),n=e=>new Promise(n=>{t.write(e),t.flush(Rt.Z_SYNC_FLUSH,()=>n())}),r=!1;return new ReadableStream({start(e){t.on(`data`,t=>e.enqueue(new Uint8Array(t))),t.on(`end`,()=>e.close()),t.on(`error`,t=>e.error(t))},async pull(){if(r)return;let{done:i,value:a}=await e.read();if(!i)return n(a);r=!0,t.end()},cancel(n){return t.destroy(),e.cancel(n)}})}function Jr(e,t,n,r){n.set(`content-security-policy`,[...jr,`script-src 'self' 'nonce-${r}'`].join(`; `));let i=t.body;return Gr(e)&&(Kr(n),i=qr(i.getReader())),new Response(i,{status:t.status,statusText:t.statusText,headers:n})}async function Yr(e,t,n){let r=new Headers(t.headers);if(r.set(`x-content-type-options`,`nosniff`),!(r.get(`content-type`)??``).includes(`text/html`))return new Response(t.body,{status:t.status,statusText:t.statusText,headers:r});r.set(`cache-control`,`no-store`),r.delete(`content-length`);let i=r.get(`content-encoding`);if(!i&&t.body)return Jr(e,t,r,n);let a=Buffer.from(await t.arrayBuffer()),o=Wr(a,i);r.set(`content-security-policy`,Ur(o));let s=i?new Uint8Array(a):o;return!i&&o.length>1024&&Gr(e)&&(s=new Uint8Array(Vt(o)),Kr(r)),new Response(s,{status:t.status,statusText:t.statusText,headers:r})}async function Xr(e,t=import.meta.url,n=new Lr){let r;try{r=await zr(t,n)}catch(e){if(n.hosts.delete(t),e instanceof Error&&e.message===Ar)return;throw e}if(!Br(new URL(e.url).pathname,r.manifest))return;let i=k(16).toString(`base64`),a=new Headers(e.headers);return a.set(`content-security-policy`,`script-src 'nonce-${i}'`),Yr(e,await r.handler(new Request(e,{headers:a})),i)}const Zr=(e,t,n=!1)=>`coder_admin=${encodeURIComponent(t)}; HttpOnly; SameSite=Strict; Path=/${new URL(e.url).protocol===`https:`?`; Secure`:``}${n?`; Max-Age=0`:``}`;function Qr(e,t){let n=e.headers.get(`x-forwarded-host`)?.split(`,`,1)[0]?.trim();if(!n)return t.origin;let r=e.headers.get(`x-forwarded-proto`)?.split(`,`,1)[0]?.trim()??t.protocol.slice(0,-1);try{return new URL(`${r}://${n}`).origin}catch{return t.origin}}async function $r(e,t,n,r){let i=await e.formData(),a=i.get(`token`),o=i.get(`return`),s=kr(typeof o==`string`&&o.startsWith(`/`)?o:null,new URL(e.url).origin);return typeof a==`string`?a?Ri(a,t.config.adminToken)?new Response(null,{status:303,headers:{location:s,"set-cookie":Zr(e,a)}}):it(`/dash?token=rejected`,303):new Response(null,{status:303,headers:{location:s,"set-cookie":Zr(e,``,!0)}}):it(`/dash?token=rejected`,303)}async function ei(e,t,n,r){return it(!t.auth||t.session?`/dash`:r.searchParams.has(`signed_out`)?`/login?signed_out=1`:`/login`)}async function ti(e,t,n,r){if(t.auth&&!r.searchParams.has(`signed_out`)&&!r.searchParams.has(`error`)){let n=`/api/auth/sign-in?return=${encodeURIComponent(kr(r.searchParams.get(`return`),r.origin))}`,i=t.config.publicUrl;return i&&new URL(Qr(e,r)).host!==new URL(i).host?it(new URL(n,i).href):t.auth.handler(new Request(`${r.origin}${n}`))}return await Xr(ii(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ni(e,t,n,r){return await Xr(ii(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ri(e,t,n,r){return await Xr(ii(e,t),void 0,t.dashboardHosts)??w()}function ii(e,t){let n=new Headers(e.headers);return n.set(`x-coder-mode`,Vi(t)),new Request(e,{headers:n})}async function ai(e,t,n){return await Xr(ii(e,t),void 0,t.dashboardHosts)??w()}function oi(){return(process.env.PATH??``).split(T.delimiter).some(e=>{try{let t=T.join(e,`docker`);return pt(t,mt.X_OK),xt(t).isFile()}catch{return!1}})}function si(e){let t=!!e.local,n=t&&oi();return[{kind:`local`,name:t?`Another machine`:`Your machine`,description:t?`Pair another computer; it runs tasks with its own logins.`:`Run tasks with your own machine and logins.`,connect:`pair`,fields:[],available:!0},{kind:`local-docker`,name:`Docker on the server`,description:`Run each task in a Docker container.`,connect:`fields`,help:`Each task runs in a fresh container on this server, using the Docker installed here. Leave fields empty for the defaults.`,fields:[{key:`image`,label:`Image`,placeholder:`node:22`,hint:`node 20 or newer`,optional:!0},{key:`memory`,label:`Memory limit`,placeholder:`4g`,optional:!0},{key:`cpus`,label:`CPU limit`,placeholder:`2`,optional:!0}],available:n,...n?{}:{reason:t?`Docker is not on PATH.`:`Available on a local server only.`}},{kind:`vercel-sandbox`,name:`Vercel Sandbox`,description:`Run tasks in an isolated sandbox.`,connect:`fields`,help:`Each task gets a fresh Vercel Sandbox. Create an access token at vercel.com/account/tokens with Sandbox access for the team that pays for it.`,fields:[{key:`token`,label:`Access token`,placeholder:`vcp_…`,hint:`with Sandbox access`,secret:!0},{key:`team`,label:`Team`,placeholder:`team_…`,hint:`VERCEL_TEAM_ID if empty`,optional:!0},{key:`projectId`,label:`Project`,placeholder:`prj_…`,hint:`VERCEL_PROJECT_ID if empty`,optional:!0},{key:`region`,label:`Region`,placeholder:`iad1`,hint:`nearest if empty`,optional:!0}],available:!0},{kind:`github-actions`,name:`GitHub Actions`,description:`Run tasks through a repository workflow.`,connect:`fields`,help:`Each task starts a workflow run in a repository you choose. Save coder server workflow as .github/workflows/coder-agent.yml. It runs coder agent run --task; the token needs Actions read and write on that repository.`,fields:[{key:`repo`,label:`Repository`,placeholder:`acme/runners`,hint:`owner/name`},{key:`workflow`,label:`Workflow file`,placeholder:`coder-agent.yml`,hint:`in .github/workflows`},{key:`token`,label:`Token`,placeholder:`github_pat_…`,hint:`Actions read and write`,secret:!0},{key:`ref`,label:`Branch`,placeholder:`main`,hint:`default branch if empty`,optional:!0}],available:!0},{kind:`http`,name:`HTTP runner`,description:`Connect a runner at a public HTTPS address.`,connect:`fields`,help:`A machine already running coder runner serve. Copy the address and secret it printed; pairing from the Another machine or Your machine option does this for you.`,fields:[{key:`url`,label:`Address`,placeholder:`https://runner.example.com`,hint:`its https address`},{key:`secret`,label:`Secret`,placeholder:`printed by coder runner serve`,hint:`32 characters or more`,secret:!0}],available:!0}]}const ci=D.string().check(D.minLength(1),D.maxLength(80)),li=D.enum([`personal`,`workspace`]),ui=D.record(D.string(),D.string()),di=D.strictObject({kind:D.enum([`local`,`local-docker`,`github-actions`,`vercel-sandbox`,`http`]),name:ci,scope:li,config:ui}),fi=D.strictObject({name:D.optional(ci),default:D.optional(D.literal(!0)),config:D.optional(ui)});function pi(e,t,n,r=t.default){return{id:e,kind:t.kind,name:t.name,scope:t.scope,default:r,online:t.lastSeen!==void 0&&n-t.lastSeen<3e5,...t.lastSeen===void 0?{}:{lastSeen:t.lastSeen},config:t.config,createdAt:t.createdAt}}function R(e){let t=e.session?.user.id,n=(e.now??Date.now)(),r=n=>n===`workspace`?B(e):!!t,i=async(n=e.store)=>(await n.list(`runner`)).filter(({value:n})=>Jn(n,t)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`));return{user:t,now:n,canCreate:r,rows:i,row:async(t,r,a=e.store)=>{let o=(await i(a)).some(({value:e})=>e.scope===`personal`&&e.default);return pi(t,r,n,r.default&&(r.scope===`personal`||!o))}}}async function mi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=R(t),l=await s(),u=l.find(({value:e})=>e.scope===`personal`&&e.default)??l.find(({value:e})=>e.default),d={id:Yn(t),kind:t.config.runner,name:t.local?`This machine`:`Default runner`,scope:`workspace`,default:!u,online:!0,config:{},createdAt:0};return S({items:[d,...l.map(({id:e,value:t})=>pi(e,t,a,e===u?.id))],catalog:si(t)})}async function hi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=R(t);{let n=di.safeParse(await e.json().catch(()=>void 0));if(!n.success)return S({error:`Invalid runner`},400);if(!o(n.data.scope))return S({error:`This scope requires a member or workspace admin.`},403);let r=si(t).find(e=>e.kind===n.data.kind);if(!r.available||r.connect===`pair`)return S({error:r.reason??`Pair this runner with runner serve.`},400);try{$n(r,n.data.config)}catch(e){return S({error:e.message},400)}let s=yi(n.data.kind,n.data.config,t),l=`rnr_${k(9).toString(`base64url`)}`,u={...n.data,...s,owner:n.data.scope===`personal`?i:void 0,createdBy:i,default:!1,createdAt:a,updatedAt:a};return await t.store.put(`runner`,l,u),S(await c(l,u))}}async function gi(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=R(t);if(i===Yn(t))return S(await er(t));let u=e=>{if(!e||!Jn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)},d=await t.store.get(`runner`,i),f=u(d);if(f)return f;let p=await er(t,d);return await t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n=await e.get(`runner`,i);n&&n.secret===d.secret&&JSON.stringify(n.config)===JSON.stringify(d.config)&&await e.put(`runner`,i,{...n,lastSeen:p.ok?(t.now??Date.now)():void 0,updatedAt:(t.now??Date.now)()})}),S(p)}async function _i(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=R(t);if(i===Yn(t)){if(B(t)){let n=fi.safeParse(await e.json().catch(()=>void 0));if(!n.success||!n.data.default||n.data.name||n.data.config)return S({error:`Only the default can change for the built-in runner.`},400);await t.store.withAppLock(`runners:${t.organizationId}`,async e=>{for(let{id:t,value:n}of await e.list(`runner`))n.scope===`workspace`&&n.default&&await e.put(`runner`,t,{...n,default:!1,updatedAt:o})});let r=(await c()).some(({value:e})=>e.scope===`personal`&&e.default);return S({id:i,kind:t.config.runner,name:t.local?`This machine`:`Default runner`,scope:`workspace`,default:!r,online:!0,config:{},createdAt:0})}return S({error:`The server default cannot be renamed or removed.`},403)}let u=e=>{if(!e||!Jn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)};return t.store.withAppLock(`runners:${t.organizationId}`,async n=>{let r=await n.get(`runner`,i),a=u(r);if(a||!r)return a;{let a=fi.safeParse(await e.json().catch(()=>void 0));if(!a.success||!Object.keys(a.data).length)return S({error:`Invalid runner update`},400);let s={};if(a.data.config){let e={...r.config,...P(t.config,r.secret),...a.data.config};try{$n(si(t).find(e=>e.kind===r.kind),e)}catch(e){return S({error:e.message},400)}s=yi(r.kind,e,t)}if(a.data.default)for(let e of await n.list(`runner`))e.id!==i&&e.value.scope===r.scope&&e.value.owner===r.owner&&e.value.default&&await n.put(`runner`,e.id,{...e.value,default:!1,updatedAt:o});let c={...r,...a.data.name?{name:a.data.name}:{},...a.data.default?{default:!0}:{},...s,updatedAt:o};return await n.put(`runner`,i,c),S(await l(i,c,n))}})}async function vi(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=R(t);if(i===Yn(t))return S({error:`The server default cannot be renamed or removed.`},403);let u=e=>{if(!e||!Jn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)};return t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n=await e.get(`runner`,i),r=u(n);if(r||!n)return r;{let n=(await e.list(`task`)).filter(({value:e})=>e.task.runnerId===i&&Z.includes(e.status)).length;return n?S({error:n===1?`1 task still runs on this runner. Stop it or wait.`:`${n} tasks still run on this runner. Stop them or wait.`},409):(await e.delete(`runner`,i),t.settings?.runnerInstances?.delete(i),S({ok:!0}))}})}function yi(e,t,n){let r=new Set(si(n).find(t=>t.kind===e).fields.filter(e=>e.secret).map(e=>e.key)),i=Object.entries(t);return{config:Object.fromEntries(i.filter(([e])=>!r.has(e))),secret:N(n.config,Object.fromEntries(i.filter(([e])=>r.has(e))))}}const bi=D.strictObject({name:D.optional(ci),scope:li});async function xi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=R(t),l=bi.safeParse(await e.json().catch(()=>void 0));if(!l.success)return S({error:`Invalid pairing`},400);if(!o(l.data.scope))return S({error:`This scope requires a member or workspace admin.`},403);let u=`${Buffer.from(t.organizationId).toString(`base64url`)}.${k(32).toString(`base64url`)}`,d=a+9e5;await t.store.put(`snapshot`,`runner-pair:${we(u)}`,{...l.data,owner:l.data.scope===`personal`?i:void 0,createdBy:i,expiresAt:d},{ttlMs:9e5});let f=t.config.publicUrl??r.origin;return S({token:u,expiresAt:d,command:`coder runner serve --url ${f} --token ${u}`})}const Si=D.strictObject({token:D.optional(D.string()),id:D.optional(D.string()),organizationId:D.optional(D.string()),name:D.optional(D.string().check(D.minLength(1),D.maxLength(80))),url:D.string(),secret:D.string().check(D.minLength(32)),offline:D.optional(D.boolean())});async function Ci(e,t,n,r){let i=Si.safeParse(await e.json().catch(()=>void 0));if(!i.success)return S({error:`Invalid runner registration`},400);let a=i.data;try{new jn({url:a.url,secret:a.secret})}catch{return S({error:`A public HTTPS runner URL is required`},400)}let o=a.token?Buffer.from(a.token.split(`.`)[0],`base64url`).toString():a.organizationId;if(!o||o!==t.organizationId&&!t.scope)return S({error:`Invalid runner token`},401);t=M(t,o);let s=(t.now??Date.now)();return t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n,r;if(a.token){let i=`runner-pair:${we(a.token)}`,o=await e.get(`snapshot`,i);if(!o||o.expiresAt<=s||!await e.take(`snapshot`,i))return S({error:`Pairing token expired or already used`},401);r=`rnr_${k(9).toString(`base64url`)}`,n={kind:`http`,name:o.name??a.name??`Your machine`,scope:o.scope,owner:o.owner,createdBy:o.createdBy,default:!1,createdAt:s,updatedAt:s,...yi(`http`,{url:a.url,secret:a.secret},t),lastSeen:s}}else{r=a.id??``;let i=await e.get(`runner`,r);if(!i||i.kind!==`http`||!Oe(P(t.config,i.secret).secret??``,a.secret))return S({error:`Invalid runner token`},401);n={...i,config:{...i.config,url:a.url},lastSeen:a.offline?void 0:s,updatedAt:s}}return await e.put(`runner`,r,n),S({...pi(r,n,s),organizationId:o})})}const wi=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function Ti(e,t,n,r){let i=t,a=r,o=[];for(let t of e){let e=Buffer.byteLength(t.line);if(a+e>2097152)break;o.push({seq:i,at:n,level:t.level,line:t.line}),a+=e,i+=1}return{lines:o,seq:i,bytes:a}}async function z(e,t,n=-1,r){return(await e.list(`tasklog`,{prefix:`${t}:`,...n>=0?{after:wi(t,n)}:{},...r?{limit:r}:{}})).map(e=>{let t=ct(e.value.line);return{seq:Number(e.id.slice(e.id.lastIndexOf(`:`)+1)),...e.value,...t?{entry:t}:{}}})}async function Ei(e,t,n=-1,r){if(!t.handle)return z(e.store,t.task.id,n,r);let i=await Qn(e,t.task);if(!i)return z(e.store,t.task.id,n,r);let[a,o]=await Promise.all([e.store.get(`task`,t.task.id),Nc(e,t).catch(()=>void 0)]);if(!o)return z(e.store,t.task.id,n,r);let s=a&&a.attempts===t.attempts&&a.tokenHash===t.tokenHash&&a.generation===t.generation&&a.handle===t.handle?a:t,c=s.logCursor??-1,l=s.logSeq??0,u=s.logBytes??0,d=[...Object.values(o.tokens),...Object.values(o.credential.env),...Object.values(o.config.mcp??{}).flatMap(e=>[...Object.values(e.env??{}),...Object.values(e.headers??{})])],f=await i.logs(t.handle,c),p=(e.now??Date.now)(),m=e=>d.reduce((e,t)=>t?e.replaceAll(t,`[REDACTED]`):e,e),h=e=>typeof e==`string`?m(e):Array.isArray(e)?e.map(h):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[m(e),h(t)])):e,g=Ti(f.lines.map(({level:e,line:t})=>{let n=ct(t);return{level:e,line:n?JSON.stringify(h(n)):m(t)}}),l,p,u);return await e.queue.appendLogs(e.organizationId,t.task.id,g.lines,{seq:l,cursor:c},{cursor:f.next,seq:g.seq,bytes:g.bytes},p,{attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle,generation:t.generation??0}),z(e.store,t.task.id,n,r)}async function Di(e,t,n,r=!1){let i=V(e);if(!i)return new Response(`Unauthorized`,{status:401});let a=j(i);return a.task!==n||a.organization!==t.organizationId||!Number.isInteger(a.attempt)?new Response(`Unauthorized`,{status:401}):await t.queue.touch(t.organizationId,n,A(i),a.attempt,(t.now??Date.now)(),r)??new Response(`Unauthorized`,{status:401})}function Oi(e){let t=e.event;return t?t.repo?`${t.repo.owner}/${t.repo.name}`:t.chat?.thread.channelId??t.integration:e.source}async function ki(e,t,n,r){let i=n.id,a=V(e),o=j(a),s=A(a),c=Number(r.searchParams.get(`after`)??-1);if(!Number.isInteger(c)||c<-1)return S({error:`Invalid cursor`},400);let l=await t.queue.fetchInbox(t.organizationId,i,s,o.attempt,c);return l?S(l):new Response(`Unauthorized`,{status:401})}async function Ai(e,t,n,r){let i=n.id,a=V(e),o=j(a),s=A(a),c=await e.json().catch(()=>void 0);if(!c||!Number.isInteger(c.seq)||c.seq<-1||!Number.isInteger(c.generation)||c.generation<0||c.answers!==void 0&&(!Array.isArray(c.answers)||c.answers.some(e=>!e||!Number.isInteger(e.seq)||e.seq<0||e.seq>c.seq)))return S({error:`Invalid acknowledgement`},400);let l={tokenHash:s,attempts:o.attempt,generation:c.generation};return await t.queue.ackInbox(t.organizationId,i,c,l)?S({ok:!0}):new Response(`Unauthorized`,{status:401})}async function ji(e,t,n,r){let i=n.id,a=V(e),o=j(a),s=A(a);return await t.queue.touch(t.organizationId,i,s,o.attempt,(t.now??Date.now)())?S({ok:!0}):new Response(`Unauthorized`,{status:401})}async function Mi(e,t,n,r){let i=n.id;V(e);let a=t.callbackTask;if([`completed`,`failed`,`cancelled`].includes(a.status))return S({ok:!0});let o=await e.json().catch(()=>void 0);if(!o?.status||![`running`,`waiting`,`completed`,`failed`,`cancelled`].includes(o.status))return S({error:`Invalid task result`},400);let s=(t.now??Date.now)();if(o.status===`running`||o.status===`waiting`)return await t.queue.patchTask(t.organizationId,i,{status:o.status,lastSeenAt:s,...o.approval===void 0?o.status===`running`?{approval:void 0}:{}:{approval:o.approval},...o.answer===void 0?{}:{answer:o.answer}},s,{attempts:a.attempts,tokenHash:a.tokenHash,statuses:[`running`,`waiting`]}),S({ok:!0});await Ei(t,a).catch(()=>{});let c=typeof o.result==`string`?o.result:JSON.stringify(o.result??``),l={ok:o.status===`completed`,exitCode:o.status===`completed`?0:1,output:c,...typeof o.diff==`string`?{diff:o.diff}:{}};return await t.queue.completeTask(t.organizationId,i,{attempts:a.attempts,tokenHash:a.tokenHash,outcome:{status:o.status,result:l,...o.error?{error:o.error}:{},...o.tokens===void 0?{}:{tokens:o.tokens}},...typeof o.note==`string`?{note:{key:fn(a.task),value:o.note,ttlMs:2592e6}}:{},usage:{...a.task.event?{installationId:`${a.task.event.appId}:${a.task.event.installationId}`}:{},taskId:i,agent:a.task.agent,target:Oi(a.task),...a.task.usage?.engine??a.task.definition.engine?{engine:a.task.usage?.engine??a.task.definition.engine}:{},...a.task.usage?.model??a.task.definition.model?{model:a.task.usage?.model??a.task.definition.model}:{},credential:a.task.credential??`unknown`,runnerElapsedMs:Math.max(0,s-(a.startedAt??s)),...o.tokens===void 0?{}:{tokens:o.tokens},at:s}},s),S({ok:!0})}async function Ni(e,t,n,r){n.id,V(e);let i=t.callbackTask,a=await e.json().catch(()=>({}));return typeof a.authJson!=`string`||!i.task.credential?S({error:`Invalid credential update`},400):S({kept:await Va(t.store,t.config,i.task.credential,a.authJson)})}async function Pi(e,t,n,r){n.id,V(e);let i=t.callbackTask;try{return S({...await Nc(t,i),generation:i.generation??0})}catch(e){return S({error:e instanceof Error?e.message:String(e)},409)}}async function Fi(e,t){if(!t.auth)return t;let n=await t.auth.session(e.headers);if(!(!n?.organizationId||n.organizationDenied))return{...M(t,n.organizationId),session:n}}const Ii=new Set([`owner`,`admin`]);function B(e){return!e.auth||Ii.has(e.session?.role??``)}function Li(e,t){return B(e)?e:S({error:t},403)}function Ri(e,t){return!!(e&&t&&Oe(e,t))}function V(e){let t=e.headers.get(`authorization`);return t?.startsWith(`Bearer `)?t.slice(7):null}const zi=new Set([`localhost`,`127.0.0.1`,`::1`,`[::1]`]);function Bi(e){if(e.headers.has(`x-forwarded-for`)||e.headers.has(`x-forwarded-host`))return!1;let t=e.headers.get(`host`)??new URL(e.url).host;try{return zi.has(new URL(`http://${t}`).hostname)}catch{return!1}}const Vi=e=>e.local?`local`:e.config.store===`postgres`?`cloud`:`memory`,Hi=e=>e.startsWith(`/tasks/`)||e.startsWith(`/logins/`)||e===`/runners/register`,Ui=[`/hooks/`,`/create/`,`/install/`,`/connect/`];function Wi(e,t){let n=e?.replace(/^::ffff:/,``)??``;if(zi.has(n)||n.startsWith(`127.`))return!0;let r=URL.parse(`http://localhost${t}`)?.pathname??``;return Hi(r)||Ui.some(e=>r.startsWith(e))}function Gi(e,t){if(!t.local)return!0;let n=new URL(e.url),r=e.headers.get(`host`)??n.host,i=URL.parse(`http://${r}`)?.port||`80`;if(Bi(e)&&i===String(t.local.port))return!0;let a=t.config.publicUrl?new URL(t.config.publicUrl).host:void 0;return(e.headers.get(`x-forwarded-host`)?.split(`,`,1)[0]?.trim()??r)===a&&!Bi(e)&&(Hi(n.pathname)||Ui.some(e=>n.pathname.startsWith(e)))}function Ki(e,t){let n=e.headers.get(`origin`)??e.headers.get(`referer`);if(!n)return!1;try{return new URL(n).origin===new URL(t??e.url).origin}catch{return!1}}function qi(e){let t=e.headers.get(`cookie`)?.split(`;`).map(e=>e.trim()).find(e=>e.startsWith(`coder_admin=`))?.slice(12);if(!t)return null;try{return decodeURIComponent(t)}catch{return null}}async function Ji(e,t){if(!t.auth){let n=()=>new Response(`Unauthorized`,{status:401,headers:{"www-authenticate":`Bearer`}});if(t.config.store!==`memory`||!Bi(e))return n();let r=qi(e),i=Ri(V(e),t.config.adminToken),a=Ri(r,t.config.adminToken);return i?{...t,authorizedRequest:e}:a?e.method===`GET`||Ki(e)?{...t,authorizedRequest:e}:tt():n()}let n=await t.auth.session(e.headers,e.method!==`GET`);if(n?.stale)return S({error:`Token too old for this action.`},401,{"www-authenticate":`Bearer error="invalid_token", error_description="Token too old for this action"`});if(n?.organizationDenied)return S({error:`You are not a member of that workspace.`},403);let r=n?.role;return!n?.organizationId||!r?S({error:`Sign in first.`,hint:`coder auth login`},401,V(e)?{"www-authenticate":`Bearer error="invalid_token"`}:{}):e.method!==`GET`&&e.headers.has(`cookie`)&&!Ki(e,t.config.publicUrl)?tt():{...M(t,n.organizationId),session:n,authorizedRequest:e}}async function Yi(e,t){if(!t.auth)return t;let n=new Headers(e.headers),r=new URL(e.url).searchParams.get(`organization`);r&&n.set(`x-coder-organization`,r);let i=await t.auth.session(n,!0);if(i?.organizationDenied)return new Response(`You are not a member of that workspace.`,{status:403});let a=i?.role;return!i?.organizationId||!a?nt(new URL(e.url)):{...M(t,i.organizationId),session:i}}async function Xi(e,t){if(e.method!==`POST`)return;let n=Si.safeParse(await e.clone().json().catch(()=>void 0));if(!n.success||n.data.token)return;let{id:r,organizationId:i,secret:a}=n.data;if(!r||!i||i!==t.organizationId&&!t.scope)return;let o=M(t,i),s=await o.store.get(`runner`,r);if(s?.kind===`http`&&Oe(P(o.config,s.secret).secret??``,a))return`runner:${i}:${r}`}async function Zi(e,t,n,r){let i=n.id,a=V(e);if(!a)return new Response(`Unauthorized`,{status:401});let o=j(a);return o.task!==i||typeof o.organization!=`string`||!o.organization||!Number.isInteger(o.attempt)||(t.scope&&(t=M(t,o.organization)),t.organizationId!==o.organization)?new Response(`Unauthorized`,{status:401}):t}async function Qi(e,t,n,r,i=!1){let a=n.id,o=V(e);if(o&&t.taskOrganization&&t.scope){let e=await t.taskOrganization(a,A(o));e&&(t=M(t,e))}let s=await Di(e,t,a,i);return s instanceof Response?s:{...t,callbackTask:s}}function $i(e,t,n,r){return Qi(e,t,n,r,e.method===`POST`)}function ea(e){let{organization:t}=j(e);return typeof t==`string`?t:void 0}async function ta(e,t,n){let r=V(e);if(!r)return new Response(`Unauthorized`,{status:401});let i=ea(r),a=i&&t.scope&&i!==t.organizationId?M(t,i):t,o=n.id,s=await a.store.get(`login`,o);return!s||!Oe(A(r),s.tokenHash)?new Response(`Unauthorized`,{status:401}):{...a,callbackLogin:s}}async function na(e,t){let n=e.method===`POST`?new URLSearchParams(await e.clone().text()):void 0;return t.searchParams.get(`tx`)??at(t.searchParams.get(`state`))?.tx??n?.get(`tx`)??void 0}async function ra(e,t,n,r){let i=await na(e,r),a=t.serverOrganizationId??t.organizationId;return i&&Zt(t,i)===`*`&&Xt(t,i)===a?{...M(t,a),operatorApp:!0}:Yi(e,t)}function ia(e,t,n,r){return Yi(e,t)}async function aa(e,t,n,r){let i=r.pathname.split(`/`)[2];if(!(/^[a-z0-9_-]+$/.test(i)?t.integrations[n.integration]:void 0)?.auth.user||!t.auth||!t.config.publicUrl)return w();if(e.method!==`GET`)return t;let a=await Fi(e,t);return a?.session?{...t,linkContext:a}:nt(r)}function oa(e,t){return Li(t,`Workspace admin access is required.`)}function sa(e,t){return t.local?t:w()}function ca(e,t){return t.local?S({error:tl},400):t.session?.user.id?t:S({error:`Sign in to use a subscription.`},403)}function la(e){return async(t,n,r,i)=>{let a=n.authorizedRequest===t?n:await Ji(t,n);return a instanceof Response?a:e?e(t,a,r,i):a}}function ua(e,t,n,r){return e.method===(n.engine?`POST`:`GET`)&&(!t.local||n.engine&&!nl(n.engine))?S({error:n.engine?`Engine sign-in is available on a local server only`:`Engine status is available on a local server only`},404):t}async function da(e,t,n,r){return t.config.publicUrl&&t.auth?t:ai(e,t,r)}async function fa(e,t,n,r){if(!t.auth)return Ji(e,t);if(![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method))return t;let i=await t.auth.session(e.headers);return i?.organizationDenied?S({error:`You are not a member of that workspace.`},403):i?{...t,session:i}:S({error:`Sign in first.`,hint:`coder auth login`},401)}async function pa(e,t,n,r){if(!t.auth)return w();if(e.method!==`POST`)return t;let i=await t.auth.session(e.headers);return i?e.headers.has(`cookie`)&&!Ki(e,t.config.publicUrl)?tt():{...t,session:i}:S({error:`Sign in first.`},401)}function ma(e,t,n,r){return e.method===`POST`?t.auth||t.config.store!==`memory`||!Bi(e)?w():Ki(e)?t:tt():t}async function ha(e,t,n,r){return e.method===`GET`?{...t,session:(await Fi(e,t))?.session}:t}async function ga(e,t,n,r){return[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method)&&t.auth&&(await Fi(e,t))?.session?it(`/dash`):t}async function _a(e,t,n,r){if(![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method))return t;let i=await t.auth?.session(e.headers);return i&&!i.organizations.length?t.auth.handler(new Request(r.origin+`/api/auth/sign-in?return=`+encodeURIComponent(r.pathname+r.search))):t.auth&&!(await Fi(e,t))?.session?nt(r):t}function va(e,t,n,r){return e.method===`POST`&&t.local?S({error:tl},400):t}async function ya(e,t,n,r){if(![`GET`,`POST`].includes(e.method))return t;if(!t.auth)return w();if(e.headers.get(`authorization`)?.startsWith(`Bearer `))return S({error:`Link your account from the browser.`},403);let i=await Fi(e,t);return i?.session?{...t,linkContext:i}:e.method===`GET`?nt(r):S({error:`Sign in first.`},401)}function ba(e,t,n,r){return![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method)||t.auth?t:w()}function xa(e,t){return e?`${e}/${t}`:t}function H(e){let t=e.lastIndexOf(`/`);return t<0?{label:e}:{owner:e.slice(0,t),label:e.slice(t+1)}}var Sa=class extends Error{status;constructor(e,t){super(`Credential check failed: ${e}${t?` ${t}`:``}`),this.status=e}};function Ca(e){if(e.OPENAI_API_KEY)return e.OPENAI_API_KEY;if(e.CODEX_AUTH_JSON)try{let t=JSON.parse(e.CODEX_AUTH_JSON);return t.OPENAI_API_KEY??t.tokens?.access_token??t.access_token}catch{throw Error(`CODEX_AUTH_JSON is not valid JSON`)}}async function wa(e,t=fetch){if(e.engine===`custom`)return;let n,r;if(e.engine===`claude`){let t=e.env.ANTHROPIC_API_KEY,i=e.env.CLAUDE_CODE_OAUTH_TOKEN;if(!t&&!i)throw Error(`Claude credentials need ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN`);n=`https://api.anthropic.com/v1/models`,r={"anthropic-version":`2023-06-01`,...t?{"x-api-key":t}:{authorization:`Bearer ${i}`,"anthropic-beta":`oauth-2025-04-20`}}}else{let t=Ca(e.env);if(!t)throw Error(`Codex credentials need OPENAI_API_KEY or CODEX_AUTH_JSON`);n=`https://api.openai.com/v1/models`,r={authorization:`Bearer ${t}`}}let i=await t(n,{method:`GET`,headers:r});if(!i.ok)throw new Sa(i.status,i.statusText)}async function Ta(e,t,n){let r=e.listCredentials?await e.listCredentials({owner:n,engine:t}):await e.list(`credential`),i=e=>{let n=r.filter(n=>n.value.owner===e&&(!t||n.value.engine===t));return n.find(e=>e.value.isDefault)??n[0]};return(n?i(n):void 0)??i(void 0)}async function Ea(e,t){return(e.listCredentials?await e.listCredentials({owner:t}):await e.list(`credential`)).filter(e=>!e.value.owner||e.value.owner===t)}async function Da(e,t){let n=e.session?.user.id,r=await Ea(e.store,n),i=n=>r.filter(e=>e.value.owner===n).sort((e,t)=>Number(!!t.value.isDefault)-Number(!!e.value.isDefault)).map(n=>La(e.config,n.value).env[t]).find(Boolean);return(n?i(n):void 0)??i(void 0)??(e.local?E.env[t]:void 0)}function Oa(e,t){let n=new Set(e.map(e=>H(e.id).label)),r=t;for(let e=2;n.has(r);e++)r=`${t}-${e}`;return r}const ka=(e,t,n)=>e.filter(e=>e.id!==t&&e.value.engine===n),Aa=(e,t)=>({id:e.id,value:{...e.value,isDefault:t}});function ja(e,t,n){return ka(e,t,n).filter(e=>e.value.isDefault).map(e=>Aa(e,!1))}function Ma(e,t,n){let r=ka(e,t,n)[0];return r?[Aa(r,!0)]:[]}async function Na(e,t,n,r=Date.now){let i=n.owner||void 0,a=n.credential.engine,o=n.label?.trim(),s=o||(n.credential.env.CLAUDE_CODE_OAUTH_TOKEN?`claude-token`:`${a}-key`);return await e.withCredential(`credential`,xa(i,s),async(e,c)=>{o||(s=Oa(c,s));let l=xa(i,s),u=c.find(e=>e.id===l)?.value,d=!!(n.makeDefault||u?.isDefault&&u.engine===a||!ka(c,l,a).some(e=>e.value.isDefault));return[{id:l,value:{...wn(t,{env:n.credential.env}),engine:a,...i?{owner:i}:{},...n.account?{account:n.account}:{},isDefault:d,createdAt:u?.createdAt??r()}},...d?ja(c,l,a):[],...u?.isDefault&&u.engine!==a?Ma(c,l,u.engine):[]]}),s}function Pa(e,t){return e.withCredential(`credential`,t,async(e,n)=>e&&[{id:t,value:null},...e.isDefault?Ma(n,t,e.engine):[]])}function Fa(e,t){return e.withCredential(`credential`,t,async(e,n)=>e&&[Aa({id:t,value:e},!0),...ja(n,t,e.engine)])}async function Ia(e,t,n,r,i){let a=await e.get(`login`,t);if(!a)return!1;let o=xa(a.owner,r);return e.withCredential(`credential`,o,async(e,s,c)=>{if(!await c.patchLogin(t,{state:`done`,label:r},{state:[`starting`,`open`,`verifying`],tokenHash:n,owner:a.owner}))return;let l={...i,owner:a.owner,engine:a.engine,isDefault:!0,createdAt:e?.createdAt??i.createdAt};return[{id:o,value:l},...ja(s,o,a.engine)]})}function La(e,t){return{...Tn(e,t),engine:t.engine}}function Ra(e){if(e.CODEX_AUTH_JSON)return`auth.json`;let t=Object.values(e)[0]??``;return t.length>16?`${t.slice(0,7)}…${t.slice(-4)}`:`••••`}function za(e,t,n){let r=La(e,n);return{label:H(t).label,engine:n.engine,scope:n.owner?`personal`:`workspace`,isDefault:!!n.isDefault,createdAt:n.createdAt??0,env:Object.keys(r.env).sort(),masked:Ra(r.env),...n.account?{account:n.account}:{}}}const Ba=e=>{try{return Date.parse(JSON.parse(e??``).last_refresh??``)}catch{return NaN}};function Va(e,t,n,r){return e.withCredential(`credential`,n,async e=>{if(!e)return;let{env:i}=La(t,e);if(!(!i.CODEX_AUTH_JSON||!(Ba(r)>(Ba(i.CODEX_AUTH_JSON)||0))))return[{id:n,value:{...e,...wn(t,{env:{...i,CODEX_AUTH_JSON:r}})}}]})}function Ha(e,t){return En(e,t.iv===`plain`?`plain.${t.ciphertext}`:`${t.iv}.${t.tag}.${t.ciphertext}`)}async function Ua(e,t){if(!t.encryptionKey)throw Error(`SERVER_ENCRYPTION_KEY is required to rotate keys`);let n=xn(t.encryptionKey),r=e=>En(t,e)!==n,i=e=>r(e)?N(t,P(t,e)):e,a=e=>{let t=e.token&&i(e.token),n=e.connections&&Object.fromEntries(Object.entries(e.connections).map(([e,t])=>[e,t.kind===`oauth`&&r(t.token)?{...t,token:i(t.token)}:t]));if(!(t===e.token&&!Object.entries(n??{}).some(([t,n])=>n!==e.connections[t])))return{...e,...t?{token:t}:{},...n?{connections:n}:{}}},o=0;for(let{id:t}of await e.list(`app`))await e.withAppLock(t,async e=>{let n=await e.get(`app`,t);return!n||!r(n.credentials)?!1:(await e.put(`app`,t,{...n,credentials:i(n.credentials)}),!0)})&&o++;for(let{id:t}of await e.list(`installation`))await e.withCredential(`installation`,t,async e=>{let n=e&&a(e);return n&&[{id:t,value:n}]})&&o++;for(let{id:t}of await e.list(`runner`))await e.withCredential(`runner`,t,async e=>{if(!(!e||!r(e.secret)))return[{id:t,value:{...e,secret:i(e.secret)}}]})&&o++;for(let{id:r}of await e.list(`credential`))await e.withCredential(`credential`,r,async e=>{if(!(!e||Ha(t,e)===n))return[{id:r,value:{...e,...wn(t,{env:La(t,e).env})}}]})&&o++;return o+await vc(e,t)}function Wa(e,t){return`${e.config.publicUrl?.replace(/\/$/,``)??``}/dash/settings/credentials?engine=${encodeURIComponent(t)}`}const Ga=D.object({label:D.optional(D.string().check(D.regex(/^[^/\s][^/]*$/))),env:D.record(D.string(),D.string().check(D.minLength(1))),engine:D.enum([`claude`,`codex`,`custom`]),workspace:D.optional(D.boolean()),default:D.optional(D.boolean()),noCheck:D.optional(D.boolean())}),Ka=`Only an owner or admin of this workspace can change workspace credentials.`;function qa(e,t,n){let r=e.session?.user.id,i=t.searchParams.has(`workspace`)||!r;return{workspace:i,id:xa(i?void 0:r,n)}}async function Ja(e,t,n,r){n.label;let i=t.session?.user.id,a=e=>`${e.engine}/${e.scope}/${e.label}`,o=(e,t)=>e.localeCompare(t)||(e<t?-1:+(e>t)),s=(await Ea(t.store,i)).map(e=>za(t.config,e.id,e.value)).sort((e,t)=>o(a(e),a(t)));if(!et(r))return S(s);let c=rt(r),l=r.searchParams.get(`q`)?.trim().toLowerCase(),u=s.filter(e=>!l||[e.label,e.engine,e.account?.email??``,...e.env].some(e=>e.toLowerCase().includes(l))).filter(e=>!c||o(a(e),c)>0);return S(ot(u,C(r),a))}async function Ya(e,t,n,r){n.label;let i=t.session?.user.id,a=await e.json().catch(()=>void 0),o=Ga.safeParse(a);if(!o.success||!Object.keys(o.data.env).length||Object.keys(o.data.env).some(e=>!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)))return S({error:`Invalid credential`},400);let{env:s,engine:c}=o.data,l=!!o.data.workspace||!i;if(l&&!B(t))return S({error:Ka},403);if(s.CODEX_AUTH_JSON)return S({error:`Sign in with Codex on the Credentials page instead.`},400);if(s.CLAUDE_CODE_OAUTH_TOKEN&&(l&&t.auth||t.config.subscriptions?.claude))return S({error:`Sign in with Claude on the Credentials page instead.`},400);let u=l?void 0:i;try{o.data.noCheck||await wa({engine:c,env:s},t.fetch??fetch);let e=await Na(t.store,t.config,{label:o.data.label?.trim()||void 0,...u?{owner:u}:{},credential:{env:s,engine:c},makeDefault:o.data.default},t.now??Date.now);return S({ok:!0,label:e})}catch(e){return S({error:e instanceof Error?e.message:String(e)},e instanceof Sa?e.status:400)}}async function Xa(e,t,n,r){let i=n.label;t.session?.user.id;let{workspace:a,id:o}=qa(t,r,i);return a&&!B(t)?S({error:Ka},403):await Pa(t.store,o)?S({ok:!0}):S({error:`Unknown credential`},404)}async function Za(e,t,n,r){let i=n.label;t.session?.user.id;let{workspace:a,id:o}=qa(t,r,i);return a&&!B(t)?S({error:Ka},403):await Fa(t.store,o)?S({ok:!0}):S({error:`Unknown credential`},404)}async function Qa(e,t,n,r){let i=n.engine;return rl(i),S(await ol())}async function $a(e,t,n,r){let i=n.engine;return await il(i),S(await ol())}const eo=(e,t)=>e===`credential`?`credential:${H(t).owner??``}`:e===`runner`?`runners:`:`installation:${t}`;async function to(e,t,n,r){let i=H(n).owner,a=(await e.list(t)).filter(e=>t===`credential`?H(e.id).owner===i:e.id===n),o=await r(a.find(e=>e.id===n)?.value,a,e);for(let n of o??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!o?.length}var no=class{now;appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(eo(e,t),()=>to(this,e,t,n))}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){return this.live(e).get(t)?.value}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,a}completeLogin(e,t,n,r){return Ia(this,e,t,n,r)}async put(e,t,n,r={}){let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?n:Object.assign({},n,{archivedAt:o}),expiresAt:i})}async putMany(e,t){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value)));return}let n=this.bucket(e);for(let e of t)n.set(e.id,{value:e.value})}async list(e,t={}){return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}async delete(e,t){this.bucket(e).delete(t)}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),!0)}async take(e,t){let n=this.live(e),r=n.has(t);return r&&n.delete(t),r}};const ro=new Set([`app`,`installation`,`runner`]),io=new Set([`task`,`tasklog`,`inbox`,`usage`]),ao=new Set([`agent`,`agentversion`]);function oo(e,t){try{return JSON.parse(O.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function so(e,t){O.mkdirSync(T.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{O.writeFileSync(n,t,{mode:384}),O.renameSync(n,e)}finally{O.rmSync(n,{force:!0})}}var co=class{now;derived=new no;writes=Promise.resolve();constructor(e=Date.now){this.now=e}withAppLock(e,t){return this.derived.withAppLock(e,()=>t(this))}withConfigLock(e){return this.derived.withConfigLock(()=>e(this))}withCredential(e,t,n){return this.derived.withAppLock(eo(e,t),()=>to(this,e,t,n))}get appsFile(){return n(`apps.json`)}get deliveriesFile(){return T.join(h(``),`deliveries.json`)}get notesDir(){return T.join(h(``),`notes`)}noteFile(e){return T.join(this.notesDir,`${encodeURIComponent(e)}.md`)}serial(e){let t=this.writes.then(e);return this.writes=t.catch(()=>{}),t}apps(){return oo(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?m():e===`snapshot`?T.join(h(``),`snapshots.json`):T.join(h(``),`runner`,`${e}.json`)}deliveries(e=`delivery`){let t=this.now();return Object.fromEntries(Object.entries(oo(this.recordsFile(e),{})).filter(([,e])=>e.expiresAt===void 0||e.expiresAt>t))}entries(e){if(ro.has(e))return Object.entries(this.apps()[e]??{});if(e===`delivery`||e===`snapshot`||io.has(e))return Object.entries(this.deliveries(e)).map(([e,t])=>[e,t.value]);if(e===`note`){let e=[];try{e=O.readdirSync(this.notesDir).filter(e=>e.endsWith(`.md`))}catch{}return e.map(e=>[decodeURIComponent(e.slice(0,-3)),O.readFileSync(T.join(this.notesDir,e),`utf8`)])}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(ao.has(e))return this.derived.get(e,t);if(e===`note`)try{return O.readFileSync(this.noteFile(t),`utf8`)}catch{return}return this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(ao.has(e))return this.derived.put(e,t,n,r);await this.serial(()=>this.write(e,t,n,r.ttlMs))}write(e,t,n,r){if(ro.has(e)){let r=this.apps();r[e]={...r[e],[t]:n},so(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else if(e===`delivery`||e===`snapshot`||io.has(e)){let i=this.deliveries(e);i[t]={value:n,...r===void 0?{}:{expiresAt:this.now()+r}},so(this.recordsFile(e),`${JSON.stringify(i)}\n`)}else e===`note`?so(this.noteFile(t),String(n)):this.refuse(e)}remove(e,t){if(ro.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],so(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}if(e===`delivery`||e===`snapshot`||io.has(e)){let n=this.deliveries(e);return t in n&&(delete n[t],so(this.recordsFile(e),`${JSON.stringify(n)}\n`),!0)}if(e===`note`){let e=this.noteFile(t),n=O.existsSync(e);return O.rmSync(e,{force:!0}),n}return!1}async putMany(e,t){for(let n of t)await this.put(e,n.id,n.value)}async list(e,t={}){return ao.has(e)?this.derived.list(e,t):this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t}))}async delete(e,t){if(ao.has(e))return this.derived.delete(e,t);await this.serial(()=>this.remove(e,t))}async create(e,t,n,r={}){return ao.has(e)?this.derived.create(e,t,n,r):this.serial(()=>!this.entries(e).some(([e])=>e===t)&&(this.write(e,t,n,r.ttlMs),!0))}claimDeliveryLease(e,t,n){return this.serial(()=>{if(this.deliveries()[e])return;let r=this.deliveries(`snapshot`)[`delivery:${e}`]?.value?.failures??0;return this.write(`delivery`,e,{owner:t,failures:r},n),r})}updateDeliveryLease(e,t,n,r={ttlMs:3e4}){return this.serial(()=>{if(this.deliveries()[e]?.value?.owner!==t)return!1;if(!n)this.remove(`delivery`,e),this.remove(`snapshot`,`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};this.write(`delivery`,e,t,r.ttlMs),n.next!==void 0&&this.write(`snapshot`,`delivery:${e}`,t,864e5)}return!0})}async updateDelivery(e,t,n,r={}){return this.serial(()=>this.entries(`delivery`).find(([t])=>t===e)?.[1]?.owner===t&&(n===void 0?this.remove(`delivery`,e):this.write(`delivery`,e,n,r.ttlMs),!0))}async take(e,t){return ao.has(e)?this.derived.take(e,t):this.serial(()=>this.remove(e,t))}};function lo(e){let t=T.resolve(e);for(;!O.existsSync(T.join(t,`.git`));){let e=T.dirname(t);if(e===t)return Promise.resolve(void 0);t=e}return new Promise(t=>Ct(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function uo(e,t,r,i){let a=await he(t,r),o=await Promise.all(a.filter(e=>!i||e.id===i).map(async t=>{let r=t.usage?{settings:t.usage}:{};if(t.builtin){let{record:n,version:i}=await L(e,t.id);if(!n)return;let a={...n,settings:void 0,...r,local:!0};return await e.put(`agent`,t.id,a),{record:a,version:i}}if(!t.dir)return;let i=await lo(t.dir),a=O.statSync(T.join(t.dir,`agent.json`)),o=T.join(t.dir,`system.md`),s={agent:t.id,version:1,definition:t.definition,systemPrompt:O.existsSync(o)?O.readFileSync(o,`utf8`):``,files:yr(t.dir),...i?{commit:i}:{},importedFrom:`local:${t.dir}`,createdAt:a.mtimeMs},c={id:t.id,name:t.name,...t.definition.description?{description:t.definition.description}:{},source:T.resolve(t.dir)===n(`agents`,t.id)?`home`:`repo`,path:t.dir,currentVersion:1,...r,local:!0,...i?{commit:i}:{},createdAt:a.birthtimeMs||a.mtimeMs,updatedAt:a.mtimeMs};return await e.put(`agentversion`,cr(t.id,1),s),await e.put(`agent`,t.id,c),{record:c,version:s}}));if(!i){let t=new Set(a.map(e=>e.id));for(let n of await lr(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return o.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function fo(e,t,r,i){let a=(await he(e,t)).find(e=>e.id===r&&!e.builtin)?.dir??n(`agents`,r),o={...i.files,"agent.json":`${JSON.stringify(i.definition,null,2)}\n`,"system.md":i.systemPrompt};for(let[e,t]of Object.entries(o))O.mkdirSync(T.dirname(T.join(a,e)),{recursive:!0}),O.writeFileSync(T.join(a,e),t)}async function po(e,t,r){let i=(await he(e,t)).find(e=>e.id===r&&!e.builtin);if(!i?.dir)throw Error(`No local agent named "${r}".`);return T.resolve(i.dir)===n(`agents`,r)&&(O.rmSync(i.dir,{recursive:!0}),!0)}var U=class extends Error{status;fix;constructor(e,t=400,n){super(e),this.status=t,this.fix=n}};function mo(e,t){if(t.cwd===void 0)return;if(!e.local)throw new U(`cwd is available on a local server only`);let n=tr(t.cwd);if(!n.ok)throw new U(n.detail);return n.folder.path}const ho=65536,go=/^[a-z0-9][a-z0-9_-]*$/i,_o=new Set([`claude`,`codex`,`custom`]),vo=new Set([`low`,`medium`,`high`]);function yo(e){let t=e.flow??`default`;if(!go.test(t))throw new U(`Invalid flow "${t}"`);if(e.prompt!==void 0&&typeof e.prompt!=`string`)throw new U(`prompt must be text`);if(t==="default"&&!e.prompt?.trim())throw new U(`prompt is required`);if((e.prompt?.length??0)>ho)throw new U(`prompt is longer than 64 KB`);if(e.repo!==void 0&&!/^[\w.-]+\/[\w.-]+$/.test(e.repo))throw new U(`repo must be owner/name`);if(e.pr!==void 0&&(!Number.isInteger(e.pr)||e.pr<1||!e.repo))throw new U(`pr needs a repo and a pull request number`);if(e.engine!==void 0&&!_o.has(e.engine))throw new U(`Unknown engine "${e.engine}"`);if(e.effort!==void 0&&!vo.has(e.effort))throw new U(`Unknown effort "${e.effort}"`);if(e.permissions!==void 0&&!(e.permissions in a))throw new U(`Unknown permissions "${e.permissions}"`);if(e.mcp!==void 0&&(!Array.isArray(e.mcp)||!e.mcp.every(e=>go.test(e))))throw new U(`mcp must list server names`);if(e.outputSchema!==void 0&&(!e.outputSchema||typeof e.outputSchema!=`object`||Array.isArray(e.outputSchema)))throw new U(`outputSchema must be an object`);if(e.args!==void 0&&(typeof e.args!=`object`||Array.isArray(e.args)))throw new U(`args must be an object`)}async function bo(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await Tl(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(a)try{let r=await n.auth.token(wc(e,i),P(e.config,a.credentials));if((await n.repos.list(i,r)).includes(t))return{integration:n,installation:i,app:a,token:r}}catch{}}throw new U(`No install in this workspace reaches ${t}`,404)}async function xo(e,t,n,r){let i=n.repo,{integration:a,installation:o,app:s,token:c}=await bo(e,i),l=await a.repos.get(i,c);return{event:{integration:a.id,type:n.pr?`pull_request`:`task`,appId:s.id,installationId:o.id.slice(s.id.length+1),deliveryId:t,actor:{id:r??``},text:n.prompt??``,...n.pr?{chat:{thread:a.repos.pullRequestThread(i,n.pr)}}:{},repo:n.pr?{...l,ref:`refs/pull/${n.pr}/head`}:l},author:a.author?.(s.name)??s.name}}async function So(e,t,n){yo(n);let r=mo(e,n),i=(e.now??Date.now)(),a=e.session?.user.id,o=n.agent??`coder`;e.local&&await uo(e.store,e.local.cwd,e.integrations);let s=()=>e.store.taskInputs?e.store.taskInputs(o,a,n.engine):L(e.store,o),c=await s();await br(e.store,i,o,c)&&(c=await s());let{record:l,version:u}=c,d=await Xn(e,{requester:a,runner:n.runner,agent:u?.definition.runner}).catch(e=>{throw new U(e.message)});if(!l||!u)throw new U(`No agent "${o}"`,404);let f=vr(l,u,{...n.engine?{engine:n.engine}:{},...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{},...n.permissions?{permissions:n.permissions}:{}},e.integrations),p=ye(f),m=e.store.taskInputs?c.credential:(await Ta(e.store,p.engine,a))?.id,h=p.engine??`claude`;if(!m&&d.runner!==`http`&&!await sl(e,h))throw new U(`No ${h} credential is connected`,409,Wa(e,h));let g=`${i.toString(36)}-${k(4).toString(`hex`)}`,_=n.repo?await xo(e,g,n,a):void 0,v={id:g,source:t,agent:f.id,flow:n.flow??`default`,...d,permissions:p.permissions,..._?{event:_.event,author:_.author}:{},...r&&!_?{cwd:r}:{},...n.prompt?{prompt:n.prompt}:{},...n.args?{args:n.args}:{},...n.mcp?.length?{mcp:n.mcp}:{},definition:f.definition,...m?{credential:m}:{},...a?{requester:a}:{},...f.files?{files:f.files}:{},...f.usage?{usage:f.usage}:{},tools:{},...e.session||n.outputSchema?{context:{...e.session?{user:{name:e.session.user.name,email:e.session.user.email}}:{},...n.outputSchema?{outputSchema:n.outputSchema}:{}}}:{}};return e.local&&d.runner===`local`&&!d.runnerId?Gc(e,v):(await e.queue.enqueue(e.organizationId,v,i,void 0,e.config.maxQueued??1e3),{task:v,status:`queued`,attempts:0,createdAt:i,updatedAt:i})}function Co(e){return e.turns?e.turns:[...e.task.context?.turns??[],{prompt:e.task.prompt??e.task.event?.text??e.task.name??``,result:e.result,error:e.error,finishedAt:e.finishedAt,...[`completed`,`failed`,`cancelled`].includes(e.status)?{logSeq:e.logSeq}:{}}]}async function wo(e,t,n,r){if(r!==void 0&&(!r||typeof r!=`object`||Array.isArray(r)))throw new U(`outputSchema must be an object`);if(!n.trim())throw new U(`text is required`);if(n.length>ho)throw new U(`text is longer than 64 KB`);if(e.session&&t.task.requester&&t.task.requester!==e.session.user.id)throw new U(`Only the member who asked can continue this task`,403);let i=(e.now??Date.now)(),a=t.task.context?.messages??[],o=String(t.finishedAt??i),s=[...a,{user:`user`,text:t.task.prompt??t.task.event?.text??``,ts:String(t.createdAt)},{user:`agent`,text:t.result?.output??t.error??``,ts:o}].slice(-20),{note:c,...l}=t.task.context??{},u=Co(t);u.at(-1).finishedAt??=i;let d={task:{...t.task,prompt:n,context:{...l,...r?{outputSchema:r}:{},messages:s,turns:u}},status:`queued`,attempts:0,generation:(t.generation??0)+1,...t.logSeq===void 0?{}:{logSeq:t.logSeq},...t.logBytes===void 0?{}:{logBytes:t.logBytes},createdAt:t.createdAt,updatedAt:i};if(!await e.queue.continueTask(e.organizationId,t.task.id,d.task,i,{attempts:t.attempts,tokenHash:t.tokenHash??null,generation:t.generation??0}))throw new U(`Task is already active`,409);return d}const To={principalPerMinute:300,ipPerMinute:60,authPerMinute:20,registerPerMinute:10,pairingPerMinute:5,concurrentTasks:10};var Eo=class{buckets=new Map;sweptAt;startedAt;requests=0;rejections=0;constructor(e=Date.now()){this.startedAt=this.sweptAt=e}consume(e,t,n){if(n-this.sweptAt>=6e4){for(let[e,t]of this.buckets)n-t.at>=6e4&&this.buckets.delete(e);this.sweptAt=n}let r=this.buckets.get(e),i=r?Math.min(t,r.tokens+Math.max(0,n-r.at)*t/6e4):t,a=i<1;if(this.buckets.set(e,{tokens:a?i:i-1,at:n}),!a)return;this.rejections++;let o=Math.max(1,Math.ceil((1-i)*60/t));return S({error:`Too many requests. Try again in ${o} seconds.`},429,{"retry-after":String(o)})}};const Do=[[e=>e===`/admin/runners/pair`,`pairing`],[e=>e===`/runners/register`,`register`],[e=>e.startsWith(`/admin/`)||e.startsWith(`/runners/`)],[e=>e.startsWith(`/api/auth`)||e===`/login`||e===`/dash/token`,`auth`]];async function Oo(e,t,n){let r=new URL(e.url).pathname,i=Do.find(([e])=>e(r));if(!i)return{};let a=r.startsWith(`/admin/`)?await Ji(e,t):void 0;return ko(t,r===`/runners/register`?await Xi(e,t):a&&!(a instanceof Response)?a.session?`user:${a.session.user.id}`:`admin`:void 0,n,i[1])??{scope:a}}function ko(e,t,n,r){let i=e.limits??=new Eo((e.now??Date.now)()),a={...To,...e.config.limits},o=(e.now??Date.now)(),s=t??`ip:${n}`,c=i.consume(s,t?a.principalPerMinute:a.ipPerMinute,o);return c||!r?c:r===`pairing`?i.consume(`pair:${s}`,a.pairingPerMinute,o):i.consume(`${r}:ip:${n}`,r===`auth`?a.authPerMinute:a.registerPerMinute,o)}function Ao(e,t,n){let r;return Promise.race([e,new Promise((e,i)=>{r=setTimeout(()=>i(Error(`${n} timed out`)),t),r.unref?.()})]).finally(()=>clearTimeout(r))}async function jo(e,t,n){try{await Ao(e.stop(t),1e4,`runner stop`)}catch(e){console.error(`coder server: runner stop ${n} failed`,e)}}async function Mo(e,t,n,r={}){try{await Ao(Ei(e,t),1e4,`runner logs`)}catch(e){console.error(`coder server: runner logs ${t.task.id} failed`,e)}return e.queue.finish(e.organizationId,t.task.id,{status:`failed`,error:n},(e.now??Date.now)(),{attempts:t.attempts,tokenHash:t.tokenHash??null,generation:t.generation??0,...r})}async function No(e,t,n){if(e.local&&t.handle?.startsWith(`cli:`))return Vc(e,t,n);let r={handle:t.handle??null,lastSeenAt:t.lastSeenAt??null,updatedAt:t.updatedAt};if(!t.handle)return n-(t.lastSeenAt??t.startedAt??t.updatedAt)<(e.config.taskStallMs??3e5)?!1:t.attempts>=(e.config.taskAttempts??2)?Mo(e,t,`runner start was interrupted`,r):e.queue.requeue(e.organizationId,t.task.id,n,{generation:t.generation??0,attempts:t.attempts,tokenHash:t.tokenHash??null,...r});let i=await Qn(e,t.task);if(t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs)return i&&await jo(i,t.handle,t.task.id),Mo(e,t,`timeout`);if(!i||n-(t.lastSeenAt??t.startedAt??t.updatedAt)<(e.config.taskStallMs??3e5))return!1;let a=await Ao(i.status(t.handle),1e4,`runner status`);return a.state===`exited`&&Mo(e,t,`runner exited${a.code===void 0?``:` with code ${a.code}`}`,{handle:t.handle,lastSeenAt:t.lastSeenAt??null})}async function Po(e,t,n){let r=e.now??Date.now,i=e.config.limits?.concurrentTasks??To.concurrentTasks,a=e.config.store===`postgres`?e.config.maxTasks:Math.min(i,e.config.maxTasks??i);if(t){let t=await e.queue.running(),n=0;for(let i of t)await No(M(e,i.organizationId),i.status,r()).catch(()=>!1)&&n++;if(a!==void 0&&t.length-n>=a)return}let o=[];for(;;){let t=e.local?Lc(e.local.cwd,!1).filter(e=>e.status===`running`||e.status===`waiting`):[],s=t.length?new Set((await e.queue.running()).flatMap(e=>[e.status.task.id,...e.status.handle?.startsWith(`cli:`)?[e.status.handle.slice(4)]:[]])):new Set,c=t.filter(t=>!s.has(t.task.id)&&!s.has(x(t.task.cwd??e.local.cwd,t.task.id)?.flowRunId??``)).length,l=a===void 0?void 0:a-c;if(l!==void 0&&l<=0)break;let u=await e.queue.claim(r(),l,n,i);if(n=!1,!u)break;let d=M(e,u.organizationId),f=u.status;if(await Bc(d,f)){if(n=u.more,!u.more)break;continue}let p=await Qn(d,f.task);if(!p){await Mo(d,f,`No runner available: ${f.task.runner}`);continue}let m=f,h={generation:f.generation??0,attempts:f.attempts,tokenHash:f.tokenHash??null,statuses:[`running`,`waiting`]},g;try{let e=p.start(f.task,{CODER_SERVER:d.local&&p.kind===`local`?`http://localhost:${d.local.port}`:d.config.publicUrl??``,CODER_TASK_TOKEN:u.token,CODER_INBOX_MODE:p.push?`push`:`poll`},p.kind===`vercel-sandbox`?(await Pc(d,f.task)).env:void 0);if(g=await Ao(e,3e4,`runner start`).catch(t=>{throw e.then(e=>jo(p,e,f.task.id),()=>{}),t}),await d.queue.patchTask(u.organizationId,f.task.id,{handle:g},r(),h)||await jo(p,g,f.task.id),n=u.more,!u.more)break}catch(e){g!==void 0&&await jo(p,g,f.task.id);let t=e instanceof Error?e.message:String(e);if(f.attempts<(d.config.taskAttempts??2)){o.push({...u,status:m});continue}await Mo(d,m,t)}}for(let t of o)await M(e,t.organizationId).queue.requeue(t.organizationId,t.status.task.id,r(),{attempts:t.status.attempts,tokenHash:t.status.tokenHash})}function Fo(e,t=!1,n=!1,r=!1){let i=e.queue.scheduler??={},a=t?i.waiting:void 0;if(a)return a;let o=i.running??Promise.resolve(),s=()=>(i.waiting===c&&delete i.waiting,Po(e,n,r)),c=o.then(s,s);return i.waiting=c,i.running=c.catch(()=>{}),c}function Io(e,t=!1){let n=Fo(e,!0,!1,t).catch(()=>{});e.waitUntil&&e.waitUntil(n)}function Lo(e,t){return Jt(e,`link-start`,`*`,JSON.stringify(t),3e5)}const Ro=6e4,zo=864e5,Bo=262144,Vo=[`model`,`engine`,`effort`],Ho=[`Usage:`,"• `/setup model <name>`. Sets the engine model. Also accepts `engine` and `effort`.","• `/setup show`. Shows the current settings."].join(`
5
- `);function Uo(e){return e.type===`command`}function Wo(e){let t=Object.entries(e??{}).filter(([,e])=>e);return t.length?`Current settings:\n${t.map(([e,t])=>`• ${e}: \`${t}\``).join(`
6
- `)}`:`No settings yet. A workspace admin can configure this agent in the dashboard.`}function Go(e){let[t=``,...n]=e.text.trim().split(/\s+/);return Vo.includes(t)&&n.join(` `).trim()!==``}async function Ko(e,t,n){let[r=``,...i]=e.text.trim().split(/\s+/),a=i.join(` `).trim(),o={...t.settings},s;return r?r===`show`?s=Wo(t.settings):Vo.includes(r)?a?(o[r]=a,s=`${r} set to \`${a}\`.`):s=`Give a value: \`/setup ${r} <name>\`.`:s=`Unknown setting \`${r}\`.\n${Ho}`:s=Ho,JSON.stringify(o)!==JSON.stringify(t.settings??{})&&await wl(n,`installation`,t.id,{settings:o}),s}async function qo(e,t,n){let r=`${t.id}:${n.installationId}`,i=e.boundInstallation?.installation.id===r?e.boundInstallation.installation:await e.store.get(`installation`,r);return i&&!i.deletedAt?i:void 0}async function Jo(e,t,n){let r=await e.auth.linkedUser(t.id,n.actor.id).catch(()=>void 0);return r?.organizations?.includes(e.organizationId)?r:void 0}async function Yo(e,t,n,r,i,a,o=!1){let s=e.config.publicUrl?.replace(/\/$/,``),c=kt(),l=o||await e.store.create(`delivery`,`link:${t.id}:${r.actor.id}`,{at:a,owner:c},{ttlMs:864e5});if(!s||!l)return;let u=e=>`Link your Coder account so I can work for you here: ${e}`;try{if(t.auth.user){await i.post(u(`${s}/connect/${t.id}?installation=${encodeURIComponent(n.id)}`));return}let a=await Lo(e,{platform:t.id,platformUserId:r.actor.id});await i.whisper(u(`${s}/connect?token=${encodeURIComponent(a)}`))}catch(n){throw o||await e.store.updateDelivery(`link:${t.id}:${r.actor.id}`,c,void 0).catch(()=>{}),n}}function Xo(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e in t.definition.integrations))}async function Zo(e,t,n){let r={};n.repo?r[n.integration]={repo:{owner:n.repo.owner,name:n.repo.name}}:n.chat&&(r[n.integration]={thread:n.chat.thread.id});for(let[n,i]of Object.entries(t.connections??{})){if(i.kind!==`installation`)continue;let t=(await e.store.get(`installation`,i.id))?.settings?.configRepo,a=t&&/^([^/]+)\/([^/]+)$/.exec(t);a&&(r[n]={repo:{owner:a[1],name:a[2]}})}return r}function Qo(e,t){return`<!-- coder:setup -->\nCoder is installed, but no engine is connected. [Connect ${t}](${Wa(e,t)}).`}async function $o(e,t,n,r){let i=Q({agent:n,requester:r,event:t}),a=await ts(e,i)??await e.store.get(`snapshot`,`session:${i}`);if(!a||a.requester!==r||!t.actor.id||a.actor!==t.actor.id)return;let o=await e.store.get(`task`,a.id);if(o&&[`queued`,`running`,`waiting`].includes(o.status)&&Q(o.task)===i)return o.task.id;let s=x(e.local.cwd,a.id);if(!s){let t=(await e.store.list(`delivery`,{prefix:`delivery:`})).find(e=>e.value.session?.key===i&&e.value.session.id===a.id)?.value.pending;if(!t?.task||t.taskId!==a.id||Q(t.task)!==i)return;await Gc(e,t.task,t.taskId),s=x(e.local.cwd,a.id)}if(!s||s.agentId!==n)return;let c=p(e.local.cwd,s);return c.status===`running`||c.status===`queued`?c.id:void 0}async function es(e,t,n,r,i,a,o){let s=`delivery:${t.id}:${n.id}:${i.installationId}:${i.chat?.thread.id??``}:${i.deliveryId}`,c=await qo(e,n,i);if(!c||e.local&&await e.store.get(`delivery`,s).then(e=>e&&!e.pending))return{};if(!e.local)return rs(e,t,n,r,i,c,a,o,s);let l=JSON.stringify([i.appId,i.installationId,i.chat?.thread.id]),u=e.store.handoffs??=new Map,d=(u.get(l)??Promise.resolve()).catch(()=>{}).then(async()=>{let l=await rs(e,t,n,r,i,c,a,o,s);return await l.work,l});u.set(l,d);try{return await d}finally{u.get(l)===d&&u.delete(l)}}async function ts(e,t){let n=await e.store.list(`delivery`,{prefix:`delivery:`}),r=await e.store.get(`snapshot`,`session:${t}`);return[...n.map(e=>e.value.session),r&&{...r,key:t}].filter(e=>e?.key===t).sort((e,t)=>(t.version??0)-(e.version??0))[0]}async function ns(e,t,n,r,i,a,o=!1){let s=kt(),c={event:n,...a?{task:a,taskId:a.flow==="default"?l():Ie()}:{}},u;if(e.local&&!n.repo){let n=await e.store.get(`delivery`,t);if(n&&!n.pending)return{};if(c=n?.pending??c,c.task&&!c.taskId)throw Error(`Local delivery has no task binding`);if(u=n?.session,!u&&o&&c.task){let t=Q(c.task);u={key:t,id:c.taskId,version:((await ts(e,t))?.version??0)+1,requester:c.task.requester,actor:c.task.event.actor.id}}await e.store.put(`delivery`,t,{at:r(),owner:s,pending:c,...u?{session:u}:{}})}else if(!await e.store.create(`delivery`,t,{at:r(),owner:s,pending:c},{ttlMs:Ro}))return{};return{work:(async()=>{let n=Promise.resolve(),a=e.local?void 0:setInterval(()=>{n=n.then(async()=>{await e.store.updateDelivery(t,s,{at:r(),owner:s,pending:c},{ttlMs:Ro})}).catch(()=>{})},Ro/3);try{await i(c),a&&clearInterval(a),await n,await e.store.updateDelivery(t,s,{at:r(),...u?{session:u}:{}},{ttlMs:zo})}catch(r){throw a&&clearInterval(a),await n,(!e.local||!c.task)&&await e.store.updateDelivery(t,s,void 0).catch(()=>{}),r}})()}}async function rs(e,t,n,r,i,a,o,s,c){let l=t=>ns(e,c,i,o,t);if(Uo(i))return e.auth&&Go(i)&&!await Jo(e,t,i)?l(()=>Yo(e,t,a,i,s,o(),!0)):l(()=>Ko(i,a,e.store).then(e=>s.whisper(e)).then(()=>{}));let u=await Tc(e,t,a,r,Dc(i.repo,t.tools.presets.observe)),d=await jc(e,a,i,u),[f,p]=await Promise.all([e.loadAgent(n,a,i,d),e.auth&&i.actor.id?Jo(e,t,i):void 0]);if(!p&&e.auth&&i.actor.id&&t.events[i.type]?.addressed)return l(()=>Yo(e,t,a,i,s,o()));let m=p?.id,h=Ke(i,f);if(!h)return{};let g=i.chat&&h.flow==="default"&&t.events[i.type]?.steers,_=t=>ns(e,c,i,o,async t=>{let n=t.task,r=await Gc(e,n,t.taskId);if(g){let i=await ts(e,Q(n));i&&i.id===t.taskId&&await e.store.put(`snapshot`,`session:${i.key}`,{...i,id:r.task.id})}},t,!!g);if(e.local&&!i.repo){let t=await e.store.get(`delivery`,c);if(t?.pending?.task){let e=t.pending.task;return Q(e)!==Q({agent:f.id,requester:m,event:i})||e.flow!==h.flow?{}:_(e)}}let v=e.local&&!i.repo&&g?await $o(e,i,f.id,m):void 0;if(v){let t=await e.store.get(`task`,v),n=x(e.local.cwd,v);return!n||t?.status===`queued`?l(async()=>{t&&await hl(e,v,`steer`,{text:i.text},t.generation??0)}):n.threadId?l(()=>Pe(e.local.cwd,n,i.text).then(()=>{})):l(async()=>{re(e.local.cwd,v,i.text)})}let y=ye(f),ee=Xo(d,f),[b,te,ne,ie]=await Promise.all([Xn(e,{requester:m,agent:f.definition.runner}),Ta(e.store,y.engine,m),Zo(e,a,i),pn(e,t,a,i,ee,f,t.events[i.type]?.addressed&&t.history!==!1?s.recent:void 0,p??null)]);if(!te&&b.runner!==`http`&&!await sl(e,y.engine??`claude`))return(!e.local||i.repo)&&g&&(await e.queue.deliver(e.organizationId,{id:`${i.deliveryId}-${f.id}`,source:i.integration,agent:f.id,flow:h.flow,...b,event:i,requester:m,definition:f.definition,tools:{}},o(),{key:c,ttlMs:864e5},!0,void 0,!1)).steered?{}:l(()=>s.post(Qo(e,y.engine??`claude`)).then(()=>{}));let ae=new Set(t.tools.presets.observe),oe=h.tools[i.integration]??[];p&&t.auth.canWrite&&oe.some(e=>!ae.has(e))&&!await t.auth.canWrite(i,u)&&(h.tools[i.integration]=oe.filter(e=>ae.has(e)));let se=Object.fromEntries(Object.entries(h.tools).filter(([e])=>e in ee).map(([t,n])=>{if(ne[t])return[t,n];if(t!==i.integration)return[t,[]];let r=new Set(e.integrations[t]?.tools.presets.observe??[]);return[t,n.filter(e=>r.has(e))]}).filter(([,e])=>e.length));if(Buffer.byteLength(JSON.stringify(i))>Bo)throw Error(`Event exceeds 256 KB`);if(Buffer.byteLength(JSON.stringify(ie))>Bo)throw Error(`Task context exceeds 256 KB`);let ce={id:`${i.deliveryId}-${f.id}`,source:i.integration,agent:f.id,flow:h.flow,...b,permissions:h.permissions??y.permissions,event:i,author:t.author?.(n.name)??n.name,definition:f.definition,...te?{credential:te.id}:{},...m?{requester:m}:{},...f.files?{files:f.files}:{},...f.usage?{usage:f.usage}:{},tools:se,...Object.keys(ne).length?{toolScopes:ne}:{},...Object.keys(ie).length?{context:ie}:{}};return e.local&&!i.repo&&b.runner===`local`&&!b.runnerId?_(ce):e.queue.deliver(e.organizationId,ce,o(),{key:c,ttlMs:zo},!!g,e.config.maxQueued??1e3)}var is=e({addressedTo:()=>fs,chatFor:()=>vs,deliver:()=>ms,eventReplies:()=>gs,later:()=>ps,renewInstallation:()=>ys,renewInstallations:()=>bs,threadReplies:()=>hs});async function as(e,t,n,r,i){let a=`${t.id}:${r}`,o=await gn(e,a),s=o?.boundInstallation?.installation.id===a?o.boundInstallation.installation:await o?.store.get(`installation`,a);if(!o||!s||s.deletedAt)throw Error(`${t.integration} installation ${r} is not bound to this server`);return Tc(o,e.integrations[t.integration],s,n,i)}function os(e){if(e._type===`chat:Thread`)return{...e,currentMessage:void 0};let{raw:t,replyTo:n,...r}=e;return{...r,raw:null,id:r.id.startsWith(`ephemeral:`)?``:r.id}}const ss=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),cs=(e,t)=>Object.keys(e.events).find(n=>e.events[n].on===t),ls=`(?![\\w-]|\\.\\w)`,us=e=>e.replace(/[ \t]{2,}/g,` `).trim();function ds(e,t){let n=t.reduce((e,t)=>e.replace(RegExp(`(^|[^\\w-])@${ss(t)}${ls}`,`gi`),`$1`),e);return n===e?void 0:us(n)}function fs(e,t){let n=ds(e,[t]);if(n!==void 0)return n;let r=RegExp(`^\\s*${ss(t)}${ls}[\\s,:;!.?-]*`,`i`);return r.test(e)?us(e.replace(r,``)):void 0}function ps(e,t,n,r){let i=r.catch(e=>console.error(`coder server: dispatch failed for ${t.id} event ${n.deliveryId}`,e));e.waitUntil&&e.waitUntil(i)}async function ms(e,t,n,r,i,a){let o=await gn(e,`${n.id}:${i.installationId}`);if(!o||!n.builtin&&o.organizationId!==e.organizationId)return;let s=await es(o,t,n,r,i,e.now??Date.now,a);return await s.work,s.taskId&&await Fo(o,!0,!1,!0),s.taskId}function hs(e,t,n){return{post:t=>n&&e.adapter.reply?e.reply(n,t):e.post(t),whisper:n=>t?e.postEphemeral(t,n,{fallbackToDM:!1}):Promise.resolve(null),async recent(){let t=[],n=0;for await(let r of e.allMessages)if(t.push({user:r.author.userName||r.author.userId,text:r.text,ts:r.metadata.dateSent.toISOString()}),t.length>10&&t.shift(),++n===1e3)break;return t}}}async function gs(e,t,n){if(!n.chat)return{post:async()=>{},whisper:async()=>{}};let r=await vs(e,t,{id:n.installationId,...n.repo?{repo:n.repo}:{}});return await r.initialize(),hs(r.thread(n.chat.thread.id),n.actor.id||void 0,n.chat.message?.id||void 0)}function _s(e,t,n,r,i,a,o=a.id){let s=r===`message`&&t.agent===`coder`?fs(a.text,Se):void 0;if(r===`message`&&t.agent===`coder`&&s===void 0)return;let c=cs(e,s===void 0?r:`mention`);if(!c||a.author.isBot===!0)return;let l=e.event?e.event(c,i,a,t):{};if(!l)return;let u=(l.type??c)===cs(e,`mention`)?s??ds(a.text,[t.name,...n.self?[n.self]:[]])??a.text:a.text;return{integration:e.id,type:c,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${i.id}\n${o}`).digest(`base64url`).slice(0,22),actor:{id:a.author.userId,...a.author.userName?{login:a.author.userName}:{}},text:u,chat:{thread:os(i.toJSON()),message:os(a.toJSON())},...n.repo?{repo:n.repo}:{},...l}}async function vs(e,t,n){let r=e.integrations[t.integration];if(!r)throw Error(`Unknown integration "${t.integration}"`);let i=P(e.config,t.credentials),a=await r.adapter({fetch:e.fetch??fetch,appId:t.id.slice(r.id.length+1),name:t.name,credentials:i,...n?{installationId:n.id,...n.self?{self:n.self}:{}}:{},token:(r,a)=>as(e,t,i,r,{...n?.repo?{repo:{owner:n.repo.owner,name:n.repo.name}}:{},...a}),isBound:async n=>{let r=`${t.id}:${n}`,i=await gn(e,r),a=i?.boundInstallation?.installation.id===r?i.boundInstallation.installation:await i?.store.get(`installation`,r);return!!(a&&!a.deletedAt&&(t.builtin||i?.organizationId===e.organizationId))}}),o=lt(e.chatState??new ut,t.id),s=new Ut({userName:t.name,adapters:{[r.id]:a},state:{...o,isSubscribed:async()=>!1},concurrency:`concurrent`,dedupeTtlMs:zo,logger:`error`});if(!n)return s;let c=async(a,o,s,c)=>{let l=_s(r,t,n,a,o,s,c);l&&ps(e,t,l,ms(e,r,t,i,l,hs(o,s.author,s)))};return s.onNewMention((e,t)=>c(`mention`,e,t)),s.onNewMessage(/[\s\S]*/,(e,t)=>c(`message`,e,t)),s.onReaction(async e=>{if(!e.added)return;let t=r.reactionId?.(e);if(!t)return;let n=new Wt({id:e.messageId,threadId:e.threadId,text:e.message?.text??``,formatted:e.message?.formatted??{type:`root`,children:[]},raw:e.raw,author:e.user,metadata:e.message?.metadata??{dateSent:new Date,edited:!1},attachments:[]});await c(`reaction`,e.thread,n,`reaction\n${t}\n${e.user.userId}\n${e.rawEmoji}`)}),s.onSlashCommand(`/setup`,async a=>{let o=cs(r,`command`);if(!o)return;let s=e=>a.channel.postEphemeral(a.user,e,{fallbackToDM:!1}),c={integration:r.id,type:o,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${a.channel.id}\n${a.triggerId??a.text}`).digest(`base64url`).slice(0,22),actor:{id:a.user.userId,...a.user.userName?{login:a.user.userName}:{}},text:a.text.trim()};ps(e,t,c,ms(e,r,t,i,c,{post:s,whisper:s}))}),s}async function ys(e,t,n,r=`renew`){let i=e.integrations[t.integration];if(!i?.[r])return;let a=[],o=await vs({...e,waitUntil:t=>{a.push(t),e.waitUntil?.(t)}},t,{id:n});for(await o.initialize(),await i[r](o.getAdapter(i.id));a.length;)await Promise.all(a.splice(0))}async function bs(e,t=`renew`){for(let n of Object.values(e.integrations))if(n[t])for(let{key:r,organizationId:i}of await e.installations?.(n.id)??[]){let n=await M(e,i).store.get(`installation`,r),a=n&&await hn(e,n.app);a&&await ys(a.ctx,a.app,r.slice(a.app.id.length+1),t).catch(()=>{})}}const xs=`.coder/agents`;function Ss(e){return e.repo?`${e.repo.owner}/${e.repo.name}`:void 0}async function Cs(e,t,n,r){let i=await e.repos.readFile(t,`.coder/config.json`,n,r);return i===void 0?void 0:JSON.parse(i).agents}async function ws(e,t,n,r,i={}){for(let t of Object.values(e))if(!(!r.repo&&t.id===r.integration||!t.repos||!i[t.id]))return{contents:t,token:i[t.id]};let[a,o]=n.split(`/`);for(let{value:r}of await t.store.list(`app`)){if(r.agentsRepo!==n)continue;let i=e[r.integration];if(!i?.repos)continue;let s=(await t.store.list(`installation`,{prefix:`${r.id}:`})).find(e=>!e.value.deletedAt)?.value;if(s)try{let e=s.token?{...s,token:P(t.config,s.token)}:s;return{contents:i,token:await i.auth.token(e,P(t.config,r.credentials),{...a&&o?{repo:{owner:a,name:o}}:{},tools:i.tools.presets.observe}),app:r,installation:s}}catch{continue}}}function Ts(e,t){let n=t.cwd??E.cwd(),r=t.now??Date.now,i=new Map;async function a(t,n,r){let i=Te(e),a=i&&r[i.id];if(!i?.repos||!a)return;let o=Ss(n);if(n.integration===i.id&&o)return Cs(i,o,a,n.repo?.ref);let s=t.settings?.configRepo;if(s)return Cs(i,s,a)}function o(e,t,n,o){let s=`${e.id}@${Ss(n)??t.settings?.configRepo??``}@${n.repo?.ref??``}`,c=r();for(let[e,t]of i)c-t.at>=6e4&&i.delete(e);let l=i.get(s);return l||(l={at:c,usage:a(t,n,o)},i.set(s,l)),l.usage}async function s(n,i,a,s){let c=await L(t.store,n.agent);c.record&&await br(t.store,r(),n.agent,c)&&(c=await L(t.store,n.agent));let{record:l,version:u}=c;if(!l)return;if(!u)throw Error(`No version ${l.currentVersion} for agent "${l.id}".`);let d=await o(n,i,a,s),f=d&&typeof d==`object`?d[n.agent]:void 0;if(f===!1)throw Error(`Agent "${n.agent}" is disabled in ${Ss(a)??i.settings?.configRepo??n.agentsRepo}.`);return vr(l,u,f&&typeof f==`object`?f:void 0,e)}return async(i,a,o,c)=>{let l=(await he(n,e)).find(e=>e.id===i.agent&&!e.builtin);if(l)return l;let u=await s(i,a,o,c);if(u)return u;if(i.agentsRepo){let n=await ws(e,t,i.agentsRepo,o,c);if(n){await Ds(t.store,n.contents,i.agentsRepo,Ss(o)===i.agentsRepo?o.repo?.ref??`HEAD`:`HEAD`,n.token,r());let e=await s(i,a,o,c);if(e)return e;throw Error(`No agent "${i.agent}" in ${i.agentsRepo}.`)}}if(await br(t.store,r(),i.agent,{})){let e=await s(i,a,o,c);if(e)return e}throw Error(i.agentsRepo?`No agent named "${i.agent}".`:`No built-in agent "${i.agent}".`)}}async function Es(e,t,n,r,i,a=``,o,s=0){let c={},l=o??await e.repos.listDir(t,a?`${n}/${a}`:n,r,i);for(let o of l){let u=a?`${a}/${o}`:o;if(u===`agent.json`||u===`system.md`)continue;let d=await e.repos.readFile(t,`${n}/${u}`,r,i);if(d!==void 0)c[u]=d;else if(s<20){let a=await e.repos.listDir(t,`${n}/${u}`,r,i);a.length&&!Nt(a,l)&&Object.assign(c,await Es(e,t,n,r,i,u,a,s+1))}}return c}async function Ds(e,t,n,r,i,a,o={}){let s=o.path??`.coder/agents`,c=/^[0-9a-f]{40}$/i.test(r)?r:await t.repos.commit(n,r,i)??r,l={repo:n,ref:o.branch??r,commit:c};r=c;let u=o.slugs??await t.repos.listDir(n,s,i,r);be(u);let d=[];for(let o of u){let u=`${s}/${o}`,f=await t.repos.readFile(n,`${u}/agent.json`,i,r);if(f===void 0)continue;let p=JSON.parse(f),[m]=ve({definitions:{[o]:{json:p,builtin:!1}},usage:void 0},{...De,[t.id]:t});m&&d.push(await pr(e,{id:o,name:m.name,description:m.definition.description,source:`repo`,repo:n,path:u,definition:m.definition,systemPrompt:await t.repos.readFile(n,`${u}/system.md`,i,r)??``,files:await Es(t,n,u,i,r),commit:c,origin:l,importedFrom:`repo:${n}@${l.ref}`},a))}return d}async function Os(e,t){let n=e.config.publicUrl;if(!n||!t.length)return;let r=new Map(t.map(e=>[e.agent,e])),i=await e.store.list(`app`),a=(await Promise.all(i.filter(({value:e})=>r.has(e.agent)).map(async({id:t})=>e.store.withAppLock(t,async i=>{let a=await i.get(`app`,t);if(!a||!r.has(a.agent))return;let o=await ur(i,a.agent)??r.get(a.agent),s=e.integrations[a.integration]?.app.update;if(!s||!o.definition.integrations[a.integration])return;let c=`app-sync:${t}`,l=await i.get(`delivery`,c);if(l&&!l.pending&&l.version>=o.version&&Nt(l.definition,o.definition)||l&&l.version>o.version)return;let u={version:o.version,definition:o.definition,pending:!0};await i.put(`delivery`,c,u);try{let t=await s(a,P(e.config,a.credentials),{publicUrl:n,definition:o.definition,fetch:e.fetch??fetch,saveCredentials:async t=>{await i.put(`app`,a.id,{...a,credentials:N(e.config,t)})}});t&&await i.put(`app`,a.id,{...a,credentials:N(e.config,t)}),await i.put(`delivery`,c,{...u,pending:!1})}catch(e){let t=`Could not sync ${a.integration} app ${a.id}. ${e instanceof Error?e.message:String(e)}`;return await i.put(`delivery`,c,{...u,error:t}),t}})))).filter(Boolean);if(a.length)throw Error(a.join(`
7
- `))}function ks(){return{integration:`source`,type:`import`,appId:``,installationId:``,deliveryId:``,actor:{id:`admin`},text:``}}async function As(e,t,n,r=ks(),i){let a=await ws(e.integrations,{config:e.config,store:e.store},t,r);if(!a)return;let o=await Ds(e.store,a.contents,t,n,a.token,(e.now??Date.now)(),i?{branch:i}:{});return await Os(e,o),o}const js=/^[a-z0-9][a-z0-9_-]*$/i;async function Ms(e,t){let n=ke(Ae(),`builtin`).map(({name:e})=>({name:e,scope:`builtin`}));if(!t)return S(n);try{let{integration:r,token:i}=await bo(e,t),a=(r.repos?await r.repos.listDir(t,`.coder/flows`,i):[]).map(e=>e.replace(/\.(ts|mjs|js)$/,``)).filter(e=>js.test(e));return S([...a.map(e=>({name:e,scope:`workspace`})),...n.filter(e=>!a.includes(e.name))])}catch(e){return W(e)}}async function Ns(e,t){if(!t)throw new U(`repo is required`);let{integration:n,token:r}=await bo(e,t);return S(await n.repos?.pullRequests(t,r)??[])}async function Ps(e,t){try{return S(Ws(await So(e,`dashboard`,t)),201)}catch(e){return W(e)}}async function Fs(e,t,n,r){try{return Ms(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Is(e,t,n,r){try{return await Ns(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Ls(e,t,n,r){let i=n.name;try{return Ps(t,{...await yc(e),flow:i})}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Rs(e,t,n,r){try{{let{post:n,...r}=await yc(e);if(!r.repo||!r.pr)throw new U(`repo and pr are required`);return Ps(t,{...r,flow:`review`,args:{post:n===!0}})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function zs(e,t,n){return(e.waitUntil??(e=>void e.catch(()=>{})))(t),Promise.resolve(S({tasks:n},202))}async function Bs(e,t,n,r,i,a){if(`installation`in i){let t=await gn(e,i.installation.installation.id),n=await t?.store.get(`installation`,i.installation.installation.id);return!t||!n||await wl(t.store,`installation`,n.id,{account:i.installation.installation.account,deletedAt:i.installation.op===`delete`?a:void 0}),S({ok:!0})}if(`changes`in i){let r=i.changes;try{n.branch||await wl(e.store,`app`,n.id,{branch:r.branch});let i=await As(e,r.repo,r.ref,{...ks(),integration:t.id,appId:n.id},r.branch);return i?S({imported:i.map(e=>e.agent)}):S({error:`No installed app can read ${r.repo}`},400)}catch(e){return S({error:e instanceof Error?e.message:String(e)},400)}}for(let a of i.events)ps(e,n,a,gs(e,n,a).then(i=>ms(e,t,n,r,a,i)));return S({accepted:i.events.length},202)}async function Vs(e,t,n){let r=t.integrations[n],i=await e.text(),a=r.target(e,i);if(a instanceof Response)return a;if(!a)return new Response(`Not addressed to an app`,{status:400});let o=`${r.id}:${a.app}`,s=t.webhookTarget?await t.webhookTarget(o,a.installation?`${o}:${a.installation}`:void 0):void 0,c=t.webhookTarget?s&&{ctx:{...M(t,s.organizationId),...s.bound?{boundInstallation:s.bound}:{}},app:s.app}:await hn(t,o);if(!c)return new Response(`Unknown app`,{status:404});let{ctx:l,app:u}=c,d=P(l.config,u.credentials),f=r.ownEvents?.(e,i,u,d);if(f&&`invalid`in f)return new Response(`Invalid signature`,{status:401});if(f)return Bs(l,r,u,d,f,(l.now??Date.now)());let p=(await vs(l,u,a.installation?{...a,id:a.installation}:void 0)).webhooks[r.id];return p(new Request(e.url,{method:`POST`,headers:e.headers,body:i}),{deduplicate:!1,waitUntil:e=>{let t=e.catch(e=>console.error(`coder server: webhook work failed for ${u.id}`,e));l.waitUntil&&l.waitUntil(t)}})}const Hs=new Set([`completed`,`failed`,`cancelled`]);function W(e){if(e instanceof U)return S({error:e.message,...e.fix?{fix:e.fix}:{}},e.status);throw e}function Us(e){let{id:t,name:n,source:r,agent:i,flow:a,event:o,prompt:s,cwd:c}=e.task;return{task:{id:t,...n?{name:n}:{},source:r,agent:i,flow:a,...c?{cwd:c}:{},...s?{prompt:s}:{},...o?{event:{integration:o.integration,type:o.type,text:o.text}}:{}},status:e.status,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},attempts:e.attempts,createdAt:e.createdAt,startedAt:e.startedAt,finishedAt:e.finishedAt}}function Ws(e){let{tokenHash:t,handle:n,...r}=e;return{...r,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},turns:Co(e),...e.task.credential?{credential:H(e.task.credential).label}:{}}}async function Gs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??500);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;if(!e)return S({error:`No task "${i}"`},404);let n=J(e,i,!0);return n?S({...n,...l?.answer?{answer:l.answer}:{},logs:qc(e,i,-1,s??500)}):S({error:`No task "${i}"`},404)}let u=l.task.runner===`github-actions`&&l.handle?await Ei(t,l,o,s??500).catch(()=>c):await c;return S({...Ws(l),logs:u})}async function Ks(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,void 0,t):S({error:`No task "${i}"`},404)}if(t.local&&a.handle?.startsWith(`cli:`)){let e=(t.now??Date.now)();await t.queue.cancel(t.organizationId,i,e,{attempts:a.attempts,tokenHash:a.tokenHash,generation:a.generation??0});let n=await t.store.get(`task`,i);if(n&&Z.includes(n.status)){await Vc(t,n,e);let r=await t.store.get(`task`,i);if(r&&Z.includes(r.status))return S({error:`Task is still stopping. Try again.`},409)}}else if([`running`,`waiting`].includes(a.status)&&a.handle)try{let e=await Qn(t,a.task);if(!e)return S({error:`Task runner is unavailable. Try again.`},409);await e.stop(a.handle)}catch{return S({error:`Task is still stopping. Try again.`},409)}return await ml(t,a)?(t.local&&(await t.store.delete(`snapshot`,`local-start:${i}`),await t.store.delete(`snapshot`,`completion:${i}`)),Io(t,!0),S({ok:!0})):S({error:`Task changed while deleting. Try again.`},409)}async function qs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??void 0);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;return!e||!J(e,i,!1)?S({error:`No task "${i}"`},404):S(qc(e,i,o,s))}return S(([`running`,`waiting`].includes(l.status)||l.task.runner===`github-actions`)&&l.handle?await Ei(t,l,o,s).catch(()=>z(t.store,i,o,s)):await c)}async function Js(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`steer`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`steer is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);let o=await hl(t,i,`steer`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Ys(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`ask`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`ask is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);let o=await hl(t,i,`ask`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Xs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`continue`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`continue is available only for default-flow tasks`},409);if(!Hs.has(a.status))return S({error:`Task "${i}" is still active; steer or ask it instead`},409);let o=await e.json().catch(()=>({}));try{return S(Ws(await wo(t,a,String(o.text??``),o.outputSchema)))}catch(e){return W(e)}}async function Zs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`approve`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`approve is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);if(!a.approval)return S({error:`Task "${i}" has no pending approval`},409);let o=await hl(t,i,`approve`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Qs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`cancel`,t):S({error:`No task "${i}"`},404)}let o=await t.queue.cancel(t.organizationId,i,(t.now??Date.now)(),{attempts:a.attempts,tokenHash:a.tokenHash??null,generation:a.generation??0});return o&&a.status!==`queued`&&await yl(t,i),o?S({ok:!0}):S({error:`No running or queued task "${i}"`},404)}async function $s(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`archive`,t):S({error:`No task "${i}"`},404)}let o=(t.now??Date.now)();return await t.queue.patchTask(t.organizationId,i,{archivedAt:o},o),S({ok:!0})}async function ec(e,t){if(!e.agent||!e.event?.integration)return S({error:`agent and event are required`},400);let n=t.integrations[e.event.integration];if(!n)return S({error:`Unknown integration "${e.event.integration}"`},400);let r=e.event.actor?.id;if(t.auth&&r){let e=await t.auth.linkedUser(n.id,r);if(e&&e.id!==t.session?.user.id)return S({error:`The event's actor is linked to another member`},403)}let i=(await t.store.list(`app`)).map(e=>e.value).find(t=>t.agent===e.agent&&t.integration===n.id);if(!i)return S({error:`No ${n.id} app for agent "${e.agent}" on this server.`},404);let a=(await t.store.list(`installation`)).map(e=>e.value).filter(e=>e.app===i.id&&!e.deletedAt),o=a.find(t=>t.id===`${i.id}:${e.event.installationId}`)??a[0];if(!o)return S({error:`The ${n.id} app for "${e.agent}" is not installed anywhere yet`},404);let s=t.now??Date.now,c={...e.event,appId:i.id,installationId:o.id.slice(i.id.length+1),deliveryId:`admin-${s()}-${kt()}`},l=await es(t,n,i,P(t.config,i.credentials),c,s,await gs(t,i,c));return zs(t,l.work??Promise.resolve(),l.taskId?[l.taskId]:[])}const tc=new Set([`queued`,`running`,`waiting`,`completed`,`failed`,`cancelled`]);async function nc(e,t,n,r){let i=await e.json().catch(()=>void 0);if(!i||typeof i!=`object`)return S({error:`A JSON body is required`},400);try{if(mo(t,i),i.event)return ec(i,t);let e=(i.source===`cli`?void 0:await Rc(t,i))??await So(t,i.source===`cli`?`cli`:`dashboard`,i);return S(Ws(e),201)}catch(e){return W(e)}}async function rc(e,t,n,r){n.id;let i=r.searchParams.get(`status`);if(i&&i!==`active`&&!tc.has(i))return S({error:`Unknown status "${i}"`},400);let a=r.searchParams.get(`source`);if(a&&![`dashboard`,`cli`,`schedule`,...Object.keys(t.integrations)].includes(a))return S({error:`Unknown source "${a}"`},400);let o=r.searchParams.get(`agent`),s=r.searchParams.get(`q`)?.trim(),c={...o?{agent:o}:{},...a?{source:a}:{},...s?{q:s}:{},archived:r.searchParams.get(`archived`)===`1`},l=i===`active`?{statuses:Z}:i?{status:i}:{},u=e=>r.searchParams.get(`summary`)===`1`?e.map(Us):e.map(Ws);if(t.local){let e=new Map(Lc(t.local.cwd,c.archived).map(e=>[e.task.id,e]));for(let n of await t.queue.list(t.organizationId))e.set(n.task.id,n.status===`queued`||n.status===`waiting`?n:e.get(n.task.id)??n);let n=[...e.values()].filter(e=>cl(e,{...c,...l})).sort(ul),i=C(r,et(r)?void 0:20);if(!et(r))return S(u(n.slice(0,i)));let a=rt(r),o=n.filter(e=>fl(e,a)),s=ot(o.slice(0,i+1),i,dl);return S({...s,items:u(s.items),...r.searchParams.get(`counts`)===`1`?{counts:{all:n.length,active:n.filter(e=>Z.includes(e.status)).length,waiting:n.filter(e=>e.status===`waiting`).length}}:{}})}if(!et(r)){let e=C(r,20),n=await t.queue.list(t.organizationId,{...c,...l,limit:e,summary:r.searchParams.get(`summary`)===`1`});return S(u(n))}let d=C(r),f=rt(r),p=r.searchParams.get(`counts`)===`1`&&!i&&!f&&t.queue.listWithCounts?await t.queue.listWithCounts(t.organizationId,{...c,limit:d+1,summary:r.searchParams.get(`summary`)===`1`}):void 0,[m,h]=await Promise.all([p?p.items:t.queue.list(t.organizationId,{...c,...l,summary:r.searchParams.get(`summary`)===`1`,...f?{before:f}:{},limit:d+1}),p?p.counts:r.searchParams.get(`counts`)===`1`?t.queue.counts(t.organizationId,{...c,...l}):void 0]),g=ot(m,d,dl);return S({...g,items:u(g.items),...h?{counts:h}:{}})}var G=class extends Error{};const ic=async e=>await e.get(`config`,`workspace`)??{};async function ac(e,t){let{sealed:n,...r}=await ic(e);if(!n)return r;let i=P(t,n);return{...r,mcp:Object.fromEntries(Object.entries(r.mcp??{}).map(([e,t])=>[e,{...t,...i[e]}]))}}function oc(){let e=ne();if(!O.existsSync(e))return{};try{return JSON.parse(O.readFileSync(e,`utf8`))}catch(t){throw new G(`Invalid JSON in ${e}: ${t.message}`)}}function sc(e){return e.mcp?{...e,mcp:Object.fromEntries(Object.entries(e.mcp).map(([e,t])=>[e,_c(t)]))}:e}async function cc(e){if(e.local)return sc(oc());let{sealed:t,...n}=await ic(e.store);return n}async function lc(e,t){return uc(e,e=>fc(e,t))}async function uc(e,t){let n=e.settings??={},r=(n.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e.local?t(e):e.store.withConfigLock(n=>t({...e,store:n})));n.configUpdate=r;try{return await r}finally{n.configUpdate===r&&delete n.configUpdate}}function dc(e){let t=g(e);if(t.length)throw new G(t.join(`; `))}async function fc(e,t){dc(t);let n=e.local?oc():await ac(e.store,e.config),r={},i={},a=Object.fromEntries(Object.entries(t.mcp??{}).map(([e,t])=>{let a=r=>t[r]&&Object.fromEntries(Object.entries(t[r]).map(([t,i])=>[t,i===gc?n.mcp?.[e]?.[r]?.[t]??``:i])),o=a(`env`),s=a(`headers`);return(o||s)&&(i[e]={...o?{env:o}:{},...s?{headers:s}:{}}),r[e]={...t,...i[e]},[e,_c(t)]}));if(e.local)return v({...t,...t.mcp?{mcp:r}:{}}),cc(e);let o={...t,...t.mcp?{mcp:a}:{},...Object.keys(i).length?{sealed:N(e.config,i)}:{}};return await e.store.put(`config`,`workspace`,o),cc(e)}async function pc(e,t){return uc(e,async e=>{let n=structuredClone(e.local?oc():await ac(e.store,e.config));return t(n),fc(e,n)})}function mc(e,t){return uc(e,async e=>fc(e,hc(e.local?oc():await ac(e.store,e.config),t)))}function hc(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t;let n=e&&typeof e==`object`&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[e,r]of Object.entries(t))r===null?delete n[e]:Object.defineProperty(n,e,{value:hc(Object.hasOwn(n,e)?n[e]:void 0,r),writable:!0,enumerable:!0,configurable:!0});return n}const gc=`********`;function _c(e){let t=e=>e&&Object.fromEntries(Object.keys(e).map(e=>[e,gc]));return{...e,...e.env?{env:t(e.env)}:{},...e.headers?{headers:t(e.headers)}:{}}}async function vc(e,t){return e.withConfigLock(async e=>{let n=await ic(e);return!n.sealed||En(t,n.sealed)===xn(t.encryptionKey)?0:(await e.put(`config`,`workspace`,{...n,sealed:N(t,P(t,n.sealed))}),1)})}async function yc(e){let t=await e.json().catch(()=>void 0);if(!t||typeof t!=`object`)throw new G(`A JSON body is required`);return t}async function bc(e,t){try{return S(await pc(e,t))}catch(e){if(e instanceof G)return S({error:e.message},400);throw e}}async function xc(e,t,n,r){try{{let e=await cc(t);return S({config:e,effective:t.local?sc(ae(t.local.cwd)):de(e)})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Sc(e,t,n,r){try{{let n=await e.json().catch(()=>{throw new G(`A JSON body is required`)});return S(await mc(t,n))}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Cc(e,t,n,r){try{return S(await lc(t,await yc(e)))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function wc(e,t){return t.token?{...t,token:P(e.config,t.token)}:t}function Tc(e,t,n,r,i){return t.auth.token(wc(e,n),r,i,async t=>{let r=await e.store.get(`installation`,n.id);if(r){let i=N(e.config,t);await e.store.put(`installation`,n.id,{...r,token:i}),n.token=i}})}async function Ec(e,t,n,r){if(!t.auth.user||!e.auth)return;let i=await e.auth.linkedUser(t.id,n.actor.id);if(!i?.token||!i.organizations?.includes(e.organizationId))return;let a=await t.auth.user.access(P(e.config,i.token),r,{fetch:e.fetch??fetch,now:(e.now??Date.now)()});return a.refreshed&&await e.auth.link(i,t.id,n.actor.id,{token:N(e.config,a.refreshed)}),a.accessToken}function Dc(e,t){return{...e?{repo:{owner:e.owner,name:e.name}}:{},tools:t}}async function Oc(e,t,n,r,i,a,o){return(o===`requester`?await Ec(e,t,r,i).catch(()=>void 0):void 0)??Tc(e,t,n,i,a)}const kc=e=>{let t=e&&/^([^/]+)\/([^/]+)$/.exec(e);return t?{owner:t[1],name:t[2]}:void 0};async function Ac(e,t,n,r){if(n.kind===`oauth`)return P(e.config,n.token);let i=await e.store.get(`installation`,n.id);if(!i||i.deletedAt)return;let a=await e.store.get(`app`,i.app),o=e.integrations[t];if(!a||!o)return;let s=r?r.toolScopes?.[t]?.repo:kc(i.settings?.configRepo);if(s)return o.auth.token(wc(e,i),P(e.config,a.credentials),Dc(s,r?r.tools[t]??[]:o.tools.presets.observe))}async function jc(e,t,n,r,i){let a={[n.integration]:r};return await Promise.all(Object.entries(t.connections??{}).map(async([t,r])=>{if(t!==n.integration)try{let n=await Ac(e,t,r,i);n&&(a[t]=n)}catch{}})),a}async function Mc(e,t){let n=t.event,r=e.integrations[n.integration];if(!r)throw Error(`Unknown integration "${n.integration}"`);let[i,a]=await Promise.all([e.store.get(`app`,n.appId),e.store.get(`installation`,`${n.appId}:${n.installationId}`)]);if(!i)throw Error(`Unknown app "${n.appId}"`);if(!a||a.deletedAt)throw Error(`Installation is gone`);let o=t.flow===`review`&&t.args?.post===!0,s=await Oc(e,r,a,n,P(e.config,i.credentials),Dc(t.toolScopes?.[n.integration]?.repo??n.repo,t.tools[n.integration]??(o?r.tools.presets.comment:[])),xe(t.definition.integrations[n.integration],n.type)?.actAs),c=await jc(e,a,n,s,t),l=Object.fromEntries(Object.entries(c).filter(([e])=>e in t.tools));return l[n.integration]=s,l}async function Nc(e,t){let n=t.task,[r,i,a]=await Promise.all([n.event?Mc(e,t.task):{},e.local?{}:ac(e.store,e.config),Pc(e,n)]);if(n.runner!==`vercel-sandbox`)return{task:n,tokens:r,credential:a,config:i};let o=Object.fromEntries(Object.entries(a.env).map(([e,t])=>[e,e in Rn?`brokered`:t]));return{task:n,tokens:r,credential:{...a,env:o},config:i}}async function Pc(e,t){let n=t.credential?await e.store.get(`credential`,t.credential):(await Ta(e.store,t.usage?.engine??t.definition.engine,t.requester))?.value;if(n)return La(e.config,n);if(!t.runnerId&&!e.local)throw Error(`no-credential`);return{engine:t.usage?.engine??t.definition.engine??`claude`,env:{}}}var Fc=e({LOCAL_LOGINS:()=>tl,engineSignIn:()=>rl,engineSignOut:()=>il,engineStatus:()=>ol,inspectLocalTask:()=>Vc,isLoginEngine:()=>nl,localLog:()=>qc,localTask:()=>J,localTaskAction:()=>Y,localTasks:()=>Lc,localUsage:()=>Jc,machineSignedIn:()=>sl,pushLocalInbox:()=>Kc,recoverLocalTasks:()=>Uc,runLocalTask:()=>Gc,startLocalTask:()=>Rc,startQueuedLocalTask:()=>Bc,stopLocalTasks:()=>Wc,syncLocalUsage:()=>Zc});const Ic=e=>!e.name?.startsWith(Ve),K=e=>e?Date.parse(e):void 0;function q(e,t,n=!1){let i=K(t.createdAt)??0,a=r(T.join(u(e,t.id),`answers.json`)),o=t.status===`running`?fe(u(e,t.id)).find(e=>!e.response):void 0,s=n&&!y.includes(t.status)?le(e,t.id):null,c=n?f(e,t.id).filter(e=>!y.includes(t.status)||(K(e.at)??0)<(K(t.resumedAt)??i)).map(e=>{let n=e.error&&typeof e.error==`object`?e.error.message:void 0;return{prompt:e.prompt??t.prompt??``,result:{ok:e.status===0,output:e.finalMessage??n??``},...n?{error:n}:{},finishedAt:K(e.at)}}):[];n&&(y.includes(t.status)||!c.length||(c.at(-1)?.finishedAt??0)<(K(t.resumedAt)??i))&&c.push({prompt:t.currentPrompt??t.prompt??``,...s?{result:{ok:s.status===0,output:s.finalMessage??s.error?.message??``}}:{},...t.error?{error:t.error}:{},...y.includes(t.status)?{}:{finishedAt:K(t.completedAt)}});let l=t.flowRunId?Fe(t.flowRunId)?.name:void 0;return{task:{id:t.id,source:t.source??`cli`,agent:t.agentId??`coder`,flow:l??`default`,...t.name?{name:t.name}:l?{name:l===`review`?`Review`:l}:{},runner:`local`,...t.cwd?{cwd:t.cwd}:{},...t.permissions?{permissions:t.permissions}:{},...t.prompt?{prompt:t.currentPrompt??t.prompt}:{},definition:{integrations:{}},...t.engine?{usage:{engine:t.engine,...t.model?{model:t.model}:{}}}:{},tools:{}},status:o?`waiting`:t.status,attempts:1,...o?{approval:o}:{},...a?{answer:a}:{},...s?{result:{ok:s.status===0,exitCode:null,output:s.finalMessage??s.error?.message??``},...s.tokens?{tokens:s.tokens}:{}}:{},...t.error?{error:t.error}:{},...t.fallbacks?.length?{fallbacks:t.fallbacks}:{},...t.archivedAt?{archivedAt:K(t.archivedAt)}:{},createdAt:i,startedAt:i,...t.completedAt?{finishedAt:K(t.completedAt)}:{},updatedAt:K(t.updatedAt)??i,local:!0,...n?{turns:c}:{}}}function Lc(e,t){return(t?s(e,{migrate:!1}):d(e)).filter(Ic).map(n=>{let r=q(e,n);return t?{...r,archivedAt:r.archivedAt??r.updatedAt}:r})}async function Rc(e,t,n){if(!e.local||t.repo||(t.flow??`default`)!=="default"||t.runner&&t.runner!==`local`)return;let r=mo(e,t)??e.local.cwd;await uo(e.store,r,e.integrations);let{version:i}=await L(e.store,t.agent??`coder`),a=await Xn(e,{requester:e.session?.user.id,runner:t.runner,agent:i?.definition.runner}).catch(e=>{throw new U(e.message)});if(!(a.runner!==`local`||a.runnerId)){if(yo(t),!n)return zc(e,{id:l(),source:`dashboard`,agent:t.agent??`coder`,flow:`default`,runner:`local`,cwd:r,prompt:t.prompt,definition:{integrations:{}},tools:{}},{input:t,cwd:r});try{let e=t.agent&&t.agent!==`coder`?await ze(r,t.agent,t.mcp?.join(`,`)):void 0,i=[],a=await se({taskId:n,prompt:t.prompt??``,outputSchema:t.outputSchema,cwd:r,engine:t.engine??e?.engine,model:t.model??(t.engine?void 0:e?.model),effort:t.effort??(t.engine?void 0:e?.effort),permissions:t.permissions??e?.permissions,system:e?.system,mcp:e?e.mcp:t.mcp?.length?oe(t.mcp.join(`,`),ae(r).mcp):void 0,...e?{agentId:t.agent}:{},source:`dashboard`,onFallback:e=>i.push(e)},{waitForStartup:!1});return q(r,i.length?ue(r,a.taskId,{fallbacks:i}):a.task)}catch(e){throw e instanceof pe?new U(e.message,409):e}}}async function zc(e,t,n){let r=(e.now??Date.now)();await e.store.put(`snapshot`,`local-start:${t.id}`,n),await e.queue.enqueue(e.organizationId,t,r,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!0,!0);let i=await e.store.get(`task`,t.id);return i?.status===`queued`?i:J(n.cwd,t.id)??i}async function Bc(e,t){if(!e.local||t.task.runner!==`local`||t.task.runnerId||t.task.event?.repo)return!1;let n=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!n)return!1;try{let r=t.task.id,i=t.task.flow==="default"?x(n.cwd,t.task.id):void 0;if(i&&!n.resume)r=i.id;else if(n.resume){let e=x(n.cwd,t.task.id);if(!e)throw Error(`Local task is missing`);await Pe(n.cwd,e,t.task.prompt??``,{outputSchema:t.task.context?.outputSchema})}else n.input?await Rc(e,{...n.input,prompt:t.task.prompt,outputSchema:t.task.context?.outputSchema??n.input.outputSchema},t.task.id):r=(await Gc(e,t.task,t.task.id,!0)).task.id;await e.store.put(`snapshot`,`local-start:${t.task.id}`,{...n,startedId:r});let a={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(!await e.queue.patchTask(e.organizationId,t.task.id,{handle:`cli:${r}`},(e.now??Date.now)(),a)){let e=x(n.cwd,r);return e&&await Me(n.cwd,e),!0}if(t.task.flow==="default"){let i={task:t.task,cwd:n.cwd,fence:a};await e.store.put(`snapshot`,`completion:${r}`,i),Hc(e,r,i);let o=yl(e,t.task.id);e.waitUntil&&e.waitUntil(o)}}catch(n){await e.queue.finish(e.organizationId,t.task.id,{status:`failed`,error:n instanceof Error?n.message:String(n)},(e.now??Date.now)(),{attempts:t.attempts,tokenHash:t.tokenHash})}return!0}async function Vc(e,t,n){if(t.status!==`running`&&t.status!==`waiting`)return!1;let r=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!r)return!1;let i={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(t.task.flow!=="default"){let r=Fe(t.task.id);if(r?.status===`running`&&(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs)){let n=e.store.localFlows?.get(t.task.id);n?(await n.stop(),await n.work.catch(()=>{})):r.pid!==process.pid&&await Le(t.task.id),r=Fe(t.task.id)}return!r||r.status===`running`?!1:e.queue.finish(e.organizationId,t.task.id,{status:t.cancelRequestedAt===void 0?r.status===`completed`?`completed`:`failed`:`cancelled`,error:r.error},n,i)}let a=J(r.cwd,r.startedId??t.task.id);if(!a)return!1;if([`queued`,`running`,`waiting`].includes(a.status))if(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs){let e=x(r.cwd,r.startedId??t.task.id);e&&await Me(r.cwd,e),a=J(r.cwd,t.task.id)}else return!1;let o=a.status;return o!==`completed`&&o!==`failed`&&o!==`cancelled`?!1:e.queue.finish(e.organizationId,t.task.id,{status:o,result:a.result,error:a.error},n,i)}function Hc(e,t,n){let r=e.store.completionWatches??=new Map;if(r.has(t))return;let i={stopped:!1,work:Promise.resolve()};r.set(t,i),i.work=(async()=>{let r=`completion:${t}:${n.fence?.generation??0}`,a=await e.store.get(`delivery`,r);if(a&&!a.owner)return;if(a?.pid)try{process.kill(a.pid,0);return}catch(e){if(e.code!==`ESRCH`)return}let o=kt(),s={owner:o,pid:process.pid,pending:!0,posted:a?.posted??!1};if(a?.owner){if(!await e.store.updateDelivery(r,a.owner,s))return}else if(!await e.store.create(`delivery`,r,s))return;try{for(let a=0;a<5;a++)try{let a=null;for(;;){if(i.stopped)return;if(n.fence){let t=await e.store.get(`task`,n.task.id);if(!t||(t.generation??0)!==n.fence.generation||t.attempts!==n.fence.attempts||t.tokenHash!==n.fence.tokenHash||t.status===`queued`)return}let r=x(n.cwd,t);if(!r)return;let o=p(n.cwd,r);if(!y.includes(o.status)){let e=T.join(u(n.cwd,t),`result.json`),r=Math.max(K(o.completedAt)??0,K(o.resumedAt)??K(o.createdAt)??0);if(O.existsSync(e)&&O.statSync(e).mtimeMs>=r&&(a=le(n.cwd,t)),a)break;if(o.error||o.status===`cancelled`){a={status:1,threadId:o.threadId??null,error:{message:o.error??`Task cancelled`}};break}}await new Promise(e=>setTimeout(e,100))}let c=await e.store.get(`task`,n.task.id);if(n.fence&&c&&(c.generation??0)===n.fence.generation&&c.attempts===n.fence.attempts&&c.tokenHash===n.fence.tokenHash&&await Vc(e,c,(e.now??Date.now)())&&Io(e,!0),!await e.store.updateDelivery(r,o,s))return;if(!s.posted&&n.task.source===n.task.event?.integration){let t=await e.store.get(`app`,n.task.event.appId);if(!t)throw Error(`Local completion has no app`);let{eventReplies:i}=await Promise.resolve().then(()=>is),c=await i(e,t,n.task.event);if(!await e.store.updateDelivery(r,o,s)||(await c.post((a.finalMessage??a.error?.message??``).trim()),s={...s,posted:!0},!await e.store.updateDelivery(r,o,s)))return}let l=T.join(u(n.cwd,t),`agent-note`),d=O.existsSync(l)?O.readFileSync(l,`utf8`).trim():(n.task.context?.note??``).trim();if(!await e.store.updateDelivery(r,o,s))return;d!==(n.task.context?.note??``).trim()&&(d?await e.store.put(`note`,fn(n.task),d):await e.store.delete(`note`,fn(n.task))),await e.store.updateDelivery(r,o,{posted:s.posted,at:Date.now()})&&(await e.store.get(`snapshot`,`completion:${t}`))?.fence?.generation===n.fence?.generation&&await e.store.delete(`snapshot`,`completion:${t}`);return}catch(e){if(a===4)throw e;console.error(`coder server: local completion ${t} attempt ${a+1} failed, retrying`,e);let n=Date.now()+5e3*2**a;for(;!i.stopped&&Date.now()<n;)await new Promise(e=>setTimeout(e,Math.min(100,n-Date.now())))}}finally{await e.store.updateDelivery(r,o,{...s,pid:void 0})}})().catch(e=>{console.error(`coder server: local completion ${t} failed`,e)}).finally(()=>{r.delete(t)})}async function Uc(e){if(e.local)for(let{id:t,value:n}of await e.store.list(`snapshot`,{prefix:`completion:`}))x(n.cwd,t.slice(11))&&Hc(e,t.slice(11),n)}async function Wc(e){await Promise.all([...e.store.localFlows?.values()??[]].map(async e=>{await e.stop(),await e.work.catch(()=>{})}));let t=e.store.completionWatches;if(t){for(let e of t.values())e.stopped=!0;await Promise.all([...t.values()].map(e=>e.work))}}async function Gc(e,t,n,r=!1){if(t.event?.repo){let r=(e.now??Date.now)(),i=n??t.id;return await e.store.get(`task`,i)||await e.queue.enqueue(e.organizationId,{...t,id:i},r,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!1,!0),await e.store.get(`task`,i)}if(!r){let r=mo(e,t)??e.local.cwd;return zc(e,{...t,id:n??l(),cwd:r},{cwd:r})}let i=t.event?await Mc(e,t):{},a=t.event&&i[t.event.integration],o=mo(e,t)??e.local.cwd,s=await e.store.get(`task`,n??t.id),c={task:t,cwd:o,...s?{fence:{generation:s.generation??0,attempts:s.attempts,tokenHash:s.tokenHash,statuses:[`running`,`waiting`]}}:{}},f=t.flow!=="default"&&n?Fe(n):void 0;if(f){let r=d(o).find(e=>e.flowRunId===n),i=(e.now??Date.now)();return r?q(o,r):{task:t,status:f.status===`running`?`running`:f.status===`completed`?`completed`:`failed`,attempts:1,createdAt:i,updatedAt:i,local:!0}}if(t.flow==="default"){n??=l();let r=`completion:${n}`,i=await e.store.get(`snapshot`,r);if(i&&Q(i.task)!==Q(t))throw Error(`Local completion belongs to another session`);i||await e.store.create(`snapshot`,r,c);let a=T.join(u(o,n),`agent-note`);O.existsSync(a)||(O.mkdirSync(T.dirname(a),{recursive:!0}),O.writeFileSync(a,t.context?.note??``,{mode:384}))}let p=t.flow==="default"&&n?x(o,n):void 0;if(p)return p.status===`queued`&&!p.pid&&ee(o,p.id),Hc(e,p.id,c),q(o,p);let m,h=new Promise(e=>m=e),g;g=Be({cwd:o,agent:t.agent,flow:t.flow,task:t,taskId:n,toolEnvironment:{tokens:i},post:t.flow!=="default"&&t.source===t.event?.integration,...t.flow==="default"?{noteFile:T.join(u(o,n),`agent-note`)}:{},...a?{postToken:a}:{},source:t.source,onStart:n=>{(e.store.localFlows??=new Map).set(t.id,{stop:async()=>{n.requestStop(),await Re(n.runId,n.runningIds())},work:g}),m(t.id)},onTask:n=>{t.flow==="default"&&Hc(e,n,c),m(n)}}).then(async n=>{t.flow!=="default"&&n.note!==void 0&&(n.note?await e.store.put(`note`,fn(t),n.note):await e.store.delete(`note`,fn(t)))}).finally(async()=>{if(e.store.localFlows?.delete(t.id),t.flow!=="default"){let n=await e.store.get(`task`,t.id);n&&n.attempts===c.fence?.attempts&&n.tokenHash===c.fence?.tokenHash&&(n.generation??0)===c.fence?.generation&&await Vc(e,n,(e.now??Date.now)()),Io(e,!0)}}),g.catch(()=>{});let _=await Promise.race([h,g.then(()=>void 0)]),v=_?x(o,_):void 0,y=(e.now??Date.now)();return v&&q(o,v)||{task:t,status:t.flow!=="default"&&Fe(t.id)?.status===`running`?`running`:`completed`,attempts:1,createdAt:y,updatedAt:y,local:!0}}async function Kc(e,t,n){let r=t.handle.slice(4),i=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!i)throw Error(`Local task launch is missing`);let a={generation:t.generation??0,seq:-1,answers:[]};for(let o of n){let n=await e.store.get(`task`,t.task.id);if(!n||n.attempts!==t.attempts||n.tokenHash!==t.tokenHash||(n.generation??0)!==o.generation||![`running`,`waiting`].includes(n.status))break;let s=x(i.cwd,r);if(!s)throw Error(`Local task is missing`);let c=o.kind===`cancel`?await Me(i.cwd,s):await We(i.cwd,{...s,name:void 0},o);o.kind===`ask`&&a.answers.push({seq:o.seq,value:c}),a.seq=o.seq}return a}function qc(e,t,n=-1,r){let i=``;try{i=O.readFileSync(T.join(u(e,t),`log.jsonl`),`utf8`)}catch{}let a=i.split(`
8
- `).flatMap((e,t)=>{if(!e||t<=n)return[];let r=ct(e);if(!r)return[{seq:t,at:0,level:`out`,line:e}];let i=r.kind===`error`?`err`:[`status`,`info`,`steer`].includes(r.kind??``)?`sys`:`out`;return[{seq:t,at:K(r.at)??0,level:i,line:r.message??``,entry:r}]});return r===void 0?a:a.slice(0,r)}function J(e,t,n=!0){let r=x(e,t);return r&&Ic(r)?q(e,p(e,r),n):void 0}async function Y(e,t,n,a,o){let s=x(t,n);if(!s||!Ic(s))return Response.json({error:`No task "${n}"`},{status:404});let l=p(t,s),d=y.includes(l.status),f=e.method===`POST`?await e.json().catch(()=>({})):{},m=(e,t=409)=>Response.json({error:e},{status:t});if(e.method===`DELETE`&&!a){if(d&&await Me(t,l),je(t,l),o){let e=o.store.completionWatches?.get(n);e&&(e.stopped=!0,await e.work),await o.store.delete(`task`,n),await o.store.delete(`snapshot`,`local-start:${n}`),await o.store.delete(`snapshot`,`completion:${n}`),Io(o,!0)}return Response.json({ok:!0})}if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(a===`cancel`)return d?(await Me(t,l),Response.json({ok:!0})):m(`No running or queued task "${n}"`,404);if(a===`archive`)return i(t,l),o&&await o.queue.patchTask(o.organizationId,n,{archivedAt:(o.now??Date.now)()},(o.now??Date.now)()),Response.json({ok:!0});if(a===`steer`||a===`continue`){let e=String(f.text??``);if(!e.trim())return m(`text is required`,400);if(a===`steer`&&!d)return m(`Task "${n}" is not active`);if(a===`continue`&&d)return m(`Task "${n}" is still active; steer or ask it instead`);let r=a===`continue`?f.outputSchema:void 0;if(r!==void 0&&(!r||typeof r!=`object`||Array.isArray(r)))return m(`outputSchema must be an object`,400);try{if(a===`continue`&&o){let i=o.store.completionWatches?.get(n);i&&await i.work;let a=(o.now??Date.now)(),s=await o.store.get(`task`,n);s&&[`running`,`waiting`].includes(s.status)&&(await Vc(o,s,a),s=await o.store.get(`task`,n));let c={prompt:e,context:{...s?.task.context,...r?{outputSchema:r}:{}}};if(await o.store.put(`snapshot`,`local-start:${n}`,{cwd:t,resume:!0}),s){if(!await o.queue.continueTask(o.organizationId,n,c,a,{attempts:s.attempts,generation:s.generation??0}))return m(`Task is already active`)}else await o.queue.enqueue(o.organizationId,{...q(t,l).task,...c},a,void 0,o.config.maxQueued??1e3);await Fo(o,!1,!0,!0);let u=await o.store.get(`task`,n);return Response.json(u?.status===`queued`?{...u,statusReason:`Waiting for a task slot`}:J(t,n))}let i=await Pe(t,l,e,{...typeof r==`object`&&r?{outputSchema:r}:{}});return Response.json(a===`continue`?J(t,n):i)}catch(e){return m(e.message)}}if(a===`ask`){let e=String(f.question??f.text??``);if(!e.trim())return m(`question is required`,400);let i=await Ne(t,l,e),a=i.finalMessage??i.error?.message??``,o=T.join(u(t,n),`answers.json`);return c(o,[...r(o)??[],a]),Response.json({ok:!0,answer:a})}if(a===`approve`){let e=fe(u(t,n)).filter(e=>!e.response),r=String(f.approvalId??f.id??e[0]?.id??``);return e.some(e=>e.id===r)?(te(u(t,n),r,f.decision===`deny`||f.decision===`decline`?`decline`:`accept`),Response.json({ok:!0})):m(`Task "${n}" has no pending approval`)}return new Response(`Not found`,{status:404})}function Jc(e,t=new Set,n=!0){let r=Yc(t);return[...d(e),...n?s(e,{migrate:!1}):[]].filter(Ic).flatMap(t=>{let n=f(e,t.id);return Xc(t,n,!n.length&&!y.includes(t.status)?le(e,t.id):null,r)})}function Yc(e){let t=new Map;for(let n of e){let e=n.lastIndexOf(`:`),r=n.slice(4,e),i=t.get(r)??[];i.push(Number(n.slice(e+1))),t.set(r,i)}return t}function Xc(e,t,n,r){let i=t.length?t:n?[{...n,at:e.completedAt??e.updatedAt??e.createdAt}]:[],a=r.get(e.id)??[];r.set(e.id,a);let o=K(e.createdAt)??0;return i.flatMap(t=>{let n=K(t.at);if(n===void 0||!Number.isFinite(n))return[];let r=K(e.resumedAt),i=r!==void 0&&r>=o&&r<=n?r:o,s=a.some(e=>e===n||e>o&&e<=n);return o=n,s?[]:(a.push(n),[[`cli:${e.id}:${n}`,{taskId:e.id,agent:e.agentId??`coder`,target:e.source??`cli`,...e.engine?{engine:e.engine}:{},...t.model??e.model?{model:t.model??e.model}:{},credential:`local`,runnerElapsedMs:Math.max(0,n-i),...t.tokens?{tokens:t.tokens}:{},at:n}]])})}function Zc(e){let t=e.local;return t.usageSync??=el(e).finally(()=>t.usageSync=void 0)}async function Qc(e){try{return JSON.parse(await O.promises.readFile(e,`utf8`))}catch{return null}}async function $c(e){return(await Promise.all([`job.json`,`results.jsonl`,`result.json`].map(async t=>{let n=await O.promises.stat(T.join(e,t)).catch(()=>void 0);return n?`${n.mtimeMs}:${n.ctimeMs}:${n.size}`:``}))).join(`|`)}async function el(e){let n=e.local;await n.cacheMaintenance;let r=t(),i=await Qc(r),a=await e.store.list(`usage`,{prefix:`cli:`}),s=new Set(a.map(e=>e.id)),c=0,l=async()=>{++c%4==0&&await new Promise(e=>setImmediate(e))};if(n.archiveScan===void 0)for(let[t,n]of Object.entries(i?.rows??{}))s.has(t)||(await e.store.put(`usage`,t,n),s.add(t)),await l();let u=Yc(s),d=(await O.promises.stat(o(n.cwd)).catch(()=>void 0))?.mtimeMs??0,f={},p=new Set,m=!1;for await(let{id:t,dir:r,archived:a}of ce(n.cwd)){if(await l(),p.has(t))continue;let n=a?await $c(r):void 0;if(a&&i?.counted?.[t]===n){f[t]=n,p.add(t);continue}let o=await Qc(T.join(r,`job.json`));if(o){if(o.agent&&(o.engine=o.agent),p.add(t),Ic(o)){let t=(await O.promises.readFile(T.join(r,`results.jsonl`),`utf8`).catch(()=>``)).split(/\r?\n/).flatMap(e=>{try{return e?[JSON.parse(e)]:[]}catch{return[]}}),n=!t.length&&!y.includes(o.status)?await Qc(T.join(r,`result.json`)):null;for(let[r,i]of Xc(o,t,n,u))await e.store.put(`usage`,r,i),m=!0,await l()}a&&(f[t]=n)}}if(m||i?.archive!==d||JSON.stringify(i?.counted)!==JSON.stringify(f)){let t=await e.store.list(`usage`,{prefix:`cli:`});await O.promises.mkdir(T.dirname(r),{recursive:!0});let n=b(r);try{await O.promises.writeFile(n,`${JSON.stringify({archive:d,counted:f,rows:Object.fromEntries(t.map(e=>[e.id,e.value]))})}\n`),await O.promises.rename(n,r)}finally{await O.promises.rm(n,{force:!0})}}n.archiveScan=d}const tl=`A local server stores no credentials. Tasks use this machine's own claude and codex sign-in.`,X={claude:{file:`claude`,args:[`auth`,`status`,`--json`],command:`claude auth login`,login:[`auth`,`login`],logout:[`auth`,`logout`],ok:e=>JSON.parse(e).loggedIn===!0},codex:{file:`codex`,args:[`login`,`status`],command:`codex login`,login:[`login`],logout:[`logout`],ok:()=>!0}},nl=e=>e in X;function rl(e){let t=X[e];wt(t.file,t.login,{detached:!0,stdio:`ignore`}).on(`error`,()=>{}).unref()}function il(e){let t=X[e];return new Promise(e=>Ct(t.file,t.logout,{timeout:15e3},()=>e()))}function al(e){return new Promise(t=>Ct(e.file,e.args,{timeout:15e3},(n,r)=>{try{t(!n&&e.ok(r))}catch{t(!1)}}))}async function ol(){let[e,t]=await Promise.all([al(X.claude),al(X.codex)]);return{claude:{signedIn:e,command:X.claude.command},codex:{signedIn:t,command:X.codex.command}}}async function sl(e,t){return!!e.local&&(t===`custom`||(await ol())[t]?.signedIn===!0)}const Z=[`queued`,`running`,`waiting`];function cl(e,t){let n=t.status?[t.status]:t.statuses;if(n&&!n.includes(e.status)||t.agent&&e.task.agent!==t.agent||t.source&&e.task.source!==t.source||t.archived!==void 0&&t.archived!==(e.archivedAt!==void 0))return!1;let r=t.q?.trim().toLowerCase();return!r||[e.task.prompt??e.task.event?.text,e.task.agent,e.task.id].some(e=>e?.toLowerCase().includes(r))}const ll=e=>+!Z.includes(e.status),ul=(e,t)=>ll(e)-ll(t)||t.createdAt-e.createdAt||(t.task.id<e.task.id?-1:+(t.task.id>e.task.id)),dl=e=>({active:Z.includes(e.status),createdAt:e.createdAt,id:e.task.id}),fl=(e,t)=>!t||ul(e,{status:t.active?`running`:`completed`,createdAt:t.createdAt,task:{id:t.id}})>0;function Q(e){let t=e.event;return JSON.stringify([t?.appId,t?.installationId,t?.chat?.thread.id,e.agent,e.requester,t?.actor.id])}function pl(e,t){return e.flow==="default"&&!!e.event?.actor.id&&Q(e)===Q(t)}async function ml(e,t){let n=t.task.id,r=t.generation??0,i={generation:r,attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle??null};if(e.queue instanceof _l)return e.queue.deleteTask(e.organizationId,n,i);let[{DrizzleStore:a},{task:o},{and:s,eq:c,isNull:l}]=await Promise.all([import(`./store-BLi19UDE.js`),import(`./schema-CU2iFkp8.js`).then(e=>e.u),import(`drizzle-orm`)]);if(!(e.store instanceof a))throw Error(`Task store does not support fenced deletion`);let[u]=await e.store.db.delete(o).where(s(c(o.organizationId,e.organizationId),c(o.publicId,n),c(o.generation,r),c(o.attempts,i.attempts),i.tokenHash===null?l(o.tokenHash):c(o.tokenHash,i.tokenHash),i.handle===null?l(o.handle):c(o.handle,i.handle))).returning({id:o.id});return!!u}async function hl(e,t,n,r,i){let a=await e.queue.appendInbox(e.organizationId,t,n,r,(e.now??Date.now)(),i);return a&&await yl(e,t),a}const gl=new Set([`completed`,`failed`,`cancelled`]);var _l=class{store;lock=Promise.resolve();constructor(e){this.store=e}serial(e){let t=this.lock.then(e,e);return this.lock=t.catch(()=>{}),t}async read(e){return this.store.get(`task`,e)}async enqueue(e,t,n,r,i){return this.serial(()=>this.insert(t,n,r,i))}async insert(e,t,n,r){let i=n&&await this.store.get(`delivery`,n.key);if(i&&!i.pending)return!1;e=i?.pending?.task??e;let a=await this.read(e.id);if(!a&&r!==void 0&&(await this.store.list(`task`)).filter(e=>e.value.status===`queued`).length>=r)throw Error(`Organization task queue is full`);return n&&!i&&await this.store.put(`delivery`,n.key,{at:t,pending:{task:e}}),a||await this.store.put(`task`,e.id,{task:e,status:`queued`,attempts:0,createdAt:t,updatedAt:t}),n&&await this.store.put(`delivery`,n.key,{at:t},{ttlMs:n.ttlMs}),!0}async nextSeq(e){let t=await this.store.list(`inbox`,{prefix:`${e}:`}),n=(await this.store.list(`delivery`)).flatMap(t=>t.value.pending?.inbox?.id.startsWith(`${e}:`)?[t.value.pending.inbox.entry.seq]:[]);return Math.max((await this.read(e))?.inboxSeq??-1,...t.map(e=>e.value.seq),...n)+1}deliver(e,t,n,r,i,a,o=!0){return this.serial(async()=>{let s=await this.store.get(`delivery`,r.key);if(s&&!s.pending)return{};if(s?.pending?.inbox){let{taskId:e,id:i,entry:a}=s.pending.inbox,o=await this.read(e);if(o&&Z.includes(o.status)&&(o.generation??0)===a.generation&&pl(o.task,t))return await this.store.put(`task`,e,{...o,inboxSeq:Math.max(o.inboxSeq??-1,a.seq)}),await this.store.put(`inbox`,i,a),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0};await this.store.delete(`delivery`,r.key),s=void 0}let c=i&&!s?.pending?.task?(await this.list(e,{statuses:Z,agent:t.agent,source:t.source})).find(e=>pl(e.task,t)):void 0;if(!c)return o&&await this.insert(t,n,r,a)?{taskId:t.id}:{};let l=await this.nextSeq(c.task.id),u={seq:l,generation:c.generation??0,at:n,kind:`steer`,value:{text:t.event.text}},d=`${c.task.id}:${String(l).padStart(8,`0`)}`;return await this.store.put(`delivery`,r.key,{at:n,pending:{inbox:{taskId:c.task.id,id:d,entry:u}}}),await this.store.put(`task`,c.task.id,{...c,inboxSeq:l}),await this.store.put(`inbox`,d,u),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0}})}claim(e,t){return this.serial(async()=>{let n=(await this.store.list(`task`)).map(e=>e.value);if(t!==void 0&&n.filter(e=>[`running`,`waiting`].includes(e.status)).length>=t)return;let r=n.filter(e=>e.status===`queued`).sort((e,t)=>e.createdAt-t.createdAt),i=r[0];if(!i)return;let a=mn(i.task.id,`default`,i.attempts+1),o={...i,tokenHash:a.hash,lastSeenAt:e,status:`running`,attempts:i.attempts+1,startedAt:e,updatedAt:e};return await this.store.put(`task`,o.task.id,o),{organizationId:`default`,status:o,token:a.token,more:r.length>1&&(t===void 0||n.filter(e=>[`running`,`waiting`].includes(e.status)).length+1<t)}})}allowed(e,t){return(t.generation===void 0||(e.generation??0)===t.generation)&&(t.attempts===void 0||e.attempts===t.attempts)&&(t.tokenHash===void 0||(e.tokenHash??null)===t.tokenHash)&&(t.handle===void 0||(e.handle??null)===t.handle)&&(t.lastSeenAt===void 0||(e.lastSeenAt??null)===t.lastSeenAt)&&(t.updatedAt===void 0||e.updatedAt===t.updatedAt)&&(!t.statuses||t.statuses.includes(e.status))}touch(e,t,n,r,i,a=!1){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{tokenHash:n,attempts:r})||!a&&gl.has(e.status)||e.status===`queued`)return;if(gl.has(e.status))return e;let o={...e,lastSeenAt:i,updatedAt:i};return await this.store.put(`task`,t,o),o})}patchTask(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,i))return!1;let{answer:a,...o}=n;return await this.store.put(`task`,t,{...e,...o,...a===void 0?{}:{answer:[...e.answer??[],a]},updatedAt:r}),!0})}deleteTask(e,t,n){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,n)?!1:(await this.store.delete(`task`,t),!0)})}continueTask(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!e||!gl.has(e.status)||!this.allowed(e,i))return!1;let{note:a,...o}=n.context??{},s=await this.store.get(`note`,fn(e.task));return n.context={...o,...s?{note:s}:{}},await this.store.put(`task`,t,{task:{...e.task,...n},status:`queued`,attempts:0,logSeq:e.logSeq,logBytes:e.logBytes,archivedAt:e.archivedAt,generation:(e.generation??0)+1,inboxSeq:e.inboxSeq,createdAt:e.createdAt,updatedAt:r}),!0})}completeTask(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]}))return!1;if(await this.store.put(`usage`,`${t}:${e.generation??0}`,n.usage),n.note){let{key:e,value:t,ttlMs:r}=n.note;t?await this.store.put(`note`,e,t,{ttlMs:r}):await this.store.delete(`note`,e)}for(let n of await this.store.list(`inbox`,{prefix:`${t}:`}))n.value.generation===(e.generation??0)&&await this.store.delete(`inbox`,n.id);return await this.store.put(`task`,t,{...e,...n.outcome,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0})}requeue(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...r,statuses:[`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,status:`queued`,handle:void 0,tokenHash:void 0,lastSeenAt:void 0,updatedAt:n}),!0)})}finish(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...i,statuses:[`queued`,`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,...n,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0)})}cancel(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);if(!e||gl.has(e.status)||!this.allowed(e,r))return!1;let i=e.status===`queued`?void 0:{seq:await this.nextSeq(t),generation:e.generation??0,kind:`cancel`,value:null,at:n};return i&&await this.store.put(`inbox`,`${t}:${String(i.seq).padStart(8,`0`)}`,i),await this.store.put(`task`,t,{...e,...e.status===`queued`?{status:`cancelled`,finishedAt:n}:{},cancelRequestedAt:n,...i?{inboxSeq:i.seq}:{},updatedAt:n}),!0})}async cancelRequested(e,t){return(await this.read(t))?.cancelRequestedAt!==void 0}async list(e,t={}){let{before:n}=t;return(await this.store.list(`task`)).map(e=>e.value).filter(e=>cl(e,t)).filter(e=>fl(e,n)).sort(ul).slice(0,t.limit)}async counts(e,t={}){let n=(await this.store.list(`task`)).map(e=>e.value).filter(e=>cl(e,t));return{all:n.length,active:n.filter(e=>Z.includes(e.status)).length,waiting:n.filter(e=>e.status===`waiting`).length}}async runningCount(){return(await this.store.list(`task`)).filter(e=>[`running`,`waiting`].includes(e.value.status)).length}async running(){return(await this.store.list(`task`)).map(e=>e.value).filter(e=>[`running`,`waiting`].includes(e.status)).map(e=>({organizationId:`default`,status:e}))}appendLogs(e,t,n,r,i,a,o){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,o)||(e.logSeq??0)!==r.seq||(e.logCursor??-1)!==r.cursor?!1:(await this.store.putMany(`tasklog`,n.map(({seq:e,...n})=>({id:`${t}:${String(e).padStart(6,`0`)}`,value:n}))),await this.store.put(`task`,t,{...e,logCursor:i.cursor,logSeq:i.seq,logBytes:i.bytes,updatedAt:a}),!0)})}readInbox(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);return!e||!Z.includes(e.status)||(e.generation??0)!==n?[]:(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(e=>e.generation===n&&e.seq>r).slice(0,100)})}fetchInbox(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!(!e||!this.allowed(e,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})))return(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(t=>t.generation===(e.generation??0)&&t.seq>i).sort((e,t)=>e.seq-t.seq)})}ackInbox(e,t,n,r){return this.serial(async()=>{if(r.generation!==void 0&&r.generation!==n.generation)return!1;let e=await this.read(t);if(!e||!this.allowed(e,{...r,generation:n.generation,statuses:void 0})||n.seq>(e.inboxSeq??-1))return!1;let i=e.inboxAck?.generation===n.generation?e.inboxAck.seq:-1;if(gl.has(e.status))return n.seq<=i;if(![`running`,`waiting`].includes(e.status))return!1;let a=(await this.store.list(`inbox`,{prefix:`${t}:`})).filter(e=>e.value.generation===n.generation&&e.value.seq<=n.seq),o=(n.answers??[]).filter(e=>e.seq>i&&a.some(t=>t.value.kind===`ask`&&t.value.seq===e.seq)).map(e=>e.value),s=a.some(e=>e.value.kind===`cancel`),c=e.approval?.id,l=c&&a.some(e=>e.value.kind===`approve`&&e.value.value?.approvalId===c);await this.store.put(`task`,t,{...e,inboxAck:{generation:n.generation,seq:Math.max(i,n.seq)},...o.length?{answer:[...e.answer??[],...o]}:{},...l?{status:`running`,approval:void 0}:{},...s?{status:`cancelled`,finishedAt:Date.now()}:{}});for(let e of a)await this.store.delete(`inbox`,e.id);return!0})}async pendingInbox(){let e=await this.store.list(`inbox`);return(await this.running()).filter(({status:t})=>e.some(e=>e.id.startsWith(`${t.task.id}:`)&&e.value.generation===(t.generation??0)))}appendInbox(e,t,n,r,i,a){return this.serial(async()=>{let e=await this.read(t);if(!e||!Z.includes(e.status)||(e.generation??0)!==a)return;let o=await this.nextSeq(t),s={seq:o,generation:a,at:i,kind:n,value:r};return await this.store.put(`inbox`,`${t}:${String(o).padStart(8,`0`)}`,s),await this.store.put(`task`,t,{...e,inboxSeq:o}),s})}};const vl=3e4;function yl(e,t){let n=e.queue.inboxDelivery??=new Map,r=JSON.stringify([e.organizationId,t]),i=n.get(r);if(i||n.set(r,i={}),i.work)return i.again=!0,i.work;let a=i,o=async()=>{let n,r=kt(),i=0,o=0,s,c=async()=>{for(;;){a.again=!1;let s=await e.store.get(`task`,t);if(!s?.handle||![`running`,`waiting`].includes(s.status))return;let c=await Qn(e,s.task),l=!!(e.local&&s.handle.startsWith(`cli:`));if(!l&&!c?.push)return;o=s.generation??0;let u={generation:o,attempts:s.attempts,tokenHash:s.tokenHash??null,handle:s.handle},d=`inbox:${JSON.stringify([t,u])}`;if(n!==d){n&&await e.store.updateDeliveryLease(n,r),n=void 0;let t=await e.store.claimDeliveryLease(d,r,vl);if(t===void 0)return;n=d,i=t}else if(!await e.store.updateDeliveryLease(n,r,{owner:r,failures:i},{ttlMs:vl}))return;let f=(await e.queue.readInbox(e.organizationId,t,s.generation??0,-1)).slice(0,100);if(!f.length){if(a.again)continue;return}let p=l?await Kc(e,s,f):await c.push(s.handle,f);if(p.generation!==(s.generation??0)||!f.some(e=>e.seq===p.seq))throw Error(`Invalid inbox acknowledgement`);if(!await e.queue.ackInbox(e.organizationId,t,p,u)||(i=0,f.length<100&&!a.again))return}};try{await c()}catch{if(n){let t=Math.min(3e4,1e3*2**Math.min(i,5)),a={owner:r,failures:i+1,next:(e.now??Date.now)()+t};await e.store.updateDeliveryLease(n,r,a,{ttlMs:t}),n=void 0}}finally{n&&(await e.store.updateDeliveryLease(n,r),s=o)}return s};return a.work=(async()=>{for(;;){let n=await o();if(n===void 0||!(await e.queue.readInbox(e.organizationId,t,n,-1)).length&&!a.again)break}n.delete(r)})().finally(()=>{n.get(r)===a&&n.delete(r)}),a.work}async function bl(e){let t=await e.queue.pendingInbox();await Promise.allSettled(t.map(({organizationId:t,status:n})=>yl(M(e,t),n.task.id)))}function xl(e){let t=bl(e).catch(()=>{});e.waitUntil&&e.waitUntil(t)}const $=`default`;async function Sl(e){if(!e.databaseUrl)throw Error(`DATABASE_URL is required for the Postgres store`);let{connect:t}=await import(`./client-D9IoAuDD.js`).then(e=>e.n);return t(e.databaseUrl,e.databasePool)}async function Cl(e,t={}){if(e.store!==`postgres`){let e=t.local?new co:new no;return{store:()=>e,queue:new _l(e),chatState:new ut(t.local?T.join(h(``),`chat.json`):void 0),defaultOrganizationId:$,webhookTarget:async(t,n)=>{let r=await e.get(`app`,t),i=n?await e.get(`installation`,n):void 0;return r&&{organizationId:$,app:r,...i&&i.app===t&&!i.deletedAt?{bound:{organizationId:$,installation:i}}:{}}},appRecord:async t=>{let n=await e.get(`app`,t);return n&&{organizationId:$,app:n}},installationOrganization:async t=>await e.get(`installation`,t)?$:void 0,installations:async t=>(await e.list(`installation`,{prefix:`${t}:`})).filter(e=>!e.value.deletedAt).map(e=>({key:e.id,organizationId:$})),taskOrganization:async(t,n)=>(await e.get(`task`,t))?.tokenHash===n?$:void 0,sweep:async()=>{},close:async()=>{}}}let n=await Sl(e),[{DrizzleStore:r},{DrizzleQueue:i},{UNSCOPED_ORGANIZATION:a},{PgChatState:o}]=await Promise.all([import(`./store-BLi19UDE.js`),import(`./queue-C9fSdE_X.js`),import(`./shared-BLkGRKty.js`).then(e=>e.g),import(`./chat-B_yhNTo0.js`)]);return{store:t=>new r(n.db,t,Date.now,e),queue:new i(n.db),chatState:new o(n.db),defaultOrganizationId:a,webhookTarget:(e,t)=>r.webhookTarget(n.db,e,t),appRecord:e=>r.appRecord(n.db,e),installationOrganization:e=>r.installationOrganization(n.db,e),installations:e=>r.installations(n.db,e),taskOrganization:(e,t)=>r.taskOrganization(n.db,e,t),connection:n,sweep:e=>new r(n.db,a).sweep(e),close:()=>n.close()}}async function wl(e,t,n,r){if(e.updateMetadata)return e.updateMetadata(t,n,r);let i=await e.get(t,n);return i?(await e.put(t,n,{...i,...r}),!0):!1}async function Tl(e,t){let n=[...new Set(t)];return e.getApps?e.getApps(n):(await Promise.all(n.map(async t=>({id:t,value:await e.get(`app`,t)})))).filter(e=>!!e.value)}export{uo as $,xi as $t,Qs as A,Gn as An,da as At,Is as B,mn as Bn,ya as Bt,cc as C,mr as Cn,ua as Ct,Zs as D,sr as Dn,sa as Dt,nc as E,tr as En,Gi as Et,Ks as F,wn as Fn,Ki as Ft,Ts as G,ln as Gn,Ni as Gt,Ls as H,cn as Hn,ji as Ht,Js as I,N as In,Vi as It,Fo as J,$t as Jn,z as Jt,Os as K,tn as Kn,Mi as Kt,qs as L,xn as Ln,ga as Lt,rc as M,Qn as Mn,pa as Mt,Gs as N,Ln as Nn,ha as Nt,$s as O,nr as On,ca as Ot,Ws as P,P as Pn,Li as Pt,po as Q,Xt as Qn,mi as Qt,Vs as R,En as Rn,Wi as Rt,Cc as S,xr as Sn,ma as St,Hs as T,cr as Tn,ia as Tt,xs as U,an as Un,Pi as Ut,Rs as V,rn as Vn,Ai as Vt,Ds as W,sn as Wn,ki as Wt,Eo as X,en as Xn,hi as Xt,Io as Y,Qt as Yn,gi as Yt,Oo as Z,Jt as Zn,vi as Zt,G as _,dr as _n,ba as _t,Z as a,ei as an,xa as at,Sc as b,fr as bn,va as bt,Q as c,Xr as cn,Ja as ct,J as d,kr as dn,Qa as dt,Ci as en,fo as et,Lc as f,Dr as fn,$a as ft,Zc as g,L as gn,oa as gt,Wc as h,Cr as hn,la as ht,wl as i,$r as in,Da as it,Xs as j,Kn as jn,aa as jt,Ys as k,ar as kn,ta as kt,ol as l,ti as ln,H as lt,Uc as m,Tr as mn,fa as mt,Sl as n,Lr as nn,Ia as nt,bl as o,ni as on,Za as ot,Fc as p,wr as pn,zi as pt,is as q,nn as qn,Ei as qt,Tl as r,ri as rn,Ya as rt,xl as s,ai as sn,Xa as st,Cl as t,_i as tn,to as tt,qc as u,Or as un,Ua as ut,yc as v,I as vn,$i as vt,pc as w,vr as wn,Zi as wt,xc as x,br as xn,_a as xt,bc as y,ur as yn,ra as yt,Fs as z,M as zn,Qi as zt};
@@ -1,42 +0,0 @@
1
- import{at as e,lt as t,nt as n,tt as r}from"./store-B3ZHoBJY.js";import{a as i,d as a,g as o,h as s,i as c,l,m as u,n as d,p as f,r as p,t as m}from"./schema-CU2iFkp8.js";import{i as h}from"./client-D9IoAuDD.js";import{C as g,S as _,_ as v,a as y,b as ee,c as b,d as x,f as S,h as C,i as w,l as T,n as E,o as D,p as O,r as k,s as A,u as j,v as M,w as N,x as P,y as te}from"./shared-BLkGRKty.js";import{i as ne,t as re}from"./usage-Cb8Dtv9V.js";import{isDeepStrictEqual as F}from"node:util";import{and as I,asc as L,desc as ie,eq as R,gt as z,gte as B,ilike as V,inArray as H,isNull as U,lt as W,lte as G,or as K,sql as q}from"drizzle-orm";import{alias as J}from"drizzle-orm/pg-core";function ae(e,t,n){return e.db.transaction(async r=>{let[i]=await r.insert(m).values({organizationId:e.organizationId,slug:t.id,name:t.name,description:t.description??null,source:t.source,repo:t.repo??null,path:t.path??null,currentVersion:0,createdAt:A(t.createdAt),updatedAt:A(t.updatedAt)}).onConflictDoUpdate({target:[m.organizationId,m.slug],set:{slug:t.id}}).returning(),a=w(i),[o]=a.currentVersion?await r.select().from(d).where(I(R(d.agentId,i.id),R(d.version,a.currentVersion))):[],s=o&&N(o,t.id),c=!!(s&&F(s.definition,n.definition)&&s.systemPrompt===n.systemPrompt&&F(s.files,n.files)),l=c?s:{...n,version:a.currentVersion+1},u={...t,currentVersion:l.version,createdAt:a.createdAt,...a.settings?{settings:a.settings}:{},updatedAt:a.updatedAt};if(c&&F(u,a))return{record:a,version:l,unchanged:c};u={...u,updatedAt:t.updatedAt};let f=c?q``:q`with published as (
2
- insert into ${d} (agent_id, version, definition, system_prompt, files, commit, imported_from, created_at)
3
- values (${i.id}, ${l.version}, ${JSON.stringify(l.definition)}::jsonb, ${l.systemPrompt},
4
- ${l.files?JSON.stringify(l.files):null}::jsonb, ${l.commit??null}, ${l.importedFrom}, ${A(l.createdAt).toISOString()}::timestamptz)
5
- returning version
6
- )`;return await r.execute(q`${f} update ${m} set
7
- name = ${u.name}, description = ${u.description??null}, source = ${u.source},
8
- repo = ${u.repo??null}, path = ${u.path??null},
9
- current_version = ${c?q`${l.version}`:q`(select version from published)`}, updated_at = ${A(u.updatedAt).toISOString()}::timestamptz
10
- where id = ${i.id}`),{record:u,version:l,unchanged:c}})}function oe(e){let t=m;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(I(e.mine(t.organizationId),n)).orderBy(L(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:w(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,settings:r.settings??null,createdAt:A(r.createdAt),updatedAt:A(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.slug,n)))}}}async function Y(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(d).values({agentId:await k(e,t.slice(0,r)),version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:A(n.createdAt)}).onConflictDoNothing().returning({id:d.id})).length>0}function se(e){let t=d,n=q`${m.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>I(R(m.slug,e),n===void 0?void 0:r?R(t.version,n):z(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:m.slug,key:n}).from(t).innerJoin(m,R(m.id,t.agentId)).where(I(e.mine(m.organizationId),r)).orderBy(L(m.slug),L(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:N(e,t)}))},put:async(t,n)=>{await Y(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=await k(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.agentId,i),R(t.version,Number(n.slice(r+1)))))}}}const X=(e,t)=>b({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,credentials:O(t),createdAt:S(e.createdAt)});function ce(e){let t=y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:a}).from(t).innerJoin(a,R(a.id,t.credentialsSecretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.key,value:X(e,t)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sealed:a}).from(t).innerJoin(a,R(a.id,t.credentialsSecretId)).where(I(e.mine(t.organizationId),R(t.key,n))),o=i?.secretId??await E(e,`app`,r.credentials);i&&O(i.sealed)!==r.credentials&&await C(e,o,r.credentials);let s={integration:r.integration,platformAppId:n.slice(n.indexOf(`:`)+1),agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:o,createdAt:A(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...s}).onConflictDoUpdate({target:[t.organizationId,t.key],set:s})}),delete:n=>e.transaction(`app:${n}`,async e=>{let[r]=await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.key,n))).returning({secretId:t.credentialsSecretId});r&&await e.db.delete(a).where(R(a.id,r.secretId))})}}function Z(e,t,n){return b({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n?O(n):void 0,installer:e.installer,connections:e.connections,settings:e.settings,createdAt:S(e.createdAt),deletedAt:e.deletedAt?S(e.deletedAt):void 0})}function le(e){let t=j;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:y.key,integration:y.integration},sealed:a}).from(t).innerJoin(y,R(y.id,t.appId)).leftJoin(a,R(a.id,t.tokenSecretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,sealed:n})=>({id:e.key,value:Z(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({secretId:t.tokenSecretId,organizationId:t.organizationId,sealed:a}).from(t).leftJoin(a,R(a.id,t.tokenSecretId)).where(R(t.key,n)),o=()=>Error(`Installation "${n}" belongs to another workspace.`);if(i&&i.organizationId!==e.organizationId)throw o();let s=i?.secretId??null;r.token&&(s?(!i?.sealed||O(i.sealed)!==r.token)&&await C(e,s,r.token):s=await E(e,`installation`,r.token));let c={appId:await D(e,r.app),platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,connections:r.connections??null,settings:r.settings??null,createdAt:A(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:A(r.deletedAt)},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw o();!r.token&&i?.secretId&&await e.db.delete(a).where(R(a.id,i.secretId))}),delete:n=>e.transaction(`installation:${n}`,async e=>{let[r]=await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.key,n))).returning({secretId:t.tokenSecretId});r?.secretId&&await e.db.delete(a).where(R(a.id,r.secretId))})}}async function ue(e,t){let n=J(j,`locked`),[r]=await e.db.select({row:n,app:{key:y.key,integration:y.integration},sealed:a}).from(n).innerJoin(y,R(y.id,n.appId)).leftJoin(a,R(a.id,n.tokenSecretId)).where(I(e.mine(n.organizationId),R(n.key,t))).for(`update`,{of:n});return r&&Z(r.row,r.app,r.sealed)}const Q=(e,t)=>b({iv:t.iv,tag:t.tag,ciphertext:t.ciphertext,engine:e.engine,owner:e.owner,account:e.account,isDefault:e.isDefault,createdAt:S(e.createdAt)}),de=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function fe(t,n){let r=i;return(await t.db.select({row:r,sealed:a}).from(r).innerJoin(a,R(a.id,r.secretId)).where(I(t.mine(r.organizationId),n?R(r.owner,n):U(r.owner))).orderBy(L(r.label)).for(`update`)).map(({row:t,sealed:n})=>({id:e(t.owner??void 0,t.label),value:Q(t,n),row:t,sealed:n}))}async function pe(e,n,r,o){let s=i;if(!o){if(!n)return;await e.db.delete(s).where(R(s.id,n.row.id)),await e.db.delete(a).where(R(a.id,n.row.secretId));return}let c=O(o),l={engine:o.engine,isDefault:o.isDefault??!1,account:o.account??null,createdAt:o.createdAt===void 0?n?.row.createdAt??e.at():A(o.createdAt),updatedAt:e.at()};if(n){O(n.sealed)!==c&&await C(e,n.row.secretId,c),await e.db.update(s).set(l).where(R(s.id,n.row.id));return}let{owner:u,label:d}=t(r);await e.db.insert(s).values({organizationId:e.organizationId,owner:u??null,label:d,secretId:await E(e,`engine`,c),...l})}function me(n){let r=i,o=(e,r)=>{let{owner:i}=t(e);return n.transaction(de(n,i),async t=>pe(t,(await fe(t,i)).find(t=>t.id===e),e,r))};return{key:q`coalesce(${r.owner} || '/', '') || ${r.label}`,rows:async(t,i)=>{let o=n.db.select({row:r,sealed:a}).from(r).innerJoin(a,R(a.id,r.secretId)).where(I(n.mine(r.organizationId),t)).orderBy(L(r.owner),L(r.label));return(await(i===void 0?o:o.limit(i))).map(({row:t,sealed:n})=>({id:e(t.owner??void 0,t.label),value:Q(t,n)}))},put:(e,t)=>o(e,t),delete:e=>o(e,null)}}function $(e,t){let n=c,r=te(e.organizationId,t),i=n.key;return{key:i,where:e=>I(e.id===void 0?q`${n.key} like ${`${T(r+(e.prefix??``))}%`}`:R(n.key,r+e.id),e.after===void 0?void 0:z(n.key,r+e.after)),rows:async(t,a)=>{let o=e.db.select({id:i,value:q`${n.value}`}).from(n).where(I(q`${n.key} like ${`${T(r)}%`}`,e.live(n.expiresAt),t)).orderBy(L(n.key));return(await(a===void 0?o:o.limit(a))).map(e=>({id:e.id.slice(r.length),value:e.value}))},put:async(i,a,o)=>{let s=t===`login`?o??e.at():o;await e.db.insert(n).values({key:r+(t===`config`?`workspace`:i),value:a,expiresAt:t===`config`?null:s}).onConflictDoUpdate({target:n.key,set:{value:a,expiresAt:t===`config`?null:t===`login`&&!o?q`${n.expiresAt}`:s}})},delete:async i=>{await e.db.delete(n).where(R(n.key,r+(t===`config`?`workspace`:i)))}}}function he(e){let t=l,n=n=>I(e.mine(t.organizationId),R(t.publicId,n));return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:a}).from(t).innerJoin(a,R(a.id,t.secretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.publicId,value:b({name:e.name,owner:e.owner,kind:e.kind,scope:e.scope,config:e.config,createdBy:e.createdBy,default:e.isDefault,lastSeen:e.lastSeen?S(e.lastSeen):void 0,secret:O(t),createdAt:S(e.createdAt),updatedAt:S(e.updatedAt)})}))},put:(r,i)=>e.transaction(`runner:${e.organizationId}:${r}`,async e=>{let[o]=await e.db.select({id:t.id,secretId:t.secretId,sealed:a}).from(t).innerJoin(a,R(a.id,t.secretId)).where(n(r)),s={owner:i.owner??null,name:i.name,kind:i.kind,scope:i.scope,config:i.config,createdBy:i.createdBy??null,isDefault:i.default,lastSeen:i.lastSeen===void 0?null:A(i.lastSeen),updatedAt:A(i.updatedAt)};if(o){O(o.sealed)!==i.secret&&await C(e,o.secretId,i.secret),await e.db.update(t).set(s).where(R(t.id,o.id));return}await e.db.insert(t).values({organizationId:e.organizationId,publicId:r,secretId:await E(e,`runner`,i.secret),createdAt:A(i.createdAt),...s})}),delete:r=>e.transaction(`runner:${e.organizationId}:${r}`,async e=>{let[i]=await e.db.delete(t).where(n(r)).returning({secretId:t.secretId});i&&await e.db.delete(a).where(R(a.id,i.secretId))})}}function ge(e){let t=f;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(I(e.mine(t.organizationId),n)).orderBy(L(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:ee(e)}))},put:async(n,r)=>{let{task:i}=r,a={source:i.source,status:r.status,agent:i.agent,flow:i.flow,runner:i.runner,permissions:i.permissions??null,appId:i.event?await D(e,i.event.appId):null,installationId:i.event?await x(e,`${i.event.appId}:${i.event.installationId}`):null,event:i.event??null,prompt:i.prompt??null,args:i.args??null,mcp:i.mcp??null,author:i.author??null,definition:i.definition,credential:i.credential??null,requester:i.requester??null,runnerId:i.runnerId??null,usage:i.usage??null,tools:i.tools,toolScopes:i.toolScopes??null,context:i.context??null,files:i.files??null,result:r.result??null,error:r.error??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:A(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,archivedAt:r.archivedAt===void 0?null:A(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:A(r.createdAt),startedAt:r.startedAt===void 0?null:A(r.startedAt),finishedAt:r.finishedAt===void 0?null:A(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:A(r.cancelRequestedAt),updatedAt:A(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...a}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...a,archivedAt:q`coalesce(${t.archivedAt}, ${a.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.publicId,n)))}}}function _e(e){let t=s,n=q`${f.publicId} || ':' || lpad(${t.seq}::text, 6, '0')`;return{key:n,split:(n,r,i)=>I(e.mine(f.organizationId),R(f.publicId,n),r===void 0?void 0:i?R(t.seq,r):z(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(f,R(f.id,t.taskId)).where(I(e.mine(t.organizationId),r)).orderBy(L(f.publicId),L(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{at:S(e.at),level:e.level,line:e.line}}))},put:async(n,r)=>{let i=n.lastIndexOf(`:`),a={at:A(r.at),level:r.level,line:r.line};await e.db.insert(t).values({organizationId:e.organizationId,taskId:await P(e,n.slice(0,i)),seq:Number(n.slice(i+1)),...a}).onConflictDoUpdate({target:[t.taskId,t.seq],set:a})},delete:async n=>{let r=n.lastIndexOf(`:`),i=await P(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.taskId,i),R(t.seq,Number(n.slice(r+1)))))}}}function ve(e){let t=u,n=q`${f.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>I(e.mine(f.organizationId),R(f.publicId,n),r===void 0?void 0:i?R(t.seq,r):z(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(f,R(f.id,t.taskId)).where(I(e.mine(t.organizationId),r)).orderBy(L(f.publicId),L(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:S(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{let i=n.lastIndexOf(`:`);await e.db.insert(t).values({organizationId:e.organizationId,taskId:await P(e,n.slice(0,i)),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:A(r.at)})},delete:async n=>{let r=n.lastIndexOf(`:`),i=await P(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.taskId,i),R(t.seq,Number(n.slice(r+1)))))}}}function ye(e){let t=o;return{key:f.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,taskId:f.publicId,installationId:j.key}).from(t).innerJoin(f,R(f.id,t.taskId)).leftJoin(j,R(j.id,t.installationId)).where(I(e.mine(t.organizationId),n)).orderBy(L(f.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,taskId:t,installationId:n})=>({id:t,value:b({installationId:n,taskId:t,agent:e.agent,target:e.target,engine:e.engine,model:e.model,credential:e.credential,runnerElapsedMs:e.runnerMs,tokens:e.tokens,at:S(e.at)})}))},put:async(n,r)=>{let i=await P(e,n),a={installationId:r.installationId?await x(e,r.installationId):null,agent:r.agent,target:r.target,engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokens:r.tokens??null,at:A(r.at),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,taskId:i,...a}).onConflictDoUpdate({target:t.taskId,set:a})},delete:async n=>{let r=await P(e,n).catch(()=>void 0);r!==void 0&&await e.db.delete(t).where(R(t.taskId,r))}}}var be=class u{db;organizationId;now;encryption;publishAgent=(e,t)=>ae(this,e,t);kinds;constructor(e,t,n=Date.now,r={}){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.kinds={agent:oe(this),agentversion:se(this),app:ce(this),installation:le(this),credential:me(this),task:ge(this),tasklog:_e(this),inbox:ve(this),usage:ye(this),delivery:$(this,`delivery`),note:$(this,`note`),login:$(this,`login`),config:$(this,`config`),runner:he(this),snapshot:$(this,`snapshot`)}}static async webhookTarget(e,t,n){let r=J(a,`installation_secret`),[i]=await h(e,()=>e.select({app:y,credentials:a,installation:j,token:r}).from(y).innerJoin(a,R(a.id,y.credentialsSecretId)).leftJoin(j,I(R(j.appId,y.id),R(j.key,n??``),U(j.deletedAt))).leftJoin(r,R(r.id,j.tokenSecretId)).where(I(R(y.integration,t.slice(0,t.indexOf(`:`))),R(y.platformAppId,t.slice(t.indexOf(`:`)+1)))));return i&&{organizationId:i.app.organizationId,app:X(i.app,i.credentials),...i.installation?{bound:{organizationId:i.installation.organizationId,installation:Z(i.installation,i.app,i.token)}}:{}}}static async appRecord(e,t){let[n]=await h(e,()=>e.select({row:y,sealed:a}).from(y).innerJoin(a,R(a.id,y.credentialsSecretId)).where(I(R(y.integration,t.slice(0,t.indexOf(`:`))),R(y.platformAppId,t.slice(t.indexOf(`:`)+1)))));return n&&{organizationId:n.row.organizationId,app:X(n.row,n.sealed)}}static async installationOrganization(e,t){let[n]=await h(e,()=>e.select({organizationId:j.organizationId}).from(j).where(R(j.key,t)));return n?.organizationId}static async installations(e,t){return h(e,()=>e.select({key:j.key,organizationId:j.organizationId}).from(j).where(I(q`${j.key} like ${`${T(t)}:%`}`,U(j.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await h(e,()=>e.select({organizationId:f.organizationId}).from(f).where(I(R(f.publicId,t),R(f.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await h(this.db,()=>this.db.select({row:y,sealed:a}).from(y).innerJoin(a,R(a.id,y.credentialsSecretId)).where(I(H(y.organizationId,[this.organizationId,``]),H(y.key,e))))).map(e=>({id:e.row.key,value:X(e.row,e.sealed)})):[]}async listCredentials(t){let n=i;return(await h(this.db,()=>this.db.select({row:n,sealed:a}).from(n).innerJoin(a,R(a.id,n.secretId)).where(I(this.mine(n.organizationId),t.owner?K(U(n.owner),R(n.owner,t.owner)):U(n.owner),t.engine?R(n.engine,t.engine):void 0)).orderBy(L(n.owner),L(n.label)))).map(({row:t,sealed:n})=>({id:e(t.owner??void 0,t.label),value:Q(t,n)}))}async updateMetadata(e,t,n){let r=e===`app`?y:e===`installation`?j:l,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`connections`,`settings`,`deletedAt`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?A(t):t])),o=e===`runner`?l.publicId:e===`app`?y.key:j.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?A(n.updatedAt):this.at()}).where(I(this.mine(r.organizationId),R(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){return this.transaction(`app:${e}`,t)}withConfigLock(e){return this.db.transaction(async t=>{let n=M(this.organizationId,`config`,`workspace`);return await t.insert(c).values({key:n,value:{},expiresAt:null}).onConflictDoNothing(),await t.select({key:c.key}).from(c).where(R(c.key,n)).for(`update`),e(new u(t,this.organizationId,this.now,this.encryption))})}transaction(e,t){return this.db.transaction(async n=>(await n.execute(q`select pg_advisory_xact_lock(3, hashtext(${e}))`),t(new u(n,this.organizationId,this.now,this.encryption))))}withCredential(e,n,i){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>r(e,`runner`,n,i));if(e===`installation`)return this.transaction(`installation:${n}`,async e=>{let t=await ue(e,n),r=await i(t,t?[{id:n,value:t}]:[],e);for(let t of r??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!r?.length});let{owner:a}=t(n);return this.transaction(de(this,a),async e=>{let t=await fe(e,a),r=t.map(({id:e,value:t})=>({id:e,value:t})),o=await i(r.find(e=>e.id===n)?.value,r,e);for(let n of o??[])await pe(e,t.find(e=>e.id===n.id),n.id,n.value);return!!o?.length})}at(){return A(this.now())}live(e){return K(U(e),z(e,this.at()))}mine(e){return R(e,this.organizationId)}async get(e,t){let n=this.kinds[e],r=v(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):q`${n.key} = ${t}`,a=(await h(this.db,async()=>await n.rows(i,1)))[0]?.value;return a||e!==`app`||this.organizationId===``?a:new u(this.db,``,this.now,this.encryption).get(e,t)}async patchLogin(e,t,n={}){let[r]=await this.db.update(c).set({value:q`jsonb_strip_nulls(${c.value} || ${JSON.stringify(t)}::jsonb)`}).where(I(R(c.key,M(this.organizationId,`login`,e)),this.live(c.expiresAt),q`(${c.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?H(q`${c.value}->>${e}`,t):q`${c.value}->>${e} = ${t}`))).returning({value:q`${c.value}`});return r?.value}completeLogin(e,t,r,i){return n(this,e,t,r,i)}async taskInputs(t,n,r){let a=q`coalesce(${r??null}, ${m.settings}->>'engine', ${d.definition}->>'engine')`,o=this.db.select({owner:i.owner,label:i.label}).from(i).where(I(this.mine(i.organizationId),n?K(U(i.owner),R(i.owner,n)):U(i.owner),q`(${a} is null or ${i.engine} = ${a})`)).orderBy(q`${i.owner} is not null desc`,ie(i.isDefault),L(i.label)).limit(1).as(`selected_credential`),[s]=await h(this.db,()=>this.db.select({record:m,version:d,credentialLabel:o.label,credentialOwner:o.owner}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).leftJoinLateral(o,q`true`).where(I(this.mine(m.organizationId),R(m.slug,t))));return s?{record:w(s.record),...s.version?{version:N(s.version,s.record.slug)}:{},...s.credentialLabel?{credential:e(s.credentialOwner??void 0,s.credentialLabel)}:{}}:{}}async listAgentsWithVersions(e){return(await h(this.db,()=>this.db.select({record:m,version:d}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).where(I(this.mine(m.organizationId),e===void 0?void 0:R(m.slug,e))).orderBy(L(m.slug)))).map(({record:e,version:t})=>({record:w(e),...t?{version:N(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${T(e.q)}%`:void 0,n=this.db.select({record:m,version:_}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).where(I(this.mine(m.organizationId),e.slug===void 0?void 0:R(m.slug,e.slug),e.after?z(m.slug,e.after):void 0,e.source?R(m.source,e.source):void 0,t?K(V(m.slug,t),V(m.name,t),V(m.description,t),V(m.repo,t)):void 0,e.platform?q`${d.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(L(m.slug));return(await h(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({record:e,version:t})=>({record:w(e),...t?{version:g(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:_}).from(d).innerJoin(m,R(m.id,d.agentId)).where(I(this.mine(m.organizationId),R(m.slug,e),n===void 0?t===void 0?void 0:G(d.version,m.currentVersion):W(d.version,n),t===void 0?void 0:B(d.version,n===void 0?q`${m.currentVersion} + 1 - ${t}`:n-t))).orderBy(L(d.version));return(await h(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:g(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:A(this.now()+r.ttlMs);await this.kinds[e].put(t,n,i)}async putMany(e,t){if(!t.length)return;if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value)));return}let n=t[0].id.lastIndexOf(`:`),r=t[0].id.slice(0,n),i=t.map(e=>{let t=e.id.lastIndexOf(`:`),n=e.value;if(e.id.slice(0,t)!==r)throw Error(`A log batch must belong to one task`);return{organizationId:this.organizationId,taskId:q`(select ${f.id} from ${f} where ${f.organizationId} = ${this.organizationId} and ${f.publicId} = ${r})`,seq:Number(e.id.slice(t+1)),at:A(n.at),level:n.level,line:n.line}});await this.db.insert(s).values(i).onConflictDoUpdate({target:[s.taskId,s.seq],set:{at:q`excluded.at`,level:q`excluded.level`,line:q`excluded.line`}})}async list(e,t={}){let n=this.kinds[e];if(n.where)return h(this.db,async()=>await n.rows(n.where(t),t.limit));let r=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,i=t.after===void 0?void 0:v(t.after);if(n.split&&r&&!r.includes(`:`)&&(t.after===void 0||i?.[0]===r))return h(this.db,async()=>await n.rows(n.split(r,i?.[1]),t.limit));let a=t.prefix?q`${n.key} like ${`${T(t.prefix)}%`}`:void 0,o=t.after?q`${n.key} > ${t.after}`:void 0,s=a&&o?I(a,o):a??o;return h(this.db,async()=>await n.rows(s,t.limit))}async delete(e,t){await this.kinds[e].delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Y(this,t,n);if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:A(this.now()+r.ttlMs);return(await this.db.insert(c).values({key:M(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:c.key,set:{value:n,expiresAt:i},setWhere:G(c.expiresAt,this.at())}).returning({key:c.key})).length>0}async claimDeliveryLease(e,t,n){let r=q`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(c).values({key:M(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:c.key,set:{value:q`${c.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:q`${c.expiresAt} <= clock_timestamp()`}).returning({value:c.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=I(R(c.key,M(this.organizationId,`delivery`,e)),q`${c.value}->>'owner' = ${t} and ${c.expiresAt} > clock_timestamp()`),a=q`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(c).where(i).returning({key:c.key}):await this.db.update(c).set({value:n.next===void 0?n:q`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:c.key})).length>0}async updateDelivery(e,t,n,r={}){let i=I(R(c.key,M(this.organizationId,`delivery`,e)),q`${c.value}->>'owner' = ${t}`,this.live(c.expiresAt));return(n===void 0?await this.db.delete(c).where(i).returning({key:c.key}):await this.db.update(c).set({value:n,expiresAt:r.ttlMs===void 0?null:A(this.now()+r.ttlMs)}).where(i).returning({key:c.key})).length>0}async take(e,t){return e===`delivery`?(await this.db.delete(c).where(I(R(c.key,M(this.organizationId,e,t)),this.live(c.expiresAt))).returning({key:c.key})).length>0:await this.get(e,t)!==void 0&&(await this.delete(e,t),!0)}async usageTotals(e){let t=o,n=e.by===`agent`?q`${t.agent}`:e.by===`engine`?q`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?q`coalesce(${j.key}, 'none')`:q`to_char(${t.at} at time zone ${ne(e.tz)}, 'YYYY-MM-DD')`,r=I(this.mine(t.organizationId),B(t.at,A(e.since)),e.until===void 0?void 0:W(t.at,A(e.until)),e.agent?R(t.agent,e.agent):void 0),i=q`coalesce(
11
- case when jsonb_typeof(${t.tokens} -> 'total') = 'number' then (${t.tokens} ->> 'total')::numeric end,
12
- (select sum((v #>> '{}')::numeric)
13
- from jsonb_path_query(coalesce(${t.tokens}, 'null'::jsonb), 'strict $.**') v
14
- where jsonb_typeof(v) = 'number')
15
- )`,a={tasks:q`count(*)`,runnerMs:q`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:q`coalesce(sum(${i}), 0)`},s=e.top?q`case when ${t.agent} in (
16
- select ${t.agent} from ${t} where ${r} group by ${t.agent}
17
- order by ${a[e.top.by]} desc, ${t.agent} limit ${e.top.count}
18
- ) then ${t.agent} end`:e.parts?.length?q`case when ${H(t.agent,e.parts)} then ${t.agent} end`:q`null::text`,c=e.by===`installation`?q`left join ${j} on ${j.id} = ${t.installationId}`:q``,l=await h(this.db,()=>this.db.execute(q`
19
- select ${n} as key, ${s} as part, ${a.tasks}::int as tasks,
20
- ${a.runnerMs}::float8 as runner_ms,
21
- ${a.tokenCount}::float8 as token_count
22
- from ${t} ${c}
23
- where ${r}
24
- group by 1, 2
25
- `)),u=Array.isArray(l)?l:l.rows,d=new Map;for(let e of u){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=d.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};re(n,t),e.part&&((n.parts??={})[e.part]=t),d.set(e.key,n)}return[...d.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(q`
26
- with expired_state as (
27
- delete from ${c} where expires_at <= clock_timestamp() and key in (
28
- select key from ${c} where expires_at <= clock_timestamp() order by expires_at limit ${e}
29
- )
30
- ), lists as (
31
- select expired.key from ${p} as expired
32
- where expired.key like 'k:%' and expired.expires_at <= ${t}::timestamptz
33
- and not exists (select 1 from ${p} as newer where newer.key = expired.key and newer.seq > expired.seq)
34
- order by expired.expires_at limit ${e}
35
- ), expired_items as (
36
- select key, seq from ${p} where key in (select key from lists) order by seq limit ${e}
37
- ), expired_queue as (
38
- select key, seq from ${p} where key like 'q:%' and expires_at <= ${t}::timestamptz order by expires_at limit ${e}
39
- )
40
- delete from ${p} where (key, seq) in (
41
- select key, seq from expired_items union all select key, seq from expired_queue
42
- )`)}};export{be as DrizzleStore};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{En as t,Et as n,Ht as r,It as i,Lt as a,Mt as o,Qt as s,Rt as c,Ut as l,Wt as u,a as d,c as f,cn as p,g as m,h,i as g,ln as _,m as v,nt as y,o as b,on as x,p as S,r as C,t as w,wt as T,x as E,xt as D,zt as O}from"./dispatch-BKeAch9E.js";import{n as k}from"./remote-miQNTVRa.js";import{a as A,c as j,i as ee,l as M,n as N,r as P,s as F}from"./actions-Mk3FSlpJ.js";import I from"node:path";import L from"node:process";var R=e({tasks:()=>$});function z(e){return{cwd:e.cwd?I.resolve(e.cwd):L.cwd(),...e.server===void 0?{}:{api:k(e)}}}function B(e,t){let n=o(e,t);if(n)return n;throw new D(`invalid-option`,t?`No task found for "${t}".`:`No tasks found for this workspace.`,{hint:t?[`List tasks: coder task list`,`Start one: coder run "<text>"`]:[`Start one: coder run "<text>"`]})}async function V(e,t){if(t)return e.tasks.get(t);let[n]=await e.tasks.list({limit:1});if(!n)throw new D(`server`,`No server tasks found.`);return n}function H(e){throw new D(`invalid-option`,`Missing task id.`,{hint:e})}async function U(e,t={}){if(t.outputSchema!==void 0&&(!t.outputSchema||typeof t.outputSchema!=`object`||Array.isArray(t.outputSchema)))throw new D(`invalid-option`,`outputSchema must be an object.`);let{cwd:n,api:r}=z(t);if(r){let n=t.resume?await r.tasks.continue(t.resume,e,{outputSchema:t.outputSchema}):await r.tasks.create({source:`cli`,prompt:e,...t.cwd?{cwd:t.cwd}:{},...t.outputSchema?{outputSchema:t.outputSchema}:{},...t.repo?{repo:t.repo}:{},...t.agent?{agent:t.agent}:{},...t.engine?{engine:t.engine}:{},...t.model?{model:t.model}:{},...t.effort?{effort:t.effort}:{},...t.permissions?{permissions:t.permissions}:{},...t.runner?{runner:t.runner}:{},...t.mcp?{mcp:t.mcp.split(`,`).map(e=>e.trim())}:{}});return t.wait?r.tasks.wait(n.task.id,{onLog:t.onLog}):n}let i=t.agent?await(await import(`./exec-RZFLclKX.js`).then(e=>e.i)).agentTaskOptions(n,t.agent,t.mcp):void 0,a={...h({prompt:e,outputSchema:t.outputSchema,cwd:n,cwdExplicit:!!t.cwd,engine:t.engine??i?.engine,model:t.model??(t.engine?void 0:i?.model),effort:t.effort??(t.engine?void 0:i?.effort),permissions:t.permissions??i?.permissions,name:t.name,system:t.system??i?.system,resume:t.resume,wait:t.wait,simulateApproval:t.simulateApproval,addDirs:t.addDirs}),...t.agent?{agentId:t.agent}:{},mcp:i?.mcp??(t.mcp?b(t.mcp,y(n).mcp):void 0),...t.onFallback?{onFallback:t.onFallback}:{},...t.onNote?{onNote:t.onNote}:{}},o=await C(a);if(!t.wait){let e=o.taskId;return{taskId:e,status:o.task.status,startupCheck:o.startupCheck,commands:{result:`coder task result ${e} --wait`,steer:`coder task steer ${e} "<follow-up>"`,stop:`coder task stop ${e}`,list:`coder task list`}}}for(;;){let r=o.taskId;t.onWaiting?.(r);let{task:i,result:s}=await v(n,r),c=s?.error?.message??``;if(i.status===`failed`&&g(i.permissions??`auto`,c))throw new D(`read-only-unavailable`,c);if(i.status===`failed`&&d(c)){let r=y(n).chain,s=r[r.indexOf(o.engine)+1];if(!s)throw new D(`chain-exhausted`,c,{payload:w(o.engine,c,i.permissions??`auto`,t.system,e)});t.onFallback?.({engine:o.engine,detail:c,next:s}),o=await C({...a,engine:s,model:void 0,effort:void 0,name:void 0,resume:void 0,simulateApproval:void 0});continue}return{taskId:r,status:i.status,finalMessage:s?.finalMessage,...c?{error:c}:{},tokens:s?.tokens??null,model:s?.model??i.model??null}}}async function W(e,t={}){let{cwd:n,api:a}=z(t);if(a){let n=await V(a,e);return t.wait?a.tasks.wait(n.task.id):n}let o=B(n,e);if(t.wait){p.includes(o.status)&&t.onWaiting?.(o.id);let e=await S(n,o);if(o=e.task,e.reason===`approval`)throw new D(`approval-pending`,`Approval needed for task ${o.id}: ${e.approval.summary}`,{taskId:o.id,approval:e.approval})}let{steps:c,result:u}=f(n,o.id,{tail:t.tail}),d=E(s(n,o.id)).filter(e=>!e.response),m=p.includes(o.status),h=m?i(n,o):o.updatedAt,g=T(h);return{taskId:o.id,status:m&&d.length?`waiting-approval`:o.status,task:o,result:u,steps:c,turns:l(n,o.id),pendingApprovals:d.map(e=>({id:e.id,summary:e.summary,cwd:e.cwd??null})),...m?{idleMs:g,lastActivityAt:h??null,stalled:d.length===0&&g>6e5,lastLog:r(n,o.id,1)[0],liveTokens:r(n,o.id,200).reverse().find(e=>e.kind===`usage`&&String(e.at??``)>=(o.resumedAt??``))?.tokens??null}:{}}}async function G(e={}){let{cwd:t,api:n}=z(e);if(n){let t=await n.tasks.list({status:e.running?`running`:void 0,limit:e.limit===`all`?200:e.limit,archived:e.archived});return e.stopped?t.filter(e=>_.includes(e.status)):t}let{tasks:r,clipped:o}=ee(t,{...e,dir:e.dir??e.cwd}),c=r.map(e=>{let n=p.includes(e.status)?E(s(t,e.id)).filter(e=>!e.response).length:0;return{taskId:e.id,status:n?`waiting-approval`:e.status,pendingApprovals:n,engine:e.engine??null,model:e.model??null,effort:e.effort??null,name:e.name??null,cwd:e.cwd??null,prompt:String(e.prompt??``).replace(/\s+/g,` `).trim().slice(0,80),updatedAt:e.updatedAt,archived:e.archived??!1,flowRunId:e.flowRunId??null,idleMs:p.includes(e.status)?T(i(t,e)):null}}),l=!c.length&&!e.archived?a(t,{migrate:!1}).length:0;return Object.assign(c,{clipped:o,archived:l})}async function*K(e,t){let n=-1;for(;;){let r=await e.tasks.get(t);for(let r of await e.tasks.logs(t,n))n=r.seq,yield r;if(_.includes(r.status))return;await new Promise(e=>setTimeout(e,1e3))}}async function q(e,n={}){let{cwd:r,api:i}=z(n);if(i){let t=await V(i,e);return{task:t,events:K(i,t.task.id),final:()=>i.tasks.get(t.task.id)}}let a=B(r,e);return{task:a,events:M(r,a.id,{tail:n.tail}),async final(){let e=u(r,O(r,a.id)??a),n=t(I.join(s(r,a.id),`result.json`));return{taskId:a.id,status:e.status,result:n,task:e}}}}async function J(e,n,r={}){let{cwd:i,api:a}=z(r);if(a)return a.tasks.steer(e,n);let o=await F(i,B(i,e),n,{model:r.model,effort:r.effort,permissions:r.permissions});if(!r.wait||o.steered===`queued`)return o;let c=O(i,o.taskId),l=c?await x(i,c):null,u=t(I.join(s(i,o.taskId),`result.json`));return{...o,status:l?.status??null,finalMessage:u?.finalMessage??null}}async function Y(e,t,n={}){let{cwd:r,api:i}=z(n);if(i)return i.tasks.ask(e,t);let a=B(r,e);n.onAsking?.(a.id);let o=await N(r,a,t,{model:n.model,effort:n.effort});return{taskId:a.id,answer:o.finalMessage||null,...o.error?{error:o.error.message}:{},ok:o.status===0}}async function X(e,t={}){let{cwd:n,api:r}=z(t);if(r)return(e?[await r.tasks.get(e)]:await r.tasks.list({limit:200})).flatMap(e=>e.approval?[{taskId:e.task.id,...e.approval}]:[]);if(!e)return P(n);let i=B(n,e);return E(s(n,i.id)).map(e=>({taskId:i.id,id:e.id,summary:e.summary,cwd:e.cwd??null,createdAt:e.createdAt,answered:e.response?.decision??null}))}async function Z(e,t,n={}){let{cwd:r,api:i}=z(n),a=n.deny?`decline`:`accept`;if(i){if(!e||!t)throw new D(`invalid-option`,`Server approvals need a task id and approval id.`,{hint:`Usage: coder task approve <task-id> <approval-id> --server <url>`});return i.tasks.approve(e,t,a)}if(e&&!t&&e.startsWith(`apr-`)&&(t=e,e=P(r).find(e=>e.id===t)?.taskId,!e))throw new D(`invalid-option`,`No pending approval "${t}".`,{hint:`List them: coder task approvals`});if(!e||!t)throw new D(`invalid-option`,`Missing approval id.`,{hint:[`List them: coder task approvals`,`Usage: coder task approve [task-id] <approval-id> [--deny]`]});let o=B(r,e);return m(s(r,o.id),t,a),{taskId:o.id,approvalId:t,decision:a}}async function Q(e,t={}){let{cwd:n,api:r}=z(t);if(r)return r.tasks.cancel(e??H([]));let i=B(n,e),{interrupt:a}=await j(n,i);return{taskId:i.id,status:`cancelled`,interrupt:a}}async function te(e,t={}){let{cwd:r,api:i}=z(t);if(i){let n=t.allStopped?(await i.tasks.list({limit:200})).filter(e=>_.includes(e.status)).map(e=>e.task.id):[e??H([])];return await Promise.all(n.map(e=>i.tasks.archive(e))),{archived:n,count:n.length}}if(t.allStopped){let e=c(r).filter(e=>_.includes(e.status));for(let t of e)n(r,t);return{archived:e.map(e=>e.id),count:e.length}}e||H([`Archive one: coder task archive <task-id>`,`Archive all stopped: coder task archive --all-stopped`]);let a=B(r,e);return n(r,a),{taskId:a.id,archived:!0}}async function ne(e,t={}){let{cwd:n,api:r}=z(t);if(r){let n=t.allArchived?(await r.tasks.list({limit:200,archived:!0})).map(e=>e.task.id):[e??H([])];return await Promise.all(n.map(e=>r.tasks.delete(e))),{deleted:n,count:n.length}}if(t.allArchived){let e=a(n).filter(e=>A(n,e)).map(e=>e.id);return{deleted:e,count:e.length}}e||H([`Delete one: coder task delete <task-id>`,`Delete all archived: coder task delete --all-archived`]);let i=B(n,e);if(i.status===`running`)throw new D(`invalid-option`,`Task ${i.id} is still running.`,{hint:`Stop it first: coder task stop ${i.id}`});return A(n,i),{taskId:i.id,deleted:!0}}async function*re(e,t={}){yield*(await q(e,t)).events}const $={run:U,result:W,list:G,watch:q,stream:re,steer:J,ask:Y,approvals:X,approve:Z,stop:Q,archive:te,delete:ne};export{$ as n,R as t};
@@ -1,5 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{B as t,En as n,Ht as r,L as i,On as a,Qt as o,Y as s,g as c,jt as l,kt as u,z as d,zt as f}from"./dispatch-BKeAch9E.js";import{t as p}from"./integrations-BAgdVDhj.js";import{c as m,n as h,s as g}from"./actions-Mk3FSlpJ.js";import{i as _}from"./mcp-BgKb2Cdk.js";import{r as v}from"./exec-RZFLclKX.js";import y from"node:path";import b from"node:process";import{execFile as x}from"node:child_process";import{createHash as S,randomUUID as C}from"node:crypto";import w from"node:os";import T from"node:net";import E from"node:fs/promises";import{promisify as D}from"node:util";import O from"node:http";var k=e({INBOX_COMMAND:()=>Q,INBOX_SOCKET:()=>Y,applyTaskMessage:()=>K,checkout:()=>P,checkoutCache:()=>F,inboxSocket:()=>X,prepareRepo:()=>U,receiveInbox:()=>$,releaseCheckout:()=>L,requestInboxControl:()=>G,runTask:()=>q,sendInbox:()=>Z,startInboxControl:()=>W,taskServer:()=>j,withCheckoutLock:()=>I});const A=D(x);function j(){let e=b.env.CODER_SERVER?.replace(/\/+$/,``),t=b.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function M(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function N(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function P(e,t,n,r){let i=e.event?.repo;if(!i)return t;let a=y.join(t,`repo`);if(!N(i.ref)||!N(i.defaultBranch))throw Error(`Invalid repository ref`);let o=new URL(i.cloneUrl),s=p[e.event.integration]?.repos?.cloneHosts??[];if(o.protocol!==`https:`||!s.includes(o.hostname))throw Error(`Repository clone host does not match the integration`);await E.mkdir(t,{recursive:!0});let c=await E.mkdtemp(y.join(t,`.git-credential-`)),l=y.join(c,`token`),u=y.join(c,`askpass.sh`);n&&(await E.writeFile(l,n,{mode:384}),await E.writeFile(u,`#!/bin/sh
2
- case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
3
- `,{mode:448}));let d=n?{env:{...b.env,GIT_ASKPASS:u,CODER_GIT_TOKEN_FILE:l,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...d,maxBuffer:67108864};if(r)return await I(r,async()=>{if(!await E.stat(y.join(r,`.git`)).catch(()=>void 0)){let t=await E.mkdtemp(`${r}-clone-`);try{await A(`git`,[`clone`,`--depth`,`50`,i.cloneUrl,t],e),await E.rename(t,r)}finally{await E.rm(t,{recursive:!0,force:!0})}}await A(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await A(`git`,[`-C`,r,`remote`,`set-url`,`origin`,i.cloneUrl],e),await A(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,i.defaultBranch],e),await A(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,i.ref],e),await A(`git`,[`-C`,r,`worktree`,`add`,`--detach`,a,`FETCH_HEAD`],e)}),a;await E.stat(y.join(a,`.git`)).then(()=>!0).catch(()=>!1)||await A(`git`,[`clone`,`--depth`,`50`,i.cloneUrl,a],e),await A(`git`,[`-C`,a,`fetch`,`--depth`,`50`,`origin`,i.ref],e),await A(`git`,[`-C`,a,`checkout`,`--detach`,`FETCH_HEAD`],e),await A(`git`,[`-C`,a,`fetch`,`--depth`,`50`,`origin`,i.defaultBranch],e)}finally{await E.rm(c,{recursive:!0,force:!0})}return a}function F(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return u(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function I(e,t){await E.mkdir(y.dirname(e),{recursive:!0});let n=`${e}.lock`,r=await E.mkdtemp(`${n}-`),i=`${b.pid}-${C()}`,a=Date.now()+3e5,o=!1;try{for(await E.mkdir(y.join(r,i));;)try{await E.rename(r,n),o=!0;break}catch(e){if(![`EEXIST`,`ENOTEMPTY`].includes(e.code??``))throw e;for(let e of await E.readdir(n).catch(()=>[])){let t=Number(e.split(`-`)[0]);if(!(!Number.isInteger(t)||t<=0))try{b.kill(t,0)}catch(t){t.code===`ESRCH`&&await E.rmdir(y.join(n,e)).catch(()=>{})}}if(await E.rmdir(n).catch(()=>{}),Date.now()>=a)throw Error(`Repository cache lock timed out`);await new Promise(e=>setTimeout(e,100))}return await t()}finally{o?(await E.rmdir(y.join(n,i)),await E.rmdir(n).catch(()=>{})):await E.rm(r,{recursive:!0,force:!0})}}async function L(e){if(!(await E.stat(y.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await A(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await E.stat(y.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=y.resolve(e,n.trim());await I(y.dirname(r),async()=>{await E.stat(y.join(e,`.git`)).catch(()=>void 0)&&await A(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const R=1048576;async function z(e){let t={maxBuffer:67108864};await A(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],t);let{stdout:n}=await A(`git`,[`-C`,e,`diff`,`HEAD`],t);return Buffer.byteLength(n)>R?`${Buffer.from(n).subarray(0,R).toString()}\n[diff truncated]`:n}async function B(e,t){delete b.env.CODER_SERVER,delete b.env.CODER_TASK_TOKEN,delete b.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete b.env[_(t)];let{CODEX_AUTH_JSON:n,...r}=e.credential.env;if(Object.assign(b.env,r),b.env[s]=JSON.stringify(e.config??{}),!n)return;let i=await E.mkdtemp(y.join(t,`.codex-`));return await E.writeFile(y.join(i,`auth.json`),n,{mode:384}),b.env.CODEX_HOME=i,i}async function V(e,t,n,r){if(!r)return;let i=await E.readFile(y.join(r,`auth.json`),`utf8`).catch(()=>``);i&&i!==n.credential.env.CODEX_AUTH_JSON&&await M(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i})}).catch(()=>{}),await E.rm(r,{recursive:!0,force:!0})}const H=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function U(e,t){let n=j(),r=await M(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await P({...r.task,event:{...i,repo:{...i.repo,ref:i.repo.defaultBranch}}},t,r.tokens[i.integration]);for(let[e,t,n]of H)if(await E.stat(y.join(a,e)).catch(()=>void 0)){await A(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await A(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function W(e,n,r){let i=new Set,a=t(y.join(e,`inbox-control`),{apply(e){let t=e.entry;if(e.task!==n||!Number.isInteger(t?.seq)||t.seq<0||!Number.isInteger(t.generation)||t.generation<0||![`steer`,`ask`,`approve`].includes(t.kind))throw Error(`Invalid engine inbox command`);let a=r(t);return i.add(a),a.finally(()=>i.delete(a)).catch(()=>{}),a}});return{close:async()=>{a(),await Promise.allSettled([...i])}}}function G(e,t,n){let r=d({task:t,generation:n.generation,seq:n.seq});return i(`apply`,{task:t,entry:n},{dir:y.join(e,`inbox-control`),id:r,keepReply:!0,timeoutMs:3e4})}async function K(e,t,n){let r={task:t.name?.slice(6)??t.id,generation:n.generation,seq:n.seq},i=y.join(o(e,t.id),`inbox-control`,`${d(r)}.transcript.jsonl`),a=await E.readFile(i,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of a.split(`
4
- `)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(d(t.command)===d(r)&&Object.hasOwn(t,`result`))return t.result}let s=n.value;if(n.kind===`steer`){let i=String(s?.text??n.value??``);t.threadId?await g(e,t,i,{command:r}):l(e,t.id,i)}else if(n.kind===`ask`){let i=await h(e,t,String(s?.question??n.value??``),{command:r});return i.finalMessage??i.error?.message??``}else n.kind===`approve`&&c(o(e,t.id),String(s?.approvalId??s?.id??``),s?.decision===`deny`||s?.decision===`decline`?`decline`:`accept`);await E.mkdir(y.dirname(i),{recursive:!0}),await E.appendFile(i,JSON.stringify({command:r,result:null})+`
5
- `)}async function q(e,t){let n=j(),r=await M(n.server,n.token,e),i=r.task.event,a=i&&r.tokens[i.integration],o=b.env.CODER_INBOX_MODE===`poll`;delete b.env.CODER_INBOX_MODE;let c=b.env.CODER_CHECKOUT_CACHE;delete b.env.CODER_CHECKOUT_CACHE;let l=await B(r,t),u;try{return u=await P(r.task,t,a,c),await J(e,t,n,r,u,a,o)}finally{try{u&&await L(u)}finally{await V(n,e,r,l),delete b.env[s]}}}async function J(e,t,i,s,c,l,u){let d=s.task.event,p=new AbortController,h,g=!1,_=await $({root:t,generation:s.generation,apply:async t=>{let n=h&&f(c,h);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await m(c,n),g=!0;return}return G(o(c,n.id),e,t)}}),x=_.ack().seq>=0?_.ack():void 0,S,C=()=>{if(S)return S;if(!x)return Promise.resolve();let t=x;return S=M(i.server,i.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:p.signal}).then(()=>{x&&x.seq<=t.seq&&(x=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(x=void 0),e}).finally(()=>{S=void 0}),S},w=async()=>{let t=await M(i.server,i.token,e,`/messages?after=${_.ack().seq}`,{signal:p.signal});try{t.length&&await _.apply(t)}finally{t.length&&_.ack().seq>=0&&(x=_.ack()),await C().catch(()=>{})}},T=setInterval(()=>{C().catch(()=>{})},1e3),D=n(y.join(t,`.runner-task.json`));D?.generation!==s.generation&&await E.writeFile(y.join(t,`.runner-note`),s.task.context?.note??``,{mode:384});let O,k,A=new Map,j=()=>{for(let[e,t]of A){let n=r(c,e,1/0);for(let e of n.slice(t))b.stdout.write(`${JSON.stringify(e)}\n`);A.set(e,n.length)}},N,P;try{let n=await v({cwd:c,...D?.generation===s.generation?{resumeTaskId:D.id}:{},noteFile:y.join(t,`.runner-note`),agent:s.task.agent,flow:s.task.flow,task:s.task,toolEnvironment:{tokens:s.tokens},post:s.task.source===d?.integration,...l?{postToken:l}:{},async onTask(n){h=n,A.has(n)||A.set(n,0),j(),k??=setInterval(j,1e3),a(y.join(t,`.runner-task.json`),{generation:s.generation,id:n}),await C().catch(()=>{}),await w().catch(()=>{}),clearInterval(O),O=setInterval(()=>{M(i.server,i.token,e,`/heartbeat`,{method:`POST`,signal:p.signal}).catch(()=>{})},3e4),clearInterval(N),u&&(N=setInterval(()=>{P||=w().catch(()=>{}).finally(()=>{P=void 0})},4e3))},onApproval(t){return M(i.server,i.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t})})}});for(j();x;)await C().catch(()=>{}),x&&await new Promise(e=>setTimeout(e,1e3));return await M(i.server,i.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:g?`cancelled`:n.ok?`completed`:`failed`,result:n.reply??n.result,tokens:n.tokens,...n.note===void 0?{}:{note:n.note},...c===t?{}:{diff:await z(c).catch(()=>void 0)}})}),n}catch(t){let n=t;throw j(),await M(i.server,i.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:n.message??String(t)})}),t}finally{clearInterval(k),j(),clearInterval(T),clearInterval(O),clearInterval(N),p.abort(),await Promise.allSettled([P,S]),await _.close()}}const Y=`/tmp/coder-inbox.sock`,X=e=>y.join(w.tmpdir(),`coder-${S(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Z(e,t){return new Promise((n,r)=>{let i=O.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Q=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function $(e){let t=y.join(e.root,`.runner-inbox.json`),r=n(t),i=r?.generation===e.generation?r:{generation:e.generation,seq:-1,answers:[]},o=Promise.resolve(),s=n=>{let r=async()=>{if(!Array.isArray(n)||n.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let r of[...n].sort((e,t)=>e.seq-t.seq)){if(r.seq<=i.seq)continue;let n=await e.apply(r),o={generation:e.generation,seq:r.seq,answers:[...i.answers??[],...r.kind===`ask`?[{seq:r.seq,value:n}]:[]]};a(t,o),i=o}return i},s=o.then(r,r);return o=s.then(()=>{},()=>{}),s},c=e.socketPath??b.env.CODER_INBOX_SOCKET??X(e.root);if(await E.lstat(c).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=T.connect(c);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await E.unlink(c)}let l=O.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await s(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await E.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{l.once(`error`,t),l.listen(c,e)}),await E.chmod(c,384),{apply:s,ack:()=>i,close:async()=>{await o,await new Promise(e=>l.close(()=>e()))}}}export{X as a,q as c,k as d,I as f,F as i,Z as l,Y as n,U as o,K as r,L as s,Q as t,j as u};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-DWCR7iqa.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--resume <task-id>`,`continue that task's thread instead of a fresh run`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]'],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{"archive-sweep":async()=>(await import(`./archive-sweep-Cxbh8yAI.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-DrucI22w.js`)).commandWorker,run:async()=>(await import(`./run-Dqe38jX8.js`)).commandTask,list:async()=>(await import(`./list-COAo7eZd.js`)).commandTasks,ls:async()=>(await import(`./list-COAo7eZd.js`)).commandTasks,watch:async()=>(await import(`./watch-BcMQXGYO.js`)).commandWatch,stream:async()=>(await import(`./watch-BcMQXGYO.js`)).commandWatch,result:async()=>(await import(`./result-D8DsvJDu.js`)).commandResult,steer:async()=>(await import(`./steer-P_38hRRD.js`)).commandSteer,ask:async()=>(await import(`./ask-BU2WVxVM.js`)).commandAsk,stop:async()=>(await import(`./stop-BJGDRPsp.js`)).commandStop,archive:async()=>(await import(`./archive-DZ6vpMHb.js`)).commandArchive,delete:async()=>(await import(`./delete-BD6AnCLg.js`)).commandDelete,approvals:async()=>(await import(`./approvals-DbVrsxec.js`)).commandApprovals,approve:async()=>(await import(`./approve-DeAhFL-m.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};