@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.
- package/dist/actions-CmfXOVXQ.js +20 -0
- package/dist/adapter-7SEiVsmp.js +1 -0
- package/dist/adapter-BLEfUqoQ.js +1 -0
- package/dist/adapter-H4GlcKQz.js +1 -0
- package/dist/add-Bffwutko.js +1 -0
- package/dist/add-Bz8uaOcu.js +1 -0
- package/dist/add-DTwoL7vJ.js +1 -0
- package/dist/add-cdKdz3K0.js +6 -0
- package/dist/add-json-BIcbE3Nf.js +1 -0
- package/dist/agent-BcXXkOmD.js +3 -0
- package/dist/agent-DQK_S1PE.js +1 -0
- package/dist/alias-KQ85bphl.js +2 -0
- package/dist/app-DaccLHrx.js +1 -0
- package/dist/approvals-CZt_aPCy.js +2 -0
- package/dist/approve-DxjyXd66.js +2 -0
- package/dist/apps-eueTmHR5.js +1 -0
- package/dist/archive-C3JazQuo.js +3 -0
- package/dist/archive-C9yrU4Wg.js +4 -0
- package/dist/archive-sweep-CHbOP-p6.js +1 -0
- package/dist/args-DEMOfLz2.js +1 -0
- package/dist/ask-DdYrvsTk.js +4 -0
- package/dist/auth-FTKev9__.js +1 -0
- package/dist/auth-q8CROpG-.js +1 -0
- package/dist/chat-bridge-18koyS7c.js +2 -0
- package/dist/chat-cknlIhVh.js +13 -0
- package/dist/cli-msOzZFXW.js +9 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/client-31YzOj-i.js +1 -0
- package/dist/config-BllYHi8S.js +3 -0
- package/dist/create-BYki3g42.js +1 -0
- package/dist/credentials-DLMuf9OT.js +1 -0
- package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/index.js +1238 -0
- package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/lazy-measurements.js +34 -0
- package/dist/dash/standalone/node_modules/@tanstack/virtual-core/dist/esm/utils.js +74 -0
- package/dist/dash/standalone/node_modules/@tanstack/virtual-core/package.json +56 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/config/ts/react.json +10 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/boot-bhemypxz.js +38 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/build-tier-0a96kmx3.js +2456 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/config-0tvz03a6.js +24 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/generate-myw9hef7.js +22 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-0r5eqfc7.js +279 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-0yjv5v47.js +105 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-11xpbfej.js +17 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-141vcwk6.js +109 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-29pq0kax.js +590 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-2vz0wzdn.js +59 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-2wfv4kvx.js +182 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-3e075kny.js +128 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-3ycf5ckv.js +472 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4399bvd2.js +18 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4da76t62.js +297 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-4zzebszd.js +10 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-52k54ykj.js +95 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-5hr4062s.js +70 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-68m3mwbd.js +84 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6b009mt0.js +56 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6kp9r0d9.js +11 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-6q7zvrap.js +134 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-71885zaq.js +284 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-73z4esab.js +38 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-79ngvam8.js +60 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-7wc9n8be.js +25 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-8ct7rqy3.js +198 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-8kcxdfya.js +206 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-9f49w76j.js +213 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-9hz3s0m8.js +851 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-akkrvjn6.js +535 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-b6wtkdp4.js +24 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-b7j671dj.js +207 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-bcws5eh2.js +35 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-bzd2ef7t.js +10 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cjgqs13g.js +65 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ckkdpht5.js +41 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cn86z041.js +296 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-cvr4z22m.js +92 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-d158y67j.js +152 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-d1jsmhhk.js +955 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-dgr390q7.js +9438 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-e3a6yx84.js +18 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-en7n9f7m.js +22 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ezgj0tr1.js +88 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-fn1chkkd.js +214 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-fp8r0sqs.js +64 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-gcmj16xy.js +92 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-gkndxkxf.js +736 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-grta8ap3.js +238 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-h2a70tg4.js +7 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-h4xy648y.js +51 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-hdbwtdv2.js +352 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-he6n2bvp.js +1270 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j0m1jxqa.js +1253 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j2zrcp1k.js +66 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-j681c48a.js +2530 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jbj7ehef.js +50 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jcsjq3d1.js +20 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jks0x0a1.js +14 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jn9rbhrx.js +1599 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-jt8e1pje.js +12 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-kdhxpwyq.js +483 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-knp0s912.js +7 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-kresp2n8.js +445 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-m63czgq5.js +590 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-n4hxpng2.js +11 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-n629dy38.js +1071 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-nf3df4jy.js +266 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-nqh3xhdc.js +57 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-pym1cezq.js +39 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-q3r9z8mq.js +213 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-q738kkhj.js +100 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qcrvt6er.js +112 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qjj6gddn.js +54 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-qpwsgt3a.js +158 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ras0sdab.js +26 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rcs322t1.js +19 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rgj5mx84.js +101 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-rt9qq1va.js +4 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-sq3kvz3g.js +200 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-stbk3jhn.js +31 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tf4j19ge.js +130 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tgcakdxc.js +125 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tgsfjmep.js +74 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-tq3b39a5.js +107 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-typcbcsv.js +819 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-v1ags1na.js +132 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-vmr35jjw.js +170 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-vz0km5qk.js +33 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-w6h8m6vp.js +138 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-web361b8.js +138 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-wm36rj4v.js +311 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x0y005nh.js +283 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x2m17v9c.js +6166 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-x9c55pzy.js +871 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-xh1nbk46.js +1299 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-xvj80c3a.js +30 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-y4d02znn.js +66 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-y7mzvq2q.js +110 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-ye9hmsvf.js +47 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-yhxkxghe.js +56 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-yrjkqtfj.js +86 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-z88qv16t.js +11 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/index-zqpqyg8p.js +666 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/pipeline-4t9q43ht.js +836 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/proxy-config-60gprphe.js +23 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/proxy-gfhmktbk.js +35 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/router-xnrva921.js +501 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/routes-ht868pdc.js +66 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/_chunks/tsconfig-defaults-bcn34eqb.js +21 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/dist/server/cli/start.js +158 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/package.json +98 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/client-navigation.ts +337 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/dynamic.tsx +188 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/link.tsx +118 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/navigation.ts +199 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/server.ts +349 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/api/suspense.ts +16 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/events.ts +68 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/history.ts +70 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/hub.ts +201 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/index.ts +168 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/page-slot.ts +139 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/policies.ts +107 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/client/router/runtime.ts +6272 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/request/cache.ts +64 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/routing/href.ts +236 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/src/utils/decode.ts +7 -0
- package/dist/dash/standalone/node_modules/@wular/pnext/tsconfig.json +10 -0
- package/dist/dash/standalone/node_modules/dotenv/lib/main.js +386 -0
- package/dist/dash/standalone/node_modules/dotenv/package.json +62 -0
- package/dist/dash/standalone/node_modules/preact/compat/client.mjs +24 -0
- package/dist/dash/standalone/node_modules/preact/compat/dist/compat.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact/compat/package.json +55 -0
- package/dist/dash/standalone/node_modules/preact/dist/preact.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact/hooks/dist/hooks.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact/hooks/package.json +35 -0
- package/dist/dash/standalone/node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact/jsx-runtime/package.json +28 -0
- package/dist/dash/standalone/node_modules/preact/package.json +265 -0
- package/dist/dash/standalone/node_modules/preact-render-to-string/dist/index.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact-render-to-string/dist/stream/index.mjs +2 -0
- package/dist/dash/standalone/node_modules/preact-render-to-string/package.json +147 -0
- package/dist/dash/standalone/node_modules/react/cjs/react.react-server.development.js +878 -0
- package/dist/dash/standalone/node_modules/react/cjs/react.react-server.production.js +436 -0
- package/dist/dash/standalone/node_modules/react/package.json +51 -0
- package/dist/dash/standalone/node_modules/react/react.react-server.js +7 -0
- package/dist/dash/standalone/node_modules/react-compiler-runtime/dist/index.js +385 -0
- package/dist/dash/standalone/node_modules/react-compiler-runtime/package.json +25 -0
- package/dist/dash/standalone/package.json +1 -0
- package/dist/dash/standalone/server/build-index.json +1 -0
- package/dist/dash/standalone/server/entry.js +1 -0
- package/dist/dash/standalone/server/manifest.json +3311 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/index.2feb1c162fab6033.js +336 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.f8b4eee28e030eda.js +27 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/errors.5e991e43e42bd943.js +21 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/log-view.d6aae19495a81adb.js +211 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.7ee1680af722840f.js +11 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/load.bdbf17006af803d1.js +45 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/types.0cf02e7714d7c1a2.js +5 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.0a054a6c9dda53b3.js +23 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/loading.02d57ab48022f8d8.js +9 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/notify.b7451fdf9c3bb62a.js +34 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/page.f9ab6ed02876880e.js +113 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/sign-out.3368aed882d8f1ac.js +13 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agent-menu.e4b6d486442476b5.js +12 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agents-grid.0dbc57156286a18e.js +118 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/connect-apps.3a5673bcd9aa57d9.js +42 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/loading.8df9f4459410cfaa.js +18 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/page.8f85fbaff456c5fe.js +71 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.d3aec63db0f5230d.js +105 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.d53d174ffe56aab3.js +5 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/page.7fd1bfcf08e25919.js +116 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.849dc6e6050a7e21.js +10 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.31687af871d75d39.js +170 -0
- 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
- 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
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.2ec7a3b893925df0.js +8 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.1ed5379637860fab.js +35 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/loading.20a52282c5806719.js +5 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/page.4fd369ba79ed9943.js +11 -0
- 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
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/loading.43b58c5eef3d4253.js +48 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.78bf188a8077c64e.js +160 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/versions-list.0c6811b66b2fcc49.js +41 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/loading.a18042397ffeaf55.js +29 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/page.1798dbd9cd334e8f.js +69 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.c5710a4f634f9d6a.js +67 -0
- 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
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.e5c5af2f9fab6a63.js +62 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/instructions.403838f7cb218391.js +74 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/connect-repositories.6c7088fd2fcd54f4.js +11 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/editor.4b164e6eb19daa2f.js +691 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/import-picker.4bff9b5642aeab17.js +214 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/editor/names.cf9e376a918a5341.js +30 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/loading.72e1b274c475e39a.js +28 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/page.44f60b1a32344f70.js +55 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/layout.946ec7c4ebb1d7c6.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/layout.96376d18592adfa9.js +391 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/page.669f5926ae12d101.js +10 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials-list.3fbc413d972a0447.js +538 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.6423846391b20446.js +34 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/engines-list.5bad79f0d4e12e07.js +75 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/list.2cafbe93b7b2dc0f.js +172 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/loading.1a810cc50ea61706.js +6 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.1fc0f6165dd85b8c.js +249 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/models-list.520cb30b291794c3.js +396 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.04b07f9c365be073.js +86 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/runners-list.67786d7d51692d19.js +380 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/layout.a619ac4fe999d1b5.js +39 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/model-options.2ca6c87aedf3588c.js +87 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/page.5edeae58f2154a50.js +6 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/settings-head.d726e31e4dd04d60.js +32 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/tunnel-guide.22448081e9e042d6.js +31 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/activity.b23683e6be363068.js +177 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/loading.a8f2aa099bd76606.js +37 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.d1ded90712ca586f.js +24 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-actions.f2be118dd5a02896.js +184 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-view.97433b52e6f7175c.js +593 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer-data.e2d442d6ecbaa6d3.js +63 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer.41721fb98004e79e.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer.78b7d3000d615c7c.js +730 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/status.d78e769ff1411932.js +16 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/task.674ebeabafa0a7e1.js +53 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-list.9698bdff71c3b3c7.js +429 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-section.c77194f05c3f58fb.js +79 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/page.157ac3a0938206b0.js +16 -0
- 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
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/custom-range.9343f6115e244cb4.js +64 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/day-chart.c7f6c8981a7acb15.js +70 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/loading.1716941ff725f152.js +15 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/metric.5481ab0e025e218e.js +10 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/page.4159d729e8aa0439.js +132 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/range-bar.8c9b18116c8eb5f0.js +60 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/stats.3b02ee8317b9c4e3.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/stats.7b8db8c56920b311.js +12 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/top-agents.8af5d53eb64bae9c.js +89 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/usage.d6df7cb6980171ce.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/globals.89a59affc5df947b.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/layout.77960a272f19bf24.js +41 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/page.33464bce52044759.js +50 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/page.f852a09edc8b6b44.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/page.7e7f8611a9bb7b22.js +4 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/responsive.1fd73ea94977bfc0.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/zone.66f36b17e74cf5f8.js +10 -0
- 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
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/auth-panel.3e020d19aa5ab464.js +48 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/auth-panel.e5af611567239b13.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.9090aa789dffa730.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.cf0eb4936a2c7222.js +30 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/heads.5407f7793f985b16.js +47 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.9648c7782502babc.js +64 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/page-head.53db3a3d313c0473.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/page-head.857951b5dc1ad827.js +65 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/stream.4c04416dab6ffc52.js +39 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/task-toasts.b14bb1f66ed75e75.js +324 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/theme-choices.60d3a5adbd49989f.js +49 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/current-link.87758179b507850c.js +34 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/side-toggle.581456c353d76d67.js +36 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/to.248665fde7daaf07.js +11 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.d21391f2f8573db8.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.e52db98d78836f9a.js +31 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.4f9265213510ffd3.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.e6876039e375b849.js +40 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.60c9038c70fb9c46.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.730d674a8f7eeeae.js +33 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/combo.d478120a76502dd1.js +115 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.cd23ea20bdf120d2.js +53 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.fc6d4da835b75a30.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/field.37f93068217e1470.js +16 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/field.8db4420dfb447e42.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.3e8df59ca8abf397.js +252 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.9311d535531caaf3.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icon.476b846e39908951.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icon.93605083edf7efe3.js +19 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/icons.e17bdd0b5504787f.js +36 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.3b3026ecd4dc31f0.js +103 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.d412af459c187b41.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.171b067d7cb36977.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.620f07f6b949d7f1.js +38 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.14e820c8a26ab8b5.js +218 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.5dbceaae2ba7ace4.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.332fb99b3a214f0e.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.50afec82b0fd53a1.js +59 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.051c87be5bbb7f2b.js +27 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.87bc5cdfc4d1b85e.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tail.25fd24d6cd0564b7.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tail.2d57d68076cef3e1.js +25 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.32503820243ede06.js +80 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.5e35e79f4d575452.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.f37a313f4811ddb8.js +26 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/format.ba382c381ea40e77.js +75 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/paged.64ead375df845ff2.js +152 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/range.f0a5ef1763ff3cb9.js +102 -0
- package/dist/dash/standalone/static/assets/chunks/agent-pills-0163fdf910179991.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-b1fcd9a5236b1fc7.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agents-grid-1d8f0ec6cf8c797e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/badge-9984d2fd0e7f995d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/card-818c7a0d580e2e0d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/combo-0d55fb62af761ac5.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-44516934e5619d32.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-8abfcac26339cc99.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/confirm-be929e2de15876a6.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/connect-apps-3e8b55a43315f58a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/connect-repositories-8864a63f83ffd411.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/credentials-list-518af85578eacf6d.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/custom-range-e8977f0d9699c1e6.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/editor-75d6d2d01f4fc35a.js +7 -0
- package/dist/dash/standalone/static/assets/chunks/engines-list-2f6b8b3f2e873e4d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/field-43fea54c1c287e30.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/filter-55618648fc10c377.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/format-b19b8eec331414f4.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/heads-1326669bdce3da2f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-0b968d5d0a58c716.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/list-90a47c07c4dd932e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/mcp-list-735e401c60ab51a3.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/models-list-999f54c76ca31379.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/paged-3ddb6077bef42752.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-4592c82f72b21b1a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runners-list-ab64a5fb01d5eef8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runtime-37175329f2865f15-1.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/segmented-bf5a4c06605249e0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/select-591ca78b6ae29bd8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/sentinel-b4c91a38a5d79219.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-37175329f2865f15-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-8a34c730aabe942d.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/tail-74153aeac1f0baec.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-actions-26ad7f7c937f2589.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-ddfddeaf07fb684c.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-view-0d085ce407e8511e.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/tasks-list-e9e914cf5dd959e9.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/toolbar-a99d36b4b6f05bb1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/versions-list-875a9a0ebb3f7d08.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/wular-pnext-37175329f2865f15-0.js +1 -0
- package/dist/dash/standalone/static/assets/dash-account-edc56e85dbaaabe0.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-edba57b67e4005d0.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-new-fe22253fbada2fbf.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-adf52e9dacb2d825.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-edit-a2937a347689ef29.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-platforms-265ba13db32a460d.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-settings-8afc52eb0372bc4b.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-tasks-6193e646be68dbd2.css +1 -0
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-usage-ceadb3a1c911c402.css +1 -0
- package/dist/dash/standalone/static/assets/dash-settings-cf1997cd7f72e518.css +1 -0
- package/dist/dash/standalone/static/assets/dash-settings-param-tab-b44dac8e79a560e6.css +1 -0
- package/dist/dash/standalone/static/assets/dash-tasks-916c7100a8058aa3.css +1 -0
- package/dist/dash/standalone/static/assets/dash-tasks-param-id-24265771fd1e3f78.css +1 -0
- package/dist/dash/standalone/static/assets/dash-usage-40940b289f85e0b6.css +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1473d0349f242421.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-195f74ae46e817da.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2b5532ce488c9391.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2d3ea662f22db27f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-43c0166e51dce87f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-4ed05f9a51f559a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-652affde71fecdf7.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-82beeebf704714a6.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-899f9625435988dd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ad1fab64ee1a5b30.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-b2dccebfff1465f5.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-c8a42c9bfeded4e4.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d04d2ffbb491564c.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d060565c4d80b60e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-dce6e1b84ee02f09.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-e753846e298d2403.js +1 -0
- package/dist/default-aLeIO8IR.js +1 -0
- package/dist/default-fMaQH1wm.js +1 -0
- package/dist/delete-Cj16PYaw.js +2 -0
- package/dist/delete-DNj3leWA.js +4 -0
- package/dist/disable-CQg5Vybq.js +1 -0
- package/dist/discover-CaAtyC0h.js +1 -0
- package/dist/discover-bVM8EJEz.js +3 -0
- package/dist/dispatch-YW1aqjEg.js +14 -0
- package/dist/docs-Byrpar10.js +2 -0
- package/dist/docs-CqeYenUp.js +2 -0
- package/dist/enable-8m3z7i3i.js +1 -0
- package/dist/env-LsVTi18f.js +1 -0
- package/dist/exec-DgI3boHa.js +11 -0
- package/dist/executor-HWnIIYUL.js +10 -0
- package/dist/flow/builtin/review.js +1 -1
- package/dist/flow/index.d.ts +2 -2
- package/dist/flow/index.js +1 -1
- package/dist/flow-DeCL3x2p.js +1 -0
- package/dist/github-actions-CvLya8ve.js +24 -0
- package/dist/http-DG54kyx4.js +1 -0
- package/dist/index-Xe8n_t2Z.d.ts +365 -0
- package/dist/init-BujliQ7q.js +1 -0
- package/dist/integrations-6kXL9hRo.js +1 -0
- package/dist/integrations-B2CavXR1.js +5 -0
- package/dist/lib/broker.js +2 -2
- package/dist/list-BdiYneg5.js +1 -0
- package/dist/list-CXu4cr8D.js +4 -0
- package/dist/list-DGoVY-ao.js +1 -0
- package/dist/list-DbY1jyj3.js +2 -0
- package/dist/list-DhVfqr0A.js +1 -0
- package/dist/list-DyqtSWvn.js +1 -0
- package/dist/list-QLTjk5SN.js +3 -0
- package/dist/list-vKOTwd4G.js +4 -0
- package/dist/load-DDZfByUe.js +2 -0
- package/dist/local-B0GiaLV0.js +1 -0
- package/dist/log-view-DeJstSkw.js +3 -0
- package/dist/login-BzdlmD_o.js +1 -0
- package/dist/login-otJB9SYu.js +1 -0
- package/dist/logout-DOrRoxDV.js +1 -0
- package/dist/maintenance-Bg_FzXSq.js +1 -0
- package/dist/match-DMI54zg4.js +1 -0
- package/dist/mcp-DgMoPoUo.js +1 -0
- package/dist/mcp-xSvAWiXX.js +1 -0
- package/dist/migrate-CN-fdMV9.js +2 -0
- package/dist/migrate-DAC6sFgg.js +1 -0
- package/dist/model-BJ-Sokha.js +1 -0
- package/dist/models-DGPrMV51.js +1 -0
- package/dist/prompt-K7-bKcTC.js +7 -0
- package/dist/push-Cg7-XT5h.js +1 -0
- package/dist/queue-yo-Z8TaE.js +117 -0
- package/dist/refresh-CmBQALAW.js +1 -0
- package/dist/remote-AcWWfKVS.js +1 -0
- package/dist/remove-BuaShRZ3.js +1 -0
- package/dist/remove-C8Rm8KP-.js +1 -0
- package/dist/remove-CcMma1x3.js +1 -0
- package/dist/remove-DgMg_OOu.js +1 -0
- package/dist/rename-C0vNcl8e.js +1 -0
- package/dist/result-C6ovl_Dn.js +5 -0
- package/dist/result-oQey_hdw.js +18 -0
- package/dist/resume-T_TXWfqE.js +3 -0
- package/dist/review-CCs6XUSO.js +7 -0
- package/dist/rotate-key-CYimsQR5.js +1 -0
- package/dist/run-BFYg-zZt.js +5 -0
- package/dist/run-D7F7JPV6.js +2 -0
- package/dist/run-hiPyO7js.js +2 -0
- package/dist/runner-D5jaEfhG.js +1 -0
- package/dist/runner-c-2w6Eoj.js +1 -0
- package/dist/schema-DoNO0dPh.js +1 -0
- package/dist/sdk.d.ts +4 -3
- package/dist/sdk.js +1 -1
- package/dist/serve-BgGXjT_O.js +1 -0
- package/dist/serve-C-AD60Wa.js +12 -0
- package/dist/serve-GIK3fqKA.js +8 -0
- package/dist/serve-K3BVTcDI.js +2 -0
- package/dist/serve-xMihn4g-.js +1 -0
- package/dist/server-DQTGc55C.js +1 -0
- package/dist/setup-host-By8-gv_v.js +6 -0
- package/dist/shared-TznJgMFW.js +1 -0
- package/dist/show-C9ojrH5W.js +1 -0
- package/dist/show-o4yXzSWZ.js +1 -0
- package/dist/status-BBW7Qyde.js +1 -0
- package/dist/steer-D47cuggj.js +4 -0
- package/dist/stop-7brPdki9.js +1 -0
- package/dist/stop-CD2JW6dI.js +3 -0
- package/dist/store-BCBTo0rl.js +42 -0
- package/dist/store-qp7UE2ES.js +19 -0
- package/dist/task-CyrDqqf8.js +1 -0
- package/dist/task-DEp3GHwH.js +1 -0
- package/dist/task-DhZ5vhyY.js +5 -0
- package/dist/test-BcFQUHRo.js +1 -0
- package/dist/tools-D20XYPnO.js +1 -0
- package/dist/types-DMGBYB_K.d.ts +391 -0
- package/dist/unalias-G3sM8fVw.js +1 -0
- package/dist/update-JvgB6Xws.js +2 -0
- package/dist/upgrade-DN3hXDdo.js +2 -0
- package/dist/usage-C1oN2W9c.js +1 -0
- package/dist/usage-DR3wWtYD.js +1 -0
- package/dist/watch-DDmHonTf.js +5 -0
- package/dist/watch-DYkC6Q2q.js +8 -0
- package/dist/wire-DxxfWapP.js +1 -0
- package/dist/worker-C4Lo6rLS.js +9 -0
- package/dist/worker-CaNTsqcD.js +1 -0
- package/dist/workflow-7rqzHHWZ.js +1 -0
- package/docs/cli.md +1 -2
- package/docs/config.md +1 -1
- package/docs/flows.md +12 -1
- package/docs/mcp.md +1 -1
- package/docs/sdk.md +1 -1
- package/migrations/0000_initial.sql +8 -0
- package/migrations/meta/0000_snapshot.json +75 -1
- package/migrations/meta/_journal.json +1 -1
- package/package.json +2 -10
- package/plugins/agents/skills/coder/SKILL.md +1 -0
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/claude/skills/dispatch/SKILL.md +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/plugins/cursor/skills/coder/SKILL.md +1 -0
- package/dist/actions-Mk3FSlpJ.js +0 -20
- package/dist/adapter-B0oYCI0S.js +0 -1
- package/dist/adapter-BKVzTDnn.js +0 -1
- package/dist/adapter-DPInwbJG.js +0 -1
- package/dist/add-C2y-mVzl.js +0 -1
- package/dist/add-CLYTF_up.js +0 -6
- package/dist/add-DRsPpQFl.js +0 -1
- package/dist/add-DkpUwhtO.js +0 -1
- package/dist/add-json-5uPnWPoD.js +0 -1
- package/dist/agent-hw3zKw8y.js +0 -3
- package/dist/agent-r5mMcehf.js +0 -1
- package/dist/alias-_0Rwf2cA.js +0 -2
- package/dist/app-oE8G1-bi.js +0 -1
- package/dist/approvals-DbVrsxec.js +0 -2
- package/dist/approve-DeAhFL-m.js +0 -2
- package/dist/apps-eujHiNca.js +0 -1
- package/dist/archive-BCUfymIB.js +0 -3
- package/dist/archive-DZ6vpMHb.js +0 -4
- package/dist/archive-sweep-Cxbh8yAI.js +0 -1
- package/dist/args-BOEEdpWk.js +0 -1
- package/dist/ask-BU2WVxVM.js +0 -4
- package/dist/auth-CBWTmAPA.js +0 -1
- package/dist/auth-Dmn2U7rr.js +0 -1
- package/dist/chat-B_yhNTo0.js +0 -13
- package/dist/chat-bridge-BS9WtP3X.js +0 -2
- package/dist/cli-DWCR7iqa.js +0 -9
- package/dist/client-D9IoAuDD.js +0 -1
- package/dist/config-12pK4qW7.js +0 -3
- package/dist/create-D3f6q0Yq.js +0 -1
- package/dist/credentials-l6dsrZLL.js +0 -1
- package/dist/dash/manifest.json +0 -3313
- package/dist/dash/public/assets/chunks/agent-pills-dd0b7643e125bbf1.js +0 -1
- package/dist/dash/public/assets/chunks/agent-settings-form-45ae6aeaaed2b568.js +0 -1
- package/dist/dash/public/assets/chunks/agents-grid-b906da80c31fc035.js +0 -1
- package/dist/dash/public/assets/chunks/badge-676b01e0c615bf7b.js +0 -1
- package/dist/dash/public/assets/chunks/card-e0901d68b79dfa93.js +0 -1
- package/dist/dash/public/assets/chunks/combo-952a457d52360d88.js +0 -1
- package/dist/dash/public/assets/chunks/composer-49f9e7c5c4dfda3b.js +0 -1
- package/dist/dash/public/assets/chunks/composer-f331d00837143aee.js +0 -1
- package/dist/dash/public/assets/chunks/confirm-f2fe4ba9905a89c6.js +0 -1
- package/dist/dash/public/assets/chunks/connect-apps-661f3b3a85f1776a.js +0 -1
- package/dist/dash/public/assets/chunks/connect-repositories-5389ec8701a3deac.js +0 -1
- package/dist/dash/public/assets/chunks/credentials-list-e6177d0943517929.js +0 -2
- package/dist/dash/public/assets/chunks/custom-range-03ba6fb2ade7d282.js +0 -1
- package/dist/dash/public/assets/chunks/editor-34cb529d6d8a4b09.js +0 -7
- package/dist/dash/public/assets/chunks/engines-list-2f1acee3ecc8461a.js +0 -1
- package/dist/dash/public/assets/chunks/field-901f1f35c18c39c9.js +0 -1
- package/dist/dash/public/assets/chunks/format-eb03fc9d9744d960.js +0 -1
- package/dist/dash/public/assets/chunks/heads-1570a3a6db331979.js +0 -1
- package/dist/dash/public/assets/chunks/instructions-052fa45a9daf6db6.js +0 -2
- package/dist/dash/public/assets/chunks/instructions-d0a4b0d95009c262.js +0 -1
- package/dist/dash/public/assets/chunks/list-87b359bebd26986a.js +0 -1
- package/dist/dash/public/assets/chunks/mcp-list-b42f0d2ee463b37d.js +0 -1
- package/dist/dash/public/assets/chunks/models-list-0669d26fd662aec3.js +0 -1
- package/dist/dash/public/assets/chunks/paged-bc6fa0c2b9d52ed7.js +0 -1
- package/dist/dash/public/assets/chunks/platform-actions-c92ca3c6198a9387.js +0 -1
- package/dist/dash/public/assets/chunks/runners-list-9fffa50432c470c9.js +0 -1
- package/dist/dash/public/assets/chunks/runtime-246221e985d863e5-1.js +0 -2
- package/dist/dash/public/assets/chunks/segmented-358ff2b4992b8384.js +0 -1
- package/dist/dash/public/assets/chunks/select-1013702bdfb1ade4.js +0 -1
- package/dist/dash/public/assets/chunks/sentinel-c972a33dc69a5135.js +0 -1
- package/dist/dash/public/assets/chunks/shared-init-20e199043ff5d00f.js +0 -2
- package/dist/dash/public/assets/chunks/shared-init-246221e985d863e5-2.js +0 -1
- package/dist/dash/public/assets/chunks/shared-init-88cce66bb3cfe1e5.js +0 -5
- package/dist/dash/public/assets/chunks/tail-7c27aab8ba268bd9.js +0 -1
- package/dist/dash/public/assets/chunks/task-actions-a9603d520434baab.js +0 -1
- package/dist/dash/public/assets/chunks/task-fa8b82e95e771c4a.js +0 -1
- package/dist/dash/public/assets/chunks/task-view-f7039cb330bcb0b5.js +0 -3
- package/dist/dash/public/assets/chunks/tasks-list-2a905b4a0c3a9042.js +0 -1
- package/dist/dash/public/assets/chunks/toolbar-f964fa864699f095.js +0 -1
- package/dist/dash/public/assets/chunks/versions-list-fc2e0d2a7382e049.js +0 -1
- package/dist/dash/public/assets/chunks/wular-pnext-246221e985d863e5-0.js +0 -1
- package/dist/dash/public/assets/dash-account-96fc41be318839fa.css +0 -1
- package/dist/dash/public/assets/dash-agents-290a7b21c7dc0c92.css +0 -1
- package/dist/dash/public/assets/dash-agents-new-a7a07bf4ebda24c2.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-69a72fb0bbd14cc2.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-edit-397bdfb2f0ca328c.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-platforms-a7b3b7247c27f1d2.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-settings-8389b7d0555e8ccf.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-tasks-5987b8aea5e8f30d.css +0 -1
- package/dist/dash/public/assets/dash-agents-param-slug-usage-19abc69e1d4e6b0a.css +0 -1
- package/dist/dash/public/assets/dash-settings-53b8e6a8f656fa1a.css +0 -1
- package/dist/dash/public/assets/dash-settings-param-tab-ac61fdfdd6fd533f.css +0 -1
- package/dist/dash/public/assets/dash-tasks-cc0b1d32874b731c.css +0 -1
- package/dist/dash/public/assets/dash-tasks-param-id-02b8c7bd99cc1090.css +0 -1
- package/dist/dash/public/assets/dash-usage-884943221f76ad93.css +0 -1
- package/dist/dash/public/assets/pnext-client-17ba55bb57a1f4da.js +0 -1
- package/dist/dash/public/assets/pnext-client-1afa4148bea69ad2.js +0 -1
- package/dist/dash/public/assets/pnext-client-2693db10b197ade1.js +0 -1
- package/dist/dash/public/assets/pnext-client-43f52a07f8067b1b.js +0 -1
- package/dist/dash/public/assets/pnext-client-4594b693fe612835.js +0 -1
- package/dist/dash/public/assets/pnext-client-73f73e24f8141fb6.js +0 -1
- package/dist/dash/public/assets/pnext-client-7574da4651b40eae.js +0 -1
- package/dist/dash/public/assets/pnext-client-7b3a2c1092cbbb02.js +0 -1
- package/dist/dash/public/assets/pnext-client-816fe5fc96d3f768.js +0 -1
- package/dist/dash/public/assets/pnext-client-86cb956b448b0887.js +0 -1
- package/dist/dash/public/assets/pnext-client-8b64e3c030164288.js +0 -1
- package/dist/dash/public/assets/pnext-client-8f6161084c595a22.js +0 -1
- package/dist/dash/public/assets/pnext-client-9203ec11926e5d04.js +0 -1
- package/dist/dash/public/assets/pnext-client-a38b446f941d44df.js +0 -1
- package/dist/dash/public/assets/pnext-client-bd8d51aaa095e8a4.js +0 -1
- package/dist/dash/public/assets/pnext-client-e9821d1f1bdb281d.js +0 -1
- package/dist/dash/server/bundle-0.1.6-b29ec45cb963d47f/entry.js +0 -2
- package/dist/default-CwQXCtoB.js +0 -1
- package/dist/default-De8FXiWz.js +0 -1
- package/dist/delete-BD6AnCLg.js +0 -2
- package/dist/delete-cS01oOIb.js +0 -4
- package/dist/disable-BMWWeYFQ.js +0 -1
- package/dist/discover-Cfx5RPU7.js +0 -3
- package/dist/discover-Dvr_3_Xr.js +0 -1
- package/dist/dispatch-BKeAch9E.js +0 -14
- package/dist/docs-BX65z2Iu.js +0 -2
- package/dist/docs-DWegDRiu.js +0 -2
- package/dist/enable-Cfzeau2x.js +0 -1
- package/dist/env-CRf6wkM2.js +0 -1
- package/dist/exec-RZFLclKX.js +0 -11
- package/dist/executor-BvAA7Cgw.js +0 -10
- package/dist/flow-kAxxVOiR.js +0 -1
- package/dist/github-actions-DwUzm4hC.js +0 -24
- package/dist/http-Bkg_OQ6r.js +0 -1
- package/dist/index-CZjFX5zV.d.ts +0 -357
- package/dist/init-C4tDFH4G.js +0 -1
- package/dist/integrations-BAgdVDhj.js +0 -5
- package/dist/integrations-D-L3uQRj.js +0 -1
- package/dist/list-5Ljf9TxF.js +0 -2
- package/dist/list-COAo7eZd.js +0 -4
- package/dist/list-DuPqU3fk.js +0 -3
- package/dist/list-DzGuMkQy.js +0 -1
- package/dist/list-J8d_zh-o.js +0 -1
- package/dist/list-vOvIpbOH.js +0 -1
- package/dist/list-vpyS-hv8.js +0 -1
- package/dist/list-way5oLO0.js +0 -4
- package/dist/load-BpEsAn51.js +0 -2
- package/dist/local-H3uvqEbq.js +0 -1
- package/dist/log-view-dg0TlKLA.js +0 -1
- package/dist/login-BBw95-S3.js +0 -1
- package/dist/login-CNmeRAL7.js +0 -1
- package/dist/logout-j0dTo_Ib.js +0 -1
- package/dist/maintenance-DkLVtqM7.js +0 -1
- package/dist/match-CXAjDhg7.js +0 -1
- package/dist/mcp-BgKb2Cdk.js +0 -1
- package/dist/mcp-CsmBtlW9.js +0 -1
- package/dist/migrate-D4nzYhk8.js +0 -2
- package/dist/migrate-N-85_N7J.js +0 -1
- package/dist/model-B79MFtRV.js +0 -1
- package/dist/models-_5LVGC3m.js +0 -1
- package/dist/prompt-CEuBMNhk.js +0 -7
- package/dist/push-DbdnbZYt.js +0 -1
- package/dist/queue-C9fSdE_X.js +0 -116
- package/dist/refresh-BDmap1RA.js +0 -1
- package/dist/remote-miQNTVRa.js +0 -1
- package/dist/remove-BNzbUhaK.js +0 -1
- package/dist/remove-CLpL12Ya.js +0 -1
- package/dist/remove-CaYH9Cna.js +0 -1
- package/dist/remove-D-QeeZQL.js +0 -1
- package/dist/rename-Bhcb4t9F.js +0 -1
- package/dist/result-BfTfJayl.js +0 -5
- package/dist/result-D8DsvJDu.js +0 -15
- package/dist/resume-aZ8yWDBh.js +0 -3
- package/dist/review-BEhDcX4b.js +0 -7
- package/dist/rotate-key-BqnKhTK8.js +0 -1
- package/dist/run-BWbabvub.js +0 -5
- package/dist/run-BdPjxaZU.js +0 -2
- package/dist/run-Dqe38jX8.js +0 -2
- package/dist/runner-BPpiJvHx.js +0 -1
- package/dist/runner-sUpWJ_k0.js +0 -1
- package/dist/schema-CU2iFkp8.js +0 -1
- package/dist/serve-BTeomYxW.js +0 -1
- package/dist/serve-C0WC-QrV.js +0 -2
- package/dist/serve-CcObDKKQ.js +0 -12
- package/dist/serve-Ck95047c.js +0 -1
- package/dist/serve-DA5I2qXj.js +0 -4
- package/dist/server-BxLFZL80.js +0 -1
- package/dist/setup-host-DLd_j2Uw.js +0 -6
- package/dist/shared-BLkGRKty.js +0 -1
- package/dist/show-DzoQIs75.js +0 -1
- package/dist/show-FC3dJcD-.js +0 -1
- package/dist/status-BU3DR1XU.js +0 -1
- package/dist/steer-P_38hRRD.js +0 -4
- package/dist/stop-BJGDRPsp.js +0 -1
- package/dist/stop-BWY6k6v5.js +0 -3
- package/dist/store-B3ZHoBJY.js +0 -8
- package/dist/store-BLi19UDE.js +0 -42
- package/dist/task-C6VAg5WU.js +0 -1
- package/dist/task-DeglY79z.js +0 -5
- package/dist/task-b2BK481M.js +0 -1
- package/dist/test-BrSrhop9.js +0 -1
- package/dist/tools-CgswhJzh.js +0 -1
- package/dist/types-I5Cwtl_K.d.ts +0 -389
- package/dist/unalias-mMHXqok7.js +0 -1
- package/dist/update-DbOWToPy.js +0 -2
- package/dist/upgrade-D6oC9HQI.js +0 -2
- package/dist/usage-Cb8Dtv9V.js +0 -1
- package/dist/usage-DMs-IIJC.js +0 -1
- package/dist/watch-BcMQXGYO.js +0 -8
- package/dist/watch-eE2XiwsC.js +0 -5
- package/dist/wire-BeT1Axeo.js +0 -1
- package/dist/worker-CXndxmGF.js +0 -9
- package/dist/worker-DrucI22w.js +0 -1
- package/dist/workflow-Cshghoas.js +0 -1
- package/src/client/index.ts +0 -573
- package/src/client/types.ts +0 -506
- package/src/core/defaults.ts +0 -25
- package/src/core/errors.ts +0 -72
- package/src/core/task/log-view.ts +0 -173
- package/src/server/auth/sign-in.ts +0 -14
- package/src/server/dash/api/load.ts +0 -62
- package/src/server/dash/api/types.ts +0 -11
- package/src/server/dash/app/connect/page.tsx +0 -42
- package/src/server/dash/app/dash/account/loading.tsx +0 -11
- package/src/server/dash/app/dash/account/notify.tsx +0 -42
- package/src/server/dash/app/dash/account/page.css +0 -81
- package/src/server/dash/app/dash/account/page.tsx +0 -126
- package/src/server/dash/app/dash/account/sign-out.tsx +0 -24
- package/src/server/dash/app/dash/agents/(list)/agent-menu.tsx +0 -10
- package/src/server/dash/app/dash/agents/(list)/agents-grid.tsx +0 -143
- package/src/server/dash/app/dash/agents/(list)/connect-apps.tsx +0 -46
- package/src/server/dash/app/dash/agents/(list)/loading.tsx +0 -14
- package/src/server/dash/app/dash/agents/(list)/page.css +0 -72
- package/src/server/dash/app/dash/agents/(list)/page.tsx +0 -89
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.tsx +0 -135
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.tsx +0 -5
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.css +0 -21
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/page.tsx +0 -173
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.tsx +0 -18
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.css +0 -87
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.tsx +0 -258
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.tsx +0 -111
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.css +0 -114
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.tsx +0 -294
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.tsx +0 -5
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.tsx +0 -54
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/loading.tsx +0 -5
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/tasks/page.tsx +0 -14
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/loading.tsx +0 -31
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.css +0 -12
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.tsx +0 -163
- package/src/server/dash/app/dash/agents/[slug]/(tabs)/versions-list.tsx +0 -53
- package/src/server/dash/app/dash/agents/[slug]/edit/loading.tsx +0 -31
- package/src/server/dash/app/dash/agents/[slug]/edit/page.tsx +0 -91
- package/src/server/dash/app/dash/agents/agent/agent-pills.css +0 -27
- package/src/server/dash/app/dash/agents/agent/agent-pills.tsx +0 -133
- package/src/server/dash/app/dash/agents/agent/hero.css +0 -40
- package/src/server/dash/app/dash/agents/agent/hero.tsx +0 -60
- package/src/server/dash/app/dash/agents/agent/instructions.css +0 -29
- package/src/server/dash/app/dash/agents/agent/instructions.tsx +0 -82
- package/src/server/dash/app/dash/agents/editor/connect-repositories.ts +0 -16
- package/src/server/dash/app/dash/agents/editor/editor.css +0 -263
- package/src/server/dash/app/dash/agents/editor/editor.tsx +0 -774
- package/src/server/dash/app/dash/agents/editor/import-picker.css +0 -48
- package/src/server/dash/app/dash/agents/editor/import-picker.tsx +0 -253
- package/src/server/dash/app/dash/agents/editor/names.ts +0 -35
- package/src/server/dash/app/dash/agents/new/loading.tsx +0 -25
- package/src/server/dash/app/dash/agents/new/page.tsx +0 -72
- package/src/server/dash/app/dash/layout.css +0 -322
- package/src/server/dash/app/dash/layout.tsx +0 -344
- package/src/server/dash/app/dash/page.tsx +0 -14
- package/src/server/dash/app/dash/settings/[tab]/credentials-list.css +0 -94
- package/src/server/dash/app/dash/settings/[tab]/credentials-list.tsx +0 -619
- package/src/server/dash/app/dash/settings/[tab]/credentials.tsx +0 -36
- package/src/server/dash/app/dash/settings/[tab]/engines-list.css +0 -16
- package/src/server/dash/app/dash/settings/[tab]/engines-list.tsx +0 -135
- package/src/server/dash/app/dash/settings/[tab]/list.css +0 -98
- package/src/server/dash/app/dash/settings/[tab]/list.tsx +0 -215
- package/src/server/dash/app/dash/settings/[tab]/loading.tsx +0 -6
- package/src/server/dash/app/dash/settings/[tab]/mcp-list.css +0 -43
- package/src/server/dash/app/dash/settings/[tab]/mcp-list.tsx +0 -290
- package/src/server/dash/app/dash/settings/[tab]/models-list.tsx +0 -513
- package/src/server/dash/app/dash/settings/[tab]/page.tsx +0 -89
- package/src/server/dash/app/dash/settings/[tab]/runners-list.css +0 -153
- package/src/server/dash/app/dash/settings/[tab]/runners-list.tsx +0 -457
- package/src/server/dash/app/dash/settings/layout.tsx +0 -50
- package/src/server/dash/app/dash/settings/model-options.ts +0 -117
- package/src/server/dash/app/dash/settings/page.tsx +0 -7
- package/src/server/dash/app/dash/settings/settings-head.tsx +0 -24
- package/src/server/dash/app/dash/settings/tunnel-guide.tsx +0 -28
- package/src/server/dash/app/dash/tasks/[id]/activity.tsx +0 -202
- package/src/server/dash/app/dash/tasks/[id]/loading.tsx +0 -31
- package/src/server/dash/app/dash/tasks/[id]/page.tsx +0 -30
- package/src/server/dash/app/dash/tasks/[id]/task-actions.tsx +0 -164
- package/src/server/dash/app/dash/tasks/[id]/task-view.css +0 -407
- package/src/server/dash/app/dash/tasks/[id]/task-view.tsx +0 -513
- package/src/server/dash/app/dash/tasks/composer-data.ts +0 -96
- package/src/server/dash/app/dash/tasks/composer.css +0 -316
- package/src/server/dash/app/dash/tasks/composer.tsx +0 -890
- package/src/server/dash/app/dash/tasks/list/status.css +0 -50
- package/src/server/dash/app/dash/tasks/list/status.tsx +0 -20
- package/src/server/dash/app/dash/tasks/list/task.ts +0 -45
- package/src/server/dash/app/dash/tasks/list/tasks-list.css +0 -85
- package/src/server/dash/app/dash/tasks/list/tasks-list.tsx +0 -402
- package/src/server/dash/app/dash/tasks/list/tasks-section.tsx +0 -96
- package/src/server/dash/app/dash/tasks/page.tsx +0 -53
- package/src/server/dash/app/dash/usage/custom-range.tsx +0 -63
- package/src/server/dash/app/dash/usage/day-chart.css +0 -109
- package/src/server/dash/app/dash/usage/day-chart.tsx +0 -110
- package/src/server/dash/app/dash/usage/loading.tsx +0 -17
- package/src/server/dash/app/dash/usage/metric.ts +0 -13
- package/src/server/dash/app/dash/usage/page.tsx +0 -117
- package/src/server/dash/app/dash/usage/range-bar.css +0 -13
- package/src/server/dash/app/dash/usage/range-bar.tsx +0 -69
- package/src/server/dash/app/dash/usage/stats.css +0 -52
- package/src/server/dash/app/dash/usage/stats.tsx +0 -19
- package/src/server/dash/app/dash/usage/top-agents.css +0 -40
- package/src/server/dash/app/dash/usage/top-agents.tsx +0 -138
- package/src/server/dash/app/globals.css +0 -692
- package/src/server/dash/app/layout.tsx +0 -52
- package/src/server/dash/app/login/page.css +0 -26
- package/src/server/dash/app/login/page.tsx +0 -57
- package/src/server/dash/app/page.tsx +0 -5
- package/src/server/dash/app/responsive.css +0 -49
- package/src/server/dash/app/zone.tsx +0 -13
- package/src/server/dash/comps/frame/auth-panel.css +0 -60
- package/src/server/dash/comps/frame/auth-panel.tsx +0 -44
- package/src/server/dash/comps/frame/drawer.css +0 -28
- package/src/server/dash/comps/frame/drawer.tsx +0 -39
- package/src/server/dash/comps/frame/heads.ts +0 -41
- package/src/server/dash/comps/frame/loading-card.tsx +0 -65
- package/src/server/dash/comps/frame/page-head.css +0 -83
- package/src/server/dash/comps/frame/page-head.tsx +0 -71
- package/src/server/dash/comps/frame/stream.tsx +0 -50
- package/src/server/dash/comps/frame/task-toasts.tsx +0 -214
- package/src/server/dash/comps/frame/theme-choices.tsx +0 -46
- package/src/server/dash/comps/nav/current-link.tsx +0 -53
- package/src/server/dash/comps/nav/side-toggle.tsx +0 -30
- package/src/server/dash/comps/nav/to.ts +0 -22
- package/src/server/dash/comps/ui/badge.css +0 -64
- package/src/server/dash/comps/ui/badge.tsx +0 -41
- package/src/server/dash/comps/ui/card.css +0 -93
- package/src/server/dash/comps/ui/card.tsx +0 -77
- package/src/server/dash/comps/ui/collapse.css +0 -32
- package/src/server/dash/comps/ui/collapse.tsx +0 -49
- package/src/server/dash/comps/ui/combo.tsx +0 -154
- package/src/server/dash/comps/ui/confirm.css +0 -36
- package/src/server/dash/comps/ui/confirm.tsx +0 -67
- package/src/server/dash/comps/ui/field.css +0 -25
- package/src/server/dash/comps/ui/field.tsx +0 -34
- package/src/server/dash/comps/ui/icon.css +0 -22
- package/src/server/dash/comps/ui/icon.tsx +0 -17
- package/src/server/dash/comps/ui/icons.ts +0 -44
- package/src/server/dash/comps/ui/menu.css +0 -178
- package/src/server/dash/comps/ui/menu.tsx +0 -156
- package/src/server/dash/comps/ui/segmented.css +0 -44
- package/src/server/dash/comps/ui/segmented.tsx +0 -58
- package/src/server/dash/comps/ui/select.css +0 -103
- package/src/server/dash/comps/ui/select.tsx +0 -250
- package/src/server/dash/comps/ui/sentinel.css +0 -58
- package/src/server/dash/comps/ui/sentinel.tsx +0 -67
- package/src/server/dash/comps/ui/tabs.css +0 -81
- package/src/server/dash/comps/ui/tabs.tsx +0 -32
- package/src/server/dash/comps/ui/tail.css +0 -12
- package/src/server/dash/comps/ui/tail.tsx +0 -37
- package/src/server/dash/comps/ui/toast.css +0 -73
- package/src/server/dash/comps/ui/toolbar.css +0 -143
- package/src/server/dash/comps/ui/toolbar.tsx +0 -93
- package/src/server/dash/package.json +0 -5
- package/src/server/dash/pnext-env.d.ts +0 -4
- package/src/server/dash/pnext.config.ts +0 -5
- package/src/server/dash/public/assets/apple-touch-icon.png +0 -0
- package/src/server/dash/public/assets/favicon.ico +0 -0
- package/src/server/dash/public/assets/favicon.svg +0 -1
- package/src/server/dash/public/assets/fonts/LICENSE-fira-code +0 -93
- package/src/server/dash/public/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
- package/src/server/dash/public/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
- package/src/server/dash/public/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
- package/src/server/dash/tsconfig.json +0 -10
- package/src/server/dash/utils/client.ts +0 -19
- package/src/server/dash/utils/format.ts +0 -75
- package/src/server/dash/utils/paged.ts +0 -184
- package/src/server/dash/utils/range.ts +0 -117
- /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
- /package/dist/dash/{public → standalone/static}/assets/apple-touch-icon.png +0 -0
- /package/dist/dash/{public → standalone/static}/assets/chunks/composer-data-6f7608fed13f3dd7.js +0 -0
- /package/dist/dash/{public → standalone/static}/assets/chunks/model-options-15c53331a2f28a4f.js +0 -0
- /package/dist/dash/{public → standalone/static}/assets/chunks/shared-init-8f2ac936c95a7f7b.js +0 -0
- /package/dist/dash/{public → standalone/static}/assets/connect-382b1729a7ae7808.css +0 -0
- /package/dist/dash/{public → standalone/static}/assets/dash-49ca85b59ac65c20.css +0 -0
- /package/dist/dash/{public → standalone/static}/assets/favicon.ico +0 -0
- /package/dist/dash/{public → standalone/static}/assets/favicon.svg +0 -0
- /package/dist/dash/{public → standalone/static}/assets/fonts/LICENSE-fira-code +0 -0
- /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-400-normal-717ee080.woff2 +0 -0
- /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-500-normal-530b6706.woff2 +0 -0
- /package/dist/dash/{public → standalone/static}/assets/fonts/fira-code-latin-700-normal-98730669.woff2 +0 -0
- /package/dist/dash/{public → standalone/static}/assets/global-d2adbf01910d9df5.css +0 -0
- /package/dist/dash/{public → standalone/static}/assets/login-c129b1ce237be260.css +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as r,Gt as i,It as a,Jt as o,Mn as s,Mt as c,Nt as l,Ot as u,St as d,Vt as f,Xt as p,_t as m,b as h,bt as g,d as _,dn as v,en as ee,fn as y,gt as te,h as ne,in as re,jt as ie,mt as ae,nn as b,o as oe,pn as se,q as ce,qt as le,r as ue,rn as de,sn as fe,tn as pe,tt as me,wn as he,xt as ge,yt as _e,zt as ve}from"./dispatch-YW1aqjEg.js";import{t as ye}from"./types-D0q15RJa.js";import{a as be,i as xe,l as Se,n as Ce,o as we,r as Te,s as Ee,t as De}from"./load-DDZfByUe.js";import{c as Oe,d as ke,i as Ae,l as je,t as Me,u as Ne}from"./integrations-B2CavXR1.js";import{i as Pe,t as Fe}from"./discover-CaAtyC0h.js";import{a as Ie,c as Le,l as Re,n as ze,o as Be}from"./actions-CmfXOVXQ.js";import{_ as Ve,g as He,i as Ue,r as We}from"./executor-HWnIIYUL.js";import{n as Ge,r as Ke,t as qe}from"./exec-DgI3boHa.js";import{f as Je,n as Ye,r as Xe,t as Ze}from"./task-DhZ5vhyY.js";import{t as Qe}from"./match-DMI54zg4.js";import{a as $e,i as et,n as tt,o as nt,r as x,t as rt}from"./local-B0GiaLV0.js";import{a as S,c as it,d as C,f as at,i as ot,l as w,m as st,n as ct,p as lt,r as ut,u as dt}from"./http-DG54kyx4.js";import{n as ft}from"./github-actions-CvLya8ve.js";import{t as pt}from"./log-view-DeJstSkw.js";import{n as mt,t as ht}from"./chat-3Znsevah.js";import T from"node:path";import E from"node:process";import{fileURLToPath as gt,pathToFileURL as _t}from"node:url";import*as D from"zod/mini";import O,{accessSync as vt,constants as yt,existsSync as bt,readFileSync as xt,statSync 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 from"node:os";import{isIP as jt}from"node:net";import{isDeepStrictEqual as Mt,promisify as Nt}from"node:util";import{lookup as Pt}from"node:dns/promises";import{request as Ft}from"node:https";import{brotliDecompressSync as It,constants as Lt,createGzip as Rt,gunzipSync as zt,gzipSync as Bt,inflateSync as Vt}from"node:zlib";import{Chat as Ht,Message as Ut}from"chat";const Wt=e=>`nonce:${ke(e)}`;function Gt(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 Kt(e,t){return Ot(`sha256`,Gt(e)).update(t).digest(`base64url`)}async function qt(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=nt(o),c=`${s}.${Kt(e,s)}`;return await e.store.put(`delivery`,Wt(c),{at:a},{ttlMs:i}),c}function Jt(e,t){let[n,r,i]=t.split(`.`);if(!(!n||!r||i!==void 0)&&Ne(Kt(e,n),r))try{return $e(n)}catch{return}}function Yt(e,t){return Jt(e,t)?.organization}function Xt(e,t){return Jt(e,t)?.user}async function Zt(e,t,n,r,i){let a=Jt(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`,Wt(t))}async function Qt(e,t,n,r){let i=Jt(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`,Wt(t))))return i.target}async function $t(e,t,n,r){let i=Jt(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`,Wt(t))))return i.target}const en=(e,t=200)=>je(`<title>Coder</title><p>${Oe(e)}</p>`+(t>=400?`<p><a href="/dash">Back to the dashboard</a> to start again.</p>`:``),t);function tn(e){let t=e.get(`agent`),n=e.get(`def`),r=ut(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 nn=e=>typeof e==`string`&&/^\/dash(?:[/?#]|$)/.test(e)?e:void 0,rn=(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 an(e,t,n){return(await e.store.list(`app`,{prefix:`${n}:`})).find(e=>e.value.integration===n&&e.value.agent===t.agent)?.value}function on(e,t,n){let r={kind:`installation`,id:n};return{...e,connections:{...e.connections,[t]:r}}}function sn(e,t,n){return async r=>{let i={};for(let a of Object.keys(e.integrations)){if(a===t.integration)continue;let o=await an(e,t,a);if(o){let t=await qt(e,`install`,e.session?.user.id??`anonymous`,o.id);i[a]=`${n}/install/${a}?app=${encodeURIComponent(o.id)}&state=${nt({link:r,tx:t})}`}}return i}}async function cn(e,t,n){let r=await e.store.get(`app`,t.app);return r&&an(e,r,n)}function ln(e){return`${e.appId}:${e.installationId}:${e.chat?.thread.id??e.deliveryId}`}async function un(e,t,n,r){return e.repos.readFile(t,`.coder/${n}.md`,r)}function dn(e){return e.event&&e.source===e.event.integration?ln(e.event):`task:${e.id}`}async function fn(e,t,n,r,i,a,o,s){let c={},l=Ae(e.integrations),[u,d,f]=await Promise.all([o?.().catch(()=>void 0),e.store.get(`note`,ln(r)).catch(()=>void 0),l&&n.settings?.configRepo&&i[l.id]?un(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=ke;function pn(e,t,n,r=k(32).toString(`base64url`)){let i=`${nt({task:e,organization:t,attempt:n})}.${r}`;return{token:i,hash:A(i)}}function mn(e){try{return $e(e.slice(0,e.indexOf(`.`)))}catch{return{}}}function j(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:j(e,n.organizationId),app:n.app}}async function gn(e,t){if(e.boundInstallation?.installation.id===t)return{...j(e,e.boundInstallation.organizationId),boundInstallation:e.boundInstallation};if(!e.installationOrganization)return e;let n=await e.installationOrganization(t);return n===void 0?void 0:j(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 M(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 N(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 x(`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:Ye},this.options),a=await x(`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 x(`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 x(`docker`,[`logs`,`--timestamps`,e],{PATH:E.env.PATH??``});if(n.code!==0)throw Error(n.stderr.trim()||`docker logs failed`);let r=[...tt(n.stdout),...tt(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 x(`docker`,[`rm`,`-f`,e],{PATH:E.env.PATH??``})}async push(e,t){let n=await x(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,Ze],{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(!jt(e))return!0;if(jt(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??Pt}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=jt(e)?[{address:e,family:jt(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??Ft)(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=>$e(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 P=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},Un=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??``}:${ke(JSON.stringify(r))}`}baseKey(){let e=[he(),this.options.image??null,this.options.tools??[]];return`base:${this.options.region??``}:${ke(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 P(`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 P(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 P){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 P)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 P(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@${he()}`,...this.options.tools??[]].join(` `)}`,...et()].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:Ye}),o?{networkPolicy:o}:{});return nt({sandbox:l.sandbox,command:l.command})}catch(e){if(!(e instanceof P))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`,Ze],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 Wn=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function Gn(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:Kn(t,e)}}function Kn(e,t){let n=t.config??{};if(e===`local`)return new rt(t.workDir);if(e===`local-docker`)return new kn(n);if(e===`vercel-sandbox`)return new Un({...t.sandbox,...n});if(e===`github-actions`)return new ft({...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 qn(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Jn(e){return e.local?`local`:`default`}async function Yn(e,t={}){let n=(await e.store.list(`runner`)).filter(({value:n})=>qn(n,t.requester)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`)),r=t.runner??t.agent;if(r===Jn(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 Xn(e,t,n){let r={...t.config,...N(e.config,t.secret)};return Kn(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 F(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}N(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:Xn(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}function Zn(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 I=class extends Error{};async function Qn(e,t){let n=Date.now(),r=new AbortController,i,a=new Promise((e,t)=>{i=setTimeout(()=>{r.abort(),t(new I(`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,...N(e.config,t.secret)}:e.config.runnerConfig??{};if(n===`local`){if(!e.local)throw new I(`Local runners require a local server`);return`This machine is available`}if(n===`http`){let n=t?Xn(e,t):e.runners.http;if(!(n instanceof jn)||!(await n.health(r.signal)).ok)throw new I(`Runner health check failed`);return`Runner is reachable`}if(n===`local-docker`){if(!e.local)throw new I(`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 I(`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 I(`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 I(`Invalid team response`);if(i.team&&!o.teams.some(e=>e.id===i.team||e.slug===i.team))throw new I(`Team is not accessible`);return`Teams are accessible`})()]),ms:Date.now()-n}}catch(e){return{ok:!1,detail:e instanceof I?e.message:`Runner check failed`,ms:Date.now()-n}}finally{clearTimeout(i)}}function $n(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 er(e){let t=new Map,r=[...n(e),...ve(e,{migrate:!1})].sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt));for(let e of r){let n=$n(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:!!nr()}}const tr=e=>(process.env.PATH??``).split(T.delimiter).some(t=>t&&O.existsSync(T.join(t,e)));function nr(){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(tr(`zenity`))return[`zenity`,[`--file-selection`,`--directory`,`--title=${e}`]];if(tr(`kdialog`))return[`kdialog`,[`--getexistingdirectory`,At.homedir(),`--title`,e]]}async function rr(){let e=nr();if(!e)return{ok:!1,detail:`This machine has no folder dialog; type a path instead`};try{let{stdout:t}=await Nt(Ct)(e[0],e[1],{timeout:6e5}),n=t.trim().replace(/(.)[\\/]+$/,`$1`);return n?$n(n):{ok:!1,detail:``}}catch{return{ok:!1,detail:``}}}function ir(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 ar(e){let t=typeof e==`string`?e.trim():``,n=ir(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=>Nt(Ct)(`git`,e,{env:a,signal:i,maxBuffer:67108864});try{await Je(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 or=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function L(e,t){return e.get(`agent`,t)}async function sr(e){return(await e.list(`agent`)).map(e=>e.value)}async function cr(e,t,n){let r=n??(await L(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,or(t,r))}async function R(e,t){if(e.listAgentsWithVersions)return(await e.listAgentsWithVersions(t))[0]??{};let n=await L(e,t);return{record:n,version:n&&await cr(e,t,n.currentVersion)}}async function lr(e){if(e.listAgentsWithVersions)return e.listAgentsWithVersions();let t=await sr(e);return Promise.all(t.map(async t=>({record:t,version:await cr(e,t.id,t.currentVersion)})))}async function ur(e,t,n){if(e.publishAgent){let r=Se(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 R(e,t.id),i=await dr(e,t,n,r);return{record:await L(e,t.id),version:i,unchanged:r.record?.currentVersion===i.version}}async function dr(e,t,n,r){if(!r&&e.publishAgent)return(await ur(e,t,n)).version;let i=Se(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await L(e,t.id),s=r?r.version:o?await cr(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=>Mt(e.definition,i)&&e.systemPrompt===t.systemPrompt&&Mt(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return Mt(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`,or(t.id,r),u);r++){let n=await e.get(`agentversion`,or(t.id,r));if(n&&l(n)){u=n;break}}let d=await L(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function fr(e,t,n,r=Date.now()){let i=await L(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 pr=[`read-only`,`workspace-write`,`auto`];function mr(e,t){if(Array.isArray(e))return[...new Set(e)];let n=ye.indexOf(e);return[...new Set(ye.slice(0,n+1).flatMap(e=>t?.tools.presets[e]??[]))]}function hr(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?mr(t.allowedTools,r[e]).filter(t=>new Set(mr(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&&pr.indexOf(l)<=pr.indexOf(c)?l:c;return{...i,...a,permissions:u,...o.size?{integrations:s}:{}}}function gr(e,t,n,r=Me){let i=hr(t.definition,void 0,e.settings,r),a=hr(t.definition,i,n,r),[o]=Ce({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 _r(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,_r(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=O.readFileSync(T.join(e,i),`utf8`))}return n}async function vr(e,t,n,r){let i=xe()[n];return i?await dr(e,{id:n,source:`builtin`,definition:i.json,systemPrompt:O.readFileSync(T.join(i.dir,`system.md`),`utf8`),files:_r(i.dir),importedFrom:`builtin:${he()}`},t,r)!==r.version:!1}async function yr(e,t,n){let r=n??await Promise.all(Object.keys(xe()).map(t=>R(e,t))),i=!1;for(let n of Object.keys(xe()))await vr(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}const br=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function xr(e,t,n,r){return{method:e,pattern:t,handler:n,...r?{guard:r}:{}}}function Sr(e,t,n){return t.map(t=>({...t,pattern:e+t.pattern,...n&&!t.guard?{guard:n}:{}}))}function Cr(e,t,n){return[e,`${e}/*`].flatMap(e=>br.map(r=>xr(r,e,t,n)))}function wr(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 Tr(e,t,n,r){for(let i of e){let a=wr(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=it();return l.headers.set(`allow`,[...new Set(o.map(e=>e.method))].join(`, `)),l}}const Er=`coder`;function Dr(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 Or=`The Coder dashboard is not built; run bun run build.`,kr=[`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 Ar(e){let t=T.dirname(gt(e));for(;;){let e=T.join(t,`package.json`);if(bt(e))try{if(JSON.parse(xt(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 jr(e=import.meta.url){let t=T.dirname(gt(e)),n=Ar(e),r=gt(new URL(`./dash/standalone/server/entry.js`,import.meta.url));return[T.resolve(r,`../../..`),T.join(n,`dist/dash`),T.join(t,`../dash`)].find(e=>bt(Mr(e)))}const Mr=e=>T.join(e,`standalone/server/manifest.json`);function Nr(e){let t=T.join(e,`standalone/server/entry.js`);if(!bt(t))throw Error(`The Coder dashboard server bundle is missing.`);return t}async function Pr(e){let t=jr(e);if(!t)throw Error(Or);let n=JSON.parse(xt(Mr(t),`utf8`));return{handler:await(await import(_t(Nr(t)).href)).createRequestHandler({root:T.join(t,`standalone`)}),manifest:n}}var Fr=class{hosts=new Map};function Ir(e){let t=jr(e);if(t)try{return St(Mr(t)).mtimeMs}catch{return}}function Lr(e,{hosts:t}){let n=Date.now(),r=t.get(e);if(r&&n-r.checked<1e3)return r.host;let i=Ir(e);if(r&&(r.checked=n,i===void 0||i===r.build))return r.host;let a={build:i,checked:n,host:Pr(e)};return t.set(e,a),a.host}function Rr(e,t){let n=e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e;return!!(wr(`/assets/*`,n)||wr(`/dash/*`,n)||t.routes.some(e=>wr(e.route,n)))}const zr=/<script(?![^>]*\bsrc=)[^>]*>([\s\S]*?)<\/script>/gi,Br=e=>`'sha256-${Dt(`sha256`).update(e).digest(`base64`)}'`;function Vr(e){let t=[...e.matchAll(zr)].map(e=>Br(e[1]));return[...kr,`script-src 'self' ${t.join(` `)}`.trim()].join(`; `)}function Hr(e,t){return t===`gzip`?zt(e).toString(`utf8`):t===`br`?It(e).toString(`utf8`):t===`deflate`?Vt(e).toString(`utf8`):e.toString(`utf8`)}const Ur=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 Wr(e){e.set(`content-encoding`,`gzip`),/accept-encoding/i.test(e.get(`vary`)??``)||e.append(`vary`,`accept-encoding`)}function Gr(e){let t=Rt(),n=e=>new Promise(n=>{t.write(e),t.flush(Lt.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 Kr(e,t,n,r){n.set(`content-security-policy`,[...kr,`script-src 'self' 'nonce-${r}'`].join(`; `));let i=t.body;return Ur(e)&&(Wr(n),i=Gr(i.getReader())),new Response(i,{status:t.status,statusText:t.statusText,headers:n})}async function qr(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 Kr(e,t,r,n);let a=Buffer.from(await t.arrayBuffer()),o=Hr(a,i);r.set(`content-security-policy`,Vr(o));let s=i?new Uint8Array(a):o;return!i&&o.length>1024&&Ur(e)&&(s=new Uint8Array(Bt(o)),Wr(r)),new Response(s,{status:t.status,statusText:t.statusText,headers:r})}async function Jr(e,t=import.meta.url,n=new Fr){let r;try{r=await Lr(t,n)}catch(e){if(n.hosts.delete(t),e instanceof Error&&e.message===Or)return;throw e}if(!Rr(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}'`),qr(e,await r.handler(new Request(e,{headers:a})),i)}const Yr=(e,t,n=!1)=>`coder_admin=${encodeURIComponent(t)}; HttpOnly; SameSite=Strict; Path=/${new URL(e.url).protocol===`https:`?`; Secure`:``}${n?`; Max-Age=0`:``}`;function Xr(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 Zr(e,t,n,r){let i=await e.formData(),a=i.get(`token`),o=i.get(`return`),s=Dr(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":Yr(e,a)}}):lt(`/dash?token=rejected`,303):new Response(null,{status:303,headers:{location:s,"set-cookie":Yr(e,``,!0)}}):lt(`/dash?token=rejected`,303)}async function Qr(e,t,n,r){return lt(!t.auth||t.session?`/dash`:r.searchParams.has(`signed_out`)?`/login?signed_out=1`:`/login`)}async function $r(e,t,n,r){let i=`/api/auth/sign-in?return=${encodeURIComponent(Dr(r,n.origin))}`,a=t.config.publicUrl;return a&&new URL(Xr(e,n)).host!==new URL(a).host?lt(new URL(i,a).href):t.auth.handler(new Request(`${n.origin}${i}`))}async function ei(e,t,n,r){return t.auth&&!r.searchParams.has(`signed_out`)&&!r.searchParams.has(`error`)?$r(e,t,r,r.searchParams.get(`return`)):await Jr(ri(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ti(e,t,n,r){return await Jr(ri(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ni(e,t,n,r){return await Jr(ri(e,t),void 0,t.dashboardHosts)??w()}function ri(e,t){let n=new Headers(e.headers);return n.set(`x-coder-mode`,Vi(t)),new Request(e,{headers:n})}async function ii(e,t,n){return await Jr(ri(e,t),void 0,t.dashboardHosts)??w()}function ai(){return(process.env.PATH??``).split(T.delimiter).some(e=>{try{let t=T.join(e,`docker`);return vt(t,yt.X_OK),St(t).isFile()}catch{return!1}})}function oi(e){let t=!!e.local,n=t&&ai();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 si=D.string().check(D.minLength(1),D.maxLength(80)),ci=D.enum([`personal`,`workspace`]),li=D.record(D.string(),D.string()),ui=D.strictObject({kind:D.enum([`local`,`local-docker`,`github-actions`,`vercel-sandbox`,`http`]),name:si,scope:ci,config:li}),di=D.strictObject({name:D.optional(si),default:D.optional(D.literal(!0)),config:D.optional(li)});function fi(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 pi(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})=>qn(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 fi(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}=pi(t),l=await s(),u=l.find(({value:e})=>e.scope===`personal`&&e.default)??l.find(({value:e})=>e.default),d={id:Jn(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})=>fi(e,t,a,e===u?.id))],catalog:oi(t)})}async function hi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=pi(t);{let n=ui.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=oi(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{Zn(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}=pi(t);if(i===Jn(t))return S(await Qn(t));let u=e=>{if(!e||!qn(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 Qn(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}=pi(t);if(i===Jn(t)){if(B(t)){let n=di.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||!qn(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=di.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,...N(t.config,r.secret),...a.data.config};try{Zn(oi(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}=pi(t);if(i===Jn(t))return S({error:`The server default cannot be renamed or removed.`},403);let u=e=>{if(!e||!qn(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(oi(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:M(n.config,Object.fromEntries(i.filter(([e])=>r.has(e))))}}const bi=D.strictObject({name:D.optional(si),scope:ci});async function xi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=pi(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:${ke(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=j(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:${ke(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`||!Ne(N(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({...fi(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=pt(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 F(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=pt(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=mn(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=mn(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=mn(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=mn(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(()=>{}),s=(t.now??Date.now)();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:dn(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{...j(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&&Ne(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}:ot():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)?ot():{...j(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?st(new URL(e.url)):{...j(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=j(t,i),s=await o.store.get(`runner`,r);if(s?.kind===`http`&&Ne(N(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=mn(a);return o.task!==i||typeof o.organization!=`string`||!o.organization||!Number.isInteger(o.attempt)||(t.scope&&(t=j(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=j(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}=mn(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?j(t,i):t,o=n.id,s=await a.store.get(`login`,o);return!s||!Ne(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`)??ut(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&&Xt(t,i)===`*`&&Yt(t,i)===a?{...j(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}:st(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:nl},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&&!rl(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:ii(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)?ot():{...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:ot():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?lt(`/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&&!i?$r(e,t,r,r.pathname+r.search):t.auth&&!(await Fi(e,t))?.session?st(r):t}function va(e,t,n,r){return e.method===`POST`&&t.local?S({error:nl},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`?st(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)?M(t,N(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(!at(r))return S(s);let c=ct(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(dt(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 il(i),S(await sl())}async function $a(e,t,n,r){let i=n.engine;return await al(i),S(await sl())}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`&&!r.unarchive?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 c(`apps.json`)}get deliveriesFile(){return T.join(pe(``),`deliveries.json`)}get notesDir(){return T.join(pe(``),`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`?ee():e===`snapshot`?T.join(pe(``),`snapshots.json`):T.join(pe(``),`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,n,r){let i=await be(t,n),a=await Promise.all(i.filter(e=>!r||e.id===r).map(async t=>{let n=t.usage?{settings:t.usage}:{};if(t.builtin){let{record:r,version:i}=await R(e,t.id);if(!r)return;let a={...r,settings:void 0,...n,local:!0};return await e.put(`agent`,t.id,a),{record:a,version:i}}if(!t.dir)return;let r=await lo(t.dir),i=O.statSync(T.join(t.dir,`agent.json`)),a=T.join(t.dir,`system.md`),o={agent:t.id,version:1,definition:t.definition,systemPrompt:O.existsSync(a)?O.readFileSync(a,`utf8`):``,files:_r(t.dir),...r?{commit:r}:{},importedFrom:`local:${t.dir}`,createdAt:i.mtimeMs},s={id:t.id,name:t.name,...t.definition.description?{description:t.definition.description}:{},source:T.resolve(t.dir)===c(`agents`,t.id)?`home`:`repo`,path:t.dir,currentVersion:1,...n,local:!0,...r?{commit:r}:{},createdAt:i.birthtimeMs||i.mtimeMs,updatedAt:i.mtimeMs};return await e.put(`agentversion`,or(t.id,1),o),await e.put(`agent`,t.id,s),{record:s,version:o}}));if(!r){let t=new Set(i.map(e=>e.id));for(let n of await sr(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return a.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function fo(e,t,n,r){let i=(await be(e,t)).find(e=>e.id===n&&!e.builtin)?.dir??c(`agents`,n),a={...r.files,"agent.json":`${JSON.stringify(r.definition,null,2)}\n`,"system.md":r.systemPrompt};for(let[e,t]of Object.entries(a))O.mkdirSync(T.dirname(T.join(i,e)),{recursive:!0}),O.writeFileSync(T.join(i,e),t)}async function po(e,t,n){let r=(await be(e,t)).find(e=>e.id===n&&!e.builtin);if(!r?.dir)throw Error(`No local agent named "${n}".`);return T.resolve(r.dir)===c(`agents`,n)&&(O.rmSync(r.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=$n(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 ce))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 El(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),N(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):R(e.store,o),c=await s();await vr(e.store,i,o,c)&&(c=await s());let{record:l,version:u}=c,d=await Yn(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=gr(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=we(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 cl(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?Kc(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,i={}){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`);let{model:a,effort:o,permissions:s}=i;if(a!==void 0&&(typeof a!=`string`||!a.trim()))throw new U(`model must be text`);if(o!==void 0&&!vo.has(o))throw new U(`Unknown effort "${o}"`);if(s!==void 0&&!(s in ce))throw new U(`Unknown permissions "${s}"`);let c=e=>Object.keys(ce).indexOf(e??`auto`);if(s!==void 0&&c(s)>c(t.task.permissions))throw new U(`permissions can only be lowered on a resumed task (it runs ${t.task.permissions??`auto`})`);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 l=(e.now??Date.now)(),u=t.task.context?.messages??[],d=String(t.finishedAt??l),f=[...u,{user:`user`,text:t.task.prompt??t.task.event?.text??``,ts:String(t.createdAt)},{user:`agent`,text:t.result?.output??t.error??``,ts:d}].slice(-20),{note:p,...m}=t.task.context??{},h=Co(t);h.at(-1).finishedAt??=l;let g={task:{...t.task,prompt:n,...a||o?{usage:{...t.task.usage,...a?{model:a}:{},...o?{effort:o}:{}}}:{},...s?{permissions:s}:{},context:{...m,...r?{outputSchema:r}:{},messages:f,turns:h}},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:l};if(!await e.queue.continueTask(e.organizationId,t.task.id,g.task,l,{attempts:t.attempts,tokenHash:t.tokenHash??null,generation:t.generation??0}))throw new U(`Task is already active`,409);return g}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(r===`/dash`||r.startsWith(`/dash/`))&&t.auth&&!await t.auth.session(e.headers)?ko(t,void 0,n,`auth`)??{}:{};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 Hc(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 F(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(j(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(f(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=j(e,u.organizationId),p=u.status;if(await Vc(d,p)){if(n=u.more,!u.more)break;continue}let m=await F(d,p.task);if(!m){await Mo(d,p,`No runner available: ${p.task.runner}`);continue}let h=p,g={generation:p.generation??0,attempts:p.attempts,tokenHash:p.tokenHash??null,statuses:[`running`,`waiting`]},_;try{let e=m.start(p.task,{CODER_SERVER:d.local&&m.kind===`local`?`http://localhost:${d.local.port}`:d.config.publicUrl??``,CODER_TASK_TOKEN:u.token,CODER_INBOX_MODE:m.push?`push`:`poll`},m.kind===`vercel-sandbox`?(await Pc(d,p.task)).env:void 0);if(_=await Ao(e,3e4,`runner start`).catch(t=>{throw e.then(e=>jo(m,e,p.task.id),()=>{}),t}),await d.queue.patchTask(u.organizationId,p.task.id,{handle:_},r(),g)||await jo(m,_,p.task.id),n=u.more,!u.more)break}catch(e){_!==void 0&&await jo(m,_,p.task.id);let t=e instanceof Error?e.message:String(e);if(p.attempts<(d.config.taskAttempts??2)){o.push({...u,status:h});continue}await Mo(d,h,t)}}for(let t of o)await j(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 qt(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 Tl(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 s=await e.store.get(`task`,a.id);if(s&&[`queued`,`running`,`waiting`].includes(s.status)&&Q(s.task)===i)return s.task.id;let c=f(e.local.cwd,a.id);if(!c){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 Kc(e,t.task,t.taskId),c=f(e.local.cwd,a.id)}if(!c||c.agentId!==n)return;let l=o(e.local.cwd,c);return l.status===`running`||l.status===`queued`?l.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,o,s=!1){let c=kt(),l={event:n,...o?{task:o,taskId:o.flow==="default"?a():He()}:{}},u;if(e.local&&!n.repo){let n=await e.store.get(`delivery`,t);if(n&&!n.pending)return{};if(l=n?.pending??l,l.task&&!l.taskId)throw Error(`Local delivery has no task binding`);if(u=n?.session,!u&&s&&l.task){let t=Q(l.task);u={key:t,id:l.taskId,version:((await ts(e,t))?.version??0)+1,requester:l.task.requester,actor:l.task.event.actor.id}}await e.store.put(`delivery`,t,{at:r(),owner:c,pending:l,...u?{session:u}:{}})}else if(!await e.store.create(`delivery`,t,{at:r(),owner:c,pending:l},{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,c,{at:r(),owner:c,pending:l},{ttlMs:Ro})}).catch(()=>{})},Ro/3);try{await i(l),a&&clearInterval(a),await n,await e.store.updateDelivery(t,c,{at:r(),...u?{session:u}:{}},{ttlMs:zo})}catch(r){throw a&&clearInterval(a),await n,(!e.local||!l.task)&&await e.store.updateDelivery(t,c,void 0).catch(()=>{}),r}})()}}async function rs(e,t,n,r,i,a,o,s,c){let u=t=>ns(e,c,i,o,t);if(Uo(i))return e.auth&&Go(i)&&!await Jo(e,t,i)?u(()=>Yo(e,t,a,i,s,o(),!0)):u(()=>Ko(i,a,e.store).then(e=>s.whisper(e)).then(()=>{}));let d=await Tc(e,t,a,r,Dc(i.repo,t.tools.presets.observe)),p=await jc(e,a,i,d),[m,h]=await Promise.all([e.loadAgent(n,a,i,p),e.auth&&i.actor.id?Jo(e,t,i):void 0]);if(!h&&e.auth&&i.actor.id&&t.events[i.type]?.addressed)return u(()=>Yo(e,t,a,i,s,o()));let g=h?.id,_=Qe(i,m);if(!_)return{};let v=i.chat&&_.flow==="default"&&t.events[i.type]?.steers,ee=t=>ns(e,c,i,o,async t=>{let n=t.task,r=await Kc(e,n,t.taskId);if(v){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,!!v);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:m.id,requester:g,event:i})||e.flow!==_.flow?{}:ee(e)}}let y=e.local&&!i.repo&&v?await $o(e,i,m.id,g):void 0;if(y){let t=await e.store.get(`task`,y),n=f(e.local.cwd,y);return!n||t?.status===`queued`?u(async()=>{t&&await gl(e,y,`steer`,{text:i.text},t.generation??0)}):n.threadId?u(()=>Le(e.local.cwd,n,i.text).then(()=>{})):u(async()=>{l(e.local.cwd,y,i.text)})}let te=we(m),ne=Xo(p,m),[re,ie,ae,b]=await Promise.all([Yn(e,{requester:g,agent:m.definition.runner}),Ta(e.store,te.engine,g),Zo(e,a,i),fn(e,t,a,i,ne,m,t.events[i.type]?.addressed&&t.history!==!1?s.recent:void 0,h??null)]);if(!ie&&re.runner!==`http`&&!await cl(e,te.engine??`claude`))return(!e.local||i.repo)&&v&&(await e.queue.deliver(e.organizationId,{id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,event:i,requester:g,definition:m.definition,tools:{}},o(),{key:c,ttlMs:864e5},!0,void 0,!1)).steered?{}:u(()=>s.post(Qo(e,te.engine??`claude`)).then(()=>{}));let oe=new Set(t.tools.presets.observe),se=_.tools[i.integration]??[];h&&t.auth.canWrite&&se.some(e=>!oe.has(e))&&!await t.auth.canWrite(i,d)&&(_.tools[i.integration]=se.filter(e=>oe.has(e)));let ce=Object.fromEntries(Object.entries(_.tools).filter(([e])=>e in ne).map(([t,n])=>{if(ae[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(b))>Bo)throw Error(`Task context exceeds 256 KB`);let le={id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,permissions:_.permissions??te.permissions,event:i,author:t.author?.(n.name)??n.name,definition:m.definition,...ie?{credential:ie.id}:{},...g?{requester:g}:{},...m.files?{files:m.files}:{},...m.usage?{usage:m.usage}:{},tools:ce,...Object.keys(ae).length?{toolScopes:ae}:{},...Object.keys(b).length?{context:b}:{}};return e.local&&!i.repo&&re.runner===`local`&&!re.runnerId?ee(le):e.queue.deliver(e.organizationId,le,o(),{key:c,ttlMs:zo},!!v,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,De):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=N(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=mt(e.chatState??new ht,t.id),s=new Ht({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 Ut({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 j(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:N(t.config,s.token)}:s;return{contents:i,token:await i.auth.token(e,N(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=Ae(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 R(t.store,n.agent);c.record&&await vr(t.store,r(),n.agent,c)&&(c=await R(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 gr(l,u,f&&typeof f==`object`?f:void 0,e)}return async(i,a,o,c)=>{let l=(await be(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 vr(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&&!Mt(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);Te(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]=Ce({definitions:{[o]:{json:p,builtin:!1}},usage:void 0},{...Me,[t.id]:t});m&&d.push(await dr(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 cr(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&&Mt(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,N(e.config,a.credentials),{publicUrl:n,definition:o.definition,fetch:e.fetch??fetch,saveCredentials:async t=>{await i.put(`app`,a.id,{...a,credentials:M(e.config,t)})}});t&&await i.put(`app`,a.id,{...a,credentials:M(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=Pe(Fe(),`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 Tl(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 Tl(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:{...j(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=N(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:Jc(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;if(!n)return S({error:`No task "${i}"`},404);let r=await Y(e,n,i,void 0,t);return r.ok&&t.queue instanceof vl&&t.queue.tombstone(i),r}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 Hc(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 F(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 hl(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(Jc(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);let o=await e.json().catch(()=>void 0);if(Hs.has(a.status)){let{text:e,outputSchema:n,model:r,effort:i,permissions:s}=o??{};try{let o=await wo(t,a,String(e??``),n,{model:r,effort:i,permissions:s});return Io(t,!0),S(Ws(o))}catch(e){return W(e)}}let s=await gl(t,i,`steer`,o,a.generation??0);return s?S(s):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 gl(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,`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 gl(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 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,`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 bl(t,i),o?S({ok:!0}):S({error:`No running or queued task "${i}"`},404)}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,`archive`,t):S({error:`No task "${i}"`},404)}let o=(t.now??Date.now)();return await t.queue.patchTask(t.organizationId,i,{archivedAt:o,autoArchived:void 0},o),S({ok:!0})}async function $s(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,N(t.config,i.credentials),c,s,await gs(t,i,c));return zs(t,l.work??Promise.resolve(),l.taskId?[l.taskId]:[])}const ec=new Set([`queued`,`running`,`waiting`,`completed`,`failed`,`cancelled`]);async function tc(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 $s(i,t);let e=(i.source===`cli`?void 0:await zc(t,i))??await So(t,i.source===`cli`?`cli`:`dashboard`,i);return S(Ws(e),201)}catch(e){return W(e)}}function nc(e,t,n){let r=new Map(t.map(e=>[e.task.id,e]));for(let t of n)i(e,t,r.has(t.task.id))&&r.set(t.task.id,t);return[...r.values()]}async function rc(e,t,n,r){n.id;let i=r.searchParams.get(`status`);if(i&&i!==`active`&&!ec.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){await Rc(t,t.local.cwd);let e=nc(t.local.cwd,Lc(t.local.cwd,c.archived),await t.queue.list(t.organizationId)).filter(e=>ll(e,{...c,...l})).sort(dl),n=C(r,at(r)?void 0:20);if(!at(r))return S(u(e.slice(0,n)));let i=ct(r),a=e.filter(e=>fl(e,i)),o=dt(a.slice(0,n+1),n,ul);return S({...o,items:u(o.items),...r.searchParams.get(`counts`)===`1`?{counts:{all:e.length,active:e.filter(e=>Z.includes(e.status)).length,waiting:e.filter(e=>e.status===`waiting`).length}}:{}})}if(await t.queue.archiveStopped(t.organizationId,(t.now??Date.now)()),!at(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=ct(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=dt(m,d,ul);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=N(t,n);return{...r,mcp:Object.fromEntries(Object.entries(r.mcp??{}).map(([e,t])=>[e,{...t,...i[e]}]))}}function oc(){let e=ae();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=te(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 _e({...t,...t.mcp?{mcp:r}:{}}),cc(e);let o={...t,...t.mcp?{mcp:a}:{},...Object.keys(i).length?{sealed:M(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:M(t,N(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(me(t.local.cwd)):m(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:N(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=M(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(N(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:M(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 N(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),N(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,N(e.config,i.credentials),Dc(t.toolScopes?.[n.integration]?.repo??n.repo,t.tools[n.integration]??(o?r.tools.presets.comment:[])),Ee(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:()=>nl,engineSignIn:()=>il,engineSignOut:()=>al,engineStatus:()=>sl,inspectLocalTask:()=>Hc,isLoginEngine:()=>rl,localLog:()=>Jc,localTask:()=>J,localTaskAction:()=>Y,localTasks:()=>Lc,localUsage:()=>Yc,machineSignedIn:()=>cl,pushLocalInbox:()=>qc,recoverLocalTasks:()=>Wc,runLocalTask:()=>Kc,startLocalTask:()=>zc,startQueuedLocalTask:()=>Vc,stopLocalTasks:()=>Gc,sweepLocalQueue:()=>Rc,syncLocalUsage:()=>Qc});const Ic=e=>!e.name?.startsWith(qe),K=e=>e?Date.parse(e):void 0;function q(e,n,r=!1){let i=K(n.createdAt)??0,a=t(T.join(b(e,n.id),`answers.json`)),o=n.status===`running`?h(b(e,n.id)).find(e=>!e.response):void 0,s=r&&!y.includes(n.status)?oe(e,n.id):null,c=r?le(e,n.id).filter(e=>!y.includes(n.status)||(K(e.at)??0)<(K(n.resumedAt)??i)).map(e=>{let t=e.error&&typeof e.error==`object`?e.error.message:void 0;return{prompt:e.prompt??n.prompt??``,result:{ok:e.status===0,output:e.finalMessage??t??``},...t?{error:t}:{},finishedAt:K(e.at)}}):[];r&&(y.includes(n.status)||!c.length||(c.at(-1)?.finishedAt??0)<(K(n.resumedAt)??i))&&c.push({prompt:n.currentPrompt??n.prompt??``,...s?{result:{ok:s.status===0,output:s.finalMessage??s.error?.message??``}}:{},...n.error?{error:n.error}:{},...y.includes(n.status)?{}:{finishedAt:K(n.completedAt)}});let l=n.flowRunId?Ve(n.flowRunId)?.name:void 0;return{task:{id:n.id,source:n.source??`cli`,agent:n.agentId??`coder`,flow:l??`default`,...n.name?{name:n.name}:l?{name:l===`review`?`Review`:l}:{},runner:`local`,...n.cwd?{cwd:n.cwd}:{},...n.permissions?{permissions:n.permissions}:{},...n.prompt?{prompt:n.currentPrompt??n.prompt}:{},definition:{integrations:{}},...n.engine?{usage:{engine:n.engine,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}}}:{},tools:{}},status:o?`waiting`:n.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}:{}}:{},...n.error?{error:n.error}:{},...n.fallbacks?.length?{fallbacks:n.fallbacks}:{},...n.archivedAt?{archivedAt:K(n.archivedAt)}:{},...n.autoArchived?{autoArchived:!0}:{},createdAt:i,startedAt:K(n.resumedAt)??i,...n.completedAt&&!y.includes(n.status)?{finishedAt:K(n.completedAt)}:{},updatedAt:K(n.updatedAt)??i,local:!0,...r?{turns:c}:{}}}function Lc(e,t){let n=Be(e);return(t?ve(e,{migrate:!1}):n).filter(Ic).map(n=>{let r=q(e,n);return t?{...r,archivedAt:r.archivedAt??r.updatedAt}:r})}async function Rc(e,t){let n=(e.now??Date.now)(),a=(await e.queue.list(e.organizationId,{archived:!1,statuses:[...se]})).filter(e=>r(e.finishedAt??e.updatedAt,n)&&i(t,e)).map(e=>e.task.id);a.length&&await e.queue.archiveStopped(e.organizationId,n,a)}async function zc(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 R(e.store,t.agent??`coder`),o=await Yn(e,{requester:e.session?.user.id,runner:t.runner,agent:i?.definition.runner}).catch(e=>{throw new U(e.message)});if(!(o.runner!==`local`||o.runnerId)){if(yo(t),!n)return Bc(e,{id:a(),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 Ge(r,t.agent,t.mcp?.join(`,`)):void 0,i=[],a=await ue({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?.join(`,`),nativeMcp:e?.nativeMcp,...e?{agentId:t.agent}:{},source:`dashboard`,onFallback:e=>i.push(e)},{waitForStartup:!1});return q(r,i.length?v(r,a.taskId,{fallbacks:i}):a.task)}catch(e){throw e instanceof d?new U(e.message,409):e}}}async function Bc(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 Vc(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"?f(n.cwd,t.task.id):void 0;if(i&&!n.resume)r=i.id;else if(n.resume){let e=f(n.cwd,t.task.id);if(!e)throw Error(`Local task is missing`);await Le(n.cwd,e,t.task.prompt??``,{outputSchema:t.task.context?.outputSchema,...n.overrides})}else n.input?await zc(e,{...n.input,prompt:t.task.prompt,outputSchema:t.task.context?.outputSchema??n.input.outputSchema},t.task.id):r=(await Kc(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=f(n.cwd,r);return e&&await Re(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),Uc(e,r,i);let o=bl(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 Hc(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=Ve(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 Ue(t.task.id),r=Ve(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=f(r.cwd,r.startedId??t.task.id);e&&await Re(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 Uc(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 s=kt(),c={owner:s,pid:process.pid,pending:!0,posted:a?.posted??!1};if(a?.owner){if(!await e.store.updateDelivery(r,a.owner,c))return}else if(!await e.store.create(`delivery`,r,c))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=f(n.cwd,t);if(!r)return;let s=o(n.cwd,r);if(!y.includes(s.status)){let e=T.join(b(n.cwd,t),`result.json`),r=Math.max(K(s.completedAt)??0,K(s.resumedAt)??K(s.createdAt)??0);if(O.existsSync(e)&&O.statSync(e).mtimeMs>=r&&(a=oe(n.cwd,t)),a)break;if(s.error||s.status===`cancelled`){a={status:1,threadId:s.threadId??null,error:{message:s.error??`Task cancelled`}};break}}await new Promise(e=>setTimeout(e,100))}let l=await e.store.get(`task`,n.task.id);if(n.fence&&l&&(l.generation??0)===n.fence.generation&&l.attempts===n.fence.attempts&&l.tokenHash===n.fence.tokenHash&&await Hc(e,l,(e.now??Date.now)())&&Io(e,!0),!await e.store.updateDelivery(r,s,c))return;if(!c.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),o=await i(e,t,n.task.event);if(!await e.store.updateDelivery(r,s,c)||(await o.post((a.finalMessage??a.error?.message??``).trim()),c={...c,posted:!0},!await e.store.updateDelivery(r,s,c)))return}let u=T.join(b(n.cwd,t),`agent-note`),d=O.existsSync(u)?O.readFileSync(u,`utf8`).trim():(n.task.context?.note??``).trim();if(!await e.store.updateDelivery(r,s,c))return;d!==(n.task.context?.note??``).trim()&&(d?await e.store.put(`note`,dn(n.task),d):await e.store.delete(`note`,dn(n.task))),await e.store.updateDelivery(r,s,{posted:c.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,s,{...c,pid:void 0})}})().catch(e=>{console.error(`coder server: local completion ${t} failed`,e)}).finally(()=>{r.delete(t)})}async function Wc(e){if(e.local)for(let{id:t,value:n}of await e.store.list(`snapshot`,{prefix:`completion:`}))f(n.cwd,t.slice(11))&&Uc(e,t.slice(11),n)}async function Gc(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 Kc(e,t,r,i=!1){if(t.event?.repo){let n=(e.now??Date.now)(),i=r??t.id;return await e.store.get(`task`,i)||await e.queue.enqueue(e.organizationId,{...t,id:i},n,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!1,!0),await e.store.get(`task`,i)}if(!i){let n=mo(e,t)??e.local.cwd;return Bc(e,{...t,id:r??a(),cwd:n},{cwd:n})}let o=t.event?await Mc(e,t):{},s=t.event&&o[t.event.integration],c=mo(e,t)??e.local.cwd,l=await e.store.get(`task`,r??t.id),u={task:t,cwd:c,...l?{fence:{generation:l.generation??0,attempts:l.attempts,tokenHash:l.tokenHash,statuses:[`running`,`waiting`]}}:{}},d=t.flow!=="default"&&r?Ve(r):void 0;if(d){let i=n(c).find(e=>e.flowRunId===r),a=(e.now??Date.now)();return i?q(c,i):{task:t,status:d.status===`running`?`running`:d.status===`completed`?`completed`:`failed`,attempts:1,createdAt:a,updatedAt:a,local:!0}}if(t.flow==="default"){r??=a();let n=`completion:${r}`,i=await e.store.get(`snapshot`,n);if(i&&Q(i.task)!==Q(t))throw Error(`Local completion belongs to another session`);i||await e.store.create(`snapshot`,n,u);let o=T.join(b(c,r),`agent-note`);O.existsSync(o)||(O.mkdirSync(T.dirname(o),{recursive:!0}),O.writeFileSync(o,t.context?.note??``,{mode:384}))}let p=t.flow==="default"&&r?f(c,r):void 0;if(p)return p.status===`queued`&&!p.pid&&_(c,p.id),Uc(e,p.id,u),q(c,p);let m,h=new Promise(e=>m=e),g;g=Ke({cwd:c,agent:t.agent,flow:t.flow,task:t,taskId:r,toolEnvironment:{tokens:o},post:t.flow!=="default"&&t.source===t.event?.integration,...t.flow==="default"?{noteFile:T.join(b(c,r),`agent-note`)}:{},...s?{postToken:s}:{},source:t.source,onStart:n=>{(e.store.localFlows??=new Map).set(t.id,{stop:async()=>{n.requestStop(),await We(n.runId,n.runningIds())},work:g}),m(t.id)},onTask:n=>{t.flow==="default"&&Uc(e,n,u),m(n)}}).then(async n=>{t.flow!=="default"&&n.note!==void 0&&(n.note?await e.store.put(`note`,dn(t),n.note):await e.store.delete(`note`,dn(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===u.fence?.attempts&&n.tokenHash===u.fence?.tokenHash&&(n.generation??0)===u.fence?.generation&&await Hc(e,n,(e.now??Date.now)()),Io(e,!0)}}),g.catch(()=>{});let v=await Promise.race([h,g.then(()=>void 0)]),ee=v?f(c,v):void 0,y=(e.now??Date.now)();return ee&&q(c,ee)||{task:t,status:t.flow!=="default"&&Ve(t.id)?.status===`running`?`running`:`completed`,attempts:1,createdAt:y,updatedAt:y,local:!0}}async function qc(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=f(i.cwd,r);if(!s)throw Error(`Local task is missing`);let c=o.kind===`cancel`?await Re(i.cwd,s):await Xe(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 Jc(e,t,n=-1,r){let i=``;try{i=O.readFileSync(T.join(b(e,t),`log.jsonl`),`utf8`)}catch{}let a=i.split(`
|
|
8
|
+
`).flatMap((e,t)=>{if(!e||t<=n)return[];let r=pt(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=f(e,t);return r&&Ic(r)?q(e,o(e,r),n):void 0}async function Y(e,n,r,i,a){let c=f(n,r);if(!c||!Ic(c))return Response.json({error:`No task "${r}"`},{status:404});let l=o(n,c),d=y.includes(l.status),p=e.method===`POST`?await e.json().catch(()=>({})):{},m=(e,t=409)=>Response.json({error:e},{status:t});if(e.method===`DELETE`&&!i){if(d&&await Re(n,l),Ie(n,l),a){let e=a.store.completionWatches?.get(r);e&&(e.stopped=!0,await e.work),await a.store.delete(`task`,r),await a.store.delete(`snapshot`,`local-start:${r}`),await a.store.delete(`snapshot`,`completion:${r}`),Io(a,!0)}return Response.json({ok:!0})}if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(i===`cancel`)return d?(await Re(n,l),Response.json({ok:!0})):m(`No running or queued task "${r}"`,404);if(i===`archive`)return u(n,l),a&&await a.queue.patchTask(a.organizationId,r,{archivedAt:(a.now??Date.now)(),autoArchived:void 0},(a.now??Date.now)()),Response.json({ok:!0});if(i===`steer`){let e=String(p.text??``);if(!e.trim())return m(`text is required`,400);let t=d?void 0:p.outputSchema,i=Object.fromEntries([`model`,`effort`,`permissions`].flatMap(e=>typeof p[e]==`string`&&p[e]?[[e,p[e]]]:[]));if(t!==void 0&&(!t||typeof t!=`object`||Array.isArray(t)))return m(`outputSchema must be an object`,400);try{if(!d&&a){let o=a.store.completionWatches?.get(r);o&&await o.work;let s=(a.now??Date.now)(),c=await a.store.get(`task`,r);c&&[`running`,`waiting`].includes(c.status)&&(await Hc(a,c,s),c=await a.store.get(`task`,r));let u={prompt:e,context:{...c?.task.context,...t?{outputSchema:t}:{}}};if(await a.store.put(`snapshot`,`local-start:${r}`,{cwd:n,resume:!0,...Object.keys(i).length?{overrides:i}:{}}),c){if(!await a.queue.continueTask(a.organizationId,r,u,s,{attempts:c.attempts,generation:c.generation??0}))return m(`Task is already active`)}else await a.queue.enqueue(a.organizationId,{...q(n,l).task,...u},s,void 0,a.config.maxQueued??1e3);await Fo(a,!1,!0,!0);let d=await a.store.get(`task`,r);return Response.json(d?.status===`queued`?{...d,statusReason:`Waiting for a task slot`}:J(n,r))}let o=await Le(n,l,e,{...typeof t==`object`&&t?{outputSchema:t}:{},...i});return Response.json(d?o:J(n,r))}catch(e){return m(e.message)}}if(i===`ask`){let e=String(p.question??p.text??``);if(!e.trim())return m(`question is required`,400);let i=await ze(n,l,e),a=i.finalMessage??i.error?.message??``,o=T.join(b(n,r),`answers.json`);return s(o,[...t(o)??[],a]),Response.json({ok:!0,answer:a})}if(i===`approve`){let e=h(b(n,r)).filter(e=>!e.response),t=String(p.approvalId??p.id??e[0]?.id??``);return e.some(e=>e.id===t)?(ne(b(n,r),t,p.decision===`deny`||p.decision===`decline`?`decline`:`accept`),Response.json({ok:!0})):m(`Task "${r}" has no pending approval`)}return new Response(`Not found`,{status:404})}function Yc(e,t=new Set,r=!0){let i=Xc(t);return[...n(e),...r?ve(e,{migrate:!1}):[]].filter(Ic).flatMap(t=>{let n=le(e,t.id);return Zc(t,n,!n.length&&!y.includes(t.status)?oe(e,t.id):null,i)})}function Xc(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 Zc(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 Qc(e){let t=e.local;return t.usageSync??=tl(e).finally(()=>t.usageSync=void 0)}async function $c(e){try{return JSON.parse(await O.promises.readFile(e,`utf8`))}catch{return null}}async function el(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 tl(e){let t=e.local;await t.cacheMaintenance;let n=de(),r=await $c(n),i=await e.store.list(`usage`,{prefix:`cli:`}),a=new Set(i.map(e=>e.id)),o=0,s=async()=>{++o%4==0&&await new Promise(e=>setImmediate(e))};if(t.archiveScan===void 0)for(let[t,n]of Object.entries(r?.rows??{}))a.has(t)||(await e.store.put(`usage`,t,n),a.add(t)),await s();let c=Xc(a),l=(await O.promises.stat(p(t.cwd)).catch(()=>void 0))?.mtimeMs??0,u={},d=new Set,f=!1;for await(let{id:n,dir:i,archived:a}of fe(t.cwd)){if(await s(),d.has(n))continue;let t=a?await el(i):void 0;if(a&&r?.counted?.[n]===t){u[n]=t,d.add(n);continue}let o=await $c(T.join(i,`job.json`));if(o){if(o.agent&&(o.engine=o.agent),d.add(n),Ic(o)){let t=(await O.promises.readFile(T.join(i,`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 $c(T.join(i,`result.json`)):null;for(let[r,i]of Zc(o,t,n,c))await e.store.put(`usage`,r,i),f=!0,await s()}a&&(u[n]=t)}}if(f||r?.archive!==l||JSON.stringify(r?.counted)!==JSON.stringify(u)){let t=await e.store.list(`usage`,{prefix:`cli:`});await O.promises.mkdir(T.dirname(n),{recursive:!0});let r=re(n);try{await O.promises.writeFile(r,`${JSON.stringify({archive:l,counted:u,rows:Object.fromEntries(t.map(e=>[e.id,e.value]))})}\n`),await O.promises.rename(r,n)}finally{await O.promises.rm(r,{force:!0})}}t.archiveScan=l}const nl=`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}},rl=e=>e in X;function il(e){let t=X[e];wt(t.file,t.login,{detached:!0,stdio:`ignore`}).on(`error`,()=>{}).unref()}function al(e){let t=X[e];return new Promise(e=>Ct(t.file,t.logout,{timeout:15e3},()=>e()))}function ol(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 sl(){let[e,t]=await Promise.all([ol(X.claude),ol(X.codex)]);return{claude:{signedIn:e,command:X.claude.command},codex:{signedIn:t,command:X.codex.command}}}async function cl(e,t){return!!e.local&&(t===`custom`||(await sl())[t]?.signedIn===!0)}const Z=[`queued`,`running`,`waiting`];function ll(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 ul=e=>({rank:ge(e.status),createdAt:e.createdAt,id:e.task.id}),dl=(e,t)=>g(ul(e),ul(t)),fl=(e,t)=>!t||g(ul(e),t)>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)}const ml=6e5;async function hl(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 vl)return e.queue.deleteTask(e.organizationId,n,i);let[{DrizzleStore:a},{task:o,taskTombstone:s},{and:c,eq:l,isNull:u,sql:d},{rows:f}]=await Promise.all([import(`./store-BCBTo0rl.js`),import(`./schema-DoNO0dPh.js`).then(e=>e.u),import(`drizzle-orm`),import(`./shared-TznJgMFW.js`).then(e=>e.g)]);if(!(e.store instanceof a))throw Error(`Task store does not support fenced deletion`);let p=(e.now??Date.now)(),[m]=await f(e.store.db,d`with gone as (
|
|
9
|
+
delete from ${o}
|
|
10
|
+
where ${c(l(o.organizationId,e.organizationId),l(o.publicId,n),l(o.generation,r),l(o.attempts,i.attempts),i.tokenHash===null?u(o.tokenHash):l(o.tokenHash,i.tokenHash),i.handle===null?u(o.handle):l(o.handle,i.handle))}
|
|
11
|
+
returning organization_id, public_id
|
|
12
|
+
), marked as (
|
|
13
|
+
insert into ${s} (organization_id, public_id, deleted_at)
|
|
14
|
+
select organization_id, public_id, ${new Date(p).toISOString()}::timestamptz from gone
|
|
15
|
+
), pruned as (
|
|
16
|
+
delete from ${s}
|
|
17
|
+
where deleted_at < ${new Date(p-ml).toISOString()}::timestamptz
|
|
18
|
+
)
|
|
19
|
+
select count(*)::int as deleted from gone`);return!!m?.deleted}async function gl(e,t,n,r,i){let a=await e.queue.appendInbox(e.organizationId,t,n,r,(e.now??Date.now)(),i);return a&&await bl(e,t),a}const _l=new Set([`completed`,`failed`,`cancelled`]);var vl=class{store;lock=Promise.resolve();tombstones=new Map;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),updatedAt:n}),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,updatedAt:n}),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=pn(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&&_l.has(e.status)||e.status===`queued`)return;if(_l.has(e.status))return e;let o={...e,lastSeenAt:i,updatedAt:i};return await this.store.put(`task`,t,o),o})}async archiveStopped(e,t,n){let i=e=>e!==void 0&&_l.has(e.status)&&e.archivedAt===void 0&&(!n||n.includes(e.task.id))&&r(e.finishedAt??e.updatedAt,t);for(let{value:e}of await this.store.list(`task`))i(e)&&await this.serial(async()=>{let n=await this.read(e.task.id);i(n)&&await this.store.put(`task`,n.task.id,{...n,archivedAt:t,autoArchived:!0})})}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),this.tombstone(t),!0)})}continueTask(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!e||!_l.has(e.status)||!this.allowed(e,i))return!1;let{note:a,...o}=n.context??{},s=await this.store.get(`note`,dn(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,generation:(e.generation??0)+1,inboxSeq:e.inboxSeq,createdAt:e.createdAt,updatedAt:r},{unarchive:!0}),!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||_l.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=>ll(e,t)).filter(e=>fl(e,n)).sort(dl).slice(0,t.limit)}tombstone(e){this.tombstones.set(e,Date.now())}async changes(e,t){let n=e[0]?.organizationId;if(!n)return{rows:[],deleted:[]};for(let[e,t]of this.tombstones)t<Date.now()-6e5&&this.tombstones.delete(e);return{rows:(await this.store.list(`task`)).map(e=>({organizationId:n,status:e.value})),deleted:[...this.tombstones].filter(([,e])=>e>t).map(([e,t])=>({organizationId:n,id:e,at:t}))}}async counts(e,t={}){let n=(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(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(_l.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()}:{},updatedAt: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,updatedAt:i}),s})}};const yl=3e4;function bl(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 F(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,yl);if(t===void 0)return;n=d,i=t}else if(!await e.store.updateDeliveryLease(n,r,{owner:r,failures:i},{ttlMs:yl}))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 qc(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 xl(e){let t=await e.queue.pendingInbox();await Promise.allSettled(t.map(({organizationId:t,status:n})=>bl(j(e,t),n.task.id)))}function Sl(e){let t=xl(e).catch(()=>{});e.waitUntil&&e.waitUntil(t)}const $=`default`;async function Cl(e){if(!e.databaseUrl)throw Error(`DATABASE_URL is required for the Postgres store`);let{connect:t}=await import(`./client-31YzOj-i.js`).then(e=>e.n);return t(e.databaseUrl,e.databasePool)}async function wl(e,t={}){if(e.store!==`postgres`){let e=t.local?new co:new no;return{store:()=>e,queue:new vl(e),chatState:new ht(t.local?T.join(pe(``),`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 Cl(e),[{DrizzleStore:r},{DrizzleQueue:i},{UNSCOPED_ORGANIZATION:a},{PgChatState:o}]=await Promise.all([import(`./store-BCBTo0rl.js`),import(`./queue-yo-Z8TaE.js`),import(`./shared-TznJgMFW.js`).then(e=>e.g),import(`./chat-cknlIhVh.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 Tl(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 El(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{Oo as $,qt as $n,vi as $t,Xs as A,er as An,ca as At,Vs as B,En as Bn,Wi as Bt,Sc as C,vr as Cn,_a as Ct,pc as D,or as Dn,ia as Dt,cc as E,gr as En,Zi as Et,nc as F,Ln as Fn,ha as Ft,xs as G,rn as Gn,Pi as Gt,Is as H,pn as Hn,ya as Ht,Gs as I,N as In,Li as It,Os as J,en as Jn,Mi as Jt,Ds as K,on as Kn,ki as Kt,Ks as L,wn as Ln,Ki as Lt,Ys as M,Wn as Mn,da as Mt,Zs as N,Gn as Nn,aa as Nt,Hs as O,$n as On,Gi as Ot,rc as P,F as Pn,pa as Pt,Eo as Q,$t as Qn,hi as Qt,Js as R,M as Rn,Vi as Rt,bc as S,ur as Sn,va as St,Cc as T,fr as Tn,ua as Tt,Rs as U,nn as Un,Ai as Ut,Fs as V,j as Vn,Qi as Vt,Ls as W,sn as Wn,ji as Wt,Fo as X,Qt as Xn,z as Xt,is as Y,tn as Yn,Ei as Yt,Io as Z,Zt as Zn,gi as Zt,Gc as _,xr as _n,la as _t,Z as a,ni as an,Ya as at,G as b,L as bn,$i as bt,xl as c,ti as cn,Za as ct,sl as d,ei as dn,H as dt,mi as en,Yt as er,po as et,Jc as f,Er as fn,Ua as ft,Wc as g,Cr as gn,fa as gt,Fc as h,Sr as hn,zi as ht,Tl as i,Fr as in,Ia as it,Qs as j,rr as jn,ta as jt,tc as k,ar as kn,sa as kt,Sl as l,ii as ln,Xa as lt,Lc as m,Tr as mn,$a as mt,Cl as n,Ci as nn,fo as nt,vl as o,Zr as on,Da as ot,J as p,Dr as pn,Qa as pt,Ts as q,cn as qn,Ni as qt,El as r,_i as rn,to as rt,ml as s,Qr as sn,xa as st,wl as t,xi as tn,uo as tt,Q as u,Jr as un,Ja as ut,Rc as v,R as vn,oa as vt,xc as w,yr as wn,ma as wt,yc as x,cr as xn,ra as xt,Qc as y,lr as yn,ba as yt,qs as z,xn as zn,ga as zt};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-msOzZFXW.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)`],[`--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"}]; none by default, all adds your engine\'s own MCP servers'],[`--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-CHbOP-p6.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-CaNTsqcD.js`)).commandWorker,run:async()=>(await import(`./run-hiPyO7js.js`)).commandTask,list:async()=>(await import(`./list-CXu4cr8D.js`)).commandTasks,ls:async()=>(await import(`./list-CXu4cr8D.js`)).commandTasks,watch:async()=>(await import(`./watch-DYkC6Q2q.js`)).commandWatch,stream:async()=>(await import(`./watch-DYkC6Q2q.js`)).commandWatch,result:async()=>(await import(`./result-oQey_hdw.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-D47cuggj.js`)).commandSteer,ask:async()=>(await import(`./ask-DdYrvsTk.js`)).commandAsk,stop:async()=>(await import(`./stop-7brPdki9.js`)).commandStop,archive:async()=>(await import(`./archive-C9yrU4Wg.js`)).commandArchive,delete:async()=>(await import(`./delete-Cj16PYaw.js`)).commandDelete,approvals:async()=>(await import(`./approvals-CZt_aPCy.js`)).commandApprovals,approve:async()=>(await import(`./approve-DxjyXd66.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Jt as r,Kt as i,Ot as a,Pt as o,Rt as s,St as c,Tt as l,Vt as u,a as d,b as f,fn as p,h as m,i as h,m as g,nn as _,p as v,pn as y,qt as b,r as x,s as S,t as C,tt as w,un as T,zt as E}from"./dispatch-YW1aqjEg.js";import{n as D}from"./remote-AcWWfKVS.js";import{a as O,c as k,i as A,l as j,n as M,r as N,u as P}from"./actions-CmfXOVXQ.js";import F from"node:path";import I from"node:process";var L=e({tasks:()=>$});function R(e){return{cwd:e.cwd?F.resolve(e.cwd):I.cwd(),...e.server===void 0?{}:{api:D(e)}}}function z(e,t){let n=o(e,t);if(n)return n;throw new c(`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 B(e,t){if(t)return e.tasks.get(t);let[n]=await e.tasks.list({limit:1});if(!n)throw new c(`server`,`No server tasks found.`);return n}function V(e){throw new c(`invalid-option`,`Missing task id.`,{hint:e})}async function H(e,t={}){if(t.outputSchema!==void 0&&(!t.outputSchema||typeof t.outputSchema!=`object`||Array.isArray(t.outputSchema)))throw new c(`invalid-option`,`outputSchema must be an object.`);let{cwd:n,api:r}=R(t);if(r){let n=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-DgI3boHa.js`).then(e=>e.i)).agentTaskOptions(n,t.agent,t.mcp):void 0,a={prompt:e,outputSchema:t.outputSchema,cwd:n,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,wait:t.wait,simulateApproval:t.simulateApproval,addDirs:t.addDirs,...t.agent?{agentId:t.agent}:{},mcp:i?.mcp??t.mcp,nativeMcp:i?.nativeMcp,...t.onFallback?{onFallback:t.onFallback}:{},...t.onNote?{onNote:t.onNote}:{}},o=await x(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 g(n,r),l=s?.error?.message??``;if(i.status===`failed`&&h(i.permissions??`auto`,l))throw new c(`read-only-unavailable`,l);if(i.status===`failed`&&d(l)){let r=w(n).chain,s=r[r.indexOf(o.engine)+1];if(!s)throw new c(`chain-exhausted`,l,{payload:C(o.engine,l,i.permissions??`auto`,t.system,e)});t.onFallback?.({engine:o.engine,detail:l,next:s}),o=await x({...a,engine:s,model:void 0,effort:void 0,name:void 0,simulateApproval:void 0});continue}return{taskId:r,status:i.status,finalMessage:s?.finalMessage,...l?{error:l}:{},tokens:s?.tokens??null,model:s?.model??i.model??null}}}async function U(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=await B(r,e);return t.wait?r.tasks.wait(n.task.id):n}let a=z(n,e);if(t.wait){p.includes(a.status)&&t.onWaiting?.(a.id);let e=await v(n,a);if(a=e.task,e.reason===`approval`)throw new c(`approval-pending`,`Approval needed for task ${a.id}: ${e.approval.summary}`,{taskId:a.id,approval:e.approval})}let{steps:o,result:u}=S(n,a.id,{tail:t.tail}),d=f(_(n,a.id)).filter(e=>!e.response),m=p.includes(a.status),h=m?s(n,a):a.updatedAt,g=l(h);return{taskId:a.id,status:m&&d.length?`waiting-approval`:a.status,task:a,result:u,steps:o,turns:b(n,a.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:i(n,a.id,1)[0],liveTokens:i(n,a.id,200).reverse().find(e=>e.kind===`usage`&&String(e.at??``)>=(a.resumedAt??``))?.tokens??null}:{}}}async function W(e={}){let{cwd:t,api:n}=R(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=>y.includes(e.status)):t}let{tasks:r,clipped:i}=A(t,{...e,dir:e.dir??e.cwd}),a=r.map(e=>{let n=p.includes(e.status)?f(_(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)?l(s(t,e)):null}}),o=!a.length&&!e.archived?E(t,{migrate:!1}).length:0;return Object.assign(a,{clipped:i,archived:o})}async function*G(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(y.includes(r.status))return;await new Promise(e=>setTimeout(e,1e3))}}async function K(e,n={}){let{cwd:i,api:a}=R(n);if(a){let t=await B(a,e);return{task:t,events:G(a,t.task.id),final:()=>a.tasks.get(t.task.id)}}let o=z(i,e);return{task:o,events:P(i,o.id,{tail:n.tail}),async final(){let e=r(i,u(i,o.id)??o),n=t(F.join(_(i,o.id),`result.json`));return{taskId:o.id,status:e.status,result:n,task:e}}}}async function q(e,n,r={}){let{cwd:i,api:a}=R(r);if(a){let t=await a.tasks.steer(e,n,{...r.model?{model:r.model}:{},...r.effort?{effort:r.effort}:{},...r.permissions?{permissions:r.permissions}:{}});return r.wait?a.tasks.wait(e):t}let o=await k(i,z(i,e),n,{model:r.model,effort:r.effort,permissions:r.permissions});if(!r.wait||o.steered===`queued`)return o;let s=u(i,o.taskId),c=s?await T(i,s):null,l=t(F.join(_(i,o.taskId),`result.json`));return{...o,status:c?.status??null,finalMessage:l?.finalMessage??null}}async function J(e,t,n={}){let{cwd:r,api:i}=R(n);if(i)return i.tasks.ask(e,t);let a=z(r,e);n.onAsking?.(a.id);let o=await M(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 Y(e,t={}){let{cwd:n,api:r}=R(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 N(n);let i=z(n,e);return f(_(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 X(e,t,n={}){let{cwd:r,api:i}=R(n),a=n.deny?`decline`:`accept`;if(i){if(!e||!t)throw new c(`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=N(r).find(e=>e.id===t)?.taskId,!e))throw new c(`invalid-option`,`No pending approval "${t}".`,{hint:`List them: coder task approvals`});if(!e||!t)throw new c(`invalid-option`,`Missing approval id.`,{hint:[`List them: coder task approvals`,`Usage: coder task approve [task-id] <approval-id> [--deny]`]});let o=z(r,e);return m(_(r,o.id),t,a),{taskId:o.id,approvalId:t,decision:a}}async function Z(e,t={}){let{cwd:n,api:r}=R(t);if(r)return r.tasks.cancel(e??V([]));let i=z(n,e),{interrupt:a}=await j(n,i);return{taskId:i.id,status:`cancelled`,interrupt:a}}async function Q(e,t={}){let{cwd:r,api:i}=R(t);if(i){let n=t.allStopped?(await i.tasks.list({limit:200})).filter(e=>y.includes(e.status)).map(e=>e.task.id):[e??V([])];return await Promise.all(n.map(e=>i.tasks.archive(e))),{archived:n,count:n.length}}if(t.allStopped){let e=n(r).filter(e=>y.includes(e.status));for(let t of e)a(r,t);return{archived:e.map(e=>e.id),count:e.length}}e||V([`Archive one: coder task archive <task-id>`,`Archive all stopped: coder task archive --all-stopped`]);let o=z(r,e);return a(r,o),{taskId:o.id,archived:!0}}async function ee(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=t.allArchived?(await r.tasks.list({limit:200,archived:!0})).map(e=>e.task.id):[e??V([])];return await Promise.all(n.map(e=>r.tasks.delete(e))),{deleted:n,count:n.length}}if(t.allArchived){let e=E(n).filter(e=>O(n,e)).map(e=>e.id);return{deleted:e,count:e.length}}e||V([`Delete one: coder task delete <task-id>`,`Delete all archived: coder task delete --all-archived`]);let i=z(n,e);if(i.status===`running`)throw new c(`invalid-option`,`Task ${i.id} is still running.`,{hint:`Stop it first: coder task stop ${i.id}`});return O(n,i),{taskId:i.id,deleted:!0}}async function*te(e,t={}){yield*(await K(e,t)).events}const $={run:H,result:U,list:W,watch:K,stream:te,steer:q,ask:J,approvals:Y,approve:X,stop:Z,archive:Q,delete:ee};export{$ as n,L as t};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,I as n,J as r,Kt as i,Mn as a,Nt as o,R as s,Vt as c,h as l,jt as u,nn as d,z as f}from"./dispatch-YW1aqjEg.js";import{t as p}from"./integrations-B2CavXR1.js";import{c as m,l as h,n as g}from"./actions-CmfXOVXQ.js";import{i as _}from"./mcp-DgMoPoUo.js";import{r as v}from"./exec-DgI3boHa.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,...i}=e.credential.env;if(Object.assign(b.env,i),b.env[r]=JSON.stringify(e.config??{}),!n)return;let a=await E.mkdtemp(y.join(t,`.codex-`));return await E.writeFile(y.join(a,`auth.json`),n,{mode:384}),b.env.CODEX_HOME=a,a}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,t,n){let r=new Set,i=f(y.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function G(e,t,r){let i=s({task:t,generation:r.generation,seq:r.seq});return n(`apply`,{task:t,entry:r},{dir:y.join(e,`inbox-control`),id:i,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(d(e,t.id),`inbox-control`,`${s(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(s(t.command)===s(r)&&Object.hasOwn(t,`result`))return t.result}let c=n.value;if(n.kind===`steer`){let i=String(c?.text??n.value??``);t.threadId?await m(e,t,i,{command:r}):o(e,t.id,i)}else if(n.kind===`ask`){let i=await g(e,t,String(c?.question??n.value??``),{command:r});return i.finalMessage??i.error?.message??``}else n.kind===`approve`&&l(d(e,t.id),String(c?.approvalId??c?.id??``),c?.decision===`deny`||c?.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(),i=await M(n.server,n.token,e),a=i.task.event,o=a&&i.tokens[a.integration],s=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(i,t),u;try{return u=await P(i.task,t,o,c),await J(e,t,n,i,u,o,s)}finally{try{u&&await L(u)}finally{await V(n,e,i,l),delete b.env[r]}}}async function J(e,n,r,o,s,l,u){let f=o.task.event,p=new AbortController,m,g=!1,_=await $({root:n,generation:o.generation,apply:async t=>{let n=m&&c(s,m);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await h(s,n),g=!0;return}return G(d(s,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(r.server,r.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(r.server,r.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=t(y.join(n,`.runner-task.json`));D?.generation!==o.generation&&await E.writeFile(y.join(n,`.runner-note`),o.task.context?.note??``,{mode:384});let O,k,A=new Map,j=()=>{for(let[e,t]of A){let n=i(s,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 t=await v({cwd:s,...D?.generation===o.generation?{resumeTaskId:D.id}:{},noteFile:y.join(n,`.runner-note`),agent:o.task.agent,flow:o.task.flow,task:o.task,toolEnvironment:{tokens:o.tokens},post:o.task.source===f?.integration,...l?{postToken:l}:{},async onTask(t){m=t,A.has(t)||A.set(t,0),j(),k??=setInterval(j,1e3),a(y.join(n,`.runner-task.json`),{generation:o.generation,id:t}),await C().catch(()=>{}),await w().catch(()=>{}),clearInterval(O),O=setInterval(()=>{M(r.server,r.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(r.server,r.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(r.server,r.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:g?`cancelled`:t.ok?`completed`:`failed`,result:t.reply??t.result,tokens:t.tokens,...t.note===void 0?{}:{note:t.note},...s===n?{}:{diff:await z(s).catch(()=>void 0)}})}),t}catch(t){let n=t;throw j(),await M(r.server,r.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 n=y.join(e.root,`.runner-inbox.json`),r=t(n),i=r?.generation===e.generation?r:{generation:e.generation,seq:-1,answers:[]},o=Promise.resolve(),s=t=>{let r=async()=>{if(!Array.isArray(t)||t.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[...t].sort((e,t)=>e.seq-t.seq)){if(r.seq<=i.seq)continue;let t=await e.apply(r),o={generation:e.generation,seq:r.seq,answers:[...i.answers??[],...r.kind===`ask`?[{seq:r.seq,value:t}]:[]]};a(n,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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-msOzZFXW.js";import{runnerOptions as r}from"./remove-CcMma1x3.js";import i from"node:process";const a=t({name:`runner test`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[n]},options:r,async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner id.`);let{testRunner:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);return r(n,t)},print:e=>i.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{a as commandRunnerTest};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./cli-msOzZFXW.js";import{n as t}from"./mcp-server-DGzme0YX.js";import n from"node:process";const r=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:r}=await import(`./integrations-B2CavXR1.js`).then(e=>e.r),{agentTools:i}=await import(`./mcp-DgMoPoUo.js`).then(e=>e.t),a=e[0]??``,o=i(a);if(!o)throw Error(`Unknown tool set "${a}"; known: ${[...Object.keys(r).filter(e=>r[e].tools.serve),`note`].join(`, `)}`);let s=n.env.APP_TOKEN??``;if(!s&&a!==`note`)throw Error(`APP_TOKEN is not set`);let c=n.env.CODER_AGENT_SCOPE?JSON.parse(n.env.CODER_AGENT_SCOPE):void 0;await t(`coder-${a}`,o,{token:s,fetch,tools:(n.env.CODER_AGENT_TOOLS??``).split(`,`).filter(Boolean),...c?{scope:c}:{}})}});export{r as commandTools};
|