@wular/coder 0.4.4 → 0.4.6
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/{add-DTwoL7vJ.js → add-BIp1t_pT.js} +1 -1
- package/dist/{add-cdKdz3K0.js → add-CKENklTr.js} +1 -1
- package/dist/{add-Bffwutko.js → add-DrbKvzAF.js} +1 -1
- package/dist/{add-Bz8uaOcu.js → add-KkLx1WbE.js} +1 -1
- package/dist/{add-json-BIcbE3Nf.js → add-json-GHTfZV_U.js} +1 -1
- package/dist/{agent-DQK_S1PE.js → agent-CR8UFMa-.js} +1 -1
- package/dist/{agent-BcXXkOmD.js → agent-D0pQ_ewc.js} +1 -1
- package/dist/{alias-KQ85bphl.js → alias--pfI-nvH.js} +1 -1
- package/dist/{app-DaccLHrx.js → app-C7sw1ZkI.js} +1 -1
- package/dist/{approvals-CZt_aPCy.js → approvals-9-G-QxOy.js} +1 -1
- package/dist/{approve-DxjyXd66.js → approve-CAk8qPqG.js} +1 -1
- package/dist/{apps-eueTmHR5.js → apps-CaHoLNE7.js} +1 -1
- package/dist/{archive-C3JazQuo.js → archive-Ylxh0HIl.js} +1 -1
- package/dist/{archive-C9yrU4Wg.js → archive-fs5RjYHc.js} +1 -1
- package/dist/{archive-sweep-CHbOP-p6.js → archive-sweep-BrqWj4kr.js} +1 -1
- package/dist/{ask-DdYrvsTk.js → ask-Dmk0HGtI.js} +1 -1
- package/dist/{auth-q8CROpG-.js → auth-CS0cH0gq.js} +1 -1
- package/dist/auth-cZ0FrkBv.js +1 -0
- package/dist/{cli-msOzZFXW.js → cli-IfrPgeYz.js} +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/{config-BllYHi8S.js → config-Duf8jCkd.js} +1 -1
- package/dist/{create-BYki3g42.js → create-Ik613gJw.js} +1 -1
- package/dist/credentials-Dxpb5jCT.js +1 -0
- package/dist/dash/standalone/server/manifest.json +774 -774
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/page.8f85fbaff456c5fe.js +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.d3aec63db0f5230d.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/page.7fd1bfcf08e25919.js +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.31687af871d75d39.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.1ed5379637860fab.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/page.1798dbd9cd334e8f.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/page.44f60b1a32344f70.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.6423846391b20446.js +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.04b07f9c365be073.js +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.d1ded90712ca586f.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-list.9698bdff71c3b3c7.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-section.c77194f05c3f58fb.js +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f0b2f5ae78f8034.js → agent-pills-65087e563e7f928c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-8b9eb7a50b6353c8.js → agent-settings-form-51f5d16c5b35b0c4.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-ec0a1369f485e044.js → agents-grid-8d8fb47aa05c1022.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{badge-97931d920966447a.js → badge-b8e1e1429e8418e8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{card-a390b476c49de404.js → card-abb16544e8e5a5e0.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-0c5bac507d410ec8.js → combo-0feaff3c2ab55606.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{composer-2c92fc6e47ca91ca.js → composer-08a1aad17120af8a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-261cde2206340a07.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-a7e97c1e3e7b1d98.js → confirm-d804955ec454f00f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-apps-70717f2cb7ae1e00.js → connect-apps-c4b8fc9d3a25e545.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-6edbbdd3d805d960.js → connect-repositories-2cf520006ed18949.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-c59af917890a58af.js → credentials-list-a1b81c1b630a8415.js} +2 -2
- package/dist/dash/standalone/static/assets/chunks/{custom-range-80abdcdffdfe237f.js → custom-range-79011164d1e2529c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-40545d274265dd1a.js → editor-b86137d54feb4ba1.js} +4 -4
- package/dist/dash/standalone/static/assets/chunks/{engines-list-7aaf3d15897cb0aa.js → engines-list-0cf0dd6427e45add.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{field-b36938a3bc00cd3f.js → field-329f272ef3edae30.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{filter-c0ae37317df5452c.js → filter-673d0e6dbc95293c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{heads-bdff7195a22cb2bd.js → heads-bdb3900291e3ba2c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{instructions-5d6b6a16fc5275a6.js → instructions-7f289881a4d96d85.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-c175184f89172c15.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{list-d0b7c0b48892cfe6.js → list-074a086ab5e19d77.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{mcp-list-25126d98a226b790.js → mcp-list-c97f883efa3f7d03.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{models-list-6dfcd14261a538f5.js → models-list-3f869a70740e4244.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-b8a76b633d3d5ffc.js → platform-actions-b317343915219089.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runners-list-6723c3760642534a.js → runners-list-33a7339bd7cb3e18.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-1155c44ecf78eec1.js → segmented-c9d58f98a7d32b4d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{select-dfbd5abe28b9ac3b.js → select-f4ea2f12a2298e4a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{sentinel-4c64ec1196343d0e.js → sentinel-9e882d8ad784d4bd.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-bee5eaed36ee3dc4.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-d2e3dd1b398d7232.js → shared-init-cf66e1c1a2f30ef1.js} +2 -2
- package/dist/dash/standalone/static/assets/chunks/{tail-3e63ab86a13c8c38.js → tail-5a5f739bca637202.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-a8e0042e51f40a41.js → task-actions-37ed047ca8c5b129.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-view-9da31d3338604fed.js → task-view-efe402c64d6a3c9b.js} +4 -4
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-07e674d269ecdf31.js → tasks-list-eae2a32d61b437c5.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{toolbar-7e424f4c5bb3db9a.js → toolbar-7aee851cfcc688cc.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-714c7f458a9370fc.js → versions-list-836e397952b5d251.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-00c2425020b8564c.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-091090fd50a6c9cd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0b8b6a688cfb5246.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0cc2ff4668470e6f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-11f56cbcfd2a3fca.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-146cb2e293fd710e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1cdaef1ffee188d4.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-3298ffa52f79e244.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-415baafb72caaf21.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-50de47aa1f3aed6f.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-4f5740d5c6a84a21.js → pnext-client-802be87d22e144c4.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-9ec55ee4d6315657.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9fb279f4c6135368.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a543b7bfddcdae35.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a9f7e73b9a3252b9.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-e9f4f42456943129.js +1 -0
- package/dist/{default-aLeIO8IR.js → default-BfXXngYf.js} +1 -1
- package/dist/{default-fMaQH1wm.js → default-zMKQ15xH.js} +1 -1
- package/dist/{delete-Cj16PYaw.js → delete-BbsEN7tF.js} +1 -1
- package/dist/{delete-DNj3leWA.js → delete-CZuI4sJi.js} +1 -1
- package/dist/{disable-CQg5Vybq.js → disable-B860lJDh.js} +1 -1
- package/dist/{discover-bVM8EJEz.js → discover-tM_915iZ.js} +1 -1
- package/dist/{docs-CqeYenUp.js → docs-BdmVTydv.js} +1 -1
- package/dist/{enable-8m3z7i3i.js → enable-DD4OsTnA.js} +1 -1
- package/dist/flow/index.d.ts +1 -1
- package/dist/{flow-DeCL3x2p.js → flow-DwhBWoSx.js} +1 -1
- package/dist/{index-Xe8n_t2Z.d.ts → index-JcLiq1ac.d.ts} +1 -1
- package/dist/{init-BujliQ7q.js → init-Bo3RS_va.js} +1 -1
- package/dist/integrations-CstFKLTr.js +1 -0
- package/dist/{list-QLTjk5SN.js → list-Bu1S3hPM.js} +1 -1
- package/dist/{list-CXu4cr8D.js → list-CLVoliXi.js} +1 -1
- package/dist/{list-BdiYneg5.js → list-DWeYdLMU.js} +1 -1
- package/dist/{list-DbY1jyj3.js → list-DYzczkQZ.js} +2 -2
- package/dist/{list-DhVfqr0A.js → list-DaQ14K1K.js} +1 -1
- package/dist/{list-DGoVY-ao.js → list-DhJOorrE.js} +1 -1
- package/dist/{list-DyqtSWvn.js → list-Motuarjd.js} +1 -1
- package/dist/{list-vKOTwd4G.js → list-P1Zi9bhT.js} +1 -1
- package/dist/{login-otJB9SYu.js → login-C-VTh_6i.js} +1 -1
- package/dist/{login-BzdlmD_o.js → login-KHrM3MI3.js} +1 -1
- package/dist/{logout-DOrRoxDV.js → logout-CqUKg0lc.js} +1 -1
- package/dist/{maintenance-Bg_FzXSq.js → maintenance-CVfHIraw.js} +1 -1
- package/dist/{mcp-xSvAWiXX.js → mcp-DCydEehH.js} +1 -1
- package/dist/{migrate-CN-fdMV9.js → migrate-DPprwsbm.js} +1 -1
- package/dist/{model-BJ-Sokha.js → model-_e9f9Oth.js} +1 -1
- package/dist/{push-Cg7-XT5h.js → push-HLTHyhsP.js} +1 -1
- package/dist/{queue-yo-Z8TaE.js → queue-EvplGOuk.js} +2 -2
- package/dist/refresh-ZbMy3Y9T.js +1 -0
- package/dist/{remove-DgMg_OOu.js → remove-B6PskfkD.js} +1 -1
- package/dist/{remove-BuaShRZ3.js → remove-CC7UyWNI.js} +1 -1
- package/dist/{remove-C8Rm8KP-.js → remove-CWd4Qs4F.js} +1 -1
- package/dist/{remove-CcMma1x3.js → remove-CZmO4BSd.js} +1 -1
- package/dist/{rename-C0vNcl8e.js → rename-ODyRelrw.js} +1 -1
- package/dist/{result-C6ovl_Dn.js → result-CRIAetqH.js} +1 -1
- package/dist/{result-oQey_hdw.js → result-DtXZusqj.js} +1 -1
- package/dist/{resume-T_TXWfqE.js → resume-CI-swBxa.js} +1 -1
- package/dist/{review-CCs6XUSO.js → review-IRsckIiU.js} +1 -1
- package/dist/{rotate-key-CYimsQR5.js → rotate-key-CmvHXXnp.js} +1 -1
- package/dist/{run-BFYg-zZt.js → run-Dd9HdNSL.js} +1 -1
- package/dist/{run-D7F7JPV6.js → run-FYA9XIij.js} +1 -1
- package/dist/{run-hiPyO7js.js → run-IWXjB5OD.js} +1 -1
- package/dist/runner-CbDswgji.js +1 -0
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.js +1 -1
- package/dist/{serve-C-AD60Wa.js → serve-CML2mkKG.js} +1 -1
- package/dist/{serve-BgGXjT_O.js → serve-CY46ohfr.js} +1 -1
- package/dist/{serve-GIK3fqKA.js → serve-D_XiZzYd.js} +2 -2
- package/dist/{serve-K3BVTcDI.js → serve-t38OrDrk.js} +2 -2
- package/dist/{server-DQTGc55C.js → server-83YZ2Kkh.js} +1 -1
- package/dist/{setup-host-By8-gv_v.js → setup-host-DRuUX8zg.js} +1 -1
- package/dist/{shared-TznJgMFW.js → shared-D64pQ0XU.js} +1 -1
- package/dist/{show-C9ojrH5W.js → show-DlKWR0Hy.js} +1 -1
- package/dist/{show-o4yXzSWZ.js → show-aCUICSoc.js} +1 -1
- package/dist/{status-BBW7Qyde.js → status-C09SKASS.js} +1 -1
- package/dist/{steer-D47cuggj.js → steer-BGKYpW4T.js} +1 -1
- package/dist/{stop-CD2JW6dI.js → stop-CiAJVnU2.js} +1 -1
- package/dist/{stop-7brPdki9.js → stop-svJYkhTt.js} +1 -1
- package/dist/{store-BCBTo0rl.js → store-B0RLMUR9.js} +1 -1
- package/dist/{store-qp7UE2ES.js → store-Cxc2GYyj.js} +2 -2
- package/dist/{task-CyrDqqf8.js → task-DvPkqHCF.js} +1 -1
- package/dist/{test-BcFQUHRo.js → test-9FHRw5Jc.js} +1 -1
- package/dist/{tools-D20XYPnO.js → tools-DhlrB8xV.js} +1 -1
- package/dist/{types-DMGBYB_K.d.ts → types-CdIo1Zbm.d.ts} +2 -2
- package/dist/{unalias-G3sM8fVw.js → unalias-D6UESHzK.js} +1 -1
- package/dist/{update-JvgB6Xws.js → update-DTYOhoQC.js} +1 -1
- package/dist/{upgrade-DN3hXDdo.js → upgrade-BOYs5Vyi.js} +2 -2
- package/dist/{usage-C1oN2W9c.js → usage-BlT_poNA.js} +1 -1
- package/dist/{usage-DR3wWtYD.js → usage-Bw7fQeFC.js} +1 -1
- package/dist/{watch-DDmHonTf.js → watch-BlGYjH88.js} +1 -1
- package/dist/{watch-DYkC6Q2q.js → watch-Y82ubvGH.js} +1 -1
- package/dist/{worker-CaNTsqcD.js → worker-4TKVAB01.js} +1 -1
- package/dist/{workflow-7rqzHHWZ.js → workflow-Mi1OCrOI.js} +1 -1
- package/package.json +1 -1
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/auth-FTKev9__.js +0 -1
- package/dist/credentials-DLMuf9OT.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-e73a0b422a64d24b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-439881899f58791f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-66a0fdc8472e9b2f.js +0 -5
- package/dist/dash/standalone/static/assets/pnext-client-0d42268f5239b3d5.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-0f7a0ab40127bf71.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-19cd968a8d93b747.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-34bb66f5f37ae387.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4f02d1eb5fdd8301.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5398aea4b83e1bd3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6a3da44efd3d46e0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6c93bd1923a32212.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-76bea765346a5ac5.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-8a37985a7a1612d0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9849ecdcc3e58c7a.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b7e97e8b42c8b547.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-cf0e73abe71d8cf4.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d0c44499e53177b1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-dca2adeac8045fa7.js +0 -1
- package/dist/integrations-6kXL9hRo.js +0 -1
- package/dist/refresh-CmBQALAW.js +0 -1
- package/dist/runner-D5jaEfhG.js +0 -1
|
@@ -5,7 +5,7 @@ import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as
|
|
|
5
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
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
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-
|
|
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-B0RLMUR9.js`),import(`./schema-DoNO0dPh.js`).then(e=>e.u),import(`drizzle-orm`),import(`./shared-D64pQ0XU.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
9
|
delete from ${o}
|
|
10
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
11
|
returning organization_id, public_id
|
|
@@ -16,4 +16,4 @@ import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as
|
|
|
16
16
|
delete from ${s}
|
|
17
17
|
where deleted_at < ${new Date(p-ml).toISOString()}::timestamptz
|
|
18
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};
|
|
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-B0RLMUR9.js`),import(`./queue-EvplGOuk.js`),import(`./shared-D64pQ0XU.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./cli-
|
|
1
|
+
import{s as e}from"./cli-IfrPgeYz.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-BrqWj4kr.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-4TKVAB01.js`)).commandWorker,run:async()=>(await import(`./run-IWXjB5OD.js`)).commandTask,list:async()=>(await import(`./list-CLVoliXi.js`)).commandTasks,ls:async()=>(await import(`./list-CLVoliXi.js`)).commandTasks,watch:async()=>(await import(`./watch-Y82ubvGH.js`)).commandWatch,stream:async()=>(await import(`./watch-Y82ubvGH.js`)).commandWatch,result:async()=>(await import(`./result-DtXZusqj.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-BGKYpW4T.js`)).commandSteer,ask:async()=>(await import(`./ask-Dmk0HGtI.js`)).commandAsk,stop:async()=>(await import(`./stop-svJYkhTt.js`)).commandStop,archive:async()=>(await import(`./archive-fs5RjYHc.js`)).commandArchive,delete:async()=>(await import(`./delete-BbsEN7tF.js`)).commandDelete,approvals:async()=>(await import(`./approvals-9-G-QxOy.js`)).commandApprovals,approve:async()=>(await import(`./approve-CAk8qPqG.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-
|
|
1
|
+
import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-IfrPgeYz.js";import{runnerOptions as r}from"./remove-CZmO4BSd.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.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};
|
|
@@ -2,9 +2,9 @@ import * as z from "zod/mini";
|
|
|
2
2
|
import { SerializedMessage, SerializedThread } from "chat";
|
|
3
3
|
//#region src/core/config.d.ts
|
|
4
4
|
declare const engineSchema: z.ZodMiniEnum<{
|
|
5
|
+
custom: "custom";
|
|
5
6
|
codex: "codex";
|
|
6
7
|
claude: "claude";
|
|
7
|
-
custom: "custom";
|
|
8
8
|
}>;
|
|
9
9
|
declare const effortSchema: z.ZodMiniEnum<{
|
|
10
10
|
low: "low";
|
|
@@ -43,9 +43,9 @@ declare const mcpEntrySchema: z.ZodMiniObject<{
|
|
|
43
43
|
}, z.core.$strict>;
|
|
44
44
|
declare const effectiveConfigSchema: z.ZodMiniObject<{
|
|
45
45
|
chain: z.ZodMiniArray<z.ZodMiniEnum<{
|
|
46
|
+
custom: "custom";
|
|
46
47
|
codex: "codex";
|
|
47
48
|
claude: "claude";
|
|
48
|
-
custom: "custom";
|
|
49
49
|
}>>;
|
|
50
50
|
engines: z.ZodMiniObject<{
|
|
51
51
|
codex: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import{o as t}from"./models-DGPrMV51.js";import{n}from"./add-CKENklTr.js";import{t as r}from"./remove-CWd4Qs4F.js";const i=e({name:`model unalias`,help:{usage:`coder model unalias <name> [--workspace]`,summary:`Remove a user-defined alias.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:n,args:1,run:({options:e,args:[n],cwd:r})=>t(r,n,e),print:e=>r(`unaliased`,e.unaliased,e.file)});export{i as commandModelUnalias};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import{s as t}from"./models-DGPrMV51.js";import{a as n,i as r,n as i,r as a}from"./add-CKENklTr.js";const o=e({name:`model update`,help:{usage:`coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,summary:`Update a configured custom model. Only the flags you pass change; the endpoint
|
|
2
2
|
is re-probed and the wire protocol re-detected.`,flags:[[`--base-url <url>`,`new API base`],[`--model <id>`,`new provider model id`],[`--env-key <VAR>`,`new API-key env var`],[`--workspace`,`write to <repo>/.coder/config.json instead of the user file`]]},options:i,args:1,run:({options:e,args:[r],cwd:i})=>t(i,r,n(e)),json:a,print:e=>r(e,`updated`)});export{o as commandModelUpdate};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{w as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-
|
|
2
|
-
the host plugins to match. Alias: update.`,flags:[[`--cli-only`,`update just the CLI`],[`--plugins-only`,`refresh just the host plugins`],[`--codex`,`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`],[`--claude`,`limit the refresh to the Claude Code plugin`],[`--pm <npm|pnpm|yarn|bun>`,`force a package manager instead of auto-detecting`]]},options:{pm:o,"cli-only":a,"plugins-only":a,codex:a,claude:a},run:({options:t})=>e({...t,cliOnly:t[`cli-only`],pluginsOnly:t[`plugins-only`]},l),print:u});function l(e){s.stdout.write(`${r.bold(`Updating coder CLI`)} ${r.dim(`${e}...`)}\n`)}function u(e){let t=r.bold,a=r.dim,o=(e,n)=>n&&e&&n!==e?`${e} ${a(`->`)} ${t(n)}`:`${n??e??`?`} ${a(`(unchanged)`)}`,c=(e,t)=>`${t.installed?n(`${e} ${o(t.from,t.to)} ${a(`- ${t.note}`)}`):i(`${e} ${t.note}`)}\n`;e.cli&&s.stdout.write(e.cli.changed?`${n(`coder CLI ${o(e.cli.from,e.cli.to)}`)}\n`:`${n(`coder CLI ${e.cli.from} ${a(`(already latest)`)}`)}\n`),e.claudePlugin&&s.stdout.write(c(`claude plugin`,e.claudePlugin)),e.agentsSkill&&s.stdout.write(c(`agents skill `,e.agentsSkill))}const d=async()=>(await import(`./refresh-
|
|
1
|
+
import{w as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{n as a,s as o}from"./args-DEMOfLz2.js";import s from"node:process";const c=t({name:`upgrade`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder upgrade [--cli-only] [--plugins-only] [--codex] [--claude] [--pm <mgr>]`,summary:`Update the coder CLI through whichever package manager installed it, then refresh
|
|
2
|
+
the host plugins to match. Alias: update.`,flags:[[`--cli-only`,`update just the CLI`],[`--plugins-only`,`refresh just the host plugins`],[`--codex`,`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`],[`--claude`,`limit the refresh to the Claude Code plugin`],[`--pm <npm|pnpm|yarn|bun>`,`force a package manager instead of auto-detecting`]]},options:{pm:o,"cli-only":a,"plugins-only":a,codex:a,claude:a},run:({options:t})=>e({...t,cliOnly:t[`cli-only`],pluginsOnly:t[`plugins-only`]},l),print:u});function l(e){s.stdout.write(`${r.bold(`Updating coder CLI`)} ${r.dim(`${e}...`)}\n`)}function u(e){let t=r.bold,a=r.dim,o=(e,n)=>n&&e&&n!==e?`${e} ${a(`->`)} ${t(n)}`:`${n??e??`?`} ${a(`(unchanged)`)}`,c=(e,t)=>`${t.installed?n(`${e} ${o(t.from,t.to)} ${a(`- ${t.note}`)}`):i(`${e} ${t.note}`)}\n`;e.cli&&s.stdout.write(e.cli.changed?`${n(`coder CLI ${o(e.cli.from,e.cli.to)}`)}\n`:`${n(`coder CLI ${e.cli.from} ${a(`(already latest)`)}`)}\n`),e.claudePlugin&&s.stdout.write(c(`claude plugin`,e.claudePlugin)),e.agentsSkill&&s.stdout.write(c(`agents skill `,e.agentsSkill))}const d=async()=>(await import(`./refresh-ZbMy3Y9T.js`)).commandRefreshUpdate,f=Object.assign(async e=>e[0]===`refresh`?(await d())(e.slice(1)):c(e),c,{subcommands:{refresh:d}});export{f as commandUpgrade};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-IfrPgeYz.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{i,n as a,s as o,t as s}from"./args-DEMOfLz2.js";import c from"node:process";const l={server:i,workspace:o,yes:a};function u(e,t){let i=Array.isArray(e.totals)?e.totals.map(e=>({group:t??``,...e})):Object.entries(e.totals).flatMap(([e,t])=>t.map(t=>({group:e,...t})));if(!i.length)return void c.stdout.write(`${r.dim(`No usage in this period.`)}\n`);c.stdout.write(`${n([{header:`by`,value:e=>e.group},{header:`key`,value:e=>e.key,paint:e=>r.cyan(e)},{header:`tasks`,value:e=>String(e.tasks)},{header:`runner ms`,value:e=>String(e.runnerMs)},{header:`tokens`,value:e=>e.tokens===void 0?``:JSON.stringify(e.tokens)}],i,r)}\n`)}const d=e({name:`agent usage`,help:{usage:`coder agent usage [--since 7d|24h|<ms>] [--by agent|installation|engine] [--server [url]] [--json] [--cwd <dir>]`,flags:[[`--since <period|ms>`,`period such as 7d or 24h, or milliseconds since epoch`],[`--by <group>`,`agent, installation, or engine`],t]},options:{...s,...l,since:o,by:o},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-D0pQ_ewc.js`).then(e=>e.t);return n.usage({...e,cwd:t,organization:e.workspace,since:e.since??`7d`})},print:(e,{options:t})=>u(e,t.by)});export{d as commandAgentUsage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{a as t,i as n}from"./load-DDZfByUe.js";import{a as r,d as i,f as a,n as o,u as s}from"./http-DG54kyx4.js";import{y as c}from"./store-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{a as t,i as n}from"./load-DDZfByUe.js";import{a as r,d as i,f as a,n as o,u as s}from"./http-DG54kyx4.js";import{y as c}from"./store-Cxc2GYyj.js";var l=e({addUsage:()=>f,leaders:()=>m,readUsage:()=>x,readUsageTotals:()=>S,timeZone:()=>d,usageReport:()=>b,usageSummary:()=>_,usageTotals:()=>p});function u(e){return typeof e==`number`?e:!e||typeof e!=`object`||Array.isArray(e)?0:`total`in e&&typeof e.total==`number`?e.total:Object.values(e).reduce((e,t)=>e+u(t),0)}function d(e){if(!e)return`UTC`;try{return new Intl.DateTimeFormat(`en`,{timeZone:e}),e}catch{return`UTC`}}const f=(e,t)=>{e.tasks+=t.tasks,e.runnerMs+=t.runnerMs,e.tokenCount+=t.tokenCount};async function p(e,t){if(e.usageTotals)return e.usageTotals(t);if(t.top){let{top:n,...r}=t,i=(await p(e,{...r,by:`agent`,parts:void 0})).sort((e,t)=>t[n.by]-e[n.by]||e.key.localeCompare(t.key)).slice(0,n.count).map(e=>e.key);return p(e,{...r,parts:i})}let n=d(t.tz),r=new Intl.DateTimeFormat(`en-CA`,{timeZone:n,year:`numeric`,month:`2-digit`,day:`2-digit`}),i=new Set(t.parts),a=new Map;for(let{value:n}of await e.list(`usage`)){if(n.at<t.since||t.until!==void 0&&n.at>=t.until||t.agent&&n.agent!==t.agent)continue;let e=t.by===`agent`?n.agent:t.by===`installation`?n.installationId??`none`:t.by===`engine`?n.engine??`unknown`:r.format(n.at),o={tasks:1,runnerMs:n.runnerElapsedMs,tokenCount:u(n.tokens)},s=a.get(e)??{key:e,tasks:0,runnerMs:0,tokenCount:0};f(s,o),i.has(n.agent)&&(s.parts??={},f(s.parts[n.agent]??={tasks:0,runnerMs:0,tokenCount:0},o)),a.set(e,s)}return[...a.values()].sort((e,t)=>e.key.localeCompare(t.key))}function m(e,t){let n=new Map;for(let r of e)for(let[e,i]of Object.entries(r.parts??{}))n.set(e,(n.get(e)??0)+i[t]);return[...n].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).map(([e])=>e)}function h(e,t){if(typeof t==`number`)return(typeof e==`number`?e:0)+t;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=e&&typeof e==`object`&&!Array.isArray(e)?{...e}:{};for(let[e,r]of Object.entries(t))n[e]=h(n[e],r);return n}function g(e,t){let n=new Map;for(let r of e){let e=t===`agent`?r.agent:t===`installation`?r.installationId??`none`:r.engine??`unknown`,i=n.get(e)??{key:e,tasks:0,runnerMs:0};i.tasks++,i.runnerMs+=r.runnerElapsedMs,r.tokens!==void 0&&(i.tokens=h(i.tokens,r.tokens)),n.set(e,i)}return[...n.values()].sort((e,t)=>e.key.localeCompare(t.key))}function _(e,t,n){let r=e.filter(e=>e.at>=t);return{since:t,totals:n?g(r,n):{agent:g(r,`agent`),installation:g(r,`installation`),engine:g(r,`engine`)}}}const v={tasks:`tasks`,runner:`runnerMs`,tokens:`tokenCount`},y={tokens:e=>e.tokenCount,tasks:e=>e.tasks,runner:e=>e.runnerMs,name:e=>e.key};async function b(e,c){let l=e=>c.searchParams.get(e),u=Number(l(`since`)??0),f=l(`until`)===null?void 0:Number(l(`until`)),h=l(`by`)??`agent`;if(!Number.isFinite(u)||f!==void 0&&!Number.isFinite(f)||![`agent`,`installation`,`engine`,`day`].includes(h))return r({error:`Invalid usage query`},400);let g=l(`parts`)?.split(`,`).filter(Boolean),_=Math.min(Number(l(`top`)??0),8),b=v[l(`sort`)??`tokens`]??`tokenCount`,x=await p(e.store,{by:h,since:u,...f===void 0?{}:{until:f},...l(`agent`)?{agent:l(`agent`)}:{},...h===`day`?{tz:d(l(`tz`))}:{},...g?.length?{parts:g.slice(0,20)}:{},..._>0?{top:{count:_,by:b}}:{}}),S={since:u,...f===void 0?{}:{until:f}};if(h===`agent`){let r=new Set(e.local?(await t(e.local.cwd,e.integrations)).map(e=>e.id):(await e.store.list(`agent`)).map(e=>e.id));for(let e of Object.keys(n()))r.add(e);for(let e of x)r.has(e.key)||(e.deleted=!0)}if(_>0)return r({...S,totals:x,top:m(x,b)});if(!a(c)||h!==`agent`)return r({...S,totals:x});let C=y[l(`sort`)??`tokens`]??y.tokens,w=l(`sort`)===`name`,T=l(`q`)?.trim().toLowerCase(),E=([e,t],[n,r])=>(e<n?-1:+(e>n))*(w?1:-1)||t.localeCompare(r),D=e=>[C(e),e.key],O=o(c),k=x.filter(e=>!T||e.key.toLowerCase().includes(T)).filter(e=>!O||E(D(e),O)>0).sort((e,t)=>E(D(e),D(t))),A=i(c),j=e=>x.reduce((t,n)=>t+e(n),0);return r({...S,...s(k.slice(0,A+1),A,D),summary:{agents:x.length,tasks:j(e=>e.tasks),runnerMs:j(e=>e.runnerMs),tokenCount:j(e=>e.tokenCount)}})}async function x(e,t,n,i){t.local&&await c(t);let a=i.searchParams.get(`installation`),o=await t.store.list(`usage`);return r(a?o.filter(e=>e.value.installationId===a):o)}async function S(e,t,n,i){t.local&&await c(t);let a=Number(i.searchParams.get(`since`)??0),o=i.searchParams.get(`by`);if([`until`,`agent`,`tz`,`parts`,`top`,`cursor`].some(e=>i.searchParams.has(e))||o===`day`)return b(t,i);if(!Number.isFinite(a)||o&&![`agent`,`installation`,`engine`].includes(o))return r({error:`Invalid usage query`},400);let s=(await t.store.list(`usage`)).map(e=>e.value);return r(_(s,a,o))}export{l as a,d as i,x as n,S as r,f as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Kt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-
|
|
1
|
+
import{Kt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{_ as n,a as r,b as i,c as a,h as o,l as s,n as c,p as l,s as u,u as d,v as f,y as p}from"./output-BKeyLbvt.js";import{l as m,t as h}from"./args-DEMOfLz2.js";import g from"node:process";const _=t({name:`flow watch`,help:{usage:`coder flow watch [run-id] [--tail <n|all>] [--json]`,summary:`Watch a flow run live: replay its progress lines from the start, then keep
|
|
2
2
|
following while it runs (Ctrl-C detaches; it keeps running). Blocks until it
|
|
3
3
|
finishes; exits 0 on success, 1 otherwise. Defaults to the most recent run.
|
|
4
4
|
For the result alone, prefer \`coder flow result\`. Alias: stream.`,flags:[[`--tail <n|all>`,`replay only the last n events first (default: all)`]],examples:[[`coder flow watch`,`follow the most recent run to completion`]]},options:{...h,tail:m},args:1,run:async({options:e,args:[t]})=>{let{watchRun:n}=await import(`./executor-HWnIIYUL.js`).then(e=>e.b);return N(n(t,{tail:e.tail}),{json:e.json,stream:!0})}}),v=[`⣾`,`⣽`,`⣻`,`⢿`,`⡿`,`⣟`,`⣯`,`⣷`];function y(e,t=!1){let n=l;return t?c(`[${x(e)}]`,10):e===`completed`?n.bold(n.green(`✔`)):e===`failed`||e===`cancelled`||e===`stopped`?n.bold(n.red(`✘`)):e===`running`?n.bold(n.cyan(`●`)):n.dim(`○`)}function b(){return c(`[start]`,10)}function x(e){return e===`completed`?`done`:e===`cancelled`?`failed`:e}function S(e,t){return e??t.replace(/\s+/g,` `).trim().slice(0,60)}function C(e,t,n,r,i,a){let o=l,u=c(t??n,32);return[`${e} ${a?o.bold(u):u}`,o.dim(c(n,24)),o.light(c(i??``,20)),r?o.light(`${s(r.total)} tok`):``].join(` `).trimEnd()}function w(e,t=!1){let n=l;return`${y(e.ok?`completed`:`failed`,t)} ${n.dim(`gate`)} ${n.light(e.cmd)}${e.ok?``:n.dim(` · exit ${e.code}`)}`}function T(e,t,n){let i=l,a=n!==void 0&&n>=1e3?i.dim(` · ${r(n)}`):``;return`${t} ${i.dim(`gate`)} ${i.light(e)}${a}`}function E(e,t=!1){return l.dim(`${`│ `.repeat(e)}${t?`└─`:`├─`}`)}function D(e){return l.dim(`${`│ `.repeat(e)}│ `)}function O(e){return`${` `.repeat(e.depth)}${e.log?`${c(`[log]`,10)} `:``}${e.body}`}function k(e,t,n=!1){return n?O(e):`${e.log?D(e.depth):E(e.depth,t)} ${e.body}`}function A(e){return l.dim(`${`│ `.repeat(Math.max(0,e))}│`)}var j=class{stream;names=new Map;active=new Map;activeGates=new Map;pending;previews=new Map;frame=0;hasCommitted=!1;timer;tty;region;constructor(e=g.stdout){this.stream=e,this.tty=!!e.isTTY,this.region=new n(e)}emit(e){let t=l;switch(e.kind){case`task-start`:{let t={name:S(e.name,e.prompt),engine:e.engine,depth:e.depth??0};if(this.names.set(e.taskId,t),!this.tty){this.final(t.depth,C(b(),t.name,e.taskId,null,t.engine));return}this.active.set(e.taskId,t),this.spin(!0),this.repaint();return}case`task-end`:{this.active.delete(e.taskId),this.previews.delete(e.taskId),this.idle();let t=this.names.get(e.taskId);this.final(t?.depth??0,C(y(e.status,!this.tty),t?.name??null,e.taskId,e.tokens,t?.engine));return}case`gate-start`:{let t={cmd:e.cmd,depth:e.depth??0,startedAt:Date.now()};if(!this.tty){this.final(t.depth,T(t.cmd,b()));return}this.activeGates.set(e.gateId,t),this.spin(!0),this.repaint();return}case`gate`:e.gateId&&this.activeGates.delete(e.gateId),this.idle(),this.final(e.depth??0,w(e,!this.tty));return;case`log`:for(let n of e.message.split(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{fn as e,jn as t}from"./dispatch-YW1aqjEg.js";import{i as n,r}from"./cli-
|
|
1
|
+
import{fn as e,jn as t}from"./dispatch-YW1aqjEg.js";import{i as n,r}from"./cli-IfrPgeYz.js";import{p as i,y as a}from"./output-BKeyLbvt.js";import{i as o,l as s,n as c,s as l,t as u}from"./args-DEMOfLz2.js";import{a as d,d as f,i as p,l as m,n as h,t as g,u as _}from"./result-DtXZusqj.js";import v from"node:process";import*as y from"zod/mini";const b={server:o,workspace:l,yes:c};function x(e,t){let n=e.level===`sys`?t.dim(`· ${e.line}`):e.level===`err`?t.light(e.line):e.line;v.stdout.write(`${n}\n`)}async function S(n,r,o){if(`attempts`in n.task){for await(let e of n.events)o.json?v.stdout.write(`${JSON.stringify(e,null,2)}\n`):x(e,i);let e=await n.final();o.json||p(e,i),v.exit(0)}let s=n.task,c=o.trim===void 0?500:o.trim===`none`?1/0:o.trim,l=await g.create({cwd:s.cwd??r,startedAt:Date.parse(s.createdAt??``)||void 0,trim:c,explicitTrim:o.trim!==void 0,width:a()});if(!o.json){let t=[...m(s,{status:s.status}),...e.includes(s.status)?[i.dim(`Watching. Press Ctrl-C to stop.`)]:[],...s.prompt?d(s.prompt,i,{truncate:!1}):[],``];v.stdout.write(`${t.join(`
|
|
2
2
|
`)}\n`)}let u=null,y=null,b=e=>{let t=l.render(e);t.length&&v.stdout.write(`${t.join(`
|
|
3
3
|
`)}\n`)};for await(let e of n.events){let t=e;if(t.kind===`usage`&&t.tokens&&(u=t.tokens),o.json){let e=t.kind===`steer`?1/0:c,n=t.message?{...t,message:f(t.message,e,{plain:!0})}:t;v.stdout.write(`${JSON.stringify(n)}\n`);continue}t.kind!==`usage`&&(y&&=(b(y),null),t.kind===`assistant`?y=t:b(t))}let{status:S,result:C,task:w}=await n.final();if(o.json)v.stdout.write(`${JSON.stringify({taskId:s.id,status:S,result:C},null,2)}\n`);else{let e=S===`completed`?`(no final message)`:`(task ${S})`,n=_(w,{tokens:C?.tokens??u,tokenModel:C?.model,files:C?.touchedFiles?.map(e=>t(s.cwd??r,e)),statusChanged:S!==s.status});n.length&&v.stderr.write(`\n${n.join(`
|
|
4
4
|
`)}\n`);let i=h(C,w.error,e),a=y?String(y.message??``):``;v.stdout.write(`\n${i.trim()?i:a}\n`)}v.exit(S===`completed`?0:1)}const C=n({name:`task watch`,help:{usage:`coder task watch [task-id] [--server [url]]`,summary:`Stream a running task's transcript live (for you/debugging), then print its
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Vt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-
|
|
1
|
+
import{Vt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{i as n}from"./output-BKeyLbvt.js";import{s as r}from"./args-DEMOfLz2.js";import i from"node:process";const a=t({name:`task worker`,options:{cwd:r},args:1,async run({args:[t],cwd:r}){let{startAgentMailbox:a}=await import(`./exec-DgI3boHa.js`).then(e=>e.i),{runWorker:o}=await import(`./worker-C4Lo6rLS.js`),s=e(r,t);s||n(`Worker: task ${t} not found.`),await o(r,s,a).catch(()=>i.exit(1))}});export{a as commandWorker};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import t from"node:process";const n=e({name:`server workflow`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder server workflow`,summary:`Print the workflow the github-actions runner dispatches. Save it as .github/workflows/coder-agent.yml in every repo the agent runs on, and set RUNNER=github-actions on the server.`,examples:[[`coder server workflow > .github/workflows/coder-agent.yml`,`add it to a repo`]]},options:{},run:async()=>{let{ACTIONS_WORKFLOW_YAML:e}=await import(`./github-actions-CvLya8ve.js`).then(e=>e.r);return e},print:e=>t.stdout.write(e)});export{n as commandServerWorkflow};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coder",
|
|
3
3
|
"displayName": "Coder",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.6",
|
|
5
5
|
"description": "Delegate coding tasks to supervised Coder subagents running on Codex, Claude, or any OpenAI-compatible model. Your main context stays clean.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "muzam1l"
|
package/dist/auth-FTKev9__.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./cli-msOzZFXW.js";const t=e(`auth`,{login:async()=>(await import(`./login-BzdlmD_o.js`)).commandLogin,logout:async()=>(await import(`./logout-DOrRoxDV.js`)).commandLogout,status:async()=>(await import(`./status-BBW7Qyde.js`)).commandStatus},{menu:[{usage:`login`,blurb:`sign in through the browser`},{usage:`logout`,blurb:`sign out and forget the saved session`},{usage:`status`,blurb:`show where you are signed in`}],description:[`Sign in to Coder and manage saved server sessions.`],exampleCommand:`auth login`});export{t as commandAuth};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./cli-msOzZFXW.js";const t=e(`credentials`,{list:async()=>(await import(`./list-DGoVY-ao.js`)).commandCredentialsList,add:async()=>(await import(`./add-DTwoL7vJ.js`)).commandCredentialsAdd,login:async()=>(await import(`./login-otJB9SYu.js`)).commandCredentialsLogin,remove:async()=>(await import(`./remove-DgMg_OOu.js`)).commandCredentialsRemove,default:async()=>(await import(`./default-fMaQH1wm.js`)).commandCredentialsDefault},void 0,{help:{usage:`coder credentials [list|add|login|remove|default] ...`,summary:`Manage engine credentials. Your personal ones are yours alone; workspace ones serve every member, and only owners and admins change them. A task runs on its requester's default for the engine, else the workspace's.`}});export{t as commandCredentials};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a,b,c,d}from"./composer-2c92fc6e47ca91ca.js";import"./connect-repositories-6edbbdd3d805d960.js";import"./composer-data-6f7608fed13f3dd7.js";import"./model-options-15c53331a2f28a4f.js";import"./select-dfbd5abe28b9ac3b.js";import"./task-ddfddeaf07fb684c.js";import"./card-a390b476c49de404.js";import"./field-b36938a3bc00cd3f.js";import"./format-b19b8eec331414f4.js";import"./shared-init-d2e3dd1b398d7232.js";import"./shared-init-d2e3dd1b398d7232.js";import"./wular-pnext-37175329f2865f15-0.js";import"./shared-init-d2e3dd1b398d7232.js";import"./shared-init-d2e3dd1b398d7232.js";import"./shared-init-d2e3dd1b398d7232.js";import"./shared-init-d2e3dd1b398d7232.js";import"./shared-init-66a0fdc8472e9b2f.js";import"./shared-init-66a0fdc8472e9b2f.js";import"./shared-init-66a0fdc8472e9b2f.js";import"./shared-init-37175329f2865f15-2.js";import"./shared-init-37175329f2865f15-2.js";import"./shared-init-8f2ac936c95a7f7b.js";export{b as Composer,c as LoadingComposer,a as NeedsCredential,d as NewTaskButton};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{b as a,c as b}from"./instructions-5d6b6a16fc5275a6.js";import"./shared-init-66a0fdc8472e9b2f.js";import"./shared-init-8f2ac936c95a7f7b.js";export{b as Instructions,a as markdown};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
var l=class extends Error{code;hint;taskId;payload;approval;result;runId;status;constructor(e,t,s={}){super(t),this.name="CoderError",this.code=e,Object.assign(this,s)}},v=class extends l{constructor(e,t,s="",n){super("server",t,{status:e,...n?{hint:n}:{}}),this.authenticate=s}};function w(e){try{let t=new URL(e).hostname.toLowerCase();return t==="localhost"||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function k(e){let t;try{t=new URL(e)}catch{throw new l("invalid-option","Give the server as a URL, e.g. https://agents.example.com.")}if(t.protocol!=="https:"&&!(t.protocol==="http:"&&w(t.origin)))throw new l("invalid-option","Coder servers require HTTPS unless they are loopback.",{hint:"Use https://, or http://localhost for a local server."});if(t.username||t.password||t.search||t.hash)throw new l("invalid-option","The server must be an origin without credentials, query, or fragment.");return t.toString().replace(/\/+$/,"")}var u=(e,t,s)=>`/admin/credentials/${encodeURIComponent(e)}${t}${s?"?workspace":""}`,o=(e,t)=>{let s=new URLSearchParams;"cursor"in t&&typeof t.cursor=="string"&&s.set("cursor",t.cursor);for(let[n,i]of Object.entries(t))n!=="cursor"&&i!==void 0&&i!==!1&&i!==""&&s.set(n,i===!0?"1":Array.isArray(i)?i.join(","):String(i));return`${e}?${s}`},$=new Set(["completed","failed","cancelled"]),q=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,s={}){if(this.cookie="cookie"in t,this.url=e?k(e):"",!this.cookie&&!this.url)throw new l("invalid-option","Bearer clients need a server URL.");this.token="token"in t?t.token:void 0,this.fetchImpl=s.fetch??((n,i)=>fetch(n,i)),this.organization=s.organization,this.renewal=s.renewal,this.onError=s.onError}request(e,t={}){let s=this.read(e,t);return s.catch(()=>{}),s}async read(e,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let s=await this.send(e,t);s.status===401&&this.renewal&&/invalid_token/.test(s.headers.get("www-authenticate")??"")&&(this.token=await this.renewal.renew(),s=await this.send(e,t));let n=await s.text().catch(()=>""),i={},a;try{n&&s.status!==204&&(i=JSON.parse(n))}catch{if(s.ok)throw new l("server",`The server answered ${s.status} with a body that is not JSON.`);this.cookie&&n&&(a=n)}if(!s.ok){let r=new v(s.status,i.error??i.message??a??`The server answered ${s.status}.`,s.headers.get("www-authenticate")??"",i.hint);throw this.onError?.(r),r}return i}send(e,t){let s=new Headers(t.headers);return t.body&&!s.has("content-type")&&s.set("content-type","application/json"),this.cookie||s.set("authorization",`Bearer ${this.token}`),this.organization&&s.set("x-coder-organization",this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:s,...this.cookie?{credentials:"same-origin"}:{}}).catch(n=>{throw n instanceof l||n.name==="AbortError"?n:new l("server",this.url?`No Coder server answers at ${this.url}: ${n.message}`:"The server did not answer. Check the connection and try again.")})}post(e,t){return this.request(e,{method:"POST",...t!==void 0?{body:JSON.stringify(t)}:{}})}me(){return this.request("/me")}info(){return this.request("/api/auth/capabilities")}linkAccount(e){return this.post("/connect",{token:e})}signOut(){return this.post("/api/auth/sign-out",{})}agents={list:e=>this.request(o("/admin/agents",{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(o(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{}})),versions:(e,t={})=>this.request(o(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:"DELETE"}),preview:(e,t)=>this.request(o("/admin/agents/import",{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(t)}).then(s=>({id:e,version:s.version,unchanged:s.unchanged})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:"PATCH",body:JSON.stringify(t)}),import:(e,t,s)=>this.post("/admin/agents/import",{repo:e,ref:t,...s?{agents:s}:{}})};folders={list:()=>this.request("/admin/folders"),check:e=>this.post("/admin/folders/check",{path:e}),clone:e=>this.post("/admin/folders/clone",{url:e}),pick:()=>this.post("/admin/folders/pick",{})};tasks={run:e=>this.post("/admin/tasks",e),list:e=>this.request(o("/admin/tasks",{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,s)=>this.request(o(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:s})),stream:(e,t=-1,s)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:"text/event-stream"},signal:s}),events:(e,t,s)=>this.send(o("/admin/events",{tasks:e}),{headers:{accept:"text/event-stream",...t?{"last-event-id":t}:{}},signal:s}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,s={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...s}),ask:(e,t)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,s)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:s}),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:"DELETE"}),create:e=>this.post("/admin/tasks",e),wait:async(e,t={})=>{let s=-1;for(;;){let n=await this.tasks.stream(e,s);if(!n.ok||!n.body){let a=await this.tasks.get(e);if($.has(a.status))return a;if(n.status===401)continue;throw new l("server",`The task stream answered ${n.status}.`)}let i=!1;for await(let a of p(n.body))if(a.event==="log"){let r=JSON.parse(a.data);s=r.seq,t.onLog?.(r)}else a.event==="end"&&(i=!0);if(i)return this.tasks.get(e)}}};credentials={list:e=>this.request(o("/admin/credentials",e??{})),add:e=>this.post("/admin/credentials",e),remove:(e,{workspace:t}={})=>this.request(u(e,"",t),{method:"DELETE"}),setDefault:(e,{workspace:t}={})=>this.post(u(e,"/default",t)),login:e=>this.post("/admin/logins",{engine:e}),loginStatus:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:"DELETE"})};runners={list:()=>this.request("/admin/runners"),add:e=>this.post("/admin/runners",e),pair:e=>this.post("/admin/runners/pair",e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:"DELETE"})};integrations={list:()=>this.request("/admin/integrations")};repositories={list:()=>this.request("/admin/repositories")};engines={status:()=>this.request("/admin/engines/status"),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(o("/admin/apps",{agent:e})),install:(e,t)=>this.post(o(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t}))};installations={list:e=>this.request(o("/admin/installations",{agent:e}))};connections={add:e=>this.post("/admin/connections",e)};config={get:()=>this.request("/admin/config"),put:e=>this.request("/admin/config",{method:"PUT",body:JSON.stringify(e)}),patch:e=>this.request("/admin/config",{method:"PATCH",headers:{"content-type":"application/merge-patch+json"},body:JSON.stringify(e)})};models={list:()=>this.request("/admin/models"),add:e=>this.post("/admin/models",e),probe:e=>this.post("/admin/models/probe",e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:"DELETE"}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={list:()=>this.request("/admin/mcp"),add:e=>this.post("/admin/mcp",e),remove:e=>this.request(`/admin/mcp/${encodeURIComponent(e)}`,{method:"DELETE"}),search:e=>this.request(o("/admin/mcp-registry",{q:e}))};flows={list:e=>this.request(o("/admin/flows",{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(o("/admin/pulls",{repo:e}))};review(e){return this.post("/admin/review",e)}usage(e={}){return this.request(o("/admin/usage/totals",{...e,since:e.since??Date.now()-10080*60*1e3}))}usageRows(e){return this.request(o("/admin/usage",{installation:e}))}};async function*p(e){let t=new TextDecoder,s="";for await(let n of e){s+=t.decode(n,{stream:!0});let i;for(;(i=s.indexOf(`
|
|
2
|
-
|
|
3
|
-
`))>=0;){let a=s.slice(0,i);s=s.slice(i+2);let r="message",d,h=[];for(let c of a.split(`
|
|
4
|
-
`))c.startsWith("event: ")?r=c.slice(7):c.startsWith("data: ")?h.push(c.slice(6)):c.startsWith("id: ")&&(d=c.slice(4));(h.length||d)&&(yield{event:r,data:h.join(`
|
|
5
|
-
`),...d?{id:d}:{}})}}}var g=new q("",{cookie:!0},{onError(e){e.status===401&&(e.authenticate||/^Sign in/.test(e.message))&&(location.href=`/login?return=${encodeURIComponent(location.pathname+location.search)}`)}});async function y(){let{url:e}=await g.signOut();location.href=e??"/?signed_out=1"}function C(e,t){let s,n=!1,i=()=>{n||(s=setTimeout(a,t))},a=()=>{if(document.visibilityState==="hidden")return i();e().catch(()=>{}).finally(i)};return i(),()=>{n=!0,clearTimeout(s)}}import{$1a as f}from"./shared-init-8f2ac936c95a7f7b.js";var U=0;function m(e,t,s,n,i,a){t||(t={});var r,d,h=t;if("ref"in h)for(d in h={},t)d=="ref"?r=t[d]:h[d]=t[d];var c={type:e,props:h,key:s,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--U,__i:-1,__u:0,__source:i,__self:a};if(typeof e=="function"&&(r=e.defaultProps))for(d in r)h[d]===void 0&&(h[d]=r[d]);return f.vnode&&f.vnode(c),c}function I({d:e,class:t}){return m("svg",{class:t?`ic ${t}`:"ic",viewBox:"0 0 24 24","aria-hidden":"true",children:m("path",{d:e})})}function R(){return m("svg",{class:"coder-mark",viewBox:"0 0 16 16","aria-hidden":"true",children:m("path",{d:"M5 0h3v3h-3zM9 0h3v3h-3zM13 0h3v3h-3zM0 4h3v3h-3zM0 9h3v3h-3zM5 13h3v3h-3zM9 13h3v3h-3zM13 13h3v3h-3z"})})}export{p as $0a,g as $0b,y as $0c,C as $0d,I as $1a,R as $1b,m as $2a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as l}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as m,$3c as r,$3d as a,$3e as s,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as c}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:f,remountRoute:g,unmountRoute:u}=t({islands:[{id:"c-14f13b2027",Component:m},{id:"c-25298d665e",Component:n},{id:"c-3babc01746",options:{},load:()=>import("./chunks/composer-e73a0b422a64d24b.js").then(o=>o.NewTaskButton)},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:a},{id:"c-923249e4c0",Component:s},{id:"c-9ce1c87442",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-07e674d269ecdf31.js").then(o=>o.TasksList)},{id:"c-c8a05782ae",Component:l},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:p},{id:"c-f47ab4e5e0",Component:c}]});i();e()||f();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:f,unmountRoute:u});export{f as mountRoute,g as remountRoute,u as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as c}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as m,$3c as i,$3d as r,$3e as a,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as n}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:f,remountRoute:k,unmountRoute:u}=o({islands:[{id:"c-14f13b2027",Component:m},{id:"c-25298d665e",Component:t},{id:"c-5969b1fc7a",Component:i},{id:"c-7ce9086949",Component:r},{id:"c-923249e4c0",Component:a},{id:"c-c8a05782ae",Component:c},{id:"c-da29ae49dd",Component:d},{id:"c-db9a9e8b99",options:{},load:()=>import("./chunks/editor-40545d274265dd1a.js").then(l=>l.AgentEditor)},{id:"c-de2229516c",Component:s},{id:"c-f47ab4e5e0",Component:p}]});e();n()||f();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:f,unmountRoute:u});export{f as mountRoute,k as remountRoute,u as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$1c as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as r}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:i,remountRoute:p,unmountRoute:m}=o({islands:[{id:"c-25298d665e",Component:t}]});e();r()||i();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:i,unmountRoute:m});export{i as mountRoute,p as remountRoute,m as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as f}from"./chunks/composer-2c92fc6e47ca91ca.js";import"./chunks/connect-repositories-6edbbdd3d805d960.js";import"./chunks/composer-data-6f7608fed13f3dd7.js";import"./chunks/model-options-15c53331a2f28a4f.js";import"./chunks/select-dfbd5abe28b9ac3b.js";import"./chunks/task-ddfddeaf07fb684c.js";import"./chunks/card-a390b476c49de404.js";import"./chunks/field-b36938a3bc00cd3f.js";import"./chunks/format-b19b8eec331414f4.js";import{a as l}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as a,$3c as m,$3d as r,$3e as d,$3f as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as c}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as n,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:u,remountRoute:G,unmountRoute:C}=n({islands:[{id:"c-14f13b2027",Component:a},{id:"c-25298d665e",Component:t},{id:"c-39e64c0aa1",Component:f},{id:"c-5969b1fc7a",Component:m},{id:"c-7ce9086949",Component:r},{id:"c-923249e4c0",Component:d},{id:"c-aacaad48c3",options:{},load:()=>import("./chunks/connect-apps-70717f2cb7ae1e00.js").then(o=>o.ConnectApps)},{id:"c-c8a05782ae",Component:l},{id:"c-da29ae49dd",Component:s},{id:"c-de2229516c",Component:p},{id:"c-f1db9c96a4",options:{load:"visible",ssr:!0},load:()=>import("./chunks/agents-grid-ec0a1369f485e044.js").then(o=>o.AgentsGrid)},{id:"c-f47ab4e5e0",Component:c}]});i();e()||u();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:u,unmountRoute:C});export{u as mountRoute,G as remountRoute,C as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as f}from"./chunks/custom-range-80abdcdffdfe237f.js";import{a as l}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as m,$3c as a,$3d as r,$3e as s,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as c}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:u,remountRoute:G,unmountRoute:C}=t({islands:[{id:"c-14f13b2027",Component:m},{id:"c-25298d665e",Component:n},{id:"c-313ddca8c7",Component:f},{id:"c-3babc01746",options:{},load:()=>import("./chunks/composer-e73a0b422a64d24b.js").then(o=>o.NewTaskButton)},{id:"c-5969b1fc7a",Component:a},{id:"c-7ce9086949",Component:r},{id:"c-923249e4c0",Component:s},{id:"c-9ce1c87442",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-07e674d269ecdf31.js").then(o=>o.TasksList)},{id:"c-c8a05782ae",Component:l},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:p},{id:"c-f47ab4e5e0",Component:c}]});i();e()||u();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:u,unmountRoute:C});export{u as mountRoute,G as remountRoute,C as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$3b as e,$3c as r,$3d as i,$3e as a,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as m}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as n}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:c,remountRoute:S,unmountRoute:f}=o({islands:[{id:"c-14f13b2027",Component:e},{id:"c-25298d665e",Component:t},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:i},{id:"c-923249e4c0",Component:a},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:s},{id:"c-f47ab4e5e0",Component:p}]});m();n()||c();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:c,unmountRoute:f});export{c as mountRoute,S as remountRoute,f as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as f}from"./chunks/custom-range-80abdcdffdfe237f.js";import{a as c}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as e,$3c as r,$3d as i,$3e as a,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as m}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as t}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:l,remountRoute:v,unmountRoute:u}=o({islands:[{id:"c-14f13b2027",Component:e},{id:"c-25298d665e",Component:n},{id:"c-313ddca8c7",Component:f},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:i},{id:"c-923249e4c0",Component:a},{id:"c-c8a05782ae",Component:c},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:s},{id:"c-f47ab4e5e0",Component:p}]});m();t()||l();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:l,unmountRoute:u});export{l as mountRoute,v as remountRoute,u as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as c}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as i,$3c as m,$3d as r,$3e as a,$3f as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as n}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:l,remountRoute:k,unmountRoute:u}=o({islands:[{id:"c-14f13b2027",Component:i},{id:"c-25298d665e",Component:t},{id:"c-5969b1fc7a",Component:m},{id:"c-7ce9086949",Component:r},{id:"c-923249e4c0",Component:a},{id:"c-9ce1c87442",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-07e674d269ecdf31.js").then(f=>f.TasksList)},{id:"c-c8a05782ae",Component:c},{id:"c-da29ae49dd",Component:s},{id:"c-de2229516c",Component:d},{id:"c-f47ab4e5e0",Component:p}]});e();n()||l();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:l,unmountRoute:u});export{l as mountRoute,k as remountRoute,u as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as c}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as m,$3c as r,$3d as i,$3e as a,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as s}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as t}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:f,remountRoute:h,unmountRoute:l}=o({islands:[{id:"c-14f13b2027",Component:m},{id:"c-25298d665e",Component:n},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:i},{id:"c-923249e4c0",Component:a},{id:"c-c8a05782ae",Component:c},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:s},{id:"c-f47ab4e5e0",Component:p}]});e();t()||f();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:f,unmountRoute:l});export{f as mountRoute,h as remountRoute,l as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as l}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as s,$3c as r,$3d as a,$3e as m,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as c}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:u,remountRoute:v,unmountRoute:f}=t({islands:[{id:"c-14f13b2027",Component:s},{id:"c-25298d665e",Component:n},{id:"c-3babc01746",options:{},load:()=>import("./chunks/composer-e73a0b422a64d24b.js").then(o=>o.NewTaskButton)},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:a},{id:"c-923249e4c0",Component:m},{id:"c-9ce1c87442",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-07e674d269ecdf31.js").then(o=>o.TasksList)},{id:"c-a873f4add2",options:{load:"visible",ssr:!0},load:()=>import("./chunks/versions-list-714c7f458a9370fc.js").then(o=>o.VersionsList)},{id:"c-c8a05782ae",Component:l},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:p},{id:"c-e083c062db",options:{},load:()=>import("./chunks/instructions-439881899f58791f.js").then(o=>o.Instructions)},{id:"c-f47ab4e5e0",Component:c}]});e();i()||u();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:u,unmountRoute:f});export{u as mountRoute,v as remountRoute,f as unmountRoute};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as l}from"./chunks/sentinel-4c64ec1196343d0e.js";import{$3b as m,$3c as r,$3d as a,$3e as s,$3f as d}from"./chunks/shared-init-d2e3dd1b398d7232.js";import{$4g as p}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import{$0a as c}from"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-d2e3dd1b398d7232.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import"./chunks/shared-init-66a0fdc8472e9b2f.js";import{$1c as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as e}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:f,remountRoute:k,unmountRoute:u}=t({islands:[{id:"c-14f13b2027",Component:m},{id:"c-25298d665e",Component:n},{id:"c-3babc01746",options:{},load:()=>import("./chunks/composer-e73a0b422a64d24b.js").then(o=>o.NewTaskButton)},{id:"c-5969b1fc7a",Component:r},{id:"c-7ce9086949",Component:a},{id:"c-7d3529fbf1",options:{},load:()=>import("./chunks/agent-settings-form-8b9eb7a50b6353c8.js").then(o=>o.AgentSettingsForm)},{id:"c-923249e4c0",Component:s},{id:"c-9ce1c87442",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-07e674d269ecdf31.js").then(o=>o.TasksList)},{id:"c-c8a05782ae",Component:l},{id:"c-da29ae49dd",Component:d},{id:"c-de2229516c",Component:p},{id:"c-f47ab4e5e0",Component:c}]});i();e()||f();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:f,unmountRoute:u});export{f as mountRoute,k as remountRoute,u as unmountRoute};
|